aboutsummaryrefslogtreecommitdiff
path: root/nx-X11/programs/xterm
diff options
context:
space:
mode:
authorMike Gabriel <mike.gabriel@das-netzwerkteam.de>2015-02-02 15:02:49 +0100
committerMike Gabriel <mike.gabriel@das-netzwerkteam.de>2015-02-02 15:02:49 +0100
commitb16b9e4656e7199c2aec74a4c8ebc7a875d3ba73 (patch)
tree4361edef0d42d5bf5ac984ef72b4fac35426eae7 /nx-X11/programs/xterm
parent0d5a83e986f39982c0924652a3662e60b1f23162 (diff)
downloadnx-libs-b16b9e4656e7199c2aec74a4c8ebc7a875d3ba73.tar.gz
nx-libs-b16b9e4656e7199c2aec74a4c8ebc7a875d3ba73.tar.bz2
nx-libs-b16b9e4656e7199c2aec74a4c8ebc7a875d3ba73.zip
massive reduction of unneeded files
Diffstat (limited to 'nx-X11/programs/xterm')
-rw-r--r--nx-X11/programs/xterm/256colres.h250
-rw-r--r--nx-X11/programs/xterm/256colres.pl57
-rw-r--r--nx-X11/programs/xterm/88colres.h82
-rw-r--r--nx-X11/programs/xterm/88colres.pl60
-rw-r--r--nx-X11/programs/xterm/AAA_README_VMS.txt48
-rw-r--r--nx-X11/programs/xterm/INSTALL487
-rw-r--r--nx-X11/programs/xterm/Imakefile325
-rw-r--r--nx-X11/programs/xterm/Imakefile.NX.original325
-rw-r--r--nx-X11/programs/xterm/Imakefile.X.original289
-rw-r--r--nx-X11/programs/xterm/MANIFEST126
-rw-r--r--nx-X11/programs/xterm/Makefile.in243
-rw-r--r--nx-X11/programs/xterm/README15
-rw-r--r--nx-X11/programs/xterm/README.i18n199
-rw-r--r--nx-X11/programs/xterm/README.os39074
-rw-r--r--nx-X11/programs/xterm/TekPrsTbl.c2622
-rw-r--r--nx-X11/programs/xterm/Tekparse.def42
-rw-r--r--nx-X11/programs/xterm/Tekparse.h99
-rw-r--r--nx-X11/programs/xterm/Tekproc.c1782
-rw-r--r--nx-X11/programs/xterm/Tests42
-rw-r--r--nx-X11/programs/xterm/UXTerm.ad38
-rw-r--r--nx-X11/programs/xterm/VTPrsTbl.c7216
-rw-r--r--nx-X11/programs/xterm/VTparse.def142
-rw-r--r--nx-X11/programs/xterm/VTparse.h248
-rw-r--r--nx-X11/programs/xterm/XTerm-col.ad130
-rw-r--r--nx-X11/programs/xterm/XTerm.ad185
-rw-r--r--nx-X11/programs/xterm/aclocal.m42359
-rw-r--r--nx-X11/programs/xterm/button.c3284
-rw-r--r--nx-X11/programs/xterm/charclass.c142
-rw-r--r--nx-X11/programs/xterm/charclass.h13
-rw-r--r--nx-X11/programs/xterm/charproc.c7300
-rw-r--r--nx-X11/programs/xterm/charproc.c.NX.original7300
-rw-r--r--nx-X11/programs/xterm/charproc.c.X.original7276
-rw-r--r--nx-X11/programs/xterm/charsets.c461
-rw-r--r--nx-X11/programs/xterm/config.guess1499
-rw-r--r--nx-X11/programs/xterm/config.sub1577
-rw-r--r--nx-X11/programs/xterm/configure11548
-rw-r--r--nx-X11/programs/xterm/configure.in779
-rw-r--r--nx-X11/programs/xterm/ctlseqs.ms1876
-rw-r--r--nx-X11/programs/xterm/cursor.c345
-rw-r--r--nx-X11/programs/xterm/data.c127
-rw-r--r--nx-X11/programs/xterm/data.h207
-rw-r--r--nx-X11/programs/xterm/doublechr.c267
-rw-r--r--nx-X11/programs/xterm/error.h90
-rw-r--r--nx-X11/programs/xterm/fontutils.c2371
-rw-r--r--nx-X11/programs/xterm/fontutils.h89
-rwxr-xr-xnx-X11/programs/xterm/gen-pc-fkeys.pl98
-rw-r--r--nx-X11/programs/xterm/input.c1259
-rw-r--r--nx-X11/programs/xterm/install.sh294
-rw-r--r--nx-X11/programs/xterm/keysym2ucs.c857
-rw-r--r--nx-X11/programs/xterm/keysym2ucs.h9
-rw-r--r--nx-X11/programs/xterm/link_axp.com107
-rw-r--r--nx-X11/programs/xterm/main.c4943
-rw-r--r--nx-X11/programs/xterm/main.c.NX.original4943
-rw-r--r--nx-X11/programs/xterm/main.c.X.original4912
-rw-r--r--nx-X11/programs/xterm/main.h89
-rw-r--r--nx-X11/programs/xterm/make.com90
-rw-r--r--nx-X11/programs/xterm/menu.c2959
-rw-r--r--nx-X11/programs/xterm/menu.h441
-rw-r--r--nx-X11/programs/xterm/minstall.sh29
-rw-r--r--nx-X11/programs/xterm/misc.c3260
-rw-r--r--nx-X11/programs/xterm/mkdirs.sh38
-rw-r--r--nx-X11/programs/xterm/os2main.c2155
-rw-r--r--nx-X11/programs/xterm/plink.sh27
-rw-r--r--nx-X11/programs/xterm/precompose.c1041
-rw-r--r--nx-X11/programs/xterm/precompose.h11
-rw-r--r--nx-X11/programs/xterm/print.c608
-rw-r--r--nx-X11/programs/xterm/proto.h29
-rw-r--r--nx-X11/programs/xterm/ptydata.c420
-rw-r--r--nx-X11/programs/xterm/ptyx.h2016
-rw-r--r--nx-X11/programs/xterm/resize.c600
-rw-r--r--nx-X11/programs/xterm/resize.man84
-rw-r--r--nx-X11/programs/xterm/screen.c1853
-rw-r--r--nx-X11/programs/xterm/scrollbar.c682
-rw-r--r--nx-X11/programs/xterm/sinstall.sh156
-rw-r--r--nx-X11/programs/xterm/tabs.c182
-rw-r--r--nx-X11/programs/xterm/tektests/aitest.tek1
-rw-r--r--nx-X11/programs/xterm/tektests/dmerc.tek1
-rw-r--r--nx-X11/programs/xterm/tektests/fotest.tekbin16231 -> 0 bytes
-rw-r--r--nx-X11/programs/xterm/tektests/imtest.tek1
-rw-r--r--nx-X11/programs/xterm/tektests/imtesth.tek1
-rw-r--r--nx-X11/programs/xterm/tektests/ocpred.tek3
-rw-r--r--nx-X11/programs/xterm/tektests/usmap.tekbin6939 -> 0 bytes
-rw-r--r--nx-X11/programs/xterm/termcap209
-rw-r--r--nx-X11/programs/xterm/terminfo1012
-rw-r--r--nx-X11/programs/xterm/testxmc.c226
-rw-r--r--nx-X11/programs/xterm/trace.c490
-rw-r--r--nx-X11/programs/xterm/trace.h79
-rw-r--r--nx-X11/programs/xterm/unicode/README24
-rw-r--r--nx-X11/programs/xterm/unicode/convmap.pl177
-rw-r--r--nx-X11/programs/xterm/unicode/keysym.map1062
-rw-r--r--nx-X11/programs/xterm/unicode/make-precompose.sh8
-rw-r--r--nx-X11/programs/xterm/unicode/precompose.c.head16
-rw-r--r--nx-X11/programs/xterm/unicode/precompose.c.tail23
-rw-r--r--nx-X11/programs/xterm/util.c2951
-rw-r--r--nx-X11/programs/xterm/uxterm82
-rw-r--r--nx-X11/programs/xterm/version.h14
-rw-r--r--nx-X11/programs/xterm/vms.c725
-rw-r--r--nx-X11/programs/xterm/vms.h39
-rw-r--r--nx-X11/programs/xterm/vttests/16colors.sh90
-rw-r--r--nx-X11/programs/xterm/vttests/256colors.pl12
-rw-r--r--nx-X11/programs/xterm/vttests/256colors2.pl63
-rw-r--r--nx-X11/programs/xterm/vttests/88colors.pl13
-rw-r--r--nx-X11/programs/xterm/vttests/88colors2.pl66
-rw-r--r--nx-X11/programs/xterm/vttests/8colors.sh78
-rw-r--r--nx-X11/programs/xterm/vttests/acolors.sh64
-rw-r--r--nx-X11/programs/xterm/vttests/doublechars.sh87
-rw-r--r--nx-X11/programs/xterm/vttests/dynamic.sh60
-rw-r--r--nx-X11/programs/xterm/vttests/fonts.sh59
-rwxr-xr-xnx-X11/programs/xterm/vttests/resize.pl100
-rw-r--r--nx-X11/programs/xterm/vttests/resize.sh82
-rwxr-xr-xnx-X11/programs/xterm/vttests/tcapquery.pl162
-rw-r--r--nx-X11/programs/xterm/vttests/title.sh55
-rw-r--r--nx-X11/programs/xterm/wcwidth.c306
-rw-r--r--nx-X11/programs/xterm/wcwidth.h14
-rw-r--r--nx-X11/programs/xterm/xcharmouse.h76
-rw-r--r--nx-X11/programs/xterm/xstrings.c146
-rw-r--r--nx-X11/programs/xterm/xstrings.h44
-rw-r--r--nx-X11/programs/xterm/xterm.dat160
-rw-r--r--nx-X11/programs/xterm/xterm.h1101
-rw-r--r--nx-X11/programs/xterm/xterm.log.html6641
-rw-r--r--nx-X11/programs/xterm/xterm.man4418
-rw-r--r--nx-X11/programs/xterm/xterm_axp.opt28
-rw-r--r--nx-X11/programs/xterm/xterm_io.h309
-rw-r--r--nx-X11/programs/xterm/xtermcfg.hin176
-rw-r--r--nx-X11/programs/xterm/xutf8.c378
-rw-r--r--nx-X11/programs/xterm/xutf8.h61
126 files changed, 0 insertions, 120221 deletions
diff --git a/nx-X11/programs/xterm/256colres.h b/nx-X11/programs/xterm/256colres.h
deleted file mode 100644
index a84acd588..000000000
--- a/nx-X11/programs/xterm/256colres.h
+++ /dev/null
@@ -1,250 +0,0 @@
-/*
- * This header file was generated by ./256colres.pl
- */
-/* $XFree86: xc/programs/xterm/256colres.h,v 1.5 2002/10/05 17:57:11 dickey Exp $ */
-
-#ifndef included_256colres_h
-#define included_256colres_h
-
-COLOR_RES("16", screen.Acolors[16], DFT_COLOR("rgb:00/00/00")),
-COLOR_RES("17", screen.Acolors[17], DFT_COLOR("rgb:00/00/5f")),
-COLOR_RES("18", screen.Acolors[18], DFT_COLOR("rgb:00/00/87")),
-COLOR_RES("19", screen.Acolors[19], DFT_COLOR("rgb:00/00/af")),
-COLOR_RES("20", screen.Acolors[20], DFT_COLOR("rgb:00/00/d7")),
-COLOR_RES("21", screen.Acolors[21], DFT_COLOR("rgb:00/00/ff")),
-COLOR_RES("22", screen.Acolors[22], DFT_COLOR("rgb:00/5f/00")),
-COLOR_RES("23", screen.Acolors[23], DFT_COLOR("rgb:00/5f/5f")),
-COLOR_RES("24", screen.Acolors[24], DFT_COLOR("rgb:00/5f/87")),
-COLOR_RES("25", screen.Acolors[25], DFT_COLOR("rgb:00/5f/af")),
-COLOR_RES("26", screen.Acolors[26], DFT_COLOR("rgb:00/5f/d7")),
-COLOR_RES("27", screen.Acolors[27], DFT_COLOR("rgb:00/5f/ff")),
-COLOR_RES("28", screen.Acolors[28], DFT_COLOR("rgb:00/87/00")),
-COLOR_RES("29", screen.Acolors[29], DFT_COLOR("rgb:00/87/5f")),
-COLOR_RES("30", screen.Acolors[30], DFT_COLOR("rgb:00/87/87")),
-COLOR_RES("31", screen.Acolors[31], DFT_COLOR("rgb:00/87/af")),
-COLOR_RES("32", screen.Acolors[32], DFT_COLOR("rgb:00/87/d7")),
-COLOR_RES("33", screen.Acolors[33], DFT_COLOR("rgb:00/87/ff")),
-COLOR_RES("34", screen.Acolors[34], DFT_COLOR("rgb:00/af/00")),
-COLOR_RES("35", screen.Acolors[35], DFT_COLOR("rgb:00/af/5f")),
-COLOR_RES("36", screen.Acolors[36], DFT_COLOR("rgb:00/af/87")),
-COLOR_RES("37", screen.Acolors[37], DFT_COLOR("rgb:00/af/af")),
-COLOR_RES("38", screen.Acolors[38], DFT_COLOR("rgb:00/af/d7")),
-COLOR_RES("39", screen.Acolors[39], DFT_COLOR("rgb:00/af/ff")),
-COLOR_RES("40", screen.Acolors[40], DFT_COLOR("rgb:00/d7/00")),
-COLOR_RES("41", screen.Acolors[41], DFT_COLOR("rgb:00/d7/5f")),
-COLOR_RES("42", screen.Acolors[42], DFT_COLOR("rgb:00/d7/87")),
-COLOR_RES("43", screen.Acolors[43], DFT_COLOR("rgb:00/d7/af")),
-COLOR_RES("44", screen.Acolors[44], DFT_COLOR("rgb:00/d7/d7")),
-COLOR_RES("45", screen.Acolors[45], DFT_COLOR("rgb:00/d7/ff")),
-COLOR_RES("46", screen.Acolors[46], DFT_COLOR("rgb:00/ff/00")),
-COLOR_RES("47", screen.Acolors[47], DFT_COLOR("rgb:00/ff/5f")),
-COLOR_RES("48", screen.Acolors[48], DFT_COLOR("rgb:00/ff/87")),
-COLOR_RES("49", screen.Acolors[49], DFT_COLOR("rgb:00/ff/af")),
-COLOR_RES("50", screen.Acolors[50], DFT_COLOR("rgb:00/ff/d7")),
-COLOR_RES("51", screen.Acolors[51], DFT_COLOR("rgb:00/ff/ff")),
-COLOR_RES("52", screen.Acolors[52], DFT_COLOR("rgb:5f/00/00")),
-COLOR_RES("53", screen.Acolors[53], DFT_COLOR("rgb:5f/00/5f")),
-COLOR_RES("54", screen.Acolors[54], DFT_COLOR("rgb:5f/00/87")),
-COLOR_RES("55", screen.Acolors[55], DFT_COLOR("rgb:5f/00/af")),
-COLOR_RES("56", screen.Acolors[56], DFT_COLOR("rgb:5f/00/d7")),
-COLOR_RES("57", screen.Acolors[57], DFT_COLOR("rgb:5f/00/ff")),
-COLOR_RES("58", screen.Acolors[58], DFT_COLOR("rgb:5f/5f/00")),
-COLOR_RES("59", screen.Acolors[59], DFT_COLOR("rgb:5f/5f/5f")),
-COLOR_RES("60", screen.Acolors[60], DFT_COLOR("rgb:5f/5f/87")),
-COLOR_RES("61", screen.Acolors[61], DFT_COLOR("rgb:5f/5f/af")),
-COLOR_RES("62", screen.Acolors[62], DFT_COLOR("rgb:5f/5f/d7")),
-COLOR_RES("63", screen.Acolors[63], DFT_COLOR("rgb:5f/5f/ff")),
-COLOR_RES("64", screen.Acolors[64], DFT_COLOR("rgb:5f/87/00")),
-COLOR_RES("65", screen.Acolors[65], DFT_COLOR("rgb:5f/87/5f")),
-COLOR_RES("66", screen.Acolors[66], DFT_COLOR("rgb:5f/87/87")),
-COLOR_RES("67", screen.Acolors[67], DFT_COLOR("rgb:5f/87/af")),
-COLOR_RES("68", screen.Acolors[68], DFT_COLOR("rgb:5f/87/d7")),
-COLOR_RES("69", screen.Acolors[69], DFT_COLOR("rgb:5f/87/ff")),
-COLOR_RES("70", screen.Acolors[70], DFT_COLOR("rgb:5f/af/00")),
-COLOR_RES("71", screen.Acolors[71], DFT_COLOR("rgb:5f/af/5f")),
-COLOR_RES("72", screen.Acolors[72], DFT_COLOR("rgb:5f/af/87")),
-COLOR_RES("73", screen.Acolors[73], DFT_COLOR("rgb:5f/af/af")),
-COLOR_RES("74", screen.Acolors[74], DFT_COLOR("rgb:5f/af/d7")),
-COLOR_RES("75", screen.Acolors[75], DFT_COLOR("rgb:5f/af/ff")),
-COLOR_RES("76", screen.Acolors[76], DFT_COLOR("rgb:5f/d7/00")),
-COLOR_RES("77", screen.Acolors[77], DFT_COLOR("rgb:5f/d7/5f")),
-COLOR_RES("78", screen.Acolors[78], DFT_COLOR("rgb:5f/d7/87")),
-COLOR_RES("79", screen.Acolors[79], DFT_COLOR("rgb:5f/d7/af")),
-COLOR_RES("80", screen.Acolors[80], DFT_COLOR("rgb:5f/d7/d7")),
-COLOR_RES("81", screen.Acolors[81], DFT_COLOR("rgb:5f/d7/ff")),
-COLOR_RES("82", screen.Acolors[82], DFT_COLOR("rgb:5f/ff/00")),
-COLOR_RES("83", screen.Acolors[83], DFT_COLOR("rgb:5f/ff/5f")),
-COLOR_RES("84", screen.Acolors[84], DFT_COLOR("rgb:5f/ff/87")),
-COLOR_RES("85", screen.Acolors[85], DFT_COLOR("rgb:5f/ff/af")),
-COLOR_RES("86", screen.Acolors[86], DFT_COLOR("rgb:5f/ff/d7")),
-COLOR_RES("87", screen.Acolors[87], DFT_COLOR("rgb:5f/ff/ff")),
-COLOR_RES("88", screen.Acolors[88], DFT_COLOR("rgb:87/00/00")),
-COLOR_RES("89", screen.Acolors[89], DFT_COLOR("rgb:87/00/5f")),
-COLOR_RES("90", screen.Acolors[90], DFT_COLOR("rgb:87/00/87")),
-COLOR_RES("91", screen.Acolors[91], DFT_COLOR("rgb:87/00/af")),
-COLOR_RES("92", screen.Acolors[92], DFT_COLOR("rgb:87/00/d7")),
-COLOR_RES("93", screen.Acolors[93], DFT_COLOR("rgb:87/00/ff")),
-COLOR_RES("94", screen.Acolors[94], DFT_COLOR("rgb:87/5f/00")),
-COLOR_RES("95", screen.Acolors[95], DFT_COLOR("rgb:87/5f/5f")),
-COLOR_RES("96", screen.Acolors[96], DFT_COLOR("rgb:87/5f/87")),
-COLOR_RES("97", screen.Acolors[97], DFT_COLOR("rgb:87/5f/af")),
-COLOR_RES("98", screen.Acolors[98], DFT_COLOR("rgb:87/5f/d7")),
-COLOR_RES("99", screen.Acolors[99], DFT_COLOR("rgb:87/5f/ff")),
-COLOR_RES("100", screen.Acolors[100], DFT_COLOR("rgb:87/87/00")),
-COLOR_RES("101", screen.Acolors[101], DFT_COLOR("rgb:87/87/5f")),
-COLOR_RES("102", screen.Acolors[102], DFT_COLOR("rgb:87/87/87")),
-COLOR_RES("103", screen.Acolors[103], DFT_COLOR("rgb:87/87/af")),
-COLOR_RES("104", screen.Acolors[104], DFT_COLOR("rgb:87/87/d7")),
-COLOR_RES("105", screen.Acolors[105], DFT_COLOR("rgb:87/87/ff")),
-COLOR_RES("106", screen.Acolors[106], DFT_COLOR("rgb:87/af/00")),
-COLOR_RES("107", screen.Acolors[107], DFT_COLOR("rgb:87/af/5f")),
-COLOR_RES("108", screen.Acolors[108], DFT_COLOR("rgb:87/af/87")),
-COLOR_RES("109", screen.Acolors[109], DFT_COLOR("rgb:87/af/af")),
-COLOR_RES("110", screen.Acolors[110], DFT_COLOR("rgb:87/af/d7")),
-COLOR_RES("111", screen.Acolors[111], DFT_COLOR("rgb:87/af/ff")),
-COLOR_RES("112", screen.Acolors[112], DFT_COLOR("rgb:87/d7/00")),
-COLOR_RES("113", screen.Acolors[113], DFT_COLOR("rgb:87/d7/5f")),
-COLOR_RES("114", screen.Acolors[114], DFT_COLOR("rgb:87/d7/87")),
-COLOR_RES("115", screen.Acolors[115], DFT_COLOR("rgb:87/d7/af")),
-COLOR_RES("116", screen.Acolors[116], DFT_COLOR("rgb:87/d7/d7")),
-COLOR_RES("117", screen.Acolors[117], DFT_COLOR("rgb:87/d7/ff")),
-COLOR_RES("118", screen.Acolors[118], DFT_COLOR("rgb:87/ff/00")),
-COLOR_RES("119", screen.Acolors[119], DFT_COLOR("rgb:87/ff/5f")),
-COLOR_RES("120", screen.Acolors[120], DFT_COLOR("rgb:87/ff/87")),
-COLOR_RES("121", screen.Acolors[121], DFT_COLOR("rgb:87/ff/af")),
-COLOR_RES("122", screen.Acolors[122], DFT_COLOR("rgb:87/ff/d7")),
-COLOR_RES("123", screen.Acolors[123], DFT_COLOR("rgb:87/ff/ff")),
-COLOR_RES("124", screen.Acolors[124], DFT_COLOR("rgb:af/00/00")),
-COLOR_RES("125", screen.Acolors[125], DFT_COLOR("rgb:af/00/5f")),
-COLOR_RES("126", screen.Acolors[126], DFT_COLOR("rgb:af/00/87")),
-COLOR_RES("127", screen.Acolors[127], DFT_COLOR("rgb:af/00/af")),
-COLOR_RES("128", screen.Acolors[128], DFT_COLOR("rgb:af/00/d7")),
-COLOR_RES("129", screen.Acolors[129], DFT_COLOR("rgb:af/00/ff")),
-COLOR_RES("130", screen.Acolors[130], DFT_COLOR("rgb:af/5f/00")),
-COLOR_RES("131", screen.Acolors[131], DFT_COLOR("rgb:af/5f/5f")),
-COLOR_RES("132", screen.Acolors[132], DFT_COLOR("rgb:af/5f/87")),
-COLOR_RES("133", screen.Acolors[133], DFT_COLOR("rgb:af/5f/af")),
-COLOR_RES("134", screen.Acolors[134], DFT_COLOR("rgb:af/5f/d7")),
-COLOR_RES("135", screen.Acolors[135], DFT_COLOR("rgb:af/5f/ff")),
-COLOR_RES("136", screen.Acolors[136], DFT_COLOR("rgb:af/87/00")),
-COLOR_RES("137", screen.Acolors[137], DFT_COLOR("rgb:af/87/5f")),
-COLOR_RES("138", screen.Acolors[138], DFT_COLOR("rgb:af/87/87")),
-COLOR_RES("139", screen.Acolors[139], DFT_COLOR("rgb:af/87/af")),
-COLOR_RES("140", screen.Acolors[140], DFT_COLOR("rgb:af/87/d7")),
-COLOR_RES("141", screen.Acolors[141], DFT_COLOR("rgb:af/87/ff")),
-COLOR_RES("142", screen.Acolors[142], DFT_COLOR("rgb:af/af/00")),
-COLOR_RES("143", screen.Acolors[143], DFT_COLOR("rgb:af/af/5f")),
-COLOR_RES("144", screen.Acolors[144], DFT_COLOR("rgb:af/af/87")),
-COLOR_RES("145", screen.Acolors[145], DFT_COLOR("rgb:af/af/af")),
-COLOR_RES("146", screen.Acolors[146], DFT_COLOR("rgb:af/af/d7")),
-COLOR_RES("147", screen.Acolors[147], DFT_COLOR("rgb:af/af/ff")),
-COLOR_RES("148", screen.Acolors[148], DFT_COLOR("rgb:af/d7/00")),
-COLOR_RES("149", screen.Acolors[149], DFT_COLOR("rgb:af/d7/5f")),
-COLOR_RES("150", screen.Acolors[150], DFT_COLOR("rgb:af/d7/87")),
-COLOR_RES("151", screen.Acolors[151], DFT_COLOR("rgb:af/d7/af")),
-COLOR_RES("152", screen.Acolors[152], DFT_COLOR("rgb:af/d7/d7")),
-COLOR_RES("153", screen.Acolors[153], DFT_COLOR("rgb:af/d7/ff")),
-COLOR_RES("154", screen.Acolors[154], DFT_COLOR("rgb:af/ff/00")),
-COLOR_RES("155", screen.Acolors[155], DFT_COLOR("rgb:af/ff/5f")),
-COLOR_RES("156", screen.Acolors[156], DFT_COLOR("rgb:af/ff/87")),
-COLOR_RES("157", screen.Acolors[157], DFT_COLOR("rgb:af/ff/af")),
-COLOR_RES("158", screen.Acolors[158], DFT_COLOR("rgb:af/ff/d7")),
-COLOR_RES("159", screen.Acolors[159], DFT_COLOR("rgb:af/ff/ff")),
-COLOR_RES("160", screen.Acolors[160], DFT_COLOR("rgb:d7/00/00")),
-COLOR_RES("161", screen.Acolors[161], DFT_COLOR("rgb:d7/00/5f")),
-COLOR_RES("162", screen.Acolors[162], DFT_COLOR("rgb:d7/00/87")),
-COLOR_RES("163", screen.Acolors[163], DFT_COLOR("rgb:d7/00/af")),
-COLOR_RES("164", screen.Acolors[164], DFT_COLOR("rgb:d7/00/d7")),
-COLOR_RES("165", screen.Acolors[165], DFT_COLOR("rgb:d7/00/ff")),
-COLOR_RES("166", screen.Acolors[166], DFT_COLOR("rgb:d7/5f/00")),
-COLOR_RES("167", screen.Acolors[167], DFT_COLOR("rgb:d7/5f/5f")),
-COLOR_RES("168", screen.Acolors[168], DFT_COLOR("rgb:d7/5f/87")),
-COLOR_RES("169", screen.Acolors[169], DFT_COLOR("rgb:d7/5f/af")),
-COLOR_RES("170", screen.Acolors[170], DFT_COLOR("rgb:d7/5f/d7")),
-COLOR_RES("171", screen.Acolors[171], DFT_COLOR("rgb:d7/5f/ff")),
-COLOR_RES("172", screen.Acolors[172], DFT_COLOR("rgb:d7/87/00")),
-COLOR_RES("173", screen.Acolors[173], DFT_COLOR("rgb:d7/87/5f")),
-COLOR_RES("174", screen.Acolors[174], DFT_COLOR("rgb:d7/87/87")),
-COLOR_RES("175", screen.Acolors[175], DFT_COLOR("rgb:d7/87/af")),
-COLOR_RES("176", screen.Acolors[176], DFT_COLOR("rgb:d7/87/d7")),
-COLOR_RES("177", screen.Acolors[177], DFT_COLOR("rgb:d7/87/ff")),
-COLOR_RES("178", screen.Acolors[178], DFT_COLOR("rgb:d7/af/00")),
-COLOR_RES("179", screen.Acolors[179], DFT_COLOR("rgb:d7/af/5f")),
-COLOR_RES("180", screen.Acolors[180], DFT_COLOR("rgb:d7/af/87")),
-COLOR_RES("181", screen.Acolors[181], DFT_COLOR("rgb:d7/af/af")),
-COLOR_RES("182", screen.Acolors[182], DFT_COLOR("rgb:d7/af/d7")),
-COLOR_RES("183", screen.Acolors[183], DFT_COLOR("rgb:d7/af/ff")),
-COLOR_RES("184", screen.Acolors[184], DFT_COLOR("rgb:d7/d7/00")),
-COLOR_RES("185", screen.Acolors[185], DFT_COLOR("rgb:d7/d7/5f")),
-COLOR_RES("186", screen.Acolors[186], DFT_COLOR("rgb:d7/d7/87")),
-COLOR_RES("187", screen.Acolors[187], DFT_COLOR("rgb:d7/d7/af")),
-COLOR_RES("188", screen.Acolors[188], DFT_COLOR("rgb:d7/d7/d7")),
-COLOR_RES("189", screen.Acolors[189], DFT_COLOR("rgb:d7/d7/ff")),
-COLOR_RES("190", screen.Acolors[190], DFT_COLOR("rgb:d7/ff/00")),
-COLOR_RES("191", screen.Acolors[191], DFT_COLOR("rgb:d7/ff/5f")),
-COLOR_RES("192", screen.Acolors[192], DFT_COLOR("rgb:d7/ff/87")),
-COLOR_RES("193", screen.Acolors[193], DFT_COLOR("rgb:d7/ff/af")),
-COLOR_RES("194", screen.Acolors[194], DFT_COLOR("rgb:d7/ff/d7")),
-COLOR_RES("195", screen.Acolors[195], DFT_COLOR("rgb:d7/ff/ff")),
-COLOR_RES("196", screen.Acolors[196], DFT_COLOR("rgb:ff/00/00")),
-COLOR_RES("197", screen.Acolors[197], DFT_COLOR("rgb:ff/00/5f")),
-COLOR_RES("198", screen.Acolors[198], DFT_COLOR("rgb:ff/00/87")),
-COLOR_RES("199", screen.Acolors[199], DFT_COLOR("rgb:ff/00/af")),
-COLOR_RES("200", screen.Acolors[200], DFT_COLOR("rgb:ff/00/d7")),
-COLOR_RES("201", screen.Acolors[201], DFT_COLOR("rgb:ff/00/ff")),
-COLOR_RES("202", screen.Acolors[202], DFT_COLOR("rgb:ff/5f/00")),
-COLOR_RES("203", screen.Acolors[203], DFT_COLOR("rgb:ff/5f/5f")),
-COLOR_RES("204", screen.Acolors[204], DFT_COLOR("rgb:ff/5f/87")),
-COLOR_RES("205", screen.Acolors[205], DFT_COLOR("rgb:ff/5f/af")),
-COLOR_RES("206", screen.Acolors[206], DFT_COLOR("rgb:ff/5f/d7")),
-COLOR_RES("207", screen.Acolors[207], DFT_COLOR("rgb:ff/5f/ff")),
-COLOR_RES("208", screen.Acolors[208], DFT_COLOR("rgb:ff/87/00")),
-COLOR_RES("209", screen.Acolors[209], DFT_COLOR("rgb:ff/87/5f")),
-COLOR_RES("210", screen.Acolors[210], DFT_COLOR("rgb:ff/87/87")),
-COLOR_RES("211", screen.Acolors[211], DFT_COLOR("rgb:ff/87/af")),
-COLOR_RES("212", screen.Acolors[212], DFT_COLOR("rgb:ff/87/d7")),
-COLOR_RES("213", screen.Acolors[213], DFT_COLOR("rgb:ff/87/ff")),
-COLOR_RES("214", screen.Acolors[214], DFT_COLOR("rgb:ff/af/00")),
-COLOR_RES("215", screen.Acolors[215], DFT_COLOR("rgb:ff/af/5f")),
-COLOR_RES("216", screen.Acolors[216], DFT_COLOR("rgb:ff/af/87")),
-COLOR_RES("217", screen.Acolors[217], DFT_COLOR("rgb:ff/af/af")),
-COLOR_RES("218", screen.Acolors[218], DFT_COLOR("rgb:ff/af/d7")),
-COLOR_RES("219", screen.Acolors[219], DFT_COLOR("rgb:ff/af/ff")),
-COLOR_RES("220", screen.Acolors[220], DFT_COLOR("rgb:ff/d7/00")),
-COLOR_RES("221", screen.Acolors[221], DFT_COLOR("rgb:ff/d7/5f")),
-COLOR_RES("222", screen.Acolors[222], DFT_COLOR("rgb:ff/d7/87")),
-COLOR_RES("223", screen.Acolors[223], DFT_COLOR("rgb:ff/d7/af")),
-COLOR_RES("224", screen.Acolors[224], DFT_COLOR("rgb:ff/d7/d7")),
-COLOR_RES("225", screen.Acolors[225], DFT_COLOR("rgb:ff/d7/ff")),
-COLOR_RES("226", screen.Acolors[226], DFT_COLOR("rgb:ff/ff/00")),
-COLOR_RES("227", screen.Acolors[227], DFT_COLOR("rgb:ff/ff/5f")),
-COLOR_RES("228", screen.Acolors[228], DFT_COLOR("rgb:ff/ff/87")),
-COLOR_RES("229", screen.Acolors[229], DFT_COLOR("rgb:ff/ff/af")),
-COLOR_RES("230", screen.Acolors[230], DFT_COLOR("rgb:ff/ff/d7")),
-COLOR_RES("231", screen.Acolors[231], DFT_COLOR("rgb:ff/ff/ff")),
-COLOR_RES("232", screen.Acolors[232], DFT_COLOR("rgb:08/08/08")),
-COLOR_RES("233", screen.Acolors[233], DFT_COLOR("rgb:12/12/12")),
-COLOR_RES("234", screen.Acolors[234], DFT_COLOR("rgb:1c/1c/1c")),
-COLOR_RES("235", screen.Acolors[235], DFT_COLOR("rgb:26/26/26")),
-COLOR_RES("236", screen.Acolors[236], DFT_COLOR("rgb:30/30/30")),
-COLOR_RES("237", screen.Acolors[237], DFT_COLOR("rgb:3a/3a/3a")),
-COLOR_RES("238", screen.Acolors[238], DFT_COLOR("rgb:44/44/44")),
-COLOR_RES("239", screen.Acolors[239], DFT_COLOR("rgb:4e/4e/4e")),
-COLOR_RES("240", screen.Acolors[240], DFT_COLOR("rgb:58/58/58")),
-COLOR_RES("241", screen.Acolors[241], DFT_COLOR("rgb:62/62/62")),
-COLOR_RES("242", screen.Acolors[242], DFT_COLOR("rgb:6c/6c/6c")),
-COLOR_RES("243", screen.Acolors[243], DFT_COLOR("rgb:76/76/76")),
-COLOR_RES("244", screen.Acolors[244], DFT_COLOR("rgb:80/80/80")),
-COLOR_RES("245", screen.Acolors[245], DFT_COLOR("rgb:8a/8a/8a")),
-COLOR_RES("246", screen.Acolors[246], DFT_COLOR("rgb:94/94/94")),
-COLOR_RES("247", screen.Acolors[247], DFT_COLOR("rgb:9e/9e/9e")),
-COLOR_RES("248", screen.Acolors[248], DFT_COLOR("rgb:a8/a8/a8")),
-COLOR_RES("249", screen.Acolors[249], DFT_COLOR("rgb:b2/b2/b2")),
-COLOR_RES("250", screen.Acolors[250], DFT_COLOR("rgb:bc/bc/bc")),
-COLOR_RES("251", screen.Acolors[251], DFT_COLOR("rgb:c6/c6/c6")),
-COLOR_RES("252", screen.Acolors[252], DFT_COLOR("rgb:d0/d0/d0")),
-COLOR_RES("253", screen.Acolors[253], DFT_COLOR("rgb:da/da/da")),
-COLOR_RES("254", screen.Acolors[254], DFT_COLOR("rgb:e4/e4/e4")),
-COLOR_RES("255", screen.Acolors[255], DFT_COLOR("rgb:ee/ee/ee")),
-
-#endif /* included_256colres_h */
diff --git a/nx-X11/programs/xterm/256colres.pl b/nx-X11/programs/xterm/256colres.pl
deleted file mode 100644
index a6b995e48..000000000
--- a/nx-X11/programs/xterm/256colres.pl
+++ /dev/null
@@ -1,57 +0,0 @@
-#! /usr/bin/perl
-# Author: Thomas E. Dickey
-# $XFree86: xc/programs/xterm/256colres.pl,v 1.8 2002/10/05 17:57:11 dickey Exp $
-
-# Construct a header file defining default resources for the 256-color model
-# of xterm. This is modeled after the 256colors2.pl script.
-
-# use the resources for colors 0-15 - usually more-or-less a
-# reproduction of the standard ANSI colors, but possibly more
-# pleasing shades
-
-print <<EOF;
-/*
- * This header file was generated by $0
- */
-/* \$XFree86\$ */
-
-#ifndef included_256colres_h
-#define included_256colres_h
-
-EOF
-
-$line1="COLOR_RES(\"%d\",";
-$line2="\tscreen.Acolors[%d],";
-$line3="\tDFT_COLOR(\"rgb:%2.2x/%2.2x/%2.2x\")),\n";
-
-# colors 16-231 are a 6x6x6 color cube
-for ($red = 0; $red < 6; $red++) {
- for ($green = 0; $green < 6; $green++) {
- for ($blue = 0; $blue < 6; $blue++) {
- $code = 16 + ($red * 36) + ($green * 6) + $blue;
- printf($line1, $code);
- printf($line2, $code);
- printf($line3,
- ($red ? ($red * 40 + 55) : 0),
- ($green ? ($green * 40 + 55) : 0),
- ($blue ? ($blue * 40 + 55) : 0));
- }
- }
-}
-
-# colors 232-255 are a grayscale ramp, intentionally leaving out
-# black and white
-$code=232;
-for ($gray = 0; $gray < 24; $gray++) {
- $level = ($gray * 10) + 8;
- $code = 232 + $gray;
- printf($line1, $code);
- printf($line2, $code);
- printf($line3,
- $level, $level, $level);
-}
-
-print <<EOF;
-
-#endif /* included_256colres_h */
-EOF
diff --git a/nx-X11/programs/xterm/88colres.h b/nx-X11/programs/xterm/88colres.h
deleted file mode 100644
index 94f428bdc..000000000
--- a/nx-X11/programs/xterm/88colres.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * This header file was generated by ./88colres.pl
- */
-/* $XFree86: xc/programs/xterm/88colres.h,v 1.4 2002/10/05 17:57:11 dickey Exp $ */
-
-#ifndef included_88colres_h
-#define included_88colres_h
-
-COLOR_RES("16", screen.Acolors[16], DFT_COLOR("rgb:00/00/00")),
-COLOR_RES("17", screen.Acolors[17], DFT_COLOR("rgb:00/00/8b")),
-COLOR_RES("18", screen.Acolors[18], DFT_COLOR("rgb:00/00/cd")),
-COLOR_RES("19", screen.Acolors[19], DFT_COLOR("rgb:00/00/ff")),
-COLOR_RES("20", screen.Acolors[20], DFT_COLOR("rgb:00/8b/00")),
-COLOR_RES("21", screen.Acolors[21], DFT_COLOR("rgb:00/8b/8b")),
-COLOR_RES("22", screen.Acolors[22], DFT_COLOR("rgb:00/8b/cd")),
-COLOR_RES("23", screen.Acolors[23], DFT_COLOR("rgb:00/8b/ff")),
-COLOR_RES("24", screen.Acolors[24], DFT_COLOR("rgb:00/cd/00")),
-COLOR_RES("25", screen.Acolors[25], DFT_COLOR("rgb:00/cd/8b")),
-COLOR_RES("26", screen.Acolors[26], DFT_COLOR("rgb:00/cd/cd")),
-COLOR_RES("27", screen.Acolors[27], DFT_COLOR("rgb:00/cd/ff")),
-COLOR_RES("28", screen.Acolors[28], DFT_COLOR("rgb:00/ff/00")),
-COLOR_RES("29", screen.Acolors[29], DFT_COLOR("rgb:00/ff/8b")),
-COLOR_RES("30", screen.Acolors[30], DFT_COLOR("rgb:00/ff/cd")),
-COLOR_RES("31", screen.Acolors[31], DFT_COLOR("rgb:00/ff/ff")),
-COLOR_RES("32", screen.Acolors[32], DFT_COLOR("rgb:8b/00/00")),
-COLOR_RES("33", screen.Acolors[33], DFT_COLOR("rgb:8b/00/8b")),
-COLOR_RES("34", screen.Acolors[34], DFT_COLOR("rgb:8b/00/cd")),
-COLOR_RES("35", screen.Acolors[35], DFT_COLOR("rgb:8b/00/ff")),
-COLOR_RES("36", screen.Acolors[36], DFT_COLOR("rgb:8b/8b/00")),
-COLOR_RES("37", screen.Acolors[37], DFT_COLOR("rgb:8b/8b/8b")),
-COLOR_RES("38", screen.Acolors[38], DFT_COLOR("rgb:8b/8b/cd")),
-COLOR_RES("39", screen.Acolors[39], DFT_COLOR("rgb:8b/8b/ff")),
-COLOR_RES("40", screen.Acolors[40], DFT_COLOR("rgb:8b/cd/00")),
-COLOR_RES("41", screen.Acolors[41], DFT_COLOR("rgb:8b/cd/8b")),
-COLOR_RES("42", screen.Acolors[42], DFT_COLOR("rgb:8b/cd/cd")),
-COLOR_RES("43", screen.Acolors[43], DFT_COLOR("rgb:8b/cd/ff")),
-COLOR_RES("44", screen.Acolors[44], DFT_COLOR("rgb:8b/ff/00")),
-COLOR_RES("45", screen.Acolors[45], DFT_COLOR("rgb:8b/ff/8b")),
-COLOR_RES("46", screen.Acolors[46], DFT_COLOR("rgb:8b/ff/cd")),
-COLOR_RES("47", screen.Acolors[47], DFT_COLOR("rgb:8b/ff/ff")),
-COLOR_RES("48", screen.Acolors[48], DFT_COLOR("rgb:cd/00/00")),
-COLOR_RES("49", screen.Acolors[49], DFT_COLOR("rgb:cd/00/8b")),
-COLOR_RES("50", screen.Acolors[50], DFT_COLOR("rgb:cd/00/cd")),
-COLOR_RES("51", screen.Acolors[51], DFT_COLOR("rgb:cd/00/ff")),
-COLOR_RES("52", screen.Acolors[52], DFT_COLOR("rgb:cd/8b/00")),
-COLOR_RES("53", screen.Acolors[53], DFT_COLOR("rgb:cd/8b/8b")),
-COLOR_RES("54", screen.Acolors[54], DFT_COLOR("rgb:cd/8b/cd")),
-COLOR_RES("55", screen.Acolors[55], DFT_COLOR("rgb:cd/8b/ff")),
-COLOR_RES("56", screen.Acolors[56], DFT_COLOR("rgb:cd/cd/00")),
-COLOR_RES("57", screen.Acolors[57], DFT_COLOR("rgb:cd/cd/8b")),
-COLOR_RES("58", screen.Acolors[58], DFT_COLOR("rgb:cd/cd/cd")),
-COLOR_RES("59", screen.Acolors[59], DFT_COLOR("rgb:cd/cd/ff")),
-COLOR_RES("60", screen.Acolors[60], DFT_COLOR("rgb:cd/ff/00")),
-COLOR_RES("61", screen.Acolors[61], DFT_COLOR("rgb:cd/ff/8b")),
-COLOR_RES("62", screen.Acolors[62], DFT_COLOR("rgb:cd/ff/cd")),
-COLOR_RES("63", screen.Acolors[63], DFT_COLOR("rgb:cd/ff/ff")),
-COLOR_RES("64", screen.Acolors[64], DFT_COLOR("rgb:ff/00/00")),
-COLOR_RES("65", screen.Acolors[65], DFT_COLOR("rgb:ff/00/8b")),
-COLOR_RES("66", screen.Acolors[66], DFT_COLOR("rgb:ff/00/cd")),
-COLOR_RES("67", screen.Acolors[67], DFT_COLOR("rgb:ff/00/ff")),
-COLOR_RES("68", screen.Acolors[68], DFT_COLOR("rgb:ff/8b/00")),
-COLOR_RES("69", screen.Acolors[69], DFT_COLOR("rgb:ff/8b/8b")),
-COLOR_RES("70", screen.Acolors[70], DFT_COLOR("rgb:ff/8b/cd")),
-COLOR_RES("71", screen.Acolors[71], DFT_COLOR("rgb:ff/8b/ff")),
-COLOR_RES("72", screen.Acolors[72], DFT_COLOR("rgb:ff/cd/00")),
-COLOR_RES("73", screen.Acolors[73], DFT_COLOR("rgb:ff/cd/8b")),
-COLOR_RES("74", screen.Acolors[74], DFT_COLOR("rgb:ff/cd/cd")),
-COLOR_RES("75", screen.Acolors[75], DFT_COLOR("rgb:ff/cd/ff")),
-COLOR_RES("76", screen.Acolors[76], DFT_COLOR("rgb:ff/ff/00")),
-COLOR_RES("77", screen.Acolors[77], DFT_COLOR("rgb:ff/ff/8b")),
-COLOR_RES("78", screen.Acolors[78], DFT_COLOR("rgb:ff/ff/cd")),
-COLOR_RES("79", screen.Acolors[79], DFT_COLOR("rgb:ff/ff/ff")),
-COLOR_RES("80", screen.Acolors[80], DFT_COLOR("rgb:2e/2e/2e")),
-COLOR_RES("81", screen.Acolors[81], DFT_COLOR("rgb:5c/5c/5c")),
-COLOR_RES("82", screen.Acolors[82], DFT_COLOR("rgb:73/73/73")),
-COLOR_RES("83", screen.Acolors[83], DFT_COLOR("rgb:8b/8b/8b")),
-COLOR_RES("84", screen.Acolors[84], DFT_COLOR("rgb:a2/a2/a2")),
-COLOR_RES("85", screen.Acolors[85], DFT_COLOR("rgb:b9/b9/b9")),
-COLOR_RES("86", screen.Acolors[86], DFT_COLOR("rgb:d0/d0/d0")),
-COLOR_RES("87", screen.Acolors[87], DFT_COLOR("rgb:e7/e7/e7")),
-
-#endif /* included_88colres_h */
diff --git a/nx-X11/programs/xterm/88colres.pl b/nx-X11/programs/xterm/88colres.pl
deleted file mode 100644
index 30a1a18fa..000000000
--- a/nx-X11/programs/xterm/88colres.pl
+++ /dev/null
@@ -1,60 +0,0 @@
-#!/usr/bin/perl
-# Author: Steve Wall
-# $XTermId: 88colres.pl,v 1.15 2005/09/18 23:48:11 tom Exp $
-# $XFree86: xc/programs/xterm/88colres.pl,v 1.7 2005/09/18 23:48:11 dickey Exp $
-# Made from 256colres.pl
-
-# Construct a header file defining default resources for the
-# 88-color model of xterm.
-
-# use the resources for colors 0-15 - usually more-or-less a
-# reproduction of the standard ANSI colors, but possibly more
-# pleasing shades
-
-print <<EOF;
-/*
- * This header file was generated by $0
- */
-/* \$XFree86\$ */
-
-#ifndef included_88colres_h
-#define included_88colres_h
-
-EOF
-
-$line1="COLOR_RES(\"%d\",";
-$line2="\tscreen.Acolors[%d],";
-$line3="\tDFT_COLOR(\"rgb:%2.2x/%2.2x/%2.2x\")),\n";
-@steps=(0,139,205,255);
-
-# colors 16-79 are a 4x4x4 color cube
-for ($red = 0; $red < 4; $red++) {
- for ($green = 0; $green < 4; $green++) {
- for ($blue = 0; $blue < 4; $blue++) {
- $code = 16 + ($red * 16) + ($green * 4) + $blue;
- printf($line1, $code);
- printf($line2, $code);
- printf($line3,
- int (@steps[$red]),
- int (@steps[$green]),
- int (@steps[$blue]));
- }
- }
-}
-
-# colors 80-87 are a grayscale ramp, intentionally leaving out
-# black and white
-for ($gray = 0; $gray < 8; $gray++) {
- $level = ($gray * 23.18181818) + 46.36363636;
- if( $gray > 0 ) { $level += 23.18181818; }
- $code = 80 + $gray;
- printf($line1, $code);
- printf($line2, $code);
- printf($line3,
- int($level), int($level), int($level));
-}
-
-print <<EOF;
-
-#endif /* included_88colres_h */
-EOF
diff --git a/nx-X11/programs/xterm/AAA_README_VMS.txt b/nx-X11/programs/xterm/AAA_README_VMS.txt
deleted file mode 100644
index edf8ef198..000000000
--- a/nx-X11/programs/xterm/AAA_README_VMS.txt
+++ /dev/null
@@ -1,48 +0,0 @@
-http://dickey.his.com/xterm/xterm.html
-
-Downloaded 1.22 variant (current Linux version) on 18-JAN-2000.
-
-Port stalled for a few days because OpenVMS X11 lacks XtGravity.
-
-X11KIT shared libraries almost work, but missing _XA_ symbols
-for some reason.
-
-Copied X11KIT [.xaw3d] and [.xmu] into [.lib], put together simplified
-build procedures. Made a few mods. Merged in some changes from
-Patrick Young. Now these build mostly ok except for tons of bcopy
-related warnings and problems with LAYOUT.C.
-
-Merged changes from Xterm021 into here.
-
-Made changes here and there to get it all to work.
-
-25-JAN-2000, more or less done. Logging doesn't work but PRINT
-does, as does regular VT emulation, TEK emulation, 80 and 132 wide
-modes. The resource file needs work. Cleaned up a really nasty problem
-with infinite loops on copy/paste in button.c (see tt_pasting).
-
-To build this, if you have DECC, DW 1.2-5 and VMS 7.2-1 (the latter
-probably doesn't matter) do:
-
-$ @make
-
-in the top directory. Expect a bunch of I and W warnings, but nothing
-worse. Then define a foreign symbol for xterm for the resulting .exe.
-
-26-JAN-2000. Enabled logging. When this is turned on from the menu
-it creates a new file SYS$SCRATCH:XTERM_LOG.TXT and writes everything that
-goes to the screen into it. This may slow down output a bit as each block
-of data read must be copied to disk. The log file has RMS format stream-lf
-and typically has a <CR> at the end of each line.
-
-27-JAN-2000. Discovered a bug when doing an X11 paste into an EDT session,
-had to add a tt_start_read() in button.c after the paste to reenable the
-read AST. Rearranged code in VMS.C to make the compiler happy and
-eliminate warnings.
-
-David Mathog
-mathog@seqaxp.bio.caltech.edu
-Manager, sequence analysis facility, biology division, Caltech
-
-
-$XFree86: xc/programs/xterm/AAA_README_VMS.txt,v 1.2 2000/06/13 02:28:37 dawes Exp $
diff --git a/nx-X11/programs/xterm/INSTALL b/nx-X11/programs/xterm/INSTALL
deleted file mode 100644
index 844ad8362..000000000
--- a/nx-X11/programs/xterm/INSTALL
+++ /dev/null
@@ -1,487 +0,0 @@
--- $XTermId: INSTALL,v 1.94 2005/11/03 13:17:26 tom Exp $
--- $XFree86: xc/programs/xterm/INSTALL,v 3.40 2005/11/03 13:17:26 dickey Exp $
--- Thomas E. Dickey
-
-Xterm is normally built as part of the X Window System source tree, using
-imake to generate a Makefile from Imakefile. You can also use the
-configure script to generate a Makefile from Makefile.in:
-
- + If you have imake (or xmkmf), then you can use those directly,
- or use the configure script, which normally uses those tools
- to obtain the special definitions needed to build xterm.
-
- Ultimately, imake will not be necessary, since it is possible
- to add configure tests that derive the information that imake
- would supply.
-
- + You need the Athena widgets (or a clone, such as Xaw3d or
- neXtaw), to provide the popup menus.
-
-Even if you have imake, the configure script is still convenient because
-it allows you to build different configurations more easily than with
-imake, simply by specifying options to the configure script.
-
-Options:
--------
-
-Autoconf configure scripts recognize two types of application-defined
-options, enable/disable and with/without. The latter, by convention, are
-used for denoting inclusion of external packages, while the former denote
-enabling/disabling of internal features. The configure --help option lists
-the available options. This script uses "enable" and "disable" to indicate
-the sense of the default behavior.
-
-The options (in alphabetic order):
-
- --disable-16-color disable 16-color support
-
- Do not compile-in code to recognize aixterm-style control sequences
- that support color values 8-15.
-
- Most color applications know only about 8 ANSI colors, but some
- (e.g., ones built with ncurses) do.
-
- --disable-active-icon disable X11R6.3 active-icon feature
-
- Do not compile-in code to support the active-icon feature. This is
- not configured on systems (e.g., X11R5) which lack the library
- support needed.
-
- Xterms with an active icon continue to respond to input and update
- their display when iconified. Not all window managers support
- active icons. Those that do include fvwm, olvwm and mwm.
-
- --disable-ansi-color disable ANSI color
-
- Do not compile-in code for ANSI colors.
-
- --disable-blink-cursor disable support for blinking cursor
-
- Do not compile-in code that implements a blinking cursor. The blinking
- cursor is enabled either by resource setting or by popup menu entry.
-
- --disable-bold-color disable PC-style mapping of bold colors
-
- Do not compile-in code that maps colors 8-15 to bold versions of
- colors 0-7.
-
- Some applications have hardcoded logic that assumes this. It does
- not interfere with the 16-color support.
-
- --disable-boxchars disable fallback-support for box chars
-
- Do not compile-in code to generate approximations for box/graphic
- characters.
-
- Most fonts do not contain the vt100-style graphic characters in
- positions 0-31. Many applications use the line-drawing characters,
- e.g., to make boxes. When xterm loads a font, it checks if those
- characters are present, and draws its own if they are missing.
-
- --disable-c1-print disallow -k8 option for printable 128-159],
-
- Use this option to suppress support for nonstandard use of codes
- 128-159, which normally are considered control characters. Some users
- have fonts which use those positions. The default value for the
- allowC1Printable resource is false, so this feature does not impact
- normal users.
-
- --disable-color-class disable color class resources
-
- Use this option to change most of the color resources to use Foreground
- as the color class. This is the older (before patch #157) behavior
- which has the drawback that setting the Foreground resource on most
- platforms prevents use of color since the class is evaluated before
- the instance.
-
- --disable-color-mode disable default colorMode resource
-
- Do not compile-in code that sets the default value of the colorMode
- resource to ``true''.
-
- --disable-doublechars disable support for double-size chars
-
- Do not compile-in code that supports font-manipulation needed to
- implement vt100-style double-sized characters.
-
- --disable-echo test: display "compiling" commands
-
- Modify the generated Makefile so that most compiler options are
- not shown. This makes it simpler to read a build log and see the
- actual warning messages.
-
- --disable-freetype disable freetype library-support
-
- Do not use freetype libraries if they are found. Normally they will
- be used automatically.
-
- --disable-full-tgetent disable check for termcap library
-
- Do not look for the tgetent() function specifically in the termcap
- library, accept the first library (from termlib, ncurses and curses)
- which contains this function rather than continuing to search for
- a termcap implementation rather than terminfo. The former would
- supply the complete $TERMCAP data needed for some legacy programs.
-
- --disable-highlighting disable support for color highlighting
-
- Do not compile-in code that allows the selected region to be a
- different color than the reverse of foreground/background colors.
-
- See the discussion of highlightColor in the manual.
-
- --disable-i18n disable internationalization
-
- Do not compile-in code to handle multi-byte characters. This is
- related to, but not identical with the input method logic.
-
- --disable-imake disable use of imake for definitions
-
- Do not attempt to use imake to determine compiler options.
-
- The main.c file has many ifdef's which rely on obscure combinations
- known only to imake. The configure script implements only a
- portion of the tests needed to supplant imake.
-
- --disable-initial-erase disable setup for stty erase
-
- Do not compile-in code which aligns the stty erase and the backarrow
- key. When compiled-in, xterm will optionally use the pty's sense
- of stty erase and apply that to the backarrow mode (sending 8 or 127),
- or go the other way, setting stty erase to match xterm's configuration.
-
- --disable-input-method disable input-method
-
- Do not compile-in code for "input method". This is an X11R6
- feature which deals with translation of composite characters.
-
- Some users report problems with their configuration, e.g., messages
- stating that there is no input method defined for the given preedit
- type. If you do not need input method (and are troubled by the
- warning messages), it is safe to disable this option.
-
- --disable-maximize disable actions for iconify/deiconify/maximize/restore
-
- Do not compile-in code that implements runtime 'actions' for
- iconifying, maximizing, etc.
-
- Most users will find that the window manager is more suitable for
- this sort of manipulation than putting the capabilities into xterm.
-
- --disable-num-lock disable NumLock keypad support
-
- Do not compile-in code that looks for the actual NumLock key to
- support vt100/vt220 keypad translation.
-
- This is used in xterm to simplify logic, and to workaround some
- quirks of the keyboard tables. Use the ``numLock'' resource to
- disable this feature if you must customize xterm in some other way.
-
- (The same ifdef controls the metaSendsEscape support).
-
- --disable-pty-handshake disable support for pty handshakes
-
- This feature is used to ensure that the child process's terminal modes
- match the parent's. In particular, it addresses a problem where the
- terminal size is not defined in the stty settings.
-
- --disable-rightbar disable right-scrollbar support
-
- Do not compile-in code that supports a scrollbar on the right.
-
- Left/right scrollbars are a matter of taste. Some older libraries
- (e.g., X11R5) do not perform the geometry computation correctly,
- leaving the right scrollbar incorrectly positioned after changing
- the font size.
-
- --disable-samename disable check for redundant name-change
-
- Do not compile-in code that suppresses redundant updates to the
- titlebar when the text has not changed.
-
- --disable-session-mgt enable support for session management
-
- Do not compile-in code which adds simple session management hooks which
- are used when closing an xterm. Normally the code is compiled-in,
- except for systems which do not support it.
-
- --disable-setuid disable setuid/setgid
-
- Do not install xterm using setuid or setgid permissions. Drop setuid
- and setgid permissions on startup. This is done if you have linked
- xterm with the utempter library, but may also be useful for systems
- where the pseudoterminal and utmp interfaces are wrapped so that xterm
- does not require these permissions.
-
- --disable-tek4014 disable tek4014 emulation
-
- Do not compile-in code to support Tektronix 4014 emulation.
-
- This reduces the executable size by 17% (checked 1999/3/13).
-
- Some people use the Tektronix emulation (which has been in xterm
- for many years) as an example of code bloat, though this is not an
- accurate impression.
-
- --disable-vt52 disable VT52 emulation
-
- Do not compile-in code to support vt52 emulation.
-
- A genuine vt100 emulates a vt52.
-
- --disable-ziconbeep disable -ziconbeep option
-
- Do not compile-in code that modifies the icon's title and sounds a
- beep when they receive output.
-
- --enable-256-color enable 256-color support
-
- Compile-in code that interprets SGR 38 and 48 for 256-colors.
-
- --enable-88-color enable 88-color support
-
- Compile-in code that interprets SGR 38 and 48 for 88-colors.
-
- --enable-broken-osc allow broken Linux OSC-strings],
-
- Compile-in code to accommodate scripts that write Linux's malformed
- palette control strings without checking. The result makes xterm
- appear to freeze. This workaround makes xterm ignore the strings,
- and is compiled-in by default for Linux.
-
- --enable-broken-st allow broken string-terminators],
-
- Compile-in code that works around a bug in some ISDN routers (and
- possibly other applications written by the same people): they send an
- unterminated control string in their banner text, making xterm freeze.
- The workaround tells xterm to stop processing the control string when
- it receives one of the whitespace control characters such as newline.
- That was the behavior before patch #171.
-
- --enable-dabbrev enable dynamic-abbreviation support
-
- Compile-in support for "dabbrev-expand()" action and related key
- translation.
-
- --enable-dec-locator enable DECterm Locator support
- Add support for DEC Locator control sequences for xterm:
-
- DECEFR - Enable Filter Rectangle
- DECELR - Enable Locator Reports
- DECSLE - Select Locator Events
- DECRQLP - Request Locator Position
-
- This allows the xterm mouse to be used with applications that use the
- DEC Locator sequences, such as VAX Tpu, or SMG$ based applications.
-
- --enable-hp-fkeys enable support for HP-style function keys
-
- Compile-in code to support HP-style function keys.
-
- --enable-load-vt-fonts enable load-vt-fonts() action
-
- Compile-in code that allows user to define load different VT-font
- definitions at runtime.
-
- --enable-logfile-exec enable exec'd logfile filter
-
- Compile-in code that allows logging piped via an external filter.
-
- --enable-logging enable logging
-
- Compile-in code that allows logging.
-
- Logging was disabled in X11R5 xterm because of security problems.
- They were addressed in X11R6, but the feature was not reinstated.
-
- --enable-luit enable support for luit filter (Unicode translation)
-
- Luit is a filter that can be run between an arbitrary application and a
- UTF-8 terminal emulator. It will convert application output from the
- locale's encoding into UTF-8, and convert terminal input from UTF-8
- into the locale's encoding.
-
- This sets "--enable-wide-chars" as a side-effect.
-
- --enable-mini-luit enable support for poor man's luit filter (Latin-9)
-
- Provide built-in support for Latin-9, relying on having specified
- Unicode (ISO10646) fonts and setting the locale resource to "checkfont".
-
- This sets "--enable-luit" as a side-effect.
-
- --enable-narrowproto enable narrow prototypes for X libraries
-
- Originally xterm was built using imake rather than a configure script.
- One feature of imake that is not possible to guess within the
- configure script is the wide-prototype compile-time definition
- NARROWPROTO. When this is not set properly, the Athena widget
- scrollbars do not work properly. xterm's configure script has a
- fallback case which allows disabling imake. However, this is moot
- with the Xorg "modular" build, whose compiler options are unrelated to
- imake or older versions of any libraries that it may distribute. In
- this case, the configure script needs some help. Use this option to
- enable or disable NARROW proto (and disable imake with the
- --disable-imake option) to match the whims of Xorg hackers.
-
- For instance
-
- configure --disable-imake --disable-narrowproto
-
- --enable-paste64 enable support for bracketed paste mode
-
- Compile-in code to support experimental bracketed paste mode, i.e.,
- provide functions for setting/getting the selection data.
-
- (see ctlseqs.ms description of OSC 52).
-
- --enable-readline-mouse enable support for mouse in readline applications
-
- Compile-in code to support experimental bracketed paste mode, i.e.,
- provide functions for setting/getting the selection data. Essentially
- this puts xterm into a mode that sends special function-key strings to
- bracket the data.
-
- (See --enable-paste64, which fits xterm's protocol better).
-
- --enable-sco-fkeys enable support for SCO-style function keys
-
- Compile-in code to support SCO-style function keys.
-
- --enable-tcap-query enable termcap query/report
-
- Compile-in code to support experimental DCS '+' control sequence, which
- allows an application to ask xterm what control sequences it would
- transmit for specified function keys, given the termcap or terminfo
- names.
-
- --enable-toolbar enable pulldown menus on toolbar
-
- Compile-in code that builds a toolbar with pulldown menus. The
- normal popup menus are still available.
-
- This is an experimental option. As of patch #206, it is known to
- work well with fvwm, but not as well with some other window managers,
- e.g., KDE's Kwin and IceWM.
-
- In addition to isolated layout problems, it is reported that some
- flavors of the Athena widget library perform badly with ISO-10646
- fonts. You can work around those by setting the menu fonts to
- an ISO-8859 variant in your X resources.
-
- --enable-trace test: set to enable debugging traces
-
- Compile-in code to trace xterm's internal states.
-
- This is a debugging feature. It causes xterm to produce two files
- (Trace-parent.out and Trace-child.out).
-
- --enable-warnings test: turn on GCC compiler warnings
-
- Modify the generate Makefile to turn on gcc compiler warnings.
-
- I use this option regularly, and correct all but a few (difficult)
- problems.
-
- --enable-wide-chars enable wide-character support
-
- Compile-in code that supports 16-bit characters. Includes support
- for UTF-8.
-
- --enable-xmc-glitch test: enable xmc magic-cookie emulation
-
- Compile-in code that simulates the terminfo "magic cookie" glitch.
-
- This is for testing ncurses.
-
- --with-Xaw3d link with Xaw 3d library
-
- Look for, compile and link with the Xaw 3d widget library.
-
- --with-XawPlus link with Athena-Plus library
-
- Look for, compile and link with the Xaw Plus widget library.
-
- --with-freetype-cflags -D/-I options for compiling with FreeType library
-
- Override options provided by xft-config or freetype-config.
-
- --with-freetype-libs -L/-l options for linking with FreeType library
-
- Override options provided by xft-config or freetype-config.
-
- --with-neXtaw link with neXT Athena library
-
- Look for, compile and link with the neXT Athena widget library.
-
- --with-own-terminfo=P set default $TERMINFO (default: from environment)
-
- Modify the generated Makefile to set the target for the 'install-ti'
- rule to point to the given directory.
-
- If you have the $TERMINFO variable defined in your environment, the
- configure script will use that value. If no option and no variable
- are are given, the configure script uses /usr/lib/terminfo, if it
- exists.
-
- You do not have to run "make install-ti", if there is already a
- workable terminfo description. Be advised, however, that the
- common variety of "xterm-color" is not suited for xterm, but is
- directed to other variations (such as nxterm) which do not
- support the back-color erase capability.
-
- --with-reference=XXX program to use as permissions-reference
-
- To install xterm with setuid permissions, the scripts usually compare
- it with a previous install. That works well for individual
- maintainers, but can be a problem for packagers who may be
- cross-compiling, etc. This option lets the package builder specify
- the file used for permissions reference.
-
- --with-setuid=XXX use the given setuid user
-
- Install xterm setuid'd to the given user. If no parameter value
- is given, assume it is root.
-
- See also --with-utmp-setgid and --with-utempter, which manipulate
- the setgid group.
-
- --with-terminal-id[=V] set default decTerminalID (default: vt100)
-
- Set the default emulation level.
-
- DEC terminals vt52/vt100/vt220/etc form a series where succeeding
- models emulate features of the older terminals. While most
- features of these terminals are recognized by xterm at all levels,
- a few behave differently according to the emulation level.
-
- You can always override this with the command-line option "-ti".
-
- --with-terminal-type=T set default $TERM (default: xterm)
-
- Set the default value for $TERM. Xterm supports legacy termcap
- applications by constructing a modified version of the $TERMCAP
- variable at initialization, which supplies the resulting screen
- size. It also sets $TERM, if not already set, for use by programs
- running within xterm.
-
- The default value "xterm", can be overridden to avoid conflict
- with older versions of xterm, e.g., those that do not implement
- vt220 emulation.
-
- You can always override this with the command-line option "-tn".
-
- --with-utempter use utempter library for access to utmp
-
- The utempter library is a set-uid wrapper for the utmp facility.
- On systems with Unix98 pty's, xterm can use this library when
- available so it need not be installed set-uid.
-
- --with-utmp-setgid use setgid for access to utmp
-
- The option value specifies a group to use when installing.
- xterm will be installed with setgid privilege to this group.
- At runtime, xterm will drop the setuid privilege immediately
- after opening the pseudo-terminal, and will have only the
- group privilege needed to access the utmp file. This relies
- on having POSIX setuid behavior.
diff --git a/nx-X11/programs/xterm/Imakefile b/nx-X11/programs/xterm/Imakefile
deleted file mode 100644
index 4620c2c8d..000000000
--- a/nx-X11/programs/xterm/Imakefile
+++ /dev/null
@@ -1,325 +0,0 @@
-/**************************************************************************/
-/* */
-/* Copyright (c) 2001, 2011 NoMachine, http://www.nomachine.com/. */
-/* */
-/* NX-X11, NX protocol compression and NX extensions to this software */
-/* are copyright of NoMachine. Redistribution and use of the present */
-/* software is allowed according to terms specified in the file LICENSE */
-/* which comes in the source distribution. */
-/* */
-/* Check http://www.nomachine.com/licensing.html for applicability. */
-/* */
-/* NX and NoMachine are trademarks of Medialogic S.p.A. */
-/* */
-/* All rights reserved. */
-/* */
-/**************************************************************************/
-
-XCOMM $XTermId: Imakefile,v 1.87 2005/11/13 23:10:35 tom Exp $
-XCOMM
-XCOMM $Xorg: Imakefile,v 1.3 2000/08/17 19:55:07 cpqbld Exp $
-XCOMM
-XCOMM Attention xterm porters
-XCOMM
-XCOMM
-XCOMM Xterm assumes that bcopy can handle overlapping arguments. If your
-XCOMM bcopy (or memcpy) cannot, write a routine called bcopy and link it in
-XCOMM or add -Dbcopy=mybcopy to the DEFINES list below.
-XCOMM
-XCOMM $XFree86: xc/programs/xterm/Imakefile,v 3.61 2005/11/13 23:10:35 dickey Exp $
-XCOMM
-
-#if NXLibraries
-
-/*
- * This will make applications that use the Xt
- * toolkit deal with the NX modified select().
- */
-
-NX_DEFINES = -DNX_TRANS_SOCKET \
- -DNX_TRANS_EXIT
-
-# -DNX_TRANS_TEST \
-# -DNX_TRANS_DEBUG
-
-#endif
-
-/* Uncomment SCROLLBAR_RIGHT if you want the scroll bar to be on the right */
-SCROLLBAR_RIGHT = -DSCROLLBAR_RIGHT
-
-/* Define UTF8support to compile-in support for UTF-8 */
-#define UTF8support
-
-#if defined(UseUtempter)
-#undef InstallXtermSetUID /* imake sets this */
-#define InstallXtermSetUID NO
-#define InstallXtermSetGID NO
- UTMPLIB = -lutempter
-#endif
-
-/*
- * setgid mode works for systems that do not require setuid to open pty.
- */
-#if defined(OpenBSDArchitecture) || \
- (defined(LinuxArchitecture) && \
- (LinuxCLibMajorVersion == 6)) || \
- defined(FreeBSDArchitecture)
-#undef InstallXtermSetGID
-#define InstallXtermSetGID YES
-#endif
-
-/*
- * Fixes to allow compile with X11R5
- */
-#ifndef XkbClientDefines
-#define XkbClientDefines /**/
-#endif
-
-#ifndef InstallXtermSetUID
-#define InstallXtermSetUID NO
-#endif
-
-#ifndef InstallXtermSetGID
-#define InstallXtermSetGID NO
-#endif
-
-#ifndef XkbClientDepLibs
-#define XkbClientDepLibs /**/
-#endif
-
-#ifndef XkbClientLibs
-#define XkbClientLibs /**/
-#endif
-
-/*
- * Compensate for broken imake configuration.
- */
-#ifdef LinuxGnuSourceDefines
-# ifdef UseInstalled
- IMAKEDEFINES = -D_GNU_SOURCE
-# endif
-#endif
-
-#ifndef SpecialCObjectRule
-#define SpecialCObjectRule(module,ignore,defines) \
-module.o: ; $(CC) -c defines $(CFLAGS) module.c
-#endif
-
-#ifndef ProgramTargetName
-#define ProgramTargetName(program) program
-#endif
-
-/*
- * add -DWTMP and -DLASTLOG if you want them; make sure that bcopy can
- * handle overlapping copies before using it.
- */
-#if SetTtyGroup /* turn on in config/machine.cf */
- TTYGROUPDEF = -DUSE_TTY_GROUP
-#endif
-#ifdef UsePUCCPtyd /* turn on in config/site.def */
- PUCCPTYDDEF = -DPUCC_PTYD /* does not need to be setuid */
- PTYLIB = -lpucc
-#endif
-
-#if defined(NetBSDArchitecture) || \
- defined(OpenBSDArchitecture) || \
- defined(FreeBSDArchitecture) || \
- (defined(LinuxArchitecture) && \
- (LinuxCLibMajorVersion == 6) && (LinuxCLibMinorVersion < 1))
- PTYLIB = -lutil
-#endif
-
-#ifdef DarwinArchitecture
-/* dyld can deadlock if a signal comes in when it is looking up a symbol */
- LOCAL_LDFLAGS = -Wl,-bind_at_load
-#endif
-
-#ifdef OS2Architecture
-/*
- * Only used in os2main.c, see ptyx.h for OPT_I18N_SUPPORT
- * <werner@suse.de>
- */
-#if XtermWithI18N
- I18NDEF = -DI18N
- FEATURE_DEFINES = -DDEBUG -DALLOWLOGGING $(I18NDEF)
-#else
- FEATURE_DEFINES = -DDEBUG -DALLOWLOGGING
-#endif
-#endif
-
- OSMAJORVERSION = OSMajorVersion
- OSMINORVERSION = OSMinorVersion
-
-#if !defined(OS2Architecture) && !defined(__GNU__)
-#if defined(UseUtempter)
- UTMPDEF = -DUSE_UTEMPTER
-#else
- UTMPDEF = -DUTMP
-#endif
-#endif
-
-#ifdef UTF8support
- UTF8_OPTION = -DOPT_WIDE_CHARS -DOPT_LUIT_PROG
- UTF8SRC = charclass.c precompose.c wcwidth.c xutf8.c
- UTF8OBJ = charclass.o precompose.o wcwidth.o xutf8.o
-#endif
-#if BuildXftLibrary
-#define XRenderSupport
-#endif
-#ifdef XRenderSupport
- XRFDEF = -DXRENDERFONT -DXFREE86_FT2
- XRFLIBS = XftClientLibs
- XRFDEPLIBS = XftClientDepLibs
- XRFINCLUDES = $(XFTINCLUDES)
-#endif
-#if !HasPutenv
- PUTENVDEF = -DNOPUTENV
-#endif
-#ifdef TraceXTerm
- TRACEDEF = -DOPT_TRACE=1
-#endif
- MAIN_DEFINES = $(UTMPDEF) $(TTYGROUPDEF) $(PUCCPTYDDEF) \
- -DOSMAJORVERSION=$(OSMAJORVERSION) \
- -DOSMINORVERSION=$(OSMINORVERSION)
- MISC_DEFINES = /* -DALLOWLOGGING -DALLOWLOGFILEEXEC */
- XKB_DEFINES = XkbClientDefines
- PATH_DEFINES = -DPROJECTROOT=$(PROJECTROOT)
-#if NXLibraries
- DEFINES = $(XKB_DEFINES) $(TERMCAPDEFINES) $(FEATURE_DEFINES) $(SCROLLBAR_RIGHT) $(UTF8_OPTION) $(XRFDEF) $(PATH_DEFINES) $(PUTENVDEF) $(IMAKEDEFINES) $(TRACEDEF) $(NX_DEFINES)
-#else
- DEFINES = $(XKB_DEFINES) $(TERMCAPDEFINES) $(FEATURE_DEFINES) $(SCROLLBAR_RIGHT) $(UTF8_OPTION) $(XRFDEF) $(PATH_DEFINES) $(PUTENVDEF) $(IMAKEDEFINES) $(TRACEDEF)
-#endif
- INCLUDES = -I. $(XRFINCLUDES)
-
-#ifdef OS2Architecture
- MAINSRC = os2main.c
- MAINOBJ = os2main.o
-#else
- MAINSRC = main.c
- MAINOBJ = main.o
-#endif
-#ifdef TraceXTerm
- TRACESRC = trace.c
- TRACEOBJ = trace.o
-#endif
- SRCS1 = button.c charproc.c charsets.c cursor.c \
- data.c doublechr.c fontutils.c input.c \
- menu.c misc.c print.c ptydata.c \
- screen.c scrollbar.c tabs.c util.c xstrings.c \
- TekPrsTbl.c Tekproc.c VTPrsTbl.c \
- $(MAINSRC) $(EXTRASRC) $(UTF8SRC) $(TRACESRC)
- OBJS1 = button.o charproc.o charsets.o cursor.o \
- data.o doublechr.o fontutils.o input.o \
- menu.o misc.o print.o ptydata.o \
- screen.o scrollbar.o tabs.o util.o xstrings.o \
- TekPrsTbl.o Tekproc.o VTPrsTbl.o \
- $(MAINOBJ) $(EXTRAOBJ) $(UTF8OBJ) $(TRACEOBJ)
- SRCS2 = resize.c xstrings.c
- OBJS2 = resize.o xstrings.o
- SRCS = $(SRCS1) $(SRCS2)
- OBJS = $(OBJS1) $(OBJS2)
- PROGRAMS = ProgramTargetName(resize) ProgramTargetName(xterm)
- DEPLIBS1 = XkbClientDepLibs XawClientDepLibs $(XRFDEPLIBS)
- DEPLIBS2 =
-
-#ifndef TermcapLibrary
-#if SystemV && !defined(MacIIArchitecture)
-#if defined(CrayArchitecture) || \
- (defined(HPArchitecture) && (OSMajorVersion < 10)) || \
- defined(RsArchitecture) || \
- defined(SCOArchitecture) || \
- defined(USLArchitecture)
-#define TermcapLibrary -lcurses /* special cases of System V */
-#else
-#define TermcapLibrary -ltermlib /* usually in here */
-#endif
-#else
-#define TermcapLibrary -ltermcap /* bsd puts it here */
-#endif
-#endif
-
- TERMCAPLIB = TermcapLibrary
-
-AllTarget($(PROGRAMS))
-
-SpecialCObjectRule(main,$(_NOOP_),$(MAIN_DEFINES))
-SpecialCObjectRule(menu,$(_NOOP_),$(MISC_DEFINES))
-SpecialCObjectRule(misc,$(_NOOP_),$(MISC_DEFINES))
-SpecialCObjectRule(charproc,$(_NOOP_),$(MISC_DEFINES))
-SpecialCObjectRule(data,$(_NOOP_),$(MISC_DEFINES))
-
-#if InstallXtermSetUID
-INSTUIDFLAGS = -m 4711
-SetUIDProgramTarget(xterm,$(OBJS1),$(DEPLIBS1),$(XRFLIBS) XkbClientLibs XawClientLibs,$(TERMCAPLIB) $(PTYLIB))
-#else
-NormalProgramTarget(xterm,$(OBJS1),$(DEPLIBS1),$(XRFLIBS) XkbClientLibs XawClientLibs,$(TERMCAPLIB) $(UTMPLIB) $(PTYLIB))
-#endif
-
-#if InstallXtermSetGID
-CSGIDFLAGS = -DUSE_UTMP_SETGID
-INSTUIDFLAGS = -m 2755 -g utmp
-#endif
-
-#if InstallXtermSetUID && defined(SunArchitecture) && HasSharedLibraries && (OSMajorVersion < 5)
-#if AlternateUsrLibDir
-#if ((OSMajorVersion == 4) && (OSMinorVersion >= 1))
-LDOVERRIDE = -L$(DESTDIR)$(USRLIBDIR)
-#else
-#if HasGcc
-LDOVERRIDE = -static -L$(DESTDIR)$(USRLIBDIR)
-#else
-LDOVERRIDE = -Bstatic -L$(DESTDIR)$(USRLIBDIR)
-LDRESUME = -Bdynamic
-#endif
-#endif
-#endif
-install::
- MakeDir($(DESTDIR)$(BINDIR))
- RemoveFile(ProgramTargetName(xterm.inst))
- LinkRule(ProgramTargetName(xterm.inst),$(CDEBUGFLAGS) $(CCOPTIONS)
- $(EXTRA_LDOPTIONS) $(LOCAL_LDFLAGS),$(OBJS1),$(LDOVERRIDE)
- $(XRFLIBS) XawClientLibs $(LDRESUME) $(LDLIBS) $(TERMCAPLIB)
- $(PTYLIB))
- $(INSTALL) -c $(INSTPGMFLAGS) $(INSTUIDFLAGS) ProgramTargetName(xterm.inst) $(DESTDIR)$(BINDIR)/ProgramTargetName(xterm)
- RemoveFile(ProgramTargetName(xterm.inst))
-#else
-#if InstallXtermSetUID
-InstallProgramWithFlags(xterm,$(BINDIR),$(INSTUIDFLAGS))
-#else
-InstallProgramWithFlags(xterm,$(BINDIR),NullParameter)
-#endif
-#endif
-
-InstallNamedProg(uxterm,uxterm,$(BINDIR))
-
-/*
- * Link with the termcap library if USE_TERMCAP is defined in resize.c
- */
-#if defined(NTOArchitecture) || \
- defined(LinuxArchitecture) || \
- defined(OpenBSDArchitecture) || \
- defined(SGIArchitecture) || \
- defined(SunArchitecture)
-NormalProgramTarget(resize,$(OBJS2),$(DEPLIBS2),NullParameter,NullParameter)
-#else
-NormalProgramTarget(resize,$(OBJS2),$(DEPLIBS2),NullParameter,$(TERMCAPLIB))
-#endif
-
-InstallProgramWithFlags(resize,$(BINDIR),NullParameter)
-
-/*
- * termcap is a special name that does not install correctly with
- * InstallNamedNonExec()
- */
-install::
- MakeDir($(DESTDIR)$(LIBDIR)/etc)
- $(INSTALL) $(INSTALLFLAGS) $(INSTDATFLAGS) termcap \
- $(DESTDIR)$(LIBDIR)/etc/xterm.termcap
-InstallNamedNonExec(terminfo,xterm.terminfo,$(LIBDIR)/etc)
-
-InstallAppDefaults(XTerm)
-InstallAppDefaults(UXTerm)
-InstallAppDefaultsLong(XTerm-col,XTerm-color)
-InstallManPage(xterm,$(MANDIR))
-InstallManPage(resize,$(MANDIR))
-DependTarget()
diff --git a/nx-X11/programs/xterm/Imakefile.NX.original b/nx-X11/programs/xterm/Imakefile.NX.original
deleted file mode 100644
index 4620c2c8d..000000000
--- a/nx-X11/programs/xterm/Imakefile.NX.original
+++ /dev/null
@@ -1,325 +0,0 @@
-/**************************************************************************/
-/* */
-/* Copyright (c) 2001, 2011 NoMachine, http://www.nomachine.com/. */
-/* */
-/* NX-X11, NX protocol compression and NX extensions to this software */
-/* are copyright of NoMachine. Redistribution and use of the present */
-/* software is allowed according to terms specified in the file LICENSE */
-/* which comes in the source distribution. */
-/* */
-/* Check http://www.nomachine.com/licensing.html for applicability. */
-/* */
-/* NX and NoMachine are trademarks of Medialogic S.p.A. */
-/* */
-/* All rights reserved. */
-/* */
-/**************************************************************************/
-
-XCOMM $XTermId: Imakefile,v 1.87 2005/11/13 23:10:35 tom Exp $
-XCOMM
-XCOMM $Xorg: Imakefile,v 1.3 2000/08/17 19:55:07 cpqbld Exp $
-XCOMM
-XCOMM Attention xterm porters
-XCOMM
-XCOMM
-XCOMM Xterm assumes that bcopy can handle overlapping arguments. If your
-XCOMM bcopy (or memcpy) cannot, write a routine called bcopy and link it in
-XCOMM or add -Dbcopy=mybcopy to the DEFINES list below.
-XCOMM
-XCOMM $XFree86: xc/programs/xterm/Imakefile,v 3.61 2005/11/13 23:10:35 dickey Exp $
-XCOMM
-
-#if NXLibraries
-
-/*
- * This will make applications that use the Xt
- * toolkit deal with the NX modified select().
- */
-
-NX_DEFINES = -DNX_TRANS_SOCKET \
- -DNX_TRANS_EXIT
-
-# -DNX_TRANS_TEST \
-# -DNX_TRANS_DEBUG
-
-#endif
-
-/* Uncomment SCROLLBAR_RIGHT if you want the scroll bar to be on the right */
-SCROLLBAR_RIGHT = -DSCROLLBAR_RIGHT
-
-/* Define UTF8support to compile-in support for UTF-8 */
-#define UTF8support
-
-#if defined(UseUtempter)
-#undef InstallXtermSetUID /* imake sets this */
-#define InstallXtermSetUID NO
-#define InstallXtermSetGID NO
- UTMPLIB = -lutempter
-#endif
-
-/*
- * setgid mode works for systems that do not require setuid to open pty.
- */
-#if defined(OpenBSDArchitecture) || \
- (defined(LinuxArchitecture) && \
- (LinuxCLibMajorVersion == 6)) || \
- defined(FreeBSDArchitecture)
-#undef InstallXtermSetGID
-#define InstallXtermSetGID YES
-#endif
-
-/*
- * Fixes to allow compile with X11R5
- */
-#ifndef XkbClientDefines
-#define XkbClientDefines /**/
-#endif
-
-#ifndef InstallXtermSetUID
-#define InstallXtermSetUID NO
-#endif
-
-#ifndef InstallXtermSetGID
-#define InstallXtermSetGID NO
-#endif
-
-#ifndef XkbClientDepLibs
-#define XkbClientDepLibs /**/
-#endif
-
-#ifndef XkbClientLibs
-#define XkbClientLibs /**/
-#endif
-
-/*
- * Compensate for broken imake configuration.
- */
-#ifdef LinuxGnuSourceDefines
-# ifdef UseInstalled
- IMAKEDEFINES = -D_GNU_SOURCE
-# endif
-#endif
-
-#ifndef SpecialCObjectRule
-#define SpecialCObjectRule(module,ignore,defines) \
-module.o: ; $(CC) -c defines $(CFLAGS) module.c
-#endif
-
-#ifndef ProgramTargetName
-#define ProgramTargetName(program) program
-#endif
-
-/*
- * add -DWTMP and -DLASTLOG if you want them; make sure that bcopy can
- * handle overlapping copies before using it.
- */
-#if SetTtyGroup /* turn on in config/machine.cf */
- TTYGROUPDEF = -DUSE_TTY_GROUP
-#endif
-#ifdef UsePUCCPtyd /* turn on in config/site.def */
- PUCCPTYDDEF = -DPUCC_PTYD /* does not need to be setuid */
- PTYLIB = -lpucc
-#endif
-
-#if defined(NetBSDArchitecture) || \
- defined(OpenBSDArchitecture) || \
- defined(FreeBSDArchitecture) || \
- (defined(LinuxArchitecture) && \
- (LinuxCLibMajorVersion == 6) && (LinuxCLibMinorVersion < 1))
- PTYLIB = -lutil
-#endif
-
-#ifdef DarwinArchitecture
-/* dyld can deadlock if a signal comes in when it is looking up a symbol */
- LOCAL_LDFLAGS = -Wl,-bind_at_load
-#endif
-
-#ifdef OS2Architecture
-/*
- * Only used in os2main.c, see ptyx.h for OPT_I18N_SUPPORT
- * <werner@suse.de>
- */
-#if XtermWithI18N
- I18NDEF = -DI18N
- FEATURE_DEFINES = -DDEBUG -DALLOWLOGGING $(I18NDEF)
-#else
- FEATURE_DEFINES = -DDEBUG -DALLOWLOGGING
-#endif
-#endif
-
- OSMAJORVERSION = OSMajorVersion
- OSMINORVERSION = OSMinorVersion
-
-#if !defined(OS2Architecture) && !defined(__GNU__)
-#if defined(UseUtempter)
- UTMPDEF = -DUSE_UTEMPTER
-#else
- UTMPDEF = -DUTMP
-#endif
-#endif
-
-#ifdef UTF8support
- UTF8_OPTION = -DOPT_WIDE_CHARS -DOPT_LUIT_PROG
- UTF8SRC = charclass.c precompose.c wcwidth.c xutf8.c
- UTF8OBJ = charclass.o precompose.o wcwidth.o xutf8.o
-#endif
-#if BuildXftLibrary
-#define XRenderSupport
-#endif
-#ifdef XRenderSupport
- XRFDEF = -DXRENDERFONT -DXFREE86_FT2
- XRFLIBS = XftClientLibs
- XRFDEPLIBS = XftClientDepLibs
- XRFINCLUDES = $(XFTINCLUDES)
-#endif
-#if !HasPutenv
- PUTENVDEF = -DNOPUTENV
-#endif
-#ifdef TraceXTerm
- TRACEDEF = -DOPT_TRACE=1
-#endif
- MAIN_DEFINES = $(UTMPDEF) $(TTYGROUPDEF) $(PUCCPTYDDEF) \
- -DOSMAJORVERSION=$(OSMAJORVERSION) \
- -DOSMINORVERSION=$(OSMINORVERSION)
- MISC_DEFINES = /* -DALLOWLOGGING -DALLOWLOGFILEEXEC */
- XKB_DEFINES = XkbClientDefines
- PATH_DEFINES = -DPROJECTROOT=$(PROJECTROOT)
-#if NXLibraries
- DEFINES = $(XKB_DEFINES) $(TERMCAPDEFINES) $(FEATURE_DEFINES) $(SCROLLBAR_RIGHT) $(UTF8_OPTION) $(XRFDEF) $(PATH_DEFINES) $(PUTENVDEF) $(IMAKEDEFINES) $(TRACEDEF) $(NX_DEFINES)
-#else
- DEFINES = $(XKB_DEFINES) $(TERMCAPDEFINES) $(FEATURE_DEFINES) $(SCROLLBAR_RIGHT) $(UTF8_OPTION) $(XRFDEF) $(PATH_DEFINES) $(PUTENVDEF) $(IMAKEDEFINES) $(TRACEDEF)
-#endif
- INCLUDES = -I. $(XRFINCLUDES)
-
-#ifdef OS2Architecture
- MAINSRC = os2main.c
- MAINOBJ = os2main.o
-#else
- MAINSRC = main.c
- MAINOBJ = main.o
-#endif
-#ifdef TraceXTerm
- TRACESRC = trace.c
- TRACEOBJ = trace.o
-#endif
- SRCS1 = button.c charproc.c charsets.c cursor.c \
- data.c doublechr.c fontutils.c input.c \
- menu.c misc.c print.c ptydata.c \
- screen.c scrollbar.c tabs.c util.c xstrings.c \
- TekPrsTbl.c Tekproc.c VTPrsTbl.c \
- $(MAINSRC) $(EXTRASRC) $(UTF8SRC) $(TRACESRC)
- OBJS1 = button.o charproc.o charsets.o cursor.o \
- data.o doublechr.o fontutils.o input.o \
- menu.o misc.o print.o ptydata.o \
- screen.o scrollbar.o tabs.o util.o xstrings.o \
- TekPrsTbl.o Tekproc.o VTPrsTbl.o \
- $(MAINOBJ) $(EXTRAOBJ) $(UTF8OBJ) $(TRACEOBJ)
- SRCS2 = resize.c xstrings.c
- OBJS2 = resize.o xstrings.o
- SRCS = $(SRCS1) $(SRCS2)
- OBJS = $(OBJS1) $(OBJS2)
- PROGRAMS = ProgramTargetName(resize) ProgramTargetName(xterm)
- DEPLIBS1 = XkbClientDepLibs XawClientDepLibs $(XRFDEPLIBS)
- DEPLIBS2 =
-
-#ifndef TermcapLibrary
-#if SystemV && !defined(MacIIArchitecture)
-#if defined(CrayArchitecture) || \
- (defined(HPArchitecture) && (OSMajorVersion < 10)) || \
- defined(RsArchitecture) || \
- defined(SCOArchitecture) || \
- defined(USLArchitecture)
-#define TermcapLibrary -lcurses /* special cases of System V */
-#else
-#define TermcapLibrary -ltermlib /* usually in here */
-#endif
-#else
-#define TermcapLibrary -ltermcap /* bsd puts it here */
-#endif
-#endif
-
- TERMCAPLIB = TermcapLibrary
-
-AllTarget($(PROGRAMS))
-
-SpecialCObjectRule(main,$(_NOOP_),$(MAIN_DEFINES))
-SpecialCObjectRule(menu,$(_NOOP_),$(MISC_DEFINES))
-SpecialCObjectRule(misc,$(_NOOP_),$(MISC_DEFINES))
-SpecialCObjectRule(charproc,$(_NOOP_),$(MISC_DEFINES))
-SpecialCObjectRule(data,$(_NOOP_),$(MISC_DEFINES))
-
-#if InstallXtermSetUID
-INSTUIDFLAGS = -m 4711
-SetUIDProgramTarget(xterm,$(OBJS1),$(DEPLIBS1),$(XRFLIBS) XkbClientLibs XawClientLibs,$(TERMCAPLIB) $(PTYLIB))
-#else
-NormalProgramTarget(xterm,$(OBJS1),$(DEPLIBS1),$(XRFLIBS) XkbClientLibs XawClientLibs,$(TERMCAPLIB) $(UTMPLIB) $(PTYLIB))
-#endif
-
-#if InstallXtermSetGID
-CSGIDFLAGS = -DUSE_UTMP_SETGID
-INSTUIDFLAGS = -m 2755 -g utmp
-#endif
-
-#if InstallXtermSetUID && defined(SunArchitecture) && HasSharedLibraries && (OSMajorVersion < 5)
-#if AlternateUsrLibDir
-#if ((OSMajorVersion == 4) && (OSMinorVersion >= 1))
-LDOVERRIDE = -L$(DESTDIR)$(USRLIBDIR)
-#else
-#if HasGcc
-LDOVERRIDE = -static -L$(DESTDIR)$(USRLIBDIR)
-#else
-LDOVERRIDE = -Bstatic -L$(DESTDIR)$(USRLIBDIR)
-LDRESUME = -Bdynamic
-#endif
-#endif
-#endif
-install::
- MakeDir($(DESTDIR)$(BINDIR))
- RemoveFile(ProgramTargetName(xterm.inst))
- LinkRule(ProgramTargetName(xterm.inst),$(CDEBUGFLAGS) $(CCOPTIONS)
- $(EXTRA_LDOPTIONS) $(LOCAL_LDFLAGS),$(OBJS1),$(LDOVERRIDE)
- $(XRFLIBS) XawClientLibs $(LDRESUME) $(LDLIBS) $(TERMCAPLIB)
- $(PTYLIB))
- $(INSTALL) -c $(INSTPGMFLAGS) $(INSTUIDFLAGS) ProgramTargetName(xterm.inst) $(DESTDIR)$(BINDIR)/ProgramTargetName(xterm)
- RemoveFile(ProgramTargetName(xterm.inst))
-#else
-#if InstallXtermSetUID
-InstallProgramWithFlags(xterm,$(BINDIR),$(INSTUIDFLAGS))
-#else
-InstallProgramWithFlags(xterm,$(BINDIR),NullParameter)
-#endif
-#endif
-
-InstallNamedProg(uxterm,uxterm,$(BINDIR))
-
-/*
- * Link with the termcap library if USE_TERMCAP is defined in resize.c
- */
-#if defined(NTOArchitecture) || \
- defined(LinuxArchitecture) || \
- defined(OpenBSDArchitecture) || \
- defined(SGIArchitecture) || \
- defined(SunArchitecture)
-NormalProgramTarget(resize,$(OBJS2),$(DEPLIBS2),NullParameter,NullParameter)
-#else
-NormalProgramTarget(resize,$(OBJS2),$(DEPLIBS2),NullParameter,$(TERMCAPLIB))
-#endif
-
-InstallProgramWithFlags(resize,$(BINDIR),NullParameter)
-
-/*
- * termcap is a special name that does not install correctly with
- * InstallNamedNonExec()
- */
-install::
- MakeDir($(DESTDIR)$(LIBDIR)/etc)
- $(INSTALL) $(INSTALLFLAGS) $(INSTDATFLAGS) termcap \
- $(DESTDIR)$(LIBDIR)/etc/xterm.termcap
-InstallNamedNonExec(terminfo,xterm.terminfo,$(LIBDIR)/etc)
-
-InstallAppDefaults(XTerm)
-InstallAppDefaults(UXTerm)
-InstallAppDefaultsLong(XTerm-col,XTerm-color)
-InstallManPage(xterm,$(MANDIR))
-InstallManPage(resize,$(MANDIR))
-DependTarget()
diff --git a/nx-X11/programs/xterm/Imakefile.X.original b/nx-X11/programs/xterm/Imakefile.X.original
deleted file mode 100644
index 50bbfee2d..000000000
--- a/nx-X11/programs/xterm/Imakefile.X.original
+++ /dev/null
@@ -1,289 +0,0 @@
-XCOMM $XTermId: Imakefile,v 1.87 2005/11/13 23:10:35 tom Exp $
-XCOMM
-XCOMM $Xorg: Imakefile,v 1.3 2000/08/17 19:55:07 cpqbld Exp $
-XCOMM
-XCOMM Attention xterm porters
-XCOMM
-XCOMM
-XCOMM Xterm assumes that bcopy can handle overlapping arguments. If your
-XCOMM bcopy (or memcpy) cannot, write a routine called bcopy and link it in
-XCOMM or add -Dbcopy=mybcopy to the DEFINES list below.
-XCOMM
-XCOMM $XFree86: xc/programs/xterm/Imakefile,v 3.61 2005/11/13 23:10:35 dickey Exp $
-XCOMM
-
-/* Uncomment SCROLLBAR_RIGHT if you want the scroll bar to be on the right */
-SCROLLBAR_RIGHT = -DSCROLLBAR_RIGHT
-
-/* Define UTF8support to compile-in support for UTF-8 */
-#define UTF8support
-
-#if defined(UseUtempter)
-#undef InstallXtermSetUID /* imake sets this */
-#define InstallXtermSetUID NO
-#define InstallXtermSetGID NO
- UTMPLIB = -lutempter
-#endif
-
-/*
- * setgid mode works for systems that do not require setuid to open pty.
- */
-#if defined(OpenBSDArchitecture) || \
- (defined(LinuxArchitecture) && \
- (LinuxCLibMajorVersion == 6)) || \
- defined(FreeBSDArchitecture)
-#undef InstallXtermSetGID
-#define InstallXtermSetGID YES
-#endif
-
-/*
- * Fixes to allow compile with X11R5
- */
-#ifndef XkbClientDefines
-#define XkbClientDefines /**/
-#endif
-
-#ifndef InstallXtermSetUID
-#define InstallXtermSetUID NO
-#endif
-
-#ifndef InstallXtermSetGID
-#define InstallXtermSetGID NO
-#endif
-
-#ifndef XkbClientDepLibs
-#define XkbClientDepLibs /**/
-#endif
-
-#ifndef XkbClientLibs
-#define XkbClientLibs /**/
-#endif
-
-/*
- * Compensate for broken imake configuration.
- */
-#ifdef LinuxGnuSourceDefines
-# ifdef UseInstalled
- IMAKEDEFINES = -D_GNU_SOURCE
-# endif
-#endif
-
-#ifndef SpecialCObjectRule
-#define SpecialCObjectRule(module,ignore,defines) \
-module.o: ; $(CC) -c defines $(CFLAGS) module.c
-#endif
-
-#ifndef ProgramTargetName
-#define ProgramTargetName(program) program
-#endif
-
-/*
- * add -DWTMP and -DLASTLOG if you want them; make sure that bcopy can
- * handle overlapping copies before using it.
- */
-#if SetTtyGroup /* turn on in config/machine.cf */
- TTYGROUPDEF = -DUSE_TTY_GROUP
-#endif
-#ifdef UsePUCCPtyd /* turn on in config/site.def */
- PUCCPTYDDEF = -DPUCC_PTYD /* does not need to be setuid */
- PTYLIB = -lpucc
-#endif
-
-#if defined(NetBSDArchitecture) || \
- defined(OpenBSDArchitecture) || \
- defined(FreeBSDArchitecture) || \
- (defined(LinuxArchitecture) && \
- (LinuxCLibMajorVersion == 6) && (LinuxCLibMinorVersion < 1))
- PTYLIB = -lutil
-#endif
-
-#ifdef DarwinArchitecture
-/* dyld can deadlock if a signal comes in when it is looking up a symbol */
- LOCAL_LDFLAGS = -Wl,-bind_at_load
-#endif
-
-#ifdef OS2Architecture
-/*
- * Only used in os2main.c, see ptyx.h for OPT_I18N_SUPPORT
- * <werner@suse.de>
- */
-#if XtermWithI18N
- I18NDEF = -DI18N
- FEATURE_DEFINES = -DDEBUG -DALLOWLOGGING $(I18NDEF)
-#else
- FEATURE_DEFINES = -DDEBUG -DALLOWLOGGING
-#endif
-#endif
-
- OSMAJORVERSION = OSMajorVersion
- OSMINORVERSION = OSMinorVersion
-
-#if !defined(OS2Architecture) && !defined(__GNU__)
-#if defined(UseUtempter)
- UTMPDEF = -DUSE_UTEMPTER
-#else
- UTMPDEF = -DUTMP
-#endif
-#endif
-
-#ifdef UTF8support
- UTF8_OPTION = -DOPT_WIDE_CHARS -DOPT_LUIT_PROG
- UTF8SRC = charclass.c precompose.c wcwidth.c xutf8.c
- UTF8OBJ = charclass.o precompose.o wcwidth.o xutf8.o
-#endif
-#if BuildXftLibrary
-#define XRenderSupport
-#endif
-#ifdef XRenderSupport
- XRFDEF = -DXRENDERFONT -DXFREE86_FT2
- XRFLIBS = XftClientLibs
- XRFDEPLIBS = XftClientDepLibs
- XRFINCLUDES = $(XFTINCLUDES)
-#endif
-#if !HasPutenv
- PUTENVDEF = -DNOPUTENV
-#endif
-#ifdef TraceXTerm
- TRACEDEF = -DOPT_TRACE=1
-#endif
- MAIN_DEFINES = $(UTMPDEF) $(TTYGROUPDEF) $(PUCCPTYDDEF) \
- -DOSMAJORVERSION=$(OSMAJORVERSION) \
- -DOSMINORVERSION=$(OSMINORVERSION)
- MISC_DEFINES = /* -DALLOWLOGGING -DALLOWLOGFILEEXEC */
- XKB_DEFINES = XkbClientDefines
- PATH_DEFINES = -DPROJECTROOT=$(PROJECTROOT)
- DEFINES = $(XKB_DEFINES) $(TERMCAPDEFINES) $(FEATURE_DEFINES) $(SCROLLBAR_RIGHT) $(UTF8_OPTION) $(XRFDEF) $(PATH_DEFINES) $(PUTENVDEF) $(IMAKEDEFINES) $(TRACEDEF)
- INCLUDES = -I. $(XRFINCLUDES)
-
-#ifdef OS2Architecture
- MAINSRC = os2main.c
- MAINOBJ = os2main.o
-#else
- MAINSRC = main.c
- MAINOBJ = main.o
-#endif
-#ifdef TraceXTerm
- TRACESRC = trace.c
- TRACEOBJ = trace.o
-#endif
- SRCS1 = button.c charproc.c charsets.c cursor.c \
- data.c doublechr.c fontutils.c input.c \
- menu.c misc.c print.c ptydata.c \
- screen.c scrollbar.c tabs.c util.c xstrings.c \
- TekPrsTbl.c Tekproc.c VTPrsTbl.c \
- $(MAINSRC) $(EXTRASRC) $(UTF8SRC) $(TRACESRC)
- OBJS1 = button.o charproc.o charsets.o cursor.o \
- data.o doublechr.o fontutils.o input.o \
- menu.o misc.o print.o ptydata.o \
- screen.o scrollbar.o tabs.o util.o xstrings.o \
- TekPrsTbl.o Tekproc.o VTPrsTbl.o \
- $(MAINOBJ) $(EXTRAOBJ) $(UTF8OBJ) $(TRACEOBJ)
- SRCS2 = resize.c xstrings.c
- OBJS2 = resize.o xstrings.o
- SRCS = $(SRCS1) $(SRCS2)
- OBJS = $(OBJS1) $(OBJS2)
- PROGRAMS = ProgramTargetName(resize) ProgramTargetName(xterm)
- DEPLIBS1 = XkbClientDepLibs XawClientDepLibs $(XRFDEPLIBS)
- DEPLIBS2 =
-
-#ifndef TermcapLibrary
-#if SystemV && !defined(MacIIArchitecture)
-#if defined(CrayArchitecture) || \
- (defined(HPArchitecture) && (OSMajorVersion < 10)) || \
- defined(RsArchitecture) || \
- defined(SCOArchitecture) || \
- defined(USLArchitecture)
-#define TermcapLibrary -lcurses /* special cases of System V */
-#else
-#define TermcapLibrary -ltermlib /* usually in here */
-#endif
-#else
-#define TermcapLibrary -ltermcap /* bsd puts it here */
-#endif
-#endif
-
- TERMCAPLIB = TermcapLibrary
-
-AllTarget($(PROGRAMS))
-
-SpecialCObjectRule(main,$(_NOOP_),$(MAIN_DEFINES))
-SpecialCObjectRule(menu,$(_NOOP_),$(MISC_DEFINES))
-SpecialCObjectRule(misc,$(_NOOP_),$(MISC_DEFINES))
-SpecialCObjectRule(charproc,$(_NOOP_),$(MISC_DEFINES))
-SpecialCObjectRule(data,$(_NOOP_),$(MISC_DEFINES))
-
-#if InstallXtermSetUID
-INSTUIDFLAGS = -m 4711
-SetUIDProgramTarget(xterm,$(OBJS1),$(DEPLIBS1),$(XRFLIBS) XkbClientLibs XawClientLibs,$(TERMCAPLIB) $(PTYLIB))
-#else
-NormalProgramTarget(xterm,$(OBJS1),$(DEPLIBS1),$(XRFLIBS) XkbClientLibs XawClientLibs,$(TERMCAPLIB) $(UTMPLIB) $(PTYLIB))
-#endif
-
-#if InstallXtermSetGID
-CSGIDFLAGS = -DUSE_UTMP_SETGID
-INSTUIDFLAGS = -m 2755 -g utmp
-#endif
-
-#if InstallXtermSetUID && defined(SunArchitecture) && HasSharedLibraries && (OSMajorVersion < 5)
-#if AlternateUsrLibDir
-#if ((OSMajorVersion == 4) && (OSMinorVersion >= 1))
-LDOVERRIDE = -L$(DESTDIR)$(USRLIBDIR)
-#else
-#if HasGcc
-LDOVERRIDE = -static -L$(DESTDIR)$(USRLIBDIR)
-#else
-LDOVERRIDE = -Bstatic -L$(DESTDIR)$(USRLIBDIR)
-LDRESUME = -Bdynamic
-#endif
-#endif
-#endif
-install::
- MakeDir($(DESTDIR)$(BINDIR))
- RemoveFile(ProgramTargetName(xterm.inst))
- LinkRule(ProgramTargetName(xterm.inst),$(CDEBUGFLAGS) $(CCOPTIONS)
- $(EXTRA_LDOPTIONS) $(LOCAL_LDFLAGS),$(OBJS1),$(LDOVERRIDE)
- $(XRFLIBS) XawClientLibs $(LDRESUME) $(LDLIBS) $(TERMCAPLIB)
- $(PTYLIB))
- $(INSTALL) -c $(INSTPGMFLAGS) $(INSTUIDFLAGS) ProgramTargetName(xterm.inst) $(DESTDIR)$(BINDIR)/ProgramTargetName(xterm)
- RemoveFile(ProgramTargetName(xterm.inst))
-#else
-#if InstallXtermSetUID
-InstallProgramWithFlags(xterm,$(BINDIR),$(INSTUIDFLAGS))
-#else
-InstallProgramWithFlags(xterm,$(BINDIR),NullParameter)
-#endif
-#endif
-
-InstallNamedProg(uxterm,uxterm,$(BINDIR))
-
-/*
- * Link with the termcap library if USE_TERMCAP is defined in resize.c
- */
-#if defined(NTOArchitecture) || \
- defined(LinuxArchitecture) || \
- defined(OpenBSDArchitecture) || \
- defined(SGIArchitecture) || \
- defined(SunArchitecture)
-NormalProgramTarget(resize,$(OBJS2),$(DEPLIBS2),NullParameter,NullParameter)
-#else
-NormalProgramTarget(resize,$(OBJS2),$(DEPLIBS2),NullParameter,$(TERMCAPLIB))
-#endif
-
-InstallProgramWithFlags(resize,$(BINDIR),NullParameter)
-
-/*
- * termcap is a special name that does not install correctly with
- * InstallNamedNonExec()
- */
-install::
- MakeDir($(DESTDIR)$(LIBDIR)/etc)
- $(INSTALL) $(INSTALLFLAGS) $(INSTDATFLAGS) termcap \
- $(DESTDIR)$(LIBDIR)/etc/xterm.termcap
-InstallNamedNonExec(terminfo,xterm.terminfo,$(LIBDIR)/etc)
-
-InstallAppDefaults(XTerm)
-InstallAppDefaults(UXTerm)
-InstallAppDefaultsLong(XTerm-col,XTerm-color)
-InstallManPage(xterm,$(MANDIR))
-InstallManPage(resize,$(MANDIR))
-DependTarget()
diff --git a/nx-X11/programs/xterm/MANIFEST b/nx-X11/programs/xterm/MANIFEST
deleted file mode 100644
index a23a710be..000000000
--- a/nx-X11/programs/xterm/MANIFEST
+++ /dev/null
@@ -1,126 +0,0 @@
-MANIFEST for xterm, version xterm-207
---------------------------------------------------------------------------------
-MANIFEST this file
-256colres.h resource-definitions for 256-color mode
-256colres.pl script to generate 256colres.h
-88colres.h resource definitions for 88-color mode
-88colres.pl script to generate 88colres.h
-AAA_README_VMS.txt note for VMS port of 'xterm'
-INSTALL configure script: options and related install instructions
-Imakefile imake template for Makefile
-Makefile.in configure script template for Makefile
-README overview & caveats for 'xterm'
-README.i18n i18n readme:
-README.os390 overview for os390 (EBCDIC) port of 'xterm'
-TekPrsTbl.c Tek4014 parser state tables
-Tekparse.def template for generating Tekparse.h
-Tekparse.h Tek4014 parser-state definitions
-Tekproc.c Tek4014 parser-state functions
-Tests Useful tests for xterm-developers
-UXTerm.ad alternate resources for UTF-8
-VTPrsTbl.c VT100 parser state tables
-VTparse.def template for generating VTparse.h
-VTparse.h VT100 parser-state definitions
-XTerm-col.ad color resource definitions for XTerm class
-XTerm.ad resource definitions for XTerm class
-aclocal.m4 configure script: custom macros
-button.c mouse button and selection processing
-charclass.c compact character-class module
-charclass.h interface of charclass.c
-charproc.c VT100 parser functions
-charsets.c module to translate character-sets
-config.guess configure script: guess the system type
-config.sub configure script: validate system type
-configure generated
-configure.in template for generating configure script
-configure Configuration script for UNIX
-ctlseqs.ms documentation: Xterm Control Sequences
-cursor.c VT100 low-level cursor movement
-data.c global data declarations
-data.h global data external-definitions
-doublechr.c VT100 double-size character support
-error.h error-code definitions for 'xterm'
-fontutils.c xterm functions for (re)loading fonts
-fontutils.h interface of fontutils.c
-gen-pc-fkeys.pl script to generate extended function-key terminfo
-input.c VT100 key-symbol and function-key translation
-install.sh configure script: fallback install script
-keysym2ucs.c lookup-table for UTF-8 to keysyms
-keysym2ucs.h interface of keysym2ucs.c
-link_axp.com build-script for VMS port of xterm
-main.c main program of 'xterm'
-main.h default definitions for 'xterm'
-make.com build-script for VMS port of 'xterm'
-menu.c popup/pulldown menus for 'xterm'
-menu.h interface of menu.c
-minstall.sh script for installing manpages
-misc.c miscellaneous utility functions for 'xterm'
-mkdirs.sh configure script: make directories for install process
-os2main.c main program for OS/2 EMX port of 'xterm'
-plink.sh script to prune unneeded libraries from link
-precompose.c table of precompose sequences
-precompose.h interface of precompose.c
-print.c VT100+ print support functions
-proto.h macros to simplify function prototypes
-ptydata.c functions to manipulate data read from pty
-ptyx.h structure-definitions for 'xterm'
-resize.c program to compute/modify xterm's window size
-resize.man manual page for 'resize'
-screen.c VT100 screen update functions
-scrollbar.c VT100 scrollbar support functions
-sinstall.sh install setuid if existing program was
-tabs.c VT100 tabstop support-functions
-termcap termcap entries for 'xterm'
-terminfo terminfo entries for 'xterm'
-testxmc.c testing: xmc/magic-cookies
-trace.c debugging trace functions for 'xterm'
-trace.h interface of trace.c
-util.c miscellaneous utility functions for 'xterm'
-uxterm wrapper script to make unicode-xterm
-version.h version of xterm
-vms.c VMS version of xterm's spawn(), etc.
-vms.h system headers and definitions for vms.c
-wcwidth.c wide-character utility functions
-wcwidth.h interface of wcwidth.c
-xcharmouse.h Jason Bacon's mouse-defs, cleaned up a little
-xstrings.c a few common string functions
-xstrings.h interface of xstrings.c
-xterm.dat application defaults for VMS port of 'xterm'
-xterm.h common includes, definitions and prototypes for 'xterm'
-xterm.log.html changelog for xterm
-xterm.man manual page for 'xterm'
-xterm_axp.opt linker options file for VMS port of 'xterm'
-xterm_io.h split-out definitions of termio/termios/sgtty and winsize from main.c, os2main.c, screen.c and resize.c
-xtermcfg.hin configure script: template for xtermcfg.h
-xutf8.c JC's cleanup of UTF8
-xutf8.h JC's cleanup of UTF8
-tektests subdirectory
-tektests/aitest.tek tek4014 demo: draw a globe
-tektests/dmerc.tek tek4014 demo: draws a Mercator projection with orbit
-tektests/fotest.tek tek4014 demo: draw a scatterplot on log scale
-tektests/imtest.tek tek4014 demo: draw a test pattern
-tektests/imtesth.tek tek4014 demo: draw a test pattern
-tektests/ocpred.tek tek4014 demo: an occultation prediction
-tektests/usmap.tek tek4014 demo: a US map
-unicode subdirectory
-unicode/README description of files in ./unicode
-unicode/convmap.pl perl script for generating the lookup table for UTF-8 to keysym
-unicode/keysym.map keysym mapping from UTF-8
-unicode/make-precompose.sh make precompose.c
-unicode/precompose.c.head header of precompose.c
-unicode/precompose.c.tail tail of precompose.c
-vttests subdirectory
-vttests/16colors.sh test-script to show 16-colors
-vttests/256colors.pl script to illustrate 256-colors
-vttests/256colors2.pl fancy test-script for 256-colors
-vttests/88colors.pl sample script showing 88-colors
-vttests/88colors2.pl sample script showing 88-colors
-vttests/8colors.sh test-script to illustrate 8-colors
-vttests/acolors.sh demonstrate changing the ANSI colors
-vttests/doublechars.sh test script to demonstrate doublesize chars
-vttests/dynamic.sh script to illustrate the dynamic colors control sequence
-vttests/fonts.sh script to demonstrate font-switching sequences
-vttests/resize.pl translated resize.sh to perl since it is easy to test, and I needed
-vttests/resize.sh script to demonstrate resizing
-vttests/tcapquery.pl script to test tcap-query option
-vttests/title.sh test-script to show title of xterm in action
diff --git a/nx-X11/programs/xterm/Makefile.in b/nx-X11/programs/xterm/Makefile.in
deleted file mode 100644
index 99fffe1d9..000000000
--- a/nx-X11/programs/xterm/Makefile.in
+++ /dev/null
@@ -1,243 +0,0 @@
-## $XTermId: Makefile.in,v 1.118 2005/11/03 13:17:27 tom Exp $
-##
-## $XFree86: xc/programs/xterm/Makefile.in,v 3.51 2005/11/03 13:17:27 dickey Exp $ ##
-##
-## Copyright 2002-2003,2004 by Thomas E. Dickey
-##
-## All Rights Reserved
-##
-## Permission to use, copy, modify, and distribute this software and its
-## documentation for any purpose and without fee is hereby granted,
-## provided that the above copyright notice appear in all copies and that
-## both that copyright notice and this permission notice appear in
-## supporting documentation, and that the name of the above listed
-## copyright holder(s) not be used in advertising or publicity pertaining
-## to distribution of the software without specific, written prior
-## permission.
-##
-## THE ABOVE LISTED COPYRIGHT HOLDER(S) DISCLAIM ALL WARRANTIES WITH REGARD
-## TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
-## AND FITNESS, IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE
-## LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
-## ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
-## OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-
-SHELL = /bin/sh
-
-#### Start of system configuration section. ####
-
-srcdir = @srcdir@
-VPATH = @srcdir@
-
-x = @EXEEXT@
-o = .@OBJEXT@
-
-CC = @CC@
-CPP = @CPP@
-AWK = @AWK@
-LINK = $(CC) $(CFLAGS)
-
-INSTALL = @INSTALL@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_DATA = @INSTALL_DATA@
-transform = @program_transform_name@
-
-X_LIBS = @X_LIBS@
-X_EXTRA_LIBS = @X_EXTRA_LIBS@
-
-EXTRA_CFLAGS = @EXTRA_CFLAGS@
-EXTRA_CPPFLAGS = @EXTRA_CPPFLAGS@
-EXTRA_LOADFLAGS = @IMAKE_LOADFLAGS@
-
-CPPFLAGS = -I. -I$(srcdir) -DHAVE_CONFIG_H @CPPFLAGS@ $(EXTRA_CPPFLAGS)
-CFLAGS = @CFLAGS@ $(EXTRA_CFLAGS)
-LDFLAGS = @LDFLAGS@
-LIBS = @LIBS@
-
-prefix = @prefix@
-exec_prefix = @exec_prefix@
-
-manext = 1
-bindir = @bindir@
-libdir = @libdir@
-mandir = @mandir@/man$(manext)
-appsdir = @appsdir@
-
-#### End of system configuration section. ####
-
-RM = rm -f
-LINT = @LINT@
-
-DESTDIR =
-BINDIR = $(DESTDIR)$(bindir)
-LIBDIR = $(DESTDIR)$(libdir)
-MANDIR = $(DESTDIR)$(mandir)
-APPSDIR = $(DESTDIR)$(appsdir)
-
-INSTALL_DIRS = $(BINDIR) $(APPSDIR) $(MANDIR)
-
-CLASS = XTerm
-EXTRAHDR = @EXTRAHDRS@
-EXTRASRC = @EXTRASRCS@
-EXTRAOBJ = @EXTRAOBJS@
-
- SRCS1 = button.c charproc.c charsets.c cursor.c \
- data.c doublechr.c fontutils.c input.c \
- $(MAINSRC) menu.c misc.c print.c ptydata.c \
- screen.c scrollbar.c tabs.c util.c xstrings.c \
- VTPrsTbl.c $(EXTRASRC)
- OBJS1 = button$o charproc$o charsets$o cursor$o \
- data$o doublechr$o fontutils$o input$o \
- main$o menu$o misc$o print$o ptydata$o \
- screen$o scrollbar$o tabs$o util$o xstrings$o \
- VTPrsTbl$o $(EXTRAOBJ)
- SRCS2 = resize.c xstrings.c
- OBJS2 = resize$o xstrings$o
- SRCS = $(SRCS1) $(SRCS2)
- OBJS = $(OBJS1) $(OBJS2)
- HDRS = VTparse.h data.h error.h main.h menu.h proto.h \
- ptyx.h version.h xstrings.h xterm.h $(EXTRAHDR)
- PROGRAMS = xterm$x resize$x
-
-all : $(PROGRAMS)
-
-.SUFFIXES : .i .def .hin
-
-.c$o :
-@RULE_CC@
- @ECHO_CC@$(CC) $(CPPFLAGS) $(CFLAGS) -c $(srcdir)/$*.c
-
-.c.i :
-@RULE_CC@
- @ECHO_CC@$(CPP) -C $(CPPFLAGS) $*.c >$@
-
-.def.hin :
- grep '^CASE_' $< | $(AWK) '{printf "#define %s %d\n", $$1, n++}' >$@
-
-main$o : main.h
-misc$o : version.h
-
-$(OBJS1) : xterm.h ptyx.h xtermcfg.h
-main$o resize$o screen$o : xterm_io.h
-
-xterm$x : $(OBJS1)
- @ECHO_LD@$(LINK) $(LDFLAGS) -o $@ $(OBJS1) $(X_LIBS) $(X_EXTRA_LIBS) $(LIBS) $(EXTRA_LOADFLAGS)
-
-resize$x : $(OBJS2)
- @ECHO_LD@$(SHELL) $(srcdir)/plink.sh $(LINK) $(LDFLAGS) -o $@ $(OBJS2) $(X_LIBS) $(X_EXTRA_LIBS) $(LIBS)
-
-256colres.h :
- -rm -f $@
- perl $(srcdir)/256colres.pl > $@
-
-88colres.h :
- -rm -f $@
- perl $(srcdir)/88colres.pl > $@
-
-charproc$o : main.h @CHARPROC_DEPS@
-
-TRANSFORM = sed 's/$x$$//'|sed '$(transform)'|sed 's/$$/$x/'
-actual_xterm = `echo xterm| sed '$(transform)'`
-actual_resize = `echo resize| sed '$(transform)'`
-binary_xterm = `echo xterm$x| $(TRANSFORM)`
-binary_resize = `echo resize$x| $(TRANSFORM)`
-binary_uxterm = `echo uxterm| $(TRANSFORM)`
-
-install \
-install-bin \
-install-full :: xterm$x resize$x $(BINDIR)
-@MAY_SETUID@ $(SHELL) $(srcdir)/sinstall.sh @SINSTALL_OPTS@ "$(INSTALL_PROGRAM)" xterm$x @XTERM_PATH@ $(BINDIR)/$(binary_xterm)
-@NOT_SETUID@ $(INSTALL_PROGRAM) xterm$x $(BINDIR)/$(binary_xterm)
- $(INSTALL_PROGRAM) -m 755 resize$x $(BINDIR)/$(binary_resize)
- $(INSTALL_SCRIPT) -m 755 $(srcdir)/uxterm $(BINDIR)/$(binary_uxterm)
-
-install \
-install-man \
-install-full :: $(MANDIR)
- $(SHELL) $(srcdir)/minstall.sh "$(INSTALL_DATA)" $(srcdir)/xterm.man $(MANDIR)/$(actual_xterm).$(manext)
- $(SHELL) $(srcdir)/minstall.sh "$(INSTALL_DATA)" $(srcdir)/resize.man $(MANDIR)/$(actual_resize).$(manext)
-
-install \
-install-app \
-install-full :: $(APPSDIR)
- @echo installing $(APPSDIR)/$(CLASS)
- @sed -e s/XTerm/$(CLASS)/ $(srcdir)/XTerm.ad >XTerm.tmp
- @$(INSTALL_DATA) XTerm.tmp $(APPSDIR)/$(CLASS)
- @echo installing $(APPSDIR)/$(CLASS)-color
- @sed -e s/XTerm/$(CLASS)/ $(srcdir)/XTerm-col.ad >XTerm.tmp
- @$(INSTALL_DATA) XTerm.tmp $(APPSDIR)/$(CLASS)-color
- @echo installing $(APPSDIR)/UXTerm
- @sed -e s/XTerm/$(CLASS)/ $(srcdir)/UXTerm.ad >XTerm.tmp
- @$(INSTALL_DATA) XTerm.tmp $(APPSDIR)/UXTerm
- @rm -f XTerm.tmp
-
-install ::
- @echo 'Completed installation of executables and documentation.'
- @echo 'Use "make install-ti" to install terminfo description.'
-
-TERMINFO_DIR = @TERMINFO_DIR@
-SET_TERMINFO = @SET_TERMINFO@
-
-install-full \
-install-ti :: $(TERMINFO_DIR)
- $(SET_TERMINFO) tic $(srcdir)/terminfo
- @echo 'Completed installation of terminfo description.'
-
-install-full \
-install-tc ::
- @test -f /etc/termcap && echo 'You must install the termcap entry manually by editing /etc/termcap'
-
-installdirs : $(INSTALL_DIRS)
-
-uninstall :
- -$(RM) $(BINDIR)/$(binary_xterm)
- -$(RM) $(BINDIR)/$(binary_resize)
- -$(RM) $(BINDIR)/$(binary_uxterm)
- -$(RM) $(MANDIR)/$(actual_xterm).$(manext)
- -$(RM) $(MANDIR)/$(actual_resize).$(manext)
- -$(RM) $(APPSDIR)/$(CLASS)
- -$(RM) $(APPSDIR)/$(CLASS)-color
- -$(RM) $(APPSDIR)/UXTerm
-
-mostlyclean :
- -$(RM) *$o *.[is] XtermLog.* .pure core *~ *.bak *.BAK *.out *.tmp
-
-clean : mostlyclean
- -$(RM) $(PROGRAMS)
-
-distclean : clean
- -$(RM) Makefile config.status config.cache config.log xtermcfg.h
-
-realclean : distclean
- -$(RM) tags TAGS ctlseqs.ps ctlseqs.txt
-
-maintainer-clean : realclean
- -$(RM) 256colres.h 88colres.h
-
-ctlseqs.txt : ctlseqs.ms
- GROFF_NO_SGR=stupid $(SHELL) -c "tbl ctlseqs.ms | nroff -Tascii -ms" >$@
-
-ctlseqs.ps : ctlseqs.ms
- tbl ctlseqs.ms | groff -ms >$@
-
-lint :
- $(LINT) $(CPPFLAGS) $(SRCS1)
- $(LINT) $(CPPFLAGS) $(SRCS2)
-
-tags :
- ctags $(SRCS) $(HDRS)
-
-TAGS :
- etags $(SRCS) $(HDRS)
-
-$(TERMINFO_DIR) $(INSTALL_DIRS) :
- $(SHELL) ${srcdir}/mkdirs.sh $@
-
-ALWAYS :
-
-depend : $(TABLES)
- makedepend -- $(CPPFLAGS) -- $(SRCS)
-
-# DO NOT DELETE THIS LINE -- make depend depends on it.
diff --git a/nx-X11/programs/xterm/README b/nx-X11/programs/xterm/README
deleted file mode 100644
index f098b04b0..000000000
--- a/nx-X11/programs/xterm/README
+++ /dev/null
@@ -1,15 +0,0 @@
- Abandon All Hope, Ye Who Enter Here
-
-
-This is undoubtedly the most ugly program in the distribution. It was one of
-the first "serious" programs ported, and still has a lot of historical baggage.
-Ideally, there would be a general tty widget and then vt102 and tek4014
-subwidgets so that they could be used in other programs. We are trying to
-clean things up as we go, but there is still a lot of work to do.
-
-If you are porting this to a machine that has problems with overlapping
-bcopy's, watch out!
-
-There are two documents on xterm: the man page, xterm.man, which describes
-how to use it, and ctlseqs.ms, which describes the control sequences it
-understands.
diff --git a/nx-X11/programs/xterm/README.i18n b/nx-X11/programs/xterm/README.i18n
deleted file mode 100644
index 511ee60f6..000000000
--- a/nx-X11/programs/xterm/README.i18n
+++ /dev/null
@@ -1,199 +0,0 @@
--- $XFree86: xc/programs/xterm/README.i18n,v 1.1 2003/11/13 01:16:37 dickey Exp $
-
-Using xterm in your language
-============================
-
-Since XFree86 version 4.0, the internationalization (i18n) feature of
-xterm is gradually improved. Xterm is being improved even now. You
-need only set the standard locale environment variables such as
-LC_CTYPE, LC_ALL, LC_CTYPE, or LANG. Once the locale is set up you can
-use xterm in your favorite character encoding.
-
-This document explains how the i18n feature is realized and how to
-configure xterm for your character encoding.
-
-Refer to locale(7) for details of the locale mechanism.
-
-
-Basic i18n-related settings and resources
-=========================================
-
-These settings apply to XFree86 xterm patch #181, and the program luit
-which is distributed with XFree86 4.4
-
-1. Usage of "locale mode"
-
- On startup, xterm must be in "locale mode" to make it follow the
- current locale. You can invoke xterm in locale mode in these ways:
-
- a. Set "vt100.locale" resource "true". This resource was
- introduced since XFree86 4.3. The default value of the "locale"
- resource is "medium", which means xterm follows the locale only
- in Chinese, Japanese, Korean, or Thai locales. For example,
-
- XTerm*locale: true
-
- in your ~/.Xresources file.
-
- or
-
- b. Invoke xterm with the "-lc" option.
-
-2. Converter program "luit"
-
- The "luit" must be available in the standard XFree86 binary
- directory. It is usually available because it is part of the
- XFree86 distribution. The standard binary directory may differ from
- system to system. /usr/X11R6/bin/luit is an example.
-
- "luit" is used to convert between Unicode and the character encoding
- for your locale. When built for XFree86, xterm includes logic for
- invoking luit.
-
-3. Locale setting
-
- Finally, you will need to configure your locale. We expect that you
- have already configured your locale for other software. For example,
-
- LANG=de_DE@euro
- export LANG
-
- in your ~/.xsession file. There are many ways to configure locale.
- For example, your display manager may have a mechanism to invoke a
- window manager in your favorite locale, or you may have system-wide
- locale setting in /etc/environment. You may also have set the
- LC_ALL variable instead of the LANG variable.
-
-
-How to use xterm in different locale temporarily
-================================================
-
-You may sometimes need to invoke xterm in a different character encoding
-than your current locale. For example, use xterm to login remote systems
-in different locale.
-
-Do this by invoking xterm in the target locale. For example,
-
- $ LANG=ru_RU.KOI8-R xterm &
-
-Previously, font setting has been used in such cases.
-
- $ xterm -fn -misc-fixed-medium-r-normal--10-*-*-*-*-*-koi8-r &
-
-This does not work well in conjunction with the "locale" resource,
-because luit and xterm combined rely upon Unicode fonts.
-
-
-How to set fonts for UTF-8/locale modes
-=======================================
-
-Since xterm patch #181, xterm can automatically use Unicode fonts in
-UTF-8 mode and locale mode. Few of you will need to modify the default
-setting to display your language. In particular, Unicode fonts in
-combination with locale mode will satisfy the needs of not only
-ISO-8859-1 users but also East Asian and other non-ISO-8859-1 users.
-
-If you want to set your favorite Unicode font for UTF-8 and locale
-modes, you should add a line such as the following in your ~/.Xresources
-file:
-
- XTerm*VT100.utf8Fonts.font: \
- -misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso10646-1
-
-The leading "XTerm*" pattern is more specific than the system's
-app-defaults file, therefore it overrides the corresponding line
-beginning with
-
- *VT100.utf8Fonts.font:
-
-Here is an additional note. If you want to display East Asian
-doublewidth characters (CJK Ideogram, Hiragana, Katakana, Hangul,
-and so on), we recommend using
-
- -misc-fixed-medium-r-semicondensed--13-*-*-*-*-*-iso10646-1
-
-or
-
- -misc-fixed-medium-r-normal--18-*-*-*-*-*-iso10646-1
-
-because these two fonts have corresponding doublewidth fonts. These
-fonts are used as default font and default "Large" font, respectively.
-
-
-The internals of xterm i18n
-===========================
-
-You do not need to read this section if you only want to configure your
-xterm. Here we describe how xterm is implemented to support i18n.
-
-The original version of xterm does not support locale or character
-encoding. Its I/O stream is interpreted as a mere 8-bit index for a
-font.
-
-Beginning with XFree86 4.0, xterm supported UTF-8. It was implemented
-as a separate UTF-8 mode from the conventional 8-bit mode. Character
-encodings had no effect on the 8-bit mode. The UTF-8 mode has been
-extended to support doublewidth characters (for East Asian characters)
-and combining characters (such as accents for Latin alphabets and Thai
-vowels/tone marks).
-
-Doublewidth characters are characters that occupy two continuing
-columns on the terminal. Xterm uses separate fonts for normal
-(singlewidth) characters and doublewidth characters. Though xterm has
-configuration items for specifying doublewidth fonts, it will
-automatically search for a font with exactly twice as wide and the same
-name as the specified normal font.
-
-The default behavior of xterm was modified to use this UTF-8 mode in
-UTF-8 locales. A command line option of "-u8" and a resource of "utf8"
-were introduced to choose UTF-8 mode.
-
-"luit" was introduced to XFree86 at version 4.2. It converts between
-UTF-8 and other encodings. When luit is invoked in a UTF-8 terminal,
-the terminal acts as if it is really running in the other encoding.
-
-Since XFree86 version 4.3, xterm provides a new mode to invoke luit
-automatically to support various encodings. The mode where xterm
-invokes luit is called "locale mode". It is the third mode following
-conventional 8-bit mode and UTF-8 mode. In the locale mode, xterm is
-aware of the current locale and character encoding. Since locale mode
-uses luit, it is based on the UTF-8 mode. That is, xterm works in UTF-8
-mode and luit works as a converter between UTF-8 and the character
-encoding for your locale. This is why the locale mode always needs
-Unicode fonts. The default behavior of xterm is modified so that the
-"locale mode" will be adopted in Chinese (Big5 and GB2312), Japanese
-(EUC-JP), Korean (EUC-KR), and Thai (ISO-8859-11, as known as TIS-620)
-locales. Locale mode is chosen for these character encodings because
-these encodings are not supported by conventional 8-bit mode even by
-changing fonts (ISO-8859-11 needs combining characters and others need
-doublewidth characters).
-
-To control the locale mode, command line options of "-lc" and "-en" and
-a resource of "locale" were introduced. The command line option of
-"-u8" and a resource of "utf8" were made obsolete by them, though
-retained for compatibility.
-
-Since XFree86 version 4.4, xterm can have two sets of default fonts,
-one for conventional 8-bit mode and another for UTF-8 and locale modes,
-by introducing the "utf8Fonts" subresource.
-
-
-Future TODO Items
-=================
-
-We anticipate that xterm's locale mode will be used increasingly in the
-future. Since the UTF-8 and locale modes use more resources than
-conventional 8-bit mode (because it needs larger fonts and another
-process "luit"), faster hardware may be needed to gain complete
-acceptance by users. However, the locale mechanism allows users
-to manipulate data in a standard form. Its usefulness compensates
-in part for reduced performance.
-
-Xterm supports antialiased fonts ("-fa" and "-fs" command line options).
-Currently UTF-8 nor locale modes do not work with antialiased fonts.
-
-Xterm does not support bi-directional or RTL languages such as Hebrew
-and Arab. A simple standard how terminal should behave for these
-languages is needed.
-
-Xterm does not support Unicode characters above U+10000.
diff --git a/nx-X11/programs/xterm/README.os390 b/nx-X11/programs/xterm/README.os390
deleted file mode 100644
index 2fe50b604..000000000
--- a/nx-X11/programs/xterm/README.os390
+++ /dev/null
@@ -1,74 +0,0 @@
--- $XFree86: xc/programs/xterm/README.os390,v 1.3 2000/09/22 10:42:05 alanh Exp $
-
-Below are install instructions for os/390 2.5 & below and
-for os/390 2.6 & above. The basic reasons for exporting
-the LIBS and CFLAGS variables is to get the configure
-script to run properly under os/390. configure, when
-checking for X, attempts to compile a program something like
-
- int main() {
- XtMalloc()
- ; return 0; }
-
-using 'cc -o conftest conftest.c -lXt'. However this results
-in a number of linkedit messages such as:
-
- IEW2456E 9207 SYMBOL xcatd UNRESOLVED. MEMBER COULD NOT BE INCLUDED FROM THE
- DESIGNATED CALL LIBRARY. NAME SPACE = 3
- IEW2456E 9207 SYMBOL XrmQGetResource UNRESOLVED. MEMBER COULD NOT BE INCLUDED
- FROM THE DESIGNATED CALL LIBRARY.
- IEW2456E 9207 SYMBOL XrmGetDatabase UNRESOLVED. MEMBER COULD NOT BE INCLUDED
- FROM THE DESIGNATED CALL LIBRARY.
-
-The only way I can get this program to compile and link is to
-use 'cc -o conftest conftest.c -lXt -lX11 -lSM -lICE'.
-With os/390 2.6 and above, IBM has provided X functions in dlls;
-this is the reason for the separate install steps. In fact,
-trying to use the X archive files (eg -lX11) when linking xterm
-results in an abend0C1 in low storage when X tries to call the
-initialize function (at least on my system). This has something
-to do with the calling X routine thinking it has a function pointer
-descriptor (c++) when it actually has just a function pointer (c).
-Unfortunately, I have been unable to recreate the problem in a
-simple testcase, so I haven't reported it to IBM. Anyway, for os/390
-2.6 and above, configure will build a Makefile with the following line:
-
- LIBS = -lXaw -lXext -lXmu -lXt -lSM -lICE -lX11 /usr/lib/Xaw.x /usr/lib/SM.x /usr/lib/ICE.x /usr/lib/X11.x -lcurses
-
-The '-lXaw -lXext -lXmu -lXt -lSM -lICE -lX11' should be manually removed;
-this isn't strictly necessary, but will reduce the size of the executable
-by about 4M.
-
-The '-Wl,EDIT=NO' causes the Binder to produce a non-editable executable,
-dramatically reducing the size of the executable file.
-
-Good Luck!!
-Greg Smith
-rys@trex.rtpnc.epa.gov
-
-
-
-Install instructions for os/390 2.5 and *below*:
-------------------------------------------------
- gunzip xterm.tar.gz
- pax -o from=ISO8859-1,to=IBM-1047 -rf xterm.tar
- cd xterm
- export LIBS='-lXt -lX11 -lSM -lICE'
- export CFLAGS='-D_ALL_SOURCE -Wl,EDIT=NO'
- ./configure
- make
- export DISPLAY=my.xserver.name:0
- ./xterm
-
-
-Install instructions for os/390 2.6 and *above*:
-------------------------------------------------
- gunzip xterm.tar.gz
- pax -o from=ISO8859-1,to=IBM-1047 -rf xterm.tar
- cd xterm
- ./configure # LIBS, CFLAGS, and CC are defined by configure for os/390 2.6.
- [optional: edit the Makefile and remove '-lXaw -lXext -lXmu -lXt -lSM -lICE -lX11'
- from the LIBS assignment]
- make
- export DISPLAY=my.xserver.name:0
- ./xterm
diff --git a/nx-X11/programs/xterm/TekPrsTbl.c b/nx-X11/programs/xterm/TekPrsTbl.c
deleted file mode 100644
index 290a0a332..000000000
--- a/nx-X11/programs/xterm/TekPrsTbl.c
+++ /dev/null
@@ -1,2622 +0,0 @@
-/*
- * $Xorg: TekPrsTbl.c,v 1.3 2000/08/17 19:55:07 cpqbld Exp $
- */
-
-
-/*
- * Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
- *
- * All Rights Reserved
- *
- * Permission to use, copy, modify, and distribute this software and its
- * documentation for any purpose and without fee is hereby granted,
- * provided that the above copyright notice appear in all copies and that
- * both that copyright notice and this permission notice appear in
- * supporting documentation, and that the name of Digital Equipment
- * Corporation not be used in advertising or publicity pertaining to
- * distribution of the software without specific, written prior permission.
- *
- *
- * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
- * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
- * DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
- * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
- * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
- * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- * SOFTWARE.
- */
-/* $XFree86: xc/programs/xterm/TekPrsTbl.c,v 3.3 2001/01/17 23:46:33 dawes Exp $ */
-
-#include <Tekparse.h>
-
-Const int Talptable[] = /* US (^_) normal alpha mode */
-{
-/* NUL SOH STX ETX */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* EOT ENQ ACK BEL */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_BEL,
-/* BS HT NL VT */
-CASE_BS,
-CASE_TAB,
-CASE_LF,
-CASE_UP,
-/* NP CR SO SI */
-CASE_IGNORE,
-CASE_CR,
-CASE_IGNORE,
-CASE_IGNORE,
-/* DLE DC1 DC2 DC3 */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* DC4 NAK SYN ETB */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* CAN EM SUB ESC */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_ESC_STATE,
-/* FS GS RS US */
-CASE_PT_STATE,
-CASE_PLT_STATE,
-CASE_IPL_STATE,
-CASE_ALP_STATE,
-/* SP ! " # */
-CASE_SP,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* $ % & ' */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* ( ) * + */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* , - . / */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* 0 1 2 3 */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* 4 5 6 7 */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* 8 9 : ; */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* < = > ? */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* @ A B C */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* D E F G */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* H I J K */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* L M N O */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* P Q R S */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* T U V W */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* X Y Z [ */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* \ ] ^ _ */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* ` a b c */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* d e f g */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* h i j k */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* l m n o */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* p q r s */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* t u v w */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* x y z { */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* | } ~ DEL */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_IGNORE,
-/* 0x80 0x81 0x82 0x83 */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0x84 0x85 0x86 0x87 */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0x88 0x89 0x8a 0x8b */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0x8c 0x8d 0x8e 0x8f */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0x90 0x91 0x92 0x93 */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0x94 0x95 0x96 0x97 */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0x99 0x99 0x9a 0x9b */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0x9c 0x9d 0x9e 0x9f */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* nobreakspace exclamdown cent sterling */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* currency yen brokenbar section */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* diaeresis copyright ordfeminine guillemotleft */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* notsign hyphen registered macron */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* degree plusminus twosuperior threesuperior */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* acute mu paragraph periodcentered */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* cedilla onesuperior masculine guillemotright */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* onequarter onehalf threequarters questiondown */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* Agrave Aacute Acircumflex Atilde */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* Adiaeresis Aring AE Ccedilla */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* Egrave Eacute Ecircumflex Ediaeresis */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* Igrave Iacute Icircumflex Idiaeresis */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* Eth Ntilde Ograve Oacute */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* Ocircumflex Otilde Odiaeresis multiply */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* Ooblique Ugrave Uacute Ucircumflex */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* Udiaeresis Yacute Thorn ssharp */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* agrave aacute acircumflex atilde */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* adiaeresis aring ae ccedilla */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* egrave eacute ecircumflex ediaeresis */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* igrave iacute icircumflex idiaeresis */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* eth ntilde ograve oacute */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* ocircumflex otilde odiaeresis division */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* oslash ugrave uacute ucircumflex */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* udiaeresis yacute thorn ydiaeresis */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-};
-
-Const int Tbestable[] = /* ESC while in bypass state */
-{
-/* NUL SOH STX ETX */
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_VT_MODE,
-/* EOT ENQ ACK BEL */
-CASE_BYP_STATE,
-CASE_REPORT,
-CASE_BYP_STATE,
-CASE_BEL,
-/* BS HT NL VT */
-CASE_BS,
-CASE_TAB,
-CASE_IGNORE,
-CASE_UP,
-/* NP CR SO SI */
-CASE_PAGE,
-CASE_IGNORE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-/* DLE DC1 DC2 DC3 */
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-/* DC4 NAK SYN ETB */
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_COPY,
-/* CAN EM SUB ESC */
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_GIN,
-CASE_IGNORE,
-/* FS GS RS US */
-CASE_SPT_STATE,
-CASE_PLT_STATE,
-CASE_IPL_STATE,
-CASE_ALP_STATE,
-/* SP ! " # */
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-/* $ % & ' */
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-/* ( ) * + */
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-/* , - . / */
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-/* 0 1 2 3 */
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-/* 4 5 6 7 */
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-/* 8 9 : ; */
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-/* < = > ? */
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-/* @ A B C */
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-/* D E F G */
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-/* H I J K */
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-/* L M N O */
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-/* P Q R S */
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-/* T U V W */
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-/* X Y Z [ */
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-/* \ ] ^ _ */
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-/* ` a b c */
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-/* d e f g */
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-/* h i j k */
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-/* l m n o */
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-/* p q r s */
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-/* t u v w */
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-/* x y z { */
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-/* | } ~ DEL */
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_IGNORE,
-CASE_BYP_STATE,
-/* 0x80 0x81 0x82 0x83 */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0x84 0x85 0x86 0x87 */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0x88 0x89 0x8a 0x8b */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0x8c 0x8d 0x8e 0x8f */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0x90 0x91 0x92 0x93 */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0x94 0x95 0x96 0x97 */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0x99 0x99 0x9a 0x9b */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0x9c 0x9d 0x9e 0x9f */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* nobreakspace exclamdown cent sterling */
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-/* currency yen brokenbar section */
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-/* diaeresis copyright ordfeminine guillemotleft */
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-/* notsign hyphen registered macron */
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-/* degree plusminus twosuperior threesuperior */
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-/* acute mu paragraph periodcentered */
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-/* cedilla onesuperior masculine guillemotright */
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-/* onequarter onehalf threequarters questiondown */
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-/* Agrave Aacute Acircumflex Atilde */
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-/* Adiaeresis Aring AE Ccedilla */
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-/* Egrave Eacute Ecircumflex Ediaeresis */
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-/* Igrave Iacute Icircumflex Idiaeresis */
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-/* Eth Ntilde Ograve Oacute */
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-/* Ocircumflex Otilde Odiaeresis multiply */
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-/* Ooblique Ugrave Uacute Ucircumflex */
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-/* Udiaeresis Yacute Thorn ssharp */
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-/* agrave aacute acircumflex atilde */
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-/* adiaeresis aring ae ccedilla */
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-/* egrave eacute ecircumflex ediaeresis */
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-/* igrave iacute icircumflex idiaeresis */
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-/* eth ntilde ograve oacute */
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-/* ocircumflex otilde odiaeresis division */
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-/* oslash ugrave uacute ucircumflex */
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-/* udiaeresis yacute thorn ydiaeresis */
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-CASE_BYP_STATE,
-};
-
-Const int Tbyptable[] = /* ESC CAN (^X) bypass state */
-{
-/* NUL SOH STX ETX */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* EOT ENQ ACK BEL */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_BEL,
-/* BS HT NL VT */
-CASE_BS,
-CASE_TAB,
-CASE_LF,
-CASE_UP,
-/* NP CR SO SI */
-CASE_IGNORE,
-CASE_CR,
-CASE_IGNORE,
-CASE_IGNORE,
-/* DLE DC1 DC2 DC3 */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* DC4 NAK SYN ETB */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* CAN EM SUB ESC */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_BES_STATE,
-/* FS GS RS US */
-CASE_PT_STATE,
-CASE_PLT_STATE,
-CASE_IPL_STATE,
-CASE_ALP_STATE,
-/* SP ! " # */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* $ % & ' */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* ( ) * + */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* , - . / */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0 1 2 3 */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 4 5 6 7 */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 8 9 : ; */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* < = > ? */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* @ A B C */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* D E F G */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* H I J K */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* L M N O */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* P Q R S */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* T U V W */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* X Y Z [ */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* \ ] ^ _ */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* ` a b c */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* d e f g */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* h i j k */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* l m n o */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* p q r s */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* t u v w */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* x y z { */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* | } ~ DEL */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0x80 0x81 0x82 0x83 */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0x84 0x85 0x86 0x87 */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0x88 0x89 0x8a 0x8b */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0x8c 0x8d 0x8e 0x8f */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0x90 0x91 0x92 0x93 */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0x94 0x95 0x96 0x97 */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0x99 0x99 0x9a 0x9b */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0x9c 0x9d 0x9e 0x9f */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* nobreakspace exclamdown cent sterling */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* currency yen brokenbar section */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* diaeresis copyright ordfeminine guillemotleft */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* notsign hyphen registered macron */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* degree plusminus twosuperior threesuperior */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* acute mu paragraph periodcentered */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* cedilla onesuperior masculine guillemotright */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* onequarter onehalf threequarters questiondown */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* Agrave Aacute Acircumflex Atilde */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* Adiaeresis Aring AE Ccedilla */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* Egrave Eacute Ecircumflex Ediaeresis */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* Igrave Iacute Icircumflex Idiaeresis */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* Eth Ntilde Ograve Oacute */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* Ocircumflex Otilde Odiaeresis multiply */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* Ooblique Ugrave Uacute Ucircumflex */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* Udiaeresis Yacute Thorn ssharp */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* agrave aacute acircumflex atilde */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* adiaeresis aring ae ccedilla */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* egrave eacute ecircumflex ediaeresis */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* igrave iacute icircumflex idiaeresis */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* eth ntilde ograve oacute */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* ocircumflex otilde odiaeresis division */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* oslash ugrave uacute ucircumflex */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* udiaeresis yacute thorn ydiaeresis */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-};
-
-Const int Tesctable[] = /* ESC */
-{
-/* NUL SOH STX ETX */
-CASE_CURSTATE,
-CASE_CURSTATE,
-CASE_CURSTATE,
-CASE_VT_MODE,
-/* EOT ENQ ACK BEL */
-CASE_CURSTATE,
-CASE_REPORT,
-CASE_CURSTATE,
-CASE_BEL,
-/* BS HT NL VT */
-CASE_BS,
-CASE_TAB,
-CASE_IGNORE,
-CASE_UP,
-/* NP CR SO SI */
-CASE_PAGE,
-CASE_IGNORE,
-CASE_APL,
-CASE_ASCII,
-/* DLE DC1 DC2 DC3 */
-CASE_CURSTATE,
-CASE_CURSTATE,
-CASE_CURSTATE,
-CASE_CURSTATE,
-/* DC4 NAK SYN ETB */
-CASE_CURSTATE,
-CASE_CURSTATE,
-CASE_CURSTATE,
-CASE_COPY,
-/* CAN EM SUB ESC */
-CASE_BYP_STATE,
-CASE_CURSTATE,
-CASE_GIN,
-CASE_IGNORE,
-/* FS GS RS US */
-CASE_SPT_STATE,
-CASE_PLT_STATE,
-CASE_IPL_STATE,
-CASE_ALP_STATE,
-/* SP ! " # */
-CASE_CURSTATE,
-CASE_CURSTATE,
-CASE_CURSTATE,
-CASE_CURSTATE,
-/* $ % & ' */
-CASE_CURSTATE,
-CASE_CURSTATE,
-CASE_CURSTATE,
-CASE_CURSTATE,
-/* ( ) * + */
-CASE_CURSTATE,
-CASE_CURSTATE,
-CASE_CURSTATE,
-CASE_CURSTATE,
-/* , - . / */
-CASE_CURSTATE,
-CASE_CURSTATE,
-CASE_CURSTATE,
-CASE_CURSTATE,
-/* 0 1 2 3 */
-CASE_CURSTATE,
-CASE_CURSTATE,
-CASE_CURSTATE,
-CASE_CURSTATE,
-/* 4 5 6 7 */
-CASE_CURSTATE,
-CASE_CURSTATE,
-CASE_CURSTATE,
-CASE_CURSTATE,
-/* 8 9 : ; */
-CASE_CHAR_SIZE,
-CASE_CHAR_SIZE,
-CASE_CHAR_SIZE,
-CASE_CHAR_SIZE,
-/* < = > ? */
-CASE_CURSTATE,
-CASE_CURSTATE,
-CASE_CURSTATE,
-CASE_CURSTATE,
-/* @ A B C */
-CASE_CURSTATE,
-CASE_CURSTATE,
-CASE_CURSTATE,
-CASE_CURSTATE,
-/* D E F G */
-CASE_CURSTATE,
-CASE_CURSTATE,
-CASE_CURSTATE,
-CASE_CURSTATE,
-/* H I J K */
-CASE_CURSTATE,
-CASE_CURSTATE,
-CASE_CURSTATE,
-CASE_CURSTATE,
-/* L M N O */
-CASE_CURSTATE,
-CASE_CURSTATE,
-CASE_CURSTATE,
-CASE_CURSTATE,
-/* P Q R S */
-CASE_CURSTATE,
-CASE_CURSTATE,
-CASE_CURSTATE,
-CASE_CURSTATE,
-/* T U V W */
-CASE_CURSTATE,
-CASE_CURSTATE,
-CASE_CURSTATE,
-CASE_CURSTATE,
-/* X Y Z [ */
-CASE_CURSTATE,
-CASE_CURSTATE,
-CASE_CURSTATE,
-CASE_CURSTATE,
-/* \ ] ^ _ */
-CASE_CURSTATE,
-CASE_OSC,
-CASE_CURSTATE,
-CASE_CURSTATE,
-/* ` a b c */
-CASE_BEAM_VEC,
-CASE_BEAM_VEC,
-CASE_BEAM_VEC,
-CASE_BEAM_VEC,
-/* d e f g */
-CASE_BEAM_VEC,
-CASE_CURSTATE,
-CASE_CURSTATE,
-CASE_BEAM_VEC,
-/* h i j k */
-CASE_BEAM_VEC,
-CASE_BEAM_VEC,
-CASE_BEAM_VEC,
-CASE_BEAM_VEC,
-/* l m n o */
-CASE_BEAM_VEC,
-CASE_CURSTATE,
-CASE_CURSTATE,
-CASE_BEAM_VEC,
-/* p q r s */
-CASE_BEAM_VEC,
-CASE_BEAM_VEC,
-CASE_BEAM_VEC,
-CASE_BEAM_VEC,
-/* t u v w */
-CASE_BEAM_VEC,
-CASE_CURSTATE,
-CASE_CURSTATE,
-CASE_BEAM_VEC,
-/* x y z { */
-CASE_CURSTATE,
-CASE_CURSTATE,
-CASE_CURSTATE,
-CASE_CURSTATE,
-/* | } ~ DEL */
-CASE_CURSTATE,
-CASE_CURSTATE,
-CASE_IGNORE,
-CASE_CURSTATE,
-/* 0x80 0x81 0x82 0x83 */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0x84 0x85 0x86 0x87 */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0x88 0x89 0x8a 0x8b */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0x8c 0x8d 0x8e 0x8f */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0x90 0x91 0x92 0x93 */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0x94 0x95 0x96 0x97 */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0x99 0x99 0x9a 0x9b */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0x9c 0x9d 0x9e 0x9f */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* nobreakspace exclamdown cent sterling */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* currency yen brokenbar section */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* diaeresis copyright ordfeminine guillemotleft */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* notsign hyphen registered macron */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* degree plusminus twosuperior threesuperior */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* acute mu paragraph periodcentered */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* cedilla onesuperior masculine guillemotright */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* onequarter onehalf threequarters questiondown */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* Agrave Aacute Acircumflex Atilde */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* Adiaeresis Aring AE Ccedilla */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* Egrave Eacute Ecircumflex Ediaeresis */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* Igrave Iacute Icircumflex Idiaeresis */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* Eth Ntilde Ograve Oacute */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* Ocircumflex Otilde Odiaeresis multiply */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* Ooblique Ugrave Uacute Ucircumflex */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* Udiaeresis Yacute Thorn ssharp */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* agrave aacute acircumflex atilde */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* adiaeresis aring ae ccedilla */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* egrave eacute ecircumflex ediaeresis */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* igrave iacute icircumflex idiaeresis */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* eth ntilde ograve oacute */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* ocircumflex otilde odiaeresis division */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* oslash ugrave uacute ucircumflex */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* udiaeresis yacute thorn ydiaeresis */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-};
-
-Const int Tipltable[] = /* RS (^^) incremental plot */
-{
-/* NUL SOH STX ETX */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* EOT ENQ ACK BEL */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_BEL,
-/* BS HT NL VT */
-CASE_BS,
-CASE_TAB,
-CASE_LF,
-CASE_UP,
-/* NP CR SO SI */
-CASE_IGNORE,
-CASE_CR,
-CASE_IGNORE,
-CASE_IGNORE,
-/* DLE DC1 DC2 DC3 */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* DC4 NAK SYN ETB */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* CAN EM SUB ESC */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_ESC_STATE,
-/* FS GS RS US */
-CASE_PT_STATE,
-CASE_PLT_STATE,
-CASE_IPL_STATE,
-CASE_ALP_STATE,
-/* SP ! " # */
-CASE_PENUP,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* $ % & ' */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* ( ) * + */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* , - . / */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0 1 2 3 */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 4 5 6 7 */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 8 9 : ; */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* < = > ? */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* @ A B C */
-CASE_IGNORE,
-CASE_IPL_POINT,
-CASE_IPL_POINT,
-CASE_IGNORE,
-/* D E F G */
-CASE_IPL_POINT,
-CASE_IPL_POINT,
-CASE_IPL_POINT,
-CASE_IGNORE,
-/* H I J K */
-CASE_IPL_POINT,
-CASE_IPL_POINT,
-CASE_IPL_POINT,
-CASE_IGNORE,
-/* L M N O */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* P Q R S */
-CASE_PENDOWN,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* T U V W */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* X Y Z [ */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* \ ] ^ _ */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* ` a b c */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* d e f g */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* h i j k */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* l m n o */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* p q r s */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* t u v w */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* x y z { */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* | } ~ DEL */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0x80 0x81 0x82 0x83 */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0x84 0x85 0x86 0x87 */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0x88 0x89 0x8a 0x8b */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0x8c 0x8d 0x8e 0x8f */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0x90 0x91 0x92 0x93 */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0x94 0x95 0x96 0x97 */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0x99 0x99 0x9a 0x9b */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0x9c 0x9d 0x9e 0x9f */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* nobreakspace exclamdown cent sterling */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* currency yen brokenbar section */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* diaeresis copyright ordfeminine guillemotleft */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* notsign hyphen registered macron */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* degree plusminus twosuperior threesuperior */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* acute mu paragraph periodcentered */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* cedilla onesuperior masculine guillemotright */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* onequarter onehalf threequarters questiondown */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* Agrave Aacute Acircumflex Atilde */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* Adiaeresis Aring AE Ccedilla */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* Egrave Eacute Ecircumflex Ediaeresis */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* Igrave Iacute Icircumflex Idiaeresis */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* Eth Ntilde Ograve Oacute */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* Ocircumflex Otilde Odiaeresis multiply */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* Ooblique Ugrave Uacute Ucircumflex */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* Udiaeresis Yacute Thorn ssharp */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* agrave aacute acircumflex atilde */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* adiaeresis aring ae ccedilla */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* egrave eacute ecircumflex ediaeresis */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* igrave iacute icircumflex idiaeresis */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* eth ntilde ograve oacute */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* ocircumflex otilde odiaeresis division */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* oslash ugrave uacute ucircumflex */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* udiaeresis yacute thorn ydiaeresis */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-};
-
-Const int Tplttable[] = /* GS (^]) graph (plot) mode */
-{
-/* NUL SOH STX ETX */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* EOT ENQ ACK BEL */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_BEL,
-/* BS HT NL VT */
-CASE_BS,
-CASE_TAB,
-CASE_LF,
-CASE_UP,
-/* NP CR SO SI */
-CASE_IGNORE,
-CASE_CR,
-CASE_IGNORE,
-CASE_IGNORE,
-/* DLE DC1 DC2 DC3 */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* DC4 NAK SYN ETB */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* CAN EM SUB ESC */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_ESC_STATE,
-/* FS GS RS US */
-CASE_PT_STATE,
-CASE_PLT_STATE,
-CASE_IPL_STATE,
-CASE_ALP_STATE,
-/* SP ! " # */
-CASE_PLT_VEC,
-CASE_PLT_VEC,
-CASE_PLT_VEC,
-CASE_PLT_VEC,
-/* $ % & ' */
-CASE_PLT_VEC,
-CASE_PLT_VEC,
-CASE_PLT_VEC,
-CASE_PLT_VEC,
-/* ( ) * + */
-CASE_PLT_VEC,
-CASE_PLT_VEC,
-CASE_PLT_VEC,
-CASE_PLT_VEC,
-/* , - . / */
-CASE_PLT_VEC,
-CASE_PLT_VEC,
-CASE_PLT_VEC,
-CASE_PLT_VEC,
-/* 0 1 2 3 */
-CASE_PLT_VEC,
-CASE_PLT_VEC,
-CASE_PLT_VEC,
-CASE_PLT_VEC,
-/* 4 5 6 7 */
-CASE_PLT_VEC,
-CASE_PLT_VEC,
-CASE_PLT_VEC,
-CASE_PLT_VEC,
-/* 8 9 : ; */
-CASE_PLT_VEC,
-CASE_PLT_VEC,
-CASE_PLT_VEC,
-CASE_PLT_VEC,
-/* < = > ? */
-CASE_PLT_VEC,
-CASE_PLT_VEC,
-CASE_PLT_VEC,
-CASE_PLT_VEC,
-/* @ A B C */
-CASE_PLT_VEC,
-CASE_PLT_VEC,
-CASE_PLT_VEC,
-CASE_PLT_VEC,
-/* D E F G */
-CASE_PLT_VEC,
-CASE_PLT_VEC,
-CASE_PLT_VEC,
-CASE_PLT_VEC,
-/* H I J K */
-CASE_PLT_VEC,
-CASE_PLT_VEC,
-CASE_PLT_VEC,
-CASE_PLT_VEC,
-/* L M N O */
-CASE_PLT_VEC,
-CASE_PLT_VEC,
-CASE_PLT_VEC,
-CASE_PLT_VEC,
-/* P Q R S */
-CASE_PLT_VEC,
-CASE_PLT_VEC,
-CASE_PLT_VEC,
-CASE_PLT_VEC,
-/* T U V W */
-CASE_PLT_VEC,
-CASE_PLT_VEC,
-CASE_PLT_VEC,
-CASE_PLT_VEC,
-/* X Y Z [ */
-CASE_PLT_VEC,
-CASE_PLT_VEC,
-CASE_PLT_VEC,
-CASE_PLT_VEC,
-/* \ ] ^ _ */
-CASE_PLT_VEC,
-CASE_PLT_VEC,
-CASE_PLT_VEC,
-CASE_PLT_VEC,
-/* ` a b c */
-CASE_PLT_VEC,
-CASE_PLT_VEC,
-CASE_PLT_VEC,
-CASE_PLT_VEC,
-/* d e f g */
-CASE_PLT_VEC,
-CASE_PLT_VEC,
-CASE_PLT_VEC,
-CASE_PLT_VEC,
-/* h i j k */
-CASE_PLT_VEC,
-CASE_PLT_VEC,
-CASE_PLT_VEC,
-CASE_PLT_VEC,
-/* l m n o */
-CASE_PLT_VEC,
-CASE_PLT_VEC,
-CASE_PLT_VEC,
-CASE_PLT_VEC,
-/* p q r s */
-CASE_PLT_VEC,
-CASE_PLT_VEC,
-CASE_PLT_VEC,
-CASE_PLT_VEC,
-/* t u v w */
-CASE_PLT_VEC,
-CASE_PLT_VEC,
-CASE_PLT_VEC,
-CASE_PLT_VEC,
-/* x y z { */
-CASE_PLT_VEC,
-CASE_PLT_VEC,
-CASE_PLT_VEC,
-CASE_PLT_VEC,
-/* | } ~ DEL */
-CASE_PLT_VEC,
-CASE_PLT_VEC,
-CASE_PLT_VEC,
-CASE_PLT_VEC,
-/* 0x80 0x81 0x82 0x83 */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0x84 0x85 0x86 0x87 */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0x88 0x89 0x8a 0x8b */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0x8c 0x8d 0x8e 0x8f */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0x90 0x91 0x92 0x93 */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0x94 0x95 0x96 0x97 */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0x99 0x99 0x9a 0x9b */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0x9c 0x9d 0x9e 0x9f */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* nobreakspace exclamdown cent sterling */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* currency yen brokenbar section */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* diaeresis copyright ordfeminine guillemotleft */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* notsign hyphen registered macron */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* degree plusminus twosuperior threesuperior */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* acute mu paragraph periodcentered */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* cedilla onesuperior masculine guillemotright */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* onequarter onehalf threequarters questiondown */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* Agrave Aacute Acircumflex Atilde */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* Adiaeresis Aring AE Ccedilla */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* Egrave Eacute Ecircumflex Ediaeresis */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* Igrave Iacute Icircumflex Idiaeresis */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* Eth Ntilde Ograve Oacute */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* Ocircumflex Otilde Odiaeresis multiply */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* Ooblique Ugrave Uacute Ucircumflex */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* Udiaeresis Yacute Thorn ssharp */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* agrave aacute acircumflex atilde */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* adiaeresis aring ae ccedilla */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* egrave eacute ecircumflex ediaeresis */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* igrave iacute icircumflex idiaeresis */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* eth ntilde ograve oacute */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* ocircumflex otilde odiaeresis division */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* oslash ugrave uacute ucircumflex */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* udiaeresis yacute thorn ydiaeresis */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-};
-
-Const int Tpttable[] = /* FS (^\) point plot mode */
-{
-/* NUL SOH STX ETX */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* EOT ENQ ACK BEL */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_BEL,
-/* BS HT NL VT */
-CASE_BS,
-CASE_TAB,
-CASE_LF,
-CASE_UP,
-/* NP CR SO SI */
-CASE_IGNORE,
-CASE_CR,
-CASE_IGNORE,
-CASE_IGNORE,
-/* DLE DC1 DC2 DC3 */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* DC4 NAK SYN ETB */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* CAN EM SUB ESC */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_ESC_STATE,
-/* FS GS RS US */
-CASE_PT_STATE,
-CASE_PLT_STATE,
-CASE_IPL_STATE,
-CASE_ALP_STATE,
-/* SP ! " # */
-CASE_PT_POINT,
-CASE_PT_POINT,
-CASE_PT_POINT,
-CASE_PT_POINT,
-/* $ % & ' */
-CASE_PT_POINT,
-CASE_PT_POINT,
-CASE_PT_POINT,
-CASE_PT_POINT,
-/* ( ) * + */
-CASE_PT_POINT,
-CASE_PT_POINT,
-CASE_PT_POINT,
-CASE_PT_POINT,
-/* , - . / */
-CASE_PT_POINT,
-CASE_PT_POINT,
-CASE_PT_POINT,
-CASE_PT_POINT,
-/* 0 1 2 3 */
-CASE_PT_POINT,
-CASE_PT_POINT,
-CASE_PT_POINT,
-CASE_PT_POINT,
-/* 4 5 6 7 */
-CASE_PT_POINT,
-CASE_PT_POINT,
-CASE_PT_POINT,
-CASE_PT_POINT,
-/* 8 9 : ; */
-CASE_PT_POINT,
-CASE_PT_POINT,
-CASE_PT_POINT,
-CASE_PT_POINT,
-/* < = > ? */
-CASE_PT_POINT,
-CASE_PT_POINT,
-CASE_PT_POINT,
-CASE_PT_POINT,
-/* @ A B C */
-CASE_PT_POINT,
-CASE_PT_POINT,
-CASE_PT_POINT,
-CASE_PT_POINT,
-/* D E F G */
-CASE_PT_POINT,
-CASE_PT_POINT,
-CASE_PT_POINT,
-CASE_PT_POINT,
-/* H I J K */
-CASE_PT_POINT,
-CASE_PT_POINT,
-CASE_PT_POINT,
-CASE_PT_POINT,
-/* L M N O */
-CASE_PT_POINT,
-CASE_PT_POINT,
-CASE_PT_POINT,
-CASE_PT_POINT,
-/* P Q R S */
-CASE_PT_POINT,
-CASE_PT_POINT,
-CASE_PT_POINT,
-CASE_PT_POINT,
-/* T U V W */
-CASE_PT_POINT,
-CASE_PT_POINT,
-CASE_PT_POINT,
-CASE_PT_POINT,
-/* X Y Z [ */
-CASE_PT_POINT,
-CASE_PT_POINT,
-CASE_PT_POINT,
-CASE_PT_POINT,
-/* \ ] ^ _ */
-CASE_PT_POINT,
-CASE_PT_POINT,
-CASE_PT_POINT,
-CASE_PT_POINT,
-/* ` a b c */
-CASE_PT_POINT,
-CASE_PT_POINT,
-CASE_PT_POINT,
-CASE_PT_POINT,
-/* d e f g */
-CASE_PT_POINT,
-CASE_PT_POINT,
-CASE_PT_POINT,
-CASE_PT_POINT,
-/* h i j k */
-CASE_PT_POINT,
-CASE_PT_POINT,
-CASE_PT_POINT,
-CASE_PT_POINT,
-/* l m n o */
-CASE_PT_POINT,
-CASE_PT_POINT,
-CASE_PT_POINT,
-CASE_PT_POINT,
-/* p q r s */
-CASE_PT_POINT,
-CASE_PT_POINT,
-CASE_PT_POINT,
-CASE_PT_POINT,
-/* t u v w */
-CASE_PT_POINT,
-CASE_PT_POINT,
-CASE_PT_POINT,
-CASE_PT_POINT,
-/* x y z { */
-CASE_PT_POINT,
-CASE_PT_POINT,
-CASE_PT_POINT,
-CASE_PT_POINT,
-/* | } ~ DEL */
-CASE_PT_POINT,
-CASE_PT_POINT,
-CASE_PT_POINT,
-CASE_PT_POINT,
-/* 0x80 0x81 0x82 0x83 */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0x84 0x85 0x86 0x87 */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0x88 0x89 0x8a 0x8b */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0x8c 0x8d 0x8e 0x8f */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0x90 0x91 0x92 0x93 */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0x94 0x95 0x96 0x97 */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0x99 0x99 0x9a 0x9b */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0x9c 0x9d 0x9e 0x9f */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* nobreakspace exclamdown cent sterling */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* currency yen brokenbar section */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* diaeresis copyright ordfeminine guillemotleft */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* notsign hyphen registered macron */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* degree plusminus twosuperior threesuperior */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* acute mu paragraph periodcentered */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* cedilla onesuperior masculine guillemotright */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* onequarter onehalf threequarters questiondown */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* Agrave Aacute Acircumflex Atilde */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* Adiaeresis Aring AE Ccedilla */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* Egrave Eacute Ecircumflex Ediaeresis */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* Igrave Iacute Icircumflex Idiaeresis */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* Eth Ntilde Ograve Oacute */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* Ocircumflex Otilde Odiaeresis multiply */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* Ooblique Ugrave Uacute Ucircumflex */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* Udiaeresis Yacute Thorn ssharp */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* agrave aacute acircumflex atilde */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* adiaeresis aring ae ccedilla */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* egrave eacute ecircumflex ediaeresis */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* igrave iacute icircumflex idiaeresis */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* eth ntilde ograve oacute */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* ocircumflex otilde odiaeresis division */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* oslash ugrave uacute ucircumflex */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* udiaeresis yacute thorn ydiaeresis */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-};
-
-Const int Tspttable[] = /* ESC FS (^\) special point plot */
-{
-/* NUL SOH STX ETX */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* EOT ENQ ACK BEL */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_BEL,
-/* BS HT NL VT */
-CASE_BS,
-CASE_TAB,
-CASE_LF,
-CASE_UP,
-/* NP CR SO SI */
-CASE_IGNORE,
-CASE_CR,
-CASE_IGNORE,
-CASE_IGNORE,
-/* DLE DC1 DC2 DC3 */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* DC4 NAK SYN ETB */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* CAN EM SUB ESC */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_ESC_STATE,
-/* FS GS RS US */
-CASE_PT_STATE,
-CASE_PLT_STATE,
-CASE_IPL_STATE,
-CASE_ALP_STATE,
-/* SP ! " # */
-CASE_SPT_POINT,
-CASE_SPT_POINT,
-CASE_SPT_POINT,
-CASE_SPT_POINT,
-/* $ % & ' */
-CASE_SPT_POINT,
-CASE_SPT_POINT,
-CASE_SPT_POINT,
-CASE_SPT_POINT,
-/* ( ) * + */
-CASE_SPT_POINT,
-CASE_SPT_POINT,
-CASE_SPT_POINT,
-CASE_SPT_POINT,
-/* , - . / */
-CASE_SPT_POINT,
-CASE_SPT_POINT,
-CASE_SPT_POINT,
-CASE_SPT_POINT,
-/* 0 1 2 3 */
-CASE_SPT_POINT,
-CASE_SPT_POINT,
-CASE_SPT_POINT,
-CASE_SPT_POINT,
-/* 4 5 6 7 */
-CASE_SPT_POINT,
-CASE_SPT_POINT,
-CASE_SPT_POINT,
-CASE_SPT_POINT,
-/* 8 9 : ; */
-CASE_SPT_POINT,
-CASE_SPT_POINT,
-CASE_SPT_POINT,
-CASE_SPT_POINT,
-/* < = > ? */
-CASE_SPT_POINT,
-CASE_SPT_POINT,
-CASE_SPT_POINT,
-CASE_SPT_POINT,
-/* @ A B C */
-CASE_SPT_POINT,
-CASE_SPT_POINT,
-CASE_SPT_POINT,
-CASE_SPT_POINT,
-/* D E F G */
-CASE_SPT_POINT,
-CASE_SPT_POINT,
-CASE_SPT_POINT,
-CASE_SPT_POINT,
-/* H I J K */
-CASE_SPT_POINT,
-CASE_SPT_POINT,
-CASE_SPT_POINT,
-CASE_SPT_POINT,
-/* L M N O */
-CASE_SPT_POINT,
-CASE_SPT_POINT,
-CASE_SPT_POINT,
-CASE_SPT_POINT,
-/* P Q R S */
-CASE_SPT_POINT,
-CASE_SPT_POINT,
-CASE_SPT_POINT,
-CASE_SPT_POINT,
-/* T U V W */
-CASE_SPT_POINT,
-CASE_SPT_POINT,
-CASE_SPT_POINT,
-CASE_SPT_POINT,
-/* X Y Z [ */
-CASE_SPT_POINT,
-CASE_SPT_POINT,
-CASE_SPT_POINT,
-CASE_SPT_POINT,
-/* \ ] ^ _ */
-CASE_SPT_POINT,
-CASE_SPT_POINT,
-CASE_SPT_POINT,
-CASE_SPT_POINT,
-/* ` a b c */
-CASE_SPT_POINT,
-CASE_SPT_POINT,
-CASE_SPT_POINT,
-CASE_SPT_POINT,
-/* d e f g */
-CASE_SPT_POINT,
-CASE_SPT_POINT,
-CASE_SPT_POINT,
-CASE_SPT_POINT,
-/* h i j k */
-CASE_SPT_POINT,
-CASE_SPT_POINT,
-CASE_SPT_POINT,
-CASE_SPT_POINT,
-/* l m n o */
-CASE_SPT_POINT,
-CASE_SPT_POINT,
-CASE_SPT_POINT,
-CASE_SPT_POINT,
-/* p q r s */
-CASE_SPT_POINT,
-CASE_SPT_POINT,
-CASE_SPT_POINT,
-CASE_SPT_POINT,
-/* t u v w */
-CASE_SPT_POINT,
-CASE_SPT_POINT,
-CASE_SPT_POINT,
-CASE_SPT_POINT,
-/* x y z { */
-CASE_SPT_POINT,
-CASE_SPT_POINT,
-CASE_SPT_POINT,
-CASE_SPT_POINT,
-/* | } ~ DEL */
-CASE_SPT_POINT,
-CASE_SPT_POINT,
-CASE_SPT_POINT,
-CASE_SPT_POINT,
-/* 0x80 0x81 0x82 0x83 */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0x84 0x85 0x86 0x87 */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0x88 0x89 0x8a 0x8b */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0x8c 0x8d 0x8e 0x8f */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0x90 0x91 0x92 0x93 */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0x94 0x95 0x96 0x97 */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0x99 0x99 0x9a 0x9b */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0x9c 0x9d 0x9e 0x9f */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* nobreakspace exclamdown cent sterling */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* currency yen brokenbar section */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* diaeresis copyright ordfeminine guillemotleft */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* notsign hyphen registered macron */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* degree plusminus twosuperior threesuperior */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* acute mu paragraph periodcentered */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* cedilla onesuperior masculine guillemotright */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* onequarter onehalf threequarters questiondown */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* Agrave Aacute Acircumflex Atilde */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* Adiaeresis Aring AE Ccedilla */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* Egrave Eacute Ecircumflex Ediaeresis */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* Igrave Iacute Icircumflex Idiaeresis */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* Eth Ntilde Ograve Oacute */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* Ocircumflex Otilde Odiaeresis multiply */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* Ooblique Ugrave Uacute Ucircumflex */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* Udiaeresis Yacute Thorn ssharp */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* agrave aacute acircumflex atilde */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* adiaeresis aring ae ccedilla */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* egrave eacute ecircumflex ediaeresis */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* igrave iacute icircumflex idiaeresis */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* eth ntilde ograve oacute */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* ocircumflex otilde odiaeresis division */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* oslash ugrave uacute ucircumflex */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* udiaeresis yacute thorn ydiaeresis */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-};
diff --git a/nx-X11/programs/xterm/Tekparse.def b/nx-X11/programs/xterm/Tekparse.def
deleted file mode 100644
index 50b1be183..000000000
--- a/nx-X11/programs/xterm/Tekparse.def
+++ /dev/null
@@ -1,42 +0,0 @@
-#
-# $Xorg: Tekparse.def,v 1.3 2000/08/17 19:55:07 cpqbld Exp $
-#
-# List of symbols that need to be defined for Tekparse.h. If you need to
-# change any of the CASE_ macros, make the change here and rerun the command
-# shown in Tekparse.h.
-#
-
-CASE_REPORT
-CASE_VT_MODE
-CASE_SPT_STATE
-CASE_GIN
-CASE_BEL
-CASE_BS
-CASE_PT_STATE
-CASE_PLT_STATE
-CASE_TAB
-CASE_IPL_STATE
-CASE_ALP_STATE
-CASE_UP
-CASE_COPY
-CASE_PAGE
-CASE_BES_STATE
-CASE_BYP_STATE
-CASE_IGNORE
-CASE_ASCII
-CASE_APL
-CASE_CHAR_SIZE
-CASE_BEAM_VEC
-CASE_CURSTATE
-CASE_PENUP
-CASE_PENDOWN
-CASE_IPL_POINT
-CASE_PLT_VEC
-CASE_PT_POINT
-CASE_SPT_POINT
-CASE_CR
-CASE_ESC_STATE
-CASE_LF
-CASE_SP
-CASE_PRINT
-CASE_OSC
diff --git a/nx-X11/programs/xterm/Tekparse.h b/nx-X11/programs/xterm/Tekparse.h
deleted file mode 100644
index c7c315ec7..000000000
--- a/nx-X11/programs/xterm/Tekparse.h
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * $Xorg: Tekparse.h,v 1.3 2000/08/17 19:55:07 cpqbld Exp $
- */
-
-/*
- * Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
- *
- * All Rights Reserved
- *
- * Permission to use, copy, modify, and distribute this software and its
- * documentation for any purpose and without fee is hereby granted,
- * provided that the above copyright notice appear in all copies and that
- * both that copyright notice and this permission notice appear in
- * supporting documentation, and that the name of Digital Equipment
- * Corporation not be used in advertising or publicity pertaining to
- * distribution of the software without specific, written prior permission.
- *
- *
- * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
- * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
- * DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
- * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
- * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
- * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- * SOFTWARE.
- */
-/* $XFree86: xc/programs/xterm/Tekparse.h,v 1.4 2001/01/17 23:46:34 dawes Exp $ */
-
-
-/* @(#)Tekparse.h X10/6.6 11/7/86 */
-
-#ifndef included_Tekparse_h
-#define included_Tekparse_h 1
-
-#ifndef Const
-# if defined(__STDC__) && !defined(__cplusplus)
-# define Const const
-# else
-# define Const /**/
-# endif
-#endif
-
-extern Const int Talptable[];
-extern Const int Tbestable[];
-extern Const int Tbyptable[];
-extern Const int Tesctable[];
-extern Const int Tipltable[];
-extern Const int Tplttable[];
-extern Const int Tpttable[];
-extern Const int Tspttable[];
-
-/*
- * The following list of definitions is generated from Tekparse.def using the
- * following command line:
- *
- * egrep -v '^CASE_' Tekparse.def | \
- * awk 'BEGIN {n = 0;} {printf "#define %s %d\n", $1, n; n++}'
- *
- * You you need to change something, change Tekparse.def and regenerate the
- * definitions. This would have been automatic, but since this doesn't change
- * very often, it isn't worth the makefile hassle.
- */
-
-#define CASE_REPORT 0
-#define CASE_VT_MODE 1
-#define CASE_SPT_STATE 2
-#define CASE_GIN 3
-#define CASE_BEL 4
-#define CASE_BS 5
-#define CASE_PT_STATE 6
-#define CASE_PLT_STATE 7
-#define CASE_TAB 8
-#define CASE_IPL_STATE 9
-#define CASE_ALP_STATE 10
-#define CASE_UP 11
-#define CASE_COPY 12
-#define CASE_PAGE 13
-#define CASE_BES_STATE 14
-#define CASE_BYP_STATE 15
-#define CASE_IGNORE 16
-#define CASE_ASCII 17
-#define CASE_APL 18
-#define CASE_CHAR_SIZE 19
-#define CASE_BEAM_VEC 20
-#define CASE_CURSTATE 21
-#define CASE_PENUP 22
-#define CASE_PENDOWN 23
-#define CASE_IPL_POINT 24
-#define CASE_PLT_VEC 25
-#define CASE_PT_POINT 26
-#define CASE_SPT_POINT 27
-#define CASE_CR 28
-#define CASE_ESC_STATE 29
-#define CASE_LF 30
-#define CASE_SP 31
-#define CASE_PRINT 32
-#define CASE_OSC 33
-
-#endif /* included_Tekparse_h */
diff --git a/nx-X11/programs/xterm/Tekproc.c b/nx-X11/programs/xterm/Tekproc.c
deleted file mode 100644
index 0a6b79bd1..000000000
--- a/nx-X11/programs/xterm/Tekproc.c
+++ /dev/null
@@ -1,1782 +0,0 @@
-/* $XTermId: Tekproc.c,v 1.131 2005/11/03 13:17:27 tom Exp $ */
-
-/*
- * $Xorg: Tekproc.c,v 1.5 2001/02/09 02:06:02 xorgcvs Exp $
- *
- * Warning, there be crufty dragons here.
- */
-/* $XFree86: xc/programs/xterm/Tekproc.c,v 3.55 2005/11/03 13:17:27 dickey Exp $ */
-
-/*
-
-Copyright 2001-2004,2005 by Thomas E. Dickey
-
- All Rights Reserved
-
-Permission is hereby granted, free of charge, to any person obtaining a
-copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name(s) of the above copyright
-holders shall not be used in advertising or otherwise to promote the
-sale, use or other dealings in this Software without prior written
-authorization.
-
-Copyright 1988 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-
- * Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
- *
- * All Rights Reserved
- *
- * Permission to use, copy, modify, and distribute this software and its
- * documentation for any purpose and without fee is hereby granted,
- * provided that the above copyright notice appear in all copies and that
- * both that copyright notice and this permission notice appear in
- * supporting documentation, and that the name of Digital Equipment
- * Corporation not be used in advertising or publicity pertaining to
- * distribution of the software without specific, written prior permission.
- *
- *
- * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
- * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
- * DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
- * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
- * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
- * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- * SOFTWARE.
- */
-
-/* Tekproc.c */
-
-#define RES_OFFSET(field) XtOffsetOf(TekWidgetRec, field)
-
-#include <xterm.h>
-
-#include <X11/Xatom.h>
-#include <X11/Xutil.h>
-#include <X11/cursorfont.h>
-#include <X11/Xmu/CharSet.h>
-
-#if OPT_TOOLBAR
-
-#if defined(HAVE_LIB_XAW)
-#include <X11/Xaw/Form.h>
-#elif defined(HAVE_LIB_XAW3D)
-#include <X11/Xaw3d/Form.h>
-#elif defined(HAVE_LIB_NEXTAW)
-#include <X11/neXtaw/Form.h>
-#elif defined(HAVE_LIB_XAWPLUS)
-#include <X11/XawPlus/Form.h>
-#endif
-
-#endif /* OPT_TOOLBAR */
-
-#include <stdio.h>
-#include <ctype.h>
-#include <signal.h>
-
-#include <Tekparse.h>
-#include <data.h>
-#include <error.h>
-#include <menu.h>
-
-#define DefaultGCID XGContextFromGC(DefaultGC(screen->display, DefaultScreen(screen->display)))
-
-/* Tek defines */
-
-#define DOTDASHEDLINE 2
-#define DOTTEDLINE 1
-#define EAST 01
-#define LINEMASK 07
-#define LONGDASHEDLINE 4
-#define MARGIN1 0
-#define MARGIN2 1
-#define MAX_PTS 150
-#define MAX_VTX 300
-#define NORTH 04
-#define PENDOWN 1
-#define PENUP 0
-#define SHORTDASHEDLINE 3
-#define SOLIDLINE 0
-#define SOUTH 010
-#define TEKBOTTOMPAD 23
-#define TEKDEFHEIGHT 565
-#define TEKDEFWIDTH 750
-#define TEKHEIGHT 3072
-#define TEKHOME ((TekChar[screen->page.fontsize].nlines - 1)\
- * TekChar[screen->page.fontsize].vsize)
-#define TEKMINHEIGHT 452
-#define TEKMINWIDTH 600
-#define TEKTOPPAD 34
-#define TEKWIDTH 4096
-#define WEST 02
-
-#define TekMove(x,y) screen->cur_X = x; screen->cur_Y = y
-#define input() Tinput()
-#define unput(c) *Tpushback++ = c
-/* *INDENT-OFF* */
-static struct Tek_Char {
- int hsize; /* in Tek units */
- int vsize; /* in Tek units */
- int charsperline;
- int nlines;
-} TekChar[TEKNUMFONTS] = {
- {56, 88, 74, 35}, /* large */
- {51, 82, 81, 38}, /* #2 */
- {34, 53, 121, 58}, /* #3 */
- {31, 48, 133, 64}, /* small */
-};
-/* *INDENT-ON* */
-
-static Cursor GINcursor;
-static XSegment *line_pt;
-static int nplot;
-static TekLink Tek0;
-static jmp_buf Tekjump;
-static TekLink *TekRecord;
-static XSegment *Tline;
-
-static Const int *curstate = Talptable;
-static Const int *Tparsestate = Talptable;
-
-static char defaultTranslations[] = "\
- ~Meta<KeyPress>: insert-seven-bit() \n\
- Meta<KeyPress>: insert-eight-bit() \n\
- !Ctrl <Btn1Down>: popup-menu(mainMenu) \n\
- !Lock Ctrl <Btn1Down>: popup-menu(mainMenu) \n\
-!Lock Ctrl @Num_Lock <Btn1Down>: popup-menu(mainMenu) \n\
- !Ctrl @Num_Lock <Btn1Down>: popup-menu(mainMenu) \n\
- !Ctrl <Btn2Down>: popup-menu(tekMenu) \n\
- !Lock Ctrl <Btn2Down>: popup-menu(tekMenu) \n\
-!Lock Ctrl @Num_Lock <Btn2Down>: popup-menu(tekMenu) \n\
- !Ctrl @Num_Lock <Btn2Down>: popup-menu(tekMenu) \n\
- Shift ~Meta<Btn1Down>: gin-press(L) \n\
- ~Meta<Btn1Down>: gin-press(l) \n\
- Shift ~Meta<Btn2Down>: gin-press(M) \n\
- ~Meta<Btn2Down>: gin-press(m) \n\
- Shift ~Meta<Btn3Down>: gin-press(R) \n\
- ~Meta<Btn3Down>: gin-press(r)";
-/* *INDENT-OFF* */
-static XtActionsRec actionsList[] = {
- { "string", HandleStringEvent },
- { "insert", HandleKeyPressed }, /* alias for insert-seven-bit */
- { "insert-seven-bit", HandleKeyPressed },
- { "insert-eight-bit", HandleEightBitKeyPressed },
- { "gin-press", HandleGINInput },
- { "secure", HandleSecure },
- { "create-menu", HandleCreateMenu },
- { "popup-menu", HandlePopupMenu },
- /* menu actions */
- { "allow-send-events", HandleAllowSends },
- { "set-visual-bell", HandleSetVisualBell },
-#ifdef ALLOWLOGGING
- { "set-logging", HandleLogging },
-#endif
- { "redraw", HandleRedraw },
- { "send-signal", HandleSendSignal },
- { "quit", HandleQuit },
- { "set-scrollbar", HandleScrollbar },
- { "set-jumpscroll", HandleJumpscroll },
- { "set-reverse-video", HandleReverseVideo },
- { "set-autowrap", HandleAutoWrap },
- { "set-reversewrap", HandleReverseWrap },
- { "set-autolinefeed", HandleAutoLineFeed },
- { "set-appcursor", HandleAppCursor },
- { "set-appkeypad", HandleAppKeypad },
- { "set-scroll-on-key", HandleScrollKey },
- { "set-scroll-on-tty-output", HandleScrollTtyOutput },
- { "set-allow132", HandleAllow132 },
- { "set-cursesemul", HandleCursesEmul },
- { "set-marginbell", HandleMarginBell },
- { "set-altscreen", HandleAltScreen },
- { "soft-reset", HandleSoftReset },
- { "hard-reset", HandleHardReset },
- { "set-terminal-type", HandleSetTerminalType },
- { "set-visibility", HandleVisibility },
- { "set-tek-text", HandleSetTekText },
- { "tek-page", HandleTekPage },
- { "tek-reset", HandleTekReset },
- { "tek-copy", HandleTekCopy },
-#if OPT_TOOLBAR
- { "set-toolbar", HandleToolbar },
-#endif
-};
-/* *INDENT-ON* */
-
-static Dimension defOne = 1;
-
-#define GIN_TERM_NONE_STR "none"
-#define GIN_TERM_CR_STR "CRonly"
-#define GIN_TERM_EOT_STR "CR&EOT"
-
-#define GIN_TERM_NONE 0
-#define GIN_TERM_CR 1
-#define GIN_TERM_EOT 2
-
-#ifdef VMS
-#define DFT_FONT_SMALL "FIXED"
-#else
-#define DFT_FONT_SMALL "6x10"
-#endif
-
-static XtResource resources[] =
-{
- {XtNwidth, XtCWidth, XtRDimension, sizeof(Dimension),
- XtOffsetOf(CoreRec, core.width), XtRDimension, (caddr_t) & defOne},
- {XtNheight, XtCHeight, XtRDimension, sizeof(Dimension),
- XtOffsetOf(CoreRec, core.height), XtRDimension, (caddr_t) & defOne},
- Fres("fontLarge", XtCFont, tek.Tfont[TEK_FONT_LARGE], "9x15"),
- Fres("font2", XtCFont, tek.Tfont[TEK_FONT_2], "6x13"),
- Fres("font3", XtCFont, tek.Tfont[TEK_FONT_3], "8x13"),
- Fres("fontSmall", XtCFont, tek.Tfont[TEK_FONT_SMALL], DFT_FONT_SMALL),
- Sres("initialFont", "InitialFont", tek.initial_font, "large"),
- Sres("ginTerminator", "GinTerminator", tek.gin_terminator_str, GIN_TERM_NONE_STR),
-#if OPT_TOOLBAR
- Wres(XtNmenuBar, XtCMenuBar, tek.tb_info.menu_bar, 0),
- Ires(XtNmenuHeight, XtCMenuHeight, tek.tb_info.menu_height, 25),
-#endif
-};
-
-static IChar Tinput(void);
-static int getpoint(void);
-static void TCursorBack(void);
-static void TCursorDown(void);
-static void TCursorForward(void);
-static void TCursorUp(void);
-static void TekBackground(TScreen * screen);
-static void TekConfigure(Widget w);
-static void TekDraw(int x, int y);
-static void TekEnq(unsigned status, int x, int y);
-static void TekFlush(void);
-static void TekInitialize(Widget request,
- Widget wnew,
- ArgList args,
- Cardinal *num_args);
-static void TekPage(void);
-static void TekRealize(Widget gw,
- XtValueMask * valuemaskp,
- XSetWindowAttributes * values);
-
-static WidgetClassRec tekClassRec =
-{
- {
-/* core_class fields */
- (WidgetClass) & widgetClassRec, /* superclass */
- "Tek4014", /* class_name */
- sizeof(TekWidgetRec), /* widget_size */
- NULL, /* class_initialize */
- NULL, /* class_part_initialize */
- False, /* class_inited */
- TekInitialize, /* initialize */
- NULL, /* initialize_hook */
- TekRealize, /* realize */
- actionsList, /* actions */
- XtNumber(actionsList), /* num_actions */
- resources, /* resources */
- XtNumber(resources), /* num_resources */
- NULLQUARK, /* xrm_class */
- True, /* compress_motion */
- True, /* compress_exposure */
- True, /* compress_enterleave */
- False, /* visible_interest */
- NULL, /* destroy */
- TekConfigure, /* resize */
- TekExpose, /* expose */
- NULL, /* set_values */
- NULL, /* set_values_hook */
- XtInheritSetValuesAlmost, /* set_values_almost */
- NULL, /* get_values_hook */
- NULL, /* accept_focus */
- XtVersion, /* version */
- NULL, /* callback_offsets */
- defaultTranslations, /* tm_table */
- XtInheritQueryGeometry, /* query_geometry */
- XtInheritDisplayAccelerator, /* display_accelerator */
- NULL /* extension */
- }
-};
-#define tekWidgetClass ((WidgetClass)&tekClassRec)
-
-static Bool Tfailed = False;
-
-int
-TekInit(void)
-{
- Widget form_top, menu_top;
-
- if (!Tfailed
- && tekWidget == 0) {
-
- TRACE(("TekInit\n"));
- /* this causes the Initialize method to be called */
- tekshellwidget =
- XtCreatePopupShell("tektronix", topLevelShellWidgetClass,
- toplevel, ourTopLevelShellArgs,
- number_ourTopLevelShellArgs);
-
- SetupMenus(tekshellwidget, &form_top, &menu_top);
-
- /* this causes the Realize method to be called */
- tekWidget = (TekWidget)
- XtVaCreateManagedWidget("tek4014",
- tekWidgetClass, form_top,
-#if OPT_TOOLBAR
- XtNmenuBar, menu_top,
- XtNresizable, True,
- XtNfromVert, menu_top,
- XtNtop, XawChainTop,
- XtNleft, XawChainLeft,
- XtNright, XawChainRight,
- XtNbottom, XawChainBottom,
-#endif
- (XtPointer) 0);
-#if OPT_TOOLBAR
- ShowToolbar(resource.toolBar);
-#endif
- }
- return (!Tfailed);
-}
-
-/*
- * If we haven't allocated the PtyData struct, do so.
- */
-int
-TekPtyData(void)
-{
- if (Tpushb == 0) {
- if ((Tpushb = TypeMallocN(Char, 10)) == NULL
- || (Tline = TypeMallocN(XSegment, MAX_VTX)) == NULL) {
- fprintf(stderr, "%s: Not enough core for Tek mode\n", xterm_name);
- if (Tpushb)
- free(Tpushb);
- Tfailed = True;
- return 0;
- }
- }
- return 1;
-}
-
-static void
-Tekparse(void)
-{
- TScreen *screen = &term->screen;
- int x, y;
- IChar c = 0;
- IChar ch;
- int nextstate;
-
- for (;;) {
- c = input();
- /*
- * The parsing tables all have 256 entries. If we're supporting
- * wide characters, we handle them by treating them the same as
- * printing characters.
- */
-#if OPT_WIDE_CHARS
- if (c > 255) {
- nextstate = (Tparsestate == Talptable)
- ? CASE_PRINT
- : CASE_IGNORE;
- } else
-#endif
- nextstate = Tparsestate[c];
- TRACE(("Tekparse %04X -> %d\n", c, nextstate));
-
- switch (nextstate) {
- case CASE_REPORT:
- TRACE(("case: report address\n"));
- if (screen->TekGIN) {
- TekGINoff();
- TekEnqMouse(0);
- } else {
- c = 064; /* has hard copy unit */
- if (screen->margin == MARGIN2)
- c |= 02;
- TekEnq(c, screen->cur_X, screen->cur_Y);
- }
- TekRecord->ptr[-1] = NAK; /* remove from recording */
- Tparsestate = curstate;
- break;
-
- case CASE_VT_MODE:
- TRACE(("case: special return to vt102 mode\n"));
- Tparsestate = curstate;
- TekRecord->ptr[-1] = NAK; /* remove from recording */
- FlushLog(screen);
- return;
-
- case CASE_SPT_STATE:
- TRACE(("case: Enter Special Point Plot mode\n"));
- if (screen->TekGIN)
- TekGINoff();
- Tparsestate = curstate = Tspttable;
- break;
-
- case CASE_GIN:
- TRACE(("case: Do Tek GIN mode\n"));
- screen->TekGIN = &TekRecord->ptr[-1];
- /* Set cross-hair cursor raster array */
- if ((GINcursor =
- make_colored_cursor(XC_tcross,
- T_COLOR(screen, MOUSE_FG),
- T_COLOR(screen, MOUSE_BG))) != 0) {
- XDefineCursor(screen->display, TWindow(screen),
- GINcursor);
- }
- Tparsestate = Tbyptable; /* Bypass mode */
- break;
-
- case CASE_BEL:
- TRACE(("case: BEL\n"));
- if (screen->TekGIN)
- TekGINoff();
- if (!TekRefresh)
- Bell(XkbBI_TerminalBell, 0);
- Tparsestate = curstate; /* clear bypass condition */
- break;
-
- case CASE_BS:
- TRACE(("case: BS\n"));
- if (screen->TekGIN)
- TekGINoff();
- Tparsestate = curstate; /* clear bypass condition */
- TCursorBack();
- break;
-
- case CASE_PT_STATE:
- TRACE(("case: Enter Tek Point Plot mode\n"));
- if (screen->TekGIN)
- TekGINoff();
- Tparsestate = curstate = Tpttable;
- break;
-
- case CASE_PLT_STATE:
- TRACE(("case: Enter Tek Plot mode\n"));
- if (screen->TekGIN)
- TekGINoff();
- Tparsestate = curstate = Tplttable;
- if ((c = input()) == BEL)
- screen->pen = PENDOWN;
- else {
- unput(c);
- screen->pen = PENUP;
- }
- break;
-
- case CASE_TAB:
- TRACE(("case: HT\n"));
- if (screen->TekGIN)
- TekGINoff();
- Tparsestate = curstate; /* clear bypass condition */
- TCursorForward();
- break;
-
- case CASE_IPL_STATE:
- TRACE(("case: Enter Tek Incremental Plot mode\n"));
- if (screen->TekGIN)
- TekGINoff();
- Tparsestate = curstate = Tipltable;
- break;
-
- case CASE_ALP_STATE:
- TRACE(("case: Enter Tek Alpha mode from any other mode\n"));
- if (screen->TekGIN)
- TekGINoff();
- /* if in one of graphics states, move alpha cursor */
- if (nplot > 0) /* flush line VTbuffer */
- TekFlush();
- Tparsestate = curstate = Talptable;
- break;
-
- case CASE_UP:
- TRACE(("case: cursor up\n"));
- if (screen->TekGIN)
- TekGINoff();
- Tparsestate = curstate; /* clear bypass condition */
- TCursorUp();
- break;
-
- case CASE_COPY:
- TRACE(("case: make copy\n"));
- if (screen->TekGIN)
- TekGINoff();
- TekCopy();
- TekRecord->ptr[-1] = NAK; /* remove from recording */
- Tparsestate = curstate; /* clear bypass condition */
- break;
-
- case CASE_PAGE:
- TRACE(("case: Page Function\n"));
- if (screen->TekGIN)
- TekGINoff();
- TekPage(); /* clear bypass condition */
- break;
-
- case CASE_BES_STATE:
- TRACE(("case: Byp: an escape char\n"));
- Tparsestate = Tbestable;
- break;
-
- case CASE_BYP_STATE:
- TRACE(("case: set bypass condition\n"));
- Tparsestate = Tbyptable;
- break;
-
- case CASE_IGNORE:
- TRACE(("case: Esc: totally ignore CR, ESC, LF, ~\n"));
- break;
-
- case CASE_ASCII:
- TRACE(("case: Select ASCII char set\n"));
- /* ignore for now */
- Tparsestate = curstate;
- break;
-
- case CASE_APL:
- TRACE(("case: Select APL char set\n"));
- /* ignore for now */
- Tparsestate = curstate;
- break;
-
- case CASE_CHAR_SIZE:
- TRACE(("case: character size selector\n"));
- TekSetFontSize((int) (c & 03));
- Tparsestate = curstate;
- break;
-
- case CASE_BEAM_VEC:
- TRACE(("case: beam and vector selector\n"));
- /* only line types */
- if ((c &= LINEMASK) != screen->cur.linetype) {
- if (nplot > 0)
- TekFlush();
- if (c <= TEKNUMLINES)
- screen->cur.linetype = c;
- }
- Tparsestate = curstate;
- break;
-
- case CASE_CURSTATE:
- Tparsestate = curstate;
- break;
-
- case CASE_PENUP:
- TRACE(("case: Ipl: penup\n"));
- screen->pen = PENUP;
- break;
-
- case CASE_PENDOWN:
- TRACE(("case: Ipl: pendown\n"));
- screen->pen = PENDOWN;
- break;
-
- case CASE_IPL_POINT:
- TRACE(("case: Ipl: point\n"));
- x = screen->cur_X;
- y = screen->cur_Y;
- if (c & NORTH)
- y++;
- else if (c & SOUTH)
- y--;
- if (c & EAST)
- x++;
- else if (c & WEST)
- x--;
- if (screen->pen == PENDOWN)
- TekDraw(x, y);
- else
- TekMove(x, y);
- break;
-
- case CASE_PLT_VEC:
- TRACE(("case: Plt: vector\n"));
- unput(c);
- if (getpoint()) {
- if (screen->pen == PENDOWN) {
- TekDraw(screen->cur.x, screen->cur.y);
- } else {
- TekMove(screen->cur.x, screen->cur.y);
- }
- screen->pen = PENDOWN;
- }
- break;
-
- case CASE_PT_POINT:
- TRACE(("case: Pt: point\n"));
- unput(c);
- if (getpoint()) {
- TekMove(screen->cur.x, screen->cur.y);
- TekDraw(screen->cur.x, screen->cur.y);
- }
- break;
-
- case CASE_SPT_POINT:
- TRACE(("case: Spt: point\n"));
- /* ignore intensity character in c */
- if (getpoint()) {
- TekMove(screen->cur.x, screen->cur.y);
- TekDraw(screen->cur.x, screen->cur.y);
- }
- break;
-
- case CASE_CR:
- TRACE(("case: CR\n"));
- if (screen->TekGIN)
- TekGINoff();
- if (nplot > 0) /* flush line VTbuffer */
- TekFlush();
- screen->cur_X = screen->margin == MARGIN1 ? 0 :
- TEKWIDTH / 2;
- Tparsestate = curstate = Talptable;
- break;
-
- case CASE_ESC_STATE:
- TRACE(("case: ESC\n"));
- Tparsestate = Tesctable;
- break;
-
- case CASE_LF:
- TRACE(("case: LF\n"));
- if (screen->TekGIN)
- TekGINoff();
- TCursorDown();
- if (!TekRefresh)
- do_xevents();
- break;
-
- case CASE_SP:
- TRACE(("case: SP\n"));
- TCursorForward();
- break;
-
- case CASE_PRINT:
- TRACE(("case: printable character\n"));
- ch = c;
- c = screen->cur.fontsize;
- x = (int) (screen->cur_X * TekScale(screen))
- + screen->border;
- y = (int) ((TEKHEIGHT + TEKTOPPAD - screen->cur_Y) * TekScale(screen))
- + screen->border;
-
-#if OPT_WIDE_CHARS
- if (screen->wide_chars
- && (ch > 255)) {
- XChar2b sbuf;
- sbuf.byte2 = CharOf(ch);
- sbuf.byte1 = CharOf(ch >> 8);
- XDrawImageString16(screen->display,
- TWindow(screen),
- screen->TnormalGC,
- x,
- y,
- &sbuf,
- 1);
- } else
-#endif
- XDrawString(screen->display,
- TWindow(screen),
- screen->TnormalGC,
- x,
- y,
- (char *) &ch,
- 1);
- TCursorForward();
- break;
- case CASE_OSC:
- /* FIXME: someone should disentangle the input queues
- * of this code so that it can be state-driven.
- */
- TRACE(("case: do osc escape\n"));
- {
- Char buf2[512];
- IChar c2;
- unsigned len = 0;
- while ((c2 = input()) != BEL) {
- if (!isprint(c2 & 0x7f)
- || len + 2 >= (int) sizeof(buf2))
- break;
- buf2[len++] = c2;
- }
- buf2[len] = 0;
- if (c2 == BEL)
- do_osc(buf2, len, BEL);
- }
- Tparsestate = curstate;
- break;
- }
- }
-}
-
-static int rcnt;
-static char *rptr;
-static PtySelect Tselect_mask;
-
-static IChar
-Tinput(void)
-{
- TScreen *screen = &term->screen;
- TekLink *tek;
-
- if (Tpushback > Tpushb)
- return (*--Tpushback);
- if (TekRefresh) {
- if (rcnt-- > 0)
- return (*rptr++);
- if ((tek = TekRefresh->next) != 0) {
- TekRefresh = tek;
- rptr = tek->data;
- rcnt = tek->count - 1;
- TekSetFontSize(tek->fontsize);
- return (*rptr++);
- }
- TekRefresh = (TekLink *) 0;
- longjmp(Tekjump, 1);
- }
- again:
- if (VTbuffer->next >= VTbuffer->last) {
- int update = VTbuffer->update;
-
- if (nplot > 0) /* flush line */
- TekFlush();
-#ifdef VMS
- Tselect_mask = pty_mask; /* force a read */
-#else /* VMS */
- XFD_COPYSET(&pty_mask, &Tselect_mask);
-#endif /* VMS */
- for (;;) {
-#ifdef CRAY
- struct timeval crocktimeout;
- crocktimeout.tv_sec = 0;
- crocktimeout.tv_usec = 0;
- (void) Select(max_plus1,
- &Tselect_mask, NULL, NULL,
- &crocktimeout);
-#endif
- if (readPtyData(screen, &Tselect_mask, VTbuffer)) {
- break;
- }
- if (Ttoggled && curstate == Talptable) {
- TCursorToggle(TOGGLE);
- Ttoggled = False;
- }
- if (XtAppPending(app_con) & XtIMXEvent) {
-#ifdef VMS
- Tselect_mask = X_mask;
-#else /* VMS */
- XFD_COPYSET(&X_mask, &Tselect_mask);
-#endif /* VMS */
- } else {
- XFlush(screen->display);
-#ifdef VMS
- Tselect_mask = Select_mask;
-
-#else /* VMS */
- XFD_COPYSET(&Select_mask, &Tselect_mask);
- if (Select(max_plus1, &Tselect_mask, NULL, NULL, NULL) < 0) {
- if (errno != EINTR)
- SysError(ERROR_TSELECT);
- continue;
- }
-#endif /* VMS */
- }
-#ifdef VMS
- if (Tselect_mask & X_mask) {
- xevents();
- if (VTbuffer->update != update)
- goto again;
- }
-#else /* VMS */
- if (FD_ISSET(ConnectionNumber(screen->display), &Tselect_mask)) {
- xevents();
- if (VTbuffer->update != update)
- goto again;
- }
-#endif /* VMS */
- }
- if (!Ttoggled && curstate == Talptable) {
- TCursorToggle(TOGGLE);
- Ttoggled = True;
- }
- }
- tek = TekRecord;
- if (tek->count >= TEK_LINK_BLOCK_SIZE
- || tek->fontsize != screen->cur.fontsize) {
- if ((TekRecord = tek->next = CastMalloc(TekLink)) == 0)
- Panic("Tinput: malloc error (%d)\n", errno);
- tek = tek->next;
- tek->next = (TekLink *) 0;
- tek->fontsize = screen->cur.fontsize;
- tek->count = 0;
- tek->ptr = tek->data;
- }
- tek->count++;
-
- (void) morePtyData(screen, VTbuffer);
- return (*tek->ptr++ = nextPtyData(screen, VTbuffer));
-}
-
-/* this should become the Tek Widget's Resize proc */
-static void
-TekConfigure(Widget w)
-{
- TScreen *screen = &term->screen;
- int border = 2 * screen->border;
- double d;
-
- if (TWindow(screen))
- XClearWindow(screen->display, TWindow(screen));
- TWidth(screen) = w->core.width - border;
- THeight(screen) = w->core.height - border;
- TekScale(screen) = (double) TWidth(screen) / TEKWIDTH;
- if ((d = (double) THeight(screen) / (TEKHEIGHT + TEKTOPPAD + TEKBOTTOMPAD))
- < TekScale(screen))
- TekScale(screen) = d;
- TFullWidth(screen) = w->core.width;
- TFullHeight(screen) = w->core.height;
-}
-
-/*ARGSUSED*/
-void
-TekExpose(Widget w GCC_UNUSED,
- XEvent * event GCC_UNUSED,
- Region region GCC_UNUSED)
-{
- TScreen *screen = &term->screen;
-
- TRACE(("TekExpose\n"));
-
-#ifdef lint
- region = region;
-#endif
- if (!Ttoggled)
- TCursorToggle(CLEAR);
- Ttoggled = True;
- Tpushback = Tpushb;
- screen->cur_X = 0;
- screen->cur_Y = TEKHOME;
- TekSetFontSize(screen->page.fontsize);
- screen->cur = screen->page;
- screen->margin = MARGIN1;
- if (screen->TekGIN) {
- screen->TekGIN = NULL;
- TekGINoff();
- }
- TekRefresh = &Tek0;
- rptr = TekRefresh->data;
- rcnt = TekRefresh->count;
- Tparsestate = curstate = Talptable;
- TRACE(("TekExpose resets data to replay %d bytes\n", rcnt));
- if (waiting_for_initial_map)
- first_map_occurred();
- if (!screen->waitrefresh)
- dorefresh();
-}
-
-void
-dorefresh(void)
-{
- TScreen *screen = &term->screen;
- static Cursor wait_cursor = None;
-
- if (wait_cursor == None)
- wait_cursor = make_colored_cursor(XC_watch,
- T_COLOR(screen, MOUSE_FG),
- T_COLOR(screen, MOUSE_BG));
- XDefineCursor(screen->display, TWindow(screen), wait_cursor);
- XFlush(screen->display);
- if (!setjmp(Tekjump))
- Tekparse();
- XDefineCursor(screen->display, TWindow(screen),
- (screen->TekGIN && GINcursor) ? GINcursor : screen->arrow);
-}
-
-static void
-TekPage(void)
-{
- TScreen *screen = &term->screen;
- TekLink *tek;
-
- XClearWindow(screen->display, TWindow(screen));
- screen->cur_X = 0;
- screen->cur_Y = TEKHOME;
- screen->margin = MARGIN1;
- screen->page = screen->cur;
- if (screen->TekGIN)
- TekGINoff();
- tek = TekRecord = &Tek0;
- tek->fontsize = screen->cur.fontsize;
- tek->count = 0;
- tek->ptr = tek->data;
- tek = tek->next;
- if (tek)
- do {
- TekLink *tek2 = tek->next;
-
- free(tek);
- tek = tek2;
- } while (tek);
- TekRecord->next = (TekLink *) 0;
- TekRefresh = (TekLink *) 0;
- Ttoggled = True;
- Tparsestate = curstate = Talptable; /* Tek Alpha mode */
-}
-
-#define EXTRABITS 017
-#define FIVEBITS 037
-#define HIBITS (FIVEBITS << SHIFTHI)
-#define LOBITS (FIVEBITS << SHIFTLO)
-#define SHIFTHI 7
-#define SHIFTLO 2
-#define TWOBITS 03
-
-static int
-getpoint(void)
-{
- int c, x, y, e, lo_y = 0;
- TScreen *screen = &term->screen;
-
- x = screen->cur.x;
- y = screen->cur.y;
- for (;;) {
- if ((c = input()) < ' ') { /* control character */
- unput(c);
- return (0);
- }
- if (c < '@') { /* Hi X or Hi Y */
- if (lo_y) { /* seen a Lo Y, so this must be Hi X */
- x &= ~HIBITS;
- x |= (c & FIVEBITS) << SHIFTHI;
- continue;
- }
- /* else Hi Y */
- y &= ~HIBITS;
- y |= (c & FIVEBITS) << SHIFTHI;
- continue;
- }
- if (c < '`') { /* Lo X */
- x &= ~LOBITS;
- x |= (c & FIVEBITS) << SHIFTLO;
- screen->cur.x = x;
- screen->cur.y = y;
- return (1); /* OK */
- }
- /* else Lo Y */
- if (lo_y) { /* seen a Lo Y, so other must be extra bits */
- e = (y >> SHIFTLO) & EXTRABITS;
- x &= ~TWOBITS;
- x |= e & TWOBITS;
- y &= ~TWOBITS;
- y |= (e >> SHIFTLO) & TWOBITS;
- }
- y &= ~LOBITS;
- y |= (c & FIVEBITS) << SHIFTLO;
- lo_y++;
- }
-}
-
-static void
-TCursorBack(void)
-{
- TScreen *screen = &term->screen;
- struct Tek_Char *t;
- int x, l;
-
- x = (screen->cur_X -=
- (t = &TekChar[screen->cur.fontsize])->hsize
- );
-
- if (((screen->margin == MARGIN1) && (x < 0))
- || ((screen->margin == MARGIN2) && (x < TEKWIDTH / 2))) {
- if ((l = (screen->cur_Y + (t->vsize - 1)) / t->vsize + 1) >=
- t->nlines) {
- screen->margin = !screen->margin;
- l = 0;
- }
- screen->cur_Y = l * t->vsize;
- screen->cur_X = (t->charsperline - 1) * t->hsize;
- }
-}
-
-static void
-TCursorForward(void)
-{
- TScreen *screen = &term->screen;
- struct Tek_Char *t;
- int l;
-
- if ((screen->cur_X +=
- (t = &TekChar[screen->cur.fontsize])->hsize
- ) > TEKWIDTH
- ) {
- if ((l = screen->cur_Y / t->vsize - 1) < 0) {
- screen->margin = !screen->margin;
- l = t->nlines - 1;
- }
- screen->cur_Y = l * t->vsize;
- screen->cur_X = screen->margin == MARGIN1 ? 0 : TEKWIDTH / 2;
- }
-}
-
-static void
-TCursorUp(void)
-{
- TScreen *screen = &term->screen;
- struct Tek_Char *t;
- int l;
-
- t = &TekChar[screen->cur.fontsize];
-
- if ((l = (screen->cur_Y + (t->vsize - 1)) / t->vsize + 1) >= t->nlines) {
- l = 0;
- if ((screen->margin = !screen->margin) != MARGIN1) {
- if (screen->cur_X < TEKWIDTH / 2)
- screen->cur_X += TEKWIDTH / 2;
- } else if (screen->cur_X >= TEKWIDTH / 2)
- screen->cur_X -= TEKWIDTH / 2;
- }
- screen->cur_Y = l * t->vsize;
-}
-
-static void
-TCursorDown(void)
-{
- TScreen *screen = &term->screen;
- struct Tek_Char *t;
- int l;
-
- t = &TekChar[screen->cur.fontsize];
-
- if ((l = screen->cur_Y / t->vsize - 1) < 0) {
- l = t->nlines - 1;
- if ((screen->margin = !screen->margin) != MARGIN1) {
- if (screen->cur_X < TEKWIDTH / 2)
- screen->cur_X += TEKWIDTH / 2;
- } else if (screen->cur_X >= TEKWIDTH / 2)
- screen->cur_X -= TEKWIDTH / 2;
- }
- screen->cur_Y = l * t->vsize;
-}
-
-static void
-AddToDraw(int x1, int y1, int x2, int y2)
-{
- TScreen *screen = &term->screen;
- XSegment *lp;
-
- TRACE(("AddToDraw (%d,%d) (%d,%d)\n", x1, y1, x2, y2));
- if (nplot >= MAX_PTS) {
- TekFlush();
- }
- lp = line_pt++;
- lp->x1 = x1 = (int) (x1 * TekScale(screen) + screen->border);
- lp->y1 = y1 = (int) ((TEKHEIGHT + TEKTOPPAD - y1) * TekScale(screen) +
- screen->border);
- lp->x2 = x2 = (int) (x2 * TekScale(screen) + screen->border);
- lp->y2 = y2 = (int) ((TEKHEIGHT + TEKTOPPAD - y2) * TekScale(screen) +
- screen->border);
- nplot++;
- TRACE(("...AddToDraw %d points\n", nplot));
-}
-
-static void
-TekDraw(int x, int y)
-{
- TScreen *screen = &term->screen;
-
- if (nplot == 0 || T_lastx != screen->cur_X || T_lasty != screen->cur_Y) {
- /*
- * We flush on each unconnected line segment if the line
- * type is not solid. This solves a bug in X when drawing
- * points while the line type is not solid.
- */
- if (nplot > 0 && screen->cur.linetype != SOLIDLINE)
- TekFlush();
- }
- AddToDraw(screen->cur_X, screen->cur_Y, x, y);
- T_lastx = screen->cur_X = x;
- T_lasty = screen->cur_Y = y;
-}
-
-static void
-TekFlush(void)
-{
- TScreen *screen = &term->screen;
-
- TRACE(("TekFlush\n"));
- XDrawSegments(screen->display, TWindow(screen),
- ((screen->cur.linetype == SOLIDLINE) ? screen->TnormalGC :
- screen->linepat[screen->cur.linetype - 1]),
- Tline, nplot);
- nplot = 0;
- line_pt = Tline;
-}
-
-void
-TekGINoff(void)
-{
- TScreen *screen = &term->screen;
-
- TRACE(("TekGINoff\n"));
- XDefineCursor(screen->display, TWindow(screen), screen->arrow);
- if (GINcursor)
- XFreeCursor(screen->display, GINcursor);
- if (screen->TekGIN) {
- *screen->TekGIN = CAN; /* modify recording */
- screen->TekGIN = NULL;
- }
-}
-
-void
-TekEnqMouse(int c) /* character pressed */
-{
- TScreen *screen = &term->screen;
- int mousex, mousey, rootx, rooty;
- unsigned int mask; /* XQueryPointer */
- Window root, subw;
-
- TRACE(("TekEnqMouse\n"));
- XQueryPointer(
- screen->display, TWindow(screen),
- &root, &subw,
- &rootx, &rooty,
- &mousex, &mousey,
- &mask);
- if ((mousex = (int) ((mousex - screen->border) / TekScale(screen))) < 0)
- mousex = 0;
- else if (mousex >= TEKWIDTH)
- mousex = TEKWIDTH - 1;
- if ((mousey = (int) (TEKHEIGHT + TEKTOPPAD - (mousey - screen->border) /
- TekScale(screen))) < 0)
- mousey = 0;
- else if (mousey >= TEKHEIGHT)
- mousey = TEKHEIGHT - 1;
- TekEnq((unsigned) c, mousex, mousey);
-}
-
-static void
-TekEnq(unsigned status,
- int x,
- int y)
-{
- TScreen *screen = &term->screen;
- Char cplot[7];
- int len = 5;
- int adj = (status != 0) ? 0 : 1;
-
- TRACE(("TekEnq\n"));
- cplot[0] = status;
- /* Translate x and y to Tektronix code */
- cplot[1] = 040 | ((x >> SHIFTHI) & FIVEBITS);
- cplot[2] = 040 | ((x >> SHIFTLO) & FIVEBITS);
- cplot[3] = 040 | ((y >> SHIFTHI) & FIVEBITS);
- cplot[4] = 040 | ((y >> SHIFTLO) & FIVEBITS);
-
- if (screen->gin_terminator != GIN_TERM_NONE)
- cplot[len++] = '\r';
- if (screen->gin_terminator == GIN_TERM_EOT)
- cplot[len++] = '\004';
-#ifdef VMS
- tt_write(cplot + adj, len - adj);
-#else /* VMS */
- v_write(screen->respond, cplot + adj, (unsigned) (len - adj));
-#endif /* VMS */
-}
-
-void
-TekRun(void)
-{
- TScreen *screen = &term->screen;
-
- TRACE(("TekRun ...\n"));
-
- if (!TWindow(screen) && !TekInit()) {
- if (VWindow(screen)) {
- screen->TekEmu = False;
- return;
- }
- Exit(ERROR_TINIT);
- }
- if (!screen->Tshow) {
- set_tek_visibility(True);
- }
- update_vttekmode();
- update_vtshow();
- update_tekshow();
- set_tekhide_sensitivity();
-
- Tpushback = Tpushb;
- Ttoggled = True;
- if (!setjmp(Tekend))
- Tekparse();
- if (!Ttoggled) {
- TCursorToggle(TOGGLE);
- Ttoggled = True;
- }
- screen->TekEmu = False;
-}
-
-#define DOTTED_LENGTH 2
-#define DOT_DASHED_LENGTH 4
-#define SHORT_DASHED_LENGTH 2
-#define LONG_DASHED_LENGTH 2
-
-static int dash_length[TEKNUMLINES] =
-{
- DOTTED_LENGTH,
- DOT_DASHED_LENGTH,
- SHORT_DASHED_LENGTH,
- LONG_DASHED_LENGTH,
-};
-
-static unsigned char dotted[DOTTED_LENGTH] =
-{3, 1};
-static unsigned char dot_dashed[DOT_DASHED_LENGTH] =
-{3, 4, 3, 1};
-static unsigned char short_dashed[SHORT_DASHED_LENGTH] =
-{4, 4};
-static unsigned char long_dashed[LONG_DASHED_LENGTH] =
-{4, 7};
-
-static unsigned char *dashes[TEKNUMLINES] =
-{
- dotted,
- dot_dashed,
- short_dashed,
- long_dashed,
-};
-
-/*
- * The following is called to create the tekWidget
- */
-
-static void
-TekInitialize(Widget request GCC_UNUSED,
- Widget wnew GCC_UNUSED,
- ArgList args GCC_UNUSED,
- Cardinal *num_args GCC_UNUSED)
-{
- Widget tekparent = SHELL_OF(wnew);
-
- TRACE(("TekInitialize\n"));
-
- /* look for focus related events on the shell, because we need
- * to care about the shell's border being part of our focus.
- */
- XtAddEventHandler(tekparent, EnterWindowMask, False,
- HandleEnterWindow, (Opaque) 0);
- XtAddEventHandler(tekparent, LeaveWindowMask, False,
- HandleLeaveWindow, (Opaque) 0);
- XtAddEventHandler(tekparent, FocusChangeMask, False,
- HandleFocusChange, (Opaque) 0);
- XtAddEventHandler((Widget) wnew, PropertyChangeMask, False,
- HandleBellPropertyChange, (Opaque) 0);
-}
-
-static void
-TekRealize(Widget gw GCC_UNUSED, /* same as tekWidget */
- XtValueMask * valuemaskp,
- XSetWindowAttributes * values)
-{
- TScreen *screen = &term->screen;
- int i;
- TekLink *tek;
- double d;
- int border = 2 * screen->border;
- int pr;
- XGCValues gcv;
- int winX, winY, width, height;
- XSizeHints sizehints;
- char Tdefault[32];
- unsigned TEKgcFontMask;
-
- TRACE(("TekRealize\n"));
-
-#ifndef NO_ACTIVE_ICON
- term->screen.whichTwin = &term->screen.fullTwin;
-#endif /* NO_ACTIVE_ICON */
-
- BorderPixel(tekWidget) = BorderPixel(term);
-
- for (i = 0; i < TEKNUMFONTS; i++) {
- if (!tekWidget->tek.Tfont[i]) {
- tekWidget->tek.Tfont[i] = XQueryFont(screen->display, DefaultGCID);
- }
- TRACE(("Tfont[%d] %dx%d\n",
- i,
- tekWidget->tek.Tfont[i]->ascent +
- tekWidget->tek.Tfont[i]->descent,
- tekWidget->tek.Tfont[i]->max_bounds.width));
- tekWidget->tek.tobaseline[i] = tekWidget->tek.Tfont[i]->ascent;
- }
-
- if (!TekPtyData())
- return;
-
- if (term->misc.T_geometry == NULL) {
- int defwidth, defheight;
-
- if (term->misc.tekSmall) {
- defwidth = TEKMINWIDTH;
- defheight = TEKMINHEIGHT;
- } else {
- defwidth = TEKDEFWIDTH;
- defheight = TEKDEFHEIGHT;
- }
- sprintf(Tdefault, "=%dx%d", defwidth + border, defheight + border);
- term->misc.T_geometry = Tdefault;
- }
-
- winX = 1;
- winY = 1;
- width = TEKDEFWIDTH + border;
- height = TEKDEFHEIGHT + border;
-
- TRACE(("parsing T_geometry %s\n", NonNull(term->misc.T_geometry)));
- pr = XParseGeometry(term->misc.T_geometry,
- &winX,
- &winY,
- (unsigned int *) &width,
- (unsigned int *) &height);
- TRACE(("... position %d,%d size %dx%d\n", winY, winX, height, width));
- if ((pr & XValue) && (pr & XNegative))
- winX += DisplayWidth(screen->display, DefaultScreen(screen->display))
- - width - (BorderWidth(SHELL_OF(term)) * 2);
- if ((pr & YValue) && (pr & YNegative))
- winY += DisplayHeight(screen->display, DefaultScreen(screen->display))
- - height - (BorderWidth(SHELL_OF(term)) * 2);
-
- /* set up size hints */
- sizehints.min_width = TEKMINWIDTH + border;
- sizehints.min_height = TEKMINHEIGHT + border;
- sizehints.width_inc = 1;
- sizehints.height_inc = 1;
- sizehints.flags = PMinSize | PResizeInc;
- sizehints.x = winX;
- sizehints.y = winY;
- if ((XValue & pr) || (YValue & pr)) {
- sizehints.flags |= USSize | USPosition;
- sizehints.flags |= PWinGravity;
- switch (pr & (XNegative | YNegative)) {
- case 0:
- sizehints.win_gravity = NorthWestGravity;
- break;
- case XNegative:
- sizehints.win_gravity = NorthEastGravity;
- break;
- case YNegative:
- sizehints.win_gravity = SouthWestGravity;
- break;
- default:
- sizehints.win_gravity = SouthEastGravity;
- break;
- }
- } else {
- /* set a default size, but do *not* set position */
- sizehints.flags |= PSize;
- }
- sizehints.width = width;
- sizehints.height = height;
- if ((WidthValue & pr) || (HeightValue & pr))
- sizehints.flags |= USSize;
- else
- sizehints.flags |= PSize;
-
- TRACE(("make resize request %dx%d\n", height, width));
- (void) XtMakeResizeRequest((Widget) tekWidget,
- width, height,
- &tekWidget->core.width, &tekWidget->core.height);
- TRACE(("...made resize request %dx%d\n", tekWidget->core.height, tekWidget->core.width));
-
- /* XXX This is bogus. We are parsing geometries too late. This
- * is information that the shell widget ought to have before we get
- * realized, so that it can do the right thing.
- */
- if (sizehints.flags & USPosition)
- XMoveWindow(XtDisplay(tekWidget), TShellWindow, sizehints.x, sizehints.y);
-
- XSetWMNormalHints(XtDisplay(tekWidget), TShellWindow, &sizehints);
- XFlush(XtDisplay(tekWidget)); /* get it out to window manager */
-
- values->win_gravity = NorthWestGravity;
- values->background_pixel = T_COLOR(screen, TEK_BG);
-
- XtWindow(tekWidget) = TWindow(screen) =
- XCreateWindow(screen->display,
- XtWindow(SHELL_OF(tekWidget)),
- tekWidget->core.x, tekWidget->core.y,
- tekWidget->core.width, tekWidget->core.height, BorderWidth(tekWidget),
- (int) tekWidget->core.depth,
- InputOutput, CopyFromParent,
- ((*valuemaskp) | CWBackPixel | CWWinGravity),
- values);
-
- TFullWidth(screen) = width;
- TFullHeight(screen) = height;
- TWidth(screen) = width - border;
- THeight(screen) = height - border;
- TekScale(screen) = (double) TWidth(screen) / TEKWIDTH;
- if ((d = (double) THeight(screen) / (TEKHEIGHT + TEKTOPPAD +
- TEKBOTTOMPAD)) < TekScale(screen))
- TekScale(screen) = d;
-
- screen->cur.fontsize = TEK_FONT_LARGE;
- if (tekWidget->tek.initial_font) {
- char *s = tekWidget->tek.initial_font;
-
- if (XmuCompareISOLatin1(s, "large") == 0)
- screen->cur.fontsize = TEK_FONT_LARGE;
- else if (XmuCompareISOLatin1(s, "2") == 0 ||
- XmuCompareISOLatin1(s, "two") == 0)
- screen->cur.fontsize = TEK_FONT_2;
- else if (XmuCompareISOLatin1(s, "3") == 0 ||
- XmuCompareISOLatin1(s, "three") == 0)
- screen->cur.fontsize = TEK_FONT_3;
- else if (XmuCompareISOLatin1(s, "small") == 0)
- screen->cur.fontsize = TEK_FONT_SMALL;
- }
-#define TestGIN(s) XmuCompareISOLatin1(tekWidget->tek.gin_terminator_str, s)
-
- if (TestGIN(GIN_TERM_NONE_STR) == 0)
- screen->gin_terminator = GIN_TERM_NONE;
- else if (TestGIN(GIN_TERM_CR_STR) == 0)
- screen->gin_terminator = GIN_TERM_CR;
- else if (TestGIN(GIN_TERM_EOT_STR) == 0)
- screen->gin_terminator = GIN_TERM_EOT;
- else
- fprintf(stderr, "%s: illegal GIN terminator setting \"%s\"\n",
- xterm_name, tekWidget->tek.gin_terminator_str);
-
- gcv.graphics_exposures = True; /* default */
- gcv.font = tekWidget->tek.Tfont[screen->cur.fontsize]->fid;
- gcv.foreground = T_COLOR(screen, TEK_FG);
- gcv.background = T_COLOR(screen, TEK_BG);
-
- /* if font wasn't successfully opened, then gcv.font will contain
- the Default GC's ID, meaning that we must use the server default font.
- */
- TEKgcFontMask = (gcv.font == DefaultGCID) ? 0 : GCFont;
- screen->TnormalGC = XCreateGC(screen->display, TWindow(screen),
- (TEKgcFontMask | GCGraphicsExposures |
- GCForeground | GCBackground),
- &gcv);
-
- gcv.function = GXinvert;
- gcv.plane_mask = (T_COLOR(screen, TEK_BG) ^
- T_COLOR(screen, TEK_CURSOR));
- gcv.join_style = JoinMiter; /* default */
- gcv.line_width = 1;
- screen->TcursorGC = XCreateGC(screen->display, TWindow(screen),
- (GCFunction | GCPlaneMask), &gcv);
-
- gcv.foreground = T_COLOR(screen, TEK_FG);
- gcv.line_style = LineOnOffDash;
- gcv.line_width = 0;
- for (i = 0; i < TEKNUMLINES; i++) {
- screen->linepat[i] = XCreateGC(screen->display, TWindow(screen),
- (GCForeground | GCLineStyle), &gcv);
- XSetDashes(screen->display, screen->linepat[i], 0,
- (char *) dashes[i], dash_length[i]);
- }
-
- TekBackground(screen);
-
- screen->margin = MARGIN1; /* Margin 1 */
- screen->TekGIN = False; /* GIN off */
-
- XDefineCursor(screen->display, TWindow(screen), screen->pointer_cursor);
-
- { /* there's gotta be a better way... */
- static Arg args[] =
- {
- {XtNtitle, (XtArgVal) NULL},
- {XtNiconName, (XtArgVal) NULL},
- };
- char *icon_name, *title, *tek_icon_name, *tek_title;
-
- args[0].value = (XtArgVal) & icon_name;
- args[1].value = (XtArgVal) & title;
- XtGetValues(SHELL_OF(tekWidget), args, 2);
- tek_icon_name = XtMalloc(strlen(icon_name) + 7);
- strcpy(tek_icon_name, icon_name);
- strcat(tek_icon_name, "(Tek)");
- tek_title = XtMalloc(strlen(title) + 7);
- strcpy(tek_title, title);
- strcat(tek_title, "(Tek)");
- args[0].value = (XtArgVal) tek_icon_name;
- args[1].value = (XtArgVal) tek_title;
- XtSetValues(SHELL_OF(tekWidget), args, 2);
- XtFree(tek_icon_name);
- XtFree(tek_title);
- }
-
- tek = TekRecord = &Tek0;
- tek->next = (TekLink *) 0;
- tek->fontsize = screen->cur.fontsize;
- tek->count = 0;
- tek->ptr = tek->data;
- Tpushback = Tpushb;
- screen->cur_X = 0;
- screen->cur_Y = TEKHOME;
- line_pt = Tline;
- Ttoggled = True;
- screen->page = screen->cur;
- return;
-}
-
-void
-TekSetFontSize(int newitem)
-{
- TScreen *screen = &term->screen;
- int oldsize = screen->cur.fontsize;
- int newsize = MI2FS(newitem);
- Font fid;
-
- TRACE(("TekSetFontSize(%d)\n", newitem));
-
- if (!tekWidget || oldsize == newsize)
- return;
- if (!Ttoggled)
- TCursorToggle(TOGGLE);
- set_tekfont_menu_item(oldsize, False);
-
- fid = tekWidget->tek.Tfont[newsize]->fid;
- if (fid == DefaultGCID)
- /* we didn't succeed in opening a real font
- for this size. Instead, use server default. */
- XCopyGC(screen->display,
- DefaultGC(screen->display, DefaultScreen(screen->display)),
- GCFont, screen->TnormalGC);
- else
- XSetFont(screen->display, screen->TnormalGC, fid);
-
- screen->cur.fontsize = newsize;
- set_tekfont_menu_item(newsize, True);
- if (!Ttoggled)
- TCursorToggle(TOGGLE);
-}
-
-void
-ChangeTekColors(TScreen * screen, ScrnColors * pNew)
-{
- int i;
- XGCValues gcv;
-
- if (COLOR_DEFINED(pNew, TEK_FG)) {
- T_COLOR(screen, TEK_FG) = COLOR_VALUE(pNew, TEK_FG);
- TRACE(("... TEK_FG: %#lx\n", T_COLOR(screen, TEK_FG)));
- }
- if (COLOR_DEFINED(pNew, TEK_BG)) {
- T_COLOR(screen, TEK_BG) = COLOR_VALUE(pNew, TEK_BG);
- TRACE(("... TEK_BG: %#lx\n", T_COLOR(screen, TEK_BG)));
- }
- if (COLOR_DEFINED(pNew, TEK_CURSOR)) {
- T_COLOR(screen, TEK_CURSOR) = COLOR_VALUE(pNew, TEK_CURSOR);
- TRACE(("... TEK_CURSOR: %#lx\n", T_COLOR(screen, TEK_CURSOR)));
- } else {
- T_COLOR(screen, TEK_CURSOR) = T_COLOR(screen, TEK_FG);
- TRACE(("... TEK_CURSOR: %#lx\n", T_COLOR(screen, TEK_CURSOR)));
- }
-
- if (tekWidget) {
- XSetForeground(screen->display, screen->TnormalGC,
- T_COLOR(screen, TEK_FG));
- XSetBackground(screen->display, screen->TnormalGC,
- T_COLOR(screen, TEK_BG));
- if (BorderPixel(tekWidget) == T_COLOR(screen, TEK_BG)) {
- BorderPixel(tekWidget) = T_COLOR(screen, TEK_FG);
- BorderPixel(XtParent(tekWidget)) = T_COLOR(screen, TEK_FG);
- if (XtWindow(XtParent(tekWidget)))
- XSetWindowBorder(screen->display,
- XtWindow(XtParent(tekWidget)),
- BorderPixel(tekWidget));
- }
-
- for (i = 0; i < TEKNUMLINES; i++) {
- XSetForeground(screen->display, screen->linepat[i],
- T_COLOR(screen, TEK_FG));
- }
-
- gcv.plane_mask = (T_COLOR(screen, TEK_BG) ^
- T_COLOR(screen, TEK_CURSOR));
- XChangeGC(screen->display, screen->TcursorGC, GCPlaneMask, &gcv);
- TekBackground(screen);
- }
- return;
-}
-
-void
-TekReverseVideo(TScreen * screen)
-{
- int i;
- XGCValues gcv;
-
- EXCHANGE(T_COLOR(screen, TEK_FG), T_COLOR(screen, TEK_BG), i);
-
- T_COLOR(screen, TEK_CURSOR) = T_COLOR(screen, TEK_FG);
-
- if (tekWidget) {
- XSetForeground(screen->display, screen->TnormalGC, T_COLOR(screen, TEK_FG));
- XSetBackground(screen->display, screen->TnormalGC, T_COLOR(screen, TEK_BG));
-
- if (BorderPixel(tekWidget) == T_COLOR(screen, TEK_BG)) {
- BorderPixel(tekWidget) = T_COLOR(screen, TEK_FG);
- BorderPixel(XtParent(tekWidget)) = T_COLOR(screen, TEK_FG);
- if (XtWindow(XtParent(tekWidget)))
- XSetWindowBorder(screen->display,
- XtWindow(XtParent(tekWidget)),
- BorderPixel(tekWidget));
- }
-
- for (i = 0; i < TEKNUMLINES; i++) {
- XSetForeground(screen->display, screen->linepat[i],
- T_COLOR(screen, TEK_FG));
- }
-
- gcv.plane_mask = (T_COLOR(screen, TEK_BG) ^
- T_COLOR(screen, TEK_CURSOR));
- XChangeGC(screen->display, screen->TcursorGC, GCPlaneMask, &gcv);
- TekBackground(screen);
- }
-}
-
-static void
-TekBackground(TScreen * screen)
-{
- if (TWindow(screen))
- XSetWindowBackground(screen->display, TWindow(screen),
- T_COLOR(screen, TEK_BG));
-}
-
-/*
- * Toggles cursor on or off at cursor position in screen.
- */
-void
-TCursorToggle(int toggle) /* TOGGLE or CLEAR */
-{
- TScreen *screen = &term->screen;
- int c, x, y;
- unsigned int cellwidth, cellheight;
-
- if (!screen->Tshow)
- return;
-
- c = screen->cur.fontsize;
- cellwidth = (unsigned) tekWidget->tek.Tfont[c]->max_bounds.width;
- cellheight = (unsigned) (tekWidget->tek.Tfont[c]->ascent +
- tekWidget->tek.Tfont[c]->descent);
-
- x = (int) ((screen->cur_X * TekScale(screen)) + screen->border);
- y = (int) (((TEKHEIGHT + TEKTOPPAD - screen->cur_Y) * TekScale(screen))
- + screen->border - tekWidget->tek.tobaseline[c]);
-
- if (toggle == TOGGLE) {
- if (screen->select || screen->always_highlight)
- XFillRectangle(screen->display, TWindow(screen),
- screen->TcursorGC, x, y,
- cellwidth, cellheight);
- else { /* fix to use different GC! */
- XDrawRectangle(screen->display, TWindow(screen),
- screen->TcursorGC, x, y,
- cellwidth - 1, cellheight - 1);
- }
- } else {
- /* Clear the entire rectangle, even though we may only
- * have drawn an outline. This fits with our refresh
- * scheme of redrawing the entire window on any expose
- * event and is easier than trying to figure out exactly
- * which part of the cursor needs to be erased.
- */
- XClearArea(screen->display, TWindow(screen), x, y,
- cellwidth, cellheight, False);
- }
-}
-
-void
-TekSimulatePageButton(Bool reset)
-{
- TScreen *screen = &term->screen;
-
- if (!tekWidget)
- return;
- if (reset) {
- bzero((char *) &screen->cur, sizeof screen->cur);
- }
- TekRefresh = (TekLink *) 0;
- TekPage();
- screen->cur_X = 0;
- screen->cur_Y = TEKHOME;
-}
-
-/* write copy of screen to a file */
-
-void
-TekCopy(void)
-{
- TScreen *screen = &term->screen;
-
- TekLink *Tp;
- char buf[32];
- char initbuf[5];
- int tekcopyfd;
-
- timestamp_filename(buf, "COPY");
- if (access(buf, F_OK) >= 0
- && access(buf, W_OK) < 0) {
- Bell(XkbBI_MinorError, 0);
- return;
- }
-#ifndef VMS
- if (access(".", W_OK) < 0) { /* can't write in directory */
- Bell(XkbBI_MinorError, 0);
- return;
- }
-#endif
-
- if ((tekcopyfd = open_userfile(screen->uid, screen->gid, buf, False)) >= 0) {
- sprintf(initbuf, "%c%c%c%c",
- ESC, (char) (screen->page.fontsize + '8'),
- ESC, (char) (screen->page.linetype + '`'));
- write(tekcopyfd, initbuf, 4);
- Tp = &Tek0;
- do {
- write(tekcopyfd, Tp->data, Tp->count);
- Tp = Tp->next;
- } while (Tp);
- close(tekcopyfd);
- }
-}
diff --git a/nx-X11/programs/xterm/Tests b/nx-X11/programs/xterm/Tests
deleted file mode 100644
index 0c6c88925..000000000
--- a/nx-X11/programs/xterm/Tests
+++ /dev/null
@@ -1,42 +0,0 @@
-Tests for xterm:
-
-If system supports window size (i.e., some combination of SIGWINCH,
-TIOCSSIZE, TIOCSWINSZ), start a full-screen program (e.g., Emacs,
-Jove, vi) and resize the xterm window. The program must immediately
-update its screen image for the new size.
-
-If compiled with -DUTMP, starting a new xterm should create a new utmp
-entry. ("who" will show this info.) Exiting xterm should remove the
-entry. Killing the xterm window (or other unnatural exit) should also
-remove the entry. When should entries be made in the wtmp file?
-
-Process group stuff should be correct.
-
-Should work without access to /dev/tty, say started from an xdm
-started from a boot-time script.
-
-If "xterm -help" offers the -C option, it should work.
-
-echo "test" > /dev/tty
-
-vi with lines that wrap.
-
-Exec'ing things other than shells.
-
-Another thing that has caused problems in the past is process groups,
-especially w.r.t. signal propagation to the child.
-
-Popup menu signals: running only a shell, click on "Send INT Signal."
-Do you get a new prompt from the shell? (Same as typing ^C at it.)
-
-Should scroll *fast* with jumpScroll enabled.
-
-While a mouse button is down tracing out a selection, output to the
-screen should be suspended.
-
-Selections more than one screen long.
-
-start xterm running only Tek widget: "xterm -t"
-
-
-Please add to this list if you find xterm failing in some way.
diff --git a/nx-X11/programs/xterm/UXTerm.ad b/nx-X11/programs/xterm/UXTerm.ad
deleted file mode 100644
index b2180bfc5..000000000
--- a/nx-X11/programs/xterm/UXTerm.ad
+++ /dev/null
@@ -1,38 +0,0 @@
-! $XFree86: xc/programs/xterm/UXTerm.ad,v 1.4 2005/11/03 13:17:27 dickey Exp $
-
-! Use
-! xterm -class UXTerm
-! to set resources for UTF-8 mode with corresponding fonts.
-! See the uxterm script for an example.
-
-#include "XTerm-color"
-
-*fontMenu.Label: Unicode Fonts
-*VT100.utf8: 1
-
-! This includes "XTerm-color" which includes "XTerm", which defines fonts.
-! Why set them here?
-!
-! Here is a simple description. A technically precise one would be very long.
-! When xterm starts up, it uses the
-!
-! *VT100.font
-!
-! resource, and if it is told to switch to wide-character (UTF-8) mode, it
-! checks if the given font is "wide", and if not looks for the
-!
-! *VT100.utf8Fonts.font
-!
-! to obtain a wide font. A "wide" font has more than 256 glyphs. Typical
-! wide fonts have 10,000 glyphs. If the original "*VT100.font" is not wide,
-! and xterm can load the *VT100.utf8Fonts.font, it will use that.
-!
-! Making the wide fonts associated with *VT100.font in this file allows uxterm
-! to skip that step. It will use the fonts that the XTerm file gives for the
-! *VT100.uft8Fonts.font pattern.
-*VT100.font2: -misc-fixed-medium-r-normal--8-80-75-75-c-50-iso10646-1
-*VT100.font: -misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso10646-1
-*VT100.font3: -misc-fixed-medium-r-normal--14-130-75-75-c-70-iso10646-1
-*VT100.font4: -misc-fixed-medium-r-normal--13-120-75-75-c-80-iso10646-1
-*VT100.font5: -misc-fixed-medium-r-normal--18-120-100-100-c-90-iso10646-1
-*VT100.font6: -misc-fixed-medium-r-normal--20-200-75-75-c-100-iso10646-1
diff --git a/nx-X11/programs/xterm/VTPrsTbl.c b/nx-X11/programs/xterm/VTPrsTbl.c
deleted file mode 100644
index 043190e95..000000000
--- a/nx-X11/programs/xterm/VTPrsTbl.c
+++ /dev/null
@@ -1,7216 +0,0 @@
-/* $XTermId: VTPrsTbl.c,v 1.44 2005/11/13 23:10:35 tom Exp $ */
-
-/*
- * $Xorg: VTPrsTbl.c,v 1.3 2000/08/17 19:55:07 cpqbld Exp $
- */
-
-/* $XFree86: xc/programs/xterm/VTPrsTbl.c,v 3.29 2005/11/13 23:10:35 dickey Exp $ */
-/*
- *
- * Copyright 1999-2004,2005 by Thomas E. Dickey
- *
- * All Rights Reserved
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sublicense, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- * IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY
- * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- * Except as contained in this notice, the name(s) of the above copyright
- * holders shall not be used in advertising or otherwise to promote the
- * sale, use or other dealings in this Software without prior written
- * authorization.
- *
- *
- * Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
- *
- * All Rights Reserved
- *
- * Permission to use, copy, modify, and distribute this software and its
- * documentation for any purpose and without fee is hereby granted,
- * provided that the above copyright notice appear in all copies and that
- * both that copyright notice and this permission notice appear in
- * supporting documentation, and that the name of Digital Equipment
- * Corporation not be used in advertising or publicity pertaining to
- * distribution of the software without specific, written prior permission.
- *
- *
- * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
- * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
- * DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
- * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
- * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
- * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- * SOFTWARE.
- */
-
-#include <VTparse.h>
-
-#if !OPT_DEC_LOCATOR
-#undef CASE_CSI_TICK_STATE
-#define CASE_CSI_TICK_STATE CASE_CSI_IGNORE
-#endif
-
-#if !OPT_WIDE_CHARS
-#undef CASE_ESC_PERCENT
-#define CASE_ESC_PERCENT CASE_ESC_IGNORE
-#endif
-
-/*
- * Stupid Apollo C preprocessor can't handle long lines. So... To keep
- * it happy, we put each onto a separate line.... Sigh...
- */
-
-Const PARSE_T ansi_table[] =
-{
-/* NUL SOH STX ETX */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* EOT ENQ ACK BEL */
-CASE_IGNORE,
-CASE_ENQ,
-CASE_IGNORE,
-CASE_BELL,
-/* BS HT NL VT */
-CASE_BS,
-CASE_TAB,
-CASE_VMOT,
-CASE_VMOT,
-/* NP CR SO SI */
-CASE_VMOT,
-CASE_CR,
-CASE_SO,
-CASE_SI,
-/* DLE DC1 DC2 DC3 */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* DC4 NAK SYN ETB */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* CAN EM SUB ESC */
-CASE_GROUND_STATE,
-CASE_IGNORE,
-CASE_GROUND_STATE,
-CASE_ESC,
-/* FS GS RS US */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* SP ! " # */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* $ % & ' */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* ( ) * + */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* , - . / */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* 0 1 2 3 */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* 4 5 6 7 */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* 8 9 : ; */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* < = > ? */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* @ A B C */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* D E F G */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* H I J K */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* L M N O */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* P Q R S */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* T U V W */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* X Y Z [ */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* \ ] ^ _ */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* ` a b c */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* d e f g */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* h i j k */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* l m n o */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* p q r s */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* t u v w */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* x y z { */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* | } ~ DEL */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_IGNORE,
-/* 0x80 0x81 0x82 0x83 */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 0x84 0x85 0x86 0x87 */
-CASE_IND,
-CASE_NEL,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 0x88 0x89 0x8a 0x8b */
-CASE_HTS,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 0x8c 0x8d 0x8e 0x8f */
-CASE_GROUND_STATE,
-CASE_RI,
-CASE_SS2,
-CASE_SS3,
-/* 0x90 0x91 0x92 0x93 */
-CASE_DCS,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 0x94 0x95 0x96 0x97 */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_SPA,
-CASE_EPA,
-/* 0x98 0x99 0x9a 0x9b */
-CASE_SOS,
-CASE_GROUND_STATE,
-CASE_DECID,
-CASE_CSI_STATE,
-/* 0x9c 0x9d 0x9e 0x9f */
-CASE_ST,
-CASE_OSC,
-CASE_PM,
-CASE_APC,
-/* nobreakspace exclamdown cent sterling */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* currency yen brokenbar section */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* diaeresis copyright ordfeminine guillemotleft */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* notsign hyphen registered macron */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* degree plusminus twosuperior threesuperior */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* acute mu paragraph periodcentered */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* cedilla onesuperior masculine guillemotright */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* onequarter onehalf threequarters questiondown */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* Agrave Aacute Acircumflex Atilde */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* Adiaeresis Aring AE Ccedilla */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* Egrave Eacute Ecircumflex Ediaeresis */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* Igrave Iacute Icircumflex Idiaeresis */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* Eth Ntilde Ograve Oacute */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* Ocircumflex Otilde Odiaeresis multiply */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* Ooblique Ugrave Uacute Ucircumflex */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* Udiaeresis Yacute Thorn ssharp */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* agrave aacute acircumflex atilde */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* adiaeresis aring ae ccedilla */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* egrave eacute ecircumflex ediaeresis */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* igrave iacute icircumflex idiaeresis */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* eth ntilde ograve oacute */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* ocircumflex otilde odiaeresis division */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* oslash ugrave uacute ucircumflex */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* udiaeresis yacute thorn ydiaeresis */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-};
-
-Const PARSE_T csi_table[] = /* CSI */
-{
-/* NUL SOH STX ETX */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* EOT ENQ ACK BEL */
-CASE_IGNORE,
-CASE_ENQ,
-CASE_IGNORE,
-CASE_BELL,
-/* BS HT NL VT */
-CASE_BS,
-CASE_TAB,
-CASE_VMOT,
-CASE_VMOT,
-/* NP CR SO SI */
-CASE_VMOT,
-CASE_CR,
-CASE_SO,
-CASE_SI,
-/* DLE DC1 DC2 DC3 */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* DC4 NAK SYN ETB */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* CAN EM SUB ESC */
-CASE_GROUND_STATE,
-CASE_IGNORE,
-CASE_GROUND_STATE,
-CASE_ESC,
-/* FS GS RS US */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* SP ! " # */
-CASE_CSI_IGNORE,
-CASE_CSI_EX_STATE,
-CASE_CSI_QUOTE_STATE,
-CASE_CSI_IGNORE,
-/* $ % & ' */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_TICK_STATE,
-/* ( ) * + */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* , - . / */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* 0 1 2 3 */
-CASE_ESC_DIGIT,
-CASE_ESC_DIGIT,
-CASE_ESC_DIGIT,
-CASE_ESC_DIGIT,
-/* 4 5 6 7 */
-CASE_ESC_DIGIT,
-CASE_ESC_DIGIT,
-CASE_ESC_DIGIT,
-CASE_ESC_DIGIT,
-/* 8 9 : ; */
-CASE_ESC_DIGIT,
-CASE_ESC_DIGIT,
-CASE_CSI_IGNORE,
-CASE_ESC_SEMI,
-/* < = > ? */
-CASE_CSI_IGNORE,
-CASE_DEC3_STATE,
-CASE_DEC2_STATE,
-CASE_DEC_STATE,
-/* @ A B C */
-CASE_ICH,
-CASE_CUU,
-CASE_CUD,
-CASE_CUF,
-/* D E F G */
-CASE_CUB,
-CASE_CNL,
-CASE_CPL,
-CASE_HPA,
-/* H I J K */
-CASE_CUP,
-CASE_CHT,
-CASE_ED,
-CASE_EL,
-/* L M N O */
-CASE_IL,
-CASE_DL,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* P Q R S */
-CASE_DCH,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_SU,
-/* T U V W */
-CASE_TRACK_MOUSE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* X Y Z [ */
-CASE_ECH,
-CASE_GROUND_STATE,
-CASE_CBT,
-CASE_GROUND_STATE,
-/* \ ] ^ _ */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* ` a b c */
-CASE_HPA,
-CASE_GROUND_STATE,
-CASE_REP,
-CASE_DA1,
-/* d e f g */
-CASE_VPA,
-CASE_GROUND_STATE,
-CASE_CUP,
-CASE_TBC,
-/* h i j k */
-CASE_SET,
-CASE_MC,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* l m n o */
-CASE_RST,
-CASE_SGR,
-CASE_CPR,
-CASE_GROUND_STATE,
-/* p q r s */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_DECSTBM,
-CASE_DECSC,
-/* t u v w */
-CASE_XTERM_WINOPS,
-CASE_DECRC,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* x y z { */
-CASE_DECREQTPARM,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* | } ~ DEL */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_IGNORE,
-/* 0x80 0x81 0x82 0x83 */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 0x84 0x85 0x86 0x87 */
-CASE_IND,
-CASE_NEL,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 0x88 0x89 0x8a 0x8b */
-CASE_HTS,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 0x8c 0x8d 0x8e 0x8f */
-CASE_GROUND_STATE,
-CASE_RI,
-CASE_SS2,
-CASE_SS3,
-/* 0x90 0x91 0x92 0x93 */
-CASE_DCS,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 0x94 0x95 0x96 0x97 */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_SPA,
-CASE_EPA,
-/* 0x98 0x99 0x9a 0x9b */
-CASE_SOS,
-CASE_GROUND_STATE,
-CASE_DECID,
-CASE_CSI_STATE,
-/* 0x9c 0x9d 0x9e 0x9f */
-CASE_ST,
-CASE_OSC,
-CASE_PM,
-CASE_APC,
-/* nobreakspace exclamdown cent sterling */
-CASE_CSI_IGNORE,
-CASE_CSI_EX_STATE,
-CASE_CSI_QUOTE_STATE,
-CASE_CSI_IGNORE,
-/* currency yen brokenbar section */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_TICK_STATE,
-/* diaeresis copyright ordfeminine guillemotleft */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* notsign hyphen registered macron */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* degree plusminus twosuperior threesuperior */
-CASE_ESC_DIGIT,
-CASE_ESC_DIGIT,
-CASE_ESC_DIGIT,
-CASE_ESC_DIGIT,
-/* acute mu paragraph periodcentered */
-CASE_ESC_DIGIT,
-CASE_ESC_DIGIT,
-CASE_ESC_DIGIT,
-CASE_ESC_DIGIT,
-/* cedilla onesuperior masculine guillemotright */
-CASE_ESC_DIGIT,
-CASE_ESC_DIGIT,
-CASE_CSI_IGNORE,
-CASE_ESC_SEMI,
-/* onequarter onehalf threequarters questiondown */
-CASE_CSI_IGNORE,
-CASE_DEC3_STATE,
-CASE_DEC2_STATE,
-CASE_DEC_STATE,
-/* Agrave Aacute Acircumflex Atilde */
-CASE_ICH,
-CASE_CUU,
-CASE_CUD,
-CASE_CUF,
-/* Adiaeresis Aring AE Ccedilla */
-CASE_CUB,
-CASE_CNL,
-CASE_CPL,
-CASE_HPA,
-/* Egrave Eacute Ecircumflex Ediaeresis */
-CASE_CUP,
-CASE_CHT,
-CASE_ED,
-CASE_EL,
-/* Igrave Iacute Icircumflex Idiaeresis */
-CASE_IL,
-CASE_DL,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Eth Ntilde Ograve Oacute */
-CASE_DCH,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_SU,
-/* Ocircumflex Otilde Odiaeresis multiply */
-CASE_TRACK_MOUSE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Ooblique Ugrave Uacute Ucircumflex */
-CASE_ECH,
-CASE_GROUND_STATE,
-CASE_CBT,
-CASE_GROUND_STATE,
-/* Udiaeresis Yacute Thorn ssharp */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* agrave aacute acircumflex atilde */
-CASE_HPA,
-CASE_GROUND_STATE,
-CASE_REP,
-CASE_DA1,
-/* adiaeresis aring ae ccedilla */
-CASE_VPA,
-CASE_GROUND_STATE,
-CASE_CUP,
-CASE_TBC,
-/* egrave eacute ecircumflex ediaeresis */
-CASE_SET,
-CASE_MC,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* igrave iacute icircumflex idiaeresis */
-CASE_RST,
-CASE_SGR,
-CASE_CPR,
-CASE_GROUND_STATE,
-/* eth ntilde ograve oacute */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_DECSTBM,
-CASE_DECSC,
-/* ocircumflex otilde odiaeresis division */
-CASE_XTERM_WINOPS,
-CASE_DECRC,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* oslash ugrave uacute ucircumflex */
-CASE_DECREQTPARM,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* udiaeresis yacute thorn ydiaeresis */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_IGNORE,
-};
-
-Const PARSE_T csi2_table[] = /* CSI */
-{
-/* NUL SOH STX ETX */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* EOT ENQ ACK BEL */
-CASE_IGNORE,
-CASE_ENQ,
-CASE_IGNORE,
-CASE_BELL,
-/* BS HT NL VT */
-CASE_BS,
-CASE_TAB,
-CASE_VMOT,
-CASE_VMOT,
-/* NP CR SO SI */
-CASE_VMOT,
-CASE_CR,
-CASE_SO,
-CASE_SI,
-/* DLE DC1 DC2 DC3 */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* DC4 NAK SYN ETB */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* CAN EM SUB ESC */
-CASE_GROUND_STATE,
-CASE_IGNORE,
-CASE_GROUND_STATE,
-CASE_ESC,
-/* FS GS RS US */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* SP ! " # */
-CASE_CSI_IGNORE,
-CASE_CSI_EX_STATE,
-CASE_CSI_QUOTE_STATE,
-CASE_CSI_IGNORE,
-/* $ % & ' */
-CASE_CSI_DOLLAR_STATE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_TICK_STATE,
-/* ( ) * + */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_STAR_STATE,
-CASE_CSI_IGNORE,
-/* , - . / */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* 0 1 2 3 */
-CASE_ESC_DIGIT,
-CASE_ESC_DIGIT,
-CASE_ESC_DIGIT,
-CASE_ESC_DIGIT,
-/* 4 5 6 7 */
-CASE_ESC_DIGIT,
-CASE_ESC_DIGIT,
-CASE_ESC_DIGIT,
-CASE_ESC_DIGIT,
-/* 8 9 : ; */
-CASE_ESC_DIGIT,
-CASE_ESC_DIGIT,
-CASE_CSI_IGNORE,
-CASE_ESC_SEMI,
-/* < = > ? */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* @ A B C */
-CASE_ICH,
-CASE_CUU,
-CASE_CUD,
-CASE_CUF,
-/* D E F G */
-CASE_CUB,
-CASE_CNL,
-CASE_CPL,
-CASE_HPA,
-/* H I J K */
-CASE_CUP,
-CASE_CHT,
-CASE_ED,
-CASE_EL,
-/* L M N O */
-CASE_IL,
-CASE_DL,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* P Q R S */
-CASE_DCH,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_SU,
-/* T U V W */
-CASE_TRACK_MOUSE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* X Y Z [ */
-CASE_ECH,
-CASE_GROUND_STATE,
-CASE_CBT,
-CASE_GROUND_STATE,
-/* \ ] ^ _ */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* ` a b c */
-CASE_HPA,
-CASE_GROUND_STATE,
-CASE_REP,
-CASE_DA1,
-/* d e f g */
-CASE_VPA,
-CASE_GROUND_STATE,
-CASE_CUP,
-CASE_TBC,
-/* h i j k */
-CASE_SET,
-CASE_MC,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* l m n o */
-CASE_RST,
-CASE_SGR,
-CASE_CPR,
-CASE_GROUND_STATE,
-/* p q r s */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_DECSTBM,
-CASE_DECSC,
-/* t u v w */
-CASE_XTERM_WINOPS,
-CASE_DECRC,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* x y z { */
-CASE_DECREQTPARM,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* | } ~ DEL */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_IGNORE,
-/* 0x80 0x81 0x82 0x83 */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 0x84 0x85 0x86 0x87 */
-CASE_IND,
-CASE_NEL,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 0x88 0x89 0x8a 0x8b */
-CASE_HTS,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 0x8c 0x8d 0x8e 0x8f */
-CASE_GROUND_STATE,
-CASE_RI,
-CASE_SS2,
-CASE_SS3,
-/* 0x90 0x91 0x92 0x93 */
-CASE_DCS,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 0x94 0x95 0x96 0x97 */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_SPA,
-CASE_EPA,
-/* 0x98 0x99 0x9a 0x9b */
-CASE_SOS,
-CASE_GROUND_STATE,
-CASE_DECID,
-CASE_CSI_STATE,
-/* 0x9c 0x9d 0x9e 0x9f */
-CASE_ST,
-CASE_OSC,
-CASE_PM,
-CASE_APC,
-/* nobreakspace exclamdown cent sterling */
-CASE_CSI_IGNORE,
-CASE_CSI_EX_STATE,
-CASE_CSI_QUOTE_STATE,
-CASE_CSI_IGNORE,
-/* currency yen brokenbar section */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_TICK_STATE,
-/* diaeresis copyright ordfeminine guillemotleft */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* notsign hyphen registered macron */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* degree plusminus twosuperior threesuperior */
-CASE_ESC_DIGIT,
-CASE_ESC_DIGIT,
-CASE_ESC_DIGIT,
-CASE_ESC_DIGIT,
-/* acute mu paragraph periodcentered */
-CASE_ESC_DIGIT,
-CASE_ESC_DIGIT,
-CASE_ESC_DIGIT,
-CASE_ESC_DIGIT,
-/* cedilla onesuperior masculine guillemotright */
-CASE_ESC_DIGIT,
-CASE_ESC_DIGIT,
-CASE_CSI_IGNORE,
-CASE_ESC_SEMI,
-/* onequarter onehalf threequarters questiondown */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* Agrave Aacute Acircumflex Atilde */
-CASE_ICH,
-CASE_CUU,
-CASE_CUD,
-CASE_CUF,
-/* Adiaeresis Aring AE Ccedilla */
-CASE_CUB,
-CASE_CNL,
-CASE_CPL,
-CASE_HPA,
-/* Egrave Eacute Ecircumflex Ediaeresis */
-CASE_CUP,
-CASE_CHT,
-CASE_ED,
-CASE_EL,
-/* Igrave Iacute Icircumflex Idiaeresis */
-CASE_IL,
-CASE_DL,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Eth Ntilde Ograve Oacute */
-CASE_DCH,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_SU,
-/* Ocircumflex Otilde Odiaeresis multiply */
-CASE_TRACK_MOUSE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Ooblique Ugrave Uacute Ucircumflex */
-CASE_ECH,
-CASE_GROUND_STATE,
-CASE_CBT,
-CASE_GROUND_STATE,
-/* Udiaeresis Yacute Thorn ssharp */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* agrave aacute acircumflex atilde */
-CASE_HPA,
-CASE_GROUND_STATE,
-CASE_REP,
-CASE_DA1,
-/* adiaeresis aring ae ccedilla */
-CASE_VPA,
-CASE_GROUND_STATE,
-CASE_CUP,
-CASE_TBC,
-/* egrave eacute ecircumflex ediaeresis */
-CASE_SET,
-CASE_MC,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* igrave iacute icircumflex idiaeresis */
-CASE_RST,
-CASE_SGR,
-CASE_CPR,
-CASE_GROUND_STATE,
-/* eth ntilde ograve oacute */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_DECSTBM,
-CASE_DECSC,
-/* ocircumflex otilde odiaeresis division */
-CASE_XTERM_WINOPS,
-CASE_DECRC,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* oslash ugrave uacute ucircumflex */
-CASE_DECREQTPARM,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* udiaeresis yacute thorn ydiaeresis */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_IGNORE,
-};
-
-Const PARSE_T csi_ex_table[] = /* CSI ! */
-{
-/* NUL SOH STX ETX */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* EOT ENQ ACK BEL */
-CASE_IGNORE,
-CASE_ENQ,
-CASE_IGNORE,
-CASE_BELL,
-/* BS HT NL VT */
-CASE_BS,
-CASE_TAB,
-CASE_VMOT,
-CASE_VMOT,
-/* NP CR SO SI */
-CASE_VMOT,
-CASE_CR,
-CASE_SO,
-CASE_SI,
-/* DLE DC1 DC2 DC3 */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* DC4 NAK SYN ETB */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* CAN EM SUB ESC */
-CASE_GROUND_STATE,
-CASE_IGNORE,
-CASE_GROUND_STATE,
-CASE_ESC,
-/* FS GS RS US */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* SP ! " # */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* $ % & ' */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* ( ) * + */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* , - . / */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* 0 1 2 3 */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* 4 5 6 7 */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* 8 9 : ; */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* < = > ? */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* @ A B C */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* D E F G */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* H I J K */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* L M N O */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* P Q R S */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* T U V W */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* X Y Z [ */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* \ ] ^ _ */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* ` a b c */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* d e f g */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* h i j k */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* l m n o */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* p q r s */
-CASE_DECSTR,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* t u v w */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* x y z { */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* | } ~ DEL */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_IGNORE,
-/* 0x80 0x81 0x82 0x83 */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 0x84 0x85 0x86 0x87 */
-CASE_IND,
-CASE_NEL,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 0x88 0x89 0x8a 0x8b */
-CASE_HTS,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 0x8c 0x8d 0x8e 0x8f */
-CASE_GROUND_STATE,
-CASE_RI,
-CASE_SS2,
-CASE_SS3,
-/* 0x90 0x91 0x92 0x93 */
-CASE_DCS,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 0x94 0x95 0x96 0x97 */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_SPA,
-CASE_EPA,
-/* 0x98 0x99 0x9a 0x9b */
-CASE_SOS,
-CASE_GROUND_STATE,
-CASE_DECID,
-CASE_CSI_STATE,
-/* 0x9c 0x9d 0x9e 0x9f */
-CASE_ST,
-CASE_OSC,
-CASE_PM,
-CASE_APC,
-/* nobreakspace exclamdown cent sterling */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* currency yen brokenbar section */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* diaeresis copyright ordfeminine guillemotleft */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* notsign hyphen registered macron */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* degree plusminus twosuperior threesuperior */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* acute mu paragraph periodcentered */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* cedilla onesuperior masculine guillemotright */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* onequarter onehalf threequarters questiondown */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* Agrave Aacute Acircumflex Atilde */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Adiaeresis Aring AE Ccedilla */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Egrave Eacute Ecircumflex Ediaeresis */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Igrave Iacute Icircumflex Idiaeresis */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Eth Ntilde Ograve Oacute */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Ocircumflex Otilde Odiaeresis multiply */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Ooblique Ugrave Uacute Ucircumflex */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Udiaeresis Yacute Thorn ssharp */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* agrave aacute acircumflex atilde */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* adiaeresis aring ae ccedilla */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* egrave eacute ecircumflex ediaeresis */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* igrave iacute icircumflex idiaeresis */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* eth ntilde ograve oacute */
-CASE_DECSTR,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* ocircumflex otilde odiaeresis division */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* oslash ugrave uacute ucircumflex */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* udiaeresis yacute thorn ydiaeresis */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_IGNORE,
-};
-
-Const PARSE_T csi_quo_table[] = /* CSI ... " */
-{
-/* NUL SOH STX ETX */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* EOT ENQ ACK BEL */
-CASE_IGNORE,
-CASE_ENQ,
-CASE_IGNORE,
-CASE_BELL,
-/* BS HT NL VT */
-CASE_BS,
-CASE_TAB,
-CASE_VMOT,
-CASE_VMOT,
-/* NP CR SO SI */
-CASE_VMOT,
-CASE_CR,
-CASE_SO,
-CASE_SI,
-/* DLE DC1 DC2 DC3 */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* DC4 NAK SYN ETB */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* CAN EM SUB ESC */
-CASE_GROUND_STATE,
-CASE_IGNORE,
-CASE_GROUND_STATE,
-CASE_ESC,
-/* FS GS RS US */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* SP ! " # */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* $ % & ' */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* ( ) * + */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* , - . / */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* 0 1 2 3 */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* 4 5 6 7 */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* 8 9 : ; */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* < = > ? */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* @ A B C */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* D E F G */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* H I J K */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* L M N O */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* P Q R S */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* T U V W */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* X Y Z [ */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* \ ] ^ _ */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* ` a b c */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* d e f g */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* h i j k */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* l m n o */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* p q r s */
-CASE_DECSCL,
-CASE_DECSCA,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* t u v w */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* x y z { */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* | } ~ DEL */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_IGNORE,
-/* 0x80 0x81 0x82 0x83 */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 0x84 0x85 0x86 0x87 */
-CASE_IND,
-CASE_NEL,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 0x88 0x89 0x8a 0x8b */
-CASE_HTS,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 0x8c 0x8d 0x8e 0x8f */
-CASE_GROUND_STATE,
-CASE_RI,
-CASE_SS2,
-CASE_SS3,
-/* 0x90 0x91 0x92 0x93 */
-CASE_DCS,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 0x94 0x95 0x96 0x97 */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_SPA,
-CASE_EPA,
-/* 0x98 0x99 0x9a 0x9b */
-CASE_SOS,
-CASE_GROUND_STATE,
-CASE_DECID,
-CASE_CSI_STATE,
-/* 0x9c 0x9d 0x9e 0x9f */
-CASE_ST,
-CASE_OSC,
-CASE_PM,
-CASE_APC,
-/* nobreakspace exclamdown cent sterling */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* currency yen brokenbar section */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* diaeresis copyright ordfeminine guillemotleft */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* notsign hyphen registered macron */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* degree plusminus twosuperior threesuperior */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* acute mu paragraph periodcentered */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* cedilla onesuperior masculine guillemotright */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* onequarter onehalf threequarters questiondown */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* Agrave Aacute Acircumflex Atilde */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Adiaeresis Aring AE Ccedilla */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Egrave Eacute Ecircumflex Ediaeresis */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Igrave Iacute Icircumflex Idiaeresis */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Eth Ntilde Ograve Oacute */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Ocircumflex Otilde Odiaeresis multiply */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Ooblique Ugrave Uacute Ucircumflex */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Udiaeresis Yacute Thorn ssharp */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* agrave aacute acircumflex atilde */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* adiaeresis aring ae ccedilla */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* egrave eacute ecircumflex ediaeresis */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* igrave iacute icircumflex idiaeresis */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* eth ntilde ograve oacute */
-CASE_DECSCL,
-CASE_DECSCA,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* ocircumflex otilde odiaeresis division */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* oslash ugrave uacute ucircumflex */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* udiaeresis yacute thorn ydiaeresis */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_IGNORE,
-};
-
-#if OPT_DEC_LOCATOR
-Const PARSE_T csi_tick_table[] = /* CSI ... ' */
-{
-/* NUL SOH STX ETX */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* EOT ENQ ACK BEL */
-CASE_IGNORE,
-CASE_ENQ,
-CASE_IGNORE,
-CASE_BELL,
-/* BS HT NL VT */
-CASE_BS,
-CASE_TAB,
-CASE_VMOT,
-CASE_VMOT,
-/* NP CR SO SI */
-CASE_VMOT,
-CASE_CR,
-CASE_SO,
-CASE_SI,
-/* DLE DC1 DC2 DC3 */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* DC4 NAK SYN ETB */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* CAN EM SUB ESC */
-CASE_GROUND_STATE,
-CASE_IGNORE,
-CASE_GROUND_STATE,
-CASE_ESC,
-/* FS GS RS US */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* SP ! " # */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* $ % & ' */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* ( ) * + */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* , - . / */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* 0 1 2 3 */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* 4 5 6 7 */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* 8 9 : ; */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* < = > ? */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* @ A B C */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* D E F G */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* H I J K */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* L M N O */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* P Q R S */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* T U V W */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* X Y Z [ */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* \ ] ^ _ */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* ` a b c */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* d e f g */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* h i j k */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* l m n o */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* p q r s */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* t u v w */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_DECEFR,
-/* x y z { */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_DECELR,
-CASE_DECSLE,
-/* | } ~ DEL */
-CASE_DECRQLP,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_IGNORE,
-/* 0x80 0x81 0x82 0x83 */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 0x84 0x85 0x86 0x87 */
-CASE_IND,
-CASE_NEL,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 0x88 0x89 0x8a 0x8b */
-CASE_HTS,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 0x8c 0x8d 0x8e 0x8f */
-CASE_GROUND_STATE,
-CASE_RI,
-CASE_SS2,
-CASE_SS3,
-/* 0x90 0x91 0x92 0x93 */
-CASE_DCS,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 0x94 0x95 0x96 0x97 */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_SPA,
-CASE_EPA,
-/* 0x98 0x99 0x9a 0x9b */
-CASE_SOS,
-CASE_GROUND_STATE,
-CASE_DECID,
-CASE_CSI_STATE,
-/* 0x9c 0x9d 0x9e 0x9f */
-CASE_ST,
-CASE_OSC,
-CASE_PM,
-CASE_APC,
-/* nobreakspace exclamdown cent sterling */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* currency yen brokenbar section */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* diaeresis copyright ordfeminine guillemotleft */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* notsign hyphen registered macron */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* degree plusminus twosuperior threesuperior */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* acute mu paragraph periodcentered */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* cedilla onesuperior masculine guillemotright */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* onequarter onehalf threequarters questiondown */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* Agrave Aacute Acircumflex Atilde */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Adiaeresis Aring AE Ccedilla */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Egrave Eacute Ecircumflex Ediaeresis */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Igrave Iacute Icircumflex Idiaeresis */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Eth Ntilde Ograve Oacute */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Ocircumflex Otilde Odiaeresis multiply */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Ooblique Ugrave Uacute Ucircumflex */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Udiaeresis Yacute Thorn ssharp */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* agrave aacute acircumflex atilde */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* adiaeresis aring ae ccedilla */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* egrave eacute ecircumflex ediaeresis */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* igrave iacute icircumflex idiaeresis */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* eth ntilde ograve oacute */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* ocircumflex otilde odiaeresis division */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_DECEFR,
-/* oslash ugrave uacute ucircumflex */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_DECELR,
-CASE_DECSLE,
-/* udiaeresis yacute thorn ydiaeresis */
-CASE_DECRQLP,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_IGNORE,
-};
-#endif /* OPT_DEC_LOCATOR */
-
-#if OPT_DEC_RECTOPS
-Const PARSE_T csi_dollar_table[] = /* CSI ... $ */
-{
-/* NUL SOH STX ETX */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* EOT ENQ ACK BEL */
-CASE_IGNORE,
-CASE_ENQ,
-CASE_IGNORE,
-CASE_BELL,
-/* BS HT NL VT */
-CASE_BS,
-CASE_TAB,
-CASE_VMOT,
-CASE_VMOT,
-/* NP CR SO SI */
-CASE_VMOT,
-CASE_CR,
-CASE_SO,
-CASE_SI,
-/* DLE DC1 DC2 DC3 */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* DC4 NAK SYN ETB */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* CAN EM SUB ESC */
-CASE_GROUND_STATE,
-CASE_IGNORE,
-CASE_GROUND_STATE,
-CASE_ESC,
-/* FS GS RS US */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* SP ! " # */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* $ % & ' */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* ( ) * + */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* , - . / */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* 0 1 2 3 */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* 4 5 6 7 */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* 8 9 : ; */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* < = > ? */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* @ A B C */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* D E F G */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* H I J K */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* L M N O */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* P Q R S */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* T U V W */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* X Y Z [ */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* \ ] ^ _ */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* ` a b c */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* d e f g */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* h i j k */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* l m n o */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* p q r s */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_DECCARA,
-CASE_GROUND_STATE,
-/* t u v w */
-CASE_DECRARA,
-CASE_GROUND_STATE,
-CASE_DECCRA,
-CASE_GROUND_STATE,
-/* x y z { */
-CASE_DECFRA,
-CASE_GROUND_STATE,
-CASE_DECERA,
-CASE_DECSERA,
-/* | } ~ DEL */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_IGNORE,
-/* 0x80 0x81 0x82 0x83 */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 0x84 0x85 0x86 0x87 */
-CASE_IND,
-CASE_NEL,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 0x88 0x89 0x8a 0x8b */
-CASE_HTS,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 0x8c 0x8d 0x8e 0x8f */
-CASE_GROUND_STATE,
-CASE_RI,
-CASE_SS2,
-CASE_SS3,
-/* 0x90 0x91 0x92 0x93 */
-CASE_DCS,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 0x94 0x95 0x96 0x97 */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_SPA,
-CASE_EPA,
-/* 0x98 0x99 0x9a 0x9b */
-CASE_SOS,
-CASE_GROUND_STATE,
-CASE_DECID,
-CASE_CSI_STATE,
-/* 0x9c 0x9d 0x9e 0x9f */
-CASE_ST,
-CASE_OSC,
-CASE_PM,
-CASE_APC,
-/* nobreakspace exclamdown cent sterling */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* currency yen brokenbar section */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* diaeresis copyright ordfeminine guillemotleft */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* notsign hyphen registered macron */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* degree plusminus twosuperior threesuperior */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* acute mu paragraph periodcentered */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* cedilla onesuperior masculine guillemotright */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* onequarter onehalf threequarters questiondown */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* Agrave Aacute Acircumflex Atilde */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Adiaeresis Aring AE Ccedilla */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Egrave Eacute Ecircumflex Ediaeresis */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Igrave Iacute Icircumflex Idiaeresis */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Eth Ntilde Ograve Oacute */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Ocircumflex Otilde Odiaeresis multiply */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Ooblique Ugrave Uacute Ucircumflex */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Udiaeresis Yacute Thorn ssharp */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* agrave aacute acircumflex atilde */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* adiaeresis aring ae ccedilla */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* egrave eacute ecircumflex ediaeresis */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* igrave iacute icircumflex idiaeresis */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* eth ntilde ograve oacute */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_DECCARA,
-CASE_GROUND_STATE,
-/* ocircumflex otilde odiaeresis division */
-CASE_DECRARA,
-CASE_GROUND_STATE,
-CASE_DECCRA,
-CASE_GROUND_STATE,
-/* oslash ugrave uacute ucircumflex */
-CASE_DECFRA,
-CASE_GROUND_STATE,
-CASE_DECERA,
-CASE_DECSERA,
-/* udiaeresis yacute thorn ydiaeresis */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-};
-
-Const PARSE_T csi_star_table[] = /* CSI ... * */
-{
-/* NUL SOH STX ETX */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* EOT ENQ ACK BEL */
-CASE_IGNORE,
-CASE_ENQ,
-CASE_IGNORE,
-CASE_BELL,
-/* BS HT NL VT */
-CASE_BS,
-CASE_TAB,
-CASE_VMOT,
-CASE_VMOT,
-/* NP CR SO SI */
-CASE_VMOT,
-CASE_CR,
-CASE_SO,
-CASE_SI,
-/* DLE DC1 DC2 DC3 */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* DC4 NAK SYN ETB */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* CAN EM SUB ESC */
-CASE_GROUND_STATE,
-CASE_IGNORE,
-CASE_GROUND_STATE,
-CASE_ESC,
-/* FS GS RS US */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* SP ! " # */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* $ % & ' */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* ( ) * + */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* , - . / */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* 0 1 2 3 */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* 4 5 6 7 */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* 8 9 : ; */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* < = > ? */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* @ A B C */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* D E F G */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* H I J K */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* L M N O */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* P Q R S */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* T U V W */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* X Y Z [ */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* \ ] ^ _ */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* ` a b c */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* d e f g */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* h i j k */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* l m n o */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* p q r s */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* t u v w */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* x y z { */
-CASE_DECSACE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* | } ~ DEL */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_IGNORE,
-/* 0x80 0x81 0x82 0x83 */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 0x84 0x85 0x86 0x87 */
-CASE_IND,
-CASE_NEL,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 0x88 0x89 0x8a 0x8b */
-CASE_HTS,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 0x8c 0x8d 0x8e 0x8f */
-CASE_GROUND_STATE,
-CASE_RI,
-CASE_SS2,
-CASE_SS3,
-/* 0x90 0x91 0x92 0x93 */
-CASE_DCS,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 0x94 0x95 0x96 0x97 */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_SPA,
-CASE_EPA,
-/* 0x98 0x99 0x9a 0x9b */
-CASE_SOS,
-CASE_GROUND_STATE,
-CASE_DECID,
-CASE_CSI_STATE,
-/* 0x9c 0x9d 0x9e 0x9f */
-CASE_ST,
-CASE_OSC,
-CASE_PM,
-CASE_APC,
-/* nobreakspace exclamdown cent sterling */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* currency yen brokenbar section */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* diaeresis copyright ordfeminine guillemotleft */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* notsign hyphen registered macron */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* degree plusminus twosuperior threesuperior */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* acute mu paragraph periodcentered */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* cedilla onesuperior masculine guillemotright */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* onequarter onehalf threequarters questiondown */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* Agrave Aacute Acircumflex Atilde */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Adiaeresis Aring AE Ccedilla */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Egrave Eacute Ecircumflex Ediaeresis */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Igrave Iacute Icircumflex Idiaeresis */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Eth Ntilde Ograve Oacute */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Ocircumflex Otilde Odiaeresis multiply */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Ooblique Ugrave Uacute Ucircumflex */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Udiaeresis Yacute Thorn ssharp */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* agrave aacute acircumflex atilde */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* adiaeresis aring ae ccedilla */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* egrave eacute ecircumflex ediaeresis */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* igrave iacute icircumflex idiaeresis */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* eth ntilde ograve oacute */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* ocircumflex otilde odiaeresis division */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* oslash ugrave uacute ucircumflex */
-CASE_DECSACE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* udiaeresis yacute thorn ydiaeresis */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-};
-#endif /* OPT_DEC_RECTOPS */
-
-Const PARSE_T dec_table[] = /* CSI ? */
-{
-/* NUL SOH STX ETX */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* EOT ENQ ACK BEL */
-CASE_IGNORE,
-CASE_ENQ,
-CASE_IGNORE,
-CASE_BELL,
-/* BS HT NL VT */
-CASE_BS,
-CASE_TAB,
-CASE_VMOT,
-CASE_VMOT,
-/* NP CR SO SI */
-CASE_VMOT,
-CASE_CR,
-CASE_SO,
-CASE_SI,
-/* DLE DC1 DC2 DC3 */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* DC4 NAK SYN ETB */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* CAN EM SUB ESC */
-CASE_GROUND_STATE,
-CASE_IGNORE,
-CASE_GROUND_STATE,
-CASE_ESC,
-/* FS GS RS US */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* SP ! " # */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* $ % & ' */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* ( ) * + */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* , - . / */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* 0 1 2 3 */
-CASE_ESC_DIGIT,
-CASE_ESC_DIGIT,
-CASE_ESC_DIGIT,
-CASE_ESC_DIGIT,
-/* 4 5 6 7 */
-CASE_ESC_DIGIT,
-CASE_ESC_DIGIT,
-CASE_ESC_DIGIT,
-CASE_ESC_DIGIT,
-/* 8 9 : ; */
-CASE_ESC_DIGIT,
-CASE_ESC_DIGIT,
-CASE_CSI_IGNORE,
-CASE_ESC_SEMI,
-/* < = > ? */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* @ A B C */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* D E F G */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* H I J K */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_DECSED,
-CASE_DECSEL,
-/* L M N O */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* P Q R S */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* T U V W */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* X Y Z [ */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* \ ] ^ _ */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* ` a b c */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* d e f g */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* h i j k */
-CASE_DECSET,
-CASE_DEC_MC,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* l m n o */
-CASE_DECRST,
-CASE_GROUND_STATE,
-CASE_DSR,
-CASE_GROUND_STATE,
-/* p q r s */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_XTERM_RESTORE,
-CASE_XTERM_SAVE,
-/* t u v w */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* x y z { */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* | } ~ DEL */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_IGNORE,
-/* 0x80 0x81 0x82 0x83 */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 0x84 0x85 0x86 0x87 */
-CASE_IND,
-CASE_NEL,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 0x88 0x89 0x8a 0x8b */
-CASE_HTS,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 0x8c 0x8d 0x8e 0x8f */
-CASE_GROUND_STATE,
-CASE_RI,
-CASE_SS2,
-CASE_SS3,
-/* 0x90 0x91 0x92 0x93 */
-CASE_DCS,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 0x94 0x95 0x96 0x97 */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_SPA,
-CASE_EPA,
-/* 0x98 0x99 0x9a 0x9b */
-CASE_SOS,
-CASE_GROUND_STATE,
-CASE_DECID,
-CASE_CSI_STATE,
-/* 0x9c 0x9d 0x9e 0x9f */
-CASE_ST,
-CASE_OSC,
-CASE_PM,
-CASE_APC,
-/* nobreakspace exclamdown cent sterling */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* currency yen brokenbar section */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* diaeresis copyright ordfeminine guillemotleft */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* notsign hyphen registered macron */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* degree plusminus twosuperior threesuperior */
-CASE_ESC_DIGIT,
-CASE_ESC_DIGIT,
-CASE_ESC_DIGIT,
-CASE_ESC_DIGIT,
-/* acute mu paragraph periodcentered */
-CASE_ESC_DIGIT,
-CASE_ESC_DIGIT,
-CASE_ESC_DIGIT,
-CASE_ESC_DIGIT,
-/* cedilla onesuperior masculine guillemotright */
-CASE_ESC_DIGIT,
-CASE_ESC_DIGIT,
-CASE_CSI_IGNORE,
-CASE_ESC_SEMI,
-/* onequarter onehalf threequarters questiondown */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* Agrave Aacute Acircumflex Atilde */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Adiaeresis Aring AE Ccedilla */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Egrave Eacute Ecircumflex Ediaeresis */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_DECSED,
-CASE_DECSEL,
-/* Igrave Iacute Icircumflex Idiaeresis */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Eth Ntilde Ograve Oacute */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Ocircumflex Otilde Odiaeresis multiply */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Ooblique Ugrave Uacute Ucircumflex */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Udiaeresis Yacute Thorn ssharp */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* agrave aacute acircumflex atilde */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* adiaeresis aring ae ccedilla */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* egrave eacute ecircumflex ediaeresis */
-CASE_DECSET,
-CASE_DEC_MC,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* igrave iacute icircumflex idiaeresis */
-CASE_DECRST,
-CASE_GROUND_STATE,
-CASE_DSR,
-CASE_GROUND_STATE,
-/* eth ntilde ograve oacute */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_XTERM_RESTORE,
-CASE_XTERM_SAVE,
-/* ocircumflex otilde odiaeresis division */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* oslash ugrave uacute ucircumflex */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* udiaeresis yacute thorn ydiaeresis */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_IGNORE,
-};
-
-Const PARSE_T dec2_table[] = /* CSI > */
-{
-/* NUL SOH STX ETX */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* EOT ENQ ACK BEL */
-CASE_IGNORE,
-CASE_ENQ,
-CASE_IGNORE,
-CASE_BELL,
-/* BS HT NL VT */
-CASE_BS,
-CASE_TAB,
-CASE_VMOT,
-CASE_VMOT,
-/* NP CR SO SI */
-CASE_VMOT,
-CASE_CR,
-CASE_SO,
-CASE_SI,
-/* DLE DC1 DC2 DC3 */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* DC4 NAK SYN ETB */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* CAN EM SUB ESC */
-CASE_GROUND_STATE,
-CASE_IGNORE,
-CASE_GROUND_STATE,
-CASE_ESC,
-/* FS GS RS US */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* SP ! " # */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* $ % & ' */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* ( ) * + */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* , - . / */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* 0 1 2 3 */
-CASE_ESC_DIGIT,
-CASE_ESC_DIGIT,
-CASE_ESC_DIGIT,
-CASE_ESC_DIGIT,
-/* 4 5 6 7 */
-CASE_ESC_DIGIT,
-CASE_ESC_DIGIT,
-CASE_ESC_DIGIT,
-CASE_ESC_DIGIT,
-/* 8 9 : ; */
-CASE_ESC_DIGIT,
-CASE_ESC_DIGIT,
-CASE_CSI_IGNORE,
-CASE_ESC_SEMI,
-/* < = > ? */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* @ A B C */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* D E F G */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* H I J K */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* L M N O */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* P Q R S */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* T U V W */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* X Y Z [ */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* \ ] ^ _ */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* ` a b c */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_DA2,
-/* d e f g */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* h i j k */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* l m n o */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* p q r s */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* t u v w */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* x y z { */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* | } ~ DEL */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_IGNORE,
-/* 0x80 0x81 0x82 0x83 */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 0x84 0x85 0x86 0x87 */
-CASE_IND,
-CASE_NEL,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 0x88 0x89 0x8a 0x8b */
-CASE_HTS,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 0x8c 0x8d 0x8e 0x8f */
-CASE_GROUND_STATE,
-CASE_RI,
-CASE_SS2,
-CASE_SS3,
-/* 0x90 0x91 0x92 0x93 */
-CASE_DCS,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 0x94 0x95 0x96 0x97 */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_SPA,
-CASE_EPA,
-/* 0x98 0x99 0x9a 0x9b */
-CASE_SOS,
-CASE_GROUND_STATE,
-CASE_DECID,
-CASE_CSI_STATE,
-/* 0x9c 0x9d 0x9e 0x9f */
-CASE_ST,
-CASE_OSC,
-CASE_PM,
-CASE_APC,
-/* nobreakspace exclamdown cent sterling */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* currency yen brokenbar section */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* diaeresis copyright ordfeminine guillemotleft */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* notsign hyphen registered macron */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* degree plusminus twosuperior threesuperior */
-CASE_ESC_DIGIT,
-CASE_ESC_DIGIT,
-CASE_ESC_DIGIT,
-CASE_ESC_DIGIT,
-/* acute mu paragraph periodcentered */
-CASE_ESC_DIGIT,
-CASE_ESC_DIGIT,
-CASE_ESC_DIGIT,
-CASE_ESC_DIGIT,
-/* cedilla onesuperior masculine guillemotright */
-CASE_ESC_DIGIT,
-CASE_ESC_DIGIT,
-CASE_CSI_IGNORE,
-CASE_ESC_SEMI,
-/* onequarter onehalf threequarters questiondown */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* Agrave Aacute Acircumflex Atilde */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Adiaeresis Aring AE Ccedilla */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Egrave Eacute Ecircumflex Ediaeresis */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Igrave Iacute Icircumflex Idiaeresis */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Eth Ntilde Ograve Oacute */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Ocircumflex Otilde Odiaeresis multiply */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Ooblique Ugrave Uacute Ucircumflex */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Udiaeresis Yacute Thorn ssharp */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* agrave aacute acircumflex atilde */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_DA2,
-/* adiaeresis aring ae ccedilla */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* egrave eacute ecircumflex ediaeresis */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* igrave iacute icircumflex idiaeresis */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* eth ntilde ograve oacute */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* ocircumflex otilde odiaeresis division */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* oslash ugrave uacute ucircumflex */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* udiaeresis yacute thorn ydiaeresis */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_IGNORE,
-};
-
-Const PARSE_T dec3_table[] = /* CSI = */
-{
-/* NUL SOH STX ETX */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* EOT ENQ ACK BEL */
-CASE_IGNORE,
-CASE_ENQ,
-CASE_IGNORE,
-CASE_BELL,
-/* BS HT NL VT */
-CASE_BS,
-CASE_TAB,
-CASE_VMOT,
-CASE_VMOT,
-/* NP CR SO SI */
-CASE_VMOT,
-CASE_CR,
-CASE_SO,
-CASE_SI,
-/* DLE DC1 DC2 DC3 */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* DC4 NAK SYN ETB */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* CAN EM SUB ESC */
-CASE_GROUND_STATE,
-CASE_IGNORE,
-CASE_GROUND_STATE,
-CASE_ESC,
-/* FS GS RS US */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* SP ! " # */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* $ % & ' */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* ( ) * + */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* , - . / */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* 0 1 2 3 */
-CASE_ESC_DIGIT,
-CASE_ESC_DIGIT,
-CASE_ESC_DIGIT,
-CASE_ESC_DIGIT,
-/* 4 5 6 7 */
-CASE_ESC_DIGIT,
-CASE_ESC_DIGIT,
-CASE_ESC_DIGIT,
-CASE_ESC_DIGIT,
-/* 8 9 : ; */
-CASE_ESC_DIGIT,
-CASE_ESC_DIGIT,
-CASE_CSI_IGNORE,
-CASE_ESC_SEMI,
-/* < = > ? */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* @ A B C */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* D E F G */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* H I J K */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* L M N O */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* P Q R S */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* T U V W */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* X Y Z [ */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* \ ] ^ _ */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* ` a b c */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_DECRPTUI,
-/* d e f g */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* h i j k */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* l m n o */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* p q r s */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* t u v w */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* x y z { */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* | } ~ DEL */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_IGNORE,
-/* 0x80 0x81 0x82 0x83 */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 0x84 0x85 0x86 0x87 */
-CASE_IND,
-CASE_NEL,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 0x88 0x89 0x8a 0x8b */
-CASE_HTS,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 0x8c 0x8d 0x8e 0x8f */
-CASE_GROUND_STATE,
-CASE_RI,
-CASE_SS2,
-CASE_SS3,
-/* 0x90 0x91 0x92 0x93 */
-CASE_DCS,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 0x94 0x95 0x96 0x97 */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_SPA,
-CASE_EPA,
-/* 0x98 0x99 0x9a 0x9b */
-CASE_SOS,
-CASE_GROUND_STATE,
-CASE_DECID,
-CASE_CSI_STATE,
-/* 0x9c 0x9d 0x9e 0x9f */
-CASE_ST,
-CASE_OSC,
-CASE_PM,
-CASE_APC,
-/* nobreakspace exclamdown cent sterling */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* currency yen brokenbar section */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* diaeresis copyright ordfeminine guillemotleft */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* notsign hyphen registered macron */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* degree plusminus twosuperior threesuperior */
-CASE_ESC_DIGIT,
-CASE_ESC_DIGIT,
-CASE_ESC_DIGIT,
-CASE_ESC_DIGIT,
-/* acute mu paragraph periodcentered */
-CASE_ESC_DIGIT,
-CASE_ESC_DIGIT,
-CASE_ESC_DIGIT,
-CASE_ESC_DIGIT,
-/* cedilla onesuperior masculine guillemotright */
-CASE_ESC_DIGIT,
-CASE_ESC_DIGIT,
-CASE_CSI_IGNORE,
-CASE_ESC_SEMI,
-/* onequarter onehalf threequarters questiondown */
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-CASE_CSI_IGNORE,
-/* Agrave Aacute Acircumflex Atilde */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Adiaeresis Aring AE Ccedilla */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Egrave Eacute Ecircumflex Ediaeresis */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Igrave Iacute Icircumflex Idiaeresis */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Eth Ntilde Ograve Oacute */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Ocircumflex Otilde Odiaeresis multiply */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Ooblique Ugrave Uacute Ucircumflex */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Udiaeresis Yacute Thorn ssharp */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* agrave aacute acircumflex atilde */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_DECRPTUI,
-/* adiaeresis aring ae ccedilla */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* egrave eacute ecircumflex ediaeresis */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* igrave iacute icircumflex idiaeresis */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* eth ntilde ograve oacute */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* ocircumflex otilde odiaeresis division */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* oslash ugrave uacute ucircumflex */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* udiaeresis yacute thorn ydiaeresis */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_IGNORE,
-};
-
-Const PARSE_T cigtable[] = /* CASE_CSI_IGNORE */
-{
-/* NUL SOH STX ETX */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* EOT ENQ ACK BEL */
-CASE_IGNORE,
-CASE_ENQ,
-CASE_IGNORE,
-CASE_BELL,
-/* BS HT NL VT */
-CASE_BS,
-CASE_TAB,
-CASE_VMOT,
-CASE_VMOT,
-/* NP CR SO SI */
-CASE_VMOT,
-CASE_CR,
-CASE_SO,
-CASE_SI,
-/* DLE DC1 DC2 DC3 */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* DC4 NAK SYN ETB */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* CAN EM SUB ESC */
-CASE_GROUND_STATE,
-CASE_IGNORE,
-CASE_GROUND_STATE,
-CASE_ESC,
-/* FS GS RS US */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* SP ! " # */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* $ % & ' */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* ( ) * + */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* , - . / */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0 1 2 3 */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 4 5 6 7 */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 8 9 : ; */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* < = > ? */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* @ A B C */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* D E F G */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* H I J K */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* L M N O */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* P Q R S */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* T U V W */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* X Y Z [ */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* \ ] ^ _ */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* ` a b c */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* d e f g */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* h i j k */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* l m n o */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* p q r s */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* t u v w */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* x y z { */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* | } ~ DEL */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_IGNORE,
-/* 0x80 0x81 0x82 0x83 */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 0x84 0x85 0x86 0x87 */
-CASE_IND,
-CASE_NEL,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 0x88 0x89 0x8a 0x8b */
-CASE_HTS,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 0x8c 0x8d 0x8e 0x8f */
-CASE_GROUND_STATE,
-CASE_RI,
-CASE_SS2,
-CASE_SS3,
-/* 0x90 0x91 0x92 0x93 */
-CASE_DCS,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 0x94 0x95 0x96 0x97 */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_SPA,
-CASE_EPA,
-/* 0x98 0x99 0x9a 0x9b */
-CASE_SOS,
-CASE_GROUND_STATE,
-CASE_DECID,
-CASE_CSI_STATE,
-/* 0x9c 0x9d 0x9e 0x9f */
-CASE_ST,
-CASE_OSC,
-CASE_PM,
-CASE_APC,
-/* nobreakspace exclamdown cent sterling */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* currency yen brokenbar section */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* diaeresis copyright ordfeminine guillemotleft */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* notsign hyphen registered macron */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* degree plusminus twosuperior threesuperior */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* acute mu paragraph periodcentered */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* cedilla onesuperior masculine guillemotright */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* onequarter onehalf threequarters questiondown */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* Agrave Aacute Acircumflex Atilde */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Adiaeresis Aring AE Ccedilla */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Egrave Eacute Ecircumflex Ediaeresis */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Igrave Iacute Icircumflex Idiaeresis */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Eth Ntilde Ograve Oacute */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Ocircumflex Otilde Odiaeresis multiply */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Ooblique Ugrave Uacute Ucircumflex */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Udiaeresis Yacute Thorn ssharp */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* agrave aacute acircumflex atilde */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* adiaeresis aring ae ccedilla */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* egrave eacute ecircumflex ediaeresis */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* igrave iacute icircumflex idiaeresis */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* eth ntilde ograve oacute */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* ocircumflex otilde odiaeresis division */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* oslash ugrave uacute ucircumflex */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* udiaeresis yacute thorn ydiaeresis */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_IGNORE,
-};
-
-Const PARSE_T eigtable[] = /* CASE_ESC_IGNORE */
-{
-/* NUL SOH STX ETX */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* EOT ENQ ACK BEL */
-CASE_IGNORE,
-CASE_ENQ,
-CASE_IGNORE,
-CASE_BELL,
-/* BS HT NL VT */
-CASE_BS,
-CASE_TAB,
-CASE_VMOT,
-CASE_VMOT,
-/* NP CR SO SI */
-CASE_VMOT,
-CASE_CR,
-CASE_SO,
-CASE_SI,
-/* DLE DC1 DC2 DC3 */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* DC4 NAK SYN ETB */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* CAN EM SUB ESC */
-CASE_GROUND_STATE,
-CASE_IGNORE,
-CASE_GROUND_STATE,
-CASE_ESC,
-/* FS GS RS US */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* SP ! " # */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* $ % & ' */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* ( ) * + */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* , - . / */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0 1 2 3 */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 4 5 6 7 */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 8 9 : ; */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* < = > ? */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* @ A B C */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* D E F G */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* H I J K */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* L M N O */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* P Q R S */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* T U V W */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* X Y Z [ */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* \ ] ^ _ */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* ` a b c */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* d e f g */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* h i j k */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* l m n o */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* p q r s */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* t u v w */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* x y z { */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* | } ~ DEL */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_IGNORE,
-/* 0x80 0x81 0x82 0x83 */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 0x84 0x85 0x86 0x87 */
-CASE_IND,
-CASE_NEL,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 0x88 0x89 0x8a 0x8b */
-CASE_HTS,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 0x8c 0x8d 0x8e 0x8f */
-CASE_GROUND_STATE,
-CASE_RI,
-CASE_SS2,
-CASE_SS3,
-/* 0x90 0x91 0x92 0x93 */
-CASE_DCS,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 0x94 0x95 0x96 0x97 */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_SPA,
-CASE_EPA,
-/* 0x98 0x99 0x9a 0x9b */
-CASE_SOS,
-CASE_GROUND_STATE,
-CASE_DECID,
-CASE_CSI_STATE,
-/* 0x9c 0x9d 0x9e 0x9f */
-CASE_ST,
-CASE_OSC,
-CASE_PM,
-CASE_APC,
-/* nobreakspace exclamdown cent sterling */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* currency yen brokenbar section */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* diaeresis copyright ordfeminine guillemotleft */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* notsign hyphen registered macron */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* degree plusminus twosuperior threesuperior */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* acute mu paragraph periodcentered */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* cedilla onesuperior masculine guillemotright */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* onequarter onehalf threequarters questiondown */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Agrave Aacute Acircumflex Atilde */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Adiaeresis Aring AE Ccedilla */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Egrave Eacute Ecircumflex Ediaeresis */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Igrave Iacute Icircumflex Idiaeresis */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Eth Ntilde Ograve Oacute */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Ocircumflex Otilde Odiaeresis multiply */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Ooblique Ugrave Uacute Ucircumflex */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Udiaeresis Yacute Thorn ssharp */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* agrave aacute acircumflex atilde */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* adiaeresis aring ae ccedilla */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* egrave eacute ecircumflex ediaeresis */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* igrave iacute icircumflex idiaeresis */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* eth ntilde ograve oacute */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* ocircumflex otilde odiaeresis division */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* oslash ugrave uacute ucircumflex */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* udiaeresis yacute thorn ydiaeresis */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_IGNORE,
-};
-
-Const PARSE_T esc_table[] = /* ESC */
-{
-/* NUL SOH STX ETX */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* EOT ENQ ACK BEL */
-CASE_IGNORE,
-CASE_ENQ,
-CASE_IGNORE,
-CASE_BELL,
-/* BS HT NL VT */
-CASE_BS,
-CASE_TAB,
-CASE_VMOT,
-CASE_VMOT,
-/* NP CR SO SI */
-CASE_VMOT,
-CASE_CR,
-CASE_SO,
-CASE_SI,
-/* DLE DC1 DC2 DC3 */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* DC4 NAK SYN ETB */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* CAN EM SUB ESC */
-CASE_GROUND_STATE,
-CASE_IGNORE,
-CASE_GROUND_STATE,
-CASE_ESC,
-/* FS GS RS US */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* SP ! " # */
-CASE_ESC_SP_STATE,
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-CASE_SCR_STATE,
-/* $ % & ' */
-CASE_ESC_IGNORE,
-CASE_ESC_PERCENT,
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-/* ( ) * + */
-CASE_SCS0_STATE,
-CASE_SCS1_STATE,
-CASE_SCS2_STATE,
-CASE_SCS3_STATE,
-/* , - . / */
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-/* 0 1 2 3 */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 4 5 6 7 */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_DECSC,
-/* 8 9 : ; */
-CASE_DECRC,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* < = > ? */
-CASE_GROUND_STATE,
-CASE_DECKPAM,
-CASE_DECKPNM,
-CASE_GROUND_STATE,
-/* @ A B C */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* D E F G */
-CASE_IND,
-CASE_NEL,
-CASE_HP_BUGGY_LL,
-CASE_GROUND_STATE,
-/* H I J K */
-CASE_HTS,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* L M N O */
-CASE_GROUND_STATE,
-CASE_RI,
-CASE_SS2,
-CASE_SS3,
-/* P Q R S */
-CASE_DCS,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* T U V W */
-CASE_XTERM_TITLE,
-CASE_GROUND_STATE,
-CASE_SPA,
-CASE_EPA,
-/* X Y Z [ */
-CASE_SOS,
-CASE_GROUND_STATE,
-CASE_DECID,
-CASE_CSI_STATE,
-/* \ ] ^ _ */
-CASE_ST,
-CASE_OSC,
-CASE_PM,
-CASE_APC,
-/* ` a b c */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_RIS,
-/* d e f g */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* h i j k */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* l m n o */
-CASE_HP_MEM_LOCK,
-CASE_HP_MEM_UNLOCK,
-CASE_LS2,
-CASE_LS3,
-/* p q r s */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* t u v w */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* x y z { */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* | } ~ DEL */
-CASE_LS3R,
-CASE_LS2R,
-CASE_LS1R,
-CASE_IGNORE,
-/* 0x80 0x81 0x82 0x83 */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 0x84 0x85 0x86 0x87 */
-CASE_IND,
-CASE_NEL,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 0x88 0x89 0x8a 0x8b */
-CASE_HTS,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 0x8c 0x8d 0x8e 0x8f */
-CASE_GROUND_STATE,
-CASE_RI,
-CASE_SS2,
-CASE_SS3,
-/* 0x90 0x91 0x92 0x93 */
-CASE_DCS,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 0x94 0x95 0x96 0x97 */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_SPA,
-CASE_EPA,
-/* 0x98 0x99 0x9a 0x9b */
-CASE_SOS,
-CASE_GROUND_STATE,
-CASE_DECID,
-CASE_CSI_STATE,
-/* 0x9c 0x9d 0x9e 0x9f */
-CASE_ST,
-CASE_OSC,
-CASE_PM,
-CASE_APC,
-/* nobreakspace exclamdown cent sterling */
-CASE_ESC_SP_STATE,
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-CASE_SCR_STATE,
-/* currency yen brokenbar section */
-CASE_ESC_IGNORE,
-CASE_ESC_PERCENT,
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-/* diaeresis copyright ordfeminine guillemotleft */
-CASE_SCS0_STATE,
-CASE_SCS1_STATE,
-CASE_SCS2_STATE,
-CASE_SCS3_STATE,
-/* notsign hyphen registered macron */
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-/* degree plusminus twosuperior threesuperior */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* acute mu paragraph periodcentered */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_DECSC,
-/* cedilla onesuperior masculine guillemotright */
-CASE_DECRC,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* onequarter onehalf threequarters questiondown */
-CASE_GROUND_STATE,
-CASE_DECKPAM,
-CASE_DECKPNM,
-CASE_GROUND_STATE,
-/* Agrave Aacute Acircumflex Atilde */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Adiaeresis Aring AE Ccedilla */
-CASE_IND,
-CASE_NEL,
-CASE_HP_BUGGY_LL,
-CASE_GROUND_STATE,
-/* Egrave Eacute Ecircumflex Ediaeresis */
-CASE_HTS,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Igrave Iacute Icircumflex Idiaeresis */
-CASE_GROUND_STATE,
-CASE_RI,
-CASE_SS2,
-CASE_SS3,
-/* Eth Ntilde Ograve Oacute */
-CASE_DCS,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Ocircumflex Otilde Odiaeresis multiply */
-CASE_XTERM_TITLE,
-CASE_GROUND_STATE,
-CASE_SPA,
-CASE_EPA,
-/* Ooblique Ugrave Uacute Ucircumflex */
-CASE_SOS,
-CASE_GROUND_STATE,
-CASE_DECID,
-CASE_CSI_STATE,
-/* Udiaeresis Yacute Thorn ssharp */
-CASE_ST,
-CASE_OSC,
-CASE_PM,
-CASE_APC,
-/* agrave aacute acircumflex atilde */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_RIS,
-/* adiaeresis aring ae ccedilla */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* egrave eacute ecircumflex ediaeresis */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* igrave iacute icircumflex idiaeresis */
-CASE_HP_MEM_LOCK,
-CASE_HP_MEM_UNLOCK,
-CASE_LS2,
-CASE_LS3,
-/* eth ntilde ograve oacute */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* ocircumflex otilde odiaeresis division */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* oslash ugrave uacute ucircumflex */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* udiaeresis yacute thorn ydiaeresis */
-CASE_LS3R,
-CASE_LS2R,
-CASE_LS1R,
-CASE_IGNORE,
-};
-
-Const PARSE_T esc_sp_table[] = /* ESC SP */
-{
-/* NUL SOH STX ETX */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* EOT ENQ ACK BEL */
-CASE_IGNORE,
-CASE_ENQ,
-CASE_IGNORE,
-CASE_BELL,
-/* BS HT NL VT */
-CASE_BS,
-CASE_TAB,
-CASE_VMOT,
-CASE_VMOT,
-/* NP CR SO SI */
-CASE_VMOT,
-CASE_CR,
-CASE_SO,
-CASE_SI,
-/* DLE DC1 DC2 DC3 */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* DC4 NAK SYN ETB */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* CAN EM SUB ESC */
-CASE_GROUND_STATE,
-CASE_IGNORE,
-CASE_GROUND_STATE,
-CASE_ESC,
-/* FS GS RS US */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* SP ! " # */
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-/* $ % & ' */
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-/* ( ) * + */
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-/* , - . / */
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-/* 0 1 2 3 */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 4 5 6 7 */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 8 9 : ; */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* < = > ? */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* @ A B C */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* D E F G */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_S7C1T,
-CASE_S8C1T,
-/* H I J K */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* L M N O */
-CASE_ANSI_LEVEL_1,
-CASE_ANSI_LEVEL_2,
-CASE_ANSI_LEVEL_3,
-CASE_GROUND_STATE,
-/* P Q R S */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* T U V W */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* X Y Z [ */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* \ ] ^ _ */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* ` a b c */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* d e f g */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* h i j k */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* l m n o */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* p q r s */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* t u v w */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* x y z { */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* | } ~ DEL */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_IGNORE,
-/* 0x80 0x81 0x82 0x83 */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 0x84 0x85 0x86 0x87 */
-CASE_IND,
-CASE_NEL,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 0x88 0x89 0x8a 0x8b */
-CASE_HTS,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 0x8c 0x8d 0x8e 0x8f */
-CASE_GROUND_STATE,
-CASE_RI,
-CASE_SS2,
-CASE_SS3,
-/* 0x90 0x91 0x92 0x93 */
-CASE_DCS,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 0x94 0x95 0x96 0x97 */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_SPA,
-CASE_EPA,
-/* 0x98 0x99 0x9a 0x9b */
-CASE_SOS,
-CASE_GROUND_STATE,
-CASE_DECID,
-CASE_CSI_STATE,
-/* 0x9c 0x9d 0x9e 0x9f */
-CASE_ST,
-CASE_OSC,
-CASE_PM,
-CASE_APC,
-/* nobreakspace exclamdown cent sterling */
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-/* currency yen brokenbar section */
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-/* diaeresis copyright ordfeminine guillemotleft */
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-/* notsign hyphen registered macron */
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-/* degree plusminus twosuperior threesuperior */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* acute mu paragraph periodcentered */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* cedilla onesuperior masculine guillemotright */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* onequarter onehalf threequarters questiondown */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Agrave Aacute Acircumflex Atilde */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Adiaeresis Aring AE Ccedilla */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_S7C1T,
-CASE_S8C1T,
-/* Egrave Eacute Ecircumflex Ediaeresis */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Igrave Iacute Icircumflex Idiaeresis */
-CASE_ANSI_LEVEL_1,
-CASE_ANSI_LEVEL_2,
-CASE_ANSI_LEVEL_3,
-CASE_GROUND_STATE,
-/* Eth Ntilde Ograve Oacute */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Ocircumflex Otilde Odiaeresis multiply */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Ooblique Ugrave Uacute Ucircumflex */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Udiaeresis Yacute Thorn ssharp */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* agrave aacute acircumflex atilde */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* adiaeresis aring ae ccedilla */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* egrave eacute ecircumflex ediaeresis */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* igrave iacute icircumflex idiaeresis */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* eth ntilde ograve oacute */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* ocircumflex otilde odiaeresis division */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* oslash ugrave uacute ucircumflex */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* udiaeresis yacute thorn ydiaeresis */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_IGNORE,
-};
-
-Const PARSE_T scrtable[] = /* ESC # */
-{
-/* NUL SOH STX ETX */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* EOT ENQ ACK BEL */
-CASE_IGNORE,
-CASE_ENQ,
-CASE_IGNORE,
-CASE_BELL,
-/* BS HT NL VT */
-CASE_BS,
-CASE_TAB,
-CASE_VMOT,
-CASE_VMOT,
-/* NP CR SO SI */
-CASE_VMOT,
-CASE_CR,
-CASE_SO,
-CASE_SI,
-/* DLE DC1 DC2 DC3 */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* DC4 NAK SYN ETB */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* CAN EM SUB ESC */
-CASE_GROUND_STATE,
-CASE_IGNORE,
-CASE_GROUND_STATE,
-CASE_ESC,
-/* FS GS RS US */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* SP ! " # */
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-/* $ % & ' */
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-/* ( ) * + */
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-/* , - . / */
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-/* 0 1 2 3 */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_DECDHL,
-/* 4 5 6 7 */
-CASE_DECDHL,
-CASE_DECSWL,
-CASE_DECDWL,
-CASE_GROUND_STATE,
-/* 8 9 : ; */
-CASE_DECALN,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* < = > ? */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* @ A B C */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* D E F G */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* H I J K */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* L M N O */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* P Q R S */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* T U V W */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* X Y Z [ */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* \ ] ^ _ */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* ` a b c */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* d e f g */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* h i j k */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* l m n o */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* p q r s */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* t u v w */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* x y z { */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* | } ~ DEL */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_IGNORE,
-/* 0x80 0x81 0x82 0x83 */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 0x84 0x85 0x86 0x87 */
-CASE_IND,
-CASE_NEL,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 0x88 0x89 0x8a 0x8b */
-CASE_HTS,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 0x8c 0x8d 0x8e 0x8f */
-CASE_GROUND_STATE,
-CASE_RI,
-CASE_SS2,
-CASE_SS3,
-/* 0x90 0x91 0x92 0x93 */
-CASE_DCS,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 0x94 0x95 0x96 0x97 */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_SPA,
-CASE_EPA,
-/* 0x98 0x99 0x9a 0x9b */
-CASE_SOS,
-CASE_GROUND_STATE,
-CASE_DECID,
-CASE_CSI_STATE,
-/* 0x9c 0x9d 0x9e 0x9f */
-CASE_ST,
-CASE_OSC,
-CASE_PM,
-CASE_APC,
-/* nobreakspace exclamdown cent sterling */
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-/* currency yen brokenbar section */
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-/* diaeresis copyright ordfeminine guillemotleft */
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-/* notsign hyphen registered macron */
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-/* degree plusminus twosuperior threesuperior */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_DECDHL,
-/* acute mu paragraph periodcentered */
-CASE_DECDHL,
-CASE_DECSWL,
-CASE_DECDWL,
-CASE_GROUND_STATE,
-/* cedilla onesuperior masculine guillemotright */
-CASE_DECALN,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* onequarter onehalf threequarters questiondown */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Agrave Aacute Acircumflex Atilde */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Adiaeresis Aring AE Ccedilla */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Egrave Eacute Ecircumflex Ediaeresis */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Igrave Iacute Icircumflex Idiaeresis */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Eth Ntilde Ograve Oacute */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Ocircumflex Otilde Odiaeresis multiply */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Ooblique Ugrave Uacute Ucircumflex */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Udiaeresis Yacute Thorn ssharp */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* agrave aacute acircumflex atilde */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* adiaeresis aring ae ccedilla */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* egrave eacute ecircumflex ediaeresis */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* igrave iacute icircumflex idiaeresis */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* eth ntilde ograve oacute */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* ocircumflex otilde odiaeresis division */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* oslash ugrave uacute ucircumflex */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* udiaeresis yacute thorn ydiaeresis */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_IGNORE,
-};
-
-Const PARSE_T scstable[] = /* ESC ( etc. */
-{
-/* NUL SOH STX ETX */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* EOT ENQ ACK BEL */
-CASE_IGNORE,
-CASE_ENQ,
-CASE_IGNORE,
-CASE_BELL,
-/* BS HT NL VT */
-CASE_BS,
-CASE_TAB,
-CASE_VMOT,
-CASE_VMOT,
-/* NP CR SO SI */
-CASE_VMOT,
-CASE_CR,
-CASE_SO,
-CASE_SI,
-/* DLE DC1 DC2 DC3 */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* DC4 NAK SYN ETB */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* CAN EM SUB ESC */
-CASE_GROUND_STATE,
-CASE_IGNORE,
-CASE_GROUND_STATE,
-CASE_ESC,
-/* FS GS RS US */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* SP ! " # */
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-/* $ % & ' */
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-/* ( ) * + */
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-/* , - . / */
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-/* 0 1 2 3 */
-CASE_GSETS,
-CASE_GSETS,
-CASE_GSETS,
-CASE_GROUND_STATE,
-/* 4 5 6 7 */
-CASE_GSETS,
-CASE_GSETS,
-CASE_GSETS,
-CASE_GSETS,
-/* 8 9 : ; */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* < = > ? */
-CASE_GROUND_STATE,
-CASE_GSETS,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* @ A B C */
-CASE_GROUND_STATE,
-CASE_GSETS,
-CASE_GSETS,
-CASE_GSETS,
-/* D E F G */
-CASE_GROUND_STATE,
-CASE_GSETS,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* H I J K */
-CASE_GSETS,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GSETS,
-/* L M N O */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* P Q R S */
-CASE_GROUND_STATE,
-CASE_GSETS,
-CASE_GSETS,
-CASE_GROUND_STATE,
-/* T U V W */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* X Y Z [ */
-CASE_GROUND_STATE,
-CASE_GSETS,
-CASE_GSETS,
-CASE_GROUND_STATE,
-/* \ ] ^ _ */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* ` a b c */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* d e f g */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* h i j k */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* l m n o */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* p q r s */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* t u v w */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* x y z { */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* | } ~ DEL */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_IGNORE,
-/* 0x80 0x81 0x82 0x83 */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 0x84 0x85 0x86 0x87 */
-CASE_IND,
-CASE_NEL,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 0x88 0x89 0x8a 0x8b */
-CASE_HTS,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 0x8c 0x8d 0x8e 0x8f */
-CASE_GROUND_STATE,
-CASE_RI,
-CASE_SS2,
-CASE_SS3,
-/* 0x90 0x91 0x92 0x93 */
-CASE_DCS,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 0x94 0x95 0x96 0x97 */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_SPA,
-CASE_EPA,
-/* 0x98 0x99 0x9a 0x9b */
-CASE_SOS,
-CASE_GROUND_STATE,
-CASE_DECID,
-CASE_CSI_STATE,
-/* 0x9c 0x9d 0x9e 0x9f */
-CASE_ST,
-CASE_OSC,
-CASE_PM,
-CASE_APC,
-/* nobreakspace exclamdown cent sterling */
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-/* currency yen brokenbar section */
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-/* diaeresis copyright ordfeminine guillemotleft */
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-/* notsign hyphen registered macron */
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-/* degree plusminus twosuperior threesuperior */
-CASE_GSETS,
-CASE_GSETS,
-CASE_GSETS,
-CASE_GROUND_STATE,
-/* acute mu paragraph periodcentered */
-CASE_GSETS,
-CASE_GSETS,
-CASE_GSETS,
-CASE_GSETS,
-/* cedilla onesuperior masculine guillemotright */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* onequarter onehalf threequarters questiondown */
-CASE_GROUND_STATE,
-CASE_GSETS,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Agrave Aacute Acircumflex Atilde */
-CASE_GROUND_STATE,
-CASE_GSETS,
-CASE_GSETS,
-CASE_GSETS,
-/* Adiaeresis Aring AE Ccedilla */
-CASE_GROUND_STATE,
-CASE_GSETS,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Egrave Eacute Ecircumflex Ediaeresis */
-CASE_GSETS,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GSETS,
-/* Igrave Iacute Icircumflex Idiaeresis */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Eth Ntilde Ograve Oacute */
-CASE_GROUND_STATE,
-CASE_GSETS,
-CASE_GSETS,
-CASE_GROUND_STATE,
-/* Ocircumflex Otilde Odiaeresis multiply */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Ooblique Ugrave Uacute Ucircumflex */
-CASE_GROUND_STATE,
-CASE_GSETS,
-CASE_GSETS,
-CASE_GROUND_STATE,
-/* Udiaeresis Yacute Thorn ssharp */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* agrave aacute acircumflex atilde */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* adiaeresis aring ae ccedilla */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* egrave eacute ecircumflex ediaeresis */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* igrave iacute icircumflex idiaeresis */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* eth ntilde ograve oacute */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* ocircumflex otilde odiaeresis division */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* oslash ugrave uacute ucircumflex */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* udiaeresis yacute thorn ydiaeresis */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_IGNORE,
-};
-
-/*
- * This table is treated specially. The CASE_IGNORE entries correspond to the
- * characters that can be accumulated for the string function (e.g., OSC).
- */
-Const PARSE_T sos_table[] = /* OSC, DCS, etc. */
-{
-/* NUL SOH STX ETX */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* EOT ENQ ACK BEL */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_BELL,
-/* BS HT NL VT */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* NP CR SO SI */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* DLE DC1 DC2 DC3 */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* DC4 NAK SYN ETB */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* CAN EM SUB ESC */
-CASE_GROUND_STATE,
-CASE_IGNORE,
-CASE_GROUND_STATE,
-CASE_ESC,
-/* FS GS RS US */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* SP ! " # */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* $ % & ' */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* ( ) * + */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* , - . / */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0 1 2 3 */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 4 5 6 7 */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 8 9 : ; */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* < = > ? */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* @ A B C */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* D E F G */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* H I J K */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* L M N O */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* P Q R S */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* T U V W */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* X Y Z [ */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* \ ] ^ _ */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* ` a b c */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* d e f g */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* h i j k */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* l m n o */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* p q r s */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* t u v w */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* x y z { */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* | } ~ DEL */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0x80 0x81 0x82 0x83 */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 0x84 0x85 0x86 0x87 */
-CASE_IND,
-CASE_NEL,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 0x88 0x89 0x8a 0x8b */
-CASE_HTS,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 0x8c 0x8d 0x8e 0x8f */
-CASE_GROUND_STATE,
-CASE_RI,
-CASE_SS2,
-CASE_SS3,
-/* 0x90 0x91 0x92 0x93 */
-CASE_DCS,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 0x94 0x95 0x96 0x97 */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_SPA,
-CASE_EPA,
-/* 0x98 0x99 0x9a 0x9b */
-CASE_SOS,
-CASE_GROUND_STATE,
-CASE_DECID,
-CASE_CSI_STATE,
-/* 0x9c 0x9d 0x9e 0x9f */
-CASE_ST,
-CASE_OSC,
-CASE_PM,
-CASE_APC,
-/* nobreakspace exclamdown cent sterling */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* currency yen brokenbar section */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* diaeresis copyright ordfeminine guillemotleft */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* notsign hyphen registered macron */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* degree plusminus twosuperior threesuperior */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* acute mu paragraph periodcentered */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* cedilla onesuperior masculine guillemotright */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* onequarter onehalf threequarters questiondown */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* Agrave Aacute Acircumflex Atilde */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* Adiaeresis Aring AE Ccedilla */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* Egrave Eacute Ecircumflex Ediaeresis */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* Igrave Iacute Icircumflex Idiaeresis */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* Eth Ntilde Ograve Oacute */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* Ocircumflex Otilde Odiaeresis multiply */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* Ooblique Ugrave Uacute Ucircumflex */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* Udiaeresis Yacute Thorn ssharp */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* agrave aacute acircumflex atilde */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* adiaeresis aring ae ccedilla */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* egrave eacute ecircumflex ediaeresis */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* igrave iacute icircumflex idiaeresis */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* eth ntilde ograve oacute */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* ocircumflex otilde odiaeresis division */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* oslash ugrave uacute ucircumflex */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* udiaeresis yacute thorn ydiaeresis */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-};
-
-#if OPT_WIDE_CHARS
-Const PARSE_T esc_pct_table[] = /* ESC % */
-{
-/* NUL SOH STX ETX */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* EOT ENQ ACK BEL */
-CASE_IGNORE,
-CASE_ENQ,
-CASE_IGNORE,
-CASE_BELL,
-/* BS HT NL VT */
-CASE_BS,
-CASE_TAB,
-CASE_VMOT,
-CASE_VMOT,
-/* NP CR SO SI */
-CASE_VMOT,
-CASE_CR,
-CASE_SO,
-CASE_SI,
-/* DLE DC1 DC2 DC3 */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* DC4 NAK SYN ETB */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* CAN EM SUB ESC */
-CASE_GROUND_STATE,
-CASE_IGNORE,
-CASE_GROUND_STATE,
-CASE_ESC,
-/* FS GS RS US */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* SP ! " # */
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-/* $ % & ' */
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-/* ( ) * + */
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-/* , - . / */
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-/* 0 1 2 3 */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 4 5 6 7 */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 8 9 : ; */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* < = > ? */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* @ A B C */
-CASE_UTF8,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* D E F G */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_UTF8,
-/* H I J K */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* L M N O */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* P Q R S */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* T U V W */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* X Y Z [ */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* \ ] ^ _ */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* ` a b c */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* d e f g */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* h i j k */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* l m n o */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* p q r s */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* t u v w */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* x y z { */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* | } ~ DEL */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_IGNORE,
-/* 0x80 0x81 0x82 0x83 */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 0x84 0x85 0x86 0x87 */
-CASE_IND,
-CASE_NEL,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 0x88 0x89 0x8a 0x8b */
-CASE_HTS,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 0x8c 0x8d 0x8e 0x8f */
-CASE_GROUND_STATE,
-CASE_RI,
-CASE_SS2,
-CASE_SS3,
-/* 0x90 0x91 0x92 0x93 */
-CASE_DCS,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 0x94 0x95 0x96 0x97 */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_SPA,
-CASE_EPA,
-/* 0x98 0x99 0x9a 0x9b */
-CASE_SOS,
-CASE_GROUND_STATE,
-CASE_DECID,
-CASE_CSI_STATE,
-/* 0x9c 0x9d 0x9e 0x9f */
-CASE_ST,
-CASE_OSC,
-CASE_PM,
-CASE_APC,
-/* nobreakspace exclamdown cent sterling */
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-/* currency yen brokenbar section */
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-/* diaeresis copyright ordfeminine guillemotleft */
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-/* notsign hyphen registered macron */
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
-/* degree plusminus twosuperior threesuperior */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* acute mu paragraph periodcentered */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* cedilla onesuperior masculine guillemotright */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* onequarter onehalf threequarters questiondown */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Agrave Aacute Acircumflex Atilde */
-CASE_UTF8,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Adiaeresis Aring AE Ccedilla */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_UTF8,
-/* Egrave Eacute Ecircumflex Ediaeresis */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Igrave Iacute Icircumflex Idiaeresis */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Eth Ntilde Ograve Oacute */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Ocircumflex Otilde Odiaeresis multiply */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Ooblique Ugrave Uacute Ucircumflex */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* Udiaeresis Yacute Thorn ssharp */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* agrave aacute acircumflex atilde */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* adiaeresis aring ae ccedilla */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* egrave eacute ecircumflex ediaeresis */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* igrave iacute icircumflex idiaeresis */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* eth ntilde ograve oacute */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* ocircumflex otilde odiaeresis division */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* oslash ugrave uacute ucircumflex */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* udiaeresis yacute thorn ydiaeresis */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_IGNORE,
-};
-#endif /* OPT_WIDE_CHARS */
-
-#if OPT_VT52_MODE
-Const PARSE_T vt52_table[] =
-{
-/* NUL SOH STX ETX */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* EOT ENQ ACK BEL */
-CASE_IGNORE,
-CASE_ENQ,
-CASE_IGNORE,
-CASE_BELL,
-/* BS HT NL VT */
-CASE_BS,
-CASE_TAB,
-CASE_VMOT,
-CASE_VMOT,
-/* NP CR SO SI */
-CASE_VMOT,
-CASE_CR,
-CASE_IGNORE,
-CASE_IGNORE,
-/* DLE DC1 DC2 DC3 */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* DC4 NAK SYN ETB */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* CAN EM SUB ESC */
-CASE_GROUND_STATE,
-CASE_IGNORE,
-CASE_GROUND_STATE,
-CASE_ESC,
-/* FS GS RS US */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* SP ! " # */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* $ % & ' */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* ( ) * + */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* , - . / */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* 0 1 2 3 */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* 4 5 6 7 */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* 8 9 : ; */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* < = > ? */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* @ A B C */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* D E F G */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* H I J K */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* L M N O */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* P Q R S */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* T U V W */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* X Y Z [ */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* \ ] ^ _ */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* ` a b c */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* d e f g */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* h i j k */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* l m n o */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* p q r s */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* t u v w */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* x y z { */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-/* | } ~ DEL */
-CASE_PRINT,
-CASE_PRINT,
-CASE_PRINT,
-CASE_IGNORE,
-/* 0x80 0x81 0x82 0x83 */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0x84 0x85 0x86 0x87 */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0x88 0x89 0x8a 0x8b */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0x8c 0x8d 0x8e 0x8f */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0x90 0x91 0x92 0x93 */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0x94 0x95 0x96 0x97 */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0x98 0x99 0x9a 0x9b */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0x9c 0x9d 0x9e 0x9f */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* nobreakspace exclamdown cent sterling */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* currency yen brokenbar section */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* diaeresis copyright ordfeminine guillemotleft */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* notsign hyphen registered macron */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* degree plusminus twosuperior threesuperior */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* acute mu paragraph periodcentered */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* cedilla onesuperior masculine guillemotright */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* onequarter onehalf threequarters questiondown */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* Agrave Aacute Acircumflex Atilde */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* Adiaeresis Aring AE Ccedilla */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* Egrave Eacute Ecircumflex Ediaeresis */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* Igrave Iacute Icircumflex Idiaeresis */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* Eth Ntilde Ograve Oacute */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* Ocircumflex Otilde Odiaeresis multiply */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* Ooblique Ugrave Uacute Ucircumflex */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* Udiaeresis Yacute Thorn ssharp */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* agrave aacute acircumflex atilde */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* adiaeresis aring ae ccedilla */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* egrave eacute ecircumflex ediaeresis */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* igrave iacute icircumflex idiaeresis */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* eth ntilde ograve oacute */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* ocircumflex otilde odiaeresis division */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* oslash ugrave uacute ucircumflex */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* udiaeresis yacute thorn ydiaeresis */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-};
-
-Const PARSE_T vt52_esc_table[] =
-{
-/* NUL SOH STX ETX */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* EOT ENQ ACK BEL */
-CASE_IGNORE,
-CASE_ENQ,
-CASE_IGNORE,
-CASE_BELL,
-/* BS HT NL VT */
-CASE_BS,
-CASE_TAB,
-CASE_VMOT,
-CASE_VMOT,
-/* NP CR SO SI */
-CASE_VMOT,
-CASE_CR,
-CASE_IGNORE,
-CASE_IGNORE,
-/* DLE DC1 DC2 DC3 */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* DC4 NAK SYN ETB */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* CAN EM SUB ESC */
-CASE_GROUND_STATE,
-CASE_IGNORE,
-CASE_GROUND_STATE,
-CASE_ESC,
-/* FS GS RS US */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* SP ! " # */
-CASE_VT52_IGNORE,
-CASE_VT52_IGNORE,
-CASE_VT52_IGNORE,
-CASE_VT52_IGNORE,
-/* $ % & ' */
-CASE_VT52_IGNORE,
-CASE_VT52_IGNORE,
-CASE_VT52_IGNORE,
-CASE_VT52_IGNORE,
-/* ( ) * + */
-CASE_VT52_IGNORE,
-CASE_VT52_IGNORE,
-CASE_VT52_IGNORE,
-CASE_VT52_IGNORE,
-/* , - . / */
-CASE_VT52_IGNORE,
-CASE_VT52_IGNORE,
-CASE_VT52_IGNORE,
-CASE_VT52_IGNORE,
-/* 0 1 2 3 */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 4 5 6 7 */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 8 9 : ; */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* < = > ? */
-CASE_VT52_FINISH,
-CASE_DECKPAM,
-CASE_DECKPNM,
-CASE_GROUND_STATE,
-/* @ A B C */
-CASE_GROUND_STATE,
-CASE_CUU,
-CASE_CUD,
-CASE_CUF,
-/* D E F G */
-CASE_CUB,
-CASE_GROUND_STATE,
-CASE_SO,
-CASE_SI,
-/* H I J K */
-CASE_CUP,
-CASE_RI,
-CASE_ED,
-CASE_EL,
-/* L M N O */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* P Q R S */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* T U V W */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* X Y Z [ */
-CASE_GROUND_STATE,
-CASE_VT52_CUP,
-CASE_DECID,
-CASE_GROUND_STATE,
-/* \ ] ^ _ */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* ` a b c */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* d e f g */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* h i j k */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* l m n o */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* p q r s */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* t u v w */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* x y z { */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* | } ~ DEL */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_IGNORE,
-/* 0x80 0x81 0x82 0x83 */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0x84 0x85 0x86 0x87 */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0x88 0x89 0x8a 0x8b */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0x8c 0x8d 0x8e 0x8f */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0x90 0x91 0x92 0x93 */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0x94 0x95 0x96 0x97 */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0x98 0x99 0x9a 0x9b */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0x9c 0x9d 0x9e 0x9f */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* nobreakspace exclamdown cent sterling */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* currency yen brokenbar section */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* diaeresis copyright ordfeminine guillemotleft */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* notsign hyphen registered macron */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* degree plusminus twosuperior threesuperior */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* acute mu paragraph periodcentered */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* cedilla onesuperior masculine guillemotright */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* onequarter onehalf threequarters questiondown */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* Agrave Aacute Acircumflex Atilde */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* Adiaeresis Aring AE Ccedilla */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* Egrave Eacute Ecircumflex Ediaeresis */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* Igrave Iacute Icircumflex Idiaeresis */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* Eth Ntilde Ograve Oacute */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* Ocircumflex Otilde Odiaeresis multiply */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* Ooblique Ugrave Uacute Ucircumflex */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* Udiaeresis Yacute Thorn ssharp */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* agrave aacute acircumflex atilde */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* adiaeresis aring ae ccedilla */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* egrave eacute ecircumflex ediaeresis */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* igrave iacute icircumflex idiaeresis */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* eth ntilde ograve oacute */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* ocircumflex otilde odiaeresis division */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* oslash ugrave uacute ucircumflex */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* udiaeresis yacute thorn ydiaeresis */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-};
-
-Const PARSE_T vt52_ignore_table[] =
-{
-/* NUL SOH STX ETX */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* EOT ENQ ACK BEL */
-CASE_IGNORE,
-CASE_ENQ,
-CASE_IGNORE,
-CASE_BELL,
-/* BS HT NL VT */
-CASE_BS,
-CASE_TAB,
-CASE_VMOT,
-CASE_VMOT,
-/* NP CR SO SI */
-CASE_VMOT,
-CASE_CR,
-CASE_IGNORE,
-CASE_IGNORE,
-/* DLE DC1 DC2 DC3 */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* DC4 NAK SYN ETB */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* CAN EM SUB ESC */
-CASE_GROUND_STATE,
-CASE_IGNORE,
-CASE_GROUND_STATE,
-CASE_ESC,
-/* FS GS RS US */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* SP ! " # */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* $ % & ' */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* ( ) * + */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* , - . / */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0 1 2 3 */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 4 5 6 7 */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* 8 9 : ; */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* < = > ? */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* @ A B C */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* D E F G */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* H I J K */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* L M N O */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* P Q R S */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* T U V W */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* X Y Z [ */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* \ ] ^ _ */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* ` a b c */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* d e f g */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* h i j k */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* l m n o */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* p q r s */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* t u v w */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* x y z { */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-/* | } ~ DEL */
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
-CASE_IGNORE,
-/* 0x80 0x81 0x82 0x83 */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0x84 0x85 0x86 0x87 */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0x88 0x89 0x8a 0x8b */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0x8c 0x8d 0x8e 0x8f */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0x90 0x91 0x92 0x93 */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0x94 0x95 0x96 0x97 */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0x98 0x99 0x9a 0x9b */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* 0x9c 0x9d 0x9e 0x9f */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* nobreakspace exclamdown cent sterling */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* currency yen brokenbar section */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* diaeresis copyright ordfeminine guillemotleft */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* notsign hyphen registered macron */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* degree plusminus twosuperior threesuperior */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* acute mu paragraph periodcentered */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* cedilla onesuperior masculine guillemotright */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* onequarter onehalf threequarters questiondown */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* Agrave Aacute Acircumflex Atilde */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* Adiaeresis Aring AE Ccedilla */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* Egrave Eacute Ecircumflex Ediaeresis */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* Igrave Iacute Icircumflex Idiaeresis */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* Eth Ntilde Ograve Oacute */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* Ocircumflex Otilde Odiaeresis multiply */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* Ooblique Ugrave Uacute Ucircumflex */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* Udiaeresis Yacute Thorn ssharp */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* agrave aacute acircumflex atilde */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* adiaeresis aring ae ccedilla */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* egrave eacute ecircumflex ediaeresis */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* igrave iacute icircumflex idiaeresis */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* eth ntilde ograve oacute */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* ocircumflex otilde odiaeresis division */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* oslash ugrave uacute ucircumflex */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-/* udiaeresis yacute thorn ydiaeresis */
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-CASE_IGNORE,
-};
-#endif /* OPT_VT52_MODE */
diff --git a/nx-X11/programs/xterm/VTparse.def b/nx-X11/programs/xterm/VTparse.def
deleted file mode 100644
index 56c65ee4a..000000000
--- a/nx-X11/programs/xterm/VTparse.def
+++ /dev/null
@@ -1,142 +0,0 @@
-# $XTermId: VTparse.def,v 1.25 2005/07/07 00:46:13 tom Exp $
-#
-# $Xorg: VTparse.def,v 1.3 2000/08/17 19:55:08 cpqbld Exp $
-#
-# List of symbols that need to be defined for VTparse.h. If you need to
-# change any of the CASE_ macros, make the change here and rerun the command
-# shown in VTparse.h.
-#
-# $XFree86: xc/programs/xterm/VTparse.def,v 3.16 2005/07/07 00:46:13 dickey Exp $
-#
-
-CASE_GROUND_STATE
-CASE_IGNORE
-CASE_BELL
-CASE_BS
-CASE_CR
-CASE_ESC
-CASE_VMOT
-CASE_TAB
-CASE_SI
-CASE_SO
-CASE_SCR_STATE
-CASE_SCS0_STATE
-CASE_SCS1_STATE
-CASE_SCS2_STATE
-CASE_SCS3_STATE
-CASE_ESC_IGNORE
-CASE_ESC_DIGIT
-CASE_ESC_SEMI
-CASE_DEC_STATE
-CASE_ICH
-CASE_CUU
-CASE_CUD
-CASE_CUF
-CASE_CUB
-CASE_CUP
-CASE_ED
-CASE_EL
-CASE_IL
-CASE_DL
-CASE_DCH
-CASE_DA1
-CASE_TRACK_MOUSE
-CASE_TBC
-CASE_SET
-CASE_RST
-CASE_SGR
-CASE_CPR
-CASE_DECSTBM
-CASE_DECREQTPARM
-CASE_DECSET
-CASE_DECRST
-CASE_DECALN
-CASE_GSETS
-CASE_DECSC
-CASE_DECRC
-CASE_DECKPAM
-CASE_DECKPNM
-CASE_IND
-CASE_NEL
-CASE_HTS
-CASE_RI
-CASE_SS2
-CASE_SS3
-CASE_CSI_STATE
-CASE_OSC
-CASE_RIS
-CASE_LS2
-CASE_LS3
-CASE_LS3R
-CASE_LS2R
-CASE_LS1R
-CASE_PRINT
-CASE_XTERM_SAVE
-CASE_XTERM_RESTORE
-CASE_XTERM_TITLE
-CASE_DECID
-CASE_HP_MEM_LOCK
-CASE_HP_MEM_UNLOCK
-CASE_HP_BUGGY_LL
-CASE_HPA
-CASE_VPA
-CASE_XTERM_WINOPS
-CASE_ECH
-CASE_CHT
-CASE_CPL
-CASE_CNL
-CASE_CBT
-CASE_SU
-CASE_SD
-CASE_S7C1T
-CASE_S8C1T
-CASE_ESC_SP_STATE
-CASE_ENQ
-CASE_DECSCL
-CASE_DECSCA
-CASE_DECSED
-CASE_DECSEL
-CASE_DCS
-CASE_PM
-CASE_SOS
-CASE_ST
-CASE_APC
-CASE_EPA
-CASE_SPA
-CASE_CSI_QUOTE_STATE
-CASE_DSR
-CASE_ANSI_LEVEL_1
-CASE_ANSI_LEVEL_2
-CASE_ANSI_LEVEL_3
-CASE_MC
-CASE_DEC2_STATE
-CASE_DA2
-CASE_DEC3_STATE
-CASE_DECRPTUI
-CASE_VT52_CUP
-CASE_REP
-CASE_CSI_EX_STATE
-CASE_DECSTR
-CASE_DECDHL
-CASE_DECSWL
-CASE_DECDWL
-CASE_DEC_MC
-CASE_ESC_PERCENT
-CASE_UTF8
-CASE_CSI_TICK_STATE
-CASE_DECELR
-CASE_DECRQLP
-CASE_DECEFR
-CASE_DECSLE
-CASE_CSI_IGNORE
-CASE_VT52_IGNORE
-CASE_VT52_FINISH
-CASE_CSI_DOLLAR_STATE
-CASE_DECCRA
-CASE_DECERA
-CASE_DECFRA
-CASE_DECSERA
-CASE_DECSACE
-CASE_DECCARA
-CASE_DECRARA
-CASE_CSI_STAR_STATE
diff --git a/nx-X11/programs/xterm/VTparse.h b/nx-X11/programs/xterm/VTparse.h
deleted file mode 100644
index 8143e2a44..000000000
--- a/nx-X11/programs/xterm/VTparse.h
+++ /dev/null
@@ -1,248 +0,0 @@
-/* $XTermId: VTparse.h,v 1.38 2005/11/13 23:10:35 tom Exp $ */
-
-/*
- * $Xorg: VTparse.h,v 1.3 2000/08/17 19:55:08 cpqbld Exp $
- */
-
-/* $XFree86: xc/programs/xterm/VTparse.h,v 3.22 2005/11/13 23:10:35 dickey Exp $ */
-/*
- * Copyright 2002-2004,2005 by Thomas E. Dickey
- *
- * All Rights Reserved
- *
- * Permission to use, copy, modify, and distribute this software and its
- * documentation for any purpose and without fee is hereby granted,
- * provided that the above copyright notice appear in all copies and that
- * both that copyright notice and this permission notice appear in
- * supporting documentation, and that the name of the above listed
- * copyright holder(s) not be used in advertising or publicity pertaining
- * to distribution of the software without specific, written prior
- * permission.
- *
- * THE ABOVE LISTED COPYRIGHT HOLDER(S) DISCLAIM ALL WARRANTIES WITH REGARD
- * TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
- * AND FITNESS, IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE
- * LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
- *
- * All Rights Reserved
- *
- * Permission to use, copy, modify, and distribute this software and its
- * documentation for any purpose and without fee is hereby granted,
- * provided that the above copyright notice appear in all copies and that
- * both that copyright notice and this permission notice appear in
- * supporting documentation, and that the name of Digital Equipment
- * Corporation not be used in advertising or publicity pertaining to
- * distribution of the software without specific, written prior permission.
- *
- *
- * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
- * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
- * DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
- * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
- * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
- * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- * SOFTWARE.
- */
-
-#ifndef included_VTparse_h
-#define included_VTparse_h 1
-
-#include <xterm.h>
-
-#ifndef Const
-# if defined(__STDC__) && !defined(__cplusplus)
-# define Const const
-# else
-# define Const /**/
-# endif
-#endif
-
-/*
- * PARSE_T has to be large enough to handle the number of cases enumerated here.
- */
-typedef unsigned char PARSE_T;
-
-extern Const PARSE_T ansi_table[];
-extern Const PARSE_T cigtable[];
-extern Const PARSE_T csi2_table[];
-extern Const PARSE_T csi_ex_table[];
-extern Const PARSE_T csi_quo_table[];
-extern Const PARSE_T csi_table[];
-extern Const PARSE_T dec2_table[];
-extern Const PARSE_T dec3_table[];
-extern Const PARSE_T dec_table[];
-extern Const PARSE_T eigtable[];
-extern Const PARSE_T esc_sp_table[];
-extern Const PARSE_T esc_table[];
-extern Const PARSE_T scrtable[];
-extern Const PARSE_T scstable[];
-extern Const PARSE_T sos_table[];
-
-#if OPT_DEC_LOCATOR
-extern Const PARSE_T csi_tick_table[];
-#endif /* OPT_DEC_LOCATOR */
-
-#if OPT_DEC_RECTOPS
-extern Const PARSE_T csi_dollar_table[];
-extern Const PARSE_T csi_star_table[];
-#endif /* OPT_DEC_LOCATOR */
-
-#if OPT_VT52_MODE
-extern Const PARSE_T vt52_table[];
-extern Const PARSE_T vt52_esc_table[];
-extern Const PARSE_T vt52_ignore_table[];
-#endif
-
-#if OPT_WIDE_CHARS
-extern Const PARSE_T esc_pct_table[];
-#endif
-
-/*
- * The following list of definitions is generated from VTparse.def using the
- * following command line:
- *
- * grep '^CASE_' VTparse.def | awk '{printf "#define %s %d\n", $1, n++}'
- *
- * If you need to change something, change VTparse.def and regenerate the
- * definitions. This would have been automatic, but since this doesn't change
- * very often, it isn't worth the makefile hassle.
- */
-
-#define CASE_GROUND_STATE 0
-#define CASE_IGNORE 1
-#define CASE_BELL 2
-#define CASE_BS 3
-#define CASE_CR 4
-#define CASE_ESC 5
-#define CASE_VMOT 6
-#define CASE_TAB 7
-#define CASE_SI 8
-#define CASE_SO 9
-#define CASE_SCR_STATE 10
-#define CASE_SCS0_STATE 11
-#define CASE_SCS1_STATE 12
-#define CASE_SCS2_STATE 13
-#define CASE_SCS3_STATE 14
-#define CASE_ESC_IGNORE 15
-#define CASE_ESC_DIGIT 16
-#define CASE_ESC_SEMI 17
-#define CASE_DEC_STATE 18
-#define CASE_ICH 19
-#define CASE_CUU 20
-#define CASE_CUD 21
-#define CASE_CUF 22
-#define CASE_CUB 23
-#define CASE_CUP 24
-#define CASE_ED 25
-#define CASE_EL 26
-#define CASE_IL 27
-#define CASE_DL 28
-#define CASE_DCH 29
-#define CASE_DA1 30
-#define CASE_TRACK_MOUSE 31
-#define CASE_TBC 32
-#define CASE_SET 33
-#define CASE_RST 34
-#define CASE_SGR 35
-#define CASE_CPR 36
-#define CASE_DECSTBM 37
-#define CASE_DECREQTPARM 38
-#define CASE_DECSET 39
-#define CASE_DECRST 40
-#define CASE_DECALN 41
-#define CASE_GSETS 42
-#define CASE_DECSC 43
-#define CASE_DECRC 44
-#define CASE_DECKPAM 45
-#define CASE_DECKPNM 46
-#define CASE_IND 47
-#define CASE_NEL 48
-#define CASE_HTS 49
-#define CASE_RI 50
-#define CASE_SS2 51
-#define CASE_SS3 52
-#define CASE_CSI_STATE 53
-#define CASE_OSC 54
-#define CASE_RIS 55
-#define CASE_LS2 56
-#define CASE_LS3 57
-#define CASE_LS3R 58
-#define CASE_LS2R 59
-#define CASE_LS1R 60
-#define CASE_PRINT 61
-#define CASE_XTERM_SAVE 62
-#define CASE_XTERM_RESTORE 63
-#define CASE_XTERM_TITLE 64
-#define CASE_DECID 65
-#define CASE_HP_MEM_LOCK 66
-#define CASE_HP_MEM_UNLOCK 67
-#define CASE_HP_BUGGY_LL 68
-#define CASE_HPA 69
-#define CASE_VPA 70
-#define CASE_XTERM_WINOPS 71
-#define CASE_ECH 72
-#define CASE_CHT 73
-#define CASE_CPL 74
-#define CASE_CNL 75
-#define CASE_CBT 76
-#define CASE_SU 77
-#define CASE_SD 78
-#define CASE_S7C1T 79
-#define CASE_S8C1T 80
-#define CASE_ESC_SP_STATE 81
-#define CASE_ENQ 82
-#define CASE_DECSCL 83
-#define CASE_DECSCA 84
-#define CASE_DECSED 85
-#define CASE_DECSEL 86
-#define CASE_DCS 87
-#define CASE_PM 88
-#define CASE_SOS 89
-#define CASE_ST 90
-#define CASE_APC 91
-#define CASE_EPA 92
-#define CASE_SPA 93
-#define CASE_CSI_QUOTE_STATE 94
-#define CASE_DSR 95
-#define CASE_ANSI_LEVEL_1 96
-#define CASE_ANSI_LEVEL_2 97
-#define CASE_ANSI_LEVEL_3 98
-#define CASE_MC 99
-#define CASE_DEC2_STATE 100
-#define CASE_DA2 101
-#define CASE_DEC3_STATE 102
-#define CASE_DECRPTUI 103
-#define CASE_VT52_CUP 104
-#define CASE_REP 105
-#define CASE_CSI_EX_STATE 106
-#define CASE_DECSTR 107
-#define CASE_DECDHL 108
-#define CASE_DECSWL 109
-#define CASE_DECDWL 110
-#define CASE_DEC_MC 111
-#define CASE_ESC_PERCENT 112
-#define CASE_UTF8 113
-#define CASE_CSI_TICK_STATE 114
-#define CASE_DECELR 115
-#define CASE_DECRQLP 116
-#define CASE_DECEFR 117
-#define CASE_DECSLE 118
-#define CASE_CSI_IGNORE 119
-#define CASE_VT52_IGNORE 120
-#define CASE_VT52_FINISH 121
-#define CASE_CSI_DOLLAR_STATE 122
-#define CASE_DECCRA 123
-#define CASE_DECERA 124
-#define CASE_DECFRA 125
-#define CASE_DECSERA 126
-#define CASE_DECSACE 127
-#define CASE_DECCARA 128
-#define CASE_DECRARA 129
-#define CASE_CSI_STAR_STATE 130
-
-#endif /* included_VTparse_h */
diff --git a/nx-X11/programs/xterm/XTerm-col.ad b/nx-X11/programs/xterm/XTerm-col.ad
deleted file mode 100644
index d8148ca82..000000000
--- a/nx-X11/programs/xterm/XTerm-col.ad
+++ /dev/null
@@ -1,130 +0,0 @@
-! $XTermId: XTerm-col.ad,v 1.19 2005/09/18 23:48:12 tom Exp $
-! $XFree86: xc/programs/xterm/XTerm-col.ad,v 3.7 2005/09/18 23:48:12 dickey Exp $
-
-#include "XTerm"
-
-*VT100*colorMode: on
-*VT100*boldColors: on
-*VT100*dynamicColors: on
-
-! Uncomment this for "white" text on a dark background.
-!*VT100*foreground: gray90
-!*VT100*background: black
-
-! - OR -
-! Uncomment this for black text on a "white" background.
-!*VT100*foreground: black
-!*VT100*background: gray90
-
-! - OR -
-! leave the foreground/background colors alone (at the mercy of your desktop
-! designer).
-
-! Color the popup/pulldown menu border to match the text widget's foreground.
-!*SimpleMenu*borderColor: gray15
-
-! Uncomment this to use color for underline attribute
-!*VT100*colorULMode: on
-*VT100*colorUL: yellow
-
-!*VT100*italicULMode: on
-
-! Uncomment this to disable underlining, e.g., if colorULMode is set.
-!*VT100*underLine: off
-
-! Uncomment this to use color for the bold attribute
-!*VT100*colorBDMode: on
-*VT100*colorBD: white
-
-! Uncomment this to use the bold/underline colors in preference to other colors
-!*VT100*colorAttrMode: on
-
-! These are the 8 ANSI colors and their bright equivalents. Depending on
-! other resource settings, xterm may use the bright colors when displaying
-! bold text (see the boldColors resource).
-*VT100*color0: black
-*VT100*color1: red3
-*VT100*color2: green3
-*VT100*color3: yellow3
-*VT100*color4: blue2
-*VT100*color5: magenta3
-*VT100*color6: cyan3
-*VT100*color7: gray90
-*VT100*color8: gray50
-*VT100*color9: red
-*VT100*color10: green
-*VT100*color11: yellow
-*VT100*color12: rgb:5c/5c/ff
-*VT100*color13: magenta
-*VT100*color14: cyan
-*VT100*color15: white
-
-! Disclaimer: there are no standard colors used in terminal emulation.
-!
-! The choice for color4 and color12 is a tradeoff between contrast, depending
-! on whether they are used for text or backgrounds. Note that either color4 or
-! color12 would be used for text, while only color4 would be used for a
-! background. These are treated specially, since the luminosity of blue is
-! only about half that of red/green, and is typically not accounted for in the
-! RGB scheme.
-!
-! Blue text on a black background should be readable.
-! Blue backgrounds should not be "too" bright.
-!
-! Originally color4/color12 were set to the names blue3/blue
-!*VT100*color4: blue3
-!*VT100*color12: blue
-!
-! They are from rgb.txt respectively:
-! 0 0 205 blue3
-! 0 0 255 blue
-! However, blue3 is not readable on a black background.
-!
-! Another choice was from the Debian settings:
-!*VT100*color4: DodgerBlue1
-!*VT100*color12: SteelBlue1
-!
-! From rgb.txt:
-! 30 144 255 DodgerBlue1
-! 99 184 255 SteelBlue1
-!
-! Some users object to this choice because the background (color4) is brighter
-! than they are accustomed. Others point out that the different weights for
-! the red/green components make it appear to be not really blue. Finally, it
-! provides poor contrast against color13 and color14.
-!
-! The current choice uses equal weights for red/green (effectively adding a
-! gray to the result). It is brighter than the original choice, and provides
-! more contrast between color12 and color13, color14 than SteelBlue1 did.
-! Contrast of color4 against black is slightly improved over the original.
-!
-! Some refinement is certainly possible (you are welcome to try) -TD
-
-
-#if PLANES > 8
-! Color the popup menus and the menubar to match:
-*SimpleMenu.*.background: AntiqueWhite
-*SimpleMenu.*.foreground: gray15
-
-! Color the menubar to match:
-*.Form.menubar.*.background: AntiqueWhite
-*.Form.menubar.*.foreground: gray15
-*.Form.background: AntiqueWhite
-
-! The following two sections take advantage of new features in version 7
-! of the Athena widget library. Comment them out if you have a shallow
-! color depth.
-!*SimpleMenu*backgroundPixmap: gradient:vertical?dimension=350&start=gray90&end=gray60
-!*SimpleMenu*foreground: gray15
-
-!*VT100.scrollbar.thumb: vlines2
-!*VT100.scrollbar.width: 14
-!*VT100.scrollbar.background: gray60
-!*VT100.scrollbar.foreground: rgb:a/5/5
-!*VT100.scrollbar.borderWidth: 0
-!*VT100.scrollbar.displayList:\
-!foreground gray90;\
-!lines 1,-1,-1,-1,-1,1;\
-!foreground gray60;\
-!lines -1,0,0,0,0,-1
-#endif
diff --git a/nx-X11/programs/xterm/XTerm.ad b/nx-X11/programs/xterm/XTerm.ad
deleted file mode 100644
index bb492fc9a..000000000
--- a/nx-X11/programs/xterm/XTerm.ad
+++ /dev/null
@@ -1,185 +0,0 @@
-! $Xorg: XTerm.ad,v 1.3 2000/08/17 19:55:08 cpqbld Exp $
-!
-!
-!
-!
-! $XTermId: XTerm.ad,v 1.69 2005/11/03 13:17:27 tom Exp $
-! $XFree86: xc/programs/xterm/XTerm.ad,v 3.32 2005/11/03 13:17:27 dickey Exp $
-
-*saveLines: 1024
-
-*SimpleMenu*BackingStore: NotUseful
-*SimpleMenu*menuLabel.font: -adobe-helvetica-bold-r-normal--*-120-*-*-*-*-iso8859-*
-*SimpleMenu*menuLabel.vertSpace: 100
-*SimpleMenu*HorizontalMargins: 16
-*SimpleMenu*Sme.height: 16
-
-*SimpleMenu*Cursor: left_ptr
-
-*mainMenu.Label: Main Options
-*mainMenu*toolbar*Label: Toolbar
-*mainMenu*securekbd*Label: Secure Keyboard
-*mainMenu*allowsends*Label: Allow SendEvents
-*mainMenu*redraw*Label: Redraw Window
-*mainMenu*logging*Label: Log to File
-*mainMenu*print*Label: Print Window
-*mainMenu*print-redir*Label: Redirect to Printer
-*mainMenu*8-bit control*Label: 8-Bit Controls
-*mainMenu*backarrow key*Label: Backarrow Key (BS/DEL)
-*mainMenu*num-lock*Label: Alt/NumLock Modifiers
-*mainMenu*alt-esc*Label: Alt Sends Escape
-*mainMenu*meta-esc*Label: Meta Sends Escape
-*mainMenu*delete-is-del*Label: Delete is DEL
-*mainMenu*oldFunctionKeys*Label: Old Function-Keys
-*mainMenu*sunFunctionKeys*Label: Sun Function-Keys
-*mainMenu*sunKeyboard*Label: VT220 Keyboard
-*mainMenu*hpFunctionKeys*Label: HP Function-Keys
-*mainMenu*scoFunctionKeys*Label: SCO Function-Keys
-*mainMenu*suspend*Label: Send STOP Signal
-*mainMenu*continue*Label: Send CONT Signal
-*mainMenu*interrupt*Label: Send INT Signal
-*mainMenu*hangup*Label: Send HUP Signal
-*mainMenu*terminate*Label: Send TERM Signal
-*mainMenu*kill*Label: Send KILL Signal
-*mainMenu*quit*Label: Quit
-
-*vtMenu.Label: VT Options
-*vtMenu*scrollbar*Label: Enable Scrollbar
-*vtMenu*jumpscroll*Label: Enable Jump Scroll
-*vtMenu*reversevideo*Label: Enable Reverse Video
-*vtMenu*autowrap*Label: Enable Auto Wraparound
-*vtMenu*reversewrap*Label: Enable Reverse Wraparound
-*vtMenu*autolinefeed*Label: Enable Auto Linefeed
-*vtMenu*appcursor*Label: Enable Application Cursor Keys
-*vtMenu*appkeypad*Label: Enable Application Keypad
-*vtMenu*scrollkey*Label: Scroll to Bottom on Key Press
-*vtMenu*scrollttyoutput*Label: Scroll to Bottom on Tty Output
-*vtMenu*allow132*Label: Allow 80/132 Column Switching
-*vtMenu*cursesemul*Label: Enable Curses Emulation
-*vtMenu*visualbell*Label: Enable Visual Bell
-*vtMenu*poponbell*Label: Enable Pop on Bell
-*vtMenu*marginbell*Label: Enable Margin Bell
-*vtMenu*cursorblink*Label: Enable Blinking Cursor
-*vtMenu*titeInhibit*Label: Enable Alternate Screen Switching
-*vtMenu*activeicon*Label: Enable Active Icon
-*vtMenu*softreset*Label: Do Soft Reset
-*vtMenu*hardreset*Label: Do Full Reset
-*vtMenu*clearsavedlines*Label: Reset and Clear Saved Lines
-*vtMenu*tekshow*Label: Show Tek Window
-*vtMenu*tekmode*Label: Switch to Tek Mode
-*vtMenu*vthide*Label: Hide VT Window
-*vtMenu*altscreen*Label: Show Alternate Screen
-
-*fontMenu.Label: VT Fonts
-*fontMenu*fontdefault*Label: Default
-*fontMenu*font1*Label: Unreadable
-*VT100.font1: nil2
-*IconFont: nil2
-*fontMenu*font2*Label: Tiny
-*VT100.font2: 5x7
-*fontMenu*font3*Label: Small
-*VT100.font3: 6x10
-*fontMenu*font4*Label: Medium
-*VT100.font4: 7x13
-*fontMenu*font5*Label: Large
-*VT100.font5: 9x15
-*fontMenu*font6*Label: Huge
-*VT100.font6: 10x20
-*fontMenu*fontescape*Label: Escape Sequence
-*fontMenu*fontsel*Label: Selection
-!fontescape and fontsel overridden by application
-*fontMenu*font-linedrawing*Label: Line-Drawing Characters
-*fontMenu*font-doublesize*Label: Doublesized Characters
-*fontMenu*font-loadable*Label: VT220 Soft Fonts
-*fontMenu*render-font*Label: TrueType Fonts
-*fontMenu*utf8-mode*Label: UTF-8
-
-*VT100.utf8Fonts.font2: -misc-fixed-medium-r-normal--8-80-75-75-c-50-iso10646-1
-*VT100.utf8Fonts.font: -misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso10646-1
-*VT100.utf8Fonts.font3: -misc-fixed-medium-r-normal--14-130-75-75-c-70-iso10646-1
-*VT100.utf8Fonts.font4: -misc-fixed-medium-r-normal--13-120-75-75-c-80-iso10646-1
-*VT100.utf8Fonts.font5: -misc-fixed-medium-r-normal--18-120-100-100-c-90-iso10646-1
-*VT100.utf8Fonts.font6: -misc-fixed-medium-r-normal--20-200-75-75-c-100-iso10646-1
-
-*tekMenu.Label: Tek Options
-*tekMenu*tektextlarge*Label: Large Characters
-*tekMenu*tektext2*Label: #2 Size Characters
-*tekMenu*tektext3*Label: #3 Size Characters
-*tekMenu*tektextsmall*Label: Small Characters
-*tekMenu*tekpage*Label: PAGE
-*tekMenu*tekreset*Label: RESET
-*tekMenu*tekcopy*Label: COPY
-*tekMenu*vtshow*Label: Show VT Window
-*tekMenu*vtmode*Label: Switch to VT Mode
-*tekMenu*tekhide*Label: Hide Tek Window
-
-*tek4014*fontLarge: 9x15
-*tek4014*font2: 8x13
-*tek4014*font3: 6x13
-*tek4014*fontSmall: 6x10
-
-! If xterm is built with a toolbar, the widget hierarchy looks like this,
-! showing widget name / class names. The complete menu hierarchy is built
-! at startup because it is needed to make the layout work for the menubar:
-!
-! xterm/XTerm
-! form/Form
-! menubar/Box
-! mainMenuButton/MenuButton
-! mainMenu/SimpleMenu
-! menuLabel/SmeBSB
-! toolbar/SmeBSB
-! ...
-! vtMenu/SimpleMenu
-! menuLabel/SmeBSB
-! scrollbar/SmeBSB
-! ...
-! fontMenu/SimpleMenu
-! menuLabel/SmeBSB
-! fontdefault/SmeBSB
-! ...
-! tekMenu/SimpleMenu
-! menuLabel/SmeBSB
-! fontdefault/SmeBSB
-! ...
-! vt100/VT100
-! tektronix/TopLevelShell
-! shellext/VendorShellExt
-! tek4014/Tek4014
-!
-! If built without a toolbar, the widget hierarchy is simpler, because there
-! is no form, and the popup menu widgets are created only when they are first
-! used.
-!
-! xterm/XTerm
-! shellext/VendorShellExt
-! mainMenu/SimpleMenu
-! menuLabel/SmeBSB
-! ...
-! ...
-! vt100/VT100
-! tektronix/TopLevelShell
-! shellext/VendorShellExt
-! tek4014/Tek4014
-!
-! A more complete list of the widget/class names can be obtained using editres
-! to dump a file. Some widget names are not available until the corresponding
-! menu has been created.
-
-! These resources reduce space around the menubar, by eliminating padding in
-! the enclosing form (Thickness) and the border of the Box which represents
-! the menubar widget.
-*form.Thickness: 0
-*menubar.borderWidth: 0
-
-! If we wanted to eliminate the border of the popup menus, we could do this
-! instead, since they are children of the menubar:
-!*menubar.*.borderWidth: 0
-
-! Eliminate the border of the buttons in the menubar, so the only line around
-! the text is for the highlighted button:
-*MenuButton*borderWidth: 0
-
-! Set a border for the menus to make them simpler to distinguish against the
-! vt100 widget:
-*SimpleMenu*borderWidth: 2
diff --git a/nx-X11/programs/xterm/aclocal.m4 b/nx-X11/programs/xterm/aclocal.m4
deleted file mode 100644
index b5fb07053..000000000
--- a/nx-X11/programs/xterm/aclocal.m4
+++ /dev/null
@@ -1,2359 +0,0 @@
-dnl $XTermId: aclocal.m4,v 1.206 2005/11/03 13:17:27 tom Exp $
-dnl
-dnl $XFree86: xc/programs/xterm/aclocal.m4,v 3.60 2005/11/03 13:17:27 dickey Exp $
-dnl
-dnl ---------------------------------------------------------------------------
-dnl
-dnl Copyright 1997-2004,2005 by Thomas E. Dickey
-dnl
-dnl All Rights Reserved
-dnl
-dnl Permission to use, copy, modify, and distribute this software and its
-dnl documentation for any purpose and without fee is hereby granted,
-dnl provided that the above copyright notice appear in all copies and that
-dnl both that copyright notice and this permission notice appear in
-dnl supporting documentation, and that the name of the above listed
-dnl copyright holder(s) not be used in advertising or publicity pertaining
-dnl to distribution of the software without specific, written prior
-dnl permission.
-dnl
-dnl THE ABOVE LISTED COPYRIGHT HOLDER(S) DISCLAIM ALL WARRANTIES WITH REGARD
-dnl TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
-dnl AND FITNESS, IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE
-dnl LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-dnl WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
-dnl ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
-dnl OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-dnl
-dnl ---------------------------------------------------------------------------
-dnl ---------------------------------------------------------------------------
-dnl AM_LANGINFO_CODESET version: 3 updated: 2002/10/27 23:21:42
-dnl -------------------
-dnl Inserted as requested by gettext 0.10.40
-dnl File from /usr/share/aclocal
-dnl codeset.m4
-dnl ====================
-dnl serial AM1
-dnl
-dnl From Bruno Haible.
-AC_DEFUN([AM_LANGINFO_CODESET],
-[
- AC_CACHE_CHECK([for nl_langinfo and CODESET], am_cv_langinfo_codeset,
- [AC_TRY_LINK([#include <langinfo.h>],
- [char* cs = nl_langinfo(CODESET);],
- am_cv_langinfo_codeset=yes,
- am_cv_langinfo_codeset=no)
- ])
- if test $am_cv_langinfo_codeset = yes; then
- AC_DEFINE(HAVE_LANGINFO_CODESET, 1,
- [Define if you have <langinfo.h> and nl_langinfo(CODESET).])
- fi
-])dnl
-dnl ---------------------------------------------------------------------------
-dnl CF_ADD_CFLAGS version: 7 updated: 2004/04/25 17:48:30
-dnl -------------
-dnl Copy non-preprocessor flags to $CFLAGS, preprocessor flags to $CPPFLAGS
-dnl The second parameter if given makes this macro verbose.
-dnl
-dnl Put any preprocessor definitions that use quoted strings in $EXTRA_CPPFLAGS,
-dnl to simplify use of $CPPFLAGS in compiler checks, etc., that are easily
-dnl confused by the quotes (which require backslashes to keep them usable).
-AC_DEFUN([CF_ADD_CFLAGS],
-[
-cf_fix_cppflags=no
-cf_new_cflags=
-cf_new_cppflags=
-cf_new_extra_cppflags=
-
-for cf_add_cflags in $1
-do
-case $cf_fix_cppflags in
-no)
- case $cf_add_cflags in #(vi
- -undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) #(vi
- case $cf_add_cflags in
- -D*)
- cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[[^=]]*='\''\"[[^"]]*//'`
-
- test "${cf_add_cflags}" != "${cf_tst_cflags}" \
- && test -z "${cf_tst_cflags}" \
- && cf_fix_cppflags=yes
-
- if test $cf_fix_cppflags = yes ; then
- cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
- continue
- elif test "${cf_tst_cflags}" = "\"'" ; then
- cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
- continue
- fi
- ;;
- esac
- case "$CPPFLAGS" in
- *$cf_add_cflags) #(vi
- ;;
- *) #(vi
- cf_new_cppflags="$cf_new_cppflags $cf_add_cflags"
- ;;
- esac
- ;;
- *)
- cf_new_cflags="$cf_new_cflags $cf_add_cflags"
- ;;
- esac
- ;;
-yes)
- cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
-
- cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[[^"]]*"'\''//'`
-
- test "${cf_add_cflags}" != "${cf_tst_cflags}" \
- && test -z "${cf_tst_cflags}" \
- && cf_fix_cppflags=no
- ;;
-esac
-done
-
-if test -n "$cf_new_cflags" ; then
- ifelse($2,,,[CF_VERBOSE(add to \$CFLAGS $cf_new_cflags)])
- CFLAGS="$CFLAGS $cf_new_cflags"
-fi
-
-if test -n "$cf_new_cppflags" ; then
- ifelse($2,,,[CF_VERBOSE(add to \$CPPFLAGS $cf_new_cppflags)])
- CPPFLAGS="$cf_new_cppflags $CPPFLAGS"
-fi
-
-if test -n "$cf_new_extra_cppflags" ; then
- ifelse($2,,,[CF_VERBOSE(add to \$EXTRA_CPPFLAGS $cf_new_extra_cppflags)])
- EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS"
-fi
-
-AC_SUBST(EXTRA_CPPFLAGS)
-
-])dnl
-dnl ---------------------------------------------------------------------------
-dnl CF_ANSI_CC_CHECK version: 9 updated: 2001/12/30 17:53:34
-dnl ----------------
-dnl This is adapted from the macros 'fp_PROG_CC_STDC' and 'fp_C_PROTOTYPES'
-dnl in the sharutils 4.2 distribution.
-AC_DEFUN([CF_ANSI_CC_CHECK],
-[
-AC_CACHE_CHECK(for ${CC-cc} option to accept ANSI C, cf_cv_ansi_cc,[
-cf_cv_ansi_cc=no
-cf_save_CFLAGS="$CFLAGS"
-cf_save_CPPFLAGS="$CPPFLAGS"
-# Don't try gcc -ansi; that turns off useful extensions and
-# breaks some systems' header files.
-# AIX -qlanglvl=ansi
-# Ultrix and OSF/1 -std1
-# HP-UX -Aa -D_HPUX_SOURCE
-# SVR4 -Xc
-# UnixWare 1.2 (cannot use -Xc, since ANSI/POSIX clashes)
-for cf_arg in "-DCC_HAS_PROTOS" \
- "" \
- -qlanglvl=ansi \
- -std1 \
- -Ae \
- "-Aa -D_HPUX_SOURCE" \
- -Xc
-do
- CF_ADD_CFLAGS($cf_arg)
- AC_TRY_COMPILE(
-[
-#ifndef CC_HAS_PROTOS
-#if !defined(__STDC__) || (__STDC__ != 1)
-choke me
-#endif
-#endif
-],[
- int test (int i, double x);
- struct s1 {int (*f) (int a);};
- struct s2 {int (*f) (double a);};],
- [cf_cv_ansi_cc="$cf_arg"; break])
-done
-CFLAGS="$cf_save_CFLAGS"
-CPPFLAGS="$cf_save_CPPFLAGS"
-])
-
-if test "$cf_cv_ansi_cc" != "no"; then
-if test ".$cf_cv_ansi_cc" != ".-DCC_HAS_PROTOS"; then
- CF_ADD_CFLAGS($cf_cv_ansi_cc)
-else
- AC_DEFINE(CC_HAS_PROTOS)
-fi
-fi
-])dnl
-dnl ---------------------------------------------------------------------------
-dnl CF_ARG_DISABLE version: 3 updated: 1999/03/30 17:24:31
-dnl --------------
-dnl Allow user to disable a normally-on option.
-AC_DEFUN([CF_ARG_DISABLE],
-[CF_ARG_OPTION($1,[$2],[$3],[$4],yes)])dnl
-dnl ---------------------------------------------------------------------------
-dnl CF_ARG_ENABLE version: 3 updated: 1999/03/30 17:24:31
-dnl -------------
-dnl Allow user to enable a normally-off option.
-AC_DEFUN([CF_ARG_ENABLE],
-[CF_ARG_OPTION($1,[$2],[$3],[$4],no)])dnl
-dnl ---------------------------------------------------------------------------
-dnl CF_ARG_OPTION version: 3 updated: 1997/10/18 14:42:41
-dnl -------------
-dnl Restricted form of AC_ARG_ENABLE that ensures user doesn't give bogus
-dnl values.
-dnl
-dnl Parameters:
-dnl $1 = option name
-dnl $2 = help-string
-dnl $3 = action to perform if option is not default
-dnl $4 = action if perform if option is default
-dnl $5 = default option value (either 'yes' or 'no')
-AC_DEFUN([CF_ARG_OPTION],
-[AC_ARG_ENABLE($1,[$2],[test "$enableval" != ifelse($5,no,yes,no) && enableval=ifelse($5,no,no,yes)
- if test "$enableval" != "$5" ; then
-ifelse($3,,[ :]dnl
-,[ $3]) ifelse($4,,,[
- else
- $4])
- fi],[enableval=$5 ifelse($4,,,[
- $4
-])dnl
- ])])dnl
-dnl ---------------------------------------------------------------------------
-dnl CF_CHECK_CACHE version: 10 updated: 2004/05/23 13:03:31
-dnl --------------
-dnl Check if we're accidentally using a cache from a different machine.
-dnl Derive the system name, as a check for reusing the autoconf cache.
-dnl
-dnl If we've packaged config.guess and config.sub, run that (since it does a
-dnl better job than uname). Normally we'll use AC_CANONICAL_HOST, but allow
-dnl an extra parameter that we may override, e.g., for AC_CANONICAL_SYSTEM
-dnl which is useful in cross-compiles.
-dnl
-dnl Note: we would use $ac_config_sub, but that is one of the places where
-dnl autoconf 2.5x broke compatibility with autoconf 2.13
-AC_DEFUN([CF_CHECK_CACHE],
-[
-if test -f $srcdir/config.guess || test -f $ac_aux_dir/config.guess ; then
- ifelse([$1],,[AC_CANONICAL_HOST],[$1])
- system_name="$host_os"
-else
- system_name="`(uname -s -r) 2>/dev/null`"
- if test -z "$system_name" ; then
- system_name="`(hostname) 2>/dev/null`"
- fi
-fi
-test -n "$system_name" && AC_DEFINE_UNQUOTED(SYSTEM_NAME,"$system_name")
-AC_CACHE_VAL(cf_cv_system_name,[cf_cv_system_name="$system_name"])
-
-test -z "$system_name" && system_name="$cf_cv_system_name"
-test -n "$cf_cv_system_name" && AC_MSG_RESULT(Configuring for $cf_cv_system_name)
-
-if test ".$system_name" != ".$cf_cv_system_name" ; then
- AC_MSG_RESULT(Cached system name ($system_name) does not agree with actual ($cf_cv_system_name))
- AC_ERROR("Please remove config.cache and try again.")
-fi
-])dnl
-dnl ---------------------------------------------------------------------------
-dnl CF_CHECK_CFLAGS version: 2 updated: 2001/12/30 19:09:58
-dnl ---------------
-dnl Conditionally add to $CFLAGS and $CPPFLAGS values which are derived from
-dnl a build-configuration such as imake. These have the pitfall that they
-dnl often contain compiler-specific options which we cannot use, mixed with
-dnl preprocessor options that we usually can.
-AC_DEFUN([CF_CHECK_CFLAGS],
-[
-CF_VERBOSE(checking additions to CFLAGS)
-cf_check_cflags="$CFLAGS"
-cf_check_cppflags="$CPPFLAGS"
-CF_ADD_CFLAGS($1,yes)
-if test "$cf_check_cflags" != "$CFLAGS" ; then
-AC_TRY_LINK([#include <stdio.h>],[printf("Hello world");],,
- [CF_VERBOSE(test-compile failed. Undoing change to \$CFLAGS)
- if test "$cf_check_cppflags" != "$CPPFLAGS" ; then
- CF_VERBOSE(but keeping change to \$CPPFLAGS)
- fi
- CFLAGS="$cf_check_flags"])
-fi
-])dnl
-dnl ---------------------------------------------------------------------------
-dnl CF_CHECK_ERRNO version: 9 updated: 2001/12/30 18:03:23
-dnl --------------
-dnl Check for data that is usually declared in <stdio.h> or <errno.h>, e.g.,
-dnl the 'errno' variable. Define a DECL_xxx symbol if we must declare it
-dnl ourselves.
-dnl
-dnl $1 = the name to check
-AC_DEFUN([CF_CHECK_ERRNO],
-[
-AC_CACHE_CHECK(if external $1 is declared, cf_cv_dcl_$1,[
- AC_TRY_COMPILE([
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#include <stdio.h>
-#include <sys/types.h>
-#include <errno.h> ],
- [long x = (long) $1],
- [cf_cv_dcl_$1=yes],
- [cf_cv_dcl_$1=no])
-])
-
-if test "$cf_cv_dcl_$1" = no ; then
- CF_UPPER(cf_result,decl_$1)
- AC_DEFINE_UNQUOTED($cf_result)
-fi
-
-# It's possible (for near-UNIX clones) that the data doesn't exist
-CF_CHECK_EXTERN_DATA($1,int)
-])dnl
-dnl ---------------------------------------------------------------------------
-dnl CF_CHECK_EXTERN_DATA version: 3 updated: 2001/12/30 18:03:23
-dnl --------------------
-dnl Check for existence of external data in the current set of libraries. If
-dnl we can modify it, it's real enough.
-dnl $1 = the name to check
-dnl $2 = its type
-AC_DEFUN([CF_CHECK_EXTERN_DATA],
-[
-AC_CACHE_CHECK(if external $1 exists, cf_cv_have_$1,[
- AC_TRY_LINK([
-#undef $1
-extern $2 $1;
-],
- [$1 = 2],
- [cf_cv_have_$1=yes],
- [cf_cv_have_$1=no])
-])
-
-if test "$cf_cv_have_$1" = yes ; then
- CF_UPPER(cf_result,have_$1)
- AC_DEFINE_UNQUOTED($cf_result)
-fi
-
-])dnl
-dnl ---------------------------------------------------------------------------
-dnl CF_DISABLE_ECHO version: 10 updated: 2003/04/17 22:27:11
-dnl ---------------
-dnl You can always use "make -n" to see the actual options, but it's hard to
-dnl pick out/analyze warning messages when the compile-line is long.
-dnl
-dnl Sets:
-dnl ECHO_LT - symbol to control if libtool is verbose
-dnl ECHO_LD - symbol to prefix "cc -o" lines
-dnl RULE_CC - symbol to put before implicit "cc -c" lines (e.g., .c.o)
-dnl SHOW_CC - symbol to put before explicit "cc -c" lines
-dnl ECHO_CC - symbol to put before any "cc" line
-dnl
-AC_DEFUN([CF_DISABLE_ECHO],[
-AC_MSG_CHECKING(if you want to see long compiling messages)
-CF_ARG_DISABLE(echo,
- [ --disable-echo display "compiling" commands],
- [
- ECHO_LT='--silent'
- ECHO_LD='@echo linking [$]@;'
- RULE_CC=' @echo compiling [$]<'
- SHOW_CC=' @echo compiling [$]@'
- ECHO_CC='@'
-],[
- ECHO_LT=''
- ECHO_LD=''
- RULE_CC='# compiling'
- SHOW_CC='# compiling'
- ECHO_CC=''
-])
-AC_MSG_RESULT($enableval)
-AC_SUBST(ECHO_LT)
-AC_SUBST(ECHO_LD)
-AC_SUBST(RULE_CC)
-AC_SUBST(SHOW_CC)
-AC_SUBST(ECHO_CC)
-])dnl
-dnl ---------------------------------------------------------------------------
-dnl CF_ENABLE_NARROWPROTO version: 1 updated: 2005/11/02 15:04:41
-dnl ---------------------
-dnl If this is not set properly, Xaw's scrollbars will not work.
-dnl The so-called "modular" configuration for Xorg omits most of the
-dnl configure checks that would be needed to provide compatibility with
-dnl older X builds. This one breaks things noticeably.
-AC_DEFUN([CF_ENABLE_NARROWPROTO],
-[
-AC_MSG_CHECKING(if you want narrow prototypes for X libraries)
-
-case `$ac_config_guess` in #(vi
-*cygwin*|*freebsd*|*gnu*|*irix5*|*irix6*|*linux-gnu*|*netbsd*|*openbsd*|*qnx*|*sco*|*sgi*) #(vi
- cf_default_narrowproto=yes
- ;;
-*)
- cf_default_narrowproto=no
- ;;
-esac
-
-CF_ARG_OPTION(narrowproto,
- [ --enable-narrowproto enable narrow prototypes for X libraries],
- [enable_narrowproto=$enableval],
- [enable_narrowproto=$default_narrowproto],
- [$cf_default_narrowproto])
-AC_MSG_RESULT($enable_narrowproto)
-])
-dnl ---------------------------------------------------------------------------
-dnl CF_ERRNO version: 5 updated: 1997/11/30 12:44:39
-dnl --------
-dnl Check if 'errno' is declared in <errno.h>
-AC_DEFUN([CF_ERRNO],
-[
-CF_CHECK_ERRNO(errno)
-])dnl
-dnl ---------------------------------------------------------------------------
-dnl CF_FUNC_MEMMOVE version: 5 updated: 2000/08/12 23:18:52
-dnl ---------------
-dnl Check for memmove, or a bcopy that can handle overlapping copy. If neither
-dnl is found, add our own version of memmove to the list of objects.
-AC_DEFUN([CF_FUNC_MEMMOVE],
-[
-AC_CHECK_FUNC(memmove,,[
-AC_CHECK_FUNC(bcopy,[
- AC_CACHE_CHECK(if bcopy does overlapping moves,cf_cv_good_bcopy,[
- AC_TRY_RUN([
-int main() {
- static char data[] = "abcdefghijklmnopqrstuwwxyz";
- char temp[40];
- bcopy(data, temp, sizeof(data));
- bcopy(temp+10, temp, 15);
- bcopy(temp+5, temp+15, 10);
- exit (strcmp(temp, "klmnopqrstuwwxypqrstuwwxyz"));
-}
- ],
- [cf_cv_good_bcopy=yes],
- [cf_cv_good_bcopy=no],
- [cf_cv_good_bcopy=unknown])
- ])
- ],[cf_cv_good_bcopy=no])
- if test "$cf_cv_good_bcopy" = yes ; then
- AC_DEFINE(USE_OK_BCOPY)
- else
- AC_DEFINE(USE_MY_MEMMOVE)
- fi
-])])dnl
-dnl ---------------------------------------------------------------------------
-dnl CF_FUNC_TGETENT version: 10 updated: 2005/09/18 15:26:47
-dnl ---------------
-dnl Check for tgetent function in termcap library. If we cannot find this,
-dnl we'll use the $LINES and $COLUMNS environment variables to pass screen
-dnl size information to subprocesses. (We cannot use terminfo's compatibility
-dnl function, since it cannot provide the termcap-format data).
-dnl
-dnl If the --disable-full-tgetent option is given, we'll settle for the first
-dnl tgetent function we find. Since the search list in that case does not
-dnl include the termcap library, that allows us to default to terminfo.
-AC_DEFUN([CF_FUNC_TGETENT],
-[
-# compute a reasonable value for $TERM to give tgetent(), since we may be
-# running in 'screen', which sets $TERMCAP to a specific entry that is not
-# necessarily in /etc/termcap - unsetenv is not portable, so we cannot simply
-# discard $TERMCAP.
-cf_TERMVAR=vt100
-test -n "$TERMCAP" && cf_TERMVAR="$TERM"
-test -z "$cf_TERMVAR" && cf_TERMVAR=vt100
-
-AC_MSG_CHECKING(if we want full tgetent function)
-CF_ARG_DISABLE(full-tgetent,
- [ --disable-full-tgetent disable check for full tgetent function],
- cf_full_tgetent=no,
- cf_full_tgetent=yes,yes)
-AC_MSG_RESULT($cf_full_tgetent)
-
-if test "$cf_full_tgetent" = yes ; then
- cf_test_message="full tgetent"
-else
- cf_test_message="tgetent"
-fi
-
-AC_CACHE_CHECK(for $cf_test_message function,cf_cv_lib_tgetent,[
-cf_save_LIBS="$LIBS"
-cf_cv_lib_tgetent=no
-if test "$cf_full_tgetent" = yes ; then
- cf_TERMLIB="termcap termlib ncurses curses"
- cf_TERMTST="buffer[[0]] == 0"
-else
- cf_TERMLIB="termlib ncurses curses"
- cf_TERMTST="0"
-fi
-for cf_termlib in '' $cf_TERMLIB ; do
- LIBS="$cf_save_LIBS"
- test -n "$cf_termlib" && LIBS="$LIBS -l$cf_termlib"
- AC_TRY_RUN([
-/* terminfo implementations ignore the buffer argument, making it useless for
- * the xterm application, which uses this information to make a new TERMCAP
- * environment variable.
- */
-int main()
-{
- char buffer[1024];
- buffer[0] = 0;
- tgetent(buffer, "$cf_TERMVAR");
- exit($cf_TERMTST); }],
- [echo "yes, there is a termcap/tgetent in $cf_termlib" 1>&AC_FD_CC
- if test -n "$cf_termlib" ; then
- cf_cv_lib_tgetent="-l$cf_termlib"
- else
- cf_cv_lib_tgetent=yes
- fi
- break],
- [echo "no, there is no termcap/tgetent in $cf_termlib" 1>&AC_FD_CC],
- [echo "cross-compiling, cannot verify if a termcap/tgetent is present in $cf_termlib" 1>&AC_FD_CC])
-done
-LIBS="$cf_save_LIBS"
-])
-
-# If we found a working tgetent(), set LIBS and check for termcap.h.
-# (LIBS cannot be set inside AC_CACHE_CHECK; the commands there should
-# not have side effects other than setting the cache variable, because
-# they are not executed when a cached value exists.)
-if test "$cf_cv_lib_tgetent" != no ; then
- test "$cf_cv_lib_tgetent" != yes && LIBS="$LIBS $cf_cv_lib_tgetent"
- AC_DEFINE(USE_TERMCAP)
- AC_TRY_COMPILE([
-#include <termcap.h>],[
-#ifdef NCURSES_VERSION
-make an error
-#endif],[AC_DEFINE(HAVE_TERMCAP_H)])
-else
- # If we didn't find a tgetent() that supports the buffer
- # argument, look again to see whether we can find even
- # a crippled one. A crippled tgetent() is still useful to
- # validate values for the TERM environment variable given to
- # child processes.
- AC_CACHE_CHECK(for partial tgetent function,cf_cv_lib_part_tgetent,[
- cf_cv_lib_part_tgetent=no
- for cf_termlib in $cf_TERMLIB ; do
- LIBS="$cf_save_LIBS -l$cf_termlib"
- AC_TRY_LINK([],[tgetent(0, "$cf_TERMVAR")],
- [echo "there is a terminfo/tgetent in $cf_termlib" 1>&AC_FD_CC
- cf_cv_lib_part_tgetent="-l$cf_termlib"
- break])
- done
- LIBS="$cf_save_LIBS"
- ])
-
- if test "$cf_cv_lib_part_tgetent" != no ; then
- LIBS="$LIBS $cf_cv_lib_part_tgetent"
- AC_CHECK_HEADERS(termcap.h)
-
- # If this is linking against ncurses, we'll trigger the
- # ifdef in resize.c that turns the termcap stuff back off.
- AC_DEFINE(USE_TERMINFO)
- fi
-fi
-])dnl
-dnl ---------------------------------------------------------------------------
-dnl CF_GCC_ATTRIBUTES version: 10 updated: 2005/05/28 13:16:28
-dnl -----------------
-dnl Test for availability of useful gcc __attribute__ directives to quiet
-dnl compiler warnings. Though useful, not all are supported -- and contrary
-dnl to documentation, unrecognized directives cause older compilers to barf.
-AC_DEFUN([CF_GCC_ATTRIBUTES],
-[
-if test "$GCC" = yes
-then
-cat > conftest.i <<EOF
-#ifndef GCC_PRINTF
-#define GCC_PRINTF 0
-#endif
-#ifndef GCC_SCANF
-#define GCC_SCANF 0
-#endif
-#ifndef GCC_NORETURN
-#define GCC_NORETURN /* nothing */
-#endif
-#ifndef GCC_UNUSED
-#define GCC_UNUSED /* nothing */
-#endif
-EOF
-if test "$GCC" = yes
-then
- AC_CHECKING([for $CC __attribute__ directives])
-cat > conftest.$ac_ext <<EOF
-#line __oline__ "configure"
-#include "confdefs.h"
-#include "conftest.h"
-#include "conftest.i"
-#if GCC_PRINTF
-#define GCC_PRINTFLIKE(fmt,var) __attribute__((format(printf,fmt,var)))
-#else
-#define GCC_PRINTFLIKE(fmt,var) /*nothing*/
-#endif
-#if GCC_SCANF
-#define GCC_SCANFLIKE(fmt,var) __attribute__((format(scanf,fmt,var)))
-#else
-#define GCC_SCANFLIKE(fmt,var) /*nothing*/
-#endif
-extern void wow(char *,...) GCC_SCANFLIKE(1,2);
-extern void oops(char *,...) GCC_PRINTFLIKE(1,2) GCC_NORETURN;
-extern void foo(void) GCC_NORETURN;
-int main(int argc GCC_UNUSED, char *argv[[]] GCC_UNUSED) { return 0; }
-EOF
- for cf_attribute in scanf printf unused noreturn
- do
- CF_UPPER(cf_ATTRIBUTE,$cf_attribute)
- cf_directive="__attribute__(($cf_attribute))"
- echo "checking for $CC $cf_directive" 1>&AC_FD_CC
- case $cf_attribute in
- scanf|printf)
- cat >conftest.h <<EOF
-#define GCC_$cf_ATTRIBUTE 1
-EOF
- ;;
- *)
- cat >conftest.h <<EOF
-#define GCC_$cf_ATTRIBUTE $cf_directive
-EOF
- ;;
- esac
- if AC_TRY_EVAL(ac_compile); then
- test -n "$verbose" && AC_MSG_RESULT(... $cf_attribute)
- cat conftest.h >>confdefs.h
- fi
- done
-else
- fgrep define conftest.i >>confdefs.h
-fi
-rm -rf conftest*
-fi
-])dnl
-dnl ---------------------------------------------------------------------------
-dnl CF_GCC_VERSION version: 4 updated: 2005/08/27 09:53:42
-dnl --------------
-dnl Find version of gcc
-AC_DEFUN([CF_GCC_VERSION],[
-AC_REQUIRE([AC_PROG_CC])
-GCC_VERSION=none
-if test "$GCC" = yes ; then
- AC_MSG_CHECKING(version of $CC)
- GCC_VERSION="`${CC} --version| sed -e '2,$d' -e 's/^.*(GCC) //' -e 's/^[[^0-9.]]*//' -e 's/[[^0-9.]].*//'`"
- test -z "$GCC_VERSION" && GCC_VERSION=unknown
- AC_MSG_RESULT($GCC_VERSION)
-fi
-])dnl
-dnl ---------------------------------------------------------------------------
-dnl CF_GCC_WARNINGS version: 20 updated: 2005/08/06 18:37:29
-dnl ---------------
-dnl Check if the compiler supports useful warning options. There's a few that
-dnl we don't use, simply because they're too noisy:
-dnl
-dnl -Wconversion (useful in older versions of gcc, but not in gcc 2.7.x)
-dnl -Wredundant-decls (system headers make this too noisy)
-dnl -Wtraditional (combines too many unrelated messages, only a few useful)
-dnl -Wwrite-strings (too noisy, but should review occasionally). This
-dnl is enabled for ncurses using "--enable-const".
-dnl -pedantic
-dnl
-dnl Parameter:
-dnl $1 is an optional list of gcc warning flags that a particular
-dnl application might want to use, e.g., "no-unused" for
-dnl -Wno-unused
-dnl Special:
-dnl If $with_ext_const is "yes", add a check for -Wwrite-strings
-dnl
-AC_DEFUN([CF_GCC_WARNINGS],
-[
-AC_REQUIRE([CF_GCC_VERSION])
-CF_INTEL_COMPILER(GCC,INTEL_COMPILER,CFLAGS)
-
-cat > conftest.$ac_ext <<EOF
-#line __oline__ "configure"
-int main(int argc, char *argv[[]]) { return (argv[[argc-1]] == 0) ; }
-EOF
-
-if test "$INTEL_COMPILER" = yes
-then
-# The "-wdXXX" options suppress warnings:
-# remark #1419: external declaration in primary source file
-# remark #1682: implicit conversion of a 64-bit integral type to a smaller integral type (potential portability problem)
-# remark #1683: explicit conversion of a 64-bit integral type to a smaller integral type (potential portability problem)
-# remark #1684: conversion from pointer to same-sized integral type (potential portability problem)
-# remark #193: zero used for undefined preprocessing identifier
-# remark #593: variable "curs_sb_left_arrow" was set but never used
-# remark #810: conversion from "int" to "Dimension={unsigned short}" may lose significant bits
-# remark #869: parameter "tw" was never referenced
-# remark #981: operands are evaluated in unspecified order
-# warning #269: invalid format string conversion
-
- AC_CHECKING([for $CC warning options])
- cf_save_CFLAGS="$CFLAGS"
- EXTRA_CFLAGS="-Wall"
- for cf_opt in $1 \
- wd1419 \
- wd1682 \
- wd1683 \
- wd1684 \
- wd193 \
- wd279 \
- wd593 \
- wd810 \
- wd869 \
- wd981
- do
- CFLAGS="$cf_save_CFLAGS $EXTRA_CFLAGS -$cf_opt"
- if AC_TRY_EVAL(ac_compile); then
- test -n "$verbose" && AC_MSG_RESULT(... -$cf_opt)
- EXTRA_CFLAGS="$EXTRA_CFLAGS -$cf_opt"
- fi
- done
- CFLAGS="$cf_save_CFLAGS"
-
-elif test "$GCC" = yes
-then
- AC_CHECKING([for $CC warning options])
- cf_save_CFLAGS="$CFLAGS"
- EXTRA_CFLAGS="-W -Wall"
- cf_warn_CONST=""
- test "$with_ext_const" = yes && cf_warn_CONST="Wwrite-strings"
- for cf_opt in \
- Wbad-function-cast \
- Wcast-align \
- Wcast-qual \
- Winline \
- Wmissing-declarations \
- Wmissing-prototypes \
- Wnested-externs \
- Wpointer-arith \
- Wshadow \
- Wstrict-prototypes \
- Wundef $cf_warn_CONST $1
- do
- CFLAGS="$cf_save_CFLAGS $EXTRA_CFLAGS -$cf_opt"
- if AC_TRY_EVAL(ac_compile); then
- test -n "$verbose" && AC_MSG_RESULT(... -$cf_opt)
- case $cf_opt in #(vi
- Wcast-qual) #(vi
- CPPFLAGS="$CPPFLAGS -DXTSTRINGDEFINES"
- ;;
- Winline) #(vi
- case $GCC_VERSION in
- 3.3*)
- CF_VERBOSE(feature is broken in gcc $GCC_VERSION)
- continue;;
- esac
- ;;
- esac
- EXTRA_CFLAGS="$EXTRA_CFLAGS -$cf_opt"
- fi
- done
- CFLAGS="$cf_save_CFLAGS"
-fi
-rm -f conftest*
-
-AC_SUBST(EXTRA_CFLAGS)
-])dnl
-dnl ---------------------------------------------------------------------------
-dnl CF_GNU_SOURCE version: 6 updated: 2005/07/09 13:23:07
-dnl -------------
-dnl Check if we must define _GNU_SOURCE to get a reasonable value for
-dnl _XOPEN_SOURCE, upon which many POSIX definitions depend. This is a defect
-dnl (or misfeature) of glibc2, which breaks portability of many applications,
-dnl since it is interwoven with GNU extensions.
-dnl
-dnl Well, yes we could work around it...
-AC_DEFUN([CF_GNU_SOURCE],
-[
-AC_CACHE_CHECK(if we must define _GNU_SOURCE,cf_cv_gnu_source,[
-AC_TRY_COMPILE([#include <sys/types.h>],[
-#ifndef _XOPEN_SOURCE
-make an error
-#endif],
- [cf_cv_gnu_source=no],
- [cf_save="$CPPFLAGS"
- CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE"
- AC_TRY_COMPILE([#include <sys/types.h>],[
-#ifdef _XOPEN_SOURCE
-make an error
-#endif],
- [cf_cv_gnu_source=no],
- [cf_cv_gnu_source=yes])
- CPPFLAGS="$cf_save"
- ])
-])
-test "$cf_cv_gnu_source" = yes && CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE"
-])dnl
-dnl ---------------------------------------------------------------------------
-dnl CF_HELP_MESSAGE version: 3 updated: 1998/01/14 10:56:23
-dnl ---------------
-dnl Insert text into the help-message, for readability, from AC_ARG_WITH.
-AC_DEFUN([CF_HELP_MESSAGE],
-[AC_DIVERT_HELP([$1])dnl
-])dnl
-dnl ---------------------------------------------------------------------------
-dnl CF_IMAKE_CFLAGS version: 27 updated: 2005/04/05 18:26:15
-dnl ---------------
-dnl Use imake to obtain compiler flags. We could, in principle, write tests to
-dnl get these, but if imake is properly configured there is no point in doing
-dnl this.
-dnl
-dnl Parameters (used in constructing a sample Imakefile):
-dnl $1 = optional value to append to $IMAKE_CFLAGS
-dnl $2 = optional value to append to $IMAKE_LOADFLAGS
-AC_DEFUN([CF_IMAKE_CFLAGS],
-[
-AC_PATH_PROGS(IMAKE,xmkmf imake)
-
-if test -n "$IMAKE" ; then
-
-case $IMAKE in # (vi
-*/imake)
- cf_imake_opts="-DUseInstalled=YES" # (vi
- ;;
-*/util/xmkmf)
- # A single parameter tells xmkmf where the config-files are:
- cf_imake_opts="`echo $IMAKE|sed -e s,/config/util/xmkmf,,`" # (vi
- ;;
-*)
- cf_imake_opts=
- ;;
-esac
-
-# If it's installed properly, imake (or its wrapper, xmkmf) will point to the
-# config directory.
-if mkdir conftestdir; then
- CDPATH=; export CDPATH
- cf_makefile=`cd $srcdir;pwd`/Imakefile
- cd conftestdir
-
- cat >fix_cflags.sed <<'CF_EOF'
-s/\\//g
-s/"//g
-s/\(-D[[a-zA-Z0-9_]][[a-zA-Z0-9_]]*\)=\([[^\\'"0-9 ]][[^ ]]*\([[ ]][[ ]]*[[^- ]][[^ ]]*\)*\)/\1='\\"\2\\"'/g
-s/\(-D[[a-zA-Z0-9_]][[a-zA-Z0-9_]]*\)=\([[^\\'"0-9 ]][[^ ]]*\)[[ ]]/\1='\\"\2\\"' /g
-s/\(-D[[a-zA-Z0-9_]][[a-zA-Z0-9_]]*\)=\([[^\\'"0-9 ]][[^ ]]*\)$/\1='\\"\2\\"'/g
-s/^IMAKE[[ ]]*/IMAKE_CFLAGS="/
-s/$/"/
-CF_EOF
-
- cat >fix_lflags.sed <<'CF_EOF'
-s/^IMAKE[[ ]]*/IMAKE_LOADFLAGS="/
-s/$/"/
-CF_EOF
-
- echo >./Imakefile
- test -f $cf_makefile && cat $cf_makefile >>./Imakefile
-
- cat >> ./Imakefile <<'CF_EOF'
-findstddefs:
- @echo IMAKE $(ALLDEFINES)ifelse($1,,,[ $1]) | sed -f fix_cflags.sed
- @echo IMAKE $(EXTRA_LOAD_FLAGS)ifelse($2,,,[ $2]) | sed -f fix_lflags.sed
-CF_EOF
-
- if ( $IMAKE $cf_imake_opts 1>/dev/null 2>&AC_FD_CC && test -f Makefile)
- then
- CF_VERBOSE(Using $IMAKE $cf_imake_opts)
- else
- # sometimes imake doesn't have the config path compiled in. Find it.
- cf_config=
- for cf_libpath in $X_LIBS $LIBS ; do
- case $cf_libpath in # (vi
- -L*)
- cf_libpath=`echo .$cf_libpath | sed -e 's/^...//'`
- cf_libpath=$cf_libpath/X11/config
- if test -d $cf_libpath ; then
- cf_config=$cf_libpath
- break
- fi
- ;;
- esac
- done
- if test -z "$cf_config" ; then
- AC_WARN(Could not find imake config-directory)
- else
- cf_imake_opts="$cf_imake_opts -I$cf_config"
- if ( $IMAKE -v $cf_imake_opts 2>&AC_FD_CC)
- then
- CF_VERBOSE(Using $IMAKE $cf_config)
- else
- AC_WARN(Cannot run $IMAKE)
- fi
- fi
- fi
-
- # GNU make sometimes prints "make[1]: Entering...", which
- # would confuse us.
- eval `make findstddefs 2>/dev/null | grep -v make`
-
- cd ..
- rm -rf conftestdir
-
- # We use $(ALLDEFINES) rather than $(STD_DEFINES) because the former
- # declares XTFUNCPROTO there. However, some vendors (e.g., SGI) have
- # modified it to support site.cf, adding a kludge for the /usr/include
- # directory. Try to filter that out, otherwise gcc won't find its
- # headers.
- if test -n "$GCC" ; then
- if test -n "$IMAKE_CFLAGS" ; then
- cf_nostdinc=""
- cf_std_incl=""
- cf_cpp_opts=""
- for cf_opt in $IMAKE_CFLAGS
- do
- case "$cf_opt" in
- -nostdinc) #(vi
- cf_nostdinc="$cf_opt"
- ;;
- -I/usr/include) #(vi
- cf_std_incl="$cf_opt"
- ;;
- *) #(vi
- cf_cpp_opts="$cf_cpp_opts $cf_opt"
- ;;
- esac
- done
- if test -z "$cf_nostdinc" ; then
- IMAKE_CFLAGS="$cf_cpp_opts $cf_std_incl"
- elif test -z "$cf_std_incl" ; then
- IMAKE_CFLAGS="$cf_cpp_opts $cf_nostdinc"
- else
- CF_VERBOSE(suppressed \"$cf_nostdinc\" and \"$cf_std_incl\")
- IMAKE_CFLAGS="$cf_cpp_opts"
- fi
- fi
- fi
-fi
-
-# Some imake configurations define PROJECTROOT with an empty value. Remove
-# the empty definition.
-case $IMAKE_CFLAGS in
-*-DPROJECTROOT=/*)
- ;;
-*)
- IMAKE_CFLAGS=`echo "$IMAKE_CFLAGS" |sed -e "s,-DPROJECTROOT=[[ ]], ,"`
- ;;
-esac
-
-fi
-
-CF_VERBOSE(IMAKE_CFLAGS $IMAKE_CFLAGS)
-CF_VERBOSE(IMAKE_LOADFLAGS $IMAKE_LOADFLAGS)
-
-AC_SUBST(IMAKE_CFLAGS)
-AC_SUBST(IMAKE_LOADFLAGS)
-])dnl
-dnl ---------------------------------------------------------------------------
-dnl CF_INPUT_METHOD version: 3 updated: 2000/04/11 23:46:57
-dnl ---------------
-dnl Check if the X libraries support input-method
-AC_DEFUN([CF_INPUT_METHOD],
-[
-AC_CACHE_CHECK([if X libraries support input-method],cf_cv_input_method,[
-AC_TRY_LINK([
-#include <X11/IntrinsicP.h>
-#include <X11/Xatom.h>
-#include <X11/Xutil.h>
-#include <X11/Xmu/Atoms.h>
-#include <X11/Xmu/Converters.h>
-#include <X11/Xaw/XawImP.h>
-],[
-{
- XIM xim;
- XIMStyles *xim_styles = 0;
- XIMStyle input_style;
- Widget w = 0;
-
- XSetLocaleModifiers("@im=none");
- xim = XOpenIM(XtDisplay(w), NULL, NULL, NULL);
- XGetIMValues(xim, XNQueryInputStyle, &xim_styles, NULL);
- XCloseIM(xim);
- input_style = (XIMPreeditNothing | XIMStatusNothing);
-}
-],
-[cf_cv_input_method=yes],
-[cf_cv_input_method=no])])
-])dnl
-dnl ---------------------------------------------------------------------------
-dnl CF_INTEL_COMPILER version: 3 updated: 2005/08/06 18:37:29
-dnl -----------------
-dnl Check if the given compiler is really the Intel compiler for Linux. It
-dnl tries to imitate gcc, but does not return an error when it finds a mismatch
-dnl between prototypes, e.g., as exercised by CF_MISSING_CHECK.
-dnl
-dnl This macro should be run "soon" after AC_PROG_CC or AC_PROG_CPLUSPLUS, to
-dnl ensure that it is not mistaken for gcc/g++. It is normally invoked from
-dnl the wrappers for gcc and g++ warnings.
-dnl
-dnl $1 = GCC (default) or GXX
-dnl $2 = INTEL_COMPILER (default) or INTEL_CPLUSPLUS
-dnl $3 = CFLAGS (default) or CXXFLAGS
-AC_DEFUN([CF_INTEL_COMPILER],[
-ifelse($2,,INTEL_COMPILER,[$2])=no
-
-if test "$ifelse($1,,[$1],GCC)" = yes ; then
- case $host_os in
- linux*|gnu*)
- AC_MSG_CHECKING(if this is really Intel ifelse($1,GXX,C++,C) compiler)
- cf_save_CFLAGS="$ifelse($3,,CFLAGS,[$3])"
- ifelse($3,,CFLAGS,[$3])="$ifelse($3,,CFLAGS,[$3]) -no-gcc"
- AC_TRY_COMPILE([],[
-#ifdef __INTEL_COMPILER
-#else
-make an error
-#endif
-],[ifelse($2,,INTEL_COMPILER,[$2])=yes
-cf_save_CFLAGS="$cf_save_CFLAGS -we147 -no-gcc"
-],[])
- ifelse($3,,CFLAGS,[$3])="$cf_save_CFLAGS"
- AC_MSG_RESULT($ifelse($2,,INTEL_COMPILER,[$2]))
- ;;
- esac
-fi
-])dnl
-dnl ---------------------------------------------------------------------------
-dnl CF_LASTLOG version: 4 updated: 2002/10/27 23:21:42
-dnl ----------
-dnl Check for header defining _PATH_LASTLOG, or failing that, see if the lastlog
-dnl file exists.
-AC_DEFUN([CF_LASTLOG],
-[
-AC_CHECK_HEADERS(lastlog.h paths.h)
-AC_CACHE_CHECK(for lastlog path,cf_cv_path_lastlog,[
-AC_TRY_COMPILE([
-#include <sys/types.h>
-#ifdef HAVE_LASTLOG_H
-#include <lastlog.h>
-#else
-#ifdef HAVE_PATHS_H
-#include <paths.h>
-#endif
-#endif],[char *path = _PATH_LASTLOG],
- [cf_cv_path_lastlog="_PATH_LASTLOG"],
- [if test -f /usr/adm/lastlog ; then
- cf_cv_path_lastlog=/usr/adm/lastlog
- else
- cf_cv_path_lastlog=no
- fi])
-])
-test $cf_cv_path_lastlog != no && AC_DEFINE(USE_LASTLOG)
-])dnl
-dnl ---------------------------------------------------------------------------
-dnl CF_MSG_LOG version: 3 updated: 1997/09/07 14:05:52
-dnl ----------
-dnl Write a debug message to config.log, along with the line number in the
-dnl configure script.
-AC_DEFUN([CF_MSG_LOG],[
-echo "(line __oline__) testing $* ..." 1>&AC_FD_CC
-])dnl
-dnl ---------------------------------------------------------------------------
-dnl CF_PATH_PROG version: 6 updated: 2004/01/26 20:58:41
-dnl ------------
-dnl Check for a given program, defining corresponding symbol.
-dnl $1 = environment variable, which is suffixed by "_PATH" in the #define.
-dnl $2 = program name to find.
-dnl $3 = optional list of additional program names to test.
-dnl
-dnl If there is more than one token in the result, #define the remaining tokens
-dnl to $1_ARGS. We need this for 'install' in particular.
-dnl
-dnl FIXME: we should allow this to be overridden by environment variables
-dnl
-AC_DEFUN([CF_PATH_PROG],[
-test -z "[$]$1" && $1=$2
-AC_PATH_PROGS($1,[$]$1 $2 $3,[$]$1)
-
-cf_path_prog=""
-cf_path_args=""
-IFS="${IFS= }"; cf_save_ifs="$IFS"
-case $host_os in #(vi
-os2*) #(vi
- IFS="${IFS};"
- ;;
-*)
- IFS="${IFS}:"
- ;;
-esac
-
-for cf_temp in $ac_cv_path_$1
-do
- if test -z "$cf_path_prog" ; then
- if test "$with_full_paths" = yes ; then
- CF_PATH_SYNTAX(cf_temp,break)
- cf_path_prog="$cf_temp"
- else
- cf_path_prog="`basename $cf_temp`"
- fi
- elif test -z "$cf_path_args" ; then
- cf_path_args="$cf_temp"
- else
- cf_path_args="$cf_path_args $cf_temp"
- fi
-done
-IFS="$cf_save_ifs"
-
-if test -n "$cf_path_prog" ; then
- CF_MSG_LOG(defining path for ${cf_path_prog})
- AC_DEFINE_UNQUOTED($1_PATH,"$cf_path_prog")
- test -n "$cf_path_args" && AC_DEFINE_UNQUOTED($1_ARGS,"$cf_path_args")
-fi
-])dnl
-dnl ---------------------------------------------------------------------------
-dnl CF_PATH_SYNTAX version: 9 updated: 2002/09/17 23:03:38
-dnl --------------
-dnl Check the argument to see that it looks like a pathname. Rewrite it if it
-dnl begins with one of the prefix/exec_prefix variables, and then again if the
-dnl result begins with 'NONE'. This is necessary to work around autoconf's
-dnl delayed evaluation of those symbols.
-AC_DEFUN([CF_PATH_SYNTAX],[
-case ".[$]$1" in #(vi
-.\[$]\(*\)*|.\'*\'*) #(vi
- ;;
-..|./*|.\\*) #(vi
- ;;
-.[[a-zA-Z]]:[[\\/]]*) #(vi OS/2 EMX
- ;;
-.\[$]{*prefix}*) #(vi
- eval $1="[$]$1"
- case ".[$]$1" in #(vi
- .NONE/*)
- $1=`echo [$]$1 | sed -e s%NONE%$ac_default_prefix%`
- ;;
- esac
- ;; #(vi
-.NONE/*)
- $1=`echo [$]$1 | sed -e s%NONE%$ac_default_prefix%`
- ;;
-*)
- ifelse($2,,[AC_ERROR([expected a pathname, not \"[$]$1\"])],$2)
- ;;
-esac
-])dnl
-dnl ---------------------------------------------------------------------------
-dnl CF_POSIX_C_SOURCE version: 6 updated: 2005/07/14 20:25:10
-dnl -----------------
-dnl Define _POSIX_C_SOURCE to the given level, and _POSIX_SOURCE if needed.
-dnl
-dnl POSIX.1-1990 _POSIX_SOURCE
-dnl POSIX.1-1990 and _POSIX_SOURCE and
-dnl POSIX.2-1992 C-Language _POSIX_C_SOURCE=2
-dnl Bindings Option
-dnl POSIX.1b-1993 _POSIX_C_SOURCE=199309L
-dnl POSIX.1c-1996 _POSIX_C_SOURCE=199506L
-dnl X/Open 2000 _POSIX_C_SOURCE=200112L
-dnl
-dnl Parameters:
-dnl $1 is the nominal value for _POSIX_C_SOURCE
-AC_DEFUN([CF_POSIX_C_SOURCE],
-[
-cf_POSIX_C_SOURCE=ifelse($1,,199506L,$1)
-
-cf_save_CFLAGS="$CFLAGS"
-cf_save_CPPFLAGS="$CPPFLAGS"
-
-CF_REMOVE_DEFINE(cf_trim_CFLAGS,$cf_save_CFLAGS,_POSIX_C_SOURCE)
-CF_REMOVE_DEFINE(cf_trim_CPPFLAGS,$cf_save_CPPFLAGS,_POSIX_C_SOURCE)
-
-AC_CACHE_CHECK(if we should define _POSIX_C_SOURCE,cf_cv_posix_c_source,[
- CF_MSG_LOG(if the symbol is already defined go no further)
- AC_TRY_COMPILE([#include <sys/types.h>],[
-#ifndef _POSIX_C_SOURCE
-make an error
-#endif],
- [cf_cv_posix_c_source=no],
- [cf_want_posix_source=no
- case .$cf_POSIX_C_SOURCE in #(vi
- .[[12]]??*) #(vi
- cf_cv_posix_c_source="-D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE"
- ;;
- .2) #(vi
- cf_cv_posix_c_source="-D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE"
- cf_want_posix_source=yes
- ;;
- .*)
- cf_want_posix_source=yes
- ;;
- esac
- if test "$cf_want_posix_source" = yes ; then
- AC_TRY_COMPILE([#include <sys/types.h>],[
-#ifdef _POSIX_SOURCE
-make an error
-#endif],[],
- cf_cv_posix_c_source="$cf_cv_posix_c_source -D_POSIX_SOURCE")
- fi
- CF_MSG_LOG(ifdef from value $cf_POSIX_C_SOURCE)
- CFLAGS="$cf_trim_CFLAGS"
- CPPFLAGS="$cf_trim_CPPFLAGS $cf_cv_posix_c_source"
- CF_MSG_LOG(if the second compile does not leave our definition intact error)
- AC_TRY_COMPILE([#include <sys/types.h>],[
-#ifndef _POSIX_C_SOURCE
-make an error
-#endif],,
- [cf_cv_posix_c_source=no])
- CFLAGS="$cf_save_CFLAGS"
- CPPFLAGS="$cf_save_CPPFLAGS"
- ])
-])
-
-if test "$cf_cv_posix_c_source" != no ; then
- CFLAGS="$cf_trim_CFLAGS"
- CPPFLAGS="$cf_trim_CPPFLAGS"
- if test "$cf_cv_cc_u_d_options" = yes ; then
- cf_temp_posix_c_source=`echo "$cf_cv_posix_c_source" | \
- sed -e 's/-D/-U/g' -e 's/=[[^ ]]*//g'`
- CPPFLAGS="$CPPFLAGS $cf_temp_posix_c_source"
- fi
- CPPFLAGS="$CPPFLAGS $cf_cv_posix_c_source"
-fi
-
-])dnl
-dnl ---------------------------------------------------------------------------
-dnl CF_POSIX_WAIT version: 2 updated: 2000/05/29 16:16:04
-dnl -------------
-dnl Check for POSIX wait support
-AC_DEFUN([CF_POSIX_WAIT],
-[
-AC_REQUIRE([AC_HEADER_SYS_WAIT])
-AC_CACHE_CHECK(for POSIX wait functions,cf_cv_posix_wait,[
-AC_TRY_LINK([
-#include <stdlib.h>
-#include <stdio.h>
-#include <sys/types.h>
-#ifdef HAVE_SYS_WAIT_H
-#include <sys/wait.h>
-#endif
-],[
- int stat_loc;
- pid_t pid = waitpid(-1, &stat_loc, WNOHANG|WUNTRACED);
- pid_t pid2 = wait(&stat_loc);
-],
-[cf_cv_posix_wait=yes],
-[cf_cv_posix_wait=no])
-])
-test "$cf_cv_posix_wait" = yes && AC_DEFINE(USE_POSIX_WAIT)
-])dnl
-dnl ---------------------------------------------------------------------------
-dnl CF_PROG_CC_U_D version: 1 updated: 2005/07/14 16:59:30
-dnl --------------
-dnl Check if C (preprocessor) -U and -D options are processed in the order
-dnl given rather than by type of option. Some compilers insist on apply all
-dnl of the -U options after all of the -D options. Others allow mixing them,
-dnl and may predefine symbols that conflict with those we define.
-AC_DEFUN([CF_PROG_CC_U_D],
-[
-AC_CACHE_CHECK(if $CC -U and -D options work together,cf_cv_cc_u_d_options,[
- cf_save_CPPFLAGS="$CPPFLAGS"
- CPPFLAGS="-UU_D_OPTIONS -DU_D_OPTIONS -DD_U_OPTIONS -UD_U_OPTIONS"
- AC_TRY_COMPILE([],[
-#ifndef U_D_OPTIONS
-make an undefined-error
-#endif
-#ifdef D_U_OPTIONS
-make a defined-error
-#endif
- ],[
- cf_cv_cc_u_d_options=yes],[
- cf_cv_cc_u_d_options=no])
- CPPFLAGS="$cf_save_CPPFLAGS"
-])
-])dnl
-dnl ---------------------------------------------------------------------------
-dnl CF_PROG_EXT version: 10 updated: 2004/01/03 19:28:18
-dnl -----------
-dnl Compute $PROG_EXT, used for non-Unix ports, such as OS/2 EMX.
-AC_DEFUN([CF_PROG_EXT],
-[
-AC_REQUIRE([CF_CHECK_CACHE])
-case $cf_cv_system_name in
-os2*)
- CFLAGS="$CFLAGS -Zmt"
- CPPFLAGS="$CPPFLAGS -D__ST_MT_ERRNO__"
- CXXFLAGS="$CXXFLAGS -Zmt"
- # autoconf's macro sets -Zexe and suffix both, which conflict:w
- LDFLAGS="$LDFLAGS -Zmt -Zcrtdll"
- ac_cv_exeext=.exe
- ;;
-esac
-
-AC_EXEEXT
-AC_OBJEXT
-
-PROG_EXT="$EXEEXT"
-AC_SUBST(PROG_EXT)
-test -n "$PROG_EXT" && AC_DEFINE_UNQUOTED(PROG_EXT,"$PROG_EXT")
-])dnl
-dnl ---------------------------------------------------------------------------
-dnl CF_REMOVE_DEFINE version: 2 updated: 2005/07/09 16:12:18
-dnl ----------------
-dnl Remove all -U and -D options that refer to the given symbol from a list
-dnl of C compiler options. This works around the problem that not all
-dnl compilers process -U and -D options from left-to-right, so a -U option
-dnl cannot be used to cancel the effect of a preceding -D option.
-dnl
-dnl $1 = target (which could be the same as the source variable)
-dnl $2 = source (including '$')
-dnl $3 = symbol to remove
-define([CF_REMOVE_DEFINE],
-[
-# remove $3 symbol from $2
-$1=`echo "$2" | \
- sed -e 's/-[[UD]]$3\(=[[^ ]]*\)\?[[ ]]/ /g' \
- -e 's/-[[UD]]$3\(=[[^ ]]*\)\?[$]//g'`
-])dnl
-dnl ---------------------------------------------------------------------------
-dnl CF_SIG_ATOMIC_T version: 2 updated: 2005/09/18 17:27:12
-dnl ---------------
-dnl signal handler, but there are some gcc depedencies in that recommendation.
-dnl Try anyway.
-AC_DEFUN([CF_SIG_ATOMIC_T],
-[
-AC_MSG_CHECKING(for signal global datatype)
-AC_CACHE_VAL(cf_cv_sig_atomic_t,[
- for cf_type in \
- "volatile sig_atomic_t" \
- "sig_atomic_t" \
- "int"
- do
- AC_TRY_COMPILE([
-#include <sys/types.h>
-#include <signal.h>
-#include <stdio.h>
-
-extern $cf_type x;
-$cf_type x;
-static void handler(int sig)
-{
- x = 5;
-}],
- [signal(SIGINT, handler);
- x = 1],
- [cf_cv_sig_atomic_t=$cf_type],
- [cf_cv_sig_atomic_t=no])
- test "$cf_cv_sig_atomic_t" != no && break
- done
- ])
-AC_MSG_RESULT($cf_cv_sig_atomic_t)
-test "$cf_cv_sig_atomic_t" != no && AC_DEFINE_UNQUOTED(SIG_ATOMIC_T, $cf_cv_sig_atomic_t)
-])dnl
-dnl ---------------------------------------------------------------------------
-dnl CF_SIZE_T version: 4 updated: 2000/01/22 00:19:54
-dnl ---------
-dnl On both Ultrix and CLIX, I find size_t defined in <stdio.h>
-AC_DEFUN([CF_SIZE_T],
-[
-AC_MSG_CHECKING(for size_t in <sys/types.h> or <stdio.h>)
-AC_CACHE_VAL(cf_cv_type_size_t,[
- AC_TRY_COMPILE([
-#include <sys/types.h>
-#ifdef STDC_HEADERS
-#include <stdlib.h>
-#include <stddef.h>
-#endif
-#include <stdio.h>],
- [size_t x],
- [cf_cv_type_size_t=yes],
- [cf_cv_type_size_t=no])
- ])
-AC_MSG_RESULT($cf_cv_type_size_t)
-test $cf_cv_type_size_t = no && AC_DEFINE(size_t, unsigned)
-])dnl
-dnl ---------------------------------------------------------------------------
-dnl CF_SVR4 version: 3 updated: 2000/05/31 10:16:52
-dnl -------
-dnl Check if this is an SVR4 system. We need the definition for xterm
-AC_DEFUN([CF_SVR4],
-[
-AC_CHECK_LIB(elf, elf_begin,[
-AC_CACHE_CHECK(if this is an SVR4 system, cf_cv_svr4,[
-AC_TRY_COMPILE([
-#include <elf.h>
-#include <sys/termio.h>
-],[
-static struct termio d_tio;
- d_tio.c_cc[VINTR] = 0;
- d_tio.c_cc[VQUIT] = 0;
- d_tio.c_cc[VERASE] = 0;
- d_tio.c_cc[VKILL] = 0;
- d_tio.c_cc[VEOF] = 0;
- d_tio.c_cc[VEOL] = 0;
- d_tio.c_cc[VMIN] = 0;
- d_tio.c_cc[VTIME] = 0;
- d_tio.c_cc[VLNEXT] = 0;
-],
-[cf_cv_svr4=yes],
-[cf_cv_svr4=no])
-])
-])
-test "$cf_cv_svr4" = yes && AC_DEFINE(SVR4)
-])dnl
-dnl ---------------------------------------------------------------------------
-dnl CF_SYSV version: 10 updated: 2005/09/18 15:42:35
-dnl -------
-dnl Check if this is a SYSV platform, e.g., as used in <X11/Xos.h>, and whether
-dnl defining it will be helpful. The following features are used to check:
-dnl
-dnl a) bona-fide SVSY doesn't use const for sys_errlist[]. Since this is a
-dnl legacy (pre-ANSI) feature, const should not apply. Modern systems only
-dnl declare strerror(). Xos.h declares the legacy form of str_errlist[], and
-dnl a compile-time error will result from trying to assign to a const array.
-dnl
-dnl b) compile with headers that exist on SYSV hosts.
-dnl
-dnl c) compile with type definitions that differ on SYSV hosts from standard C.
-AC_DEFUN([CF_SYSV],
-[
-AC_CHECK_HEADERS( \
-stdlib.h \
-X11/Intrinsic.h \
-)
-
-AC_REQUIRE([CF_SYS_ERRLIST])
-
-AC_CACHE_CHECK(if we should define SYSV,cf_cv_sysv,[
-AC_TRY_COMPILE([
-#undef SYSV
-#define SYSV 1 /* get Xos.h to declare sys_errlist[] */
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h> /* look for wchar_t */
-#endif
-#ifdef HAVE_X11_INTRINSIC_H
-#include <X11/Intrinsic.h> /* Intrinsic.h has other traps... */
-#endif
-#include <curses.h>
-#include <term.h> /* eliminate most BSD hacks */
-#include <errno.h> /* declare sys_errlist on older systems */
-#include <sys/termio.h> /* eliminate most of the remaining ones */
-],[
-static struct termio d_tio;
- d_tio.c_cc[VINTR] = 0;
- d_tio.c_cc[VQUIT] = 0;
- d_tio.c_cc[VERASE] = 0;
- d_tio.c_cc[VKILL] = 0;
- d_tio.c_cc[VEOF] = 0;
- d_tio.c_cc[VEOL] = 0;
- d_tio.c_cc[VMIN] = 0;
- d_tio.c_cc[VTIME] = 0;
-#if defined(HAVE_SYS_ERRLIST) && !defined(DECL_SYS_ERRLIST)
-sys_errlist[0] = ""; /* Cygwin mis-declares this */
-#endif
-],
-[cf_cv_sysv=yes],
-[cf_cv_sysv=no])
-])
-test "$cf_cv_sysv" = yes && AC_DEFINE(SYSV)
-])dnl
-dnl ---------------------------------------------------------------------------
-dnl CF_SYSV_UTMP version: 5 updated: 2001/12/27 12:55:07
-dnl ------------
-dnl Check if this is a SYSV flavor of UTMP
-AC_DEFUN([CF_SYSV_UTMP],
-[
-AC_CACHE_CHECK(if $cf_cv_have_utmp is SYSV flavor,cf_cv_sysv_utmp,[
-test "$cf_cv_have_utmp" = "utmp" && cf_prefix="ut" || cf_prefix="utx"
-AC_TRY_LINK([
-#include <sys/types.h>
-#include <${cf_cv_have_utmp}.h>],[
-struct $cf_cv_have_utmp x;
- set${cf_prefix}ent ();
- get${cf_prefix}id(&x);
- put${cf_prefix}line(&x);
- end${cf_prefix}ent();],
- [cf_cv_sysv_utmp=yes],
- [cf_cv_sysv_utmp=no])
-])
-test $cf_cv_sysv_utmp = yes && AC_DEFINE(USE_SYSV_UTMP)
-])dnl
-dnl ---------------------------------------------------------------------------
-dnl CF_SYS_ERRLIST version: 6 updated: 2001/12/30 13:03:23
-dnl --------------
-dnl Check for declaration of sys_nerr and sys_errlist in one of stdio.h and
-dnl errno.h. Declaration of sys_errlist on BSD4.4 interferes with our
-dnl declaration. Reported by Keith Bostic.
-AC_DEFUN([CF_SYS_ERRLIST],
-[
- CF_CHECK_ERRNO(sys_nerr)
- CF_CHECK_ERRNO(sys_errlist)
-])dnl
-dnl ---------------------------------------------------------------------------
-dnl CF_TERMIO_C_ISPEED version: 2 updated: 2000/05/29 16:16:04
-dnl ------------------
-dnl Check for SGI's broken redefinition of baud rates introduced in IRIX 6.5
-dnl (there doesn't appear to be a useful predefined symbol).
-AC_DEFUN([CF_TERMIO_C_ISPEED],
-[
-AC_CACHE_CHECK(for IRIX 6.5 baud-rate redefinitions,cf_cv_termio_c_ispeed,[
-AC_TRY_COMPILE([
-#include <sys/types.h>
-#include <sys/termio.h>],[
-struct termio foo;
-foo.c_ispeed = B38400;
-foo.c_ospeed = B9600;
-],[cf_cv_termio_c_ispeed=yes
-],[cf_cv_termio_c_ispeed=no])
-])
-test "$cf_cv_termio_c_ispeed" = yes && AC_DEFINE(HAVE_TERMIO_C_ISPEED)
-])dnl
-dnl ---------------------------------------------------------------------------
-dnl CF_TTY_GROUP version: 5 updated: 2003/03/19 23:52:35
-dnl ------------
-dnl Check if the system has a tty-group defined. This is used in xterm when
-dnl setting pty ownership.
-AC_DEFUN([CF_TTY_GROUP],
-[
-AC_CACHE_CHECK(for tty group name,cf_cv_tty_group_name,[
-
-# If we are configuring as root, it is hard to get a clue about the tty group.
-# But we'll guess based on how our connection is set up - assuming it is done
-# properly.
-
-cf_uid=`id | sed -e 's/^[^=]*=//' -e 's/(.*$//'`
-if test "$cf_uid" != 0 ; then
-cf_cv_tty_group_name=
-cf_tty_name=`tty`
-test "$cf_tty_name" = "not a tty" && cf_tty_name=/dev/tty
-test -z "$cf_tty_name" && cf_tty_name=/dev/tty
-if test -c "$cf_tty_name"
-then
- cf_option="-l -L"
-
- # Expect listing to have fields like this:
- #-rwxrwxrwx 1 user group 34293 Jul 18 16:29 pathname
- ls $cf_option $cf_tty_name >conftest.out
- read cf_mode cf_links cf_usr cf_grp cf_size cf_date1 cf_date2 cf_date3 cf_rest <conftest.out
- if test -z "$cf_rest" ; then
- cf_option="$cf_option -g"
- ls $cf_option $cf_tty_name >conftest.out
- read cf_mode cf_links cf_usr cf_grp cf_size cf_date1 cf_date2 cf_date3 cf_rest <conftest.out
- fi
- rm -f conftest.out
- cf_cv_tty_group_name=$cf_grp
-fi
-fi
-
-# If we cannot deduce the tty group, fall back on hardcoded cases
-
-if test -z "$cf_cv_tty_group_name"
-then
-case $host_os in #(vi
-osf*) #(vi
- cf_cv_tty_group_name="terminal"
- ;;
-*)
- cf_cv_tty_group_name="unknown"
- if ( egrep '^tty:' /etc/group 2>/dev/null 1>/dev/null ) then
- cf_cv_tty_group_name="tty"
- fi
- ;;
-esac
-fi
-])
-
-AC_DEFINE_UNQUOTED(TTY_GROUP_NAME,"$cf_cv_tty_group_name")
-
-# This is only a double-check that the group-name we obtained above really
-# does apply to the device. We cannot perform this test if we are in batch
-# mode, or if we are cross-compiling.
-
-AC_CACHE_CHECK(if we may use $cf_cv_tty_group_name group,cf_cv_tty_group,[
-cf_tty_name=`tty`
-if test "$cf_tty_name" != "not a tty"
-then
-AC_TRY_RUN([
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <grp.h>
-int main()
-{
- struct stat sb;
- struct group *ttygrp = getgrnam(TTY_GROUP_NAME);
- char *name = ttyname(0);
-
- endgrent();
- if (ttygrp != 0
- && name != 0
- && stat(name, &sb) == 0
- && sb.st_gid != getgid()
- && sb.st_gid == ttygrp->gr_gid) {
- exit(0);
- }
- exit(1);
-}
- ],
- [cf_cv_tty_group=yes],
- [cf_cv_tty_group=no],
- [cf_cv_tty_group=unknown])
-elif test "$cross_compiling" = yes; then
- cf_cv_tty_group=unknown
-else
- cf_cv_tty_group=yes
-fi
-])
-test $cf_cv_tty_group = yes && AC_DEFINE(USE_TTY_GROUP)
-])dnl
-dnl ---------------------------------------------------------------------------
-dnl CF_TYPE_FD_SET version: 3 updated: 1999/10/16 13:49:00
-dnl --------------
-dnl Check for the declaration of fd_set. Some platforms declare it in
-dnl <sys/types.h>, and some in <sys/select.h>, which requires <sys/types.h>.
-dnl Finally, if we are using this for an X application, Xpoll.h may include
-dnl <sys/select.h>, so we don't want to do it twice.
-AC_DEFUN([CF_TYPE_FD_SET],
-[
-AC_CACHE_CHECK(for declaration of fd_set,cf_cv_type_fd_set,
- [echo "trying sys/types alone" 1>&AC_FD_CC
-AC_TRY_COMPILE([
-#include <sys/types.h>],
- [fd_set x],
- [cf_cv_type_fd_set=sys/types.h],
- [echo "trying X11/Xpoll.h" 1>&AC_FD_CC
-AC_TRY_COMPILE([
-#ifdef HAVE_X11_XPOLL_H
-#include <X11/Xpoll.h>
-#endif],
- [fd_set x],
- [cf_cv_type_fd_set=X11/Xpoll.h],
- [echo "trying sys/select.h" 1>&AC_FD_CC
-AC_TRY_COMPILE([
-#include <sys/types.h>
-#include <sys/select.h>],
- [fd_set x],
- [cf_cv_type_fd_set=sys/select.h],
- [cf_cv_type_fd_set=unknown])])])])
-if test $cf_cv_type_fd_set = sys/select.h ; then
- AC_DEFINE(USE_SYS_SELECT_H)
-fi
-])
-dnl ---------------------------------------------------------------------------
-dnl CF_UPPER version: 5 updated: 2001/01/29 23:40:59
-dnl --------
-dnl Make an uppercase version of a variable
-dnl $1=uppercase($2)
-AC_DEFUN([CF_UPPER],
-[
-$1=`echo "$2" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%`
-])dnl
-dnl ---------------------------------------------------------------------------
-dnl CF_UTEMPTER version: 2 updated: 2000/01/22 22:50:59
-dnl -----------
-dnl Try to link with utempter library
-AC_DEFUN([CF_UTEMPTER],
-[
-AC_CACHE_CHECK(if we can link with utempter library,cf_cv_have_utempter,[
-cf_save_LIBS="$LIBS"
-LIBS="-lutempter $LIBS"
-AC_TRY_LINK([
-#include <utempter.h>
-],[
- addToUtmp("/dev/tty", 0, 1);
- removeFromUtmp();
-],[
- cf_cv_have_utempter=yes],[
- cf_cv_have_utempter=no])
-LIBS="$cf_save_LIBS"
-])
-if test "$cf_cv_have_utempter" = yes ; then
- AC_DEFINE(USE_UTEMPTER)
- LIBS="-lutempter $LIBS"
-fi
-])dnl
-dnl ---------------------------------------------------------------------------
-dnl CF_UTMP version: 8 updated: 2002/10/27 23:21:42
-dnl -------
-dnl Check for UTMP/UTMPX headers
-AC_DEFUN([CF_UTMP],
-[
-AC_REQUIRE([CF_LASTLOG])
-
-AC_CACHE_CHECK(for utmp implementation,cf_cv_have_utmp,[
- cf_cv_have_utmp=no
-for cf_header in utmpx utmp ; do
-cf_utmp_includes="
-#include <sys/types.h>
-#include <${cf_header}.h>
-#define getutent getutxent
-#ifdef USE_LASTLOG
-#include <lastlog.h> /* may conflict with utmpx.h on Linux */
-#endif
-"
- AC_TRY_COMPILE([$cf_utmp_includes],
- [struct $cf_header x;
- char *name = x.ut_name; /* utmp.h and compatible definitions */
- ],
- [cf_cv_have_utmp=$cf_header
- break],
- [
- AC_TRY_COMPILE([$cf_utmp_includes],
- [struct $cf_header x;
- char *name = x.ut_user; /* utmpx.h must declare this */
- ],
- [cf_cv_have_utmp=$cf_header
- break
- ])])
-done
-])
-
-if test $cf_cv_have_utmp != no ; then
- AC_DEFINE(HAVE_UTMP)
- test $cf_cv_have_utmp = utmpx && AC_DEFINE(UTMPX_FOR_UTMP)
- CF_UTMP_UT_HOST
- CF_UTMP_UT_NAME
- CF_UTMP_UT_XSTATUS
- CF_UTMP_UT_XTIME
- CF_UTMP_UT_SESSION
- CF_SYSV_UTMP
-fi
-])dnl
-dnl ---------------------------------------------------------------------------
-dnl CF_UTMP_GROUP version: 1 updated: 2005/10/06 20:29:29
-dnl -------------
-dnl Find the utmp/utmpx file and determine its group to allow setgid programs
-dnl to manipulate it, e.g., when there is no intermediary.
-AC_DEFUN([CF_UTMP_GROUP],[
-AC_REQUIRE([CF_UTMP])
-if test $cf_cv_have_utmp != no ; then
-AC_CACHE_CHECK(for utmp/utmpx group,cf_cv_utmp_group,[
-for cf_utmp_path in /var/adm /var/run
-do
- for cf_utmp_file in utmpx utmp
- do
- if test -f $cf_utmp_path/$cf_utmp_file
- then
- cf_cv_utmp_group=root
-
- cf_option="-l -L"
-
- # Expect listing to have fields like this:
- #-r--r--r-- 1 user group 34293 Jul 18 16:29 pathname
- ls $cf_option $cf_utmp_path/$cf_utmp_file >conftest
- read cf_mode cf_links cf_usr cf_grp cf_size cf_date1 cf_date2 cf_date3 cf_rest <conftest
- if test -z "$cf_rest" ; then
- cf_option="$cf_option -g"
- ls $cf_option $cf_utmp_path/$cf_utmp_file >conftest
- read cf_mode cf_links cf_usr cf_grp cf_size cf_date1 cf_date2 cf_date3 cf_rest <conftest
- fi
- rm -f conftest
-
- # If we have a pathname, and the date fields look right, assume we've
- # captured the group as well.
- if test -n "$cf_rest" ; then
- cf_test=`echo "${cf_date2}${cf_date3}" | sed -e 's/[[0-9:]]//g'`
- if test -z "$cf_test" ; then
- cf_cv_utmp_group=$cf_grp;
- fi
- fi
- break
- fi
- done
- test -n "$cf_cv_utmp_group" && break
-done
-])
-else
- AC_MSG_ERROR(cannot find utmp group)
-fi
-])dnl
-dnl ---------------------------------------------------------------------------
-dnl CF_UTMP_UT_HOST version: 6 updated: 2002/10/27 23:21:42
-dnl ---------------
-dnl Check if UTMP/UTMPX struct defines ut_host member
-AC_DEFUN([CF_UTMP_UT_HOST],
-[
-if test $cf_cv_have_utmp != no ; then
-AC_MSG_CHECKING(if utmp.ut_host is declared)
-AC_CACHE_VAL(cf_cv_have_utmp_ut_host,[
- AC_TRY_COMPILE([
-#include <sys/types.h>
-#include <${cf_cv_have_utmp}.h>],
- [struct $cf_cv_have_utmp x; char *y = &x.ut_host[0]],
- [cf_cv_have_utmp_ut_host=yes],
- [cf_cv_have_utmp_ut_host=no])
- ])
-AC_MSG_RESULT($cf_cv_have_utmp_ut_host)
-test $cf_cv_have_utmp_ut_host != no && AC_DEFINE(HAVE_UTMP_UT_HOST)
-fi
-])dnl
-dnl ---------------------------------------------------------------------------
-dnl CF_UTMP_UT_NAME version: 3 updated: 2002/10/27 23:21:42
-dnl ---------------
-dnl Check if UTMP/UTMPX struct defines ut_name member
-AC_DEFUN([CF_UTMP_UT_NAME],
-[
-if test $cf_cv_have_utmp != no ; then
-AC_CACHE_CHECK(if utmp.ut_name is declared,cf_cv_have_utmp_ut_name,[
- cf_cv_have_utmp_ut_name=no
-cf_utmp_includes="
-#include <sys/types.h>
-#include <${cf_cv_have_utmp}.h>
-#define getutent getutxent
-#ifdef USE_LASTLOG
-#include <lastlog.h> /* may conflict with utmpx.h on Linux */
-#endif
-"
-for cf_header in ut_name ut_user ; do
- AC_TRY_COMPILE([$cf_utmp_includes],
- [struct $cf_cv_have_utmp x;
- char *name = x.$cf_header;
- ],
- [cf_cv_have_utmp_ut_name=$cf_header
- break])
-done
-])
-
-case $cf_cv_have_utmp_ut_name in #(vi
-no) #(vi
- AC_MSG_ERROR(Cannot find declaration for ut.ut_name)
- ;;
-ut_user)
- AC_DEFINE(ut_name,ut_user)
- ;;
-esac
-fi
-])dnl
-dnl ---------------------------------------------------------------------------
-dnl CF_UTMP_UT_SESSION version: 4 updated: 2002/10/27 23:21:42
-dnl ------------------
-dnl Check if UTMP/UTMPX struct defines ut_session member
-AC_DEFUN([CF_UTMP_UT_SESSION],
-[
-if test $cf_cv_have_utmp != no ; then
-AC_CACHE_CHECK(if utmp.ut_session is declared, cf_cv_have_utmp_ut_session,[
- AC_TRY_COMPILE([
-#include <sys/types.h>
-#include <${cf_cv_have_utmp}.h>],
- [struct $cf_cv_have_utmp x; long y = x.ut_session],
- [cf_cv_have_utmp_ut_session=yes],
- [cf_cv_have_utmp_ut_session=no])
-])
-if test $cf_cv_have_utmp_ut_session != no ; then
- AC_DEFINE(HAVE_UTMP_UT_SESSION)
-fi
-fi
-])dnl
-dnl ---------------------------------------------------------------------------
-dnl CF_UTMP_UT_XSTATUS version: 3 updated: 2001/12/27 12:55:07
-dnl ------------------
-dnl Check for known variants on the UTMP/UTMPX struct's exit-status as reported
-dnl by various people:
-dnl
-dnl ut_exit.__e_exit (HPUX 11 - David Ellement, also in glibc2)
-dnl ut_exit.e_exit (SVR4)
-dnl ut_exit.ut_e_exit (os390 - Greg Smith)
-dnl ut_exit.ut_exit (Tru64 4.0f - Jeremie Petit, 4.0e - Tomas Vanhala)
-dnl
-dnl Note: utmp_xstatus is not a conventional compatibility definition in the
-dnl system header files.
-AC_DEFUN([CF_UTMP_UT_XSTATUS],
-[
-if test $cf_cv_have_utmp != no ; then
-AC_CACHE_CHECK(for exit-status in $cf_cv_have_utmp,cf_cv_have_utmp_ut_xstatus,[
-for cf_result in \
- ut_exit.__e_exit \
- ut_exit.e_exit \
- ut_exit.ut_e_exit \
- ut_exit.ut_exit
-do
-AC_TRY_COMPILE([
-#include <sys/types.h>
-#include <${cf_cv_have_utmp}.h>],
- [struct $cf_cv_have_utmp x; long y = x.$cf_result = 0],
- [cf_cv_have_utmp_ut_xstatus=$cf_result
- break],
- [cf_cv_have_utmp_ut_xstatus=no])
-done
-])
-if test $cf_cv_have_utmp_ut_xstatus != no ; then
- AC_DEFINE(HAVE_UTMP_UT_XSTATUS)
- AC_DEFINE_UNQUOTED(ut_xstatus,$cf_cv_have_utmp_ut_xstatus)
-fi
-fi
-])dnl
-dnl ---------------------------------------------------------------------------
-dnl CF_UTMP_UT_XTIME version: 6 updated: 2002/10/27 23:21:42
-dnl ----------------
-dnl Check if UTMP/UTMPX struct defines ut_xtime member
-AC_DEFUN([CF_UTMP_UT_XTIME],
-[
-if test $cf_cv_have_utmp != no ; then
-AC_CACHE_CHECK(if utmp.ut_xtime is declared, cf_cv_have_utmp_ut_xtime,[
- AC_TRY_COMPILE([
-#include <sys/types.h>
-#include <${cf_cv_have_utmp}.h>],
- [struct $cf_cv_have_utmp x; long y = x.ut_xtime = 0],
- [cf_cv_have_utmp_ut_xtime=yes],
- [AC_TRY_COMPILE([
-#include <sys/types.h>
-#include <${cf_cv_have_utmp}.h>],
- [struct $cf_cv_have_utmp x; long y = x.ut_tv.tv_sec],
- [cf_cv_have_utmp_ut_xtime=define],
- [cf_cv_have_utmp_ut_xtime=no])
- ])
-])
-if test $cf_cv_have_utmp_ut_xtime != no ; then
- AC_DEFINE(HAVE_UTMP_UT_XTIME)
- if test $cf_cv_have_utmp_ut_xtime = define ; then
- AC_DEFINE(ut_xtime,ut_tv.tv_sec)
- fi
-fi
-fi
-])dnl
-dnl ---------------------------------------------------------------------------
-dnl CF_VERBOSE version: 2 updated: 1997/09/05 10:45:14
-dnl ----------
-dnl Use AC_VERBOSE w/o the warnings
-AC_DEFUN([CF_VERBOSE],
-[test -n "$verbose" && echo " $1" 1>&AC_FD_MSG
-])dnl
-dnl ---------------------------------------------------------------------------
-dnl CF_WITH_IMAKE_CFLAGS version: 8 updated: 2005/11/02 15:04:41
-dnl --------------------
-dnl xterm and similar programs build more readily when propped up with imake's
-dnl hand-tuned definitions. If we do not use imake, provide fallbacks for the
-dnl most common definitions that we're not likely to do by autoconf tests.
-AC_DEFUN([CF_WITH_IMAKE_CFLAGS],[
-AC_REQUIRE([CF_ENABLE_NARROWPROTO])
-
-AC_MSG_CHECKING(if we should use imake to help)
-CF_ARG_DISABLE(imake,
- [ --disable-imake disable use of imake for definitions],
- [enable_imake=no],
- [enable_imake=yes])
-AC_MSG_RESULT($enable_imake)
-
-if test "$enable_imake" = yes ; then
- CF_IMAKE_CFLAGS(ifelse($1,,,$1))
-fi
-
-if test -n "$IMAKE" && test -n "$IMAKE_CFLAGS" ; then
- CF_ADD_CFLAGS($IMAKE_CFLAGS)
-else
- IMAKE_CFLAGS=
- IMAKE_LOADFLAGS=
- CF_VERBOSE(make fallback definitions)
-
- # We prefer config.guess' values when we can get them, to avoid
- # inconsistent results with uname (AIX for instance). However,
- # config.guess is not always consistent either.
- case $host_os in
- *[[0-9]].[[0-9]]*)
- UNAME_RELEASE="$host_os"
- ;;
- *)
- UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
- ;;
- esac
-
- case .$UNAME_RELEASE in
- *[[0-9]].[[0-9]]*)
- OSMAJORVERSION=`echo "$UNAME_RELEASE" |sed -e 's/^[[^0-9]]*//' -e 's/\..*//'`
- OSMINORVERSION=`echo "$UNAME_RELEASE" |sed -e 's/^[[^0-9]]*//' -e 's/^[[^.]]*\.//' -e 's/\..*//' -e 's/[[^0-9]].*//' `
- test -z "$OSMAJORVERSION" && OSMAJORVERSION=1
- test -z "$OSMINORVERSION" && OSMINORVERSION=0
- IMAKE_CFLAGS="-DOSMAJORVERSION=$OSMAJORVERSION -DOSMINORVERSION=$OSMINORVERSION $IMAKE_CFLAGS"
- ;;
- esac
-
- # FUNCPROTO is standard with X11R6, but XFree86 drops it, leaving some
- # fallback/fragments for NeedPrototypes, etc.
- IMAKE_CFLAGS="-DFUNCPROTO=15 $IMAKE_CFLAGS"
-
- # If this is not set properly, Xaw's scrollbars will not work
- if test "$enable_narrowproto" = yes ; then
- IMAKE_CFLAGS="-DNARROWPROTO=1 $IMAKE_CFLAGS"
- fi
-
- # Other special definitions:
- case $host_os in
- aix*)
- # imake on AIX 5.1 defines AIXV3. really.
- IMAKE_CFLAGS="-DAIXV3 -DAIXV4 $IMAKE_CFLAGS"
- ;;
- irix[[56]].*) #(vi
- # these are needed to make SIGWINCH work in xterm
- IMAKE_CFLAGS="-DSYSV -DSVR4 $IMAKE_CFLAGS"
- ;;
- esac
-
- CF_ADD_CFLAGS($IMAKE_CFLAGS)
-
- AC_SUBST(IMAKE_CFLAGS)
- AC_SUBST(IMAKE_LOADFLAGS)
-fi
-])dnl
-dnl ---------------------------------------------------------------------------
-dnl CF_WITH_PATH version: 6 updated: 1998/10/11 00:40:17
-dnl ------------
-dnl Wrapper for AC_ARG_WITH to ensure that user supplies a pathname, not just
-dnl defaulting to yes/no.
-dnl
-dnl $1 = option name
-dnl $2 = help-text
-dnl $3 = environment variable to set
-dnl $4 = default value, shown in the help-message, must be a constant
-dnl $5 = default value, if it's an expression & cannot be in the help-message
-dnl
-AC_DEFUN([CF_WITH_PATH],
-[AC_ARG_WITH($1,[$2 ](default: ifelse($4,,empty,$4)),,
-ifelse($4,,[withval="${$3}"],[withval="${$3-ifelse($5,,$4,$5)}"]))dnl
-CF_PATH_SYNTAX(withval)
-eval $3="$withval"
-AC_SUBST($3)dnl
-])dnl
-dnl ---------------------------------------------------------------------------
-dnl CF_XKB_BELL_EXT version: 2 updated: 2003/05/18 17:28:57
-dnl ---------------
-dnl Check for XKB bell extension
-AC_DEFUN([CF_XKB_BELL_EXT],[
-AC_CACHE_CHECK(for XKB Bell extension, cf_cv_xkb_bell_ext,[
-AC_TRY_LINK([
-#include <X11/XKBlib.h> /* has the prototype */
-#include <X11/extensions/XKBbells.h> /* has the XkbBI_xxx definitions */
-],[
-int x = XkbBI_Info
- |XkbBI_MinorError
- |XkbBI_MajorError
- |XkbBI_TerminalBell
- |XkbBI_MarginBell;
-],[cf_cv_xkb_bell_ext=yes],[cf_cv_xkb_bell_ext=no])
-])
-
-test "$cf_cv_xkb_bell_ext" = yes && AC_DEFINE(HAVE_XKB_BELL_EXT)
-])
-dnl ---------------------------------------------------------------------------
-dnl CF_XOPEN_SOURCE version: 23 updated: 2005/10/15 16:39:05
-dnl ---------------
-dnl Try to get _XOPEN_SOURCE defined properly that we can use POSIX functions,
-dnl or adapt to the vendor's definitions to get equivalent functionality.
-dnl
-dnl Parameters:
-dnl $1 is the nominal value for _XOPEN_SOURCE
-dnl $2 is the nominal value for _POSIX_C_SOURCE
-AC_DEFUN([CF_XOPEN_SOURCE],[
-
-AC_REQUIRE([CF_PROG_CC_U_D])
-
-cf_XOPEN_SOURCE=ifelse($1,,500,$1)
-cf_POSIX_C_SOURCE=ifelse($2,,199506L,$2)
-
-case $host_os in #(vi
-aix[[45]]*) #(vi
- CPPFLAGS="$CPPFLAGS -D_ALL_SOURCE"
- ;;
-freebsd*) #(vi
- # 5.x headers associate
- # _XOPEN_SOURCE=600 with _POSIX_C_SOURCE=200112L
- # _XOPEN_SOURCE=500 with _POSIX_C_SOURCE=199506L
- cf_POSIX_C_SOURCE=200112L
- cf_XOPEN_SOURCE=600
- CPPFLAGS="$CPPFLAGS -D_BSD_TYPES -D__BSD_VISIBLE -D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE -D_XOPEN_SOURCE=$cf_XOPEN_SOURCE"
- ;;
-hpux*) #(vi
- CPPFLAGS="$CPPFLAGS -D_HPUX_SOURCE"
- ;;
-irix[[56]].*) #(vi
- CPPFLAGS="$CPPFLAGS -D_SGI_SOURCE"
- ;;
-linux*|gnu*) #(vi
- CF_GNU_SOURCE
- ;;
-mirbsd*) #(vi
- # setting _XOPEN_SOURCE or _POSIX_SOURCE breaks <arpa/inet.h>
- ;;
-netbsd*) #(vi
- # setting _XOPEN_SOURCE breaks IPv6 for lynx on NetBSD 1.6, breaks xterm, is not needed for ncursesw
- ;;
-openbsd*) #(vi
- # setting _XOPEN_SOURCE breaks xterm on OpenBSD 2.8, is not needed for ncursesw
- ;;
-osf[[45]]*) #(vi
- CPPFLAGS="$CPPFLAGS -D_OSF_SOURCE"
- ;;
-nto-qnx*) #(vi
- CPPFLAGS="$CPPFLAGS -D_QNX_SOURCE"
- ;;
-sco*) #(vi
- # setting _XOPEN_SOURCE breaks Lynx on SCO Unix / OpenServer
- ;;
-solaris*) #(vi
- CPPFLAGS="$CPPFLAGS -D__EXTENSIONS__"
- ;;
-*)
- AC_CACHE_CHECK(if we should define _XOPEN_SOURCE,cf_cv_xopen_source,[
- AC_TRY_COMPILE([#include <sys/types.h>],[
-#ifndef _XOPEN_SOURCE
-make an error
-#endif],
- [cf_cv_xopen_source=no],
- [cf_save="$CPPFLAGS"
- CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE=$cf_XOPEN_SOURCE"
- AC_TRY_COMPILE([#include <sys/types.h>],[
-#ifdef _XOPEN_SOURCE
-make an error
-#endif],
- [cf_cv_xopen_source=no],
- [cf_cv_xopen_source=$cf_XOPEN_SOURCE])
- CPPFLAGS="$cf_save"
- ])
-])
- if test "$cf_cv_xopen_source" != no ; then
- CF_REMOVE_DEFINE(CFLAGS,$CFLAGS,_XOPEN_SOURCE)
- CF_REMOVE_DEFINE(CPPFLAGS,$CPPFLAGS,_XOPEN_SOURCE)
- test "$cf_cv_cc_u_d_options" = yes && \
- CPPFLAGS="$CPPFLAGS -U_XOPEN_SOURCE"
- CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE=$cf_cv_xopen_source"
- fi
- CF_POSIX_C_SOURCE($cf_POSIX_C_SOURCE)
- ;;
-esac
-])
-dnl ---------------------------------------------------------------------------
-dnl CF_X_ATHENA version: 12 updated: 2004/06/15 21:14:41
-dnl -----------
-dnl Check for Xaw (Athena) libraries
-dnl
-dnl Sets $cf_x_athena according to the flavor of Xaw which is used.
-AC_DEFUN([CF_X_ATHENA],
-[AC_REQUIRE([CF_X_TOOLKIT])
-cf_x_athena=${cf_x_athena-Xaw}
-
-AC_MSG_CHECKING(if you want to link with Xaw 3d library)
-withval=
-AC_ARG_WITH(Xaw3d,
- [ --with-Xaw3d link with Xaw 3d library])
-if test "$withval" = yes ; then
- cf_x_athena=Xaw3d
- AC_MSG_RESULT(yes)
-else
- AC_MSG_RESULT(no)
-fi
-
-AC_MSG_CHECKING(if you want to link with neXT Athena library)
-withval=
-AC_ARG_WITH(neXtaw,
- [ --with-neXtaw link with neXT Athena library])
-if test "$withval" = yes ; then
- cf_x_athena=neXtaw
- AC_MSG_RESULT(yes)
-else
- AC_MSG_RESULT(no)
-fi
-
-AC_MSG_CHECKING(if you want to link with Athena-Plus library)
-withval=
-AC_ARG_WITH(XawPlus,
- [ --with-XawPlus link with Athena-Plus library])
-if test "$withval" = yes ; then
- cf_x_athena=XawPlus
- AC_MSG_RESULT(yes)
-else
- AC_MSG_RESULT(no)
-fi
-
-AC_CHECK_LIB(Xext,XextCreateExtension,
- [LIBS="-lXext $LIBS"])
-
-cf_x_athena_lib=""
-
-CF_X_ATHENA_CPPFLAGS($cf_x_athena)
-CF_X_ATHENA_LIBS($cf_x_athena)
-])dnl
-dnl ---------------------------------------------------------------------------
-dnl CF_X_ATHENA_CPPFLAGS version: 2 updated: 2002/10/09 20:00:37
-dnl --------------------
-dnl Normally invoked by CF_X_ATHENA, with $1 set to the appropriate flavor of
-dnl the Athena widgets, e.g., Xaw, Xaw3d, neXtaw.
-AC_DEFUN([CF_X_ATHENA_CPPFLAGS],
-[
-cf_x_athena_root=ifelse($1,,Xaw,$1)
-cf_x_athena_include=""
-
-for cf_path in default \
- /usr/contrib/X11R6 \
- /usr/contrib/X11R5 \
- /usr/lib/X11R5 \
- /usr/local
-do
- if test -z "$cf_x_athena_include" ; then
- cf_save="$CPPFLAGS"
- cf_test=X11/$cf_x_athena_root/SimpleMenu.h
- if test $cf_path != default ; then
- CPPFLAGS="-I$cf_path/include $cf_save"
- AC_MSG_CHECKING(for $cf_test in $cf_path)
- else
- AC_MSG_CHECKING(for $cf_test)
- fi
- AC_TRY_COMPILE([
-#include <X11/Intrinsic.h>
-#include <$cf_test>],[],
- [cf_result=yes],
- [cf_result=no])
- AC_MSG_RESULT($cf_result)
- if test "$cf_result" = yes ; then
- cf_x_athena_include=$cf_path
- break
- else
- CPPFLAGS="$cf_save"
- fi
- fi
-done
-
-if test -z "$cf_x_athena_include" ; then
- AC_MSG_WARN(
-[Unable to successfully find Athena header files with test program])
-elif test "$cf_x_athena_include" != default ; then
- CPPFLAGS="$CPPFLAGS -I$cf_x_athena_include"
-fi
-])
-dnl ---------------------------------------------------------------------------
-dnl CF_X_ATHENA_LIBS version: 3 updated: 2003/02/16 15:24:54
-dnl ----------------
-dnl Normally invoked by CF_X_ATHENA, with $1 set to the appropriate flavor of
-dnl the Athena widgets, e.g., Xaw, Xaw3d, neXtaw.
-AC_DEFUN([CF_X_ATHENA_LIBS],
-[AC_REQUIRE([CF_X_TOOLKIT])
-cf_x_athena_root=ifelse($1,,Xaw,$1)
-cf_x_athena_lib=""
-
-for cf_path in default \
- /usr/contrib/X11R6 \
- /usr/contrib/X11R5 \
- /usr/lib/X11R5 \
- /usr/local
-do
- for cf_lib in \
- "-l$cf_x_athena_root -lXmu" \
- "-l$cf_x_athena_root -lXpm -lXmu" \
- "-l${cf_x_athena_root}_s -lXmu_s"
- do
- if test -z "$cf_x_athena_lib" ; then
- cf_save="$LIBS"
- cf_test=XawSimpleMenuAddGlobalActions
- if test $cf_path != default ; then
- LIBS="-L$cf_path/lib $cf_lib $LIBS"
- AC_MSG_CHECKING(for $cf_lib in $cf_path)
- else
- LIBS="$cf_lib $LIBS"
- AC_MSG_CHECKING(for $cf_test in $cf_lib)
- fi
- cf_SAVE="$LIBS"
- LIBS="$X_PRE_LIBS $LIBS $X_EXTRA_LIBS"
- AC_TRY_LINK([],[$cf_test()],
- [cf_result=yes],
- [cf_result=no])
- AC_MSG_RESULT($cf_result)
- if test "$cf_result" = yes ; then
- cf_x_athena_lib="$cf_lib"
- LIBS="$cf_SAVE"
- break
- else
- LIBS="$cf_save"
- fi
- fi
- done
-done
-
-if test -z "$cf_x_athena_lib" ; then
- AC_ERROR(
-[Unable to successfully link Athena library (-l$cf_x_athena_root) with test program])
-fi
-
-CF_UPPER(cf_x_athena_LIBS,HAVE_LIB_$cf_x_athena)
-AC_DEFINE_UNQUOTED($cf_x_athena_LIBS)
-])
-dnl ---------------------------------------------------------------------------
-dnl CF_X_FREETYPE version: 11 updated: 2004/04/25 16:43:59
-dnl -------------
-dnl Check for X FreeType headers and libraries (XFree86 4.x).
-dnl
-dnl If either or both of these configure-script options are not given, rely on
-dnl the output of xft-config or the older freetype-config to provide the
-dnl cflags/libs options.
-dnl --with-freetype-cflags
-dnl --with-freetype-libs
-AC_DEFUN([CF_X_FREETYPE],
-[
-cf_extra_freetype_libs=
-AC_PATH_PROG(FREETYPE_CONFIG, xft-config, none)
-if test "$FREETYPE_CONFIG" = none; then
- cf_extra_freetype_libs="-lXft"
- AC_PATH_PROG(FREETYPE_CONFIG, freetype-config, none)
-fi
-
-if test "$FREETYPE_CONFIG" != none ; then
-
-AC_ARG_WITH(freetype-cflags,
- [ --with-freetype-cflags -D/-I options for compiling with FreeType],
-[cf_cv_x_freetype_incs="$withval"
- CF_VERBOSE(freetype-cflags $cf_cv_x_freetype_incs)
-],[
-AC_CACHE_CHECK(for X FreeType headers,cf_cv_x_freetype_incs,[
- cf_cv_x_freetype_incs="`$FREETYPE_CONFIG --cflags 2>/dev/null`"
-])])
-
-AC_ARG_WITH(freetype-libs,
- [ --with-freetype-libs -L/-l options to link FreeType],
-[cf_cv_x_freetype_libs="$withval"
- CF_VERBOSE(freetype-libs $cf_cv_x_freetype_libs)
-],[
-AC_CACHE_CHECK(for X FreeType libraries,cf_cv_x_freetype_libs,[
-
-cf_save_LIBS="$LIBS"
-cf_save_INCS="$CPPFLAGS"
-
-cf_cv_x_freetype_libs="$cf_extra_freetype_libs `$FREETYPE_CONFIG --libs 2>/dev/null`"
-
-LIBS="$cf_cv_x_freetype_libs $LIBS"
-CPPFLAGS="$cf_cv_x_freetype_incs $CPPFLAGS"
-
-AC_TRY_LINK([
-#include <X11/Xlib.h>
-#include <X11/extensions/Xrender.h>
-#include <X11/Xft/Xft.h>],[
- XftPattern *pat = XftNameParse ("name");
- ],[],[cf_cv_x_freetype_libs=])
- LIBS="$cf_save_LIBS"
- CPPFLAGS="$cf_save_INCS"
-])])
-
-if test -n "$cf_cv_x_freetype_libs" ; then
- LIBS="$cf_cv_x_freetype_libs $LIBS"
- CF_ADD_CFLAGS($cf_cv_x_freetype_incs)
- AC_DEFINE(XRENDERFONT)
-else
- CPPFLAGS=`echo "$CPPFLAGS" | sed -e s/-DXRENDERFONT//`
-fi
-else
- CPPFLAGS=`echo "$CPPFLAGS" | sed -e s/-DXRENDERFONT//`
-fi
-
-# FIXME: revisit this if needed
-AC_SUBST(XRENDERFONT)
-AC_SUBST(HAVE_TYPE_FCCHAR32)
-AC_SUBST(HAVE_TYPE_XFTCHARSPEC)
-])
-dnl ---------------------------------------------------------------------------
-dnl CF_X_TOOLKIT version: 10 updated: 2004/04/25 15:37:17
-dnl ------------
-dnl Check for X Toolkit libraries
-dnl
-AC_DEFUN([CF_X_TOOLKIT],
-[
-AC_REQUIRE([AC_PATH_XTRA])
-AC_REQUIRE([CF_CHECK_CACHE])
-
-# SYSTEM_NAME=`echo "$cf_cv_system_name"|tr ' ' -`
-
-cf_have_X_LIBS=no
-
-LDFLAGS="$X_LIBS $LDFLAGS"
-CF_CHECK_CFLAGS($X_CFLAGS)
-
-AC_CHECK_FUNC(XOpenDisplay,,[
-AC_CHECK_LIB(X11,XOpenDisplay,
- [LIBS="-lX11 $LIBS"],,
- [$X_PRE_LIBS $LIBS $X_EXTRA_LIBS])])
-
-AC_CHECK_FUNC(XtAppInitialize,,[
-AC_CHECK_LIB(Xt, XtAppInitialize,
- [AC_DEFINE(HAVE_LIBXT)
- cf_have_X_LIBS=Xt
- LIBS="-lXt $X_PRE_LIBS $LIBS"],,
- [$X_PRE_LIBS $LIBS $X_EXTRA_LIBS])])
-
-if test $cf_have_X_LIBS = no ; then
- AC_WARN(
-[Unable to successfully link X Toolkit library (-lXt) with
-test program. You will have to check and add the proper libraries by hand
-to makefile.])
-fi
-])dnl
diff --git a/nx-X11/programs/xterm/button.c b/nx-X11/programs/xterm/button.c
deleted file mode 100644
index d8d0b32b3..000000000
--- a/nx-X11/programs/xterm/button.c
+++ /dev/null
@@ -1,3284 +0,0 @@
-/* $XTermId: button.c,v 1.197 2005/11/03 13:17:27 tom Exp $ */
-
-/* $Xorg: button.c,v 1.3 2000/08/17 19:55:08 cpqbld Exp $ */
-/*
- * Copyright 1999-2004,2005 by Thomas E. Dickey
- *
- * All Rights Reserved
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sublicense, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- * IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY
- * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- * Except as contained in this notice, the name(s) of the above copyright
- * holders shall not be used in advertising or otherwise to promote the
- * sale, use or other dealings in this Software without prior written
- * authorization.
- *
- *
- * Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
- *
- * All Rights Reserved
- *
- * Permission to use, copy, modify, and distribute this software and its
- * documentation for any purpose and without fee is hereby granted,
- * provided that the above copyright notice appear in all copies and that
- * both that copyright notice and this permission notice appear in
- * supporting documentation, and that the name of Digital Equipment
- * Corporation not be used in advertising or publicity pertaining to
- * distribution of the software without specific, written prior permission.
- *
- *
- * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
- * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
- * DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
- * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
- * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
- * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- * SOFTWARE.
- */
-/* $XFree86: xc/programs/xterm/button.c,v 3.82 2005/11/03 13:17:27 dickey Exp $ */
-
-/*
-button.c Handles button events in the terminal emulator.
- does cut/paste operations, change modes via menu,
- passes button events through to some applications.
- J. Gettys.
-*/
-
-#include <xterm.h>
-
-#include <stdio.h>
-
-#include <X11/Xatom.h>
-#include <X11/Xmu/Atoms.h>
-#include <X11/Xmu/StdSel.h>
-
-#include <xutf8.h>
-
-#include <data.h>
-#include <error.h>
-#include <menu.h>
-#include <xcharmouse.h>
-#include <charclass.h>
-
-#if OPT_WIDE_CHARS
-#include <wcwidth.h>
-#else
-#define CharacterClass(value) \
- charClass[value & ((sizeof(charClass)/sizeof(charClass[0]))-1)]
-#endif
-
-#define XTERM_CELL(row,col) getXtermCell(screen, row + screen->topline, col)
-#define XTERM_CELL_C1(row,col) getXtermCellComb1(screen, row + screen->topline, col)
-#define XTERM_CELL_C2(row,col) getXtermCellComb2(screen, row + screen->topline, col)
-
- /*
- * We reserve shift modifier for cut/paste operations. In principle we
- * can pass through control and meta modifiers, but in practice, the
- * popup menu uses control, and the window manager is likely to use meta,
- * so those events are not delivered to SendMousePosition.
- */
-#define OurModifiers (ShiftMask | ControlMask | Mod1Mask)
-#define AllModifiers (ShiftMask | LockMask | ControlMask | Mod1Mask | \
- Mod2Mask | Mod3Mask | Mod4Mask | Mod5Mask)
-
-#define KeyModifiers (event->xbutton.state & OurModifiers)
-
-#define KeyState(x) (((x) & (ShiftMask|ControlMask)) + (((x) & Mod1Mask) ? 2 : 0))
- /* adds together the bits:
- shift key -> 1
- meta key -> 2
- control key -> 4 */
-
-#define Coordinate(r,c) ((r) * MaxCols(&(term->screen)) + (c))
-
-#if OPT_DEC_LOCATOR
-static ANSI reply;
-#endif
-
-/* Selection/extension variables */
-
-/* Raw char position where the selection started */
-static int rawRow, rawCol;
-
-/* Selected area before CHAR, WORD, LINE selectUnit processing */
-static int startRRow, startRCol, endRRow, endRCol = 0;
-
-/* Selected area after CHAR, WORD, LINE selectUnit processing */
-static int startSRow, startSCol, endSRow, endSCol = 0;
-
-/* Valid rows for selection clipping */
-static int firstValidRow, lastValidRow;
-
-/* Start, end of extension */
-static int startERow, startECol, endERow, endECol;
-
-/* Saved values of raw selection for extend to restore to */
-static int saveStartRRow, saveStartRCol, saveEndRRow, saveEndRCol;
-
-/* Saved value of WORD selection for LINE processing to restore to */
-static int saveStartWRow, saveStartWCol;
-
-/* Multi-click handling */
-static int numberOfClicks = 0;
-static Time lastButtonUpTime = 0;
-
-#if OPT_READLINE
-static Time lastButtonDownTime = 0;
-static int ExtendingSelection = 0;
-static Time lastButton3UpTime = 0;
-static Time lastButton3DoubleDownTime = 0;
-static int lastButton3row, lastButton3col; /* At the release time */
-#endif /* OPT_READLINE */
-
-typedef int SelectUnit;
-
-#define SELECTCHAR 0
-#define SELECTWORD 1
-#define SELECTLINE 2
-#define NSELECTUNITS 3
-static SelectUnit selectUnit;
-
-/* Send emacs escape code when done selecting or extending? */
-static int replyToEmacs;
-
-static Char *SaveText(TScreen * screen, int row, int scol, int ecol, Char *
- lp, int *eol);
-static int Length(TScreen * screen, int row, int scol, int ecol);
-static void ComputeSelect(int startRow, int startCol, int endRow, int
- endCol, Bool extend);
-static void EditorButton(XButtonEvent * event);
-static void EndExtend(Widget w, XEvent * event, String * params, Cardinal
- num_params, Bool use_cursor_loc);
-static void ExtendExtend(int row, int col);
-static void PointToRowCol(int y, int x, int *r, int *c);
-static void ReHiliteText(int frow, int fcol, int trow, int tcol);
-static void SaltTextAway(int crow, int ccol, int row, int col, String *
- params, Cardinal num_params);
-static void SelectSet(Widget w, XEvent * event, String * params, Cardinal num_params);
-static void SelectionReceived PROTO_XT_SEL_CB_ARGS;
-static void StartSelect(int startrow, int startcol);
-static void TrackDown(XButtonEvent * event);
-static void _OwnSelection(XtermWidget termw, String * selections, Cardinal count);
-static void do_select_end(Widget w, XEvent * event, String * params,
- Cardinal *num_params, Bool use_cursor_loc);
-
-Bool
-SendMousePosition(Widget w, XEvent * event)
-{
- TScreen *screen;
-
- if (!IsXtermWidget(w))
- return False;
-
- screen = &((XtermWidget) w)->screen;
-
- /* If send_mouse_pos mode isn't on, we shouldn't be here */
- if (screen->send_mouse_pos == MOUSE_OFF)
- return False;
-
-#if OPT_DEC_LOCATOR
- if (screen->send_mouse_pos == DEC_LOCATOR) {
- return (SendLocatorPosition(w, event));
- }
-#endif /* OPT_DEC_LOCATOR */
-
- /* Make sure the event is an appropriate type */
- if ((screen->send_mouse_pos != BTN_EVENT_MOUSE)
- && (screen->send_mouse_pos != ANY_EVENT_MOUSE)
- && event->type != ButtonPress
- && event->type != ButtonRelease)
- return False;
-
- switch (screen->send_mouse_pos) {
- case X10_MOUSE: /* X10 compatibility sequences */
-
- if (KeyModifiers == 0) {
- if (event->type == ButtonPress)
- EditorButton((XButtonEvent *) event);
- return True;
- }
- return False;
-
- case VT200_HIGHLIGHT_MOUSE: /* DEC vt200 hilite tracking */
- if (event->type == ButtonPress &&
- KeyModifiers == 0 &&
- event->xbutton.button == Button1) {
- TrackDown((XButtonEvent *) event);
- return True;
- }
- if (KeyModifiers == 0 || KeyModifiers == ControlMask) {
- EditorButton((XButtonEvent *) event);
- return True;
- }
- return False;
-
- case VT200_MOUSE: /* DEC vt200 compatible */
-
- /* xterm extension for motion reporting. June 1998 */
- /* EditorButton() will distinguish between the modes */
- case BTN_EVENT_MOUSE:
- case ANY_EVENT_MOUSE:
- if (KeyModifiers == 0 || KeyModifiers == ControlMask) {
- EditorButton((XButtonEvent *) event);
- return True;
- }
- return False;
-
- default:
- return False;
- }
-}
-
-#if OPT_DEC_LOCATOR
-
-#define LocatorCoords( row, col, x, y, oor ) \
- if( screen->locator_pixels ) { \
- (oor)=False; (row) = (y)+1; (col) = (x)+1; \
- /* Limit to screen dimensions */ \
- if ((row) < 1) (row) = 1,(oor)=True; \
- else if ((row) > screen->border*2+Height(screen)) \
- (row) = screen->border*2+Height(screen),(oor)=True; \
- if ((col) < 1) (col) = 1,(oor)=True; \
- else if ((col) > OriginX(screen)*2+Width(screen)) \
- (col) = OriginX(screen)*2+Width(screen),(oor)=True; \
- } else { \
- (oor)=False; \
- /* Compute character position of mouse pointer */ \
- (row) = ((y) - screen->border) / FontHeight(screen); \
- (col) = ((x) - OriginX(screen)) / FontWidth(screen); \
- /* Limit to screen dimensions */ \
- if ((row) < 0) (row) = 0,(oor)=True; \
- else if ((row) > screen->max_row) \
- (row) = screen->max_row,(oor)=True; \
- if ((col) < 0) (col) = 0,(oor)=True; \
- else if ((col) > screen->max_col) \
- (col) = screen->max_col,(oor)=True; \
- (row)++; (col)++; \
- }
-
-Bool
-SendLocatorPosition(Widget w, XEvent * event)
-{
- TScreen *screen = &((XtermWidget) w)->screen;
- int row, col;
- Bool oor;
- int button;
- int state;
-
- /* Make sure the event is an appropriate type */
- if ((event->type != ButtonPress &&
- event->type != ButtonRelease &&
- !screen->loc_filter) ||
- (KeyModifiers != 0 && KeyModifiers != ControlMask))
- return (False);
-
- if ((event->type == ButtonPress &&
- !(screen->locator_events & LOC_BTNS_DN)) ||
- (event->type == ButtonRelease &&
- !(screen->locator_events & LOC_BTNS_UP)))
- return (True);
-
- if (event->type == MotionNotify) {
- CheckLocatorPosition(w, event);
- return (True);
- }
-
- /* get button # */
- button = event->xbutton.button - 1;
-
- LocatorCoords(row, col, event->xbutton.x, event->xbutton.y, oor);
-
- /*
- * DECterm mouse:
- *
- * ESCAPE '[' event ; mask ; row ; column '&' 'w'
- */
- reply.a_type = CSI;
-
- if (oor) {
- reply.a_nparam = 1;
- reply.a_param[0] = 0; /* Event - 0 = locator unavailable */
- reply.a_inters = '&';
- reply.a_final = 'w';
- unparseseq(&reply, screen->respond);
-
- if (screen->locator_reset) {
- MotionOff(screen, term);
- screen->send_mouse_pos = MOUSE_OFF;
- }
- return (True);
- }
-
- /*
- * event:
- * 1 no buttons
- * 2 left button down
- * 3 left button up
- * 4 middle button down
- * 5 middle button up
- * 6 right button down
- * 7 right button up
- * 8 M4 down
- * 9 M4 up
- */
- reply.a_nparam = 4;
- switch (event->type) {
- case ButtonPress:
- reply.a_param[0] = 2 + (button << 1);
- break;
- case ButtonRelease:
- reply.a_param[0] = 3 + (button << 1);
- break;
- default:
- return (True);
- }
- /*
- * mask:
- * bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0
- * M4 down left down middle down right down
- *
- * Notice that Button1 (left) and Button3 (right) are swapped in the mask.
- * Also, mask should be the state after the button press/release,
- * X provides the state not including the button press/release.
- */
- state = (event->xbutton.state
- & (Button1Mask | Button2Mask | Button3Mask | Button4Mask)) >> 8;
- state ^= 1 << button; /* update mask to "after" state */
- state = (state & ~(4 | 1)) | ((state & 1) ? 4 : 0) | ((state & 4) ? 1 : 0); /* swap Button1 & Button3 */
-
- reply.a_param[1] = state;
- reply.a_param[2] = row;
- reply.a_param[3] = col;
- reply.a_inters = '&';
- reply.a_final = 'w';
-
- unparseseq(&reply, screen->respond);
-
- if (screen->locator_reset) {
- MotionOff(screen, term);
- screen->send_mouse_pos = MOUSE_OFF;
- }
-
- /*
- * DECterm turns the Locator off if a button is pressed while a filter rectangle
- * is active. This might be a bug, but I don't know, so I'll emulate it anyways.
- */
- if (screen->loc_filter) {
- screen->send_mouse_pos = MOUSE_OFF;
- screen->loc_filter = False;
- screen->locator_events = 0;
- MotionOff(screen, term);
- }
-
- return (True);
-}
-
-/*
- * mask:
- * bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0
- * M4 down left down middle down right down
- *
- * Button1 (left) and Button3 (right) are swapped in the mask relative to X.
- */
-#define ButtonState(state, mask) \
-{ (state) = ((mask) & (Button1Mask | Button2Mask | Button3Mask | Button4Mask)) >> 8; \
- /* swap Button1 & Button3 */ \
- (state) = ((state) & ~(4|1)) | (((state)&1)?4:0) | (((state)&4)?1:0); \
-}
-
-void
-GetLocatorPosition(XtermWidget w)
-{
- TScreen *screen = &w->screen;
- Window root, child;
- int rx, ry, x, y;
- unsigned int mask;
- int row = 0, col = 0;
- Bool oor = False;
- Bool ret = False;
- int state;
-
- /*
- * DECterm turns the Locator off if the position is requested while a filter rectangle
- * is active. This might be a bug, but I don't know, so I'll emulate it anyways.
- */
- if (screen->loc_filter) {
- screen->send_mouse_pos = MOUSE_OFF;
- screen->loc_filter = False;
- screen->locator_events = 0;
- MotionOff(screen, term);
- }
-
- reply.a_type = CSI;
-
- if (screen->send_mouse_pos == DEC_LOCATOR) {
- ret = XQueryPointer(screen->display, VWindow(screen), &root,
- &child, &rx, &ry, &x, &y, &mask);
- if (ret) {
- LocatorCoords(row, col, x, y, oor);
- }
- }
- if (ret == False || oor) {
- reply.a_nparam = 1;
- reply.a_param[0] = 0; /* Event - 0 = locator unavailable */
- reply.a_inters = '&';
- reply.a_final = 'w';
- unparseseq(&reply, screen->respond);
-
- if (screen->locator_reset) {
- MotionOff(screen, term);
- screen->send_mouse_pos = MOUSE_OFF;
- }
- return;
- }
-
- ButtonState(state, mask);
-
- reply.a_nparam = 4;
- reply.a_param[0] = 1; /* Event - 1 = response to locator request */
- reply.a_param[1] = state;
- reply.a_param[2] = row;
- reply.a_param[3] = col;
- reply.a_inters = '&';
- reply.a_final = 'w';
- unparseseq(&reply, screen->respond);
-
- if (screen->locator_reset) {
- MotionOff(screen, term);
- screen->send_mouse_pos = MOUSE_OFF;
- }
-}
-
-void
-InitLocatorFilter(XtermWidget w)
-{
- TScreen *screen = &w->screen;
- Window root, child;
- int rx, ry, x, y;
- unsigned int mask;
- int row = 0, col = 0;
- Bool oor = 0;
- Bool ret;
- int state;
-
- ret = XQueryPointer(screen->display, VWindow(screen),
- &root, &child, &rx, &ry, &x, &y, &mask);
- if (ret) {
- LocatorCoords(row, col, x, y, oor);
- }
- if (ret == False || oor) {
- /* Locator is unavailable */
-
- if (screen->loc_filter_top != LOC_FILTER_POS ||
- screen->loc_filter_left != LOC_FILTER_POS ||
- screen->loc_filter_bottom != LOC_FILTER_POS ||
- screen->loc_filter_right != LOC_FILTER_POS) {
- /*
- * If any explicit coordinates were received,
- * report immediately with no coordinates.
- */
- reply.a_type = CSI;
- reply.a_nparam = 1;
- reply.a_param[0] = 0; /* Event - 0 = locator unavailable */
- reply.a_inters = '&';
- reply.a_final = 'w';
- unparseseq(&reply, screen->respond);
-
- if (screen->locator_reset) {
- MotionOff(screen, term);
- screen->send_mouse_pos = MOUSE_OFF;
- }
- } else {
- /*
- * No explicit coordinates were received, and the pointer is
- * unavailable. Report when the pointer re-enters the window.
- */
- screen->loc_filter = True;
- MotionOn(screen, term);
- }
- return;
- }
-
- /*
- * Adjust rectangle coordinates:
- * 1. Replace "LOC_FILTER_POS" with current coordinates
- * 2. Limit coordinates to screen size
- * 3. make sure top and left are less than bottom and right, resp.
- */
- if (screen->locator_pixels) {
- rx = OriginX(screen) * 2 + Width(screen);
- ry = screen->border * 2 + Height(screen);
- } else {
- rx = screen->max_col;
- ry = screen->max_row;
- }
-
-#define Adjust( coord, def, max ) \
- if( (coord) == LOC_FILTER_POS ) (coord) = (def); \
- else if ((coord) < 1) (coord) = 1; \
- else if ((coord) > (max)) (coord) = (max)
-
- Adjust(screen->loc_filter_top, row, ry);
- Adjust(screen->loc_filter_left, col, rx);
- Adjust(screen->loc_filter_bottom, row, ry);
- Adjust(screen->loc_filter_right, col, rx);
-
- if (screen->loc_filter_top > screen->loc_filter_bottom) {
- ry = screen->loc_filter_top;
- screen->loc_filter_top = screen->loc_filter_bottom;
- screen->loc_filter_bottom = ry;
- }
-
- if (screen->loc_filter_left > screen->loc_filter_right) {
- rx = screen->loc_filter_left;
- screen->loc_filter_left = screen->loc_filter_right;
- screen->loc_filter_right = rx;
- }
-
- if ((col < screen->loc_filter_left) ||
- (col > screen->loc_filter_right) ||
- (row < screen->loc_filter_top) ||
- (row > screen->loc_filter_bottom)) {
- /* Pointer is already outside the rectangle - report immediately */
- ButtonState(state, mask);
-
- reply.a_type = CSI;
- reply.a_nparam = 4;
- reply.a_param[0] = 10; /* Event - 10 = locator outside filter */
- reply.a_param[1] = state;
- reply.a_param[2] = row;
- reply.a_param[3] = col;
- reply.a_inters = '&';
- reply.a_final = 'w';
- unparseseq(&reply, screen->respond);
-
- if (screen->locator_reset) {
- MotionOff(screen, term);
- screen->send_mouse_pos = MOUSE_OFF;
- }
- return;
- }
-
- /*
- * Rectangle is set up. Allow pointer tracking
- * to detect if the mouse leaves the rectangle.
- */
- screen->loc_filter = True;
- MotionOn(screen, term);
-}
-
-void
-CheckLocatorPosition(Widget w, XEvent * event)
-{
- TScreen *screen = &((XtermWidget) w)->screen;
- int row, col;
- Bool oor;
- int state;
-
- LocatorCoords(row, col, event->xbutton.x, event->xbutton.y, oor);
-
- /*
- * Send report if the pointer left the filter rectangle, if
- * the pointer left the window, or if the filter rectangle
- * had no coordinates and the pointer re-entered the window.
- */
- if (oor || (screen->loc_filter_top == LOC_FILTER_POS) ||
- (col < screen->loc_filter_left) ||
- (col > screen->loc_filter_right) ||
- (row < screen->loc_filter_top) ||
- (row > screen->loc_filter_bottom)) {
- /* Filter triggered - disable it */
- screen->loc_filter = False;
- MotionOff(screen, term);
-
- reply.a_type = CSI;
- if (oor) {
- reply.a_nparam = 1;
- reply.a_param[0] = 0; /* Event - 0 = locator unavailable */
- } else {
- ButtonState(state, event->xbutton.state);
-
- reply.a_nparam = 4;
- reply.a_param[0] = 10; /* Event - 10 = locator outside filter */
- reply.a_param[1] = state;
- reply.a_param[2] = row;
- reply.a_param[3] = col;
- }
-
- reply.a_inters = '&';
- reply.a_final = 'w';
- unparseseq(&reply, screen->respond);
-
- if (screen->locator_reset) {
- MotionOff(screen, term);
- screen->send_mouse_pos = MOUSE_OFF;
- }
- }
-}
-#endif /* OPT_DEC_LOCATOR */
-
-#if OPT_READLINE
-static int
-isClick1_clean(XEvent * event)
-{
- TScreen *screen = &term->screen;
- int delta;
-
- if (!(event->type == ButtonPress || event->type == ButtonRelease)
- /* Disable on Shift-Click-1, including the application-mouse modes */
- || (KeyModifiers & ShiftMask)
- || (screen->send_mouse_pos != MOUSE_OFF) /* Kinda duplicate... */
- ||ExtendingSelection) /* Was moved */
- return 0;
- if (event->type != ButtonRelease)
- return 0;
- if (lastButtonDownTime == (Time) 0) /* first time or once in a blue moon */
- delta = term->screen.multiClickTime + 1;
- else if (event->xbutton.time > lastButtonDownTime) /* most of the time */
- delta = event->xbutton.time - lastButtonDownTime;
- else /* time has rolled over since lastButtonUpTime */
- delta = (((Time) ~ 0) - lastButtonDownTime) + event->xbutton.time;
- return delta <= term->screen.multiClickTime;
-}
-
-static int
-isDoubleClick3(XEvent * event)
-{
- int delta;
-
- if (event->type != ButtonRelease
- || (KeyModifiers & ShiftMask)
- || event->xbutton.button != Button3) {
- lastButton3UpTime = 0; /* Disable the cached info */
- return 0;
- }
- /* Process Btn3Release. */
- if (lastButton3DoubleDownTime == (Time) 0) /* No previous click
- or once in a blue moon */
- delta = term->screen.multiClickTime + 1;
- else if (event->xbutton.time > lastButton3DoubleDownTime) /* most of the time */
- delta = event->xbutton.time - lastButton3DoubleDownTime;
- else /* time has rolled over since lastButton3DoubleDownTime */
- delta = (((Time) ~ 0) - lastButton3DoubleDownTime) + event->xbutton.time;
- if (delta <= term->screen.multiClickTime) {
- /* Double click */
- int row, col;
-
- /* Cannot check ExtendingSelection, since mouse-3 always sets it */
- PointToRowCol(event->xbutton.y, event->xbutton.x, &row, &col);
- if (row == lastButton3row && col == lastButton3col) {
- lastButton3DoubleDownTime = 0; /* Disable the third click */
- return 1;
- }
- }
- /* Not a double click, memorize for future check. */
- lastButton3UpTime = event->xbutton.time;
- PointToRowCol(event->xbutton.y, event->xbutton.x,
- &lastButton3row, &lastButton3col);
- return 0;
-}
-
-static int
-CheckSecondPress3(XEvent * event)
-{
- int delta, row, col;
-
- if (event->type != ButtonPress
- || (KeyModifiers & ShiftMask)
- || event->xbutton.button != Button3) {
- lastButton3DoubleDownTime = 0; /* Disable the cached info */
- return 0;
- }
- /* Process Btn3Press. */
- if (lastButton3UpTime == (Time) 0) /* No previous click
- or once in a blue moon */
- delta = term->screen.multiClickTime + 1;
- else if (event->xbutton.time > lastButton3UpTime) /* most of the time */
- delta = event->xbutton.time - lastButton3UpTime;
- else /* time has rolled over since lastButton3UpTime */
- delta = (((Time) ~ 0) - lastButton3UpTime) + event->xbutton.time;
- if (delta <= term->screen.multiClickTime) {
- PointToRowCol(event->xbutton.y, event->xbutton.x, &row, &col);
- if (row == lastButton3row && col == lastButton3col) {
- /* A candidate for a double-click */
- lastButton3DoubleDownTime = event->xbutton.time;
- PointToRowCol(event->xbutton.y, event->xbutton.x,
- &lastButton3row, &lastButton3col);
- return 1;
- }
- lastButton3UpTime = 0; /* Disable the info about the previous click */
- }
- /* Either too long, or moved, disable. */
- lastButton3DoubleDownTime = 0;
- return 0;
-}
-
-static int
-rowOnCurrentLine(int line, int *deltap) /* must be XButtonEvent */
-{
- TScreen *screen = &term->screen;
- int l1, l2;
-
- *deltap = 0;
- if (line == screen->cur_row)
- return 1;
-
- if (line < screen->cur_row)
- l1 = line, l2 = screen->cur_row;
- else
- l2 = line, l1 = screen->cur_row;
- l1--;
- while (++l1 < l2)
- if (!ScrnTstWrapped(screen, l1))
- return 0;
- /* Everything is on one "wrapped line" now */
- *deltap = line - screen->cur_row;
- return 1;
-}
-
-static int
-eventRow(XEvent * event) /* must be XButtonEvent */
-{
- TScreen *screen = &term->screen;
-
- return (event->xbutton.y - screen->border) / FontHeight(screen);
-}
-
-static int
-eventColBetween(XEvent * event) /* must be XButtonEvent */
-{
- TScreen *screen = &term->screen;
-
- /* Correct by half a width - we are acting on a boundary, not on a cell. */
- return ((event->xbutton.x - OriginX(screen) + (FontWidth(screen) - 1) / 2)
- / FontWidth(screen));
-}
-
-static int
-ReadLineMovePoint(int col, int ldelta)
-{
- TScreen *screen = &term->screen;
- Char line[6];
- unsigned count = 0;
-
- col += ldelta * MaxCols(screen) - screen->cur_col;
- if (col == 0)
- return 0;
- if (screen->control_eight_bits) {
- line[count++] = CSI;
- } else {
- line[count++] = ESC;
- line[count++] = '['; /* XXX maybe sometimes O is better? */
- }
- line[count++] = (col > 0 ? 'C' : 'D');
- if (col < 0)
- col = -col;
- while (col--)
- v_write(screen->respond, line, 3);
- return 1;
-}
-
-static int
-ReadLineDelete(int r1, int c1, int r2, int c2)
-{
- TScreen *screen = &term->screen;
- int del;
-
- del = c2 - c1 + (r2 - r1) * MaxCols(screen);
- if (del <= 0) /* Just in case... */
- return 0;
- while (del--)
- v_write(screen->respond, (Char *) "\177", 1);
- return 1;
-}
-#endif /* OPT_READLINE */
-
-/* ^XM-G<line+' '><col+' '> */
-void
-DiredButton(Widget w GCC_UNUSED,
- XEvent * event, /* must be XButtonEvent */
- String * params GCC_UNUSED, /* selections */
- Cardinal *num_params GCC_UNUSED)
-{
- TScreen *screen = &term->screen;
- Char Line[6];
- unsigned line, col;
-
- if (event->type == ButtonPress || event->type == ButtonRelease) {
- line = (event->xbutton.y - screen->border) / FontHeight(screen);
- col = (event->xbutton.x - OriginX(screen)) / FontWidth(screen);
- Line[0] = CONTROL('X');
- Line[1] = ESC;
- Line[2] = 'G';
- Line[3] = ' ' + col;
- Line[4] = ' ' + line;
- v_write(screen->respond, Line, 5);
- }
-}
-
-#if OPT_READLINE
-void
-ReadLineButton(Widget w GCC_UNUSED,
- XEvent * event, /* must be XButtonEvent */
- String * params GCC_UNUSED, /* selections */
- Cardinal *num_params GCC_UNUSED)
-{
- TScreen *screen = &term->screen;
- Char Line[6];
- int line, col, ldelta = 0;
-
- if (!(event->type == ButtonPress || event->type == ButtonRelease)
- || (screen->send_mouse_pos != MOUSE_OFF) || ExtendingSelection)
- goto finish;
- if (event->type == ButtonRelease) {
- int delta;
-
- if (lastButtonDownTime == (Time) 0) /* first time and once in a blue moon */
- delta = screen->multiClickTime + 1;
- else if (event->xbutton.time > lastButtonDownTime) /* most of the time */
- delta = event->xbutton.time - lastButtonDownTime;
- else /* time has rolled over since lastButtonUpTime */
- delta = (((Time) ~ 0) - lastButtonDownTime) + event->xbutton.time;
- if (delta > screen->multiClickTime)
- goto finish; /* All this work for this... */
- }
- line = (event->xbutton.y - screen->border) / FontHeight(screen);
- if (line != screen->cur_row) {
- int l1, l2;
-
- if (line < screen->cur_row)
- l1 = line, l2 = screen->cur_row;
- else
- l2 = line, l1 = screen->cur_row;
- l1--;
- while (++l1 < l2)
- if (!ScrnTstWrapped(screen, l1))
- goto finish;
- /* Everything is on one "wrapped line" now */
- ldelta = line - screen->cur_row;
- }
- /* Correct by half a width - we are acting on a boundary, not on a cell. */
- col = (event->xbutton.x - OriginX(screen) + (FontWidth(screen) - 1) / 2)
- / FontWidth(screen) - screen->cur_col + ldelta * MaxCols(screen);
- if (col == 0)
- goto finish;
- Line[0] = ESC;
- /* XXX: sometimes it is better to send '['? */
- Line[1] = 'O';
- Line[2] = (col > 0 ? 'C' : 'D');
- if (col < 0)
- col = -col;
- while (col--)
- v_write(screen->respond, Line, 3);
- finish:
- if (event->type == ButtonRelease)
- do_select_end(w, event, params, num_params, False);
-}
-#endif /* OPT_READLINE */
-
-/* repeats <ESC>n or <ESC>p */
-void
-ViButton(Widget w GCC_UNUSED,
- XEvent * event, /* must be XButtonEvent */
- String * params GCC_UNUSED, /* selections */
- Cardinal *num_params GCC_UNUSED)
-{
- TScreen *screen = &term->screen;
- int pty = screen->respond;
- Char Line[6];
- int line;
-
- if (event->type == ButtonPress || event->type == ButtonRelease) {
-
- line = screen->cur_row -
- ((event->xbutton.y - screen->border) / FontHeight(screen));
- if (line != 0) {
- Line[0] = ESC; /* force an exit from insert-mode */
- v_write(pty, Line, 1);
-
- if (line < 0) {
- line = -line;
- Line[0] = CONTROL('n');
- } else {
- Line[0] = CONTROL('p');
- }
- while (--line >= 0)
- v_write(pty, Line, 1);
- }
- }
-}
-
-/*
- * This function handles button-motion events
- */
-/*ARGSUSED*/
-void
-HandleSelectExtend(Widget w,
- XEvent * event, /* must be XMotionEvent */
- String * params GCC_UNUSED,
- Cardinal *num_params GCC_UNUSED)
-{
- TScreen *screen;
- int row, col;
-
- if (!IsXtermWidget(w))
- return;
-
- screen = &((XtermWidget) w)->screen;
- screen->selection_time = event->xmotion.time;
- switch (eventMode) {
- /* If not in one of the DEC mouse-reporting modes */
- case LEFTEXTENSION:
- case RIGHTEXTENSION:
- PointToRowCol(event->xmotion.y, event->xmotion.x,
- &row, &col);
- ExtendExtend(row, col);
- break;
-
- /* If in motion reporting mode, send mouse position to
- character process as a key sequence \E[M... */
- case NORMAL:
- /* will get here if send_mouse_pos != MOUSE_OFF */
- if (screen->send_mouse_pos == BTN_EVENT_MOUSE
- || screen->send_mouse_pos == ANY_EVENT_MOUSE) {
- (void) SendMousePosition(w, event);
- }
- break;
- }
-}
-
-void
-HandleKeyboardSelectExtend(Widget w,
- XEvent * event GCC_UNUSED, /* must be XButtonEvent */
- String * params GCC_UNUSED,
- Cardinal *num_params GCC_UNUSED)
-{
- TScreen *screen;
-
- if (!IsXtermWidget(w))
- return;
-
- screen = &((XtermWidget) w)->screen;
- ExtendExtend(screen->cursor_row, screen->cursor_col);
-}
-
-static void
-do_select_end(Widget w,
- XEvent * event, /* must be XButtonEvent */
- String * params, /* selections */
- Cardinal *num_params,
- Bool use_cursor_loc)
-{
-#if OPT_READLINE
- int ldelta1, ldelta2;
- TScreen *screen = &term->screen;
-#endif
-
- if (!IsXtermWidget(w)) {
- return;
- }
-
- ((XtermWidget) w)->screen.selection_time = event->xbutton.time;
- switch (eventMode) {
- case NORMAL:
- (void) SendMousePosition(w, event);
- break;
- case LEFTEXTENSION:
- case RIGHTEXTENSION:
- EndExtend(w, event, params, *num_params, use_cursor_loc);
-#if OPT_READLINE
- if (isClick1_clean(event)
- && SCREEN_FLAG(screen, click1_moves)
- && rowOnCurrentLine(eventRow(event), &ldelta1)) {
- ReadLineMovePoint(eventColBetween(event), ldelta1);
- }
- if (isDoubleClick3(event)
- && SCREEN_FLAG(screen, dclick3_deletes)
- && rowOnCurrentLine(startSRow, &ldelta1)
- && rowOnCurrentLine(endSRow, &ldelta2)) {
- ReadLineMovePoint(endSCol, ldelta2);
- ReadLineDelete(startSRow, startSCol, endSRow, endSCol);
- }
-#endif /* OPT_READLINE */
- break;
- }
-}
-
-void
-HandleSelectEnd(Widget w,
- XEvent * event, /* must be XButtonEvent */
- String * params, /* selections */
- Cardinal *num_params)
-{
- do_select_end(w, event, params, num_params, False);
-}
-
-void
-HandleKeyboardSelectEnd(Widget w,
- XEvent * event, /* must be XButtonEvent */
- String * params, /* selections */
- Cardinal *num_params)
-{
- do_select_end(w, event, params, num_params, True);
-}
-
-struct _SelectionList {
- String *params;
- Cardinal count;
- Atom *targets;
- Time time;
-};
-
-/* convert a UTF-8 string to Latin-1, replacing non Latin-1 characters
- * by `#'. */
-
-#if OPT_WIDE_CHARS
-static Char *
-UTF8toLatin1(Char * s, unsigned len, unsigned long *result)
-{
- static Char *buffer;
- static size_t used;
-
- Char *p = s;
- Char *q;
-
- if (used == 0) {
- buffer = (Char *) XtMalloc(used = len);
- } else if (len > used) {
- buffer = (Char *) XtRealloc((char *) buffer, used = len);
- }
- q = buffer;
-
- /* We're assuming that the xterm widget never contains Unicode
- control characters. */
-
- while (p < s + len) {
- if ((*p & 0x80) == 0) {
- *q++ = *p++;
- } else if ((*p & 0x7C) == 0x40 && p < s + len - 1) {
- *q++ = ((*p & 0x03) << 6) | (p[1] & 0x3F);
- p += 2;
- } else if ((*p & 0x60) == 0x40) {
- *q++ = '#';
- p += 2;
- } else if ((*p & 0x50) == 0x40) {
- *q++ = '#';
- p += 3;
- } else { /* this cannot happen */
- *q++ = '#';
- p++;
- }
- }
- *result = q - buffer;
- return buffer;
-}
-#endif /* OPT_WIDE_CHARS */
-
-static Atom *
-_SelectionTargets(Widget w)
-{
- static Atom *eightBitSelectionTargets = NULL;
- TScreen *screen;
- int n;
-
- if (!IsXtermWidget(w))
- return NULL;
-
- screen = &((XtermWidget) w)->screen;
-
-#if OPT_WIDE_CHARS
- if (screen->wide_chars) {
- static Atom *utf8SelectionTargets = NULL;
-
- if (utf8SelectionTargets == NULL) {
- utf8SelectionTargets = (Atom *) XtMalloc(5 * sizeof(Atom));
- if (utf8SelectionTargets == NULL) {
- TRACE(("Couldn't allocate utf8SelectionTargets\n"));
- return NULL;
- }
- n = 0;
- utf8SelectionTargets[n++] = XA_UTF8_STRING(XtDisplay(w));
-#ifdef X_HAVE_UTF8_STRING
- if (screen->i18nSelections) {
- utf8SelectionTargets[n++] = XA_TEXT(XtDisplay(w));
- utf8SelectionTargets[n++] = XA_COMPOUND_TEXT(XtDisplay(w));
- }
-#endif
- utf8SelectionTargets[n++] = XA_STRING;
- utf8SelectionTargets[n] = None;
- }
- return utf8SelectionTargets;
- }
-#endif
-
- /* not screen->wide_chars */
- if (eightBitSelectionTargets == NULL) {
- eightBitSelectionTargets = (Atom *) XtMalloc(5 * sizeof(Atom));
- if (eightBitSelectionTargets == NULL) {
- TRACE(("Couldn't allocate eightBitSelectionTargets\n"));
- return NULL;
- }
- n = 0;
-#ifdef X_HAVE_UTF8_STRING
- eightBitSelectionTargets[n++] = XA_UTF8_STRING(XtDisplay(w));
-#endif
- if (screen->i18nSelections) {
- eightBitSelectionTargets[n++] = XA_TEXT(XtDisplay(w));
- eightBitSelectionTargets[n++] = XA_COMPOUND_TEXT(XtDisplay(w));
- }
- eightBitSelectionTargets[n++] = XA_STRING;
- eightBitSelectionTargets[n] = None;
- }
- return eightBitSelectionTargets;
-}
-
-/*
- * Lookup the cut-buffer number, which will be in the range 0-7.
- * If it is not a cut-buffer, it is the primary selection (-1).
- */
-static int
-CutBuffer(unsigned code)
-{
- int cutbuffer;
- switch (code) {
- case XA_CUT_BUFFER0:
- cutbuffer = 0;
- break;
- case XA_CUT_BUFFER1:
- cutbuffer = 1;
- break;
- case XA_CUT_BUFFER2:
- cutbuffer = 2;
- break;
- case XA_CUT_BUFFER3:
- cutbuffer = 3;
- break;
- case XA_CUT_BUFFER4:
- cutbuffer = 4;
- break;
- case XA_CUT_BUFFER5:
- cutbuffer = 5;
- break;
- case XA_CUT_BUFFER6:
- cutbuffer = 6;
- break;
- case XA_CUT_BUFFER7:
- cutbuffer = 7;
- break;
- default:
- cutbuffer = -1;
- break;
- }
- return cutbuffer;
-}
-
-#define ResetPaste64() term->screen.base64_paste = 0
-
-#if !OPT_PASTE64
-static
-#endif
-void
-xtermGetSelection(Widget w,
- Time ev_time,
- String * params, /* selections in precedence order */
- Cardinal num_params,
- Atom * targets)
-{
- Atom selection;
- int cutbuffer;
- Atom target;
-
- if (!IsXtermWidget(w))
- return;
-
-#if OPT_TRACE
- TRACE(("xtermGetSelection\n"));
- if (num_params > 0) {
- Cardinal n;
- for (n = 0; n < num_params; ++n) {
- TRACE(("param[%d]:%s\n", n, params[n]));
- }
- }
-#endif
-
- XmuInternStrings(XtDisplay(w), params, (Cardinal) 1, &selection);
- cutbuffer = CutBuffer(selection);
- TRACE(("Cutbuffer: %d, target: %lu\n", cutbuffer,
- targets ? (unsigned long) targets[0] : 0));
- if (cutbuffer >= 0) {
- int inbytes;
- unsigned long nbytes;
- int fmt8 = 8;
- Atom type = XA_STRING;
- char *line;
-
- /* 'line' is freed in SelectionReceived */
- line = XFetchBuffer(XtDisplay(w), &inbytes, cutbuffer);
- nbytes = (unsigned long) inbytes;
-
- if (nbytes > 0)
- SelectionReceived(w, NULL, &selection, &type, (XtPointer) line,
- &nbytes, &fmt8);
- else if (num_params > 1)
- xtermGetSelection(w, ev_time, params + 1, num_params - 1, NULL);
-#if OPT_PASTE64
- else
- ResetPaste64();
-#endif
- return;
- } else {
- struct _SelectionList *list;
-
- if (targets == NULL || targets[0] == None) {
- targets = _SelectionTargets(w);
- }
-
- if (targets != 0) {
- target = targets[0];
-
- if (targets[1] == None) { /* last target in list */
- params++;
- num_params--;
- targets = _SelectionTargets(w);
- } else {
- targets = &(targets[1]);
- }
-
- if (num_params) {
- /* 'list' is freed in SelectionReceived */
- list = XtNew(struct _SelectionList);
- if (list != 0) {
- list->params = params;
- list->count = num_params;
- list->targets = targets;
- list->time = ev_time;
- }
- } else {
- list = NULL;
- }
-
- XtGetSelectionValue(w, selection,
- target,
- SelectionReceived,
- (XtPointer) list, ev_time);
- }
- }
-}
-
-#if OPT_TRACE && OPT_WIDE_CHARS
-static void
-GettingSelection(Display * dpy, Atom type, Char * line, unsigned long len)
-{
- Char *cp;
- char *name;
-
- name = XGetAtomName(dpy, type);
-
- TRACE(("Getting %s (%ld)\n", name, (long int) type));
- for (cp = line; cp < line + len; cp++) {
- TRACE(("[%d:%lu]", cp + 1 - line, len));
- if (isprint(*cp)) {
- TRACE(("%c\n", *cp));
- } else {
- TRACE(("\\x%02x\n", *cp));
- }
- }
-}
-#else
-#define GettingSelection(dpy,type,line,len) /* nothing */
-#endif
-
-#ifdef VMS
-# define tty_vwrite(pty,lag,l) tt_write(lag,l)
-#else /* !( VMS ) */
-# define tty_vwrite(pty,lag,l) v_write(pty,lag,l)
-#endif /* defined VMS */
-
-#if OPT_PASTE64
-/* Return base64 code character given 6-bit number */
-static const char base64_code[] = "\
-ABCDEFGHIJKLMNOPQRSTUVWXYZ\
-abcdefghijklmnopqrstuvwxyz\
-0123456789+/";
-static void
-base64_flush(TScreen * screen)
-{
- Char x;
- switch (screen->base64_count) {
- case 0:
- break;
- case 2:
- x = base64_code[screen->base64_accu << 4];
- tty_vwrite(screen->respond, &x, 1);
- break;
- case 4:
- x = base64_code[screen->base64_accu << 2];
- tty_vwrite(screen->respond, &x, 1);
- break;
- }
- if (screen->base64_pad & 3)
- tty_vwrite(screen->respond,
- (Char *) "===",
- 4 - (screen->base64_pad & 3));
- screen->base64_count = 0;
- screen->base64_accu = 0;
- screen->base64_pad = 0;
-}
-#endif /* OPT_PASTE64 */
-
-static void
-_qWriteSelectionData(TScreen * screen, Char * lag, unsigned length)
-{
-#if OPT_PASTE64
- if (screen->base64_paste) {
- /* Send data as base64 */
- Char *p = lag;
- Char buf[64];
- unsigned x = 0;
- while (length--) {
- switch (screen->base64_count) {
- case 0:
- buf[x++] = base64_code[*p >> 2];
- screen->base64_accu = (*p & 0x3);
- screen->base64_count = 2;
- ++p;
- break;
- case 2:
- buf[x++] = base64_code[(screen->base64_accu << 4) + (*p >> 4)];
- screen->base64_accu = (*p & 0xF);
- screen->base64_count = 4;
- ++p;
- break;
- case 4:
- buf[x++] = base64_code[(screen->base64_accu << 2) + (*p >> 6)];
- buf[x++] = base64_code[*p & 0x3F];
- screen->base64_accu = 0;
- screen->base64_count = 0;
- ++p;
- break;
- }
- if (x >= 63) {
- /* Write 63 or 64 characters */
- screen->base64_pad += x;
- tty_vwrite(screen->respond, buf, x);
- x = 0;
- }
- }
- if (x != 0) {
- screen->base64_pad += x;
- tty_vwrite(screen->respond, buf, x);
- }
- } else
-#endif /* OPT_PASTE64 */
-#if OPT_READLINE
- if (SCREEN_FLAG(screen, paste_quotes)) {
- while (length--) {
- tty_vwrite(screen->respond, (Char *) "\026", 1); /* Control-V */
- tty_vwrite(screen->respond, lag++, 1);
- }
- } else
-#endif
- tty_vwrite(screen->respond, lag, length);
-}
-
-static void
-_WriteSelectionData(TScreen * screen, Char * line, int length)
-{
- /* Write data to pty a line at a time. */
- /* Doing this one line at a time may no longer be necessary
- because v_write has been re-written. */
-
- Char *lag, *end;
-
- /* in the VMS version, if tt_pasting isn't set to True then qio
- reads aren't blocked and an infinite loop is entered, where the
- pasted text shows up as new input, goes in again, shows up
- again, ad nauseum. */
-#ifdef VMS
- tt_pasting = True;
-#endif
-
- end = &line[length];
- lag = line;
-
-#if OPT_PASTE64
- if (screen->base64_paste) {
- _qWriteSelectionData(screen, lag, (unsigned) (end - lag));
- base64_flush(screen);
- } else
-#endif
- {
- if (!SCREEN_FLAG(screen, paste_literal_nl)) {
- Char *cp;
- for (cp = line; cp != end; cp++) {
- if (*cp == '\n') {
- *cp = '\r';
- _qWriteSelectionData(screen, lag, (unsigned) (cp - lag + 1));
- lag = cp + 1;
- }
- }
- }
-
- if (lag != end) {
- _qWriteSelectionData(screen, lag, (unsigned) (end - lag));
- }
- }
-#ifdef VMS
- tt_pasting = False;
- tt_start_read(); /* reenable reads or a character may be lost */
-#endif
-}
-
-#if OPT_READLINE
-static void
-_WriteKey(TScreen * screen, Char * in)
-{
- Char line[16];
- unsigned count = 0;
- unsigned length = strlen((char *) in);
-
- if (screen->control_eight_bits) {
- line[count++] = CSI;
- } else {
- line[count++] = ESC;
- line[count++] = '[';
- }
- while (length--)
- line[count++] = *in++;
- line[count++] = '~';
- tty_vwrite(screen->respond, line, count);
-}
-#endif /* OPT_READLINE */
-
-/* SelectionReceived: stuff received selection text into pty */
-
-/* ARGSUSED */
-static void
-SelectionReceived(Widget w,
- XtPointer client_data,
- Atom * selection GCC_UNUSED,
- Atom * type,
- XtPointer value,
- unsigned long *length,
- int *format GCC_UNUSED)
-{
- char **text_list = NULL;
- int text_list_count;
- XTextProperty text_prop;
- TScreen *screen;
- Display *dpy;
-#if OPT_TRACE && OPT_WIDE_CHARS
- Char *line = (Char *) value;
-#endif
-
- if (!IsXtermWidget(w))
- return;
- screen = &((XtermWidget) w)->screen;
- dpy = XtDisplay(w);
-
- if (*type == 0 /*XT_CONVERT_FAIL */
- || *length == 0
- || value == NULL)
- goto fail;
-
- text_prop.value = (unsigned char *) value;
- text_prop.encoding = *type;
- text_prop.format = *format;
- text_prop.nitems = *length;
-
-#if OPT_WIDE_CHARS
- if (screen->wide_chars) {
- if (*type == XA_UTF8_STRING(XtDisplay(w)) ||
- *type == XA_STRING ||
- *type == XA_COMPOUND_TEXT(XtDisplay(w))) {
- GettingSelection(dpy, *type, line, *length);
- if (Xutf8TextPropertyToTextList(dpy, &text_prop,
- &text_list,
- &text_list_count) < 0) {
- TRACE(("Conversion failed\n"));
- text_list = NULL;
- }
- }
- } else
-#endif /* OPT_WIDE_CHARS */
- {
- /* Convert the selection to locale's multibyte encoding. */
-
- /* There's no need to special-case UTF8_STRING. If Xlib
- doesn't know about it, we didn't request it. If a broken
- selection holder sends it anyhow, the conversion function
- will fail. */
-
- if (*type == XA_UTF8_STRING(XtDisplay(w)) ||
- *type == XA_STRING ||
- *type == XA_COMPOUND_TEXT(XtDisplay(w))) {
- Status rc;
- GettingSelection(dpy, *type, line, *length);
- if (*type == XA_STRING && screen->brokenSelections) {
- rc = XTextPropertyToStringList(&text_prop,
- &text_list, &text_list_count);
- } else {
- rc = XmbTextPropertyToTextList(dpy, &text_prop,
- &text_list,
- &text_list_count);
- }
- if (rc < 0) {
- TRACE(("Conversion failed\n"));
- text_list = NULL;
- }
- }
- }
-
- if (text_list != NULL && text_list_count != 0) {
- int i;
-
-#if OPT_PASTE64
- if (screen->base64_paste) {
- ;
- } else
-#endif
-#if OPT_READLINE
- if (SCREEN_FLAG(screen, paste_brackets)) {
- _WriteKey(screen, (Char *) "200");
- }
-#endif
- for (i = 0; i < text_list_count; i++) {
- int len = strlen(text_list[i]);
- _WriteSelectionData(screen, (Char *) text_list[i], len);
- }
-#if OPT_PASTE64
- if (screen->base64_paste) {
- ResetPaste64();
- } else
-#endif
-#if OPT_READLINE
- if (SCREEN_FLAG(screen, paste_brackets)) {
- _WriteKey(screen, (Char *) "201");
- }
-#endif
- XFreeStringList(text_list);
- } else
- goto fail;
-
- XtFree((char *) client_data);
- XtFree((char *) value);
-
- return;
-
- fail:
- if (client_data != 0) {
- struct _SelectionList *list = (struct _SelectionList *) client_data;
- xtermGetSelection(w, list->time,
- list->params, list->count, list->targets);
- XtFree((char *) client_data);
-#if OPT_PASTE64
- } else {
- ResetPaste64();
-#endif
- }
- return;
-}
-
-void
-HandleInsertSelection(Widget w,
- XEvent * event, /* assumed to be XButtonEvent* */
- String * params, /* selections in precedence order */
- Cardinal *num_params)
-{
-#if OPT_READLINE
- int ldelta;
- TScreen *screen = &((XtermWidget) w)->screen;
-#endif
-
- if (SendMousePosition(w, event))
- return;
-
-#if OPT_READLINE
- if ((event->type == ButtonPress || event->type == ButtonRelease)
- /* Disable on Shift-mouse, including the application-mouse modes */
- && !(KeyModifiers & ShiftMask)
- && (screen->send_mouse_pos == MOUSE_OFF)
- && SCREEN_FLAG(screen, paste_moves)
- && rowOnCurrentLine(eventRow(event), &ldelta))
- ReadLineMovePoint(eventColBetween(event), ldelta);
-#endif /* OPT_READLINE */
-
- xtermGetSelection(w, event->xbutton.time, params, *num_params, NULL);
-}
-
-static SelectUnit
-EvalSelectUnit(Time buttonDownTime, SelectUnit defaultUnit)
-{
- int delta;
-
- if (lastButtonUpTime == (Time) 0) /* first time and once in a blue moon */
- delta = term->screen.multiClickTime + 1;
- else if (buttonDownTime > lastButtonUpTime) /* most of the time */
- delta = buttonDownTime - lastButtonUpTime;
- else /* time has rolled over since lastButtonUpTime */
- delta = (((Time) ~ 0) - lastButtonUpTime) + buttonDownTime;
-
- if (delta > term->screen.multiClickTime) {
- numberOfClicks = 1;
- return defaultUnit;
- } else {
- ++numberOfClicks;
- return ((selectUnit + 1) % NSELECTUNITS);
- }
-}
-
-static void
-do_select_start(Widget w,
- XEvent * event, /* must be XButtonEvent* */
- int startrow,
- int startcol)
-{
- if (SendMousePosition(w, event))
- return;
- selectUnit = EvalSelectUnit(event->xbutton.time, SELECTCHAR);
- replyToEmacs = False;
-
-#if OPT_READLINE
- lastButtonDownTime = event->xbutton.time;
-#endif
-
- StartSelect(startrow, startcol);
-}
-
-/* ARGSUSED */
-void
-HandleSelectStart(Widget w,
- XEvent * event, /* must be XButtonEvent* */
- String * params GCC_UNUSED,
- Cardinal *num_params GCC_UNUSED)
-{
- TScreen *screen;
- int startrow, startcol;
-
- if (!IsXtermWidget(w))
- return;
-
- screen = &((XtermWidget) w)->screen;
- firstValidRow = 0;
- lastValidRow = screen->max_row;
- PointToRowCol(event->xbutton.y, event->xbutton.x, &startrow, &startcol);
-
-#if OPT_READLINE
- ExtendingSelection = 0;
-#endif
-
- do_select_start(w, event, startrow, startcol);
-}
-
-/* ARGSUSED */
-void
-HandleKeyboardSelectStart(Widget w,
- XEvent * event, /* must be XButtonEvent* */
- String * params GCC_UNUSED,
- Cardinal *num_params GCC_UNUSED)
-{
- TScreen *screen;
-
- if (!IsXtermWidget(w))
- return;
-
- screen = &((XtermWidget) w)->screen;
- do_select_start(w, event, screen->cursor_row, screen->cursor_col);
-}
-
-static void
-TrackDown(XButtonEvent * event)
-{
- int startrow, startcol;
-
- selectUnit = EvalSelectUnit(event->time, SELECTCHAR);
- if (numberOfClicks > 1) {
- PointToRowCol(event->y, event->x, &startrow, &startcol);
- replyToEmacs = True;
- StartSelect(startrow, startcol);
- } else {
- waitingForTrackInfo = True;
- EditorButton((XButtonEvent *) event);
- }
-}
-
-#define boundsCheck(x) if (x < 0) \
- x = 0; \
- else if (x >= screen->max_row) \
- x = screen->max_row
-
-void
-TrackMouse(int func, int startrow, int startcol, int firstrow, int lastrow)
-{
- TScreen *screen = &term->screen;
-
- if (!waitingForTrackInfo) { /* Timed out, so ignore */
- return;
- }
- waitingForTrackInfo = False;
- if (func == 0)
- return;
- boundsCheck(startrow);
- boundsCheck(firstrow);
- boundsCheck(lastrow);
- firstValidRow = firstrow;
- lastValidRow = lastrow;
- replyToEmacs = True;
- StartSelect(startrow, startcol);
-}
-
-static void
-StartSelect(int startrow, int startcol)
-{
- TScreen *screen = &term->screen;
-
- TRACE(("StartSelect row=%d, col=%d\n", startrow, startcol));
- if (screen->cursor_state)
- HideCursor();
- if (numberOfClicks == 1) {
- /* set start of selection */
- rawRow = startrow;
- rawCol = startcol;
-
- }
- /* else use old values in rawRow, Col */
- saveStartRRow = startERow = rawRow;
- saveStartRCol = startECol = rawCol;
- saveEndRRow = endERow = rawRow;
- saveEndRCol = endECol = rawCol;
- if (Coordinate(startrow, startcol) < Coordinate(rawRow, rawCol)) {
- eventMode = LEFTEXTENSION;
- startERow = startrow;
- startECol = startcol;
- } else {
- eventMode = RIGHTEXTENSION;
- endERow = startrow;
- endECol = startcol;
- }
- ComputeSelect(startERow, startECol, endERow, endECol, False);
-}
-
-static void
-EndExtend(Widget w,
- XEvent * event, /* must be XButtonEvent */
- String * params, /* selections */
- Cardinal num_params,
- Bool use_cursor_loc)
-{
- int row, col;
- unsigned count;
- TScreen *screen = &term->screen;
- Char line[9];
-
- if (use_cursor_loc) {
- row = screen->cursor_row;
- col = screen->cursor_col;
- } else {
- PointToRowCol(event->xbutton.y, event->xbutton.x, &row, &col);
- }
- ExtendExtend(row, col);
- lastButtonUpTime = event->xbutton.time;
- if (startSRow != endSRow || startSCol != endSCol) {
- if (replyToEmacs) {
- count = 0;
- if (screen->control_eight_bits) {
- line[count++] = CSI;
- } else {
- line[count++] = ESC;
- line[count++] = '[';
- }
- if (rawRow == startSRow && rawCol == startSCol
- && row == endSRow && col == endSCol) {
- /* Use short-form emacs select */
- line[count++] = 't';
- line[count++] = ' ' + endSCol + 1;
- line[count++] = ' ' + endSRow + 1;
- } else {
- /* long-form, specify everything */
- line[count++] = 'T';
- line[count++] = ' ' + startSCol + 1;
- line[count++] = ' ' + startSRow + 1;
- line[count++] = ' ' + endSCol + 1;
- line[count++] = ' ' + endSRow + 1;
- line[count++] = ' ' + col + 1;
- line[count++] = ' ' + row + 1;
- }
- v_write(screen->respond, line, count);
- TrackText(0, 0, 0, 0);
- }
- }
- SelectSet(w, event, params, num_params);
- eventMode = NORMAL;
-}
-
-void
-HandleSelectSet(Widget w,
- XEvent * event,
- String * params,
- Cardinal *num_params)
-{
- SelectSet(w, event, params, *num_params);
-}
-
-/* ARGSUSED */
-static void
-SelectSet(Widget w GCC_UNUSED,
- XEvent * event GCC_UNUSED,
- String * params,
- Cardinal num_params)
-{
- TRACE(("SelectSet\n"));
- /* Only do select stuff if non-null select */
- if (startSRow != endSRow || startSCol != endSCol) {
- SaltTextAway(startSRow, startSCol, endSRow, endSCol,
- params, num_params);
- } else {
- DisownSelection(term);
- }
-}
-
-#define Abs(x) ((x) < 0 ? -(x) : (x))
-
-/* ARGSUSED */
-static void
-do_start_extend(Widget w,
- XEvent * event, /* must be XButtonEvent* */
- String * params GCC_UNUSED,
- Cardinal *num_params GCC_UNUSED,
- Bool use_cursor_loc)
-{
- TScreen *screen;
- int row, col, coord;
-
- if (!IsXtermWidget(w))
- return;
-
- screen = &((XtermWidget) w)->screen;
- if (SendMousePosition(w, event))
- return;
- firstValidRow = 0;
- lastValidRow = screen->max_row;
-#if OPT_READLINE
- if ((KeyModifiers & ShiftMask)
- || event->xbutton.button != Button3
- || !(SCREEN_FLAG(screen, dclick3_deletes)))
-#endif
- selectUnit = EvalSelectUnit(event->xbutton.time, selectUnit);
- replyToEmacs = False;
-
-#if OPT_READLINE
- CheckSecondPress3(event);
-#endif
-
- if (numberOfClicks == 1
- || (SCREEN_FLAG(screen, dclick3_deletes) /* Dclick special */
- &&!(KeyModifiers & ShiftMask))) {
- /* Save existing selection so we can reestablish it if the guy
- extends past the other end of the selection */
- saveStartRRow = startERow = startRRow;
- saveStartRCol = startECol = startRCol;
- saveEndRRow = endERow = endRRow;
- saveEndRCol = endECol = endRCol;
- } else {
- /* He just needed the selection mode changed, use old values. */
- startERow = startRRow = saveStartRRow;
- startECol = startRCol = saveStartRCol;
- endERow = endRRow = saveEndRRow;
- endECol = endRCol = saveEndRCol;
-
- }
- if (use_cursor_loc) {
- row = screen->cursor_row;
- col = screen->cursor_col;
- } else {
- PointToRowCol(event->xbutton.y, event->xbutton.x, &row, &col);
- }
- coord = Coordinate(row, col);
-
- if (Abs(coord - Coordinate(startSRow, startSCol))
- < Abs(coord - Coordinate(endSRow, endSCol))
- || coord < Coordinate(startSRow, startSCol)) {
- /* point is close to left side of selection */
- eventMode = LEFTEXTENSION;
- startERow = row;
- startECol = col;
- } else {
- /* point is close to left side of selection */
- eventMode = RIGHTEXTENSION;
- endERow = row;
- endECol = col;
- }
- ComputeSelect(startERow, startECol, endERow, endECol, True);
-
-#if OPT_READLINE
- if (startSRow != endSRow || startSCol != endSCol)
- ExtendingSelection = 1;
-#endif
-}
-
-static void
-ExtendExtend(int row, int col)
-{
- int coord = Coordinate(row, col);
-
- TRACE(("ExtendExtend row=%d, col=%d\n", row, col));
- if (eventMode == LEFTEXTENSION
- && (coord + (selectUnit != SELECTCHAR)) > Coordinate(endSRow, endSCol)) {
- /* Whoops, he's changed his mind. Do RIGHTEXTENSION */
- eventMode = RIGHTEXTENSION;
- startERow = saveStartRRow;
- startECol = saveStartRCol;
- } else if (eventMode == RIGHTEXTENSION
- && coord < Coordinate(startSRow, startSCol)) {
- /* Whoops, he's changed his mind. Do LEFTEXTENSION */
- eventMode = LEFTEXTENSION;
- endERow = saveEndRRow;
- endECol = saveEndRCol;
- }
- if (eventMode == LEFTEXTENSION) {
- startERow = row;
- startECol = col;
- } else {
- endERow = row;
- endECol = col;
- }
- ComputeSelect(startERow, startECol, endERow, endECol, False);
-
-#if OPT_READLINE
- if (startSRow != endSRow || startSCol != endSCol)
- ExtendingSelection = 1;
-#endif
-}
-
-void
-HandleStartExtend(Widget w,
- XEvent * event, /* must be XButtonEvent* */
- String * params, /* unused */
- Cardinal *num_params) /* unused */
-{
- do_start_extend(w, event, params, num_params, False);
-}
-
-void
-HandleKeyboardStartExtend(Widget w,
- XEvent * event, /* must be XButtonEvent* */
- String * params, /* unused */
- Cardinal *num_params) /* unused */
-{
- do_start_extend(w, event, params, num_params, True);
-}
-
-void
-ScrollSelection(TScreen * screen, int amount, Bool always)
-{
- int minrow = -screen->savedlines - screen->topline;
- int maxrow = screen->max_row - screen->topline;
- int maxcol = screen->max_col;
-
-#define scroll_update_one(row, col) \
- row += amount; \
- if (row < minrow) { \
- row = minrow; \
- col = 0; \
- } \
- if (row > maxrow) { \
- row = maxrow; \
- col = maxcol; \
- }
-
- scroll_update_one(startRRow, startRCol);
- scroll_update_one(endRRow, endRCol);
- scroll_update_one(startSRow, startSCol);
- scroll_update_one(endSRow, endSCol);
-
- scroll_update_one(rawRow, rawCol);
-
- /*
- * If we are told to scroll the selection but it lies outside the scrolling
- * margins, then that could cause the selection to move (bad). It is not
- * simple to fix, because this function is called both for the scrollbar
- * actions as well as application scrolling. The 'always' flag is set in
- * the former case. The rest of the logic handles the latter.
- */
- if (ScrnHaveSelection(screen)) {
- int adjust;
-
- adjust = screen->startHRow + screen->topline;
- if (always
- || !ScrnHaveLineMargins(screen)
- || ScrnIsLineInMargins(screen, adjust)) {
- scroll_update_one(screen->startHRow, screen->startHCol);
- }
- adjust = screen->endHRow + screen->topline;
- if (always
- || !ScrnHaveLineMargins(screen)
- || ScrnIsLineInMargins(screen, adjust)) {
- scroll_update_one(screen->endHRow, screen->endHCol);
- }
- }
-
- screen->startHCoord = Coordinate(screen->startHRow, screen->startHCol);
- screen->endHCoord = Coordinate(screen->endHRow, screen->endHCol);
-}
-
-/*ARGSUSED*/
-void
-ResizeSelection(TScreen * screen GCC_UNUSED, int rows, int cols)
-{
- rows--; /* decr to get 0-max */
- cols--;
-
- if (startRRow > rows)
- startRRow = rows;
- if (startSRow > rows)
- startSRow = rows;
- if (endRRow > rows)
- endRRow = rows;
- if (endSRow > rows)
- endSRow = rows;
- if (rawRow > rows)
- rawRow = rows;
-
- if (startRCol > cols)
- startRCol = cols;
- if (startSCol > cols)
- startSCol = cols;
- if (endRCol > cols)
- endRCol = cols;
- if (endSCol > cols)
- endSCol = cols;
- if (rawCol > cols)
- rawCol = cols;
-}
-
-#if OPT_WIDE_CHARS
-Bool
-iswide(int i)
-{
- return (i == HIDDEN_CHAR) || (my_wcwidth(i) == 2);
-}
-
-#define isWideCell(row, col) iswide((int)XTERM_CELL(row, col))
-#endif
-
-static void
-PointToRowCol(int y,
- int x,
- int *r,
- int *c)
-/* Convert pixel coordinates to character coordinates.
- Rows are clipped between firstValidRow and lastValidRow.
- Columns are clipped between to be 0 or greater, but are not clipped to some
- maximum value. */
-{
- TScreen *screen = &term->screen;
- int row, col;
-
- row = (y - screen->border) / FontHeight(screen);
- if (row < firstValidRow)
- row = firstValidRow;
- else if (row > lastValidRow)
- row = lastValidRow;
- col = (x - OriginX(screen)) / FontWidth(screen);
- if (col < 0)
- col = 0;
- else if (col > MaxCols(screen)) {
- col = MaxCols(screen);
- }
-#if OPT_WIDE_CHARS
- /*
- * If we got a click on the right half of a doublewidth character,
- * pretend it happened on the left half.
- */
- if (col > 0
- && isWideCell(row, col - 1)
- && (XTERM_CELL(row, col) == HIDDEN_CHAR)) {
- col -= 1;
- }
-#endif
- *r = row;
- *c = col;
-}
-
-static int
-LastTextCol(int row)
-{
- TScreen *screen = &term->screen;
- int i;
- Char *ch;
-
- if ((row += screen->topline) + screen->savedlines >= 0) {
- for (i = screen->max_col,
- ch = SCRN_BUF_ATTRS(screen, row) + i;
- i >= 0 && !(*ch & CHARDRAWN);
- ch--, i--) ;
-#if OPT_DEC_CHRSET
- if (CSET_DOUBLE(SCRN_BUF_CSETS(screen, row)[0])) {
- i *= 2;
- }
-#endif
- } else {
- i = -1;
- }
- return (i);
-}
-
-#if !OPT_WIDE_CHARS
-/*
-** double click table for cut and paste in 8 bits
-**
-** This table is divided in four parts :
-**
-** - control characters [0,0x1f] U [0x80,0x9f]
-** - separators [0x20,0x3f] U [0xa0,0xb9]
-** - binding characters [0x40,0x7f] U [0xc0,0xff]
-** - exceptions
-*/
-/* *INDENT-OFF* */
-static int charClass[256] =
-{
-/* NUL SOH STX ETX EOT ENQ ACK BEL */
- 32, 1, 1, 1, 1, 1, 1, 1,
-/* BS HT NL VT NP CR SO SI */
- 1, 32, 1, 1, 1, 1, 1, 1,
-/* DLE DC1 DC2 DC3 DC4 NAK SYN ETB */
- 1, 1, 1, 1, 1, 1, 1, 1,
-/* CAN EM SUB ESC FS GS RS US */
- 1, 1, 1, 1, 1, 1, 1, 1,
-/* SP ! " # $ % & ' */
- 32, 33, 34, 35, 36, 37, 38, 39,
-/* ( ) * + , - . / */
- 40, 41, 42, 43, 44, 45, 46, 47,
-/* 0 1 2 3 4 5 6 7 */
- 48, 48, 48, 48, 48, 48, 48, 48,
-/* 8 9 : ; < = > ? */
- 48, 48, 58, 59, 60, 61, 62, 63,
-/* @ A B C D E F G */
- 64, 48, 48, 48, 48, 48, 48, 48,
-/* H I J K L M N O */
- 48, 48, 48, 48, 48, 48, 48, 48,
-/* P Q R S T U V W */
- 48, 48, 48, 48, 48, 48, 48, 48,
-/* X Y Z [ \ ] ^ _ */
- 48, 48, 48, 91, 92, 93, 94, 48,
-/* ` a b c d e f g */
- 96, 48, 48, 48, 48, 48, 48, 48,
-/* h i j k l m n o */
- 48, 48, 48, 48, 48, 48, 48, 48,
-/* p q r s t u v w */
- 48, 48, 48, 48, 48, 48, 48, 48,
-/* x y z { | } ~ DEL */
- 48, 48, 48, 123, 124, 125, 126, 1,
-/* x80 x81 x82 x83 IND NEL SSA ESA */
- 1, 1, 1, 1, 1, 1, 1, 1,
-/* HTS HTJ VTS PLD PLU RI SS2 SS3 */
- 1, 1, 1, 1, 1, 1, 1, 1,
-/* DCS PU1 PU2 STS CCH MW SPA EPA */
- 1, 1, 1, 1, 1, 1, 1, 1,
-/* x98 x99 x9A CSI ST OSC PM APC */
- 1, 1, 1, 1, 1, 1, 1, 1,
-/* - i c/ L ox Y- | So */
- 160, 161, 162, 163, 164, 165, 166, 167,
-/* .. c0 ip << _ R0 - */
- 168, 169, 170, 171, 172, 173, 174, 175,
-/* o +- 2 3 ' u q| . */
- 176, 177, 178, 179, 180, 181, 182, 183,
-/* , 1 2 >> 1/4 1/2 3/4 ? */
- 184, 185, 186, 187, 188, 189, 190, 191,
-/* A` A' A^ A~ A: Ao AE C, */
- 48, 48, 48, 48, 48, 48, 48, 48,
-/* E` E' E^ E: I` I' I^ I: */
- 48, 48, 48, 48, 48, 48, 48, 48,
-/* D- N~ O` O' O^ O~ O: X */
- 48, 48, 48, 48, 48, 48, 48, 215,
-/* O/ U` U' U^ U: Y' P B */
- 48, 48, 48, 48, 48, 48, 48, 48,
-/* a` a' a^ a~ a: ao ae c, */
- 48, 48, 48, 48, 48, 48, 48, 48,
-/* e` e' e^ e: i` i' i^ i: */
- 48, 48, 48, 48, 48, 48, 48, 48,
-/* d n~ o` o' o^ o~ o: -: */
- 48, 48, 48, 48, 48, 48, 48, 247,
-/* o/ u` u' u^ u: y' P y: */
- 48, 48, 48, 48, 48, 48, 48, 48};
-/* *INDENT-ON* */
-
-int
-SetCharacterClassRange(int low, /* in range of [0..255] */
- int high,
- int value) /* arbitrary */
-{
-
- if (low < 0 || high > 255 || high < low)
- return (-1);
-
- for (; low <= high; low++)
- charClass[low] = value;
-
- return (0);
-}
-#endif
-
-#if OPT_WIDE_CHARS
-static int
-class_of(TScreen * screen, int row, int col)
-{
- int value;
-#if OPT_DEC_CHRSET
- if (CSET_DOUBLE(SCRN_BUF_CSETS(screen, row + screen->topline)[0])) {
- col /= 2;
- }
-#endif
- value = XTERM_CELL(row, col);
- if_OPT_WIDE_CHARS(screen, {
- return CharacterClass(value);
- });
- return CharacterClass(value);
-}
-#define ClassSelects(screen, row, col, cclass) \
- (class_of(screen, row, col) == cclass \
- || XTERM_CELL(row, col) == HIDDEN_CHAR)
-#else
-#define class_of(screen,row,col) charClass[XTERM_CELL(row, col)]
-#define ClassSelects(screen, row, col, cclass) \
- (class_of(screen,row, col) == cclass)
-#endif
-
-/*
- * sets startSRow startSCol endSRow endSCol
- * ensuring that they have legal values
- */
-static void
-ComputeSelect(int startRow,
- int startCol,
- int endRow,
- int endCol,
- Bool extend)
-{
- TScreen *screen = &term->screen;
- int length;
- int cclass;
-
- TRACE(("ComputeSelect(startRow=%d, startCol=%d, endRow=%d, endCol=%d, %sextend)\n",
- startRow, startCol, endRow, endCol, extend ? "" : "no"));
-
-#if OPT_WIDE_CHARS
- if (startCol > 1
- && isWideCell(startRow, startCol - 1)
- && XTERM_CELL(startRow, startCol - 0) == HIDDEN_CHAR) {
- fprintf(stderr, "Adjusting start. Changing downwards from %i.\n", startCol);
- startCol -= 1;
- if (endCol == (startCol + 1))
- endCol--;
- }
-
- if (endCol > 1
- && isWideCell(endRow, endCol - 1)
- && XTERM_CELL(endRow, endCol) == HIDDEN_CHAR) {
- endCol += 1;
- }
-#endif
-
- if (Coordinate(startRow, startCol) <= Coordinate(endRow, endCol)) {
- startSRow = startRRow = startRow;
- startSCol = startRCol = startCol;
- endSRow = endRRow = endRow;
- endSCol = endRCol = endCol;
- } else { /* Swap them */
- startSRow = startRRow = endRow;
- startSCol = startRCol = endCol;
- endSRow = endRRow = startRow;
- endSCol = endRCol = startCol;
- }
-
- switch (selectUnit) {
- case SELECTCHAR:
- if (startSCol > (LastTextCol(startSRow) + 1)) {
- startSCol = 0;
- startSRow++;
- }
- if (endSCol > (LastTextCol(endSRow) + 1)) {
- endSCol = 0;
- endSRow++;
- }
- break;
- case SELECTWORD:
- if (startSCol > (LastTextCol(startSRow) + 1)) {
- startSCol = 0;
- startSRow++;
- } else {
- cclass = class_of(screen, startSRow, startSCol);
- do {
- --startSCol;
- if (startSCol < 0
- && ScrnTstWrapped(screen, startSRow - 1)) {
- --startSRow;
- startSCol = LastTextCol(startSRow);
- }
- } while (startSCol >= 0
- && ClassSelects(screen, startSRow, startSCol, cclass));
- ++startSCol;
- }
-
-#if OPT_WIDE_CHARS
- if (startSCol && XTERM_CELL(startSRow, startSCol) == HIDDEN_CHAR)
- startSCol++;
-#endif
-
- if (endSCol > (LastTextCol(endSRow) + 1)) {
- endSCol = 0;
- endSRow++;
- } else {
- length = LastTextCol(endSRow);
- cclass = class_of(screen, endSRow, endSCol);
- do {
- ++endSCol;
- if (endSCol > length
- && ScrnTstWrapped(screen, endSRow)) {
- endSCol = 0;
- ++endSRow;
- length = LastTextCol(endSRow);
- }
- } while (endSCol <= length
- && ClassSelects(screen, endSRow, endSCol, cclass));
- /* Word select selects if pointing to any char
- in "word", especially in that it includes
- the last character in a word. So no --endSCol
- and do special eol handling */
- if (endSCol > length + 1) {
- endSCol = 0;
- ++endSRow;
- }
- }
-
-#if OPT_WIDE_CHARS
- if (endSCol && XTERM_CELL(endSRow, endSCol) == HIDDEN_CHAR)
- endSCol++;
-#endif
-
- saveStartWRow = startSRow;
- saveStartWCol = startSCol;
- break;
- case SELECTLINE:
- while (ScrnTstWrapped(screen, endSRow)) {
- ++endSRow;
- }
- if (term->screen.cutToBeginningOfLine
- || startSRow < saveStartWRow) {
- startSCol = 0;
- while (ScrnTstWrapped(screen, startSRow - 1)) {
- --startSRow;
- }
- } else if (!extend) {
- if ((startRow < saveStartWRow)
- || (startRow == saveStartWRow
- && startCol < saveStartWCol)) {
- startSCol = 0;
- while (ScrnTstWrapped(screen, startSRow - 1)) {
- --startSRow;
- }
- } else {
- startSRow = saveStartWRow;
- startSCol = saveStartWCol;
- }
- }
- if (term->screen.cutNewline) {
- endSCol = 0;
- ++endSRow;
- } else {
- endSCol = LastTextCol(endSRow) + 1;
- }
- break;
- }
-
- /* check boundaries */
- ScrollSelection(screen, 0, False);
-
- TrackText(startSRow, startSCol, endSRow, endSCol);
- return;
-}
-
-void
-TrackText(int frow,
- int fcol,
- int trow,
- int tcol)
- /* Guaranteed (frow, fcol) <= (trow, tcol) */
-{
- int from, to;
- TScreen *screen = &term->screen;
- int old_startrow, old_startcol, old_endrow, old_endcol;
-
- TRACE(("TrackText(frow=%d, fcol=%d, trow=%d, tcol=%d)\n",
- frow, fcol, trow, tcol));
-
- old_startrow = screen->startHRow;
- old_startcol = screen->startHCol;
- old_endrow = screen->endHRow;
- old_endcol = screen->endHCol;
- if (frow == old_startrow && fcol == old_startcol &&
- trow == old_endrow && tcol == old_endcol)
- return;
- screen->startHRow = frow;
- screen->startHCol = fcol;
- screen->endHRow = trow;
- screen->endHCol = tcol;
- from = Coordinate(frow, fcol);
- to = Coordinate(trow, tcol);
- if (to <= screen->startHCoord || from > screen->endHCoord) {
- /* No overlap whatsoever between old and new hilite */
- ReHiliteText(old_startrow, old_startcol, old_endrow, old_endcol);
- ReHiliteText(frow, fcol, trow, tcol);
- } else {
- if (from < screen->startHCoord) {
- /* Extend left end */
- ReHiliteText(frow, fcol, old_startrow, old_startcol);
- } else if (from > screen->startHCoord) {
- /* Shorten left end */
- ReHiliteText(old_startrow, old_startcol, frow, fcol);
- }
- if (to > screen->endHCoord) {
- /* Extend right end */
- ReHiliteText(old_endrow, old_endcol, trow, tcol);
- } else if (to < screen->endHCoord) {
- /* Shorten right end */
- ReHiliteText(trow, tcol, old_endrow, old_endcol);
- }
- }
- screen->startHCoord = from;
- screen->endHCoord = to;
-}
-
-static void
-ReHiliteText(int frow,
- int fcol,
- int trow,
- int tcol)
- /* Guaranteed that (frow, fcol) <= (trow, tcol) */
-{
- TScreen *screen = &term->screen;
- int i;
-
- TRACE(("ReHiliteText from %d.%d to %d.%d\n", frow, fcol, trow, tcol));
-
- if (frow < 0)
- frow = fcol = 0;
- else if (frow > screen->max_row)
- return; /* nothing to do, since trow >= frow */
-
- if (trow < 0)
- return; /* nothing to do, since frow <= trow */
- else if (trow > screen->max_row) {
- trow = screen->max_row;
- tcol = MaxCols(screen);
- }
- if (frow == trow && fcol == tcol)
- return;
-
- if (frow != trow) { /* do multiple rows */
- if ((i = screen->max_col - fcol + 1) > 0) { /* first row */
- ScrnRefresh(screen, frow, fcol, 1, i, True);
- }
- if ((i = trow - frow - 1) > 0) { /* middle rows */
- ScrnRefresh(screen, frow + 1, 0, i, MaxCols(screen), True);
- }
- if (tcol > 0 && trow <= screen->max_row) { /* last row */
- ScrnRefresh(screen, trow, 0, 1, tcol, True);
- }
- } else { /* do single row */
- ScrnRefresh(screen, frow, fcol, 1, tcol - fcol, True);
- }
-}
-
-static void
-SaltTextAway(int crow, int ccol, int row, int col,
- String * params, /* selections */
- Cardinal num_params)
- /* Guaranteed that (crow, ccol) <= (row, col), and that both points are valid
- (may have row = screen->max_row+1, col = 0) */
-{
- TScreen *screen = &term->screen;
- int i, j = 0;
- int eol;
- Char *line;
- Char *lp;
-
- if (crow == row && ccol > col) {
- int tmp = ccol;
- ccol = col;
- col = tmp;
- }
-
- --col;
- /* first we need to know how long the string is before we can save it */
-
- if (row == crow) {
- j = Length(screen, crow, ccol, col);
- } else { /* two cases, cut is on same line, cut spans multiple lines */
- j += Length(screen, crow, ccol, screen->max_col) + 1;
- for (i = crow + 1; i < row; i++)
- j += Length(screen, i, 0, screen->max_col) + 1;
- if (col >= 0)
- j += Length(screen, row, 0, col);
- }
-
- /* UTF-8 may require more space */
- if_OPT_WIDE_CHARS(screen, {
- j *= 4;
- });
-
- /* now get some memory to save it in */
-
- if (screen->selection_size <= j) {
- if ((line = (Char *) malloc((unsigned) j + 1)) == 0)
- SysError(ERROR_BMALLOC2);
- XtFree((char *) screen->selection_data);
- screen->selection_data = line;
- screen->selection_size = j + 1;
- } else {
- line = screen->selection_data;
- }
-
- if ((line == 0)
- || (j < 0))
- return;
-
- line[j] = '\0'; /* make sure it is null terminated */
- lp = line; /* lp points to where to save the text */
- if (row == crow) {
- lp = SaveText(screen, row, ccol, col, lp, &eol);
- } else {
- lp = SaveText(screen, crow, ccol, screen->max_col, lp, &eol);
- if (eol)
- *lp++ = '\n'; /* put in newline at end of line */
- for (i = crow + 1; i < row; i++) {
- lp = SaveText(screen, i, 0, screen->max_col, lp, &eol);
- if (eol)
- *lp++ = '\n';
- }
- if (col >= 0)
- lp = SaveText(screen, row, 0, col, lp, &eol);
- }
- *lp = '\0'; /* make sure we have end marked */
-
- TRACE(("Salted TEXT:%d:%.*s\n", lp - line, lp - line, line));
- screen->selection_length = (lp - line);
- _OwnSelection(term, params, num_params);
-}
-
-#if OPT_PASTE64
-void
-ClearSelectionBuffer()
-{
- TScreen *screen = &term->screen;
- screen->selection_length = 0;
- screen->base64_count = 0;
-}
-
-static void
-AppendStrToSelectionBuffer(Char * text, int len)
-{
- TScreen *screen = &term->screen;
- if (len != 0) {
- int j = screen->selection_length + len; /* New length */
- int k = j + (j >> 2) + 80; /* New size if we grow buffer: grow by ~50% */
- if (j + 1 >= screen->selection_size) {
- if (!screen->selection_length) {
- /* New buffer */
- Char *line;
- if ((line = (Char *) malloc((unsigned) k)) == 0)
- SysError(ERROR_BMALLOC2);
- XtFree((char *) screen->selection_data);
- screen->selection_data = line;
- } else {
- /* Realloc buffer */
- screen->selection_data = (Char *)
- realloc(screen->selection_data,
- (unsigned) k);
- if (screen->selection_data == 0)
- SysError(ERROR_BMALLOC2);
- }
- screen->selection_size = k;
- }
- memcpy(screen->selection_data + screen->selection_length, text, len);
- screen->selection_length += len;
- screen->selection_data[screen->selection_length] = 0;
- }
-}
-
-void
-AppendToSelectionBuffer(TScreen * screen, unsigned c)
-{
- int six;
- Char ch;
-
- /* Decode base64 character */
- if (c >= 'A' && c <= 'Z')
- six = c - 'A';
- else if (c >= 'a' && c <= 'z')
- six = c - 'a' + 26;
- else if (c >= '0' && c <= '9')
- six = c - '0' + 52;
- else if (c == '+')
- six = 62;
- else if (c == '/')
- six = 63;
- else
- return;
-
- /* Accumulate bytes */
- switch (screen->base64_count) {
- case 0:
- screen->base64_accu = six;
- screen->base64_count = 6;
- break;
-
- case 2:
- ch = (screen->base64_accu << 6) + six;
- screen->base64_count = 0;
- AppendStrToSelectionBuffer(&ch, 1);
- break;
-
- case 4:
- ch = (screen->base64_accu << 4) + (six >> 2);
- screen->base64_accu = (six & 0x3);
- screen->base64_count = 2;
- AppendStrToSelectionBuffer(&ch, 1);
- break;
-
- case 6:
- ch = (screen->base64_accu << 2) + (six >> 4);
- screen->base64_accu = (six & 0xF);
- screen->base64_count = 4;
- AppendStrToSelectionBuffer(&ch, 1);
- break;
- }
-}
-
-void
-CompleteSelection(char **args, Cardinal len)
-{
- term->screen.base64_count = 0;
- term->screen.base64_accu = 0;
- _OwnSelection(term, args, len);
-}
-#endif /* OPT_PASTE64 */
-
-static Bool
-_ConvertSelectionHelper(Widget w,
- Atom * type, XtPointer *value,
- unsigned long *length, int *format,
- int (*conversion_function) (Display *,
- char **, int,
- XICCEncodingStyle,
- XTextProperty *),
- XICCEncodingStyle conversion_style)
-{
- Display *d = XtDisplay(w);
- TScreen *screen;
- XTextProperty textprop;
-
- if (!IsXtermWidget(w))
- return False;
-
- screen = &((XtermWidget) w)->screen;
-
- if (conversion_function(d, (char **) &screen->selection_data, 1,
- conversion_style,
- &textprop) < Success)
- return False;
- *value = (XtPointer) textprop.value;
- *length = textprop.nitems;
- *type = textprop.encoding;
- *format = textprop.format;
- return True;
-}
-
-static Boolean
-ConvertSelection(Widget w,
- Atom * selection,
- Atom * target,
- Atom * type,
- XtPointer *value,
- unsigned long *length,
- int *format)
-{
- Display *d = XtDisplay(w);
- TScreen *screen;
- Bool result = False;
-
- if (!IsXtermWidget(w))
- return False;
-
- screen = &((XtermWidget) w)->screen;
-
- if (screen->selection_data == NULL)
- return False; /* can this happen? */
-
- if (*target == XA_TARGETS(d)) {
- Atom *targetP;
- Atom *std_targets;
- XPointer std_return = 0;
- unsigned long std_length;
- if (XmuConvertStandardSelection(w, screen->selection_time, selection,
- target, type, &std_return,
- &std_length, format)) {
- std_targets = (Atom *) (std_return);
- *length = std_length + 6;
- targetP = (Atom *) XtMalloc(sizeof(Atom) * (*length));
- *value = (XtPointer) targetP;
- *targetP++ = XA_STRING;
- *targetP++ = XA_TEXT(d);
-#ifdef X_HAVE_UTF8_STRING
- *targetP++ = XA_COMPOUND_TEXT(d);
- *targetP++ = XA_UTF8_STRING(d);
-#else
- *targetP = XA_COMPOUND_TEXT(d);
- if_OPT_WIDE_CHARS(screen, {
- *targetP = XA_UTF8_STRING(d);
- });
- targetP++;
-#endif
- *targetP++ = XA_LENGTH(d);
- *targetP++ = XA_LIST_LENGTH(d);
- memcpy(targetP, std_targets, sizeof(Atom) * std_length);
- XtFree((char *) std_targets);
- *type = XA_ATOM;
- *format = 32;
- result = True;
- }
- }
-#if OPT_WIDE_CHARS
- else if (screen->wide_chars && *target == XA_STRING) {
- result =
- _ConvertSelectionHelper(w,
- type, value, length, format,
- Xutf8TextListToTextProperty,
- XStringStyle);
- } else if (screen->wide_chars && *target == XA_UTF8_STRING(d)) {
- result =
- _ConvertSelectionHelper(w,
- type, value, length, format,
- Xutf8TextListToTextProperty,
- XUTF8StringStyle);
- } else if (screen->wide_chars && *target == XA_TEXT(d)) {
- result =
- _ConvertSelectionHelper(w,
- type, value, length, format,
- Xutf8TextListToTextProperty,
- XStdICCTextStyle);
- } else if (screen->wide_chars && *target == XA_COMPOUND_TEXT(d)) {
- result =
- _ConvertSelectionHelper(w,
- type, value, length, format,
- Xutf8TextListToTextProperty,
- XCompoundTextStyle);
- }
-#endif
-
- else if (*target == XA_STRING) { /* not wide_chars */
- /* We can only reach this point if the selection requestor
- requested STRING before any of TEXT, COMPOUND_TEXT or
- UTF8_STRING. We therefore assume that the requestor is not
- properly internationalised, and dump raw eight-bit data
- with no conversion into the selection. Yes, this breaks
- the ICCCM in non-Latin-1 locales. */
- *type = XA_STRING;
- *value = (XtPointer) screen->selection_data;
- *length = screen->selection_length;
- *format = 8;
- result = True;
- } else if (*target == XA_TEXT(d)) { /* not wide_chars */
- result =
- _ConvertSelectionHelper(w,
- type, value, length, format,
- XmbTextListToTextProperty,
- XStdICCTextStyle);
- } else if (*target == XA_COMPOUND_TEXT(d)) { /* not wide_chars */
- result =
- _ConvertSelectionHelper(w,
- type, value, length, format,
- XmbTextListToTextProperty,
- XCompoundTextStyle);
- }
-#ifdef X_HAVE_UTF8_STRING
- else if (*target == XA_UTF8_STRING(d)) { /* not wide_chars */
- result =
- _ConvertSelectionHelper(w,
- type, value, length, format,
- XmbTextListToTextProperty,
- XUTF8StringStyle);
- }
-#endif
- else if (*target == XA_LIST_LENGTH(d)) {
- *value = XtMalloc(4);
- if (sizeof(long) == 4)
- *(long *) *value = 1;
- else {
- long temp = 1;
- memcpy((char *) *value, ((char *) &temp) + sizeof(long) - 4, 4);
- }
- *type = XA_INTEGER;
- *length = 1;
- *format = 32;
- result = True;
- } else if (*target == XA_LENGTH(d)) {
- /* This value is wrong if we have UTF-8 text */
- *value = XtMalloc(4);
- if (sizeof(long) == 4) {
- *(long *) *value = screen->selection_length;
- } else {
- long temp = screen->selection_length;
- memcpy((char *) *value, ((char *) &temp) + sizeof(long) - 4, 4);
- }
- *type = XA_INTEGER;
- *length = 1;
- *format = 32;
- result = True;
- } else if (XmuConvertStandardSelection(w,
- screen->selection_time, selection,
- target, type, (XPointer *) value,
- length, format)) {
- result = True;
- }
-
- /* else */
- return result;
-}
-
-static void
-LoseSelection(Widget w, Atom * selection)
-{
- TScreen *screen;
- Atom *atomP;
- Cardinal i;
-
- if (!IsXtermWidget(w))
- return;
-
- screen = &((XtermWidget) w)->screen;
- for (i = 0, atomP = screen->selection_atoms;
- i < screen->selection_count; i++, atomP++) {
- if (*selection == *atomP)
- *atomP = (Atom) 0;
- if (CutBuffer(*atomP) >= 0) {
- *atomP = (Atom) 0;
- }
- }
-
- for (i = screen->selection_count; i; i--) {
- if (screen->selection_atoms[i - 1] != 0)
- break;
- }
- screen->selection_count = i;
-
- for (i = 0, atomP = screen->selection_atoms;
- i < screen->selection_count; i++, atomP++) {
- if (*atomP == (Atom) 0) {
- *atomP = screen->selection_atoms[--screen->selection_count];
- }
- }
-
- if (screen->selection_count == 0)
- TrackText(0, 0, 0, 0);
-}
-
-/* ARGSUSED */
-static void
-SelectionDone(Widget w GCC_UNUSED,
- Atom * selection GCC_UNUSED,
- Atom * target GCC_UNUSED)
-{
- /* empty proc so Intrinsics know we want to keep storage */
-}
-
-static void
-_OwnSelection(XtermWidget termw,
- String * selections,
- Cardinal count)
-{
- Atom *atoms = termw->screen.selection_atoms;
- Cardinal i;
- Bool have_selection = False;
-
- if (termw->screen.selection_length < 0)
- return;
-
- if (count > termw->screen.sel_atoms_size) {
- XtFree((char *) atoms);
- atoms = (Atom *) XtMalloc(count * sizeof(Atom));
- termw->screen.selection_atoms = atoms;
- termw->screen.sel_atoms_size = count;
- }
- XmuInternStrings(XtDisplay((Widget) termw), selections, count, atoms);
- for (i = 0; i < count; i++) {
- int cutbuffer = CutBuffer(atoms[i]);
- if (cutbuffer >= 0) {
- if (termw->screen.selection_length >
- 4 * XMaxRequestSize(XtDisplay((Widget) termw)) - 32) {
- fprintf(stderr,
- "%s: selection too big (%d bytes), not storing in CUT_BUFFER%d\n",
- xterm_name, termw->screen.selection_length, cutbuffer);
- } else {
- /* This used to just use the UTF-8 data, which was totally
- * broken as not even the corresponding paste code in Xterm
- * understood this! So now it converts to Latin1 first.
- * Robert Brady, 2000-09-05
- */
- unsigned long length = termw->screen.selection_length;
- Char *data = termw->screen.selection_data;
- if_OPT_WIDE_CHARS((&(termw->screen)), {
- data = UTF8toLatin1(data, length, &length);
- });
- TRACE(("XStoreBuffer(%d)\n", cutbuffer));
- XStoreBuffer(XtDisplay((Widget) termw),
- (char *) data,
- (int) length,
- cutbuffer);
- }
- } else if (!replyToEmacs) {
- have_selection |=
- XtOwnSelection((Widget) termw, atoms[i],
- termw->screen.selection_time,
- ConvertSelection, LoseSelection, SelectionDone);
- }
- }
- if (!replyToEmacs)
- termw->screen.selection_count = count;
- if (!have_selection)
- TrackText(0, 0, 0, 0);
-}
-
-static void
-ResetSelectionState(TScreen * screen)
-{
- screen->selection_count = 0;
- screen->startHRow = screen->startHCol = 0;
- screen->endHRow = screen->endHCol = 0;
-}
-
-void
-DisownSelection(XtermWidget termw)
-{
- TScreen *screen = &(termw->screen);
- Atom *atoms = screen->selection_atoms;
- Cardinal count = screen->selection_count;
- Cardinal i;
-
- TRACE(("DisownSelection count %d, start %d.%d, end %d.%d\n",
- count,
- screen->startHRow,
- screen->startHCol,
- screen->endHRow,
- screen->endHCol));
-
- for (i = 0; i < count; i++) {
- int cutbuffer = CutBuffer(atoms[i]);
- if (cutbuffer < 0) {
- XtDisownSelection((Widget) termw, atoms[i],
- screen->selection_time);
- }
- }
- /*
- * If none of the callbacks via XtDisownSelection() reset highlighting
- * do it now.
- */
- if (ScrnHaveSelection(screen)) {
- /* save data which will be reset */
- int start_row = screen->startHRow;
- int start_col = screen->startHCol;
- int end_row = screen->endHRow;
- int end_col = screen->endHCol;
-
- ResetSelectionState(screen);
- ReHiliteText(start_row, start_col, end_row, end_col);
- } else {
- ResetSelectionState(screen);
- }
-}
-
-/* returns number of chars in line from scol to ecol out */
-/* ARGSUSED */
-static int
-Length(TScreen * screen GCC_UNUSED,
- int row,
- int scol,
- int ecol)
-{
- int lastcol = LastTextCol(row);
-
- if (ecol > lastcol)
- ecol = lastcol;
- return (ecol - scol + 1);
-}
-
-/* copies text into line, preallocated */
-static Char *
-SaveText(TScreen * screen,
- int row,
- int scol,
- int ecol,
- Char * lp, /* pointer to where to put the text */
- int *eol)
-{
- int i = 0;
- unsigned c;
- Char *result = lp;
-#if OPT_WIDE_CHARS
- int previous = 0;
- unsigned c_1 = 0, c_2 = 0;
-#endif
-
- i = Length(screen, row, scol, ecol);
- ecol = scol + i;
-#if OPT_DEC_CHRSET
- if (CSET_DOUBLE(SCRN_BUF_CSETS(screen, row + screen->topline)[0])) {
- scol = (scol + 0) / 2;
- ecol = (ecol + 1) / 2;
- }
-#endif
- *eol = !ScrnTstWrapped(screen, row);
- for (i = scol; i < ecol; i++) {
- c = E2A(XTERM_CELL(row, i));
-#if OPT_WIDE_CHARS
- if (screen->utf8_mode != uFalse) {
- c_1 = E2A(XTERM_CELL_C1(row, i));
- c_2 = E2A(XTERM_CELL_C2(row, i));
- }
-
- /* We want to strip out every occurrence of HIDDEN_CHAR AFTER a
- * wide character.
- */
- if (c == HIDDEN_CHAR && iswide(previous)) {
- previous = c;
- /* Combining characters attached to double-width characters
- are in memory attached to the HIDDEN_CHAR */
- if (c_1) {
- lp = convertToUTF8(lp, c_1);
- if (c_2)
- lp = convertToUTF8(lp, c_2);
- }
- continue;
- }
- previous = c;
- if (screen->utf8_mode != uFalse) {
- lp = convertToUTF8(lp, (c != 0) ? c : ' ');
- if (c_1) {
- lp = convertToUTF8(lp, c_1);
- if (c_2)
- lp = convertToUTF8(lp, c_2);
- }
- } else
-#endif
- {
- if (c == 0) {
- c = E2A(' ');
- } else if (c < E2A(' ')) {
- if (c == XPOUND)
- c = 0x23; /* char on screen is pound sterling */
- else
- c += 0x5f; /* char is from DEC drawing set */
- } else if (c == 0x7f) {
- c = 0x5f;
- }
- *lp++ = A2E(c);
- }
- if (c != E2A(' '))
- result = lp;
- }
-
- /*
- * If requested, trim trailing blanks from selected lines. Do not do this
- * if the line is wrapped.
- */
- if (!*eol || !screen->trim_selection)
- result = lp;
-
- return (result);
-}
-
-/* 32 + following 7-bit word:
-
- 1:0 Button no: 0, 1, 2. 3=release.
- 2 shift
- 3 meta
- 4 ctrl
- 5 set for motion notify
- 6 set for wheel
-*/
-
-/* Position: 32 - 255. */
-
-static int
-BtnCode(XButtonEvent * event, int button)
-{
- int result = 32 + (KeyState(event->state) << 2);
-
- if (button < 0 || button > 5) {
- result += 3;
- } else {
- if (button > 3)
- result += (64 - 4);
- if (event->type == MotionNotify)
- result += 32;
- result += button;
- }
- return result;
-}
-
-#define MOUSE_LIMIT (255 - 32)
-
-static void
-EditorButton(XButtonEvent * event)
-{
- TScreen *screen = &term->screen;
- int pty = screen->respond;
- Char line[6];
- int row, col;
- int button;
- unsigned count = 0;
-
- /* If button event, get button # adjusted for DEC compatibility */
- button = event->button - 1;
- if (button >= 3)
- button++;
-
- /* Compute character position of mouse pointer */
- row = (event->y - screen->border) / FontHeight(screen);
- col = (event->x - OriginX(screen)) / FontWidth(screen);
-
- /* Limit to screen dimensions */
- if (row < 0)
- row = 0;
- else if (row > screen->max_row)
- row = screen->max_row;
- else if (row > MOUSE_LIMIT)
- row = MOUSE_LIMIT;
-
- if (col < 0)
- col = 0;
- else if (col > screen->max_col)
- col = screen->max_col;
- else if (col > MOUSE_LIMIT)
- col = MOUSE_LIMIT;
-
- /* Build key sequence starting with \E[M */
- if (screen->control_eight_bits) {
- line[count++] = CSI;
- } else {
- line[count++] = ESC;
- line[count++] = '[';
- }
- line[count++] = 'M';
-
- /* Add event code to key sequence */
- if (screen->send_mouse_pos == X10_MOUSE) {
- line[count++] = ' ' + button;
- } else {
- /* Button-Motion events */
- switch (event->type) {
- case ButtonPress:
- line[count++] = BtnCode(event, screen->mouse_button = button);
- break;
- case ButtonRelease:
- /*
- * Wheel mouse interface generates release-events for buttons
- * 4 and 5, coded here as 3 and 4 respectively. We change the
- * release for buttons 1..3 to a -1.
- */
- if (button < 3)
- button = -1;
- line[count++] = BtnCode(event, screen->mouse_button = button);
- break;
- case MotionNotify:
- /* BTN_EVENT_MOUSE and ANY_EVENT_MOUSE modes send motion
- * events only if character cell has changed.
- */
- if ((row == screen->mouse_row)
- && (col == screen->mouse_col))
- return;
- line[count++] = BtnCode(event, screen->mouse_button);
- break;
- default:
- return;
- }
- }
-
- screen->mouse_row = row;
- screen->mouse_col = col;
-
- /* Add pointer position to key sequence */
- line[count++] = ' ' + col + 1;
- line[count++] = ' ' + row + 1;
-
- TRACE(("mouse at %d,%d button+mask = %#x\n", row, col,
- (screen->control_eight_bits) ? line[2] : line[3]));
-
- /* Transmit key sequence to process running under xterm */
- v_write(pty, line, count);
-}
-
-/*ARGSUSED*/
-#if OPT_TEK4014
-void
-HandleGINInput(Widget w GCC_UNUSED,
- XEvent * event GCC_UNUSED,
- String * param_list,
- Cardinal *nparamsp)
-{
- if (term->screen.TekGIN && *nparamsp == 1) {
- int c = param_list[0][0];
- switch (c) {
- case 'l':
- case 'm':
- case 'r':
- case 'L':
- case 'M':
- case 'R':
- break;
- default:
- Bell(XkbBI_MinorError, 0); /* let them know they goofed */
- c = 'l'; /* provide a default */
- }
- TekEnqMouse(c | 0x80);
- TekGINoff();
- } else {
- Bell(XkbBI_MinorError, 0);
- }
-}
-#endif /* OPT_TEK4014 */
-
-/* ARGSUSED */
-void
-HandleSecure(Widget w GCC_UNUSED,
- XEvent * event, /* unused */
- String * params GCC_UNUSED, /* [0] = volume */
- Cardinal *param_count GCC_UNUSED) /* 0 or 1 */
-{
- Time ev_time = CurrentTime;
-
- if ((event->xany.type == KeyPress) ||
- (event->xany.type == KeyRelease))
- ev_time = event->xkey.time;
- else if ((event->xany.type == ButtonPress) ||
- (event->xany.type == ButtonRelease))
- ev_time = event->xbutton.time;
- DoSecureKeyboard(ev_time);
-}
diff --git a/nx-X11/programs/xterm/charclass.c b/nx-X11/programs/xterm/charclass.c
deleted file mode 100644
index 96220607c..000000000
--- a/nx-X11/programs/xterm/charclass.c
+++ /dev/null
@@ -1,142 +0,0 @@
-/* $XTermId: charclass.c,v 1.10 2005/01/14 01:50:02 tom Exp $ */
-
-/*
- * Compact and efficient reimplementation of the
- * xterm character class mechanism for large character sets
- *
- * Markus Kuhn -- mkuhn@acm.org -- 2000-07-03
- *
- * Xterm allows users to select entire words with a double-click on
- * the left mouse button. Opinions might differ on what type of
- * characters are part of separate words, therefore xterm allows users
- * to configure a class code for each 8-bit character. Words are
- * maximum length sequences of neighboring characters with identical
- * class code. Extending this mechanism to Unicode naively would
- * create an at least 2^16 entries (128 kB) long class code table.
- * Instead, we transform the character class table into a list
- * of intervals, that will be accessed via a linear search.
- * Changes made to the table by the user will be appended. A special
- * class code -1 (default) marks characters who have their code number
- * as the class code. We could alternatively use a sorted table of
- * non-overlapping intervals that can be accessed via binary search,
- * but merging in new intervals is significantly more hassle and
- * not worth the effort here.
- */
-/* $XFree86: xc/programs/xterm/charclass.c,v 1.5 2005/01/14 01:50:02 dickey Exp $ */
-
-#include <xterm.h>
-#include <charclass.h>
-
-#if OPT_WIDE_CHARS
-
-static struct classentry {
- int cclass;
- int first;
- int last;
-} *classtab;
-
-/*
- * Special convention for classtab[0]:
- * - classtab[0].cclass is the allocated number of entries in classtab
- * - classtab[0].first = 1 (first used entry in classtab)
- * - classtab[0].last is the last used entry in classtab
- */
-
-int
-SetCharacterClassRange(int low, int high, int value)
-{
- if (high < low)
- return -1; /* nothing to do */
-
- /* make sure we have at least one free entry left at table end */
- if (classtab[0].last > classtab[0].cclass - 2) {
- classtab[0].cclass += 5 + classtab[0].cclass / 4;
- classtab = TypeRealloc(struct classentry, classtab[0].cclass, classtab);
- if (!classtab)
- abort();
- }
-
- /* simply append new interval to end of interval array */
- classtab[0].last++;
- classtab[classtab[0].last].first = low;
- classtab[classtab[0].last].last = high;
- classtab[classtab[0].last].cclass = value;
-
- return 0;
-}
-
-void
-init_classtab(void)
-{
- const int size = 50;
-
- classtab = TypeMallocN(struct classentry, size);
- if (!classtab)
- abort();
- classtab[0].cclass = size;
- classtab[0].first = 1;
- classtab[0].last = 0;
-
- /* old xterm default classes */
- SetCharacterClassRange(0, 0, 32);
- SetCharacterClassRange(1, 31, 1);
- SetCharacterClassRange('\t', '\t', 32);
- SetCharacterClassRange('0', '9', 48);
- SetCharacterClassRange('A', 'Z', 48);
- SetCharacterClassRange('_', '_', 48);
- SetCharacterClassRange('a', 'z', 48);
- SetCharacterClassRange(127, 159, 1);
- SetCharacterClassRange(160, 191, -1);
- SetCharacterClassRange(192, 255, 48);
- SetCharacterClassRange(215, 215, 216);
- SetCharacterClassRange(247, 247, 248);
-
- /* added Unicode classes */
- SetCharacterClassRange(0x0100, 0xffdf, 48); /* mostly characters */
- SetCharacterClassRange(0x037e, 0x037e, -1); /* Greek question mark */
- SetCharacterClassRange(0x0387, 0x0387, -1); /* Greek ano teleia */
- SetCharacterClassRange(0x055a, 0x055f, -1); /* Armenian punctuation */
- SetCharacterClassRange(0x0589, 0x0589, -1); /* Armenian full stop */
- SetCharacterClassRange(0x0700, 0x070d, -1); /* Syriac punctuation */
- SetCharacterClassRange(0x104a, 0x104f, -1); /* Myanmar punctuation */
- SetCharacterClassRange(0x10fb, 0x10fb, -1); /* Georgian punctuation */
- SetCharacterClassRange(0x1361, 0x1368, -1); /* Ethiopic punctuation */
- SetCharacterClassRange(0x166d, 0x166e, -1); /* Canadian Syl. punctuation */
- SetCharacterClassRange(0x17d4, 0x17dc, -1); /* Khmer punctuation */
- SetCharacterClassRange(0x1800, 0x180a, -1); /* Mongolian punctuation */
- SetCharacterClassRange(0x2000, 0x200a, 32); /* spaces */
- SetCharacterClassRange(0x200b, 0x27ff, -1); /* punctuation and symbols */
- SetCharacterClassRange(0x2070, 0x207f, 0x2070); /* superscript */
- SetCharacterClassRange(0x2080, 0x208f, 0x2080); /* subscript */
- SetCharacterClassRange(0x3000, 0x3000, 32); /* ideographic space */
- SetCharacterClassRange(0x3001, 0x3020, -1); /* ideographic punctuation */
- SetCharacterClassRange(0x3040, 0x309f, 0x3040); /* Hiragana */
- SetCharacterClassRange(0x30a0, 0x30ff, 0x30a0); /* Katakana */
- SetCharacterClassRange(0x3300, 0x9fff, 0x4e00); /* CJK Ideographs */
- SetCharacterClassRange(0xac00, 0xd7a3, 0xac00); /* Hangul Syllables */
- SetCharacterClassRange(0xf900, 0xfaff, 0x4e00); /* CJK Ideographs */
- SetCharacterClassRange(0xfe30, 0xfe6b, -1); /* punctuation forms */
- SetCharacterClassRange(0xff00, 0xff0f, -1); /* half/fullwidth ASCII */
- SetCharacterClassRange(0xff1a, 0xff20, -1); /* half/fullwidth ASCII */
- SetCharacterClassRange(0xff3b, 0xff40, -1); /* half/fullwidth ASCII */
- SetCharacterClassRange(0xff5b, 0xff64, -1); /* half/fullwidth ASCII */
-
- return;
-}
-
-int
-CharacterClass(int c)
-{
- int i, cclass = -1;
-
- for (i = classtab[0].first; i <= classtab[0].last; i++)
- if (classtab[i].first <= c && classtab[i].last >= c)
- cclass = classtab[i].cclass;
-
- if (cclass < 0)
- cclass = c;
-
- return cclass;
-}
-
-#endif /* OPT_WIDE_CHARS */
diff --git a/nx-X11/programs/xterm/charclass.h b/nx-X11/programs/xterm/charclass.h
deleted file mode 100644
index c93f8ff47..000000000
--- a/nx-X11/programs/xterm/charclass.h
+++ /dev/null
@@ -1,13 +0,0 @@
-/* $XFree86: xc/programs/xterm/charclass.h,v 1.1 2000/08/26 04:33:53 dawes Exp $ */
-
-#ifndef CHARCLASS_H
-#define CHARCLASS_H
-
-extern void init_classtab(void);
-/* intialise the table. needs calling before either of the
- others. */
-
-extern int SetCharacterClassRange(int low, int high, int value);
-extern int CharacterClass(int c);
-
-#endif
diff --git a/nx-X11/programs/xterm/charproc.c b/nx-X11/programs/xterm/charproc.c
deleted file mode 100644
index 78bb9a17d..000000000
--- a/nx-X11/programs/xterm/charproc.c
+++ /dev/null
@@ -1,7300 +0,0 @@
-/* $XTermId: charproc.c,v 1.627 2005/11/13 23:10:35 tom Exp $ */
-
-/*
- * $Xorg: charproc.c,v 1.6 2001/02/09 02:06:02 xorgcvs Exp $
- */
-
-/* $XFree86: xc/programs/xterm/charproc.c,v 3.177 2005/11/13 23:10:35 dickey Exp $ */
-
-/*
-
-Copyright 1999-2004,2005 by Thomas E. Dickey
-
- All Rights Reserved
-
-Permission is hereby granted, free of charge, to any person obtaining a
-copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name(s) of the above copyright
-holders shall not be used in advertising or otherwise to promote the
-sale, use or other dealings in this Software without prior written
-authorization.
-
-Copyright 1988 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-
-*/
-/*
- * Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
- *
- * All Rights Reserved
- *
- * Permission to use, copy, modify, and distribute this software and its
- * documentation for any purpose and without fee is hereby granted,
- * provided that the above copyright notice appear in all copies and that
- * both that copyright notice and this permission notice appear in
- * supporting documentation, and that the name of Digital Equipment
- * Corporation not be used in advertising or publicity pertaining to
- * distribution of the software without specific, written prior permission.
- *
- *
- * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
- * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
- * DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
- * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
- * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
- * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- * SOFTWARE.
- */
-
-/**************************************************************************/
-/* */
-/* Copyright (c) 2001, 2011 NoMachine, http://www.nomachine.com/. */
-/* */
-/* NX-X11, NX protocol compression and NX extensions to this software */
-/* are copyright of NoMachine. Redistribution and use of the present */
-/* software is allowed according to terms specified in the file LICENSE */
-/* which comes in the source distribution. */
-/* */
-/* Check http://www.nomachine.com/licensing.html for applicability. */
-/* */
-/* NX and NoMachine are trademarks of Medialogic S.p.A. */
-/* */
-/* All rights reserved. */
-/* */
-/**************************************************************************/
-
-/* charproc.c */
-
-#include <version.h>
-#include <xterm.h>
-
-#include <X11/Xatom.h>
-#include <X11/Xutil.h>
-#include <X11/cursorfont.h>
-#include <X11/Xmu/Atoms.h>
-#include <X11/Xmu/CharSet.h>
-#include <X11/Xmu/Converters.h>
-
-#if OPT_INPUT_METHOD
-
-#if defined(HAVE_LIB_XAW)
-#include <X11/Xaw/XawImP.h>
-#elif defined(HAVE_LIB_XAW3D)
-#include <X11/Xaw3d/XawImP.h>
-#elif defined(HAVE_LIB_NEXTAW)
-#include <X11/neXtaw/XawImP.h>
-#elif defined(HAVE_LIB_XAWPLUS)
-#include <X11/XawPlus/XawImP.h>
-#endif
-
-#endif
-
-#if OPT_WIDE_CHARS
-#include <wcwidth.h>
-#include <precompose.h>
-#ifdef HAVE_LANGINFO_CODESET
-#include <langinfo.h>
-#endif
-#endif
-
-#if OPT_INPUT_METHOD
-#include <X11/Xlocale.h>
-#endif
-
-#include <stdio.h>
-#include <ctype.h>
-
-#if defined(HAVE_SCHED_YIELD)
-#include <sched.h>
-#endif
-
-#include <VTparse.h>
-#include <data.h>
-#include <error.h>
-#include <menu.h>
-#include <main.h>
-#include <fontutils.h>
-#include <xcharmouse.h>
-#include <charclass.h>
-#include <xstrings.h>
-
-#if OPT_ZICONBEEP || OPT_TOOLBAR
-#define HANDLE_STRUCT_NOTIFY 1
-#else
-#define HANDLE_STRUCT_NOTIFY 0
-#endif
-
-static IChar doinput(void);
-static int set_character_class(char *s);
-static void FromAlternate(TScreen * screen);
-static void RequestResize(XtermWidget termw, int rows, int cols, int text);
-static void SwitchBufs(TScreen * screen);
-static void ToAlternate(TScreen * screen);
-static void VTallocbuf(void);
-static void WriteText(TScreen * screen,
- PAIRED_CHARS(Char * str, Char * str2),
- Cardinal len);
-static void ansi_modes(XtermWidget termw,
- void (*func) (unsigned *p, unsigned mask));
-static void bitclr(unsigned *p, unsigned mask);
-static void bitcpy(unsigned *p, unsigned q, unsigned mask);
-static void bitset(unsigned *p, unsigned mask);
-static void dpmodes(XtermWidget termw, void (*func) (unsigned *p, unsigned mask));
-static void restoremodes(XtermWidget termw);
-static void savemodes(XtermWidget termw);
-static void unparseputn(unsigned int n, int fd);
-static void window_ops(XtermWidget termw);
-
-#define DoStartBlinking(s) ((s)->cursor_blink ^ (s)->cursor_blink_esc)
-
-#if OPT_BLINK_CURS || OPT_BLINK_TEXT
-static void HandleBlinking(XtPointer closure, XtIntervalId * id);
-static void StartBlinking(TScreen * screen);
-static void StopBlinking(TScreen * screen);
-#else
-#define StartBlinking(screen) /* nothing */
-#define StopBlinking(screen) /* nothing */
-#endif
-
-#if OPT_INPUT_METHOD
-static void PreeditPosition(TScreen * screen);
-#endif
-
-#define DEFAULT -1
-#define BELLSUPPRESSMSEC 200
-
-static int nparam;
-static ANSI reply;
-static int param[NPARAM];
-
-static jmp_buf vtjmpbuf;
-
-/* event handlers */
-static void HandleBell PROTO_XT_ACTIONS_ARGS;
-static void HandleIgnore PROTO_XT_ACTIONS_ARGS;
-static void HandleKeymapChange PROTO_XT_ACTIONS_ARGS;
-static void HandleVisualBell PROTO_XT_ACTIONS_ARGS;
-#if HANDLE_STRUCT_NOTIFY
-static void HandleStructNotify PROTO_XT_EV_HANDLER_ARGS;
-#endif
-
-/*
- * NOTE: VTInitialize zeros out the entire ".screen" component of the
- * XtermWidget, so make sure to add an assignment statement in VTInitialize()
- * for each new ".screen" field added to this resource list.
- */
-
-/* Defaults */
-#if OPT_ISO_COLORS
-
-/*
- * If we default to colorMode enabled, compile-in defaults for the ANSI colors.
- */
-#if DFT_COLORMODE
-#define DFT_COLOR(name) name
-#else
-#define DFT_COLOR(name) XtDefaultForeground
-#endif
-#endif
-
-static char *_Font_Selected_ = "yes"; /* string is arbitrary */
-
-static char defaultTranslations[] =
-"\
- Shift <KeyPress> Prior:scroll-back(1,halfpage) \n\
- Shift <KeyPress> Next:scroll-forw(1,halfpage) \n\
- Shift <KeyPress> Select:select-cursor-start() select-cursor-end(PRIMARY, CUT_BUFFER0) \n\
- Shift <KeyPress> Insert:insert-selection(PRIMARY, CUT_BUFFER0) \n\
-"
-#if OPT_SHIFT_FONTS
-"\
- Shift~Ctrl <KeyPress> KP_Add:larger-vt-font() \n\
- Shift Ctrl <KeyPress> KP_Add:smaller-vt-font() \n\
- Shift <KeyPress> KP_Subtract:smaller-vt-font() \n\
-"
-#endif
-"\
- ~Meta <KeyPress>:insert-seven-bit() \n\
- Meta <KeyPress>:insert-eight-bit() \n\
- !Ctrl <Btn1Down>:popup-menu(mainMenu) \n\
- !Lock Ctrl <Btn1Down>:popup-menu(mainMenu) \n\
- !Lock Ctrl @Num_Lock <Btn1Down>:popup-menu(mainMenu) \n\
- ! @Num_Lock Ctrl <Btn1Down>:popup-menu(mainMenu) \n\
- ~Meta <Btn1Down>:select-start() \n\
- ~Meta <Btn1Motion>:select-extend() \n\
- !Ctrl <Btn2Down>:popup-menu(vtMenu) \n\
- !Lock Ctrl <Btn2Down>:popup-menu(vtMenu) \n\
- !Lock Ctrl @Num_Lock <Btn2Down>:popup-menu(vtMenu) \n\
- ! @Num_Lock Ctrl <Btn2Down>:popup-menu(vtMenu) \n\
- ~Ctrl ~Meta <Btn2Down>:ignore() \n\
- Meta <Btn2Down>:clear-saved-lines() \n\
- ~Ctrl ~Meta <Btn2Up>:insert-selection(PRIMARY, CUT_BUFFER0) \n\
- !Ctrl <Btn3Down>:popup-menu(fontMenu) \n\
- !Lock Ctrl <Btn3Down>:popup-menu(fontMenu) \n\
- !Lock Ctrl @Num_Lock <Btn3Down>:popup-menu(fontMenu) \n\
- ! @Num_Lock Ctrl <Btn3Down>:popup-menu(fontMenu) \n\
- ~Ctrl ~Meta <Btn3Down>:start-extend() \n\
- ~Meta <Btn3Motion>:select-extend() \n\
- Ctrl <Btn4Down>:scroll-back(1,halfpage,m) \n\
- Lock Ctrl <Btn4Down>:scroll-back(1,halfpage,m) \n\
- Lock @Num_Lock Ctrl <Btn4Down>:scroll-back(1,halfpage,m) \n\
- @Num_Lock Ctrl <Btn4Down>:scroll-back(1,halfpage,m) \n\
- <Btn4Down>:scroll-back(5,line,m) \n\
- Ctrl <Btn5Down>:scroll-forw(1,halfpage,m) \n\
- Lock Ctrl <Btn5Down>:scroll-forw(1,halfpage,m) \n\
- Lock @Num_Lock Ctrl <Btn5Down>:scroll-forw(1,halfpage,m) \n\
- @Num_Lock Ctrl <Btn5Down>:scroll-forw(1,halfpage,m) \n\
- <Btn5Down>:scroll-forw(5,line,m) \n\
- <BtnUp>:select-end(PRIMARY, CUT_BUFFER0) \n\
- <BtnDown>:ignore() \
-"; /* PROCURA added "Meta <Btn2Down>:clear-saved-lines()" */
-/* *INDENT-OFF* */
-static XtActionsRec actionsList[] = {
- { "allow-send-events", HandleAllowSends },
- { "bell", HandleBell },
- { "clear-saved-lines", HandleClearSavedLines },
- { "create-menu", HandleCreateMenu },
- { "dired-button", DiredButton },
- { "hard-reset", HandleHardReset },
- { "ignore", HandleIgnore },
- { "insert", HandleKeyPressed }, /* alias for insert-seven-bit */
- { "insert-eight-bit", HandleEightBitKeyPressed },
- { "insert-selection", HandleInsertSelection },
- { "insert-seven-bit", HandleKeyPressed },
- { "interpret", HandleInterpret },
- { "keymap", HandleKeymapChange },
- { "popup-menu", HandlePopupMenu },
- { "print", HandlePrintScreen },
- { "print-redir", HandlePrintControlMode },
- { "quit", HandleQuit },
- { "redraw", HandleRedraw },
- { "delete-is-del", HandleDeleteIsDEL },
- { "scroll-back", HandleScrollBack },
- { "scroll-forw", HandleScrollForward },
- { "secure", HandleSecure },
- { "select-cursor-end", HandleKeyboardSelectEnd },
- { "select-cursor-extend", HandleKeyboardSelectExtend },
- { "select-cursor-start", HandleKeyboardSelectStart },
- { "select-end", HandleSelectEnd },
- { "select-extend", HandleSelectExtend },
- { "select-set", HandleSelectSet },
- { "select-start", HandleSelectStart },
- { "send-signal", HandleSendSignal },
- { "set-8-bit-control", Handle8BitControl },
- { "set-allow132", HandleAllow132 },
- { "set-altscreen", HandleAltScreen },
- { "set-appcursor", HandleAppCursor },
- { "set-appkeypad", HandleAppKeypad },
- { "set-autolinefeed", HandleAutoLineFeed },
- { "set-autowrap", HandleAutoWrap },
- { "set-backarrow", HandleBackarrow },
- { "set-cursesemul", HandleCursesEmul },
- { "set-jumpscroll", HandleJumpscroll },
- { "set-old-function-keys", HandleOldFunctionKeys },
- { "set-marginbell", HandleMarginBell },
- { "set-reverse-video", HandleReverseVideo },
- { "set-reversewrap", HandleReverseWrap },
- { "set-scroll-on-key", HandleScrollKey },
- { "set-scroll-on-tty-output", HandleScrollTtyOutput },
- { "set-scrollbar", HandleScrollbar },
- { "set-sun-function-keys", HandleSunFunctionKeys },
- { "set-sun-keyboard", HandleSunKeyboard },
- { "set-titeInhibit", HandleTiteInhibit },
- { "set-visual-bell", HandleSetVisualBell },
- { "set-pop-on-bell", HandleSetPopOnBell },
- { "set-vt-font", HandleSetFont },
- { "soft-reset", HandleSoftReset },
- { "start-cursor-extend", HandleKeyboardStartExtend },
- { "start-extend", HandleStartExtend },
- { "string", HandleStringEvent },
- { "vi-button", ViButton },
- { "visual-bell", HandleVisualBell },
-#ifdef ALLOWLOGGING
- { "set-logging", HandleLogging },
-#endif
-#if OPT_BLINK_CURS
- { "set-cursorblink", HandleCursorBlink },
-#endif
-#if OPT_BOX_CHARS
- { "set-font-linedrawing", HandleFontBoxChars },
-#endif
-#if OPT_DABBREV
- { "dabbrev-expand", HandleDabbrevExpand },
-#endif
-#if OPT_DEC_CHRSET
- { "set-font-doublesize", HandleFontDoublesize },
-#endif
-#if OPT_DEC_SOFTFONT
- { "set-font-loading", HandleFontLoading },
-#endif
-#if OPT_HP_FUNC_KEYS
- { "set-hp-function-keys", HandleHpFunctionKeys },
-#endif
-#if OPT_LOAD_VTFONTS
- { "load-vt-fonts", HandleLoadVTFonts },
-#endif
-#if OPT_MAXIMIZE
- { "deiconify", HandleDeIconify },
- { "iconify", HandleIconify },
- { "maximize", HandleMaximize },
- { "restore", HandleRestoreSize },
-#endif
-#if OPT_NUM_LOCK
- { "alt-sends-escape", HandleAltEsc },
- { "meta-sends-escape", HandleMetaEsc },
- { "set-num-lock", HandleNumLock },
-#endif
-#if OPT_READLINE
- { "readline-button", ReadLineButton },
-#endif
-#if OPT_RENDERFONT
- { "set-render-font", HandleRenderFont },
-#endif
-#if OPT_SCO_FUNC_KEYS
- { "set-sco-function-keys", HandleScoFunctionKeys },
-#endif
-#if OPT_SHIFT_FONTS
- { "larger-vt-font", HandleLargerFont },
- { "smaller-vt-font", HandleSmallerFont },
-#endif
-#if OPT_TEK4014
- { "set-terminal-type", HandleSetTerminalType },
- { "set-visibility", HandleVisibility },
- { "set-tek-text", HandleSetTekText },
- { "tek-page", HandleTekPage },
- { "tek-reset", HandleTekReset },
- { "tek-copy", HandleTekCopy },
-#endif
-#if OPT_TOOLBAR
- { "set-toolbar", HandleToolbar },
-#endif
-#if OPT_WIDE_CHARS
- { "set-utf8-mode", HandleUTF8Mode },
-#endif
-};
-/* *INDENT-ON* */
-
-static XtResource resources[] =
-{
- Bres(XtNallowSendEvents, XtCAllowSendEvents, screen.allowSendEvent0, False),
- Bres(XtNallowWindowOps, XtCAllowWindowOps, screen.allowWindowOp0, True),
- Bres(XtNalwaysHighlight, XtCAlwaysHighlight, screen.always_highlight, False),
- Bres(XtNappcursorDefault, XtCAppcursorDefault, misc.appcursorDefault, False),
- Bres(XtNappkeypadDefault, XtCAppkeypadDefault, misc.appkeypadDefault, False),
- Bres(XtNautoWrap, XtCAutoWrap, misc.autoWrap, True),
- Bres(XtNawaitInput, XtCAwaitInput, screen.awaitInput, False),
- Bres(XtNfreeBoldBox, XtCFreeBoldBox, screen.free_bold_box, False),
- Bres(XtNbackarrowKey, XtCBackarrowKey, screen.backarrow_key, True),
- Bres(XtNbellOnReset, XtCBellOnReset, screen.bellOnReset, True),
- Bres(XtNboldMode, XtCBoldMode, screen.bold_mode, True),
- Bres(XtNbrokenSelections, XtCBrokenSelections, screen.brokenSelections, False),
- Bres(XtNc132, XtCC132, screen.c132, False),
- Bres(XtNcurses, XtCCurses, screen.curses, False),
- Bres(XtNcutNewline, XtCCutNewline, screen.cutNewline, True),
- Bres(XtNcutToBeginningOfLine, XtCCutToBeginningOfLine,
- screen.cutToBeginningOfLine, True),
- Bres(XtNdeleteIsDEL, XtCDeleteIsDEL, screen.delete_is_del, DEFDELETE_DEL),
- Bres(XtNdynamicColors, XtCDynamicColors, misc.dynamicColors, True),
- Bres(XtNeightBitControl, XtCEightBitControl, screen.control_eight_bits, False),
- Bres(XtNeightBitInput, XtCEightBitInput, screen.input_eight_bits, True),
- Bres(XtNeightBitOutput, XtCEightBitOutput, screen.output_eight_bits, True),
- Bres(XtNhighlightSelection, XtCHighlightSelection,
- screen.highlight_selection, False),
- Bres(XtNhpLowerleftBugCompat, XtCHpLowerleftBugCompat, screen.hp_ll_bc, False),
- Bres(XtNi18nSelections, XtCI18nSelections, screen.i18nSelections, True),
- Bres(XtNjumpScroll, XtCJumpScroll, screen.jumpscroll, True),
- Bres(XtNloginShell, XtCLoginShell, misc.login_shell, False),
- Bres(XtNmarginBell, XtCMarginBell, screen.marginbell, False),
- Bres(XtNmetaSendsEscape, XtCMetaSendsEscape, screen.meta_sends_esc, False),
- Bres(XtNmultiScroll, XtCMultiScroll, screen.multiscroll, False),
- Bres(XtNoldXtermFKeys, XtCOldXtermFKeys, screen.old_fkeys, False),
- Bres(XtNpopOnBell, XtCPopOnBell, screen.poponbell, False),
- Bres(XtNprinterAutoClose, XtCPrinterAutoClose, screen.printer_autoclose, False),
- Bres(XtNprinterExtent, XtCPrinterExtent, screen.printer_extent, False),
- Bres(XtNprinterFormFeed, XtCPrinterFormFeed, screen.printer_formfeed, False),
- Bres(XtNreverseVideo, XtCReverseVideo, misc.re_verse, False),
- Bres(XtNreverseWrap, XtCReverseWrap, misc.reverseWrap, False),
- Bres(XtNscrollBar, XtCScrollBar, misc.scrollbar, False),
- Bres(XtNscrollKey, XtCScrollCond, screen.scrollkey, False),
- Bres(XtNscrollTtyOutput, XtCScrollCond, screen.scrollttyoutput, True),
- Bres(XtNsignalInhibit, XtCSignalInhibit, misc.signalInhibit, False),
- Bres(XtNtiteInhibit, XtCTiteInhibit, misc.titeInhibit, False),
- Bres(XtNtiXtraScroll, XtCTiXtraScroll, misc.tiXtraScroll, False),
- Bres(XtNtrimSelection, XtCTrimSelection, screen.trim_selection, False),
- Bres(XtNunderLine, XtCUnderLine, screen.underline, True),
- Bres(XtNvisualBell, XtCVisualBell, screen.visualbell, False),
-
- Ires(XtNbellSuppressTime, XtCBellSuppressTime, screen.bellSuppressTime, BELLSUPPRESSMSEC),
- Ires(XtNinternalBorder, XtCBorderWidth, screen.border, DEFBORDER),
- Ires(XtNlimitResize, XtCLimitResize, misc.limit_resize, 1),
- Ires(XtNmultiClickTime, XtCMultiClickTime, screen.multiClickTime, MULTICLICKTIME),
- Ires(XtNnMarginBell, XtCColumn, screen.nmarginbell, N_MARGINBELL),
- Ires(XtNprinterControlMode, XtCPrinterControlMode,
- screen.printer_controlmode, 0),
- Ires(XtNvisualBellDelay, XtCVisualBellDelay, screen.visualBellDelay, 100),
- Ires(XtNsaveLines, XtCSaveLines, screen.savelines, SAVELINES),
- Ires(XtNscrollBarBorder, XtCScrollBarBorder, screen.scrollBarBorder, 1),
- Ires(XtNscrollLines, XtCScrollLines, screen.scrolllines, SCROLLLINES),
-
- Sres(XtNfont1, XtCFont1, screen.MenuFontName(fontMenu_font1), NULL),
- Sres(XtNfont2, XtCFont2, screen.MenuFontName(fontMenu_font2), NULL),
- Sres(XtNfont3, XtCFont3, screen.MenuFontName(fontMenu_font3), NULL),
- Sres(XtNfont4, XtCFont4, screen.MenuFontName(fontMenu_font4), NULL),
- Sres(XtNfont5, XtCFont5, screen.MenuFontName(fontMenu_font5), NULL),
- Sres(XtNfont6, XtCFont6, screen.MenuFontName(fontMenu_font6), NULL),
- Sres(XtNanswerbackString, XtCAnswerbackString, screen.answer_back, ""),
- Sres(XtNboldFont, XtCBoldFont, misc.default_font.f_b, DEFBOLDFONT),
- Sres(XtNcharClass, XtCCharClass, screen.charClass, NULL),
- Sres(XtNdecTerminalID, XtCDecTerminalID, screen.term_id, DFT_DECID),
- Sres(XtNfont, XtCFont, misc.default_font.f_n, DEFFONT),
- Sres(XtNgeometry, XtCGeometry, misc.geo_metry, NULL),
- Sres(XtNkeyboardDialect, XtCKeyboardDialect, screen.keyboard_dialect, DFT_KBD_DIALECT),
- Sres(XtNprinterCommand, XtCPrinterCommand, screen.printer_command, ""),
- Sres(XtNtekGeometry, XtCGeometry, misc.T_geometry, NULL),
-
- Tres(XtNcursorColor, XtCCursorColor, TEXT_CURSOR, XtDefaultForeground),
- Tres(XtNforeground, XtCForeground, TEXT_FG, XtDefaultForeground),
- Tres(XtNpointerColor, XtCPointerColor, MOUSE_FG, XtDefaultForeground),
- Tres(XtNbackground, XtCBackground, TEXT_BG, XtDefaultBackground),
- Tres(XtNpointerColorBackground, XtCBackground, MOUSE_BG, XtDefaultBackground),
-
- {XtNresizeGravity, XtCResizeGravity, XtRGravity, sizeof(XtGravity),
- XtOffsetOf(XtermWidgetRec, misc.resizeGravity),
- XtRImmediate, (XtPointer) SouthWestGravity},
-
- {XtNpointerShape, XtCCursor, XtRCursor, sizeof(Cursor),
- XtOffsetOf(XtermWidgetRec, screen.pointer_cursor),
- XtRString, (XtPointer) "xterm"},
-
-#ifdef ALLOWLOGGING
- Bres(XtNlogInhibit, XtCLogInhibit, misc.logInhibit, False),
- Bres(XtNlogging, XtCLogging, misc.log_on, False),
- Sres(XtNlogFile, XtCLogfile, screen.logfile, NULL),
-#endif
-
-#ifndef NO_ACTIVE_ICON
- Bres("activeIcon", "ActiveIcon", misc.active_icon, False),
- Ires("iconBorderWidth", XtCBorderWidth, misc.icon_border_width, 2),
- Fres("iconFont", "IconFont", screen.fnt_icon, XtDefaultFont),
- Cres("iconBorderColor", XtCBorderColor, misc.icon_border_pixel, XtDefaultBackground),
-#endif /* NO_ACTIVE_ICON */
-
-#if OPT_BLINK_CURS
- Bres(XtNcursorBlink, XtCCursorBlink, screen.cursor_blink, False),
-#endif
-
-#if OPT_BLINK_TEXT
- Bres(XtNshowBlinkAsBold, XtCCursorBlink, screen.blink_as_bold, DEFBLINKASBOLD),
-#endif
-
-#if OPT_BLINK_CURS || OPT_BLINK_TEXT
- Ires(XtNcursorOnTime, XtCCursorOnTime, screen.blink_on, 600),
- Ires(XtNcursorOffTime, XtCCursorOffTime, screen.blink_off, 300),
-#endif
-
-#if OPT_BOX_CHARS
- Bres(XtNforceBoxChars, XtCForceBoxChars, screen.force_box_chars, False),
- Bres(XtNshowMissingGlyphs, XtCShowMissingGlyphs, screen.force_all_chars, False),
-#endif
-
-#if OPT_BROKEN_OSC
- Bres(XtNbrokenLinuxOSC, XtCBrokenLinuxOSC, screen.brokenLinuxOSC, True),
-#endif
-
-#if OPT_BROKEN_ST
- Bres(XtNbrokenStringTerm, XtCBrokenStringTerm, screen.brokenStringTerm, True),
-#endif
-
-#if OPT_C1_PRINT
- Bres(XtNallowC1Printable, XtCAllowC1Printable, screen.c1_printable, False),
-#endif
-
-#if OPT_DEC_CHRSET
- Bres(XtNfontDoublesize, XtCFontDoublesize, screen.font_doublesize, True),
- Ires(XtNcacheDoublesize, XtCCacheDoublesize, screen.cache_doublesize, NUM_CHRSET),
-#endif
-
-#if OPT_HIGHLIGHT_COLOR
- Tres(XtNhighlightColor, XtCHighlightColor, HIGHLIGHT_BG, XtDefaultForeground),
-#endif /* OPT_HIGHLIGHT_COLOR */
-
-#if OPT_INPUT_METHOD
- Bres(XtNopenIm, XtCOpenIm, misc.open_im, True),
- Sres(XtNinputMethod, XtCInputMethod, misc.input_method, NULL),
- Sres(XtNpreeditType, XtCPreeditType, misc.preedit_type,
- "OverTheSpot,Root"),
-#endif
-
-#if OPT_ISO_COLORS
- Bres(XtNboldColors, XtCColorMode, screen.boldColors, True),
- Ires(XtNveryBoldColors, XtCVeryBoldColors, screen.veryBoldColors, 0),
- Bres(XtNcolorMode, XtCColorMode, screen.colorMode, DFT_COLORMODE),
-
- Bres(XtNcolorAttrMode, XtCColorAttrMode, screen.colorAttrMode, False),
- Bres(XtNcolorBDMode, XtCColorAttrMode, screen.colorBDMode, False),
- Bres(XtNcolorBLMode, XtCColorAttrMode, screen.colorBLMode, False),
- Bres(XtNcolorRVMode, XtCColorAttrMode, screen.colorRVMode, False),
- Bres(XtNcolorULMode, XtCColorAttrMode, screen.colorULMode, False),
- Bres(XtNitalicULMode, XtCColorAttrMode, screen.italicULMode, False),
-
- COLOR_RES("0", screen.Acolors[COLOR_0], DFT_COLOR("black")),
- COLOR_RES("1", screen.Acolors[COLOR_1], DFT_COLOR("red3")),
- COLOR_RES("2", screen.Acolors[COLOR_2], DFT_COLOR("green3")),
- COLOR_RES("3", screen.Acolors[COLOR_3], DFT_COLOR("yellow3")),
- COLOR_RES("4", screen.Acolors[COLOR_4], DFT_COLOR(DEF_COLOR4)),
- COLOR_RES("5", screen.Acolors[COLOR_5], DFT_COLOR("magenta3")),
- COLOR_RES("6", screen.Acolors[COLOR_6], DFT_COLOR("cyan3")),
- COLOR_RES("7", screen.Acolors[COLOR_7], DFT_COLOR("gray90")),
- COLOR_RES("8", screen.Acolors[COLOR_8], DFT_COLOR("gray50")),
- COLOR_RES("9", screen.Acolors[COLOR_9], DFT_COLOR("red")),
- COLOR_RES("10", screen.Acolors[COLOR_10], DFT_COLOR("green")),
- COLOR_RES("11", screen.Acolors[COLOR_11], DFT_COLOR("yellow")),
- COLOR_RES("12", screen.Acolors[COLOR_12], DFT_COLOR(DEF_COLOR12)),
- COLOR_RES("13", screen.Acolors[COLOR_13], DFT_COLOR("magenta")),
- COLOR_RES("14", screen.Acolors[COLOR_14], DFT_COLOR("cyan")),
- COLOR_RES("15", screen.Acolors[COLOR_15], DFT_COLOR("white")),
- COLOR_RES("BD", screen.Acolors[COLOR_BD], DFT_COLOR(XtDefaultForeground)),
- COLOR_RES("BL", screen.Acolors[COLOR_BL], DFT_COLOR(XtDefaultForeground)),
- COLOR_RES("UL", screen.Acolors[COLOR_UL], DFT_COLOR(XtDefaultForeground)),
- COLOR_RES("RV", screen.Acolors[COLOR_RV], DFT_COLOR(XtDefaultForeground)),
-
-#if !OPT_COLOR_RES2
-#if OPT_256_COLORS
-# include <256colres.h>
-#elif OPT_88_COLORS
-# include <88colres.h>
-#endif
-#endif /* !OPT_COLOR_RES2 */
-
-#endif /* OPT_ISO_COLORS */
-
-#if OPT_MOD_FKEYS
- Ires(XtNmodifyCursorKeys, XtCModifyCursorKeys,
- keyboard.modify_cursor_keys, 2),
-#endif
-
-#if OPT_NUM_LOCK
- Bres(XtNalwaysUseMods, XtCAlwaysUseMods, misc.alwaysUseMods, False),
- Bres(XtNnumLock, XtCNumLock, misc.real_NumLock, True),
-#endif
-
-#if OPT_PRINT_COLORS
- Ires(XtNprintAttributes, XtCPrintAttributes, screen.print_attributes, 1),
-#endif
-
-#if OPT_SHIFT_FONTS
- Bres(XtNshiftFonts, XtCShiftFonts, misc.shift_fonts, True),
-#endif
-
-#if OPT_SUNPC_KBD
- Ires(XtNctrlFKeys, XtCCtrlFKeys, misc.ctrl_fkeys, 10),
-#endif
-
-#if OPT_TEK4014
- Bres(XtNtekInhibit, XtCTekInhibit, misc.tekInhibit, False),
- Bres(XtNtekSmall, XtCTekSmall, misc.tekSmall, False),
- Bres(XtNtekStartup, XtCTekStartup, screen.TekEmu, False),
-#endif
-
-#if OPT_TOOLBAR
- Wres(XtNmenuBar, XtCMenuBar, VT100_TB_INFO(menu_bar), 0),
- Ires(XtNmenuHeight, XtCMenuHeight, VT100_TB_INFO(menu_height), 25),
-#endif
-
-#if OPT_WIDE_CHARS
- Ires(XtNutf8, XtCUtf8, screen.utf8_mode, uDefault),
- Bres(XtNwideChars, XtCWideChars, screen.wide_chars, False),
- Bres(XtNmkWidth, XtCMkWidth, misc.mk_width, False),
- Bres(XtNcjkWidth, XtCCjkWidth, misc.cjk_width, False),
- Bres(XtNvt100Graphics, XtCVT100Graphics, screen.vt100_graphics, True),
- Sres(XtNwideBoldFont, XtCWideBoldFont, misc.default_font.f_wb, DEFWIDEBOLDFONT),
- Sres(XtNwideFont, XtCWideFont, misc.default_font.f_w, DEFWIDEFONT),
-#endif
-
-#if OPT_LUIT_PROG
- Sres(XtNlocale, XtCLocale, misc.locale_str, "medium"),
- Sres(XtNlocaleFilter, XtCLocaleFilter, misc.localefilter, DEFLOCALEFILTER),
-#endif
-
-#if OPT_INPUT_METHOD
- Sres(XtNximFont, XtCXimFont, misc.f_x, DEFXIMFONT),
-#endif
-
-#if OPT_XMC_GLITCH
- Bres(XtNxmcInline, XtCXmcInline, screen.xmc_inline, False),
- Bres(XtNxmcMoveSGR, XtCXmcMoveSGR, screen.move_sgr_ok, True),
- Ires(XtNxmcAttributes, XtCXmcAttributes, screen.xmc_attributes, 1),
- Ires(XtNxmcGlitch, XtCXmcGlitch, screen.xmc_glitch, 0),
-#endif
-
-#ifdef SCROLLBAR_RIGHT
- Bres(XtNrightScrollBar, XtCRightScrollBar, misc.useRight, False),
-#endif
-
-#if OPT_RENDERFONT
- Dres(XtNfaceSize, XtCFaceSize, misc.face_size, DEFFACESIZE),
- Sres(XtNfaceName, XtCFaceName, misc.face_name, DEFFACENAME),
- Sres(XtNfaceNameDoublesize, XtCFaceNameDoublesize, misc.face_wide_name, DEFFACENAME),
- Bres(XtNrenderFont, XtCRenderFont, misc.render_font, True),
-#endif
-};
-
-static Boolean VTSetValues(Widget cur, Widget request, Widget new_arg,
- ArgList args, Cardinal *num_args);
-static void VTClassInit(void);
-static void VTDestroy(Widget w);
-static void VTExpose(Widget w, XEvent * event, Region region);
-static void VTInitialize(Widget wrequest, Widget new_arg, ArgList args,
- Cardinal *num_args);
-static void VTRealize(Widget w, XtValueMask * valuemask,
- XSetWindowAttributes * values);
-static void VTResize(Widget w);
-
-#if OPT_I18N_SUPPORT && OPT_INPUT_METHOD
-static void VTInitI18N(void);
-#endif
-
-#ifdef VMS
-globaldef {
- "xtermclassrec"
-} noshare
-
-#else
-static
-#endif /* VMS */
-WidgetClassRec xtermClassRec =
-{
- {
-/* core_class fields */
- (WidgetClass) & widgetClassRec, /* superclass */
- "VT100", /* class_name */
- sizeof(XtermWidgetRec), /* widget_size */
- VTClassInit, /* class_initialize */
- NULL, /* class_part_initialize */
- False, /* class_inited */
- VTInitialize, /* initialize */
- NULL, /* initialize_hook */
- VTRealize, /* realize */
- actionsList, /* actions */
- XtNumber(actionsList), /* num_actions */
- resources, /* resources */
- XtNumber(resources), /* num_resources */
- NULLQUARK, /* xrm_class */
- True, /* compress_motion */
- False, /* compress_exposure */
- True, /* compress_enterleave */
- False, /* visible_interest */
- VTDestroy, /* destroy */
- VTResize, /* resize */
- VTExpose, /* expose */
- VTSetValues, /* set_values */
- NULL, /* set_values_hook */
- XtInheritSetValuesAlmost, /* set_values_almost */
- NULL, /* get_values_hook */
- NULL, /* accept_focus */
- XtVersion, /* version */
- NULL, /* callback_offsets */
- defaultTranslations, /* tm_table */
- XtInheritQueryGeometry, /* query_geometry */
- XtInheritDisplayAccelerator, /* display_accelerator */
- NULL /* extension */
- }
-};
-
-#ifdef VMS
-globaldef {
- "xtermwidgetclass"
-}
-noshare
-#endif /* VMS */
-WidgetClass xtermWidgetClass = (WidgetClass) & xtermClassRec;
-
-/*
- * Add input-actions for widgets that are overlooked (scrollbar and toolbar):
- *
- * a) Sometimes the scrollbar passes through translations, sometimes it
- * doesn't. We add the KeyPress translations here, just to be sure.
- * b) In the normal (non-toolbar) configuration, the xterm widget covers
- * almost all of the window. With a toolbar, there's a relatively
- * large area that the user would expect to enter keystrokes since the
- * program can get the focus.
- */
-void
-xtermAddInput(Widget w)
-{
-#if OPT_TOOLBAR
- /* *INDENT-OFF* */
- XtActionsRec input_actions[] = {
- { "insert", HandleKeyPressed }, /* alias */
- { "insert-eight-bit", HandleEightBitKeyPressed },
- { "insert-seven-bit", HandleKeyPressed },
- { "secure", HandleSecure },
- { "string", HandleStringEvent },
- { "scroll-back", HandleScrollBack },
- { "scroll-forw", HandleScrollForward },
- { "select-cursor-end", HandleKeyboardSelectEnd },
- { "select-cursor-extend", HandleKeyboardSelectExtend },
- { "select-cursor-start", HandleKeyboardSelectStart },
- { "insert-selection", HandleInsertSelection },
- { "select-start", HandleSelectStart },
- { "select-extend", HandleSelectExtend },
- { "start-extend", HandleStartExtend },
- { "select-end", HandleSelectEnd },
- { "clear-saved-lines", HandleClearSavedLines },
- { "popup-menu", HandlePopupMenu },
- { "bell", HandleBell },
- { "ignore", HandleIgnore },
-#if OPT_DABBREV
- { "dabbrev-expand", HandleDabbrevExpand },
-#endif
-#if OPT_SHIFT_FONTS
- { "larger-vt-font", HandleLargerFont },
- { "smaller-vt-font", HandleSmallerFont },
-#endif
- };
- /* *INDENT-ON* */
-
- XtAppAddActions(app_con, input_actions, XtNumber(input_actions));
-#endif
- XtAugmentTranslations(w, XtParseTranslationTable(defaultTranslations));
-}
-
-#if OPT_ISO_COLORS
-/*
- * The terminal's foreground and background colors are set via two mechanisms:
- * text (cur_foreground, cur_background values that are passed down to
- * XDrawImageString and XDrawString)
- * area (X11 graphics context used in XClearArea and XFillRectangle)
- */
-void
-SGR_Foreground(int color)
-{
- TScreen *screen = &term->screen;
- Pixel fg;
-
- if (color >= 0) {
- term->flags |= FG_COLOR;
- } else {
- term->flags &= ~FG_COLOR;
- }
- fg = getXtermForeground(term->flags, color);
- term->cur_foreground = color;
-
- XSetForeground(screen->display, NormalGC(screen), fg);
- XSetBackground(screen->display, ReverseGC(screen), fg);
-
- if (NormalGC(screen) != NormalBoldGC(screen)) {
- XSetForeground(screen->display, NormalBoldGC(screen), fg);
- XSetBackground(screen->display, ReverseBoldGC(screen), fg);
- }
-}
-
-void
-SGR_Background(int color)
-{
- TScreen *screen = &term->screen;
- Pixel bg;
-
- /*
- * An indexing operation may have set screen->scroll_amt, which would
- * normally result in calling FlushScroll() in WriteText(). However,
- * if we're changing the background color now, then the new value
- * should not apply to the pending blank lines.
- */
- if (screen->scroll_amt && (color != term->cur_background))
- FlushScroll(screen);
-
- if (color >= 0) {
- term->flags |= BG_COLOR;
- } else {
- term->flags &= ~BG_COLOR;
- }
- bg = getXtermBackground(term->flags, color);
- term->cur_background = color;
-
- XSetBackground(screen->display, NormalGC(screen), bg);
- XSetForeground(screen->display, ReverseGC(screen), bg);
-
- if (NormalGC(screen) != NormalBoldGC(screen)) {
- XSetBackground(screen->display, NormalBoldGC(screen), bg);
- XSetForeground(screen->display, ReverseBoldGC(screen), bg);
- }
-}
-
-/* Invoked after updating bold/underline flags, computes the extended color
- * index to use for foreground. (See also 'extract_fg()').
- */
-static void
-setExtendedFG(void)
-{
- int fg = term->sgr_foreground;
-
- if (term->screen.colorAttrMode
- || (fg < 0)) {
- if (term->screen.colorULMode && (term->flags & UNDERLINE))
- fg = COLOR_UL;
- if (term->screen.colorBDMode && (term->flags & BOLD))
- fg = COLOR_BD;
- if (term->screen.colorBLMode && (term->flags & BLINK))
- fg = COLOR_BL;
- }
-
- /* This implements the IBM PC-style convention of 8-colors, with one
- * bit for bold, thus mapping the 0-7 codes to 8-15. It won't make
- * much sense for 16-color applications, but we keep it to retain
- * compatiblity with ANSI-color applications.
- */
-#if OPT_PC_COLORS /* XXXJTL should be settable at runtime (resource or OSC?) */
- if (term->screen.boldColors
- && (!term->sgr_extended)
- && (fg >= 0)
- && (fg < 8)
- && (term->flags & BOLD))
- fg |= 8;
-#endif
-
- SGR_Foreground(fg);
-}
-
-/* Invoked after updating inverse flag, computes the extended color
- * index to use for background. (See also 'extract_bg()').
- */
-static void
-setExtendedBG(void)
-{
- int bg = term->sgr_background;
-
- if (term->screen.colorAttrMode
- || (bg < 0)) {
- if (term->screen.colorRVMode && (term->flags & INVERSE))
- bg = COLOR_RV;
- }
-
- SGR_Background(bg);
-}
-
-static void
-reset_SGR_Foreground(void)
-{
- term->sgr_foreground = -1;
- term->sgr_extended = 0;
- setExtendedFG();
-}
-
-static void
-reset_SGR_Background(void)
-{
- term->sgr_background = -1;
- setExtendedBG();
-}
-
-static void
-reset_SGR_Colors(void)
-{
- reset_SGR_Foreground();
- reset_SGR_Background();
-}
-#endif /* OPT_ISO_COLORS */
-
-void
-resetCharsets(TScreen * screen)
-{
- TRACE(("resetCharsets\n"));
-
- screen->gsets[0] = 'B'; /* ASCII_G */
- screen->gsets[1] = 'B'; /* ASCII_G */
- screen->gsets[2] = 'B'; /* ASCII_G */
- screen->gsets[3] = 'B'; /* ASCII_G */
-
- screen->curgl = 0; /* G0 => GL. */
- screen->curgr = 2; /* G2 => GR. */
- screen->curss = 0; /* No single shift. */
-
-#if OPT_VT52_MODE
- if (screen->vtXX_level == 0)
- screen->gsets[1] = '0'; /* Graphics */
-#endif
-}
-
-/*
- * VT300 and up support three ANSI conformance levels, defined according to
- * the dpANSI X3.134.1 standard. DEC's manuals equate levels 1 and 2, and
- * are unclear. This code is written based on the manuals.
- */
-static void
-set_ansi_conformance(TScreen * screen, int level)
-{
- TRACE(("set_ansi_conformance(%d) terminal_id %d, ansi_level %d\n",
- level,
- screen->terminal_id,
- screen->ansi_level));
- if (screen->vtXX_level >= 3) {
- switch (screen->ansi_level = level) {
- case 1:
- /* FALLTHRU */
- case 2:
- screen->gsets[0] = 'B'; /* G0 is ASCII */
- screen->gsets[1] = 'B'; /* G1 is ISO Latin-1 (FIXME) */
- screen->curgl = 0;
- screen->curgr = 1;
- break;
- case 3:
- screen->gsets[0] = 'B'; /* G0 is ASCII */
- screen->curgl = 0;
- break;
- }
- }
-}
-
-/*
- * Set scrolling margins. VTxxx terminals require that the top/bottom are
- * different, so we have at least two lines in the scrolling region.
- */
-void
-set_tb_margins(TScreen * screen, int top, int bottom)
-{
- TRACE(("set_tb_margins %d..%d, prior %d..%d\n",
- top, bottom,
- screen->top_marg,
- screen->bot_marg));
- if (bottom > top) {
- screen->top_marg = top;
- screen->bot_marg = bottom;
- }
- if (screen->top_marg > screen->max_row)
- screen->top_marg = screen->max_row;
- if (screen->bot_marg > screen->max_row)
- screen->bot_marg = screen->max_row;
-}
-
-void
-set_max_col(TScreen * screen, int cols)
-{
- TRACE(("set_max_col %d, prior %d\n", cols, screen->max_col));
- if (cols < 0)
- cols = 0;
- screen->max_col = cols;
-}
-
-void
-set_max_row(TScreen * screen, int rows)
-{
- TRACE(("set_max_row %d, prior %d\n", rows, screen->max_row));
- if (rows < 0)
- rows = 0;
- screen->max_row = rows;
-}
-
-#if OPT_TRACE
-#define WHICH_TABLE(name) if (table == name) result = #name
-static char *
-which_table(Const PARSE_T * table)
-{
- char *result = "?";
- /* *INDENT-OFF* */
- WHICH_TABLE (ansi_table);
- else WHICH_TABLE (csi_table);
- else WHICH_TABLE (csi2_table);
- else WHICH_TABLE (csi_ex_table);
- else WHICH_TABLE (csi_quo_table);
-#if OPT_DEC_LOCATOR
- else WHICH_TABLE (csi_tick_table);
-#endif
-#if OPT_DEC_RECTOPS
- else WHICH_TABLE (csi_dollar_table);
- else WHICH_TABLE (csi_star_table);
-#endif
- else WHICH_TABLE (dec_table);
- else WHICH_TABLE (dec2_table);
- else WHICH_TABLE (dec3_table);
- else WHICH_TABLE (cigtable);
- else WHICH_TABLE (eigtable);
- else WHICH_TABLE (esc_table);
- else WHICH_TABLE (esc_sp_table);
- else WHICH_TABLE (scrtable);
- else WHICH_TABLE (scstable);
- else WHICH_TABLE (sos_table);
-#if OPT_WIDE_CHARS
- else WHICH_TABLE (esc_pct_table);
-#endif
-#if OPT_VT52_MODE
- else WHICH_TABLE (vt52_table);
- else WHICH_TABLE (vt52_esc_table);
- else WHICH_TABLE (vt52_ignore_table);
-#endif
- /* *INDENT-ON* */
-
- return result;
-}
-#endif
-
- /* allocate larger buffer if needed/possible */
-#define SafeAlloc(type, area, used, size) \
- type *new_string = area; \
- unsigned new_length = size; \
- if (new_length == 0) { \
- new_length = 256; \
- new_string = TypeMallocN(type, new_length); \
- } else if (used+1 >= new_length) { \
- new_length = size * 2; \
- new_string = TypeMallocN(type, new_length); \
- if (new_string != 0 \
- && area != 0 \
- && used != 0) \
- memcpy(new_string, area, used * sizeof(type)); \
- }
-
-#define WriteNow() { \
- unsigned single = 0; \
- \
- if (screen->curss) { \
- dotext(screen, \
- screen->gsets[(int) (screen->curss)], \
- print_area, 1); \
- screen->curss = 0; \
- single++; \
- } \
- if (print_used > single) { \
- dotext(screen, \
- screen->gsets[(int) (screen->curgl)], \
- print_area + single, \
- print_used - single); \
- } \
- print_used = 0; \
- } \
-
-struct ParseState {
-#if OPT_VT52_MODE
- Bool vt52_cup;
-#endif
- Const PARSE_T *groundtable;
- Const PARSE_T *parsestate;
- int scstype;
- Bool private_function; /* distinguish private-mode from standard */
- int string_mode; /* nonzero iff we're processing a string */
- int lastchar; /* positive iff we had a graphic character */
- int nextstate;
-#if OPT_WIDE_CHARS
- int last_was_wide;
-#endif
-};
-
-static struct ParseState myState;
-
-static Boolean
-doparsing(unsigned c, struct ParseState *sp)
-{
- /* Buffer for processing printable text */
- static IChar *print_area;
- static size_t print_size, print_used;
-
- /* Buffer for processing strings (e.g., OSC ... ST) */
- static Char *string_area;
- static size_t string_size, string_used;
-
- TScreen *screen = &term->screen;
- int row;
- int col;
- int top;
- int bot;
- int count;
- int laststate;
- int thischar = -1;
- XTermRect myRect;
-
- do {
-#if OPT_WIDE_CHARS
-
- /*
- * Handle zero-width combining characters. Make it faster by noting
- * that according to the Unicode charts, the majority of Western
- * character sets do not use this feature. There are some unassigned
- * codes at 0x242, but no zero-width characters until past 0x300.
- */
- if (c >= 0x300 && screen->wide_chars
- && my_wcwidth((int) c) == 0) {
- int prev, precomposed;
-
- WriteNow();
-
- prev = getXtermCell(screen,
- screen->last_written_row,
- screen->last_written_col);
- precomposed = do_precomposition(prev, (int) c);
-
- if (precomposed != -1) {
- putXtermCell(screen,
- screen->last_written_row,
- screen->last_written_col, precomposed);
- } else {
- addXtermCombining(screen,
- screen->last_written_row,
- screen->last_written_col, c);
- }
- if (!screen->scroll_amt)
- ScrnUpdate(screen,
- screen->last_written_row,
- screen->last_written_col, 1, 1, 1);
- continue;
- }
-#endif
-
- /* Intercept characters for printer controller mode */
- if (screen->printer_controlmode == 2) {
- if ((c = xtermPrinterControl((int) c)) == 0)
- continue;
- }
-
- /*
- * VT52 is a little ugly in the one place it has a parameterized
- * control sequence, since the parameter falls after the character
- * that denotes the type of sequence.
- */
-#if OPT_VT52_MODE
- if (sp->vt52_cup) {
- if (nparam < NPARAM)
- param[nparam++] = (c & 0x7f) - 32;
- if (nparam < 2)
- continue;
- sp->vt52_cup = False;
- if ((row = param[0]) < 0)
- row = 0;
- if ((col = param[1]) < 0)
- col = 0;
- CursorSet(screen, row, col, term->flags);
- sp->parsestate = vt52_table;
- param[0] = 0;
- param[1] = 0;
- continue;
- }
-#endif
-
- /*
- * The parsing tables all have 256 entries. If we're supporting
- * wide characters, we handle them by treating them the same as
- * printing characters.
- */
- laststate = sp->nextstate;
-#if OPT_WIDE_CHARS
- if (c > 255) {
- if (sp->parsestate == sp->groundtable) {
- sp->nextstate = CASE_PRINT;
- } else if (sp->parsestate == sos_table) {
- c &= 0xffff;
- if (c > 255) {
- TRACE(("Found code > 255 while in SOS state: %04X\n", c));
- c = '?';
- }
- } else {
- sp->nextstate = CASE_GROUND_STATE;
- }
- } else
-#endif
- sp->nextstate = sp->parsestate[E2A(c)];
-
-#if OPT_BROKEN_OSC
- /*
- * Linux console palette escape sequences start with an OSC, but do
- * not terminate correctly. Some scripts do not check before writing
- * them, making xterm appear to hang (it's awaiting a valid string
- * terminator). Just ignore these if we see them - there's no point
- * in emulating bad code.
- */
- if (screen->brokenLinuxOSC
- && sp->parsestate == sos_table) {
- if (string_used) {
- switch (string_area[0]) {
- case 'P':
- if (string_used <= 7)
- break;
- /* FALLTHRU */
- case 'R':
- sp->parsestate = sp->groundtable;
- sp->nextstate = sp->parsestate[E2A(c)];
- TRACE(("Reset to ground state (brokenLinuxOSC)\n"));
- break;
- }
- }
- }
-#endif
-
-#if OPT_BROKEN_ST
- /*
- * Before patch #171, carriage control embedded within an OSC string
- * would terminate it. Some (buggy, of course) applications rely on
- * this behavior. Accommodate them by allowing one to compile xterm
- * and emulate the old behavior.
- */
- if (screen->brokenStringTerm
- && sp->parsestate == sos_table
- && c < 32) {
- switch (c) {
- case 5: /* FALLTHRU */
- case 8: /* FALLTHRU */
- case 9: /* FALLTHRU */
- case 10: /* FALLTHRU */
- case 11: /* FALLTHRU */
- case 12: /* FALLTHRU */
- case 13: /* FALLTHRU */
- case 14: /* FALLTHRU */
- case 15: /* FALLTHRU */
- case 24:
- sp->parsestate = sp->groundtable;
- sp->nextstate = sp->parsestate[E2A(c)];
- TRACE(("Reset to ground state (brokenStringTerm)\n"));
- break;
- }
- }
-#endif
-
-#if OPT_C1_PRINT
- /*
- * This is not completely foolproof, but will allow an application
- * with values in the C1 range to use them as printable characters,
- * provided that they are not intermixed with an escape sequence.
- */
- if (screen->c1_printable
- && (c >= 128 && c < 160)) {
- sp->nextstate = (sp->parsestate == esc_table
- ? CASE_ESC_IGNORE
- : sp->parsestate[E2A(160)]);
- }
-#endif
-
-#if OPT_WIDE_CHARS
- /*
- * If we have a C1 code and the c1_printable flag is not set, simply
- * ignore it when it was translated from UTF-8. That is because the
- * value could not have been present as-is in the UTF-8.
- *
- * To see that CASE_IGNORE is a consistent value, note that it is
- * always used for NUL and other uninteresting C0 controls.
- */
-#if OPT_C1_PRINT
- if (!screen->c1_printable)
-#endif
- if (screen->wide_chars
- && (c >= 128 && c < 160)) {
- sp->nextstate = CASE_IGNORE;
- }
-
- /*
- * If this character is a different width than the last one, put the
- * previous text into the buffer and draw it now.
- */
- if (iswide((int) c) != sp->last_was_wide) {
- WriteNow();
- }
-#endif
-
- /*
- * Accumulate string for printable text. This may be 8/16-bit
- * characters.
- */
- if (sp->nextstate == CASE_PRINT) {
- SafeAlloc(IChar, print_area, print_used, print_size);
- if (new_string == 0) {
- fprintf(stderr,
- "Cannot allocate %u bytes for printable text\n",
- new_length);
- continue;
- }
-#if OPT_VT52_MODE
- /*
- * Strip output text to 7-bits for VT52. We should do this for
- * VT100 also (which is a 7-bit device), but xterm has been
- * doing this for so long we shouldn't change this behavior.
- */
- if (screen->vtXX_level < 1)
- c &= 0x7f;
-#endif
- print_area = new_string;
- print_size = new_length;
- print_area[print_used++] = sp->lastchar = thischar = c;
-#if OPT_WIDE_CHARS
- sp->last_was_wide = iswide((int) c);
-#endif
- if (morePtyData(screen, VTbuffer)) {
- continue;
- }
- }
-
- if (sp->nextstate == CASE_PRINT
- || (laststate == CASE_PRINT && print_used)) {
- WriteNow();
- }
-
- /*
- * Accumulate string for APC, DCS, PM, OSC, SOS controls
- * This should always be 8-bit characters.
- */
- if (sp->parsestate == sos_table) {
- SafeAlloc(Char, string_area, string_used, string_size);
- if (new_string == 0) {
- fprintf(stderr,
- "Cannot allocate %u bytes for string mode %d\n",
- new_length, sp->string_mode);
- continue;
- }
-#if OPT_WIDE_CHARS
- /*
- * We cannot display codes above 255, but let's try to
- * accommodate the application a little by not aborting the
- * string.
- */
- if ((c & 0xffff) > 255) {
- sp->nextstate = CASE_PRINT;
- c = '?';
- }
-#endif
- string_area = new_string;
- string_size = new_length;
- string_area[string_used++] = c;
- } else if (sp->parsestate != esc_table) {
- /* if we were accumulating, we're not any more */
- sp->string_mode = 0;
- string_used = 0;
- }
-
- TRACE(("parse %04X -> %d %s\n", c, sp->nextstate, which_table(sp->parsestate)));
-
- switch (sp->nextstate) {
- case CASE_PRINT:
- TRACE(("CASE_PRINT - printable characters\n"));
- break;
-
- case CASE_GROUND_STATE:
- TRACE(("CASE_GROUND_STATE - exit ignore mode\n"));
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_IGNORE:
- TRACE(("CASE_IGNORE - Ignore character %02X\n", c));
- break;
-
- case CASE_ENQ:
- TRACE(("CASE_ENQ - answerback\n"));
- for (count = 0; screen->answer_back[count] != 0; count++)
- unparseputc(screen->answer_back[count], screen->respond);
- break;
-
- case CASE_BELL:
- TRACE(("CASE_BELL - bell\n"));
- if (sp->string_mode == OSC) {
- if (string_used)
- string_area[--string_used] = '\0';
- do_osc(string_area, string_used, (int) c);
- sp->parsestate = sp->groundtable;
- } else {
- /* bell */
- Bell(XkbBI_TerminalBell, 0);
- }
- break;
-
- case CASE_BS:
- TRACE(("CASE_BS - backspace\n"));
- CursorBack(screen, 1);
- break;
-
- case CASE_CR:
- /* CR */
- CarriageReturn(screen);
- break;
-
- case CASE_ESC:
- if_OPT_VT52_MODE(screen, {
- sp->parsestate = vt52_esc_table;
- break;
- });
- sp->parsestate = esc_table;
- break;
-
-#if OPT_VT52_MODE
- case CASE_VT52_CUP:
- TRACE(("CASE_VT52_CUP - VT52 cursor addressing\n"));
- sp->vt52_cup = True;
- nparam = 0;
- break;
-
- case CASE_VT52_IGNORE:
- TRACE(("CASE_VT52_IGNORE - VT52 ignore-character\n"));
- sp->parsestate = vt52_ignore_table;
- break;
-#endif
-
- case CASE_VMOT:
- /*
- * form feed, line feed, vertical tab
- */
- xtermAutoPrint((int) c);
- xtermIndex(screen, 1);
- if (term->flags & LINEFEED)
- CarriageReturn(screen);
- do_xevents();
- break;
-
- case CASE_CBT:
- /* cursor backward tabulation */
- if ((count = param[0]) == DEFAULT)
- count = 1;
- while ((count-- > 0)
- && (TabToPrevStop(screen))) ;
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_CHT:
- /* cursor forward tabulation */
- if ((count = param[0]) == DEFAULT)
- count = 1;
- while ((count-- > 0)
- && (TabToNextStop(screen))) ;
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_TAB:
- /* tab */
- TabToNextStop(screen);
- break;
-
- case CASE_SI:
- screen->curgl = 0;
- if_OPT_VT52_MODE(screen, {
- sp->parsestate = sp->groundtable;
- });
- break;
-
- case CASE_SO:
- screen->curgl = 1;
- if_OPT_VT52_MODE(screen, {
- sp->parsestate = sp->groundtable;
- });
- break;
-
- case CASE_DECDHL:
- xterm_DECDHL(c == '3');
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DECSWL:
- xterm_DECSWL();
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DECDWL:
- xterm_DECDWL();
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_SCR_STATE:
- /* enter scr state */
- sp->parsestate = scrtable;
- break;
-
- case CASE_SCS0_STATE:
- /* enter scs state 0 */
- sp->scstype = 0;
- sp->parsestate = scstable;
- break;
-
- case CASE_SCS1_STATE:
- /* enter scs state 1 */
- sp->scstype = 1;
- sp->parsestate = scstable;
- break;
-
- case CASE_SCS2_STATE:
- /* enter scs state 2 */
- sp->scstype = 2;
- sp->parsestate = scstable;
- break;
-
- case CASE_SCS3_STATE:
- /* enter scs state 3 */
- sp->scstype = 3;
- sp->parsestate = scstable;
- break;
-
- case CASE_ESC_IGNORE:
- /* unknown escape sequence */
- sp->parsestate = eigtable;
- break;
-
- case CASE_ESC_DIGIT:
- /* digit in csi or dec mode */
- if ((row = param[nparam - 1]) == DEFAULT)
- row = 0;
- param[nparam - 1] = 10 * row + (c - '0');
- if (param[nparam - 1] > 65535)
- param[nparam - 1] = 65535;
- if (sp->parsestate == csi_table)
- sp->parsestate = csi2_table;
- break;
-
- case CASE_ESC_SEMI:
- /* semicolon in csi or dec mode */
- if (nparam < NPARAM)
- param[nparam++] = DEFAULT;
- if (sp->parsestate == csi_table)
- sp->parsestate = csi2_table;
- break;
-
- case CASE_DEC_STATE:
- /* enter dec mode */
- sp->parsestate = dec_table;
- break;
-
- case CASE_DEC2_STATE:
- /* enter dec2 mode */
- sp->parsestate = dec2_table;
- break;
-
- case CASE_DEC3_STATE:
- /* enter dec3 mode */
- sp->parsestate = dec3_table;
- break;
-
- case CASE_ICH:
- TRACE(("CASE_ICH - insert char\n"));
- if ((row = param[0]) < 1)
- row = 1;
- InsertChar(screen, (unsigned) row);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_CUU:
- TRACE(("CASE_CUU - cursor up\n"));
- if ((row = param[0]) < 1)
- row = 1;
- CursorUp(screen, row);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_CUD:
- TRACE(("CASE_CUD - cursor down\n"));
- if ((row = param[0]) < 1)
- row = 1;
- CursorDown(screen, row);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_CUF:
- TRACE(("CASE_CUF - cursor forward\n"));
- if ((col = param[0]) < 1)
- col = 1;
- CursorForward(screen, col);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_CUB:
- TRACE(("CASE_CUB - cursor backward\n"));
- if ((col = param[0]) < 1)
- col = 1;
- CursorBack(screen, col);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_CUP:
- TRACE(("CASE_CUP - cursor position\n"));
- if_OPT_XMC_GLITCH(screen, {
- Jump_XMC(screen);
- });
- if ((row = param[0]) < 1)
- row = 1;
- if (nparam < 2 || (col = param[1]) < 1)
- col = 1;
- CursorSet(screen, row - 1, col - 1, term->flags);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_VPA:
- TRACE(("CASE_VPA - vertical position\n"));
- if ((row = param[0]) < 1)
- row = 1;
- CursorSet(screen, row - 1, screen->cur_col, term->flags);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_HPA:
- TRACE(("CASE_HPA - horizontal position\n"));
- if ((col = param[0]) < 1)
- col = 1;
- CursorSet(screen, screen->cur_row, col - 1, term->flags);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_HP_BUGGY_LL:
- TRACE(("CASE_HP_BUGGY_LL\n"));
- /* Some HP-UX applications have the bug that they
- assume ESC F goes to the lower left corner of
- the screen, regardless of what terminfo says. */
- if (screen->hp_ll_bc)
- CursorSet(screen, screen->max_row, 0, term->flags);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_ED:
- TRACE(("CASE_ED - erase display\n"));
- do_erase_display(screen, param[0], OFF_PROTECT);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_EL:
- TRACE(("CASE_EL - erase line\n"));
- do_erase_line(screen, param[0], OFF_PROTECT);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_ECH:
- TRACE(("CASE_ECH - erase char\n"));
- /* ECH */
- ClearRight(screen, param[0] < 1 ? 1 : param[0]);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_IL:
- TRACE(("CASE_IL - insert line\n"));
- if ((row = param[0]) < 1)
- row = 1;
- InsertLine(screen, row);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DL:
- TRACE(("CASE_DL - delete line\n"));
- if ((row = param[0]) < 1)
- row = 1;
- DeleteLine(screen, row);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DCH:
- TRACE(("CASE_DCH - delete char\n"));
- if ((row = param[0]) < 1)
- row = 1;
- DeleteChar(screen, (unsigned) row);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_TRACK_MOUSE:
- /*
- * A single parameter other than zero is always scroll-down.
- * A zero-parameter is used to reset the mouse mode, and is
- * not useful for scrolling anyway.
- */
- if (nparam > 1 || param[0] == 0) {
- TRACE(("CASE_TRACK_MOUSE\n"));
- /* Track mouse as long as in window and between
- * specified rows
- */
- TrackMouse(param[0],
- param[2] - 1, param[1] - 1,
- param[3] - 1, param[4] - 2);
- } else {
- TRACE(("CASE_SD - scroll down\n"));
- /* SD */
- if ((count = param[0]) < 1)
- count = 1;
- RevScroll(screen, count);
- do_xevents();
- }
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DECID:
- TRACE(("CASE_DECID\n"));
- if_OPT_VT52_MODE(screen, {
- unparseputc(ESC, screen->respond);
- unparseputc('/', screen->respond);
- unparseputc('Z', screen->respond);
- sp->parsestate = sp->groundtable;
- break;
- });
- param[0] = DEFAULT; /* Default ID parameter */
- /* FALLTHRU */
- case CASE_DA1:
- TRACE(("CASE_DA1\n"));
- if (param[0] <= 0) { /* less than means DEFAULT */
- count = 0;
- reply.a_type = CSI;
- reply.a_pintro = '?';
-
- /* The first param corresponds to the highest
- * operating level (i.e., service level) of the
- * emulation. A DEC terminal can be setup to
- * respond with a different DA response, but
- * there's no control sequence that modifies this.
- * We set it via a resource.
- */
- if (screen->terminal_id < 200) {
- switch (screen->terminal_id) {
- case 102:
- reply.a_param[count++] = 6; /* VT102 */
- break;
- case 101:
- reply.a_param[count++] = 1; /* VT101 */
- reply.a_param[count++] = 0; /* no options */
- break;
- default: /* VT100 */
- reply.a_param[count++] = 1; /* VT100 */
- reply.a_param[count++] = 2; /* AVO */
- break;
- }
- } else {
- reply.a_param[count++] = 60 + screen->terminal_id / 100;
- reply.a_param[count++] = 1; /* 132-columns */
- reply.a_param[count++] = 2; /* printer */
- reply.a_param[count++] = 6; /* selective-erase */
-#if OPT_SUNPC_KBD
- if (term->keyboard.type == keyboardIsVT220)
-#endif
- reply.a_param[count++] = 8; /* user-defined-keys */
- reply.a_param[count++] = 9; /* national replacement charsets */
- reply.a_param[count++] = 15; /* technical characters */
- if_OPT_ISO_COLORS(screen, {
- reply.a_param[count++] = 22; /* ANSI color, VT525 */
- });
-#if OPT_DEC_LOCATOR
- reply.a_param[count++] = 29; /* ANSI text locator */
-#endif
- }
- reply.a_nparam = count;
- reply.a_inters = 0;
- reply.a_final = 'c';
- unparseseq(&reply, screen->respond);
- }
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DA2:
- TRACE(("CASE_DA2\n"));
- if (param[0] <= 0) { /* less than means DEFAULT */
- count = 0;
- reply.a_type = CSI;
- reply.a_pintro = '>';
-
- if (screen->terminal_id >= 200)
- reply.a_param[count++] = 1; /* VT220 */
- else
- reply.a_param[count++] = 0; /* VT100 (nonstandard) */
- reply.a_param[count++] = XTERM_PATCH; /* Version */
- reply.a_param[count++] = 0; /* options (none) */
- reply.a_nparam = count;
- reply.a_inters = 0;
- reply.a_final = 'c';
- unparseseq(&reply, screen->respond);
- }
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DECRPTUI:
- TRACE(("CASE_DECRPTUI\n"));
- if ((screen->terminal_id >= 400)
- && (param[0] <= 0)) { /* less than means DEFAULT */
- unparseputc1(DCS, screen->respond);
- unparseputc('!', screen->respond);
- unparseputc('|', screen->respond);
- unparseputc('0', screen->respond);
- unparseputc1(ST, screen->respond);
- }
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_TBC:
- TRACE(("CASE_TBC - tab clear\n"));
- if ((row = param[0]) <= 0) /* less than means default */
- TabClear(term->tabs, screen->cur_col);
- else if (row == 3)
- TabZonk(term->tabs);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_SET:
- TRACE(("CASE_SET - set mode\n"));
- ansi_modes(term, bitset);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_RST:
- TRACE(("CASE_RST - reset mode\n"));
- ansi_modes(term, bitclr);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_SGR:
- for (row = 0; row < nparam; ++row) {
- if_OPT_XMC_GLITCH(screen, {
- Mark_XMC(screen, param[row]);
- });
- TRACE(("CASE_SGR %d\n", param[row]));
- switch (param[row]) {
- case DEFAULT:
- case 0:
- term->flags &=
- ~(INVERSE | BOLD | BLINK | UNDERLINE | INVISIBLE);
- if_OPT_ISO_COLORS(screen, {
- reset_SGR_Colors();
- });
- break;
- case 1: /* Bold */
- term->flags |= BOLD;
- if_OPT_ISO_COLORS(screen, {
- setExtendedFG();
- });
- break;
- case 5: /* Blink */
- term->flags |= BLINK;
- StartBlinking(screen);
- if_OPT_ISO_COLORS(screen, {
- setExtendedFG();
- });
- break;
- case 4: /* Underscore */
- term->flags |= UNDERLINE;
- if_OPT_ISO_COLORS(screen, {
- setExtendedFG();
- });
- break;
- case 7:
- term->flags |= INVERSE;
- if_OPT_ISO_COLORS(screen, {
- setExtendedBG();
- });
- break;
- case 8:
- term->flags |= INVISIBLE;
- break;
- case 22: /* reset 'bold' */
- term->flags &= ~BOLD;
- if_OPT_ISO_COLORS(screen, {
- setExtendedFG();
- });
- break;
- case 24:
- term->flags &= ~UNDERLINE;
- if_OPT_ISO_COLORS(screen, {
- setExtendedFG();
- });
- break;
- case 25: /* reset 'blink' */
- term->flags &= ~BLINK;
- if_OPT_ISO_COLORS(screen, {
- setExtendedFG();
- });
- break;
- case 27:
- term->flags &= ~INVERSE;
- if_OPT_ISO_COLORS(screen, {
- setExtendedBG();
- });
- break;
- case 28:
- term->flags &= ~INVISIBLE;
- break;
- case 30:
- case 31:
- case 32:
- case 33:
- case 34:
- case 35:
- case 36:
- case 37:
- if_OPT_ISO_COLORS(screen, {
- term->sgr_foreground = (param[row] - 30);
- term->sgr_extended = 0;
- setExtendedFG();
- });
- break;
- case 38:
- /* This is more complicated than I'd
- like, but it should properly eat all
- the parameters for unsupported modes
- */
- if_OPT_ISO_COLORS(screen, {
- row++;
- if (row < nparam) {
- switch (param[row]) {
- case 5:
- row++;
- if (row < nparam &&
- param[row] < NUM_ANSI_COLORS) {
- term->sgr_foreground = param[row];
- term->sgr_extended = 1;
- setExtendedFG();
- }
- break;
- default:
- row += 7;
- break;
- }
- }
- });
- break;
- case 39:
- if_OPT_ISO_COLORS(screen, {
- reset_SGR_Foreground();
- });
- break;
- case 40:
- case 41:
- case 42:
- case 43:
- case 44:
- case 45:
- case 46:
- case 47:
- if_OPT_ISO_COLORS(screen, {
- term->sgr_background = (param[row] - 40);
- setExtendedBG();
- });
- break;
- case 48:
- if_OPT_ISO_COLORS(screen, {
- row++;
- if (row < nparam) {
- switch (param[row]) {
- case 5:
- row++;
- if (row < nparam &&
- param[row] < NUM_ANSI_COLORS) {
- term->sgr_background = param[row];
- setExtendedBG();
- }
- break;
- default:
- row += 7;
- break;
- }
- }
- });
- break;
- case 49:
- if_OPT_ISO_COLORS(screen, {
- reset_SGR_Background();
- });
- break;
- case 90:
- case 91:
- case 92:
- case 93:
- case 94:
- case 95:
- case 96:
- case 97:
- if_OPT_AIX_COLORS(screen, {
- term->sgr_foreground = (param[row] - 90 + 8);
- term->sgr_extended = 0;
- setExtendedFG();
- });
- break;
- case 100:
-#if !OPT_AIX_COLORS
- if_OPT_ISO_COLORS(screen, {
- reset_SGR_Foreground();
- reset_SGR_Background();
- });
- break;
-#endif
- case 101:
- case 102:
- case 103:
- case 104:
- case 105:
- case 106:
- case 107:
- if_OPT_AIX_COLORS(screen, {
- term->sgr_background = (param[row] - 100 + 8);
- setExtendedBG();
- });
- break;
- }
- }
- sp->parsestate = sp->groundtable;
- break;
-
- /* DSR (except for the '?') is a superset of CPR */
- case CASE_DSR:
- sp->private_function = True;
-
- /* FALLTHRU */
- case CASE_CPR:
- TRACE(("CASE_CPR - cursor position\n"));
- count = 0;
- reply.a_type = CSI;
- reply.a_pintro = sp->private_function ? '?' : 0;
- reply.a_inters = 0;
- reply.a_final = 'n';
-
- switch (param[0]) {
- case 5:
- /* operating status */
- reply.a_param[count++] = 0; /* (no malfunction ;-) */
- break;
- case 6:
- /* CPR */
- /* DECXCPR (with page=0) */
- reply.a_param[count++] = screen->cur_row + 1;
- reply.a_param[count++] = screen->cur_col + 1;
- reply.a_final = 'R';
- break;
- case 15:
- /* printer status */
- reply.a_param[count++] = 13; /* implement printer */
- break;
- case 25:
- /* UDK status */
- reply.a_param[count++] = 20; /* UDK always unlocked */
- break;
- case 26:
- /* keyboard status */
- reply.a_param[count++] = 27;
- reply.a_param[count++] = 1; /* North American */
- if (screen->terminal_id >= 400) {
- reply.a_param[count++] = 0; /* ready */
- reply.a_param[count++] = 0; /* LK201 */
- }
- break;
- case 53:
- /* Locator status */
-#if OPT_DEC_LOCATOR
- reply.a_param[count++] = 50; /* locator ready */
-#else
- reply.a_param[count++] = 53; /* no locator */
-#endif
- break;
- }
-
- if ((reply.a_nparam = count) != 0)
- unparseseq(&reply, screen->respond);
-
- sp->parsestate = sp->groundtable;
- sp->private_function = False;
- break;
-
- case CASE_MC:
- TRACE(("CASE_MC - media control\n"));
- xtermMediaControl(param[0], False);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DEC_MC:
- TRACE(("CASE_DEC_MC - DEC media control\n"));
- xtermMediaControl(param[0], True);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_HP_MEM_LOCK:
- case CASE_HP_MEM_UNLOCK:
- TRACE(("%s\n", ((sp->parsestate[c] == CASE_HP_MEM_LOCK)
- ? "CASE_HP_MEM_LOCK"
- : "CASE_HP_MEM_UNLOCK")));
- if (screen->scroll_amt)
- FlushScroll(screen);
- if (sp->parsestate[c] == CASE_HP_MEM_LOCK)
- set_tb_margins(screen, screen->cur_row, screen->bot_marg);
- else
- set_tb_margins(screen, 0, screen->bot_marg);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DECSTBM:
- TRACE(("CASE_DECSTBM - set scrolling region\n"));
- if ((top = param[0]) < 1)
- top = 1;
- if (nparam < 2 || (bot = param[1]) == DEFAULT
- || bot > MaxRows(screen)
- || bot == 0)
- bot = MaxRows(screen);
- if (bot > top) {
- if (screen->scroll_amt)
- FlushScroll(screen);
- set_tb_margins(screen, top - 1, bot - 1);
- CursorSet(screen, 0, 0, term->flags);
- }
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DECREQTPARM:
- TRACE(("CASE_DECREQTPARM\n"));
- if (screen->terminal_id < 200) { /* VT102 */
- if ((row = param[0]) == DEFAULT)
- row = 0;
- if (row == 0 || row == 1) {
- reply.a_type = CSI;
- reply.a_pintro = 0;
- reply.a_nparam = 7;
- reply.a_param[0] = row + 2;
- reply.a_param[1] = 1; /* no parity */
- reply.a_param[2] = 1; /* eight bits */
- reply.a_param[3] = 128; /* transmit 38.4k baud */
- reply.a_param[4] = 128; /* receive 38.4k baud */
- reply.a_param[5] = 1; /* clock multiplier ? */
- reply.a_param[6] = 0; /* STP flags ? */
- reply.a_inters = 0;
- reply.a_final = 'x';
- unparseseq(&reply, screen->respond);
- }
- }
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DECSET:
- /* DECSET */
-#if OPT_VT52_MODE
- if (screen->vtXX_level != 0)
-#endif
- dpmodes(term, bitset);
- sp->parsestate = sp->groundtable;
-#if OPT_TEK4014
- if (screen->TekEmu)
- return False;
-#endif
- break;
-
- case CASE_DECRST:
- /* DECRST */
- dpmodes(term, bitclr);
-#if OPT_VT52_MODE
- if (screen->vtXX_level == 0)
- sp->groundtable = vt52_table;
- else if (screen->terminal_id >= 100)
- sp->groundtable = ansi_table;
-#endif
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DECALN:
- TRACE(("CASE_DECALN - alignment test\n"));
- if (screen->cursor_state)
- HideCursor();
- set_tb_margins(screen, 0, screen->max_row);
- CursorSet(screen, 0, 0, term->flags);
- xtermParseRect(screen, 0, 0, &myRect);
- ScrnFillRectangle(screen, &myRect, 'E', 0);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_GSETS:
- TRACE(("CASE_GSETS(%d) = '%c'\n", sp->scstype, c));
- if (screen->vtXX_level != 0)
- screen->gsets[sp->scstype] = c;
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DECSC:
- TRACE(("CASE_DECSC - save cursor\n"));
- CursorSave(term);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DECRC:
- TRACE(("CASE_DECRC - restore cursor\n"));
- CursorRestore(term);
- if_OPT_ISO_COLORS(screen, {
- setExtendedFG();
- });
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DECKPAM:
- TRACE(("CASE_DECKPAM\n"));
- term->keyboard.flags |= MODE_DECKPAM;
- update_appkeypad();
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DECKPNM:
- TRACE(("CASE_DECKPNM\n"));
- term->keyboard.flags &= ~MODE_DECKPAM;
- update_appkeypad();
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_CSI_QUOTE_STATE:
- sp->parsestate = csi_quo_table;
- break;
-
-#if OPT_VT52_MODE
- case CASE_VT52_FINISH:
- TRACE(("CASE_VT52_FINISH terminal_id %d, vtXX_level %d\n",
- screen->terminal_id,
- screen->vtXX_level));
- if (screen->terminal_id >= 100
- && screen->vtXX_level == 0) {
- sp->groundtable =
- sp->parsestate = ansi_table;
- screen->vtXX_level = screen->vt52_save_level;
- screen->curgl = screen->vt52_save_curgl;
- screen->curgr = screen->vt52_save_curgr;
- screen->curss = screen->vt52_save_curss;
- memmove(screen->gsets, screen->vt52_save_gsets, sizeof(screen->gsets));
- }
- break;
-#endif
-
- case CASE_ANSI_LEVEL_1:
- TRACE(("CASE_ANSI_LEVEL_1\n"));
- set_ansi_conformance(screen, 1);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_ANSI_LEVEL_2:
- TRACE(("CASE_ANSI_LEVEL_2\n"));
- set_ansi_conformance(screen, 2);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_ANSI_LEVEL_3:
- TRACE(("CASE_ANSI_LEVEL_3\n"));
- set_ansi_conformance(screen, 3);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DECSCL:
- TRACE(("CASE_DECSCL(%d,%d)\n", param[0], param[1]));
- if (param[0] >= 61 && param[0] <= 65) {
- /*
- * VT300, VT420, VT520 manuals claim that DECSCL does a hard
- * reset (RIS). VT220 manual states that it is a soft reset.
- * Perhaps both are right (unlikely). Kermit says it's soft.
- */
- VTReset(False, False);
- screen->vtXX_level = param[0] - 60;
- if (param[0] > 61) {
- if (param[1] == 1)
- show_8bit_control(False);
- else if (param[1] == 0 || param[1] == 2)
- show_8bit_control(True);
- }
- }
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DECSCA:
- TRACE(("CASE_DECSCA\n"));
- screen->protected_mode = DEC_PROTECT;
- if (param[0] <= 0 || param[0] == 2)
- term->flags &= ~PROTECTED;
- else if (param[0] == 1)
- term->flags |= PROTECTED;
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DECSED:
- TRACE(("CASE_DECSED\n"));
- do_erase_display(screen, param[0], DEC_PROTECT);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DECSEL:
- TRACE(("CASE_DECSEL\n"));
- do_erase_line(screen, param[0], DEC_PROTECT);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_ST:
- TRACE(("CASE_ST: End of String (%d bytes)\n", string_used));
- sp->parsestate = sp->groundtable;
- if (!string_used)
- break;
- string_area[--string_used] = '\0';
- switch (sp->string_mode) {
- case APC:
- /* ignored */
- break;
- case DCS:
- do_dcs(string_area, string_used);
- break;
- case OSC:
- do_osc(string_area, string_used, ST);
- break;
- case PM:
- /* ignored */
- break;
- case SOS:
- /* ignored */
- break;
- }
- break;
-
- case CASE_SOS:
- TRACE(("CASE_SOS: Start of String\n"));
- sp->string_mode = SOS;
- sp->parsestate = sos_table;
- break;
-
- case CASE_PM:
- TRACE(("CASE_PM: Privacy Message\n"));
- sp->string_mode = PM;
- sp->parsestate = sos_table;
- break;
-
- case CASE_DCS:
- TRACE(("CASE_DCS: Device Control String\n"));
- sp->string_mode = DCS;
- sp->parsestate = sos_table;
- break;
-
- case CASE_APC:
- TRACE(("CASE_APC: Application Program Command\n"));
- sp->string_mode = APC;
- sp->parsestate = sos_table;
- break;
-
- case CASE_SPA:
- TRACE(("CASE_SPA - start protected area\n"));
- screen->protected_mode = ISO_PROTECT;
- term->flags |= PROTECTED;
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_EPA:
- TRACE(("CASE_EPA - end protected area\n"));
- term->flags &= ~PROTECTED;
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_SU:
- TRACE(("CASE_SU - scroll up\n"));
- if ((count = param[0]) < 1)
- count = 1;
- xtermScroll(screen, count);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_IND:
- TRACE(("CASE_IND - index\n"));
- xtermIndex(screen, 1);
- do_xevents();
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_CPL:
- TRACE(("CASE_CPL - cursor prev line\n"));
- CursorPrevLine(screen, param[0]);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_CNL:
- TRACE(("CASE_NPL - cursor next line\n"));
- CursorNextLine(screen, param[0]);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_NEL:
- TRACE(("CASE_NEL\n"));
- xtermIndex(screen, 1);
- CarriageReturn(screen);
- do_xevents();
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_HTS:
- TRACE(("CASE_HTS - horizontal tab set\n"));
- TabSet(term->tabs, screen->cur_col);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_RI:
- TRACE(("CASE_RI - reverse index\n"));
- RevIndex(screen, 1);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_SS2:
- TRACE(("CASE_SS2\n"));
- screen->curss = 2;
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_SS3:
- TRACE(("CASE_SS3\n"));
- screen->curss = 3;
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_CSI_STATE:
- /* enter csi state */
- nparam = 1;
- param[0] = DEFAULT;
- sp->parsestate = csi_table;
- break;
-
- case CASE_ESC_SP_STATE:
- /* esc space */
- sp->parsestate = esc_sp_table;
- break;
-
- case CASE_CSI_EX_STATE:
- /* csi exclamation */
- sp->parsestate = csi_ex_table;
- break;
-
-#if OPT_DEC_LOCATOR
- case CASE_CSI_TICK_STATE:
- /* csi tick (') */
- sp->parsestate = csi_tick_table;
- break;
-
- case CASE_DECEFR:
- TRACE(("CASE_DECEFR - Enable Filter Rectangle\n"));
- if (screen->send_mouse_pos == DEC_LOCATOR) {
- MotionOff(screen, term);
- if ((screen->loc_filter_top = param[0]) < 1)
- screen->loc_filter_top = LOC_FILTER_POS;
- if (nparam < 2 || (screen->loc_filter_left = param[1]) < 1)
- screen->loc_filter_left = LOC_FILTER_POS;
- if (nparam < 3 || (screen->loc_filter_bottom = param[2]) < 1)
- screen->loc_filter_bottom = LOC_FILTER_POS;
- if (nparam < 4 || (screen->loc_filter_right = param[3]) < 1)
- screen->loc_filter_right = LOC_FILTER_POS;
- InitLocatorFilter(term);
- }
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DECELR:
- MotionOff(screen, term);
- if (param[0] <= 0 || param[0] > 2) {
- screen->send_mouse_pos = MOUSE_OFF;
- TRACE(("DECELR - Disable Locator Reports\n"));
- } else {
- TRACE(("DECELR - Enable Locator Reports\n"));
- screen->send_mouse_pos = DEC_LOCATOR;
- if (param[0] == 2) {
- screen->locator_reset = True;
- } else {
- screen->locator_reset = False;
- }
- if (nparam < 2 || param[1] != 1) {
- screen->locator_pixels = False;
- } else {
- screen->locator_pixels = True;
- }
- screen->loc_filter = False;
- }
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DECSLE:
- TRACE(("DECSLE - Select Locator Events\n"));
- for (count = 0; count < nparam; ++count) {
- switch (param[count]) {
- case DEFAULT:
- case 0:
- MotionOff(screen, term);
- screen->loc_filter = False;
- screen->locator_events = 0;
- break;
- case 1:
- screen->locator_events |= LOC_BTNS_DN;
- break;
- case 2:
- screen->locator_events &= ~LOC_BTNS_DN;
- break;
- case 3:
- screen->locator_events |= LOC_BTNS_UP;
- break;
- case 4:
- screen->locator_events &= ~LOC_BTNS_UP;
- break;
- }
- }
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DECRQLP:
- TRACE(("DECRQLP - Request Locator Position\n"));
- if (param[0] < 2) {
- /* Issue DECLRP Locator Position Report */
- GetLocatorPosition(term);
- }
- sp->parsestate = sp->groundtable;
- break;
-#endif /* OPT_DEC_LOCATOR */
-
-#if OPT_DEC_RECTOPS
- case CASE_CSI_DOLLAR_STATE:
- /* csi dollar ($) */
- if (screen->vtXX_level >= 4)
- sp->parsestate = csi_dollar_table;
- else
- sp->parsestate = eigtable;
- break;
-
- case CASE_CSI_STAR_STATE:
- /* csi dollar (*) */
- if (screen->vtXX_level >= 4)
- sp->parsestate = csi_star_table;
- else
- sp->parsestate = eigtable;
- break;
-
- case CASE_DECCRA:
- TRACE(("CASE_DECCRA - Copy rectangular area\n"));
- xtermParseRect(screen, nparam, param, &myRect);
- ScrnCopyRectangle(screen, &myRect, nparam - 5, param + 5);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DECERA:
- TRACE(("CASE_DECERA - Erase rectangular area\n"));
- xtermParseRect(screen, nparam, param, &myRect);
- ScrnFillRectangle(screen, &myRect, ' ', 0);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DECFRA:
- TRACE(("CASE_DECFRA - Fill rectangular area\n"));
- if (nparam > 0
- && ((param[0] >= 32 && param[0] <= 126)
- || (param[0] >= 160 && param[0] <= 255))) {
- xtermParseRect(screen, nparam - 1, param + 1, &myRect);
- ScrnFillRectangle(screen, &myRect, param[0], term->flags);
- }
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DECSERA:
- TRACE(("CASE_DECSERA - Selective erase rectangular area\n"));
- xtermParseRect(screen, nparam > 4 ? 4 : nparam, param, &myRect);
- ScrnWipeRectangle(screen, &myRect);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DECSACE:
- TRACE(("CASE_DECSACE - Select attribute change extent\n"));
- screen->cur_decsace = param[0];
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DECCARA:
- TRACE(("CASE_DECCARA - Change attributes in rectangular area\n"));
- xtermParseRect(screen, nparam > 4 ? 4 : nparam, param, &myRect);
- ScrnMarkRectangle(screen, &myRect, False, nparam - 4, param + 4);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DECRARA:
- TRACE(("CASE_DECRARA - Reverse attributes in rectangular area\n"));
- xtermParseRect(screen, nparam > 4 ? 4 : nparam, param, &myRect);
- ScrnMarkRectangle(screen, &myRect, True, nparam - 4, param + 4);
- sp->parsestate = sp->groundtable;
- break;
-#else
- case CASE_CSI_DOLLAR_STATE:
- /* csi dollar ($) */
- sp->parsestate = eigtable;
- break;
-
- case CASE_CSI_STAR_STATE:
- /* csi dollar (*) */
- sp->parsestate = eigtable;
- break;
-#endif /* OPT_DEC_RECTOPS */
-
- case CASE_S7C1T:
- TRACE(("CASE_S7C1T\n"));
- show_8bit_control(False);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_S8C1T:
- TRACE(("CASE_S8C1T\n"));
-#if OPT_VT52_MODE
- if (screen->vtXX_level <= 1)
- break;
-#endif
- show_8bit_control(True);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_OSC:
- TRACE(("CASE_OSC: Operating System Command\n"));
- sp->parsestate = sos_table;
- sp->string_mode = OSC;
- break;
-
- case CASE_RIS:
- TRACE(("CASE_RIS\n"));
- VTReset(True, True);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DECSTR:
- TRACE(("CASE_DECSTR\n"));
- VTReset(False, False);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_REP:
- TRACE(("CASE_REP\n"));
- if (sp->lastchar >= 0 &&
- sp->groundtable[E2A(sp->lastchar)] == CASE_PRINT) {
- IChar repeated[2];
- count = (param[0] < 1) ? 1 : param[0];
- repeated[0] = sp->lastchar;
- while (count-- > 0) {
- dotext(screen,
- screen->gsets[(int) (screen->curgl)],
- repeated, 1);
- }
- }
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_LS2:
- TRACE(("CASE_LS2\n"));
- screen->curgl = 2;
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_LS3:
- TRACE(("CASE_LS3\n"));
- screen->curgl = 3;
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_LS3R:
- TRACE(("CASE_LS3R\n"));
- screen->curgr = 3;
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_LS2R:
- TRACE(("CASE_LS2R\n"));
- screen->curgr = 2;
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_LS1R:
- TRACE(("CASE_LS1R\n"));
- screen->curgr = 1;
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_XTERM_SAVE:
- savemodes(term);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_XTERM_RESTORE:
- restoremodes(term);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_XTERM_WINOPS:
- TRACE(("CASE_XTERM_WINOPS\n"));
- if (screen->allowWindowOps)
- window_ops(term);
- sp->parsestate = sp->groundtable;
- break;
-#if OPT_WIDE_CHARS
- case CASE_ESC_PERCENT:
- sp->parsestate = esc_pct_table;
- break;
-
- case CASE_UTF8:
- /* If we did not set UTF-8 mode from resource or the
- * command-line, allow it to be enabled/disabled by
- * control sequence.
- */
- if (!screen->wide_chars) {
- WriteNow();
- ChangeToWide(screen);
- }
- if (screen->wide_chars
- && screen->utf8_mode != uAlways) {
- switchPtyData(screen, c == 'G');
- TRACE(("UTF8 mode %s\n",
- BtoS(screen->utf8_mode)));
- } else {
- TRACE(("UTF8 mode NOT turned %s (%s)\n",
- BtoS(c == 'G'),
- (screen->utf8_mode == uAlways)
- ? "UTF-8 mode set from command-line"
- : "wideChars resource was not set"));
- }
- sp->parsestate = sp->groundtable;
- break;
-#endif
-
- case CASE_CSI_IGNORE:
- sp->parsestate = cigtable;
- break;
- }
- if (sp->parsestate == sp->groundtable)
- sp->lastchar = thischar;
- } while (0);
-
-#if OPT_WIDE_CHARS
- screen->utf8_inparse = (screen->utf8_mode != uFalse
- && sp->parsestate != sos_table);
-#endif
-
- return True;
-}
-
-static void
-VTparse(void)
-{
- TScreen *screen;
-
- /* We longjmp back to this point in VTReset() */
- (void) setjmp(vtjmpbuf);
- screen = &term->screen;
- memset(&myState, 0, sizeof(myState));
-#if OPT_VT52_MODE
- myState.groundtable = screen->vtXX_level ? ansi_table : vt52_table;
-#else
- myState.groundtable = ansi_table;
-#endif
- myState.parsestate = myState.groundtable;
- myState.lastchar = -1; /* not a legal IChar */
- myState.nextstate = -1; /* not a legal state */
-
- for (;;) {
- if (!doparsing(doinput(), &myState))
- return;
- }
-}
-
-static Char *v_buffer; /* pointer to physical buffer */
-static Char *v_bufstr = NULL; /* beginning of area to write */
-static Char *v_bufptr; /* end of area to write */
-static Char *v_bufend; /* end of physical buffer */
-
-/* Write data to the pty as typed by the user, pasted with the mouse,
- or generated by us in response to a query ESC sequence. */
-
-int
-v_write(int f, Char * data, unsigned len)
-{
- int riten;
- unsigned c = len;
-
- if (v_bufstr == NULL && len > 0) {
- v_buffer = (Char *) XtMalloc(len);
- v_bufstr = v_buffer;
- v_bufptr = v_buffer;
- v_bufend = v_buffer + len;
- }
-#ifdef DEBUG
- if (debug) {
- fprintf(stderr, "v_write called with %d bytes (%d left over)",
- len, v_bufptr - v_bufstr);
- if (len > 1 && len < 10)
- fprintf(stderr, " \"%.*s\"", len, (char *) data);
- fprintf(stderr, "\n");
- }
-#endif
-
-#ifdef VMS
- if ((1 << f) != pty_mask)
- return (tt_write((char *) data, len));
-#else /* VMS */
- if (!FD_ISSET(f, &pty_mask))
- return (write(f, (char *) data, len));
-#endif /* VMS */
-
- /*
- * Append to the block we already have.
- * Always doing this simplifies the code, and
- * isn't too bad, either. If this is a short
- * block, it isn't too expensive, and if this is
- * a long block, we won't be able to write it all
- * anyway.
- */
-
- if (len > 0) {
-#if OPT_DABBREV
- term->screen.dabbrev_working = 0; /* break dabbrev sequence */
-#endif
- if (v_bufend < v_bufptr + len) { /* we've run out of room */
- if (v_bufstr != v_buffer) {
- /* there is unused space, move everything down */
- /* possibly overlapping memmove here */
-#ifdef DEBUG
- if (debug)
- fprintf(stderr, "moving data down %d\n",
- v_bufstr - v_buffer);
-#endif
- memmove(v_buffer, v_bufstr, (unsigned) (v_bufptr - v_bufstr));
- v_bufptr -= v_bufstr - v_buffer;
- v_bufstr = v_buffer;
- }
- if (v_bufend < v_bufptr + len) {
- /* still won't fit: get more space */
- /* Don't use XtRealloc because an error is not fatal. */
- int size = v_bufptr - v_buffer; /* save across realloc */
- v_buffer = TypeRealloc(Char, size + len, v_buffer);
- if (v_buffer) {
-#ifdef DEBUG
- if (debug)
- fprintf(stderr, "expanded buffer to %d\n",
- size + len);
-#endif
- v_bufstr = v_buffer;
- v_bufptr = v_buffer + size;
- v_bufend = v_bufptr + len;
- } else {
- /* no memory: ignore entire write request */
- fprintf(stderr, "%s: cannot allocate buffer space\n",
- xterm_name);
- v_buffer = v_bufstr; /* restore clobbered pointer */
- c = 0;
- }
- }
- }
- if (v_bufend >= v_bufptr + len) {
- /* new stuff will fit */
- memmove(v_bufptr, data, len);
- v_bufptr += len;
- }
- }
-
- /*
- * Write out as much of the buffer as we can.
- * Be careful not to overflow the pty's input silo.
- * We are conservative here and only write
- * a small amount at a time.
- *
- * If we can't push all the data into the pty yet, we expect write
- * to return a non-negative number less than the length requested
- * (if some data written) or -1 and set errno to EAGAIN,
- * EWOULDBLOCK, or EINTR (if no data written).
- *
- * (Not all systems do this, sigh, so the code is actually
- * a little more forgiving.)
- */
-
-#define MAX_PTY_WRITE 128 /* 1/2 POSIX minimum MAX_INPUT */
-
- if (v_bufptr > v_bufstr) {
-#ifdef VMS
- riten = tt_write(v_bufstr,
- ((v_bufptr - v_bufstr <= VMS_TERM_BUFFER_SIZE)
- ? v_bufptr - v_bufstr
- : VMS_TERM_BUFFER_SIZE));
- if (riten == 0)
- return (riten);
-#else /* VMS */
- riten = write(f, v_bufstr,
- (size_t) ((v_bufptr - v_bufstr <= MAX_PTY_WRITE)
- ? v_bufptr - v_bufstr
- : MAX_PTY_WRITE));
- if (riten < 0)
-#endif /* VMS */
- {
-#ifdef DEBUG
- if (debug)
- perror("write");
-#endif
- riten = 0;
- }
-#ifdef DEBUG
- if (debug)
- fprintf(stderr, "write called with %d, wrote %d\n",
- v_bufptr - v_bufstr <= MAX_PTY_WRITE ?
- v_bufptr - v_bufstr : MAX_PTY_WRITE,
- riten);
-#endif
- v_bufstr += riten;
- if (v_bufstr >= v_bufptr) /* we wrote it all */
- v_bufstr = v_bufptr = v_buffer;
- }
-
- /*
- * If we have lots of unused memory allocated, return it
- */
- if (v_bufend - v_bufptr > 1024) { /* arbitrary hysteresis */
- /* save pointers across realloc */
- int start = v_bufstr - v_buffer;
- int size = v_bufptr - v_buffer;
- unsigned allocsize = (unsigned) (size ? size : 1);
-
- v_buffer = TypeRealloc(Char, allocsize, v_buffer);
- if (v_buffer) {
- v_bufstr = v_buffer + start;
- v_bufptr = v_buffer + size;
- v_bufend = v_buffer + allocsize;
-#ifdef DEBUG
- if (debug)
- fprintf(stderr, "shrunk buffer to %d\n", allocsize);
-#endif
- } else {
- /* should we print a warning if couldn't return memory? */
- v_buffer = v_bufstr - start; /* restore clobbered pointer */
- }
- }
- return (c);
-}
-
-#ifdef VMS
-#define ptymask() (v_bufptr > v_bufstr ? pty_mask : 0)
-
-static void
-in_put(void)
-{
- static PtySelect select_mask;
- static PtySelect write_mask;
- int update = VTbuffer->update;
- int size;
-
- int status;
- Dimension replyWidth, replyHeight;
- XtGeometryResult stat;
-
- TScreen *screen = &term->screen;
- char *cp;
- int i;
-
- select_mask = pty_mask; /* force initial read */
- for (;;) {
-
- /* if the terminal changed size, resize the widget */
- if (tt_changed) {
- tt_changed = False;
-
- stat = XtMakeResizeRequest((Widget) term,
- ((Dimension) FontWidth(screen)
- * (tt_width)
- + 2 * screen->border
- + screen->fullVwin.sb_info.width),
- ((Dimension) FontHeight(screen)
- * (tt_length)
- + 2 * screen->border),
- &replyWidth, &replyHeight);
-
- if (stat == XtGeometryYes || stat == XtGeometryDone) {
- term->core.width = replyWidth;
- term->core.height = replyHeight;
-
- ScreenResize(&term->screen, replyWidth, replyHeight,
- &term->flags);
- }
- repairSizeHints();
- }
-
- if (eventMode == NORMAL
- && readPtyData(screen, &select_mask, VTbuffer)) {
- if (screen->scrollWidget
- && screen->scrollttyoutput
- && screen->topline < 0)
- /* Scroll to bottom */
- WindowScroll(screen, 0);
- break;
- }
- if (screen->scroll_amt)
- FlushScroll(screen);
- if (screen->cursor_set && CursorMoved(screen)) {
- if (screen->cursor_state)
- HideCursor();
- ShowCursor();
-#if OPT_INPUT_METHOD
- PreeditPosition(screen);
-#endif
- } else if (screen->cursor_set != screen->cursor_state) {
- if (screen->cursor_set)
- ShowCursor();
- else
- HideCursor();
- }
-
- if (QLength(screen->display)) {
- select_mask = X_mask;
- } else {
- write_mask = ptymask();
- XFlush(screen->display);
- select_mask = Select_mask;
- if (eventMode != NORMAL)
- select_mask = X_mask;
- }
- if (write_mask & ptymask()) {
- v_write(screen->respond, 0, 0); /* flush buffer */
- }
-
- if (select_mask & X_mask) {
- xevents();
- if (VTbuffer->update != update)
- break;
- }
- }
-}
-#else /* VMS */
-
-static void
-in_put(void)
-{
- static PtySelect select_mask;
- static PtySelect write_mask;
-
- TScreen *screen = &term->screen;
- int i, time_select;
- int size;
- int update = VTbuffer->update;
-
- static struct timeval select_timeout;
-
-#if OPT_BLINK_CURS
- /*
- * Compute the timeout for the blinking cursor to be much smaller than
- * the "on" or "off" interval.
- */
- int tick = ((screen->blink_on < screen->blink_off)
- ? screen->blink_on
- : screen->blink_off);
- tick *= (1000 / 8); /* 1000 for msec/usec, 8 for "much" smaller */
- if (tick < 1)
- tick = 1;
-#endif
-
- for (;;) {
- if (eventMode == NORMAL
- && (size = readPtyData(screen, &select_mask, VTbuffer)) != 0) {
- if (screen->scrollWidget
- && screen->scrollttyoutput
- && screen->topline < 0)
- WindowScroll(screen, 0); /* Scroll to bottom */
- /* stop speed reading at some point to look for X stuff */
- TRACE(("VTbuffer uses %d/%d\n",
- VTbuffer->last - VTbuffer->buffer,
- BUF_SIZE));
- if ((VTbuffer->last - VTbuffer->buffer) > BUF_SIZE) {
- FD_CLR(screen->respond, &select_mask);
- break;
- }
-#if defined(HAVE_SCHED_YIELD)
- /*
- * If we've read a full (small/fragment) buffer, let the operating
- * system have a turn, and we'll resume reading until we've either
- * read only a fragment of the buffer, or we've filled the large
- * buffer (see above). Doing this helps keep up with large bursts
- * of output.
- */
- if (size == FRG_SIZE) {
- select_timeout.tv_sec = 0;
- i = Select(max_plus1, &select_mask, &write_mask, 0,
- &select_timeout);
- if (i > 0) {
- sched_yield();
- } else
- break;
- } else {
- break;
- }
-#else
- (void) size; /* unused in this branch */
- break;
-#endif
- }
- /* update the screen */
- if (screen->scroll_amt)
- FlushScroll(screen);
- if (screen->cursor_set && CursorMoved(screen)) {
- if (screen->cursor_state)
- HideCursor();
- ShowCursor();
-#if OPT_INPUT_METHOD
- PreeditPosition(screen);
-#endif
- } else if (screen->cursor_set != screen->cursor_state) {
- if (screen->cursor_set)
- ShowCursor();
- else
- HideCursor();
- }
-
- XFlush(screen->display); /* always flush writes before waiting */
-
- /* Update the masks and, unless X events are already in the queue,
- wait for I/O to be possible. */
- XFD_COPYSET(&Select_mask, &select_mask);
- /* in selection mode xterm does not read pty */
- if (eventMode != NORMAL)
- FD_CLR(screen->respond, &select_mask);
-
- if (v_bufptr > v_bufstr) {
- XFD_COPYSET(&pty_mask, &write_mask);
- } else
- FD_ZERO(&write_mask);
- select_timeout.tv_sec = 0;
- time_select = 0;
-
- /*
- * if there's either an XEvent or an XtTimeout pending, just take
- * a quick peek, i.e. timeout from the select() immediately. If
- * there's nothing pending, let select() block a little while, but
- * for a shorter interval than the arrow-style scrollbar timeout.
- * The blocking is optional, because it tends to increase the load
- * on the host.
- */
- if (XtAppPending(app_con)) {
- select_timeout.tv_usec = 0;
- time_select = 1;
- } else if (screen->awaitInput) {
- select_timeout.tv_usec = 50000;
- time_select = 1;
-#if OPT_BLINK_CURS
- } else if ((screen->blink_timer != 0 &&
- ((screen->select & FOCUS) || screen->always_highlight)) ||
- (screen->cursor_state == BLINKED_OFF)) {
- select_timeout.tv_usec = tick;
- while (select_timeout.tv_usec > 1000000) {
- select_timeout.tv_usec -= 1000000;
- select_timeout.tv_sec++;
- }
- time_select = 1;
-#endif
-#if OPT_SESSION_MGT
- } else if (resource.sessionMgt) {
- /*
- * When session management is enabled, we should not block since
- * session related events can arrive any time.
- */
- select_timeout.tv_sec = 1;
- select_timeout.tv_usec = 0;
- time_select = 1;
-#endif
- }
- if (need_cleanup)
- Cleanup(0);
-
-#if defined(NX_TRANS_SOCKET) && defined(NX_TRANS_TEST)
- fprintf(stderr, "xterm::in_put: Select called with [%d][%p][%p][%p][%p].\n",
- max_plus1, (void *) &select_mask, (void *) &write_mask, (void *) 0,
- (void *) (time_select ? &select_timeout : 0));
-#endif
-
- i = Select(max_plus1, &select_mask, &write_mask, 0,
- (time_select ? &select_timeout : 0));
- if (i < 0) {
- if (errno != EINTR)
- SysError(ERROR_SELECT);
- continue;
- }
-
- /* if there is room to write more data to the pty, go write more */
- if (FD_ISSET(screen->respond, &write_mask)) {
- v_write(screen->respond, (Char *) 0, 0); /* flush buffer */
- }
-
- /* if there are X events already in our queue, it
- counts as being readable */
- if (XtAppPending(app_con) ||
- FD_ISSET(ConnectionNumber(screen->display), &select_mask)) {
- xevents();
- if (VTbuffer->update != update) /* HandleInterpret */
- break;
- }
-
- }
-}
-#endif /* VMS */
-
-static IChar
-doinput(void)
-{
- TScreen *screen = &term->screen;
-
- while (!morePtyData(screen, VTbuffer))
- in_put();
- return nextPtyData(screen, VTbuffer);
-}
-
-#if OPT_INPUT_METHOD
-/*
- * For OverTheSpot, client has to inform the position for XIM preedit.
- */
-static void
-PreeditPosition(TScreen * screen)
-{
- XPoint spot;
- XVaNestedList list;
-
- if (!screen->xic)
- return;
- spot.x = CurCursorX(screen, screen->cur_row, screen->cur_col);
- spot.y = CursorY(screen, screen->cur_row) + screen->fs_ascent;
- list = XVaCreateNestedList(0,
- XNSpotLocation, &spot,
- XNForeground, T_COLOR(screen, TEXT_FG),
- XNBackground, T_COLOR(screen, TEXT_BG),
- NULL);
- XSetICValues(screen->xic, XNPreeditAttributes, list, NULL);
- XFree(list);
-}
-#endif
-
-/*
- * process a string of characters according to the character set indicated
- * by charset. worry about end of line conditions (wraparound if selected).
- */
-void
-dotext(TScreen * screen,
- int charset,
- IChar * buf, /* start of characters to process */
- Cardinal len) /* end */
-{
-#if OPT_WIDE_CHARS
- Cardinal chars_chomped = 1;
-#else
- int next_col, last_col, this_col; /* must be signed */
-#endif
- Cardinal offset;
-
-#if OPT_WIDE_CHARS
- /* don't translate if we use UTF-8, and are not handling legacy support
- * for line-drawing characters.
- */
- if ((screen->utf8_mode == uFalse)
- || (screen->vt100_graphics && charset == '0'))
-#endif
-
- if (!xtermCharSetOut(buf, buf + len, charset))
- return;
-
- if_OPT_XMC_GLITCH(screen, {
- Cardinal n;
- if (charset != '?') {
- for (n = 0; n < len; n++) {
- if (buf[n] == XMC_GLITCH)
- buf[n] = XMC_GLITCH + 1;
- }
- }
- });
-
-#if OPT_WIDE_CHARS
- for (offset = 0;
- offset < len && (chars_chomped > 0 || screen->do_wrap);
- offset += chars_chomped) {
- int width_available = MaxCols(screen) - screen->cur_col;
- int width_here = 0;
- int need_wrap = 0;
- chars_chomped = 0;
-
- if (screen->do_wrap && (term->flags & WRAPAROUND)) {
- /* mark that we had to wrap this line */
- ScrnSetWrapped(screen, screen->cur_row);
- xtermAutoPrint('\n');
- xtermIndex(screen, 1);
- set_cur_col(screen, 0);
- screen->do_wrap = 0;
- width_available = MaxCols(screen) - screen->cur_col;
- }
-
- while (width_here <= width_available && chars_chomped < (len - offset)) {
- if (!screen->utf8_mode
- || (screen->vt100_graphics && charset == '0'))
- width_here++;
- else
- width_here += my_wcwidth((int) buf[chars_chomped + offset]);
- chars_chomped++;
- }
-
- if (width_here > width_available) {
- chars_chomped--;
- if (!screen->utf8_mode
- || (screen->vt100_graphics && charset == '0'))
- width_here--;
- else
- width_here -= my_wcwidth((int) buf[chars_chomped + offset]);
- need_wrap = 1;
- } else if (width_here == width_available) {
- need_wrap = 1;
- } else if (chars_chomped != (len - offset)) {
- need_wrap = 1;
- }
-
- /*
- * Split the wide characters back into separate arrays of 8-bit
- * characters so we can use the existing interface.
- *
- * FIXME: If we rewrote this interface, it would involve
- * rewriting all of the memory-management for the screen
- * buffers (perhaps this is simpler).
- */
- if (chars_chomped != 0) {
- static unsigned limit;
- static Char *hibyte, *lobyte;
- Bool both = False;
- unsigned j, k;
-
- if (chars_chomped >= limit) {
- limit = (chars_chomped + 1) * 2;
- lobyte = (Char *) XtRealloc((char *) lobyte, limit);
- hibyte = (Char *) XtRealloc((char *) hibyte, limit);
- }
- for (j = offset; j < offset + chars_chomped; j++) {
- k = j - offset;
- lobyte[k] = buf[j];
- if (buf[j] > 255) {
- hibyte[k] = (buf[j] >> 8);
- both = True;
- } else {
- hibyte[k] = 0;
- }
- }
-
- WriteText(screen, PAIRED_CHARS(lobyte,
- (both ? hibyte : 0)),
- chars_chomped);
- }
- screen->do_wrap = need_wrap;
- }
-#else
-
- for (offset = 0; offset < len; offset += this_col) {
- last_col = CurMaxCol(screen, screen->cur_row);
- this_col = last_col - screen->cur_col + 1;
- if (this_col <= 1) {
- if (screen->do_wrap && (term->flags & WRAPAROUND)) {
- /* mark that we had to wrap this line */
- ScrnSetWrapped(screen, screen->cur_row);
- xtermAutoPrint('\n');
- xtermIndex(screen, 1);
- set_cur_col(screen, 0);
- screen->do_wrap = 0;
- this_col = last_col + 1;
- } else
- this_col = 1;
- }
- if (offset + this_col > len) {
- this_col = len - offset;
- }
- next_col = screen->cur_col + this_col;
-
- WriteText(screen, PAIRED_CHARS(buf + offset,
- buf2 ? buf2 + offset : 0),
- this_col);
-
- /*
- * the call to WriteText updates screen->cur_col.
- * If screen->cur_col != next_col, we must have
- * hit the right margin, so set the do_wrap flag.
- */
- screen->do_wrap = (screen->cur_col < (int) next_col);
- }
-
-#endif
-}
-
-#if HANDLE_STRUCT_NOTIFY
-/* Flag icon name with "*** " on window output when iconified.
- * I'd like to do something like reverse video, but I don't
- * know how to tell this to window managers in general.
- *
- * mapstate can be IsUnmapped, !IsUnmapped, or -1;
- * -1 means no change; the other two are set by event handlers
- * and indicate a new mapstate. !IsMapped is done in the handler.
- * we worry about IsUnmapped when output occurs. -IAN!
- */
-static int mapstate = -1;
-#endif /* HANDLE_STRUCT_NOTIFY */
-
-#if OPT_WIDE_CHARS
-unsigned
-visual_width(PAIRED_CHARS(Char * str, Char * str2), Cardinal len)
-{
- /* returns the visual width of a string (doublewide characters count
- as 2, normalwide characters count as 1) */
- int my_len = 0;
- while (len) {
- int ch = *str;
- if (str2)
- ch |= *str2 << 8;
- if (str)
- str++;
- if (str2)
- str2++;
- if (iswide(ch))
- my_len += 2;
- else
- my_len++;
- len--;
- }
- return my_len;
-}
-#endif
-
-/*
- * write a string str of length len onto the screen at
- * the current cursor position. update cursor position.
- */
-static void
-WriteText(TScreen * screen, PAIRED_CHARS(Char * str, Char * str2), Cardinal len)
-{
- ScrnPtr PAIRED_CHARS(temp_str = 0, temp_str2 = 0);
- unsigned test;
- unsigned flags = term->flags;
- unsigned fg_bg = makeColorPair(term->cur_foreground, term->cur_background);
- unsigned cells = visual_width(PAIRED_CHARS(str, str2), len);
- GC currentGC;
-
- TRACE(("WriteText (%2d,%2d) (%d) %3d:%s\n",
- screen->cur_row,
- screen->cur_col,
- curXtermChrSet(screen->cur_row),
- len, visibleChars(PAIRED_CHARS(str, str2), len)));
-
- if (ScrnHaveSelection(screen)
- && ScrnIsLineInSelection(screen, screen->cur_row - screen->topline)) {
- ScrnDisownSelection(screen);
- }
-
- if (screen->cur_row - screen->topline <= screen->max_row) {
- if (screen->cursor_state)
- HideCursor();
-
- if (flags & INSERT) {
- InsertChar(screen, cells);
- }
- if (!AddToRefresh(screen)) {
-
- if (screen->scroll_amt)
- FlushScroll(screen);
-
- if (flags & INVISIBLE) {
- if (cells > len) {
- str = temp_str = TypeMallocN(Char, cells);
- if (str == 0)
- return;
- }
- if_OPT_WIDE_CHARS(screen, {
- if (cells > len) {
- str2 = temp_str2 = TypeMallocN(Char, cells);
- }
- });
- len = cells;
-
- memset(str, ' ', len);
- if_OPT_WIDE_CHARS(screen, {
- if (str2 != 0)
- memset(str2, 0, len);
- });
- }
-
- TRACE(("WriteText calling drawXtermText (%d,%d)\n",
- screen->cur_col,
- screen->cur_row));
-
- test = flags;
- checkVeryBoldColors(test, term->cur_foreground);
-
- /* make sure that the correct GC is current */
- currentGC = updatedXtermGC(screen, flags, fg_bg, False);
-
- drawXtermText(screen, test & DRAWX_MASK, currentGC,
- CurCursorX(screen, screen->cur_row, screen->cur_col),
- CursorY(screen, screen->cur_row),
- curXtermChrSet(screen->cur_row),
- PAIRED_CHARS(str, str2), len, 0);
-
- resetXtermGC(screen, flags, False);
- }
- }
-
- ScreenWrite(screen, PAIRED_CHARS(str, str2), flags, fg_bg, len);
- CursorForward(screen, (int) cells);
-#if OPT_ZICONBEEP
- /* Flag icon name with "***" on window output when iconified.
- */
- if (zIconBeep && mapstate == IsUnmapped && !zIconBeep_flagged) {
- static char *icon_name;
- static Arg args[] =
- {
- {XtNiconName, (XtArgVal) & icon_name}
- };
-
- icon_name = NULL;
- XtGetValues(toplevel, args, XtNumber(args));
-
- if (icon_name != NULL) {
- zIconBeep_flagged = True;
- Changename(icon_name);
- }
- if (zIconBeep > 0) {
-#if defined(HAVE_XKBBELL)
- XkbBell(XtDisplay(toplevel), VShellWindow, zIconBeep, XkbBI_Info);
-#else
- XBell(XtDisplay(toplevel), zIconBeep);
-#endif
- }
- }
- mapstate = -1;
-#endif /* OPT_ZICONBEEP */
- if (temp_str != 0)
- free(temp_str);
- if_OPT_WIDE_CHARS(screen, {
- if (temp_str2 != 0)
- free(temp_str2);
- });
- return;
-}
-
-#if HANDLE_STRUCT_NOTIFY
-/* Flag icon name with "***" on window output when iconified.
- */
-static void
-HandleStructNotify(Widget w GCC_UNUSED,
- XtPointer closure GCC_UNUSED,
- XEvent * event,
- Boolean * cont GCC_UNUSED)
-{
- static char *icon_name;
- static Arg args[] =
- {
- {XtNiconName, (XtArgVal) & icon_name}
- };
-
- switch (event->type) {
- case MapNotify:
- TRACE(("HandleStructNotify(MapNotify)\n"));
-#if OPT_ZICONBEEP
- if (zIconBeep_flagged) {
- zIconBeep_flagged = False;
- icon_name = NULL;
- XtGetValues(toplevel, args, XtNumber(args));
- if (icon_name != NULL) {
- char *buf = CastMallocN(char, strlen(icon_name));
- if (buf == NULL) {
- zIconBeep_flagged = True;
- return;
- }
- strcpy(buf, icon_name + 4);
- Changename(buf);
- free(buf);
- }
- }
-#endif /* OPT_ZICONBEEP */
- mapstate = !IsUnmapped;
- break;
- case UnmapNotify:
- TRACE(("HandleStructNotify(UnmapNotify)\n"));
- mapstate = IsUnmapped;
- break;
- case ConfigureNotify:
- TRACE(("HandleStructNotify(ConfigureNotify)\n"));
-#if OPT_TOOLBAR
- /* the notify is for the top-level widget, but we care about vt100 */
- if (term->screen.Vshow) {
- TScreen *screen = &term->screen;
- struct _vtwin *Vwin = WhichVWin(&(term->screen));
- TbInfo *info = &(Vwin->tb_info);
- TbInfo save = *info;
-
- if (info->menu_bar) {
- XtVaGetValues(info->menu_bar,
- XtNheight, &info->menu_height,
- XtNborderWidth, &info->menu_border,
- (XtPointer) 0);
-
- if (save.menu_height != info->menu_height
- || save.menu_border != info->menu_border) {
-
- TRACE(("...menu_height %d\n", info->menu_height));
- TRACE(("...menu_border %d\n", info->menu_border));
- TRACE(("...had height %d, border %d\n",
- save.menu_height,
- save.menu_border));
-
- /*
- * FIXME: Window manager still may be using the old values.
- * Try to fool it.
- */
- XtMakeResizeRequest((Widget) term,
- screen->fullVwin.fullwidth,
- info->menu_height
- - save.menu_height
- + screen->fullVwin.fullheight,
- NULL, NULL);
- repairSizeHints();
- }
- }
- }
-#endif /* OPT_TOOLBAR */
- break;
- default:
- TRACE(("HandleStructNotify(event %d)\n", event->type));
- break;
- }
-}
-#endif /* HANDLE_STRUCT_NOTIFY */
-
-#if OPT_BLINK_CURS
-static void
-SetCursorBlink(TScreen * screen, int enable)
-{
- screen->cursor_blink = enable;
- if (DoStartBlinking(screen)) {
- StartBlinking(screen);
- } else {
-#if !OPT_BLINK_TEXT
- StopBlinking(screen);
-#endif
- }
- update_cursorblink();
-}
-
-void
-ToggleCursorBlink(TScreen * screen)
-{
- SetCursorBlink(screen, !(screen->cursor_blink));
-}
-#endif
-
-/*
- * process ANSI modes set, reset
- */
-static void
-ansi_modes(XtermWidget termw,
- void (*func) (unsigned *p, unsigned mask))
-{
- int i;
-
- for (i = 0; i < nparam; ++i) {
- switch (param[i]) {
- case 2: /* KAM (if set, keyboard locked */
- (*func) (&termw->keyboard.flags, MODE_KAM);
- break;
-
- case 4: /* IRM */
- (*func) (&termw->flags, INSERT);
- break;
-
- case 12: /* SRM (if set, local echo */
- (*func) (&termw->keyboard.flags, MODE_SRM);
- break;
-
- case 20: /* LNM */
- (*func) (&termw->flags, LINEFEED);
- update_autolinefeed();
- break;
- }
- }
-}
-
-#define set_mousemode(mode) \
- screen->send_mouse_pos = (func == bitset) ? mode : MOUSE_OFF
-#define set_mouseflag(f) \
- ((func == bitset) \
- ? SCREEN_FLAG_set(screen, f) \
- : SCREEN_FLAG_unset(screen, f))
-
-/*
- * process DEC private modes set, reset
- */
-static void
-dpmodes(XtermWidget termw,
- void (*func) (unsigned *p, unsigned mask))
-{
- TScreen *screen = &termw->screen;
- int i, j;
-
- for (i = 0; i < nparam; ++i) {
- TRACE(("%s %d\n", (func == bitset) ? "DECSET" : "DECRST", param[i]));
- switch (param[i]) {
- case 1: /* DECCKM */
- (*func) (&termw->keyboard.flags, MODE_DECCKM);
- update_appcursor();
- break;
- case 2: /* DECANM - ANSI/VT52 mode */
- if (func == bitset) { /* ANSI (VT100) */
- /*
- * Setting DECANM should have no effect, since this function
- * cannot be reached from vt52 mode.
- */
- ;
- }
-#if OPT_VT52_MODE
- else if (screen->terminal_id >= 100) { /* VT52 */
- TRACE(("DECANM terminal_id %d, vtXX_level %d\n",
- screen->terminal_id,
- screen->vtXX_level));
- screen->vt52_save_level = screen->vtXX_level;
- screen->vtXX_level = 0;
- screen->vt52_save_curgl = screen->curgl;
- screen->vt52_save_curgr = screen->curgr;
- screen->vt52_save_curss = screen->curss;
- memmove(screen->vt52_save_gsets, screen->gsets, sizeof(screen->gsets));
- resetCharsets(screen);
- nparam = 0; /* ignore the remaining params, if any */
- }
-#endif
- break;
- case 3: /* DECCOLM */
- if (screen->c132) {
- ClearScreen(screen);
- CursorSet(screen, 0, 0, termw->flags);
- if ((j = func == bitset ? 132 : 80) !=
- ((termw->flags & IN132COLUMNS) ? 132 : 80) ||
- j != MaxCols(screen))
- RequestResize(termw, -1, j, True);
- (*func) (&termw->flags, IN132COLUMNS);
- }
- break;
- case 4: /* DECSCLM (slow scroll) */
- if (func == bitset) {
- screen->jumpscroll = 0;
- if (screen->scroll_amt)
- FlushScroll(screen);
- } else
- screen->jumpscroll = 1;
- (*func) (&termw->flags, SMOOTHSCROLL);
- update_jumpscroll();
- break;
- case 5: /* DECSCNM */
- j = termw->flags;
- (*func) (&termw->flags, REVERSE_VIDEO);
- if ((termw->flags ^ j) & REVERSE_VIDEO)
- ReverseVideo(termw);
- /* update_reversevideo done in RevVid */
- break;
-
- case 6: /* DECOM */
- (*func) (&termw->flags, ORIGIN);
- CursorSet(screen, 0, 0, termw->flags);
- break;
-
- case 7: /* DECAWM */
- (*func) (&termw->flags, WRAPAROUND);
- update_autowrap();
- break;
- case 8: /* DECARM */
- /* ignore autorepeat
- * XAutoRepeatOn() and XAutoRepeatOff() can do this, but only
- * for the whole display - not limited to a given window.
- */
- break;
- case SET_X10_MOUSE: /* MIT bogus sequence */
- MotionOff(screen, termw);
- set_mousemode(X10_MOUSE);
- break;
-#if OPT_TOOLBAR
- case 10: /* rxvt */
- ShowToolbar(func == bitset);
- break;
-#endif
-#if OPT_BLINK_CURS
- case 12: /* att610: Start/stop blinking cursor */
- if (screen->cursor_blink_res) {
- screen->cursor_blink_esc = (func == bitset) ? ON : OFF;
- SetCursorBlink(screen, screen->cursor_blink);
- }
- break;
-#endif
- case 18: /* DECPFF: print form feed */
- screen->printer_formfeed = (func == bitset) ? ON : OFF;
- break;
- case 19: /* DECPEX: print extent */
- screen->printer_extent = (func == bitset) ? ON : OFF;
- break;
- case 25: /* DECTCEM: Show/hide cursor (VT200) */
- screen->cursor_set = (func == bitset) ? ON : OFF;
- break;
- case 30: /* rxvt */
- if (screen->fullVwin.sb_info.width != ((func == bitset) ? ON : OFF))
- ToggleScrollBar(termw);
- break;
-#if OPT_SHIFT_FONTS
- case 35: /* rxvt */
- term->misc.shift_fonts = (func == bitset) ? ON : OFF;
- break;
-#endif
- case 38: /* DECTEK */
-#if OPT_TEK4014
- if (func == bitset && !(screen->inhibit & I_TEK)) {
- FlushLog(screen);
- screen->TekEmu = True;
- }
-#endif
- break;
- case 40: /* 132 column mode */
- screen->c132 = (func == bitset);
- update_allow132();
- break;
- case 41: /* curses hack */
- screen->curses = (func == bitset);
- update_cursesemul();
- break;
- case 42: /* DECNRCM national charset (VT220) */
- (*func) (&termw->flags, NATIONAL);
- break;
- case 44: /* margin bell */
- screen->marginbell = (func == bitset);
- if (!screen->marginbell)
- screen->bellarmed = -1;
- update_marginbell();
- break;
- case 45: /* reverse wraparound */
- (*func) (&termw->flags, REVERSEWRAP);
- update_reversewrap();
- break;
-#ifdef ALLOWLOGGING
- case 46: /* logging */
-#ifdef ALLOWLOGFILEONOFF
- /*
- * if this feature is enabled, logging may be
- * enabled and disabled via escape sequences.
- */
- if (func == bitset)
- StartLog(screen);
- else
- CloseLog(screen);
-#else
- Bell(XkbBI_Info, 0);
- Bell(XkbBI_Info, 0);
-#endif /* ALLOWLOGFILEONOFF */
- break;
-#endif
- case 1049: /* alternate buffer & cursor */
- if (!termw->misc.titeInhibit) {
- if (func == bitset) {
- CursorSave(termw);
- ToAlternate(screen);
- ClearScreen(screen);
- } else {
- FromAlternate(screen);
- CursorRestore(termw);
- }
- } else if (termw->misc.tiXtraScroll) {
- if (func == bitset) {
- xtermScroll(screen, screen->max_row);
- }
- }
- break;
- case 1047:
- case 47: /* alternate buffer */
- if (!termw->misc.titeInhibit) {
- if (func == bitset) {
- ToAlternate(screen);
- } else {
- if (screen->alternate
- && (param[i] == 1047))
- ClearScreen(screen);
- FromAlternate(screen);
- }
- } else if (termw->misc.tiXtraScroll) {
- if (func == bitset) {
- xtermScroll(screen, screen->max_row);
- }
- }
- break;
- case 66: /* DECNKM */
- (*func) (&termw->keyboard.flags, MODE_DECKPAM);
- update_appkeypad();
- break;
- case 67: /* DECBKM */
- /* back-arrow mapped to backspace or delete(D) */
- (*func) (&termw->keyboard.flags, MODE_DECBKM);
- TRACE(("DECSET DECBKM %s\n",
- BtoS(termw->keyboard.flags & MODE_DECBKM)));
- update_decbkm();
- break;
- case SET_VT200_MOUSE: /* xterm bogus sequence */
- MotionOff(screen, termw);
- set_mousemode(VT200_MOUSE);
- break;
- case SET_VT200_HIGHLIGHT_MOUSE: /* xterm sequence w/hilite tracking */
- MotionOff(screen, termw);
- set_mousemode(VT200_HIGHLIGHT_MOUSE);
- break;
- case SET_BTN_EVENT_MOUSE:
- MotionOff(screen, termw);
- set_mousemode(BTN_EVENT_MOUSE);
- break;
- case SET_ANY_EVENT_MOUSE:
- set_mousemode(ANY_EVENT_MOUSE);
- if (screen->send_mouse_pos == MOUSE_OFF) {
- MotionOff(screen, term);
- } else {
- MotionOn(screen, term);
- }
- break;
- case 1010: /* rxvt */
- screen->scrollttyoutput = (func == bitset) ? ON : OFF;
- update_scrollttyoutput();
- break;
- case 1011: /* rxvt */
- screen->scrollkey = (func == bitset) ? ON : OFF;
- update_scrollkey();
- break;
-#if OPT_NUM_LOCK
- case 1035:
- term->misc.real_NumLock = (func == bitset) ? ON : OFF;
- update_num_lock();
- break;
- case 1036:
- screen->meta_sends_esc = (func == bitset) ? ON : OFF;
- update_meta_esc();
- break;
-#endif
- case 1037:
- screen->delete_is_del = (func == bitset) ? ON : OFF;
- update_delete_del();
- break;
- case 1048:
- if (!termw->misc.titeInhibit) {
- if (func == bitset)
- CursorSave(termw);
- else
- CursorRestore(termw);
- }
- break;
- case 1051:
- set_keyboard_type(keyboardIsSun, func == bitset);
- break;
-#if OPT_HP_FUNC_KEYS
- case 1052:
- set_keyboard_type(keyboardIsHP, func == bitset);
- break;
-#endif
-#if OPT_SCO_FUNC_KEYS
- case 1053:
- set_keyboard_type(keyboardIsSCO, func == bitset);
- break;
-#endif
- case 1060:
- set_keyboard_type(keyboardIsLegacy, func == bitset);
- break;
-#if OPT_SUNPC_KBD
- case 1061:
- set_keyboard_type(keyboardIsVT220, func == bitset);
- break;
-#endif
-#if OPT_READLINE
- case SET_BUTTON1_MOVE_POINT:
- set_mouseflag(click1_moves);
- break;
- case SET_BUTTON2_MOVE_POINT:
- set_mouseflag(paste_moves);
- break;
- case SET_DBUTTON3_DELETE:
- set_mouseflag(dclick3_deletes);
- break;
- case SET_PASTE_IN_BRACKET:
- set_mouseflag(paste_brackets);
- break;
- case SET_PASTE_QUOTE:
- set_mouseflag(paste_quotes);
- break;
- case SET_PASTE_LITERAL_NL:
- set_mouseflag(paste_literal_nl);
- break;
-#endif /* OPT_READLINE */
- }
- }
-}
-
-/*
- * process xterm private modes save
- */
-static void
-savemodes(XtermWidget termw)
-{
- TScreen *screen = &termw->screen;
- int i;
-
- for (i = 0; i < nparam; i++) {
- TRACE(("savemodes %d\n", param[i]));
- switch (param[i]) {
- case 1: /* DECCKM */
- DoSM(DP_DECCKM, termw->keyboard.flags & MODE_DECCKM);
- break;
- case 3: /* DECCOLM */
- if (screen->c132)
- DoSM(DP_DECCOLM, termw->flags & IN132COLUMNS);
- break;
- case 4: /* DECSCLM (slow scroll) */
- DoSM(DP_DECSCLM, termw->flags & SMOOTHSCROLL);
- break;
- case 5: /* DECSCNM */
- DoSM(DP_DECSCNM, termw->flags & REVERSE_VIDEO);
- break;
- case 6: /* DECOM */
- DoSM(DP_DECOM, termw->flags & ORIGIN);
- break;
-
- case 7: /* DECAWM */
- DoSM(DP_DECAWM, termw->flags & WRAPAROUND);
- break;
- case 8: /* DECARM */
- /* ignore autorepeat */
- break;
- case SET_X10_MOUSE: /* mouse bogus sequence */
- DoSM(DP_X_X10MSE, screen->send_mouse_pos);
- break;
-#if OPT_TOOLBAR
- case 10: /* rxvt */
- DoSM(DP_TOOLBAR, resource.toolBar);
- break;
-#endif
-#if OPT_BLINK_CURS
- case 12: /* att610: Start/stop blinking cursor */
- if (screen->cursor_blink_res) {
- DoSM(DP_CRS_BLINK, screen->cursor_blink_esc);
- }
- break;
-#endif
- case 18: /* DECPFF: print form feed */
- DoSM(DP_PRN_FORMFEED, screen->printer_formfeed);
- break;
- case 19: /* DECPEX: print extent */
- DoSM(DP_PRN_EXTENT, screen->printer_extent);
- break;
- case 25: /* DECTCEM: Show/hide cursor (VT200) */
- DoSM(DP_CRS_VISIBLE, screen->cursor_set);
- break;
- case 40: /* 132 column mode */
- DoSM(DP_X_DECCOLM, screen->c132);
- break;
- case 41: /* curses hack */
- DoSM(DP_X_MORE, screen->curses);
- break;
- case 44: /* margin bell */
- DoSM(DP_X_MARGIN, screen->marginbell);
- break;
- case 45: /* reverse wraparound */
- DoSM(DP_X_REVWRAP, termw->flags & REVERSEWRAP);
- break;
-#ifdef ALLOWLOGGING
- case 46: /* logging */
- DoSM(DP_X_LOGGING, screen->logging);
- break;
-#endif
- case 1047: /* alternate buffer */
- /* FALLTHRU */
- case 47: /* alternate buffer */
- DoSM(DP_X_ALTSCRN, screen->alternate);
- break;
- case SET_VT200_MOUSE: /* mouse bogus sequence */
- case SET_VT200_HIGHLIGHT_MOUSE:
- case SET_BTN_EVENT_MOUSE:
- case SET_ANY_EVENT_MOUSE:
- DoSM(DP_X_MOUSE, screen->send_mouse_pos);
- break;
- case 1048:
- if (!termw->misc.titeInhibit) {
- CursorSave(termw);
- }
- break;
-#if OPT_READLINE
- case SET_BUTTON1_MOVE_POINT:
- SCREEN_FLAG_save(screen, click1_moves);
- break;
- case SET_BUTTON2_MOVE_POINT:
- SCREEN_FLAG_save(screen, paste_moves);
- break;
- case SET_DBUTTON3_DELETE:
- SCREEN_FLAG_save(screen, dclick3_deletes);
- break;
- case SET_PASTE_IN_BRACKET:
- SCREEN_FLAG_save(screen, paste_brackets);
- break;
- case SET_PASTE_QUOTE:
- SCREEN_FLAG_save(screen, paste_quotes);
- break;
- case SET_PASTE_LITERAL_NL:
- SCREEN_FLAG_save(screen, paste_literal_nl);
- break;
-#endif /* OPT_READLINE */
- }
- }
-}
-
-/*
- * process xterm private modes restore
- */
-static void
-restoremodes(XtermWidget termw)
-{
- TScreen *screen = &termw->screen;
- int i, j;
-
- for (i = 0; i < nparam; i++) {
- TRACE(("restoremodes %d\n", param[i]));
- switch (param[i]) {
- case 1: /* DECCKM */
- bitcpy(&termw->keyboard.flags,
- screen->save_modes[DP_DECCKM], MODE_DECCKM);
- update_appcursor();
- break;
- case 3: /* DECCOLM */
- if (screen->c132) {
- ClearScreen(screen);
- CursorSet(screen, 0, 0, termw->flags);
- if ((j = (screen->save_modes[DP_DECCOLM] & IN132COLUMNS)
- ? 132 : 80) != ((termw->flags & IN132COLUMNS)
- ? 132 : 80) || j != MaxCols(screen))
- RequestResize(termw, -1, j, True);
- bitcpy(&termw->flags,
- screen->save_modes[DP_DECCOLM],
- IN132COLUMNS);
- }
- break;
- case 4: /* DECSCLM (slow scroll) */
- if (screen->save_modes[DP_DECSCLM] & SMOOTHSCROLL) {
- screen->jumpscroll = 0;
- if (screen->scroll_amt)
- FlushScroll(screen);
- } else
- screen->jumpscroll = 1;
- bitcpy(&termw->flags, screen->save_modes[DP_DECSCLM], SMOOTHSCROLL);
- update_jumpscroll();
- break;
- case 5: /* DECSCNM */
- if ((screen->save_modes[DP_DECSCNM] ^ termw->flags) & REVERSE_VIDEO) {
- bitcpy(&termw->flags, screen->save_modes[DP_DECSCNM], REVERSE_VIDEO);
- ReverseVideo(termw);
- /* update_reversevideo done in RevVid */
- }
- break;
- case 6: /* DECOM */
- bitcpy(&termw->flags, screen->save_modes[DP_DECOM], ORIGIN);
- CursorSet(screen, 0, 0, termw->flags);
- break;
-
- case 7: /* DECAWM */
- bitcpy(&termw->flags, screen->save_modes[DP_DECAWM], WRAPAROUND);
- update_autowrap();
- break;
- case 8: /* DECARM */
- /* ignore autorepeat */
- break;
- case SET_X10_MOUSE: /* MIT bogus sequence */
- DoRM(DP_X_X10MSE, screen->send_mouse_pos);
- break;
-#if OPT_TOOLBAR
- case 10: /* rxvt */
- DoRM(DP_TOOLBAR, resource.toolBar);
- ShowToolbar(resource.toolBar);
- break;
-#endif
-#if OPT_BLINK_CURS
- case 12: /* att610: Start/stop blinking cursor */
- if (screen->cursor_blink_res) {
- DoRM(DP_CRS_BLINK, screen->cursor_blink_esc);
- SetCursorBlink(screen, screen->cursor_blink);
- }
- break;
-#endif
- case 18: /* DECPFF: print form feed */
- DoRM(DP_PRN_FORMFEED, screen->printer_formfeed);
- break;
- case 19: /* DECPEX: print extent */
- DoRM(DP_PRN_EXTENT, screen->printer_extent);
- break;
- case 25: /* DECTCEM: Show/hide cursor (VT200) */
- DoRM(DP_CRS_VISIBLE, screen->cursor_set);
- break;
- case 40: /* 132 column mode */
- DoRM(DP_X_DECCOLM, screen->c132);
- update_allow132();
- break;
- case 41: /* curses hack */
- DoRM(DP_X_MORE, screen->curses);
- update_cursesemul();
- break;
- case 44: /* margin bell */
- if ((DoRM(DP_X_MARGIN, screen->marginbell)) == 0)
- screen->bellarmed = -1;
- update_marginbell();
- break;
- case 45: /* reverse wraparound */
- bitcpy(&termw->flags, screen->save_modes[DP_X_REVWRAP], REVERSEWRAP);
- update_reversewrap();
- break;
-#ifdef ALLOWLOGGING
- case 46: /* logging */
-#ifdef ALLOWLOGFILEONOFF
- if (screen->save_modes[DP_X_LOGGING])
- StartLog(screen);
- else
- CloseLog(screen);
-#endif /* ALLOWLOGFILEONOFF */
- /* update_logging done by StartLog and CloseLog */
- break;
-#endif
- case 1047: /* alternate buffer */
- /* FALLTHRU */
- case 47: /* alternate buffer */
- if (!termw->misc.titeInhibit) {
- if (screen->save_modes[DP_X_ALTSCRN])
- ToAlternate(screen);
- else
- FromAlternate(screen);
- /* update_altscreen done by ToAlt and FromAlt */
- } else if (termw->misc.tiXtraScroll) {
- if (screen->save_modes[DP_X_ALTSCRN]) {
- xtermScroll(screen, screen->max_row);
- }
- }
- break;
- case SET_VT200_MOUSE: /* mouse bogus sequence */
- case SET_VT200_HIGHLIGHT_MOUSE:
- case SET_BTN_EVENT_MOUSE:
- case SET_ANY_EVENT_MOUSE:
- DoRM(DP_X_MOUSE, screen->send_mouse_pos);
- break;
- case 1048:
- if (!termw->misc.titeInhibit) {
- CursorRestore(termw);
- }
- break;
-#if OPT_READLINE
- case SET_BUTTON1_MOVE_POINT:
- SCREEN_FLAG_restore(screen, click1_moves);
- break;
- case SET_BUTTON2_MOVE_POINT:
- SCREEN_FLAG_restore(screen, paste_moves);
- break;
- case SET_DBUTTON3_DELETE:
- SCREEN_FLAG_restore(screen, dclick3_deletes);
- break;
- case SET_PASTE_IN_BRACKET:
- SCREEN_FLAG_restore(screen, paste_brackets);
- break;
- case SET_PASTE_QUOTE:
- SCREEN_FLAG_restore(screen, paste_quotes);
- break;
- case SET_PASTE_LITERAL_NL:
- SCREEN_FLAG_restore(screen, paste_literal_nl);
- break;
-#endif /* OPT_READLINE */
- }
- }
-}
-
-/*
- * Report window label (icon or title) in dtterm protocol
- * ESC ] code label ESC backslash
- */
-static void
-report_win_label(TScreen * screen,
- int code,
- XTextProperty * text,
- Status ok)
-{
- char **list;
- int length = 0;
-
- reply.a_type = ESC;
- unparseputc(ESC, screen->respond);
- unparseputc(']', screen->respond);
- unparseputc(code, screen->respond);
-
- if (ok) {
- if (XTextPropertyToStringList(text, &list, &length)) {
- int n, c;
- for (n = 0; n < length; n++) {
- char *s = list[n];
- while ((c = *s++) != '\0')
- unparseputc(c, screen->respond);
- }
- XFreeStringList(list);
- }
- if (text->value != 0)
- XFree(text->value);
- }
-
- unparseputc(ESC, screen->respond);
- unparseputc('\\', screen->respond);
-}
-
-/*
- * Window operations (from CDE dtterm description, as well as extensions).
- * See also "allowWindowOps" resource.
- */
-static void
-window_ops(XtermWidget termw)
-{
- TScreen *screen = &termw->screen;
- XWindowChanges values;
- XWindowAttributes win_attrs;
- XTextProperty text;
- unsigned value_mask;
- unsigned root_width;
- unsigned root_height;
-
- TRACE(("window_ops %d\n", param[0]));
- switch (param[0]) {
- case 1: /* Restore (de-iconify) window */
- XMapWindow(screen->display,
- VShellWindow);
- break;
-
- case 2: /* Minimize (iconify) window */
- XIconifyWindow(screen->display,
- VShellWindow,
- DefaultScreen(screen->display));
- break;
-
- case 3: /* Move the window to the given position */
- values.x = param[1];
- values.y = param[2];
- value_mask = (CWX | CWY);
- XReconfigureWMWindow(screen->display,
- VShellWindow,
- DefaultScreen(screen->display),
- value_mask,
- &values);
- break;
-
- case 4: /* Resize the window to given size in pixels */
- RequestResize(termw, param[1], param[2], False);
- break;
-
- case 5: /* Raise the window to the front of the stack */
- XRaiseWindow(screen->display, VShellWindow);
- break;
-
- case 6: /* Lower the window to the bottom of the stack */
- XLowerWindow(screen->display, VShellWindow);
- break;
-
- case 7: /* Refresh the window */
- Redraw();
- break;
-
- case 8: /* Resize the text-area, in characters */
- RequestResize(termw, param[1], param[2], True);
- break;
-
-#if OPT_MAXIMIZE
- case 9: /* Maximize or restore */
- RequestMaximize(termw, param[1]);
- break;
-#endif
-
- case 11: /* Report the window's state */
- XGetWindowAttributes(screen->display,
- VWindow(screen),
- &win_attrs);
- reply.a_type = CSI;
- reply.a_pintro = 0;
- reply.a_nparam = 1;
- reply.a_param[0] = (win_attrs.map_state == IsViewable) ? 1 : 2;
- reply.a_inters = 0;
- reply.a_final = 't';
- unparseseq(&reply, screen->respond);
- break;
-
- case 13: /* Report the window's position */
- XGetWindowAttributes(screen->display,
- WMFrameWindow(termw),
- &win_attrs);
- reply.a_type = CSI;
- reply.a_pintro = 0;
- reply.a_nparam = 3;
- reply.a_param[0] = 3;
- reply.a_param[1] = win_attrs.x;
- reply.a_param[2] = win_attrs.y;
- reply.a_inters = 0;
- reply.a_final = 't';
- unparseseq(&reply, screen->respond);
- break;
-
- case 14: /* Report the window's size in pixels */
- XGetWindowAttributes(screen->display,
- VWindow(screen),
- &win_attrs);
- reply.a_type = CSI;
- reply.a_pintro = 0;
- reply.a_nparam = 3;
- reply.a_param[0] = 4;
- /*FIXME: find if dtterm uses
- * win_attrs.height or Height
- * win_attrs.width or Width
- */
- reply.a_param[1] = Height(screen);
- reply.a_param[2] = Width(screen);
- reply.a_inters = 0;
- reply.a_final = 't';
- unparseseq(&reply, screen->respond);
- break;
-
- case 18: /* Report the text's size in characters */
- reply.a_type = CSI;
- reply.a_pintro = 0;
- reply.a_nparam = 3;
- reply.a_param[0] = 8;
- reply.a_param[1] = MaxRows(screen);
- reply.a_param[2] = MaxCols(screen);
- reply.a_inters = 0;
- reply.a_final = 't';
- unparseseq(&reply, screen->respond);
- break;
-
-#if OPT_MAXIMIZE
- case 19: /* Report the screen's size, in characters */
- if (!QueryMaximize(term, &root_height, &root_width)) {
- root_height = 0;
- root_width = 0;
- }
- reply.a_type = CSI;
- reply.a_pintro = 0;
- reply.a_nparam = 3;
- reply.a_param[0] = 9;
- reply.a_param[1] = root_height / FontHeight(screen);
- reply.a_param[2] = root_width / FontWidth(screen);
- reply.a_inters = 0;
- reply.a_final = 't';
- unparseseq(&reply, screen->respond);
- break;
-#endif
-
- case 20: /* Report the icon's label */
- report_win_label(screen, 'L', &text,
- XGetWMIconName(screen->display, VShellWindow, &text));
- break;
-
- case 21: /* Report the window's title */
- report_win_label(screen, 'l', &text,
- XGetWMName(screen->display, VShellWindow, &text));
- break;
-
- default: /* DECSLPP (24, 25, 36, 48, 72, 144) */
- if (param[0] >= 24)
- RequestResize(termw, param[0], -1, True);
- break;
- }
-}
-
-/*
- * set a bit in a word given a pointer to the word and a mask.
- */
-static void
-bitset(unsigned *p, unsigned mask)
-{
- *p |= mask;
-}
-
-/*
- * clear a bit in a word given a pointer to the word and a mask.
- */
-static void
-bitclr(unsigned *p, unsigned mask)
-{
- *p &= ~mask;
-}
-
-/*
- * Copy bits from one word to another, given a mask
- */
-static void
-bitcpy(unsigned *p, unsigned q, unsigned mask)
-{
- bitclr(p, mask);
- bitset(p, q & mask);
-}
-
-void
-unparseputc1(int c, int fd)
-{
- if (c >= 0x80 && c <= 0x9F) {
- if (!term->screen.control_eight_bits) {
- unparseputc(A2E(ESC), fd);
- c = A2E(c - 0x40);
- }
- }
- unparseputc(c, fd);
-}
-
-void
-unparseseq(ANSI * ap, int fd)
-{
- int c;
- int i;
- int inters;
-
- unparseputc1(c = ap->a_type, fd);
- if (c == ESC
- || c == DCS
- || c == CSI
- || c == OSC
- || c == PM
- || c == APC
- || c == SS3) {
- if (ap->a_pintro != 0)
- unparseputc(ap->a_pintro, fd);
- for (i = 0; i < ap->a_nparam; ++i) {
- if (i != 0)
- unparseputc(';', fd);
- unparseputn((unsigned int) ap->a_param[i], fd);
- }
- if ((inters = ap->a_inters) != 0) {
- for (i = 3; i >= 0; --i) {
- c = CharOf(inters >> (8 * i));
- if (c != 0)
- unparseputc(c, fd);
- }
- }
- unparseputc((char) ap->a_final, fd);
- }
-}
-
-static void
-unparseputn(unsigned int n, int fd)
-{
- unsigned int q;
-
- q = n / 10;
- if (q != 0)
- unparseputn(q, fd);
- unparseputc((char) ('0' + (n % 10)), fd);
-}
-
-void
-unparseputc(int c, int fd)
-{
- IChar buf[2];
- unsigned i = 1;
-
-#if OPT_TCAP_QUERY
- /*
- * If we're returning a termcap string, it has to be translated since
- * a DCS must not contain any characters except for the normal 7-bit
- * printable ASCII (counting tab, carriage return, etc). For now,
- * just use hexadecimal for the whole thing.
- */
- if (term->screen.tc_query >= 0) {
- char tmp[3];
- sprintf(tmp, "%02X", c & 0xFF);
- buf[0] = tmp[0];
- buf[1] = tmp[1];
- i = 2;
- } else
-#endif
- if ((buf[0] = c) == '\r' && (term->flags & LINEFEED)) {
- buf[1] = '\n';
- i++;
- }
-#ifdef VMS
- tt_write(&buf, i);
-#else /* VMS */
- writePtyData(fd, buf, i);
-#endif /* VMS */
-
- /* If send/receive mode is reset, we echo characters locally */
- if ((term->keyboard.flags & MODE_SRM) == 0) {
- (void) doparsing((unsigned) c, &myState);
- }
-}
-
-void
-unparseputs(char *s, int fd)
-{
- while (*s)
- unparseputc(*s++, fd);
-}
-
-void
-ToggleAlternate(TScreen * screen)
-{
- if (screen->alternate)
- FromAlternate(screen);
- else
- ToAlternate(screen);
-}
-
-static void
-ToAlternate(TScreen * screen)
-{
- if (screen->alternate)
- return;
- TRACE(("ToAlternate\n"));
- if (!screen->altbuf)
- screen->altbuf = Allocate(MaxRows(screen), MaxCols(screen),
- &screen->abuf_address);
- SwitchBufs(screen);
- screen->alternate = True;
- update_altscreen();
-}
-
-static void
-FromAlternate(TScreen * screen)
-{
- if (!screen->alternate)
- return;
- TRACE(("FromAlternate\n"));
- if (screen->scroll_amt)
- FlushScroll(screen);
- screen->alternate = False;
- SwitchBufs(screen);
- update_altscreen();
-}
-
-static void
-SwitchBufs(TScreen * screen)
-{
- int rows, top;
-
- if (screen->cursor_state)
- HideCursor();
-
- rows = MaxRows(screen);
- SwitchBufPtrs(screen);
-
- if ((top = -screen->topline) < rows) {
- if (screen->scroll_amt)
- FlushScroll(screen);
- if (top == 0)
- XClearWindow(screen->display, VWindow(screen));
- else
- XClearArea(screen->display,
- VWindow(screen),
- (int) OriginX(screen),
- (int) top * FontHeight(screen) + screen->border,
- (unsigned) Width(screen),
- (unsigned) (rows - top) * FontHeight(screen),
- False);
- }
- ScrnUpdate(screen, 0, 0, rows, MaxCols(screen), False);
-}
-
-/* swap buffer line pointers between alt and regular screens */
-void
-SwitchBufPtrs(TScreen * screen)
-{
- size_t len = ScrnPointers(screen, (unsigned) MaxRows(screen));
-
- memcpy((char *) screen->save_ptr, (char *) screen->visbuf, len);
- memcpy((char *) screen->visbuf, (char *) screen->altbuf, len);
- memcpy((char *) screen->altbuf, (char *) screen->save_ptr, len);
-}
-
-void
-VTRun(void)
-{
- TScreen *screen = &term->screen;
-
- TRACE(("VTRun ...\n"));
-
- if (!screen->Vshow) {
- set_vt_visibility(True);
- }
- update_vttekmode();
- update_vtshow();
- update_tekshow();
- set_vthide_sensitivity();
-
- if (screen->allbuf == NULL)
- VTallocbuf();
-
- screen->cursor_state = OFF;
- screen->cursor_set = ON;
-#if OPT_BLINK_CURS
- if (DoStartBlinking(screen))
- StartBlinking(screen);
-#endif
-
-#if OPT_TEK4014
- if (Tpushb > Tpushback) {
- fillPtyData(screen, VTbuffer, (char *) Tpushback, Tpushb - Tpushback);
- Tpushb = Tpushback;
- }
-#endif
- if (!setjmp(VTend))
- VTparse();
- StopBlinking(screen);
- HideCursor();
- screen->cursor_set = OFF;
-}
-
-/*ARGSUSED*/
-static void
-VTExpose(Widget w GCC_UNUSED,
- XEvent * event,
- Region region GCC_UNUSED)
-{
- TScreen *screen = &term->screen;
-
-#ifdef DEBUG
- if (debug)
- fputs("Expose\n", stderr);
-#endif /* DEBUG */
- if (event->type == Expose)
- HandleExposure(screen, event);
-}
-
-static void
-VTGraphicsOrNoExpose(XEvent * event)
-{
- TScreen *screen = &term->screen;
- if (screen->incopy <= 0) {
- screen->incopy = 1;
- if (screen->scrolls > 0)
- screen->scrolls--;
- }
- if (event->type == GraphicsExpose)
- if (HandleExposure(screen, event))
- screen->cursor_state = OFF;
- if ((event->type == NoExpose)
- || ((XGraphicsExposeEvent *) event)->count == 0) {
- if (screen->incopy <= 0 && screen->scrolls > 0)
- screen->scrolls--;
- if (screen->scrolls)
- screen->incopy = -1;
- else
- screen->incopy = 0;
- }
-}
-
-/*ARGSUSED*/
-static void
-VTNonMaskableEvent(Widget w GCC_UNUSED,
- XtPointer closure GCC_UNUSED,
- XEvent * event,
- Boolean * cont GCC_UNUSED)
-{
- switch (event->type) {
- case GraphicsExpose:
- case NoExpose:
- VTGraphicsOrNoExpose(event);
- break;
- }
-}
-
-static void
-VTResize(Widget w)
-{
- if (XtIsRealized(w)) {
- ScreenResize(&term->screen, term->core.width, term->core.height, &term->flags);
- }
-}
-
-#define okDimension(src,dst) ((src <= 32767) && ((dst = src) == src))
-
-static void
-RequestResize(XtermWidget termw, int rows, int cols, int text)
-{
-#ifndef nothack
- XSizeHints sizehints;
- long supp;
-#endif
- TScreen *screen = &termw->screen;
- unsigned long value;
- Dimension replyWidth, replyHeight;
- Dimension askedWidth, askedHeight;
- XtGeometryResult status;
- XWindowAttributes attrs;
-
- TRACE(("RequestResize(rows=%d, cols=%d, text=%d)\n", rows, cols, text));
-
- if ((askedWidth = cols) < cols
- || (askedHeight = rows) < rows)
- return;
-
- if (askedHeight == 0
- || askedWidth == 0
- || term->misc.limit_resize > 0) {
- XGetWindowAttributes(XtDisplay(termw),
- RootWindowOfScreen(XtScreen(termw)), &attrs);
- }
-
- if (text) {
- if ((value = rows) != 0) {
- if (rows < 0)
- value = MaxRows(screen);
- value *= FontHeight(screen);
- value += (2 * screen->border);
- if (!okDimension(value, askedHeight))
- return;
- }
-
- if ((value = cols) != 0) {
- if (cols < 0)
- value = MaxCols(screen);
- value *= FontWidth(screen);
- value += (2 * screen->border) + ScrollbarWidth(screen);
- if (!okDimension(value, askedWidth))
- return;
- }
-
- } else {
- if (rows < 0)
- askedHeight = FullHeight(screen);
- if (cols < 0)
- askedWidth = FullWidth(screen);
- }
-
- if (rows == 0)
- askedHeight = attrs.height;
- if (cols == 0)
- askedWidth = attrs.width;
-
- if (term->misc.limit_resize > 0) {
- Dimension high = term->misc.limit_resize * attrs.height;
- Dimension wide = term->misc.limit_resize * attrs.width;
- if (high < attrs.height)
- high = attrs.height;
- if (askedHeight > high)
- askedHeight = high;
- if (wide < attrs.width)
- wide = attrs.width;
- if (askedWidth > wide)
- askedWidth = wide;
- }
-#ifndef nothack
- if (!XGetWMNormalHints(screen->display, VShellWindow,
- &sizehints, &supp))
- bzero(&sizehints, sizeof(sizehints));
-#endif
-
- status = XtMakeResizeRequest((Widget) termw,
- askedWidth, askedHeight,
- &replyWidth, &replyHeight);
- TRACE(("charproc.c XtMakeResizeRequest %dx%d -> %dx%d (status %d)\n",
- askedHeight, askedWidth,
- replyHeight, replyWidth,
- status));
-
- if (status == XtGeometryYes ||
- status == XtGeometryDone) {
- ScreenResize(&termw->screen,
- replyWidth,
- replyHeight,
- &termw->flags);
- }
-#ifndef nothack
- /*
- * XtMakeResizeRequest() has the undesirable side-effect of clearing
- * the window manager's hints, even on a failed request. This would
- * presumably be fixed if the shell did its own work.
- */
- if (sizehints.flags
- && replyHeight
- && replyWidth) {
- sizehints.height = replyHeight;
- sizehints.width = replyWidth;
-
- TRACE(("%s@%d -- ", __FILE__, __LINE__));
- TRACE_HINTS(&sizehints);
- XSetWMNormalHints(screen->display, VShellWindow, &sizehints);
- TRACE(("%s@%d -- ", __FILE__, __LINE__));
- TRACE_WM_HINTS(termw);
- }
-#endif
-
- XSync(screen->display, False); /* synchronize */
- if (XtAppPending(app_con))
- xevents();
-}
-
-static String xterm_trans =
-"<ClientMessage>WM_PROTOCOLS: DeleteWindow()\n\
- <MappingNotify>: KeyboardMapping()\n";
-
-int
-VTInit(void)
-{
- TScreen *screen = &term->screen;
- Widget vtparent = SHELL_OF(term);
-
- XtRealizeWidget(vtparent);
- XtOverrideTranslations(vtparent, XtParseTranslationTable(xterm_trans));
- (void) XSetWMProtocols(XtDisplay(vtparent), XtWindow(vtparent),
- &wm_delete_window, 1);
- TRACE_TRANS("shell", vtparent);
- TRACE_TRANS("vt100", (Widget) (term));
-
- if (screen->allbuf == NULL)
- VTallocbuf();
- return (1);
-}
-
-static void
-VTallocbuf(void)
-{
- TScreen *screen = &term->screen;
- int nrows = MaxRows(screen);
-
- /* allocate screen buffer now, if necessary. */
- if (screen->scrollWidget)
- nrows += screen->savelines;
- screen->allbuf = Allocate(nrows, MaxCols(screen),
- &screen->sbuf_address);
- if (screen->scrollWidget)
- screen->visbuf = &screen->allbuf[MAX_PTRS * screen->savelines];
- else
- screen->visbuf = screen->allbuf;
- return;
-}
-
-static void
-VTClassInit(void)
-{
- XtAddConverter(XtRString, XtRGravity, XmuCvtStringToGravity,
- (XtConvertArgList) NULL, (Cardinal) 0);
-}
-
-/*
- * The whole wnew->screen struct is zeroed in VTInitialize. Use these macros
- * where applicable for copying the pieces from the request widget into the
- * new widget. We do not have to use them for wnew->misc, but the associated
- * traces are very useful for debugging.
- */
-#if OPT_TRACE
-#define init_Bres(name) \
- TRACE(("init " #name " = %s\n", \
- BtoS(wnew->name = request->name)))
-#define init_Dres(name) \
- TRACE(("init " #name " = %f\n", \
- wnew->name = request->name))
-#define init_Ires(name) \
- TRACE(("init " #name " = %d\n", \
- wnew->name = request->name))
-#define init_Sres(name) \
- TRACE(("init " #name " = \"%s\"\n", \
- (wnew->name = x_strtrim(request->name)) != NULL \
- ? wnew->name : "<null>"))
-#define init_Tres(offset) \
- TRACE(("init screen.Tcolors[" #offset "] = %#lx\n", \
- fill_Tres(wnew, request, offset)))
-#else
-#define init_Bres(name) wnew->name = request->name
-#define init_Dres(name) wnew->name = request->name
-#define init_Ires(name) wnew->name = request->name
-#define init_Sres(name) wnew->name = x_strtrim(request->name)
-#define init_Tres(offset) fill_Tres(wnew, request, offset)
-#endif
-
-#if OPT_COLOR_RES
-/*
- * Override the use of XtDefaultForeground/XtDefaultBackground to make some
- * colors, such as cursor color, use the actual foreground/background value
- * if there is no explicit resource value used.
- */
-static Pixel
-fill_Tres(XtermWidget target, XtermWidget source, int offset)
-{
- char *name;
- ScrnColors temp;
-
- target->screen.Tcolors[offset] = source->screen.Tcolors[offset];
- target->screen.Tcolors[offset].mode = False;
-
- if ((name = x_strtrim(target->screen.Tcolors[offset].resource)) != 0)
- target->screen.Tcolors[offset].resource = name;
-
- if (name == 0) {
- target->screen.Tcolors[offset].value = target->dft_foreground;
- } else if (!x_strcasecmp(name, XtDefaultForeground)) {
- target->screen.Tcolors[offset].value =
- ((offset == TEXT_FG || offset == TEXT_BG)
- ? target->dft_foreground
- : target->screen.Tcolors[TEXT_FG].value);
- } else if (!x_strcasecmp(name, XtDefaultBackground)) {
- target->screen.Tcolors[offset].value =
- ((offset == TEXT_FG || offset == TEXT_BG)
- ? target->dft_background
- : target->screen.Tcolors[TEXT_BG].value);
- } else {
- if (AllocateTermColor(target, &temp, offset, name)) {
- target->screen.Tcolors[offset].value = temp.colors[offset];
- }
- }
- return target->screen.Tcolors[offset].value;
-}
-#else
-#define fill_Tres(target, source, offset) \
- target->screen.Tcolors[offset] = source->screen.Tcolors[offset]
-#endif
-
-#if OPT_WIDE_CHARS
-static void
-VTInitialize_locale(XtermWidget request)
-{
- Bool is_utf8 = xtermEnvUTF8();
-
- TRACE(("VTInitialize_locale\n"));
- TRACE(("... request screen.utf8_mode = %d\n", request->screen.utf8_mode));
-
- if (request->screen.utf8_mode < 0)
- request->screen.utf8_mode = uFalse;
-
- if (request->screen.utf8_mode > 3)
- request->screen.utf8_mode = uDefault;
-
- request->screen.latin9_mode = 0;
- request->screen.unicode_font = 0;
-#if OPT_LUIT_PROG
- request->misc.callfilter = 0;
- request->misc.use_encoding = 0;
-
- TRACE(("... setup for luit:\n"));
- TRACE(("... request misc.locale_str = \"%s\"\n", request->misc.locale_str));
-
- if (request->screen.utf8_mode == uFalse) {
- TRACE(("... command-line +u8 overrides\n"));
- } else
-#if OPT_MINI_LUIT
- if (x_strcasecmp(request->misc.locale_str, "CHECKFONT") == 0) {
- int fl = (request->misc.default_font.f_n
- ? strlen(request->misc.default_font.f_n)
- : 0);
- if (fl > 11
- && x_strcasecmp(request->misc.default_font.f_n + fl - 11,
- "-ISO10646-1") == 0) {
- request->screen.unicode_font = 1;
- /* unicode font, use True */
-#ifdef HAVE_LANGINFO_CODESET
- if (!strcmp(xtermEnvEncoding(), "ANSI_X3.4-1968")
- || !strcmp(xtermEnvEncoding(), "ISO-8859-1")) {
- if (request->screen.utf8_mode == uDefault)
- request->screen.utf8_mode = uFalse;
- } else if (!strcmp(xtermEnvEncoding(), "ISO-8859-15")) {
- if (request->screen.utf8_mode == uDefault)
- request->screen.utf8_mode = uFalse;
- request->screen.latin9_mode = 1;
- } else {
- request->misc.callfilter = is_utf8 ? 0 : 1;
- request->screen.utf8_mode = uAlways;
- }
-#else
- request->misc.callfilter = is_utf8 ? 0 : 1;
- request->screen.utf8_mode = uAlways;
-#endif
- } else {
- /* other encoding, use False */
- if (request->screen.utf8_mode == uDefault) {
- request->screen.utf8_mode = is_utf8 ? uAlways : uFalse;
- }
- }
- } else
-#endif /* OPT_MINI_LUIT */
- if (x_strcasecmp(request->misc.locale_str, "TRUE") == 0 ||
- x_strcasecmp(request->misc.locale_str, "ON") == 0 ||
- x_strcasecmp(request->misc.locale_str, "YES") == 0 ||
- x_strcasecmp(request->misc.locale_str, "AUTO") == 0 ||
- strcmp(request->misc.locale_str, "1") == 0) {
- /* when true ... fully obeying LC_CTYPE locale */
- request->misc.callfilter = is_utf8 ? 0 : 1;
- request->screen.utf8_mode = uAlways;
- } else if (x_strcasecmp(request->misc.locale_str, "FALSE") == 0 ||
- x_strcasecmp(request->misc.locale_str, "OFF") == 0 ||
- x_strcasecmp(request->misc.locale_str, "NO") == 0 ||
- strcmp(request->misc.locale_str, "0") == 0) {
- /* when false ... original value of utf8_mode is effective */
- if (request->screen.utf8_mode == uDefault) {
- request->screen.utf8_mode = is_utf8 ? uAlways : uFalse;
- }
- } else if (x_strcasecmp(request->misc.locale_str, "MEDIUM") == 0 ||
- x_strcasecmp(request->misc.locale_str, "SEMIAUTO") == 0) {
- /* when medium ... obeying locale only for UTF-8 and Asian */
- if (is_utf8) {
- request->screen.utf8_mode = uAlways;
- } else if (
-#ifdef MB_CUR_MAX
- MB_CUR_MAX > 1 ||
-#else
- !strncmp(xtermEnvLocale(), "ja", 2) ||
- !strncmp(xtermEnvLocale(), "ko", 2) ||
- !strncmp(xtermEnvLocale(), "zh", 2) ||
-#endif
- !strncmp(xtermEnvLocale(), "th", 2) ||
- !strncmp(xtermEnvLocale(), "vi", 2)) {
- request->misc.callfilter = 1;
- request->screen.utf8_mode = uAlways;
- } else {
- request->screen.utf8_mode = uFalse;
- }
- } else if (x_strcasecmp(request->misc.locale_str, "UTF-8") == 0 ||
- x_strcasecmp(request->misc.locale_str, "UTF8") == 0) {
- /* when UTF-8 ... UTF-8 mode */
- request->screen.utf8_mode = uAlways;
- } else {
- /* other words are regarded as encoding name passed to luit */
- request->misc.callfilter = 1;
- request->screen.utf8_mode = uAlways;
- request->misc.use_encoding = 1;
- }
- TRACE(("... updated misc.callfilter = %s\n", BtoS(request->misc.callfilter)));
- TRACE(("... updated misc.use_encoding = %s\n", BtoS(request->misc.use_encoding)));
-#else
- if (request->screen.utf8_mode == uDefault) {
- request->screen.utf8_mode = is_utf8 ? uAlways : uFalse;
- }
-#endif /* OPT_LUIT_PROG */
-
- request->screen.utf8_inparse = (request->screen.utf8_mode != uFalse);
-
- TRACE(("... updated screen.utf8_mode = %d\n", request->screen.utf8_mode));
- TRACE(("...VTInitialize_locale done\n"));
-}
-#endif
-
-/* ARGSUSED */
-static void
-VTInitialize(Widget wrequest,
- Widget new_arg,
- ArgList args GCC_UNUSED,
- Cardinal *num_args GCC_UNUSED)
-{
- XtermWidget request = (XtermWidget) wrequest;
- XtermWidget wnew = (XtermWidget) new_arg;
- Widget my_parent = SHELL_OF(wnew);
- int i;
- char *s;
-
-#if OPT_ISO_COLORS
- Bool color_ok;
-#endif
-
-#if OPT_COLOR_RES2 && (MAXCOLORS > MIN_ANSI_COLORS)
- static XtResource fake_resources[] =
- {
-#if OPT_256_COLORS
-# include <256colres.h>
-#elif OPT_88_COLORS
-# include <88colres.h>
-#endif
- };
-#endif /* OPT_COLOR_RES2 */
-
- TRACE(("VTInitialize\n"));
-
- /* Zero out the entire "screen" component of "wnew" widget, then do
- * field-by-field assignment of "screen" fields that are named in the
- * resource list.
- */
- bzero((char *) &wnew->screen, sizeof(wnew->screen));
-
- /* dummy values so that we don't try to Realize the parent shell with height
- * or width of 0, which is illegal in X. The real size is computed in the
- * xtermWidget's Realize proc, but the shell's Realize proc is called first,
- * and must see a valid size.
- */
- wnew->core.height = wnew->core.width = 1;
-
- /*
- * The definition of -rv now is that it changes the definition of
- * XtDefaultForeground and XtDefaultBackground. So, we no longer
- * need to do anything special.
- */
- wnew->screen.display = wnew->core.screen->display;
-
- /*
- * We use the default foreground/background colors to compare/check if a
- * color-resource has been set.
- */
-#define MyBlackPixel(dpy) BlackPixel(dpy,DefaultScreen(dpy))
-#define MyWhitePixel(dpy) WhitePixel(dpy,DefaultScreen(dpy))
-
- if (request->misc.re_verse) {
- wnew->dft_foreground = MyWhitePixel(wnew->screen.display);
- wnew->dft_background = MyBlackPixel(wnew->screen.display);
- } else {
- wnew->dft_foreground = MyBlackPixel(wnew->screen.display);
- wnew->dft_background = MyWhitePixel(wnew->screen.display);
- }
- init_Tres(TEXT_FG);
- init_Tres(TEXT_BG);
-
- TRACE(("Color resource initialization:\n"));
- TRACE((" Default foreground %#lx\n", wnew->dft_foreground));
- TRACE((" Default background %#lx\n", wnew->dft_background));
- TRACE((" Screen foreground %#lx\n", T_COLOR(&(wnew->screen), TEXT_FG)));
- TRACE((" Screen background %#lx\n", T_COLOR(&(wnew->screen), TEXT_BG)));
-
- wnew->screen.mouse_button = -1;
- wnew->screen.mouse_row = -1;
- wnew->screen.mouse_col = -1;
-
-#if OPT_BOX_CHARS
- init_Bres(screen.force_box_chars);
- init_Bres(screen.force_all_chars);
-#endif
- init_Bres(screen.free_bold_box);
-
- init_Bres(screen.c132);
- init_Bres(screen.curses);
- init_Bres(screen.hp_ll_bc);
-#if OPT_XMC_GLITCH
- init_Ires(screen.xmc_glitch);
- init_Ires(screen.xmc_attributes);
- init_Bres(screen.xmc_inline);
- init_Bres(screen.move_sgr_ok);
-#endif
-#if OPT_BLINK_CURS
- init_Bres(screen.cursor_blink);
- init_Ires(screen.blink_on);
- init_Ires(screen.blink_off);
- wnew->screen.cursor_blink_res = wnew->screen.cursor_blink;
-#endif
-#if OPT_BLINK_TEXT
- init_Ires(screen.blink_as_bold);
-#endif
- init_Ires(screen.border);
- init_Bres(screen.jumpscroll);
- init_Bres(screen.old_fkeys);
- init_Bres(screen.delete_is_del);
- wnew->keyboard.type = wnew->screen.old_fkeys
- ? keyboardIsLegacy
- : keyboardIsDefault;
-#ifdef ALLOWLOGGING
- init_Sres(screen.logfile);
-#endif
- init_Bres(screen.bellOnReset);
- init_Bres(screen.marginbell);
- init_Bres(screen.multiscroll);
- init_Ires(screen.nmarginbell);
- init_Ires(screen.savelines);
- init_Ires(screen.scrollBarBorder);
- init_Ires(screen.scrolllines);
- init_Bres(screen.scrollttyoutput);
- init_Bres(screen.scrollkey);
-
- init_Sres(screen.term_id);
- for (s = request->screen.term_id; *s; s++) {
- if (!isalpha(CharOf(*s)))
- break;
- }
- wnew->screen.terminal_id = atoi(s);
- if (wnew->screen.terminal_id < MIN_DECID)
- wnew->screen.terminal_id = MIN_DECID;
- if (wnew->screen.terminal_id > MAX_DECID)
- wnew->screen.terminal_id = MAX_DECID;
- TRACE(("term_id '%s' -> terminal_id %d\n",
- wnew->screen.term_id,
- wnew->screen.terminal_id));
-
- wnew->screen.vtXX_level = (wnew->screen.terminal_id / 100);
- init_Bres(screen.visualbell);
- init_Ires(screen.visualBellDelay);
- init_Bres(screen.poponbell);
- init_Ires(misc.limit_resize);
-#if OPT_NUM_LOCK
- init_Bres(misc.real_NumLock);
- init_Bres(misc.alwaysUseMods);
- wnew->misc.num_lock = 0;
- wnew->misc.alt_left = 0;
- wnew->misc.alt_right = 0;
- wnew->misc.meta_trans = False;
- wnew->misc.meta_left = 0;
- wnew->misc.meta_right = 0;
-#endif
-#if OPT_SHIFT_FONTS
- init_Bres(misc.shift_fonts);
-#endif
-#if OPT_SUNPC_KBD
- init_Ires(misc.ctrl_fkeys);
-#endif
-#if OPT_TEK4014
- init_Bres(misc.tekInhibit);
- init_Bres(misc.tekSmall);
- init_Bres(screen.TekEmu);
-#endif
-#if OPT_TCAP_QUERY
- wnew->screen.tc_query = -1;
-#endif
- wnew->misc.re_verse0 = request->misc.re_verse;
- init_Bres(misc.re_verse);
- init_Ires(screen.multiClickTime);
- init_Ires(screen.bellSuppressTime);
- init_Sres(screen.charClass);
- init_Bres(screen.cutNewline);
- init_Bres(screen.cutToBeginningOfLine);
- init_Bres(screen.highlight_selection);
- init_Bres(screen.trim_selection);
- init_Bres(screen.i18nSelections);
- init_Bres(screen.brokenSelections);
- init_Bres(screen.always_highlight);
- wnew->screen.pointer_cursor = request->screen.pointer_cursor;
-
- init_Sres(screen.answer_back);
-
- init_Sres(screen.printer_command);
- init_Bres(screen.printer_autoclose);
- init_Bres(screen.printer_extent);
- init_Bres(screen.printer_formfeed);
- init_Ires(screen.printer_controlmode);
-#if OPT_PRINT_COLORS
- init_Ires(screen.print_attributes);
-#endif
-
- init_Sres(screen.keyboard_dialect);
-
- init_Bres(screen.input_eight_bits);
- init_Bres(screen.output_eight_bits);
- init_Bres(screen.control_eight_bits);
- init_Bres(screen.backarrow_key);
- init_Bres(screen.meta_sends_esc);
-
- init_Bres(screen.allowSendEvent0);
- init_Bres(screen.allowWindowOp0);
-
- /* make a copy so that editres cannot change the resource after startup */
- wnew->screen.allowSendEvents = wnew->screen.allowSendEvent0;
- wnew->screen.allowWindowOps = wnew->screen.allowWindowOp0;
-
-#ifndef NO_ACTIVE_ICON
- wnew->screen.fnt_icon = request->screen.fnt_icon;
- init_Bres(misc.active_icon);
- init_Ires(misc.icon_border_width);
- wnew->misc.icon_border_pixel = request->misc.icon_border_pixel;
-#endif /* NO_ACTIVE_ICON */
- init_Bres(misc.titeInhibit);
- init_Bres(misc.tiXtraScroll);
- init_Bres(misc.dynamicColors);
- for (i = fontMenu_font1; i <= fontMenu_lastBuiltin; i++) {
- init_Sres(screen.MenuFontName(i));
- }
- /* set default in realize proc */
- wnew->screen.MenuFontName(fontMenu_fontdefault) = NULL;
- wnew->screen.MenuFontName(fontMenu_fontescape) = NULL;
- wnew->screen.MenuFontName(fontMenu_fontsel) = NULL;
- wnew->screen.menu_font_number = fontMenu_fontdefault;
-
-#if OPT_BROKEN_OSC
- init_Bres(screen.brokenLinuxOSC);
-#endif
-
-#if OPT_BROKEN_ST
- init_Bres(screen.brokenStringTerm);
-#endif
-
-#if OPT_C1_PRINT
- init_Bres(screen.c1_printable);
-#endif
-
-#if OPT_DEC_CHRSET
- init_Bres(screen.font_doublesize);
- init_Ires(screen.cache_doublesize);
- if (wnew->screen.cache_doublesize > NUM_CHRSET)
- wnew->screen.cache_doublesize = NUM_CHRSET;
- if (wnew->screen.cache_doublesize == 0)
- wnew->screen.font_doublesize = False;
- TRACE(("Doublesize%s enabled, up to %d fonts\n",
- wnew->screen.font_doublesize ? "" : " not",
- wnew->screen.cache_doublesize));
-#endif
-
-#if OPT_ISO_COLORS || OPT_DEC_CHRSET || OPT_WIDE_CHARS
- wnew->num_ptrs = (OFF_ATTRS + 1); /* OFF_FLAGS, OFF_CHARS, OFF_ATTRS */
-#endif
-#if OPT_ISO_COLORS
- init_Ires(screen.veryBoldColors);
- init_Bres(screen.boldColors);
- init_Bres(screen.colorAttrMode);
- init_Bres(screen.colorBDMode);
- init_Bres(screen.colorBLMode);
- init_Bres(screen.colorMode);
- init_Bres(screen.colorULMode);
- init_Bres(screen.italicULMode);
- init_Bres(screen.colorRVMode);
-
- for (i = 0, color_ok = False; i < MAXCOLORS; i++) {
-
-#if OPT_COLOR_RES2 && (MAXCOLORS > MIN_ANSI_COLORS)
- /*
- * Xt has a hardcoded limit on the maximum number of resources that can
- * be used in a widget. If we configure both luit (which implies
- * wide-characters) and 256-colors, it goes over that limit. Most
- * people would not need a resource-file with 256-colors; the default
- * values in our table are sufficient. In that case, fake the resource
- * setting by copying the default value from the table. The #define's
- * can be overridden to make these true resources.
- */
- if (i >= MIN_ANSI_COLORS && i < NUM_ANSI_COLORS) {
- wnew->screen.Acolors[i].resource
- = ((char *) fake_resources[i - MIN_ANSI_COLORS].default_addr);
- if (wnew->screen.Acolors[i].resource == 0)
- wnew->screen.Acolors[i].resource = XtDefaultForeground;
- } else
-#endif /* OPT_COLOR_RES2 */
- wnew->screen.Acolors[i] = request->screen.Acolors[i];
-
-#if OPT_COLOR_RES
- TRACE(("Acolors[%d] = %s\n", i, wnew->screen.Acolors[i].resource));
- wnew->screen.Acolors[i].mode = False;
- if (!x_strcasecmp(wnew->screen.Acolors[i].resource, XtDefaultForeground)) {
- wnew->screen.Acolors[i].value = T_COLOR(&(wnew->screen), TEXT_FG);
- wnew->screen.Acolors[i].mode = True;
- } else if (!x_strcasecmp(wnew->screen.Acolors[i].resource, XtDefaultBackground)) {
- wnew->screen.Acolors[i].value = T_COLOR(&(wnew->screen), TEXT_BG);
- wnew->screen.Acolors[i].mode = True;
- } else {
- color_ok = True;
- }
-#else
- TRACE(("Acolors[%d] = %#lx\n", i, request->screen.Acolors[i]));
- if (wnew->screen.Acolors[i] != wnew->dft_foreground &&
- wnew->screen.Acolors[i] != T_COLOR(&(wnew->screen), TEXT_FG) &&
- wnew->screen.Acolors[i] != T_COLOR(&(wnew->screen), TEXT_BG))
- color_ok = True;
-#endif
- }
-
- /*
- * Check if we're trying to use color in a monochrome screen. Disable
- * color in that case, since that would make ANSI colors unusable. A 4-bit
- * or 8-bit display is usable, so we do not have to check for anything more
- * specific.
- */
- if (color_ok) {
- Display *display = wnew->screen.display;
- XVisualInfo myTemplate, *visInfoPtr;
- int numFound;
-
- myTemplate.visualid = XVisualIDFromVisual(DefaultVisual(display,
- XDefaultScreen(display)));
- visInfoPtr = XGetVisualInfo(display, (long) VisualIDMask,
- &myTemplate, &numFound);
- if (visInfoPtr == 0
- || numFound == 0
- || visInfoPtr->depth <= 1) {
- TRACE(("disabling color since screen is monochrome\n"));
- color_ok = False;
- } else {
- XFree(visInfoPtr);
- }
- }
-
- /* If none of the colors are anything other than the foreground or
- * background, we'll assume this isn't color, no matter what the colorMode
- * resource says. (There doesn't seem to be any good way to determine if
- * the resource lookup failed versus the user having misconfigured this).
- */
- if (!color_ok) {
- wnew->screen.colorMode = False;
- TRACE(("All colors are foreground or background: disable colorMode\n"));
- }
-#if OPT_EXT_COLORS
- wnew->num_ptrs = (OFF_BGRND + 1);
-#else
- wnew->num_ptrs = (OFF_COLOR + 1);
-#endif
- wnew->sgr_foreground = -1;
- wnew->sgr_background = -1;
- wnew->sgr_extended = 0;
-#endif /* OPT_ISO_COLORS */
-
- init_Tres(MOUSE_FG);
- init_Tres(MOUSE_BG);
- init_Tres(TEXT_CURSOR);
-#if OPT_HIGHLIGHT_COLOR
- init_Tres(HIGHLIGHT_BG);
-#endif
-
-#if OPT_TEK4014
- /*
- * The Tek4014 window has no separate resources for foreground, background
- * and cursor color. Since xterm always creates the vt100 widget first, we
- * can set the Tektronix colors here. That lets us use escape sequences to
- * set its dynamic colors and get consistent behavior whether or not the
- * window is displayed.
- */
- T_COLOR(&(wnew->screen), TEK_BG) = T_COLOR(&(wnew->screen), TEXT_BG);
- T_COLOR(&(wnew->screen), TEK_FG) = T_COLOR(&(wnew->screen), TEXT_FG);
- T_COLOR(&(wnew->screen), TEK_CURSOR) = T_COLOR(&(wnew->screen), TEXT_CURSOR);
-#endif
-
-#if OPT_DEC_CHRSET
- wnew->num_ptrs = (OFF_CSETS + 1);
-#endif
-
-#if OPT_WIDE_CHARS
- VTInitialize_locale(request);
-
-#if OPT_LUIT_PROG
- init_Bres(misc.callfilter);
- init_Bres(misc.use_encoding);
- init_Sres(misc.locale_str);
- init_Sres(misc.localefilter);
-#endif
-
-#if OPT_RENDERFONT
- init_Dres(misc.face_size);
- init_Sres(misc.face_name);
- init_Sres(misc.face_wide_name);
- init_Bres(misc.render_font);
- /* minor tweak to make debug traces consistent: */
- if (wnew->misc.render_font) {
- if (wnew->misc.face_name == 0) {
- wnew->misc.render_font = False;
- TRACE(("reset render_font since there is no face_name\n"));
- }
- }
-#endif
-
- init_Bres(screen.vt100_graphics);
- init_Ires(screen.utf8_mode);
- init_Bres(screen.wide_chars);
- init_Bres(misc.mk_width);
- init_Bres(misc.cjk_width);
- if (request->screen.utf8_mode) {
- TRACE(("setting wide_chars on\n"));
- wnew->screen.wide_chars = True;
- } else {
- TRACE(("setting utf8_mode to 0\n"));
- wnew->screen.utf8_mode = uFalse;
- }
- TRACE(("initialized UTF-8 mode to %d\n", wnew->screen.utf8_mode));
-
-#if OPT_MINI_LUIT
- if (request->screen.latin9_mode) {
- wnew->screen.latin9_mode = True;
- }
- if (request->screen.unicode_font) {
- wnew->screen.unicode_font = True;
- }
- TRACE(("initialized Latin9 mode to %d\n", wnew->screen.latin9_mode));
- TRACE(("initialized unicode_font to %d\n", wnew->screen.unicode_font));
-#endif
-
- if (wnew->screen.wide_chars != False)
- wnew->num_ptrs = (OFF_COM2H + 1);
-
- decode_wcwidth((wnew->misc.cjk_width ? 2 : 0)
- + (wnew->misc.mk_width ? 1 : 0)
- + 1);
-#endif /* OPT_WIDE_CHARS */
-
- init_Bres(screen.bold_mode);
- init_Bres(screen.underline);
-
- wnew->cur_foreground = 0;
- wnew->cur_background = 0;
-
- wnew->keyboard.flags = MODE_SRM;
- if (wnew->screen.backarrow_key)
- wnew->keyboard.flags |= MODE_DECBKM;
- TRACE(("initialized DECBKM %s\n",
- BtoS(wnew->keyboard.flags & MODE_DECBKM)));
-
- /* look for focus related events on the shell, because we need
- * to care about the shell's border being part of our focus.
- */
- XtAddEventHandler(my_parent, EnterWindowMask, False,
- HandleEnterWindow, (Opaque) NULL);
- XtAddEventHandler(my_parent, LeaveWindowMask, False,
- HandleLeaveWindow, (Opaque) NULL);
- XtAddEventHandler(my_parent, FocusChangeMask, False,
- HandleFocusChange, (Opaque) NULL);
- XtAddEventHandler((Widget) wnew, 0L, True,
- VTNonMaskableEvent, (Opaque) NULL);
- XtAddEventHandler((Widget) wnew, PropertyChangeMask, False,
- HandleBellPropertyChange, (Opaque) NULL);
-
-#if HANDLE_STRUCT_NOTIFY
-#if OPT_TOOLBAR
- wnew->VT100_TB_INFO(menu_bar) = request->VT100_TB_INFO(menu_bar);
- init_Ires(VT100_TB_INFO(menu_height));
-#else
- /* Flag icon name with "***" on window output when iconified.
- * Put in a handler that will tell us when we get Map/Unmap events.
- */
- if (zIconBeep)
-#endif
- XtAddEventHandler(my_parent, StructureNotifyMask, False,
- HandleStructNotify, (Opaque) 0);
-#endif /* HANDLE_STRUCT_NOTIFY */
-
- wnew->screen.bellInProgress = False;
-
- set_character_class(wnew->screen.charClass);
-
- /* create it, but don't realize it */
- ScrollBarOn(wnew, True, False);
-
- /* make sure that the resize gravity acceptable */
- if (wnew->misc.resizeGravity != NorthWestGravity &&
- wnew->misc.resizeGravity != SouthWestGravity) {
- Cardinal nparams = 1;
-
- XtAppWarningMsg(app_con, "rangeError", "resizeGravity", "XTermError",
- "unsupported resizeGravity resource value (%d)",
- (String *) & (wnew->misc.resizeGravity), &nparams);
- wnew->misc.resizeGravity = SouthWestGravity;
- }
-#ifndef NO_ACTIVE_ICON
- wnew->screen.whichVwin = &wnew->screen.fullVwin;
-#if OPT_TEK4014
- wnew->screen.whichTwin = &wnew->screen.fullTwin;
-#endif
-#endif /* NO_ACTIVE_ICON */
-
- if (wnew->screen.savelines < 0)
- wnew->screen.savelines = 0;
-
- init_Bres(screen.awaitInput);
-
- wnew->flags = 0;
- if (!wnew->screen.jumpscroll)
- wnew->flags |= SMOOTHSCROLL;
- if (wnew->misc.reverseWrap)
- wnew->flags |= REVERSEWRAP;
- if (wnew->misc.autoWrap)
- wnew->flags |= WRAPAROUND;
- if (wnew->misc.re_verse != wnew->misc.re_verse0)
- wnew->flags |= REVERSE_VIDEO;
- if (wnew->screen.c132)
- wnew->flags |= IN132COLUMNS;
-
- wnew->initflags = wnew->flags;
-
- init_Ires(keyboard.modify_cursor_keys);
-
- init_Ires(misc.appcursorDefault);
- if (wnew->misc.appcursorDefault)
- wnew->keyboard.flags |= MODE_DECCKM;
-
- init_Ires(misc.appkeypadDefault);
- if (wnew->misc.appkeypadDefault)
- wnew->keyboard.flags |= MODE_DECKPAM;
-
- return;
-}
-
-static void
-VTDestroy(Widget w)
-{
- XtFree((char *) (((XtermWidget) w)->screen.selection_data));
-}
-
-/*ARGSUSED*/
-static void
-VTRealize(Widget w,
- XtValueMask * valuemask,
- XSetWindowAttributes * values)
-{
- XtermWidget xw = (XtermWidget) w;
- TScreen *screen = &xw->screen;
-
- unsigned width, height;
- int xpos, ypos, pr;
- XSizeHints sizehints;
- Atom pid_atom;
-
- TRACE(("VTRealize\n"));
-
- TabReset(xw->tabs);
-
- screen->MenuFontName(fontMenu_fontdefault) = xw->misc.default_font.f_n;
- screen->fnt_norm = NULL;
- screen->fnt_bold = NULL;
-#if OPT_WIDE_CHARS
- screen->fnt_dwd = NULL;
- screen->fnt_dwdb = NULL;
-#endif
- if (!xtermLoadFont(xw,
- &(xw->misc.default_font),
- False, 0)) {
- if (XmuCompareISOLatin1(xw->misc.default_font.f_n, "fixed") != 0) {
- fprintf(stderr,
- "%s: unable to open font \"%s\", trying \"fixed\"....\n",
- xterm_name, xw->misc.default_font.f_n);
- (void) xtermLoadFont(xw,
- xtermFontName("fixed"),
- False, 0);
- screen->MenuFontName(fontMenu_fontdefault) = "fixed";
- }
- }
-
- /* really screwed if we couldn't open default font */
- if (!screen->fnt_norm) {
- fprintf(stderr, "%s: unable to locate a suitable font\n",
- xterm_name);
- Exit(1);
- }
-#if OPT_WIDE_CHARS
- if (xw->screen.utf8_mode) {
- TRACE(("check if this is a wide font, if not try again\n"));
- if (xtermLoadWideFonts(xw, False))
- SetVTFont(xw, screen->menu_font_number, TRUE, NULL);
- }
-#endif
-
- /* making cursor */
- if (!screen->pointer_cursor) {
- screen->pointer_cursor =
- make_colored_cursor(XC_xterm,
- T_COLOR(screen, MOUSE_FG),
- T_COLOR(screen, MOUSE_BG));
- } else {
- recolor_cursor(screen->pointer_cursor,
- T_COLOR(screen, MOUSE_FG),
- T_COLOR(screen, MOUSE_BG));
- }
-
- /* set defaults */
- xpos = 1;
- ypos = 1;
- width = 80;
- height = 24;
-
- TRACE(("parsing geo_metry %s\n", NonNull(xw->misc.geo_metry)));
- pr = XParseGeometry(xw->misc.geo_metry, &xpos, &ypos,
- &width, &height);
- TRACE(("... position %d,%d size %dx%d\n", ypos, xpos, height, width));
-
- set_max_col(screen, (int) (width - 1)); /* units in character cells */
- set_max_row(screen, (int) (height - 1)); /* units in character cells */
- xtermUpdateFontInfo(xw, False);
-
- width = screen->fullVwin.fullwidth;
- height = screen->fullVwin.fullheight;
-
- TRACE(("... border widget %d parent %d shell %d\n",
- BorderWidth(xw),
- BorderWidth(XtParent(xw)),
- BorderWidth(SHELL_OF(xw))));
-
- if ((pr & XValue) && (XNegative & pr)) {
- xpos += DisplayWidth(screen->display, DefaultScreen(screen->display))
- - width - (BorderWidth(XtParent(xw)) * 2);
- }
- if ((pr & YValue) && (YNegative & pr)) {
- ypos += DisplayHeight(screen->display, DefaultScreen(screen->display))
- - height - (BorderWidth(XtParent(xw)) * 2);
- }
-
- /* set up size hints for window manager; min 1 char by 1 char */
- bzero(&sizehints, sizeof(sizehints));
- xtermSizeHints(xw, &sizehints, (xw->misc.scrollbar
- ? (screen->scrollWidget->core.width
- + BorderWidth(screen->scrollWidget))
- : 0));
-
- sizehints.x = xpos;
- sizehints.y = ypos;
- if ((XValue & pr) || (YValue & pr)) {
- sizehints.flags |= USSize | USPosition;
- sizehints.flags |= PWinGravity;
- switch (pr & (XNegative | YNegative)) {
- case 0:
- sizehints.win_gravity = NorthWestGravity;
- break;
- case XNegative:
- sizehints.win_gravity = NorthEastGravity;
- break;
- case YNegative:
- sizehints.win_gravity = SouthWestGravity;
- break;
- default:
- sizehints.win_gravity = SouthEastGravity;
- break;
- }
- } else {
- /* set a default size, but do *not* set position */
- sizehints.flags |= PSize;
- }
- sizehints.height = sizehints.base_height
- + sizehints.height_inc * MaxRows(screen);
- sizehints.width = sizehints.base_width
- + sizehints.width_inc * MaxCols(screen);
-
- if ((WidthValue & pr) || (HeightValue & pr))
- sizehints.flags |= USSize;
- else
- sizehints.flags |= PSize;
-
- /*
- * Note that the size-hints are for the shell, while the resize-request
- * is for the vt100 widget. They are not the same size.
- */
- TRACE(("make resize request %dx%d\n", height, width));
- (void) XtMakeResizeRequest((Widget) xw,
- (Dimension) width, (Dimension) height,
- &xw->core.width, &xw->core.height);
- TRACE(("...made resize request %dx%d\n", xw->core.height, xw->core.width));
-
- /* XXX This is bogus. We are parsing geometries too late. This
- * is information that the shell widget ought to have before we get
- * realized, so that it can do the right thing.
- */
- if (sizehints.flags & USPosition)
- XMoveWindow(XtDisplay(xw), XtWindow(SHELL_OF(xw)),
- sizehints.x, sizehints.y);
-
- TRACE(("%s@%d -- ", __FILE__, __LINE__));
- TRACE_HINTS(&sizehints);
- XSetWMNormalHints(XtDisplay(xw), XtWindow(SHELL_OF(xw)), &sizehints);
- TRACE(("%s@%d -- ", __FILE__, __LINE__));
- TRACE_WM_HINTS(xw);
-
- if ((pid_atom = XInternAtom(XtDisplay(xw), "_NET_WM_PID", False)) != None) {
- /* XChangeProperty format 32 really is "long" */
- unsigned long pid_l = (unsigned long) getpid();
- TRACE(("Setting _NET_WM_PID property to %lu\n", pid_l));
- XChangeProperty(XtDisplay(xw), VShellWindow,
- pid_atom, XA_CARDINAL, 32, PropModeReplace,
- (unsigned char *) &pid_l, 1);
- }
-
- XFlush(XtDisplay(xw)); /* get it out to window manager */
-
- /* use ForgetGravity instead of SouthWestGravity because translating
- the Expose events for ConfigureNotifys is too hard */
- values->bit_gravity = ((xw->misc.resizeGravity == NorthWestGravity)
- ? NorthWestGravity
- : ForgetGravity);
- xw->screen.fullVwin.window = XtWindow(xw) =
- XCreateWindow(XtDisplay(xw), XtWindow(XtParent(xw)),
- xw->core.x, xw->core.y,
- xw->core.width, xw->core.height, BorderWidth(xw),
- (int) xw->core.depth,
- InputOutput, CopyFromParent,
- *valuemask | CWBitGravity, values);
- screen->event_mask = values->event_mask;
-
-#ifndef NO_ACTIVE_ICON
- if (xw->misc.active_icon && screen->fnt_icon) {
- int iconX = 0, iconY = 0;
- Widget shell = SHELL_OF(xw);
- unsigned long mask;
- XGCValues xgcv;
-
- TRACE(("Initializing active-icon\n"));
- XtVaGetValues(shell, XtNiconX, &iconX, XtNiconY, &iconY, (XtPointer) 0);
- xtermComputeFontInfo(xw, &(screen->iconVwin), screen->fnt_icon, 0);
-
- /* since only one client is permitted to select for Button
- * events, we have to let the window manager get 'em...
- */
- values->event_mask &= ~(ButtonPressMask | ButtonReleaseMask);
- values->border_pixel = xw->misc.icon_border_pixel;
-
- screen->iconVwin.window =
- XCreateWindow(XtDisplay(xw),
- RootWindowOfScreen(XtScreen(shell)),
- iconX, iconY,
- screen->iconVwin.fullwidth,
- screen->iconVwin.fullheight,
- xw->misc.icon_border_width,
- (int) xw->core.depth,
- InputOutput, CopyFromParent,
- *valuemask | CWBitGravity | CWBorderPixel,
- values);
- XtVaSetValues(shell,
- XtNiconWindow, screen->iconVwin.window,
- (XtPointer) 0);
- XtRegisterDrawable(XtDisplay(xw), screen->iconVwin.window, w);
-
- mask = (GCFont | GCForeground | GCBackground |
- GCGraphicsExposures | GCFunction);
-
- xgcv.font = screen->fnt_icon->fid;
- xgcv.foreground = T_COLOR(screen, TEXT_FG);
- xgcv.background = T_COLOR(screen, TEXT_BG);
- xgcv.graphics_exposures = True; /* default */
- xgcv.function = GXcopy;
-
- screen->iconVwin.normalGC =
- screen->iconVwin.normalboldGC =
- XtGetGC(shell, mask, &xgcv);
-
- xgcv.foreground = T_COLOR(screen, TEXT_BG);
- xgcv.background = T_COLOR(screen, TEXT_FG);
-
- screen->iconVwin.reverseGC =
- screen->iconVwin.reverseboldGC =
- XtGetGC(shell, mask, &xgcv);
-#if OPT_TOOLBAR
- /*
- * Toolbar is initialized before we get here. Enable the menu item
- * and set it properly.
- */
- set_sensitivity(mw,
- vtMenuEntries[vtMenu_activeicon].widget,
- True);
- update_activeicon();
-#endif
- } else {
- TRACE(("Disabled active-icon\n"));
- xw->misc.active_icon = False;
- }
-#endif /* NO_ACTIVE_ICON */
-
-#if OPT_I18N_SUPPORT && OPT_INPUT_METHOD
- VTInitI18N();
-#else
- xw->screen.xic = NULL;
-#endif
-#if OPT_NUM_LOCK
- VTInitModifiers();
-#endif
-
- set_cursor_gcs(screen);
-
- /* Reset variables used by ANSI emulation. */
-
- resetCharsets(screen);
-
- XDefineCursor(screen->display, VShellWindow, screen->pointer_cursor);
-
- set_cur_col(screen, 0);
- set_cur_row(screen, 0);
- set_max_col(screen, Width(screen) / screen->fullVwin.f_width - 1);
- set_max_row(screen, Height(screen) / screen->fullVwin.f_height - 1);
- set_tb_margins(screen, 0, screen->max_row);
-
- memset(screen->sc, 0, sizeof(screen->sc));
-
- /* Mark screen buffer as unallocated. We wait until the run loop so
- that the child process does not fork and exec with all the dynamic
- memory it will never use. If we were to do it here, the
- swap space for new process would be huge for huge savelines. */
-#if OPT_TEK4014
- if (!tekWidget) /* if not called after fork */
-#endif
- screen->visbuf = screen->allbuf = NULL;
-
- screen->do_wrap = 0;
- screen->scrolls = screen->incopy = 0;
- xtermSetCursorBox(screen);
-
- screen->savedlines = 0;
-
- if (xw->misc.scrollbar) {
- screen->fullVwin.sb_info.width = 0;
- ScrollBarOn(xw, False, True);
- }
- CursorSave(xw);
- return;
-}
-
-#if OPT_I18N_SUPPORT && OPT_INPUT_METHOD
-
-/* limit this feature to recent XFree86 since X11R6.x core dumps */
-#if defined(XtSpecificationRelease) && XtSpecificationRelease >= 6 && defined(X_HAVE_UTF8_STRING)
-#define USE_XIM_INSTANTIATE_CB
-
-static void
-xim_instantiate_cb(Display * display,
- XPointer client_data GCC_UNUSED,
- XPointer call_data GCC_UNUSED)
-{
- if (display != XtDisplay(term))
- return;
-
- VTInitI18N();
-}
-
-static void
-xim_destroy_cb(XIM im GCC_UNUSED,
- XPointer client_data GCC_UNUSED,
- XPointer call_data GCC_UNUSED)
-{
- term->screen.xic = NULL;
-
- XRegisterIMInstantiateCallback(XtDisplay(term), NULL, NULL, NULL,
- xim_instantiate_cb, NULL);
-}
-#endif /* X11R6+ */
-
-static void
-xim_real_init(void)
-{
- unsigned i, j;
- char *p, *s, *t, *ns, *end, buf[32];
- XIMStyles *xim_styles;
- XIMStyle input_style = 0;
- Bool found;
- static struct {
- char *name;
- unsigned long code;
- } known_style[] = {
- {
- "OverTheSpot", (XIMPreeditPosition | XIMStatusNothing)
- },
- {
- "OffTheSpot", (XIMPreeditArea | XIMStatusArea)
- },
- {
- "Root", (XIMPreeditNothing | XIMStatusNothing)
- },
- };
-
- term->screen.xic = NULL;
-
- if (term->misc.cannot_im) {
- return;
- }
-
- if (!term->misc.input_method || !*term->misc.input_method) {
- if ((p = XSetLocaleModifiers("")) != NULL && *p)
- term->screen.xim = XOpenIM(XtDisplay(term), NULL, NULL, NULL);
- } else {
- s = term->misc.input_method;
- i = 5 + strlen(s);
- t = (char *) MyStackAlloc(i, buf);
- if (t == NULL)
- SysError(ERROR_VINIT);
-
- for (ns = s; ns && *s;) {
- while (*s && isspace(CharOf(*s)))
- s++;
- if (!*s)
- break;
- if ((ns = end = strchr(s, ',')) == 0)
- end = s + strlen(s);
- while ((end != s) && isspace(CharOf(end[-1])))
- end--;
-
- if (end != s) {
- strcpy(t, "@im=");
- strncat(t, s, (unsigned) (end - s));
-
- if ((p = XSetLocaleModifiers(t)) != 0 && *p
- && (term->screen.xim = XOpenIM(XtDisplay(term),
- NULL,
- NULL,
- NULL)) != 0)
- break;
-
- }
- s = ns + 1;
- }
- MyStackFree(t, buf);
- }
-
- if (term->screen.xim == NULL
- && (p = XSetLocaleModifiers("@im=none")) != NULL
- && *p) {
- term->screen.xim = XOpenIM(XtDisplay(term), NULL, NULL, NULL);
- }
-
- if (!term->screen.xim) {
- fprintf(stderr, "Failed to open input method\n");
- return;
- }
- TRACE(("VTInitI18N opened input method\n"));
-
- if (XGetIMValues(term->screen.xim, XNQueryInputStyle, &xim_styles, NULL)
- || !xim_styles
- || !xim_styles->count_styles) {
- fprintf(stderr, "input method doesn't support any style\n");
- XCloseIM(term->screen.xim);
- term->misc.cannot_im = True;
- return;
- }
-
- found = False;
- for (s = term->misc.preedit_type; s && !found;) {
- while (*s && isspace(CharOf(*s)))
- s++;
- if (!*s)
- break;
- if ((ns = end = strchr(s, ',')) != 0)
- ns++;
- else
- end = s + strlen(s);
- while ((end != s) && isspace(CharOf(end[-1])))
- end--;
-
- if (end != s) { /* just in case we have a spurious comma */
- TRACE(("looking for style '%.*s'\n", end - s, s));
- for (i = 0; i < XtNumber(known_style); i++) {
- if ((int) strlen(known_style[i].name) == (end - s)
- && !strncmp(s, known_style[i].name, (unsigned) (end - s))) {
- input_style = known_style[i].code;
- for (j = 0; j < xim_styles->count_styles; j++) {
- if (input_style == xim_styles->supported_styles[j]) {
- found = True;
- break;
- }
- }
- if (found)
- break;
- }
- }
- }
-
- s = ns;
- }
- XFree(xim_styles);
-
- if (!found) {
- fprintf(stderr,
- "input method doesn't support my preedit type (%s)\n",
- term->misc.preedit_type);
- XCloseIM(term->screen.xim);
- term->misc.cannot_im = True;
- return;
- }
-
- /*
- * Check for styles we do not yet support.
- */
- TRACE(("input_style %#lx\n", input_style));
- if (input_style == (XIMPreeditArea | XIMStatusArea)) {
- fprintf(stderr,
- "This program doesn't support the 'OffTheSpot' preedit type\n");
- XCloseIM(term->screen.xim);
- term->misc.cannot_im = True;
- return;
- }
-
- /*
- * For XIMPreeditPosition (or OverTheSpot), XIM client has to
- * prepare a font.
- * The font has to be locale-dependent XFontSet, whereas
- * XTerm use Unicode font. This leads a problem that the
- * same font cannot be used for XIM preedit.
- */
- if (input_style != (XIMPreeditNothing | XIMStatusNothing)) {
- char **missing_charset_list;
- int missing_charset_count;
- char *def_string;
- XVaNestedList p_list;
- XPoint spot =
- {0, 0};
- XFontStruct **fonts;
- char **font_name_list;
-
- term->screen.fs = XCreateFontSet(XtDisplay(term),
- term->misc.f_x,
- &missing_charset_list,
- &missing_charset_count,
- &def_string);
- if (term->screen.fs == NULL) {
- fprintf(stderr, "Preparation of font set "
- "\"%s\" for XIM failed.\n", term->misc.f_x);
- term->screen.fs = XCreateFontSet(XtDisplay(term),
- DEFXIMFONT,
- &missing_charset_list,
- &missing_charset_count,
- &def_string);
- }
- if (term->screen.fs == NULL) {
- fprintf(stderr, "Preparation of default font set "
- "\"%s\" for XIM failed.\n", DEFXIMFONT);
- XCloseIM(term->screen.xim);
- term->misc.cannot_im = True;
- return;
- }
- (void) XExtentsOfFontSet(term->screen.fs);
- j = XFontsOfFontSet(term->screen.fs, &fonts, &font_name_list);
- for (i = 0, term->screen.fs_ascent = 0; i < j; i++) {
- if (term->screen.fs_ascent < (*fonts)->ascent)
- term->screen.fs_ascent = (*fonts)->ascent;
- }
- p_list = XVaCreateNestedList(0,
- XNSpotLocation, &spot,
- XNFontSet, term->screen.fs,
- NULL);
- term->screen.xic = XCreateIC(term->screen.xim,
- XNInputStyle, input_style,
- XNClientWindow, XtWindow(term),
- XNFocusWindow, XtWindow(term),
- XNPreeditAttributes, p_list,
- NULL);
- } else {
- term->screen.xic = XCreateIC(term->screen.xim, XNInputStyle, input_style,
- XNClientWindow, XtWindow(term),
- XNFocusWindow, XtWindow(term),
- NULL);
- }
-
- if (!term->screen.xic) {
- fprintf(stderr, "Failed to create input context\n");
- XCloseIM(term->screen.xim);
- }
-#if defined(USE_XIM_INSTANTIATE_CB)
- else {
- XIMCallback destroy_cb;
-
- destroy_cb.callback = xim_destroy_cb;
- destroy_cb.client_data = NULL;
- if (XSetIMValues(term->screen.xim, XNDestroyCallback, &destroy_cb, NULL))
- fprintf(stderr, "Could not set destroy callback to IM\n");
- }
-#endif
-
- return;
-}
-
-static void
-VTInitI18N(void)
-{
- if (term->misc.open_im) {
- xim_real_init();
-
-#if defined(USE_XIM_INSTANTIATE_CB)
- if (term->screen.xic == NULL && !term->misc.cannot_im) {
- sleep(3);
- XRegisterIMInstantiateCallback(XtDisplay(term), NULL, NULL, NULL,
- xim_instantiate_cb, NULL);
- }
-#endif
- }
-}
-#endif /* OPT_I18N_SUPPORT && OPT_INPUT_METHOD */
-
-static Boolean
-VTSetValues(Widget cur,
- Widget request GCC_UNUSED,
- Widget wnew,
- ArgList args GCC_UNUSED,
- Cardinal *num_args GCC_UNUSED)
-{
- XtermWidget curvt = (XtermWidget) cur;
- XtermWidget newvt = (XtermWidget) wnew;
- Bool refresh_needed = False;
- Bool fonts_redone = False;
-
- if ((T_COLOR(&(curvt->screen), TEXT_BG) !=
- T_COLOR(&(newvt->screen), TEXT_BG)) ||
- (T_COLOR(&(curvt->screen), TEXT_FG) !=
- T_COLOR(&(newvt->screen), TEXT_FG)) ||
- (curvt->screen.MenuFontName(curvt->screen.menu_font_number) !=
- newvt->screen.MenuFontName(newvt->screen.menu_font_number)) ||
- (curvt->misc.default_font.f_n != newvt->misc.default_font.f_n)) {
- if (curvt->misc.default_font.f_n != newvt->misc.default_font.f_n)
- newvt->screen.MenuFontName(fontMenu_fontdefault) = newvt->misc.default_font.f_n;
- if (xtermLoadFont(newvt,
- xtermFontName(newvt->screen.MenuFontName(curvt->screen.menu_font_number)),
- True, newvt->screen.menu_font_number)) {
- /* resizing does the redisplay, so don't ask for it here */
- refresh_needed = True;
- fonts_redone = True;
- } else if (curvt->misc.default_font.f_n != newvt->misc.default_font.f_n)
- newvt->screen.MenuFontName(fontMenu_fontdefault) = curvt->misc.default_font.f_n;
- }
- if (!fonts_redone
- && (T_COLOR(&(curvt->screen), TEXT_CURSOR) !=
- T_COLOR(&(newvt->screen), TEXT_CURSOR))) {
- set_cursor_gcs(&newvt->screen);
- refresh_needed = True;
- }
- if (curvt->misc.re_verse != newvt->misc.re_verse) {
- newvt->flags ^= REVERSE_VIDEO;
- ReverseVideo(newvt);
- newvt->misc.re_verse = !newvt->misc.re_verse; /* ReverseVideo toggles */
- refresh_needed = True;
- }
- if ((T_COLOR(&(curvt->screen), MOUSE_FG) !=
- T_COLOR(&(newvt->screen), MOUSE_FG)) ||
- (T_COLOR(&(curvt->screen), MOUSE_BG) !=
- T_COLOR(&(newvt->screen), MOUSE_BG))) {
- recolor_cursor(newvt->screen.pointer_cursor,
- T_COLOR(&(newvt->screen), MOUSE_FG),
- T_COLOR(&(newvt->screen), MOUSE_BG));
- refresh_needed = True;
- }
- if (curvt->misc.scrollbar != newvt->misc.scrollbar) {
- ToggleScrollBar(newvt);
- }
-
- return refresh_needed;
-}
-
-#define setGC(value) set_at = __LINE__, currentGC = value
-
-#define OutsideSelection(screen,row,col) \
- ((row) > (screen)->endHRow || \
- ((row) == (screen)->endHRow && \
- (col) >= (screen)->endHCol) || \
- (row) < (screen)->startHRow || \
- ((row) == (screen)->startHRow && \
- (col) < (screen)->startHCol))
-
-/*
- * Shows cursor at new cursor position in screen.
- */
-void
-ShowCursor(void)
-{
- TScreen *screen = &term->screen;
- int x, y;
- Char clo;
- unsigned flags;
- unsigned fg_bg = 0;
- GC currentGC;
- int set_at;
- Bool in_selection;
- Bool reversed;
- Pixel fg_pix;
- Pixel bg_pix;
- Pixel tmp;
-#if OPT_HIGHLIGHT_COLOR
- Pixel hi_pix = T_COLOR(screen, HIGHLIGHT_BG);
-#endif
-#if OPT_WIDE_CHARS
- Char chi = 0;
- Char c1h = 0;
- Char c1l = 0;
- Char c2h = 0;
- Char c2l = 0;
- int base;
-#endif
- int cursor_col;
-
- if (screen->cursor_state == BLINKED_OFF)
- return;
-
- if (eventMode != NORMAL)
- return;
-
- if (screen->cur_row - screen->topline > screen->max_row)
- return;
-
- screen->cursor_row = screen->cur_row;
- cursor_col = screen->cursor_col = screen->cur_col;
- screen->cursor_moved = False;
-
-#ifndef NO_ACTIVE_ICON
- if (IsIcon(screen)) {
- screen->cursor_state = ON;
- return;
- }
-#endif /* NO_ACTIVE_ICON */
-
-#if OPT_WIDE_CHARS
- base =
-#endif
- clo = SCRN_BUF_CHARS(screen, screen->cursor_row)[cursor_col];
-
- if_OPT_WIDE_CHARS(screen, {
- int my_col;
- chi = SCRN_BUF_WIDEC(screen, screen->cursor_row)[cursor_col];
- if (clo == HIDDEN_LO && chi == HIDDEN_HI && cursor_col > 0) {
- /* if cursor points to non-initial part of wide character,
- * back it up
- */
- --cursor_col;
- clo = SCRN_BUF_CHARS(screen, screen->cursor_row)[cursor_col];
- chi = SCRN_BUF_WIDEC(screen, screen->cursor_row)[cursor_col];
- }
- my_col = cursor_col;
- base = (chi << 8) | clo;
- if (iswide(base))
- my_col += 1;
- c1l = SCRN_BUF_COM1L(screen, screen->cursor_row)[my_col];
- c1h = SCRN_BUF_COM1H(screen, screen->cursor_row)[my_col];
- c2l = SCRN_BUF_COM2L(screen, screen->cursor_row)[my_col];
- c2h = SCRN_BUF_COM2H(screen, screen->cursor_row)[my_col];
- });
-
- flags = SCRN_BUF_ATTRS(screen, screen->cursor_row)[cursor_col];
-
- if (clo == 0
-#if OPT_WIDE_CHARS
- && chi == 0
-#endif
- ) {
- clo = ' ';
- }
-
- /*
- * If the cursor happens to be on blanks, and the foreground color is set
- * but not the background, do not treat it as a colored cell.
- */
-#if OPT_ISO_COLORS
- if ((flags & TERM_COLOR_FLAGS(term)) == BG_COLOR
-#if OPT_WIDE_CHARS
- && chi == 0
-#endif
- && clo == ' ') {
- flags &= ~TERM_COLOR_FLAGS(term);
- }
-#endif
-
- /*
- * Compare the current cell to the last set of colors used for the
- * cursor and update the GC's if needed.
- */
- if_OPT_EXT_COLORS(screen, {
- fg_bg = (SCRN_BUF_FGRND(screen, screen->cursor_row)[cursor_col] << 8)
- | (SCRN_BUF_BGRND(screen, screen->cursor_row)[cursor_col]);
- });
- if_OPT_ISO_TRADITIONAL_COLORS(screen, {
- fg_bg = SCRN_BUF_COLOR(screen, screen->cursor_row)[cursor_col];
- });
- fg_pix = getXtermForeground(flags, extract_fg(fg_bg, flags));
- bg_pix = getXtermBackground(flags, extract_bg(fg_bg, flags));
-
- if (OutsideSelection(screen, screen->cur_row, screen->cur_col))
- in_selection = False;
- else
- in_selection = True;
-
- reversed = ReverseOrHilite(screen, flags, in_selection);
-
- /* This is like updatedXtermGC(), except that we have to worry about
- * whether the window has focus, since in that case we want just an
- * outline for the cursor.
- */
- if (screen->select || screen->always_highlight) {
- if (reversed) { /* text is reverse video */
- if (screen->cursorGC) {
- setGC(screen->cursorGC);
- } else {
- if (flags & BOLDATTR(screen)) {
- setGC(NormalBoldGC(screen));
- } else {
- setGC(NormalGC(screen));
- }
- }
-#if OPT_HIGHLIGHT_COLOR
- if (hi_pix != T_COLOR(screen, TEXT_FG)
- && hi_pix != fg_pix
- && hi_pix != bg_pix
- && hi_pix != term->dft_foreground) {
- bg_pix = fg_pix;
- fg_pix = hi_pix;
- }
-#endif
- EXCHANGE(fg_pix, bg_pix, tmp);
- } else { /* normal video */
- if (screen->reversecursorGC) {
- setGC(screen->reversecursorGC);
- } else {
- if (flags & BOLDATTR(screen)) {
- setGC(ReverseBoldGC(screen));
- } else {
- setGC(ReverseGC(screen));
- }
- }
- }
- if (T_COLOR(screen, TEXT_CURSOR) == term->dft_foreground) {
- XSetBackground(screen->display, currentGC, fg_pix);
- }
- XSetForeground(screen->display, currentGC, bg_pix);
- } else { /* not selected */
- if (reversed) { /* text is reverse video */
-#if OPT_HIGHLIGHT_COLOR
- if (hi_pix != T_COLOR(screen, TEXT_FG)
- && hi_pix != fg_pix
- && hi_pix != bg_pix
- && hi_pix != term->dft_foreground) {
- bg_pix = fg_pix;
- fg_pix = hi_pix;
- }
-#endif
- setGC(ReverseGC(screen));
- XSetForeground(screen->display, currentGC, bg_pix);
- XSetBackground(screen->display, currentGC, fg_pix);
- } else { /* normal video */
- setGC(NormalGC(screen));
- XSetForeground(screen->display, currentGC, fg_pix);
- XSetBackground(screen->display, currentGC, bg_pix);
- }
- }
-
- if (screen->cursor_busy == 0
- && (screen->cursor_state != ON || screen->cursor_GC != set_at)) {
-
- screen->cursor_GC = set_at;
- TRACE(("ShowCursor calling drawXtermText cur(%d,%d)\n",
- screen->cur_row, screen->cur_col));
-
- drawXtermText(screen, flags & DRAWX_MASK, currentGC,
- x = CurCursorX(screen, screen->cur_row, cursor_col),
- y = CursorY(screen, screen->cur_row),
- curXtermChrSet(screen->cur_row),
- PAIRED_CHARS(&clo, &chi), 1, 0);
-
-#if OPT_WIDE_CHARS
- if (c1l || c1h) {
- drawXtermText(screen, (flags & DRAWX_MASK) | NOBACKGROUND,
- currentGC, x, y,
- curXtermChrSet(screen->cur_row),
- PAIRED_CHARS(&c1l, &c1h), 1, iswide(base));
-
- if (c2l || c2h)
- drawXtermText(screen, (flags & DRAWX_MASK) | NOBACKGROUND,
- currentGC, x, y,
- curXtermChrSet(screen->cur_row),
- PAIRED_CHARS(&c2l, &c2h), 1, iswide(base));
- }
-#endif
-
- if (!screen->select && !screen->always_highlight) {
- screen->box->x = x;
- screen->box->y = y;
- XDrawLines(screen->display, VWindow(screen),
- screen->cursoroutlineGC ? screen->cursoroutlineGC
- : currentGC,
- screen->box, NBOX, CoordModePrevious);
- }
- }
- screen->cursor_state = ON;
-}
-
-/*
- * hide cursor at previous cursor position in screen.
- */
-void
-HideCursor(void)
-{
- TScreen *screen = &term->screen;
- GC currentGC;
- unsigned flags;
- unsigned fg_bg = 0;
- int x, y;
- Char clo;
- Bool in_selection;
-#if OPT_WIDE_CHARS
- Char chi = 0;
- Char c1h = 0;
- Char c1l = 0;
- Char c2h = 0;
- Char c2l = 0;
- int base;
-#endif
- int cursor_col;
-
- if (screen->cursor_state == OFF) /* FIXME */
- return;
- if (screen->cursor_row - screen->topline > screen->max_row)
- return;
-
- cursor_col = screen->cursor_col;
-
-#ifndef NO_ACTIVE_ICON
- if (IsIcon(screen)) {
- screen->cursor_state = OFF;
- return;
- }
-#endif /* NO_ACTIVE_ICON */
-
-#if OPT_WIDE_CHARS
- base =
-#endif
- clo = SCRN_BUF_CHARS(screen, screen->cursor_row)[cursor_col];
- flags = SCRN_BUF_ATTRS(screen, screen->cursor_row)[cursor_col];
-
- if_OPT_WIDE_CHARS(screen, {
- int my_col;
- chi = SCRN_BUF_WIDEC(screen, screen->cursor_row)[cursor_col];
- if (clo == HIDDEN_LO && chi == HIDDEN_HI) {
- /* if cursor points to non-initial part of wide character,
- * back it up
- */
- --cursor_col;
- clo = SCRN_BUF_CHARS(screen, screen->cursor_row)[cursor_col];
- chi = SCRN_BUF_WIDEC(screen, screen->cursor_row)[cursor_col];
- }
- my_col = cursor_col;
- base = (chi << 8) | clo;
- if (iswide(base))
- my_col += 1;
- c1l = SCRN_BUF_COM1L(screen, screen->cursor_row)[my_col];
- c1h = SCRN_BUF_COM1H(screen, screen->cursor_row)[my_col];
- c2l = SCRN_BUF_COM2L(screen, screen->cursor_row)[my_col];
- c2h = SCRN_BUF_COM2H(screen, screen->cursor_row)[my_col];
- });
-
- if_OPT_EXT_COLORS(screen, {
- fg_bg = (SCRN_BUF_FGRND(screen, screen->cursor_row)[cursor_col] << 8)
- | (SCRN_BUF_BGRND(screen, screen->cursor_row)[cursor_col]);
- });
- if_OPT_ISO_TRADITIONAL_COLORS(screen, {
- fg_bg = SCRN_BUF_COLOR(screen, screen->cursor_row)[cursor_col];
- });
-
- if (OutsideSelection(screen, screen->cursor_row, screen->cursor_col))
- in_selection = False;
- else
- in_selection = True;
-
- currentGC = updatedXtermGC(screen, flags, fg_bg, in_selection);
-
- if (clo == 0
-#if OPT_WIDE_CHARS
- && chi == 0
-#endif
- ) {
- clo = ' ';
- }
-
- TRACE(("HideCursor calling drawXtermText cur(%d,%d)\n",
- screen->cursor_row, screen->cursor_col));
- drawXtermText(screen, flags & DRAWX_MASK, currentGC,
- x = CurCursorX(screen, screen->cursor_row, cursor_col),
- y = CursorY(screen, screen->cursor_row),
- curXtermChrSet(screen->cursor_row),
- PAIRED_CHARS(&clo, &chi), 1, 0);
-
-#if OPT_WIDE_CHARS
- if (c1l || c1h) {
- drawXtermText(screen, (flags & DRAWX_MASK) | NOBACKGROUND,
- currentGC, x, y,
- curXtermChrSet(screen->cur_row),
- PAIRED_CHARS(&c1l, &c1h), 1, iswide(base));
-
- if (c2l || c2h)
- drawXtermText(screen, (flags & DRAWX_MASK) | NOBACKGROUND,
- currentGC, x, y,
- curXtermChrSet(screen->cur_row),
- PAIRED_CHARS(&c2l, &c2h), 1, iswide(base));
- }
-#endif
- screen->cursor_state = OFF;
- resetXtermGC(screen, flags, in_selection);
-}
-
-#if OPT_BLINK_CURS || OPT_BLINK_TEXT
-static void
-StartBlinking(TScreen * screen)
-{
- if (screen->blink_timer == 0) {
- unsigned long interval = (screen->cursor_state == ON ?
- screen->blink_on : screen->blink_off);
- if (interval == 0) /* wow! */
- interval = 1; /* let's humor him anyway */
- screen->blink_timer = XtAppAddTimeOut(app_con,
- interval,
- HandleBlinking,
- screen);
- }
-}
-
-static void
-StopBlinking(TScreen * screen)
-{
- if (screen->blink_timer)
- XtRemoveTimeOut(screen->blink_timer);
- screen->blink_timer = 0;
-}
-
-#if OPT_BLINK_TEXT
-static Bool
-ScrnHasBlinking(TScreen * screen, int row)
-{
- Char *attrs = SCRN_BUF_ATTRS(screen, row);
- int col;
- Bool result = False;
-
- for (col = 0; col < MaxCols(screen); ++col) {
- if (attrs[col] & BLINK) {
- result = True;
- break;
- }
- }
- return result;
-}
-#endif
-
-/*
- * Blink the cursor by alternately showing/hiding cursor. We leave the timer
- * running all the time (even though that's a little inefficient) to make the
- * logic simple.
- */
-static void
-HandleBlinking(XtPointer closure, XtIntervalId * id GCC_UNUSED)
-{
- TScreen *screen = (TScreen *) closure;
- Bool resume = False;
-
- screen->blink_timer = 0;
- screen->blink_state = !screen->blink_state;
-
-#if OPT_BLINK_CURS
- if (DoStartBlinking(screen)) {
- if (screen->cursor_state == ON) {
- if (screen->select || screen->always_highlight) {
- HideCursor();
- if (screen->cursor_state == OFF)
- screen->cursor_state = BLINKED_OFF;
- }
- } else if (screen->cursor_state == BLINKED_OFF) {
- screen->cursor_state = OFF;
- ShowCursor();
- if (screen->cursor_state == OFF)
- screen->cursor_state = BLINKED_OFF;
- }
- resume = True;
- }
-#endif
-
-#if OPT_BLINK_TEXT
- /*
- * Inspect the line on the current screen to see if any have the BLINK flag
- * associated with them. Prune off any that have had the corresponding
- * cells reset. If any are left, repaint those lines with ScrnRefresh().
- */
- if (!(screen->blink_as_bold)) {
- int row;
- int first_row = screen->max_row;
- int last_row = -1;
-
- for (row = screen->max_row; row >= 0; row--) {
- if (ScrnTstBlinked(screen, row)) {
- if (ScrnHasBlinking(screen, row)) {
- resume = True;
- if (row > last_row)
- last_row = row;
- if (row < first_row)
- first_row = row;
- } else {
- ScrnClrBlinked(screen, row);
- }
- }
- }
- /*
- * FIXME: this could be a little more efficient, e.g,. by limiting the
- * columns which are updated.
- */
- if (first_row <= last_row) {
- ScrnRefresh(screen,
- first_row,
- 0,
- last_row + 1 - first_row,
- MaxCols(screen),
- True);
- }
- }
-#endif
-
- /*
- * If either the cursor or text is blinking, restart the timer.
- */
- if (resume)
- StartBlinking(screen);
-}
-#endif /* OPT_BLINK_CURS || OPT_BLINK_TEXT */
-
-/*
- * Implement soft or hard (full) reset of the VTxxx emulation. There are a
- * couple of differences from real DEC VTxxx terminals (to avoid breaking
- * applications which have come to rely on xterm doing this):
- *
- * + autowrap mode should be reset (instead it's reset to the resource
- * default).
- * + the popup menu offers a choice of resetting the savedLines, or not.
- * (but the control sequence does this anyway).
- */
-void
-VTReset(Bool full, Bool saved)
-{
- TScreen *screen = &term->screen;
-
- if (!XtIsRealized((Widget) term)) {
- Bell(XkbBI_MinorError, 0);
- return;
- }
-
- if (saved) {
- screen->savedlines = 0;
- ScrollBarDrawThumb(screen->scrollWidget);
- }
-
- /* make cursor visible */
- screen->cursor_set = ON;
-
- /* reset scrolling region */
- set_tb_margins(screen, 0, screen->max_row);
-
- bitclr(&term->flags, ORIGIN);
-
- if_OPT_ISO_COLORS(screen, {
- reset_SGR_Colors();
- });
-
- /* Reset character-sets to initial state */
- resetCharsets(screen);
-
- /* Reset DECSCA */
- bitclr(&term->flags, PROTECTED);
- screen->protected_mode = OFF_PROTECT;
-
- if (full) { /* RIS */
- if (screen->bellOnReset)
- Bell(XkbBI_TerminalBell, 0);
-
- /* reset the mouse mode */
- screen->send_mouse_pos = MOUSE_OFF;
- waitingForTrackInfo = False;
- eventMode = NORMAL;
-
- TabReset(term->tabs);
- term->keyboard.flags = MODE_SRM;
-#if OPT_INITIAL_ERASE
- if (term->keyboard.reset_DECBKM == 1)
- term->keyboard.flags |= MODE_DECBKM;
- else if (term->keyboard.reset_DECBKM == 2)
-#endif
- if (term->screen.backarrow_key)
- term->keyboard.flags |= MODE_DECBKM;
- TRACE(("full reset DECBKM %s\n",
- BtoS(term->keyboard.flags & MODE_DECBKM)));
- update_appcursor();
- update_appkeypad();
- update_decbkm();
- show_8bit_control(False);
- reset_decudk();
-
- FromAlternate(screen);
- ClearScreen(screen);
- screen->cursor_state = OFF;
- if (term->flags & REVERSE_VIDEO)
- ReverseVideo(term);
-
- term->flags = term->initflags;
- update_reversevideo();
- update_autowrap();
- update_reversewrap();
- update_autolinefeed();
-
- screen->jumpscroll = !(term->flags & SMOOTHSCROLL);
- update_jumpscroll();
-
- if (screen->c132 && (term->flags & IN132COLUMNS)) {
- Dimension reqWidth = (80 * FontWidth(screen)
- + 2 * screen->border + ScrollbarWidth(screen));
- Dimension reqHeight = (FontHeight(screen)
- * MaxRows(screen) + 2 * screen->border);
- Dimension replyWidth;
- Dimension replyHeight;
-
- TRACE(("Making resize-request to restore 80-columns %dx%d\n",
- reqHeight, reqWidth));
- XtMakeResizeRequest((Widget) term,
- reqWidth,
- reqHeight,
- &replyWidth, &replyHeight);
- TRACE(("...result %dx%d\n", replyHeight, replyWidth));
- repairSizeHints();
- XSync(screen->display, False); /* synchronize */
- if (XtAppPending(app_con))
- xevents();
- }
-
- CursorSet(screen, 0, 0, term->flags);
- CursorSave(term);
- } else { /* DECSTR */
- /*
- * There's a tiny difference, to accommodate usage of xterm.
- * We reset autowrap to the resource values rather than turning
- * it off.
- */
- term->keyboard.flags &= ~(MODE_DECCKM | MODE_KAM | MODE_DECKPAM);
- bitcpy(&term->flags, term->initflags, WRAPAROUND | REVERSEWRAP);
- bitclr(&term->flags, INSERT | INVERSE | BOLD | BLINK | UNDERLINE | INVISIBLE);
- if_OPT_ISO_COLORS(screen, {
- reset_SGR_Colors();
- });
- update_appcursor();
- update_autowrap();
- update_reversewrap();
-
- CursorSave(term);
- screen->sc[screen->alternate != False].row =
- screen->sc[screen->alternate != False].col = 0;
- }
- longjmp(vtjmpbuf, 1); /* force ground state in parser */
-}
-
-/*
- * set_character_class - takes a string of the form
- *
- * low[-high]:val[,low[-high]:val[...]]
- *
- * and sets the indicated ranges to the indicated values.
- */
-static int
-set_character_class(char *s)
-{
- int i; /* iterator, index into s */
- int len; /* length of s */
- int acc; /* accumulator */
- int low, high; /* bounds of range [0..127] */
- int base; /* 8, 10, 16 (octal, decimal, hex) */
- int numbers; /* count of numbers per range */
- int digits; /* count of digits in a number */
- static char *errfmt = "%s: %s in range string \"%s\" (position %d)\n";
-
- if (!s || !s[0])
- return -1;
-
- base = 10; /* in case we ever add octal, hex */
- low = high = -1; /* out of range */
-
- for (i = 0, len = strlen(s), acc = 0, numbers = digits = 0;
- i < len; i++) {
- Char c = s[i];
-
- if (isspace(c)) {
- continue;
- } else if (isdigit(c)) {
- acc = acc * base + (c - '0');
- digits++;
- continue;
- } else if (c == '-') {
- low = acc;
- acc = 0;
- if (digits == 0) {
- fprintf(stderr, errfmt, ProgramName, "missing number", s, i);
- return (-1);
- }
- digits = 0;
- numbers++;
- continue;
- } else if (c == ':') {
- if (numbers == 0)
- low = acc;
- else if (numbers == 1)
- high = acc;
- else {
- fprintf(stderr, errfmt, ProgramName, "too many numbers",
- s, i);
- return (-1);
- }
- digits = 0;
- numbers++;
- acc = 0;
- continue;
- } else if (c == ',') {
- /*
- * now, process it
- */
-
- if (high < 0) {
- high = low;
- numbers++;
- }
- if (numbers != 2) {
- fprintf(stderr, errfmt, ProgramName, "bad value number",
- s, i);
- } else if (SetCharacterClassRange(low, high, acc) != 0) {
- fprintf(stderr, errfmt, ProgramName, "bad range", s, i);
- }
-
- low = high = -1;
- acc = 0;
- digits = 0;
- numbers = 0;
- continue;
- } else {
- fprintf(stderr, errfmt, ProgramName, "bad character", s, i);
- return (-1);
- } /* end if else if ... else */
-
- }
-
- if (low < 0 && high < 0)
- return (0);
-
- /*
- * now, process it
- */
-
- if (high < 0)
- high = low;
- if (numbers < 1 || numbers > 2) {
- fprintf(stderr, errfmt, ProgramName, "bad value number", s, i);
- } else if (SetCharacterClassRange(low, high, acc) != 0) {
- fprintf(stderr, errfmt, ProgramName, "bad range", s, i);
- }
-
- return (0);
-}
-
-/* ARGSUSED */
-static void
-HandleKeymapChange(Widget w,
- XEvent * event GCC_UNUSED,
- String * params,
- Cardinal *param_count)
-{
- static XtTranslations keymap, original;
- static XtResource key_resources[] =
- {
- {XtNtranslations, XtCTranslations, XtRTranslationTable,
- sizeof(XtTranslations), 0, XtRTranslationTable, (XtPointer) NULL}
- };
- char mapName[1000];
- char mapClass[1000];
- char *pmapName;
- char *pmapClass;
- size_t len;
-
- if (*param_count != 1)
- return;
-
- if (original == NULL)
- original = w->core.tm.translations;
-
- if (strcmp(params[0], "None") == 0) {
- XtOverrideTranslations(w, original);
- return;
- }
-
- len = strlen(params[0]) + 7;
-
- pmapName = (char *) MyStackAlloc(len, mapName);
- pmapClass = (char *) MyStackAlloc(len, mapClass);
- if (pmapName == NULL
- || pmapClass == NULL)
- SysError(ERROR_KMMALLOC1);
-
- (void) sprintf(pmapName, "%sKeymap", params[0]);
- (void) strcpy(pmapClass, pmapName);
- if (islower(CharOf(pmapClass[0])))
- pmapClass[0] = toupper(CharOf(pmapClass[0]));
- XtGetSubresources(w, (XtPointer) &keymap, pmapName, pmapClass,
- key_resources, (Cardinal) 1, NULL, (Cardinal) 0);
- if (keymap != NULL)
- XtOverrideTranslations(w, keymap);
-
- MyStackFree(pmapName, mapName);
- MyStackFree(pmapClass, mapClass);
-}
-
-/* ARGSUSED */
-static void
-HandleBell(Widget w GCC_UNUSED,
- XEvent * event GCC_UNUSED,
- String * params, /* [0] = volume */
- Cardinal *param_count) /* 0 or 1 */
-{
- int percent = (*param_count) ? atoi(params[0]) : 0;
-
- Bell(XkbBI_TerminalBell, percent);
-}
-
-/* ARGSUSED */
-static void
-HandleVisualBell(Widget w GCC_UNUSED,
- XEvent * event GCC_UNUSED,
- String * params GCC_UNUSED,
- Cardinal *param_count GCC_UNUSED)
-{
- VisualBell();
-}
-
-/* ARGSUSED */
-static void
-HandleIgnore(Widget w,
- XEvent * event,
- String * params GCC_UNUSED,
- Cardinal *param_count GCC_UNUSED)
-{
- /* do nothing, but check for funny escape sequences */
- (void) SendMousePosition(w, event);
-}
-
-/* ARGSUSED */
-static void
-DoSetSelectedFont(Widget w GCC_UNUSED,
- XtPointer client_data GCC_UNUSED,
- Atom * selection GCC_UNUSED,
- Atom * type,
- XtPointer value,
- unsigned long *length GCC_UNUSED,
- int *format)
-{
- char *val = (char *) value;
- int len;
- if (*type != XA_STRING || *format != 8) {
- Bell(XkbBI_MinorError, 0);
- return;
- }
- len = strlen(val);
- if (len > 0) {
- if (val[len - 1] == '\n')
- val[len - 1] = '\0';
- /* Do some sanity checking to avoid sending a long selection
- back to the server in an OpenFont that is unlikely to succeed.
- XLFD allows up to 255 characters and no control characters;
- we are a little more liberal here. */
- if (len > 1000 || strchr(val, '\n'))
- return;
- if (!xtermLoadFont(term,
- xtermFontName(val),
- True,
- fontMenu_fontsel))
- Bell(XkbBI_MinorError, 0);
- }
-}
-
-void
-FindFontSelection(char *atom_name, Bool justprobe)
-{
- static AtomPtr *atoms;
- static int atomCount = 0;
- AtomPtr *pAtom;
- int a;
- Atom target;
-
- if (!atom_name)
- atom_name = "PRIMARY";
-
- for (pAtom = atoms, a = atomCount; a; a--, pAtom++) {
- if (strcmp(atom_name, XmuNameOfAtom(*pAtom)) == 0)
- break;
- }
- if (!a) {
- atoms = (AtomPtr *) XtRealloc((char *) atoms,
- sizeof(AtomPtr) * (atomCount + 1));
- *(pAtom = &atoms[atomCount++]) = XmuMakeAtom(atom_name);
- }
-
- target = XmuInternAtom(XtDisplay(term), *pAtom);
- if (justprobe) {
- term->screen.MenuFontName(fontMenu_fontsel) =
- XGetSelectionOwner(XtDisplay(term), target) ? _Font_Selected_ : 0;
- } else {
- XtGetSelectionValue((Widget) term, target, XA_STRING,
- DoSetSelectedFont, NULL,
- XtLastTimestampProcessed(XtDisplay(term)));
- }
- return;
-}
-
-void
-set_cursor_gcs(TScreen * screen)
-{
- XGCValues xgcv;
- XtGCMask mask;
- Pixel cc = T_COLOR(screen, TEXT_CURSOR);
- Pixel fg = T_COLOR(screen, TEXT_FG);
- Pixel bg = T_COLOR(screen, TEXT_BG);
- GC new_cursorGC = NULL;
- GC new_cursorFillGC = NULL;
- GC new_reversecursorGC = NULL;
- GC new_cursoroutlineGC = NULL;
-
- /*
- * Let's see, there are three things that have "color":
- *
- * background
- * text
- * cursorblock
- *
- * And, there are four situation when drawing a cursor, if we decide
- * that we like have a solid block of cursor color with the letter
- * that it is highlighting shown in the background color to make it
- * stand out:
- *
- * selected window, normal video - background on cursor
- * selected window, reverse video - foreground on cursor
- * unselected window, normal video - foreground on background
- * unselected window, reverse video - background on foreground
- *
- * Since the last two are really just normalGC and reverseGC, we only
- * need two new GC's. Under monochrome, we get the same effect as
- * above by setting cursor color to foreground.
- */
-
-#if OPT_ISO_COLORS
- /*
- * If we're using ANSI colors, the functions manipulating the SGR code will
- * use the same GC's. To avoid having the cursor change color, we use the
- * Xlib calls rather than the Xt calls.
- *
- * Use the colorMode value to determine which we'll do (the VWindow may
- * not be set before the widget's realized, so it's tested separately).
- */
- if (screen->colorMode) {
- if (VWindow(screen) != 0 && (cc != bg) && (cc != fg)) {
- /* we might have a colored foreground/background later */
- xgcv.font = screen->fnt_norm->fid;
- mask = (GCForeground | GCBackground | GCFont);
- xgcv.foreground = fg;
- xgcv.background = cc;
- new_cursorGC = XCreateGC(screen->display, VWindow(screen), mask, &xgcv);
-
- xgcv.foreground = cc;
- xgcv.background = fg;
- new_cursorFillGC =
- XCreateGC(screen->display, VWindow(screen), mask, &xgcv);
-
- if (screen->always_highlight) {
- new_reversecursorGC = (GC) 0;
- new_cursoroutlineGC = (GC) 0;
- } else {
- xgcv.foreground = bg;
- xgcv.background = cc;
- new_reversecursorGC =
- XCreateGC(screen->display, VWindow(screen), mask, &xgcv);
- xgcv.foreground = cc;
- xgcv.background = bg;
- new_cursoroutlineGC =
- XCreateGC(screen->display, VWindow(screen), mask, &xgcv);
- }
- }
- } else
-#endif
- if (cc != fg && cc != bg) {
- /* we have a colored cursor */
- xgcv.font = screen->fnt_norm->fid;
- mask = (GCForeground | GCBackground | GCFont);
-
- xgcv.foreground = fg;
- xgcv.background = cc;
- new_cursorGC = XtGetGC((Widget) term, mask, &xgcv);
-
- xgcv.foreground = cc;
- xgcv.background = fg;
- new_cursorFillGC = XtGetGC((Widget) term, mask, &xgcv);
-
- if (screen->always_highlight) {
- new_reversecursorGC = (GC) 0;
- new_cursoroutlineGC = (GC) 0;
- } else {
- xgcv.foreground = bg;
- xgcv.background = cc;
- new_reversecursorGC = XtGetGC((Widget) term, mask, &xgcv);
- xgcv.foreground = cc;
- xgcv.background = bg;
- new_cursoroutlineGC = XtGetGC((Widget) term, mask, &xgcv);
- }
- }
-#if OPT_ISO_COLORS
- if (screen->colorMode) {
- if (screen->cursorGC)
- XFreeGC(screen->display, screen->cursorGC);
- if (screen->fillCursorGC)
- XFreeGC(screen->display, screen->fillCursorGC);
- if (screen->reversecursorGC)
- XFreeGC(screen->display, screen->reversecursorGC);
- if (screen->cursoroutlineGC)
- XFreeGC(screen->display, screen->cursoroutlineGC);
- } else
-#endif
- {
- if (screen->cursorGC)
- XtReleaseGC((Widget) term, screen->cursorGC);
- if (screen->fillCursorGC)
- XtReleaseGC((Widget) term, screen->fillCursorGC);
- if (screen->reversecursorGC)
- XtReleaseGC((Widget) term, screen->reversecursorGC);
- if (screen->cursoroutlineGC)
- XtReleaseGC((Widget) term, screen->cursoroutlineGC);
- }
-
- screen->cursorGC = new_cursorGC;
- screen->fillCursorGC = new_cursorFillGC;
- screen->reversecursorGC = new_reversecursorGC;
- screen->cursoroutlineGC = new_cursoroutlineGC;
-}
diff --git a/nx-X11/programs/xterm/charproc.c.NX.original b/nx-X11/programs/xterm/charproc.c.NX.original
deleted file mode 100644
index 78bb9a17d..000000000
--- a/nx-X11/programs/xterm/charproc.c.NX.original
+++ /dev/null
@@ -1,7300 +0,0 @@
-/* $XTermId: charproc.c,v 1.627 2005/11/13 23:10:35 tom Exp $ */
-
-/*
- * $Xorg: charproc.c,v 1.6 2001/02/09 02:06:02 xorgcvs Exp $
- */
-
-/* $XFree86: xc/programs/xterm/charproc.c,v 3.177 2005/11/13 23:10:35 dickey Exp $ */
-
-/*
-
-Copyright 1999-2004,2005 by Thomas E. Dickey
-
- All Rights Reserved
-
-Permission is hereby granted, free of charge, to any person obtaining a
-copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name(s) of the above copyright
-holders shall not be used in advertising or otherwise to promote the
-sale, use or other dealings in this Software without prior written
-authorization.
-
-Copyright 1988 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-
-*/
-/*
- * Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
- *
- * All Rights Reserved
- *
- * Permission to use, copy, modify, and distribute this software and its
- * documentation for any purpose and without fee is hereby granted,
- * provided that the above copyright notice appear in all copies and that
- * both that copyright notice and this permission notice appear in
- * supporting documentation, and that the name of Digital Equipment
- * Corporation not be used in advertising or publicity pertaining to
- * distribution of the software without specific, written prior permission.
- *
- *
- * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
- * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
- * DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
- * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
- * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
- * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- * SOFTWARE.
- */
-
-/**************************************************************************/
-/* */
-/* Copyright (c) 2001, 2011 NoMachine, http://www.nomachine.com/. */
-/* */
-/* NX-X11, NX protocol compression and NX extensions to this software */
-/* are copyright of NoMachine. Redistribution and use of the present */
-/* software is allowed according to terms specified in the file LICENSE */
-/* which comes in the source distribution. */
-/* */
-/* Check http://www.nomachine.com/licensing.html for applicability. */
-/* */
-/* NX and NoMachine are trademarks of Medialogic S.p.A. */
-/* */
-/* All rights reserved. */
-/* */
-/**************************************************************************/
-
-/* charproc.c */
-
-#include <version.h>
-#include <xterm.h>
-
-#include <X11/Xatom.h>
-#include <X11/Xutil.h>
-#include <X11/cursorfont.h>
-#include <X11/Xmu/Atoms.h>
-#include <X11/Xmu/CharSet.h>
-#include <X11/Xmu/Converters.h>
-
-#if OPT_INPUT_METHOD
-
-#if defined(HAVE_LIB_XAW)
-#include <X11/Xaw/XawImP.h>
-#elif defined(HAVE_LIB_XAW3D)
-#include <X11/Xaw3d/XawImP.h>
-#elif defined(HAVE_LIB_NEXTAW)
-#include <X11/neXtaw/XawImP.h>
-#elif defined(HAVE_LIB_XAWPLUS)
-#include <X11/XawPlus/XawImP.h>
-#endif
-
-#endif
-
-#if OPT_WIDE_CHARS
-#include <wcwidth.h>
-#include <precompose.h>
-#ifdef HAVE_LANGINFO_CODESET
-#include <langinfo.h>
-#endif
-#endif
-
-#if OPT_INPUT_METHOD
-#include <X11/Xlocale.h>
-#endif
-
-#include <stdio.h>
-#include <ctype.h>
-
-#if defined(HAVE_SCHED_YIELD)
-#include <sched.h>
-#endif
-
-#include <VTparse.h>
-#include <data.h>
-#include <error.h>
-#include <menu.h>
-#include <main.h>
-#include <fontutils.h>
-#include <xcharmouse.h>
-#include <charclass.h>
-#include <xstrings.h>
-
-#if OPT_ZICONBEEP || OPT_TOOLBAR
-#define HANDLE_STRUCT_NOTIFY 1
-#else
-#define HANDLE_STRUCT_NOTIFY 0
-#endif
-
-static IChar doinput(void);
-static int set_character_class(char *s);
-static void FromAlternate(TScreen * screen);
-static void RequestResize(XtermWidget termw, int rows, int cols, int text);
-static void SwitchBufs(TScreen * screen);
-static void ToAlternate(TScreen * screen);
-static void VTallocbuf(void);
-static void WriteText(TScreen * screen,
- PAIRED_CHARS(Char * str, Char * str2),
- Cardinal len);
-static void ansi_modes(XtermWidget termw,
- void (*func) (unsigned *p, unsigned mask));
-static void bitclr(unsigned *p, unsigned mask);
-static void bitcpy(unsigned *p, unsigned q, unsigned mask);
-static void bitset(unsigned *p, unsigned mask);
-static void dpmodes(XtermWidget termw, void (*func) (unsigned *p, unsigned mask));
-static void restoremodes(XtermWidget termw);
-static void savemodes(XtermWidget termw);
-static void unparseputn(unsigned int n, int fd);
-static void window_ops(XtermWidget termw);
-
-#define DoStartBlinking(s) ((s)->cursor_blink ^ (s)->cursor_blink_esc)
-
-#if OPT_BLINK_CURS || OPT_BLINK_TEXT
-static void HandleBlinking(XtPointer closure, XtIntervalId * id);
-static void StartBlinking(TScreen * screen);
-static void StopBlinking(TScreen * screen);
-#else
-#define StartBlinking(screen) /* nothing */
-#define StopBlinking(screen) /* nothing */
-#endif
-
-#if OPT_INPUT_METHOD
-static void PreeditPosition(TScreen * screen);
-#endif
-
-#define DEFAULT -1
-#define BELLSUPPRESSMSEC 200
-
-static int nparam;
-static ANSI reply;
-static int param[NPARAM];
-
-static jmp_buf vtjmpbuf;
-
-/* event handlers */
-static void HandleBell PROTO_XT_ACTIONS_ARGS;
-static void HandleIgnore PROTO_XT_ACTIONS_ARGS;
-static void HandleKeymapChange PROTO_XT_ACTIONS_ARGS;
-static void HandleVisualBell PROTO_XT_ACTIONS_ARGS;
-#if HANDLE_STRUCT_NOTIFY
-static void HandleStructNotify PROTO_XT_EV_HANDLER_ARGS;
-#endif
-
-/*
- * NOTE: VTInitialize zeros out the entire ".screen" component of the
- * XtermWidget, so make sure to add an assignment statement in VTInitialize()
- * for each new ".screen" field added to this resource list.
- */
-
-/* Defaults */
-#if OPT_ISO_COLORS
-
-/*
- * If we default to colorMode enabled, compile-in defaults for the ANSI colors.
- */
-#if DFT_COLORMODE
-#define DFT_COLOR(name) name
-#else
-#define DFT_COLOR(name) XtDefaultForeground
-#endif
-#endif
-
-static char *_Font_Selected_ = "yes"; /* string is arbitrary */
-
-static char defaultTranslations[] =
-"\
- Shift <KeyPress> Prior:scroll-back(1,halfpage) \n\
- Shift <KeyPress> Next:scroll-forw(1,halfpage) \n\
- Shift <KeyPress> Select:select-cursor-start() select-cursor-end(PRIMARY, CUT_BUFFER0) \n\
- Shift <KeyPress> Insert:insert-selection(PRIMARY, CUT_BUFFER0) \n\
-"
-#if OPT_SHIFT_FONTS
-"\
- Shift~Ctrl <KeyPress> KP_Add:larger-vt-font() \n\
- Shift Ctrl <KeyPress> KP_Add:smaller-vt-font() \n\
- Shift <KeyPress> KP_Subtract:smaller-vt-font() \n\
-"
-#endif
-"\
- ~Meta <KeyPress>:insert-seven-bit() \n\
- Meta <KeyPress>:insert-eight-bit() \n\
- !Ctrl <Btn1Down>:popup-menu(mainMenu) \n\
- !Lock Ctrl <Btn1Down>:popup-menu(mainMenu) \n\
- !Lock Ctrl @Num_Lock <Btn1Down>:popup-menu(mainMenu) \n\
- ! @Num_Lock Ctrl <Btn1Down>:popup-menu(mainMenu) \n\
- ~Meta <Btn1Down>:select-start() \n\
- ~Meta <Btn1Motion>:select-extend() \n\
- !Ctrl <Btn2Down>:popup-menu(vtMenu) \n\
- !Lock Ctrl <Btn2Down>:popup-menu(vtMenu) \n\
- !Lock Ctrl @Num_Lock <Btn2Down>:popup-menu(vtMenu) \n\
- ! @Num_Lock Ctrl <Btn2Down>:popup-menu(vtMenu) \n\
- ~Ctrl ~Meta <Btn2Down>:ignore() \n\
- Meta <Btn2Down>:clear-saved-lines() \n\
- ~Ctrl ~Meta <Btn2Up>:insert-selection(PRIMARY, CUT_BUFFER0) \n\
- !Ctrl <Btn3Down>:popup-menu(fontMenu) \n\
- !Lock Ctrl <Btn3Down>:popup-menu(fontMenu) \n\
- !Lock Ctrl @Num_Lock <Btn3Down>:popup-menu(fontMenu) \n\
- ! @Num_Lock Ctrl <Btn3Down>:popup-menu(fontMenu) \n\
- ~Ctrl ~Meta <Btn3Down>:start-extend() \n\
- ~Meta <Btn3Motion>:select-extend() \n\
- Ctrl <Btn4Down>:scroll-back(1,halfpage,m) \n\
- Lock Ctrl <Btn4Down>:scroll-back(1,halfpage,m) \n\
- Lock @Num_Lock Ctrl <Btn4Down>:scroll-back(1,halfpage,m) \n\
- @Num_Lock Ctrl <Btn4Down>:scroll-back(1,halfpage,m) \n\
- <Btn4Down>:scroll-back(5,line,m) \n\
- Ctrl <Btn5Down>:scroll-forw(1,halfpage,m) \n\
- Lock Ctrl <Btn5Down>:scroll-forw(1,halfpage,m) \n\
- Lock @Num_Lock Ctrl <Btn5Down>:scroll-forw(1,halfpage,m) \n\
- @Num_Lock Ctrl <Btn5Down>:scroll-forw(1,halfpage,m) \n\
- <Btn5Down>:scroll-forw(5,line,m) \n\
- <BtnUp>:select-end(PRIMARY, CUT_BUFFER0) \n\
- <BtnDown>:ignore() \
-"; /* PROCURA added "Meta <Btn2Down>:clear-saved-lines()" */
-/* *INDENT-OFF* */
-static XtActionsRec actionsList[] = {
- { "allow-send-events", HandleAllowSends },
- { "bell", HandleBell },
- { "clear-saved-lines", HandleClearSavedLines },
- { "create-menu", HandleCreateMenu },
- { "dired-button", DiredButton },
- { "hard-reset", HandleHardReset },
- { "ignore", HandleIgnore },
- { "insert", HandleKeyPressed }, /* alias for insert-seven-bit */
- { "insert-eight-bit", HandleEightBitKeyPressed },
- { "insert-selection", HandleInsertSelection },
- { "insert-seven-bit", HandleKeyPressed },
- { "interpret", HandleInterpret },
- { "keymap", HandleKeymapChange },
- { "popup-menu", HandlePopupMenu },
- { "print", HandlePrintScreen },
- { "print-redir", HandlePrintControlMode },
- { "quit", HandleQuit },
- { "redraw", HandleRedraw },
- { "delete-is-del", HandleDeleteIsDEL },
- { "scroll-back", HandleScrollBack },
- { "scroll-forw", HandleScrollForward },
- { "secure", HandleSecure },
- { "select-cursor-end", HandleKeyboardSelectEnd },
- { "select-cursor-extend", HandleKeyboardSelectExtend },
- { "select-cursor-start", HandleKeyboardSelectStart },
- { "select-end", HandleSelectEnd },
- { "select-extend", HandleSelectExtend },
- { "select-set", HandleSelectSet },
- { "select-start", HandleSelectStart },
- { "send-signal", HandleSendSignal },
- { "set-8-bit-control", Handle8BitControl },
- { "set-allow132", HandleAllow132 },
- { "set-altscreen", HandleAltScreen },
- { "set-appcursor", HandleAppCursor },
- { "set-appkeypad", HandleAppKeypad },
- { "set-autolinefeed", HandleAutoLineFeed },
- { "set-autowrap", HandleAutoWrap },
- { "set-backarrow", HandleBackarrow },
- { "set-cursesemul", HandleCursesEmul },
- { "set-jumpscroll", HandleJumpscroll },
- { "set-old-function-keys", HandleOldFunctionKeys },
- { "set-marginbell", HandleMarginBell },
- { "set-reverse-video", HandleReverseVideo },
- { "set-reversewrap", HandleReverseWrap },
- { "set-scroll-on-key", HandleScrollKey },
- { "set-scroll-on-tty-output", HandleScrollTtyOutput },
- { "set-scrollbar", HandleScrollbar },
- { "set-sun-function-keys", HandleSunFunctionKeys },
- { "set-sun-keyboard", HandleSunKeyboard },
- { "set-titeInhibit", HandleTiteInhibit },
- { "set-visual-bell", HandleSetVisualBell },
- { "set-pop-on-bell", HandleSetPopOnBell },
- { "set-vt-font", HandleSetFont },
- { "soft-reset", HandleSoftReset },
- { "start-cursor-extend", HandleKeyboardStartExtend },
- { "start-extend", HandleStartExtend },
- { "string", HandleStringEvent },
- { "vi-button", ViButton },
- { "visual-bell", HandleVisualBell },
-#ifdef ALLOWLOGGING
- { "set-logging", HandleLogging },
-#endif
-#if OPT_BLINK_CURS
- { "set-cursorblink", HandleCursorBlink },
-#endif
-#if OPT_BOX_CHARS
- { "set-font-linedrawing", HandleFontBoxChars },
-#endif
-#if OPT_DABBREV
- { "dabbrev-expand", HandleDabbrevExpand },
-#endif
-#if OPT_DEC_CHRSET
- { "set-font-doublesize", HandleFontDoublesize },
-#endif
-#if OPT_DEC_SOFTFONT
- { "set-font-loading", HandleFontLoading },
-#endif
-#if OPT_HP_FUNC_KEYS
- { "set-hp-function-keys", HandleHpFunctionKeys },
-#endif
-#if OPT_LOAD_VTFONTS
- { "load-vt-fonts", HandleLoadVTFonts },
-#endif
-#if OPT_MAXIMIZE
- { "deiconify", HandleDeIconify },
- { "iconify", HandleIconify },
- { "maximize", HandleMaximize },
- { "restore", HandleRestoreSize },
-#endif
-#if OPT_NUM_LOCK
- { "alt-sends-escape", HandleAltEsc },
- { "meta-sends-escape", HandleMetaEsc },
- { "set-num-lock", HandleNumLock },
-#endif
-#if OPT_READLINE
- { "readline-button", ReadLineButton },
-#endif
-#if OPT_RENDERFONT
- { "set-render-font", HandleRenderFont },
-#endif
-#if OPT_SCO_FUNC_KEYS
- { "set-sco-function-keys", HandleScoFunctionKeys },
-#endif
-#if OPT_SHIFT_FONTS
- { "larger-vt-font", HandleLargerFont },
- { "smaller-vt-font", HandleSmallerFont },
-#endif
-#if OPT_TEK4014
- { "set-terminal-type", HandleSetTerminalType },
- { "set-visibility", HandleVisibility },
- { "set-tek-text", HandleSetTekText },
- { "tek-page", HandleTekPage },
- { "tek-reset", HandleTekReset },
- { "tek-copy", HandleTekCopy },
-#endif
-#if OPT_TOOLBAR
- { "set-toolbar", HandleToolbar },
-#endif
-#if OPT_WIDE_CHARS
- { "set-utf8-mode", HandleUTF8Mode },
-#endif
-};
-/* *INDENT-ON* */
-
-static XtResource resources[] =
-{
- Bres(XtNallowSendEvents, XtCAllowSendEvents, screen.allowSendEvent0, False),
- Bres(XtNallowWindowOps, XtCAllowWindowOps, screen.allowWindowOp0, True),
- Bres(XtNalwaysHighlight, XtCAlwaysHighlight, screen.always_highlight, False),
- Bres(XtNappcursorDefault, XtCAppcursorDefault, misc.appcursorDefault, False),
- Bres(XtNappkeypadDefault, XtCAppkeypadDefault, misc.appkeypadDefault, False),
- Bres(XtNautoWrap, XtCAutoWrap, misc.autoWrap, True),
- Bres(XtNawaitInput, XtCAwaitInput, screen.awaitInput, False),
- Bres(XtNfreeBoldBox, XtCFreeBoldBox, screen.free_bold_box, False),
- Bres(XtNbackarrowKey, XtCBackarrowKey, screen.backarrow_key, True),
- Bres(XtNbellOnReset, XtCBellOnReset, screen.bellOnReset, True),
- Bres(XtNboldMode, XtCBoldMode, screen.bold_mode, True),
- Bres(XtNbrokenSelections, XtCBrokenSelections, screen.brokenSelections, False),
- Bres(XtNc132, XtCC132, screen.c132, False),
- Bres(XtNcurses, XtCCurses, screen.curses, False),
- Bres(XtNcutNewline, XtCCutNewline, screen.cutNewline, True),
- Bres(XtNcutToBeginningOfLine, XtCCutToBeginningOfLine,
- screen.cutToBeginningOfLine, True),
- Bres(XtNdeleteIsDEL, XtCDeleteIsDEL, screen.delete_is_del, DEFDELETE_DEL),
- Bres(XtNdynamicColors, XtCDynamicColors, misc.dynamicColors, True),
- Bres(XtNeightBitControl, XtCEightBitControl, screen.control_eight_bits, False),
- Bres(XtNeightBitInput, XtCEightBitInput, screen.input_eight_bits, True),
- Bres(XtNeightBitOutput, XtCEightBitOutput, screen.output_eight_bits, True),
- Bres(XtNhighlightSelection, XtCHighlightSelection,
- screen.highlight_selection, False),
- Bres(XtNhpLowerleftBugCompat, XtCHpLowerleftBugCompat, screen.hp_ll_bc, False),
- Bres(XtNi18nSelections, XtCI18nSelections, screen.i18nSelections, True),
- Bres(XtNjumpScroll, XtCJumpScroll, screen.jumpscroll, True),
- Bres(XtNloginShell, XtCLoginShell, misc.login_shell, False),
- Bres(XtNmarginBell, XtCMarginBell, screen.marginbell, False),
- Bres(XtNmetaSendsEscape, XtCMetaSendsEscape, screen.meta_sends_esc, False),
- Bres(XtNmultiScroll, XtCMultiScroll, screen.multiscroll, False),
- Bres(XtNoldXtermFKeys, XtCOldXtermFKeys, screen.old_fkeys, False),
- Bres(XtNpopOnBell, XtCPopOnBell, screen.poponbell, False),
- Bres(XtNprinterAutoClose, XtCPrinterAutoClose, screen.printer_autoclose, False),
- Bres(XtNprinterExtent, XtCPrinterExtent, screen.printer_extent, False),
- Bres(XtNprinterFormFeed, XtCPrinterFormFeed, screen.printer_formfeed, False),
- Bres(XtNreverseVideo, XtCReverseVideo, misc.re_verse, False),
- Bres(XtNreverseWrap, XtCReverseWrap, misc.reverseWrap, False),
- Bres(XtNscrollBar, XtCScrollBar, misc.scrollbar, False),
- Bres(XtNscrollKey, XtCScrollCond, screen.scrollkey, False),
- Bres(XtNscrollTtyOutput, XtCScrollCond, screen.scrollttyoutput, True),
- Bres(XtNsignalInhibit, XtCSignalInhibit, misc.signalInhibit, False),
- Bres(XtNtiteInhibit, XtCTiteInhibit, misc.titeInhibit, False),
- Bres(XtNtiXtraScroll, XtCTiXtraScroll, misc.tiXtraScroll, False),
- Bres(XtNtrimSelection, XtCTrimSelection, screen.trim_selection, False),
- Bres(XtNunderLine, XtCUnderLine, screen.underline, True),
- Bres(XtNvisualBell, XtCVisualBell, screen.visualbell, False),
-
- Ires(XtNbellSuppressTime, XtCBellSuppressTime, screen.bellSuppressTime, BELLSUPPRESSMSEC),
- Ires(XtNinternalBorder, XtCBorderWidth, screen.border, DEFBORDER),
- Ires(XtNlimitResize, XtCLimitResize, misc.limit_resize, 1),
- Ires(XtNmultiClickTime, XtCMultiClickTime, screen.multiClickTime, MULTICLICKTIME),
- Ires(XtNnMarginBell, XtCColumn, screen.nmarginbell, N_MARGINBELL),
- Ires(XtNprinterControlMode, XtCPrinterControlMode,
- screen.printer_controlmode, 0),
- Ires(XtNvisualBellDelay, XtCVisualBellDelay, screen.visualBellDelay, 100),
- Ires(XtNsaveLines, XtCSaveLines, screen.savelines, SAVELINES),
- Ires(XtNscrollBarBorder, XtCScrollBarBorder, screen.scrollBarBorder, 1),
- Ires(XtNscrollLines, XtCScrollLines, screen.scrolllines, SCROLLLINES),
-
- Sres(XtNfont1, XtCFont1, screen.MenuFontName(fontMenu_font1), NULL),
- Sres(XtNfont2, XtCFont2, screen.MenuFontName(fontMenu_font2), NULL),
- Sres(XtNfont3, XtCFont3, screen.MenuFontName(fontMenu_font3), NULL),
- Sres(XtNfont4, XtCFont4, screen.MenuFontName(fontMenu_font4), NULL),
- Sres(XtNfont5, XtCFont5, screen.MenuFontName(fontMenu_font5), NULL),
- Sres(XtNfont6, XtCFont6, screen.MenuFontName(fontMenu_font6), NULL),
- Sres(XtNanswerbackString, XtCAnswerbackString, screen.answer_back, ""),
- Sres(XtNboldFont, XtCBoldFont, misc.default_font.f_b, DEFBOLDFONT),
- Sres(XtNcharClass, XtCCharClass, screen.charClass, NULL),
- Sres(XtNdecTerminalID, XtCDecTerminalID, screen.term_id, DFT_DECID),
- Sres(XtNfont, XtCFont, misc.default_font.f_n, DEFFONT),
- Sres(XtNgeometry, XtCGeometry, misc.geo_metry, NULL),
- Sres(XtNkeyboardDialect, XtCKeyboardDialect, screen.keyboard_dialect, DFT_KBD_DIALECT),
- Sres(XtNprinterCommand, XtCPrinterCommand, screen.printer_command, ""),
- Sres(XtNtekGeometry, XtCGeometry, misc.T_geometry, NULL),
-
- Tres(XtNcursorColor, XtCCursorColor, TEXT_CURSOR, XtDefaultForeground),
- Tres(XtNforeground, XtCForeground, TEXT_FG, XtDefaultForeground),
- Tres(XtNpointerColor, XtCPointerColor, MOUSE_FG, XtDefaultForeground),
- Tres(XtNbackground, XtCBackground, TEXT_BG, XtDefaultBackground),
- Tres(XtNpointerColorBackground, XtCBackground, MOUSE_BG, XtDefaultBackground),
-
- {XtNresizeGravity, XtCResizeGravity, XtRGravity, sizeof(XtGravity),
- XtOffsetOf(XtermWidgetRec, misc.resizeGravity),
- XtRImmediate, (XtPointer) SouthWestGravity},
-
- {XtNpointerShape, XtCCursor, XtRCursor, sizeof(Cursor),
- XtOffsetOf(XtermWidgetRec, screen.pointer_cursor),
- XtRString, (XtPointer) "xterm"},
-
-#ifdef ALLOWLOGGING
- Bres(XtNlogInhibit, XtCLogInhibit, misc.logInhibit, False),
- Bres(XtNlogging, XtCLogging, misc.log_on, False),
- Sres(XtNlogFile, XtCLogfile, screen.logfile, NULL),
-#endif
-
-#ifndef NO_ACTIVE_ICON
- Bres("activeIcon", "ActiveIcon", misc.active_icon, False),
- Ires("iconBorderWidth", XtCBorderWidth, misc.icon_border_width, 2),
- Fres("iconFont", "IconFont", screen.fnt_icon, XtDefaultFont),
- Cres("iconBorderColor", XtCBorderColor, misc.icon_border_pixel, XtDefaultBackground),
-#endif /* NO_ACTIVE_ICON */
-
-#if OPT_BLINK_CURS
- Bres(XtNcursorBlink, XtCCursorBlink, screen.cursor_blink, False),
-#endif
-
-#if OPT_BLINK_TEXT
- Bres(XtNshowBlinkAsBold, XtCCursorBlink, screen.blink_as_bold, DEFBLINKASBOLD),
-#endif
-
-#if OPT_BLINK_CURS || OPT_BLINK_TEXT
- Ires(XtNcursorOnTime, XtCCursorOnTime, screen.blink_on, 600),
- Ires(XtNcursorOffTime, XtCCursorOffTime, screen.blink_off, 300),
-#endif
-
-#if OPT_BOX_CHARS
- Bres(XtNforceBoxChars, XtCForceBoxChars, screen.force_box_chars, False),
- Bres(XtNshowMissingGlyphs, XtCShowMissingGlyphs, screen.force_all_chars, False),
-#endif
-
-#if OPT_BROKEN_OSC
- Bres(XtNbrokenLinuxOSC, XtCBrokenLinuxOSC, screen.brokenLinuxOSC, True),
-#endif
-
-#if OPT_BROKEN_ST
- Bres(XtNbrokenStringTerm, XtCBrokenStringTerm, screen.brokenStringTerm, True),
-#endif
-
-#if OPT_C1_PRINT
- Bres(XtNallowC1Printable, XtCAllowC1Printable, screen.c1_printable, False),
-#endif
-
-#if OPT_DEC_CHRSET
- Bres(XtNfontDoublesize, XtCFontDoublesize, screen.font_doublesize, True),
- Ires(XtNcacheDoublesize, XtCCacheDoublesize, screen.cache_doublesize, NUM_CHRSET),
-#endif
-
-#if OPT_HIGHLIGHT_COLOR
- Tres(XtNhighlightColor, XtCHighlightColor, HIGHLIGHT_BG, XtDefaultForeground),
-#endif /* OPT_HIGHLIGHT_COLOR */
-
-#if OPT_INPUT_METHOD
- Bres(XtNopenIm, XtCOpenIm, misc.open_im, True),
- Sres(XtNinputMethod, XtCInputMethod, misc.input_method, NULL),
- Sres(XtNpreeditType, XtCPreeditType, misc.preedit_type,
- "OverTheSpot,Root"),
-#endif
-
-#if OPT_ISO_COLORS
- Bres(XtNboldColors, XtCColorMode, screen.boldColors, True),
- Ires(XtNveryBoldColors, XtCVeryBoldColors, screen.veryBoldColors, 0),
- Bres(XtNcolorMode, XtCColorMode, screen.colorMode, DFT_COLORMODE),
-
- Bres(XtNcolorAttrMode, XtCColorAttrMode, screen.colorAttrMode, False),
- Bres(XtNcolorBDMode, XtCColorAttrMode, screen.colorBDMode, False),
- Bres(XtNcolorBLMode, XtCColorAttrMode, screen.colorBLMode, False),
- Bres(XtNcolorRVMode, XtCColorAttrMode, screen.colorRVMode, False),
- Bres(XtNcolorULMode, XtCColorAttrMode, screen.colorULMode, False),
- Bres(XtNitalicULMode, XtCColorAttrMode, screen.italicULMode, False),
-
- COLOR_RES("0", screen.Acolors[COLOR_0], DFT_COLOR("black")),
- COLOR_RES("1", screen.Acolors[COLOR_1], DFT_COLOR("red3")),
- COLOR_RES("2", screen.Acolors[COLOR_2], DFT_COLOR("green3")),
- COLOR_RES("3", screen.Acolors[COLOR_3], DFT_COLOR("yellow3")),
- COLOR_RES("4", screen.Acolors[COLOR_4], DFT_COLOR(DEF_COLOR4)),
- COLOR_RES("5", screen.Acolors[COLOR_5], DFT_COLOR("magenta3")),
- COLOR_RES("6", screen.Acolors[COLOR_6], DFT_COLOR("cyan3")),
- COLOR_RES("7", screen.Acolors[COLOR_7], DFT_COLOR("gray90")),
- COLOR_RES("8", screen.Acolors[COLOR_8], DFT_COLOR("gray50")),
- COLOR_RES("9", screen.Acolors[COLOR_9], DFT_COLOR("red")),
- COLOR_RES("10", screen.Acolors[COLOR_10], DFT_COLOR("green")),
- COLOR_RES("11", screen.Acolors[COLOR_11], DFT_COLOR("yellow")),
- COLOR_RES("12", screen.Acolors[COLOR_12], DFT_COLOR(DEF_COLOR12)),
- COLOR_RES("13", screen.Acolors[COLOR_13], DFT_COLOR("magenta")),
- COLOR_RES("14", screen.Acolors[COLOR_14], DFT_COLOR("cyan")),
- COLOR_RES("15", screen.Acolors[COLOR_15], DFT_COLOR("white")),
- COLOR_RES("BD", screen.Acolors[COLOR_BD], DFT_COLOR(XtDefaultForeground)),
- COLOR_RES("BL", screen.Acolors[COLOR_BL], DFT_COLOR(XtDefaultForeground)),
- COLOR_RES("UL", screen.Acolors[COLOR_UL], DFT_COLOR(XtDefaultForeground)),
- COLOR_RES("RV", screen.Acolors[COLOR_RV], DFT_COLOR(XtDefaultForeground)),
-
-#if !OPT_COLOR_RES2
-#if OPT_256_COLORS
-# include <256colres.h>
-#elif OPT_88_COLORS
-# include <88colres.h>
-#endif
-#endif /* !OPT_COLOR_RES2 */
-
-#endif /* OPT_ISO_COLORS */
-
-#if OPT_MOD_FKEYS
- Ires(XtNmodifyCursorKeys, XtCModifyCursorKeys,
- keyboard.modify_cursor_keys, 2),
-#endif
-
-#if OPT_NUM_LOCK
- Bres(XtNalwaysUseMods, XtCAlwaysUseMods, misc.alwaysUseMods, False),
- Bres(XtNnumLock, XtCNumLock, misc.real_NumLock, True),
-#endif
-
-#if OPT_PRINT_COLORS
- Ires(XtNprintAttributes, XtCPrintAttributes, screen.print_attributes, 1),
-#endif
-
-#if OPT_SHIFT_FONTS
- Bres(XtNshiftFonts, XtCShiftFonts, misc.shift_fonts, True),
-#endif
-
-#if OPT_SUNPC_KBD
- Ires(XtNctrlFKeys, XtCCtrlFKeys, misc.ctrl_fkeys, 10),
-#endif
-
-#if OPT_TEK4014
- Bres(XtNtekInhibit, XtCTekInhibit, misc.tekInhibit, False),
- Bres(XtNtekSmall, XtCTekSmall, misc.tekSmall, False),
- Bres(XtNtekStartup, XtCTekStartup, screen.TekEmu, False),
-#endif
-
-#if OPT_TOOLBAR
- Wres(XtNmenuBar, XtCMenuBar, VT100_TB_INFO(menu_bar), 0),
- Ires(XtNmenuHeight, XtCMenuHeight, VT100_TB_INFO(menu_height), 25),
-#endif
-
-#if OPT_WIDE_CHARS
- Ires(XtNutf8, XtCUtf8, screen.utf8_mode, uDefault),
- Bres(XtNwideChars, XtCWideChars, screen.wide_chars, False),
- Bres(XtNmkWidth, XtCMkWidth, misc.mk_width, False),
- Bres(XtNcjkWidth, XtCCjkWidth, misc.cjk_width, False),
- Bres(XtNvt100Graphics, XtCVT100Graphics, screen.vt100_graphics, True),
- Sres(XtNwideBoldFont, XtCWideBoldFont, misc.default_font.f_wb, DEFWIDEBOLDFONT),
- Sres(XtNwideFont, XtCWideFont, misc.default_font.f_w, DEFWIDEFONT),
-#endif
-
-#if OPT_LUIT_PROG
- Sres(XtNlocale, XtCLocale, misc.locale_str, "medium"),
- Sres(XtNlocaleFilter, XtCLocaleFilter, misc.localefilter, DEFLOCALEFILTER),
-#endif
-
-#if OPT_INPUT_METHOD
- Sres(XtNximFont, XtCXimFont, misc.f_x, DEFXIMFONT),
-#endif
-
-#if OPT_XMC_GLITCH
- Bres(XtNxmcInline, XtCXmcInline, screen.xmc_inline, False),
- Bres(XtNxmcMoveSGR, XtCXmcMoveSGR, screen.move_sgr_ok, True),
- Ires(XtNxmcAttributes, XtCXmcAttributes, screen.xmc_attributes, 1),
- Ires(XtNxmcGlitch, XtCXmcGlitch, screen.xmc_glitch, 0),
-#endif
-
-#ifdef SCROLLBAR_RIGHT
- Bres(XtNrightScrollBar, XtCRightScrollBar, misc.useRight, False),
-#endif
-
-#if OPT_RENDERFONT
- Dres(XtNfaceSize, XtCFaceSize, misc.face_size, DEFFACESIZE),
- Sres(XtNfaceName, XtCFaceName, misc.face_name, DEFFACENAME),
- Sres(XtNfaceNameDoublesize, XtCFaceNameDoublesize, misc.face_wide_name, DEFFACENAME),
- Bres(XtNrenderFont, XtCRenderFont, misc.render_font, True),
-#endif
-};
-
-static Boolean VTSetValues(Widget cur, Widget request, Widget new_arg,
- ArgList args, Cardinal *num_args);
-static void VTClassInit(void);
-static void VTDestroy(Widget w);
-static void VTExpose(Widget w, XEvent * event, Region region);
-static void VTInitialize(Widget wrequest, Widget new_arg, ArgList args,
- Cardinal *num_args);
-static void VTRealize(Widget w, XtValueMask * valuemask,
- XSetWindowAttributes * values);
-static void VTResize(Widget w);
-
-#if OPT_I18N_SUPPORT && OPT_INPUT_METHOD
-static void VTInitI18N(void);
-#endif
-
-#ifdef VMS
-globaldef {
- "xtermclassrec"
-} noshare
-
-#else
-static
-#endif /* VMS */
-WidgetClassRec xtermClassRec =
-{
- {
-/* core_class fields */
- (WidgetClass) & widgetClassRec, /* superclass */
- "VT100", /* class_name */
- sizeof(XtermWidgetRec), /* widget_size */
- VTClassInit, /* class_initialize */
- NULL, /* class_part_initialize */
- False, /* class_inited */
- VTInitialize, /* initialize */
- NULL, /* initialize_hook */
- VTRealize, /* realize */
- actionsList, /* actions */
- XtNumber(actionsList), /* num_actions */
- resources, /* resources */
- XtNumber(resources), /* num_resources */
- NULLQUARK, /* xrm_class */
- True, /* compress_motion */
- False, /* compress_exposure */
- True, /* compress_enterleave */
- False, /* visible_interest */
- VTDestroy, /* destroy */
- VTResize, /* resize */
- VTExpose, /* expose */
- VTSetValues, /* set_values */
- NULL, /* set_values_hook */
- XtInheritSetValuesAlmost, /* set_values_almost */
- NULL, /* get_values_hook */
- NULL, /* accept_focus */
- XtVersion, /* version */
- NULL, /* callback_offsets */
- defaultTranslations, /* tm_table */
- XtInheritQueryGeometry, /* query_geometry */
- XtInheritDisplayAccelerator, /* display_accelerator */
- NULL /* extension */
- }
-};
-
-#ifdef VMS
-globaldef {
- "xtermwidgetclass"
-}
-noshare
-#endif /* VMS */
-WidgetClass xtermWidgetClass = (WidgetClass) & xtermClassRec;
-
-/*
- * Add input-actions for widgets that are overlooked (scrollbar and toolbar):
- *
- * a) Sometimes the scrollbar passes through translations, sometimes it
- * doesn't. We add the KeyPress translations here, just to be sure.
- * b) In the normal (non-toolbar) configuration, the xterm widget covers
- * almost all of the window. With a toolbar, there's a relatively
- * large area that the user would expect to enter keystrokes since the
- * program can get the focus.
- */
-void
-xtermAddInput(Widget w)
-{
-#if OPT_TOOLBAR
- /* *INDENT-OFF* */
- XtActionsRec input_actions[] = {
- { "insert", HandleKeyPressed }, /* alias */
- { "insert-eight-bit", HandleEightBitKeyPressed },
- { "insert-seven-bit", HandleKeyPressed },
- { "secure", HandleSecure },
- { "string", HandleStringEvent },
- { "scroll-back", HandleScrollBack },
- { "scroll-forw", HandleScrollForward },
- { "select-cursor-end", HandleKeyboardSelectEnd },
- { "select-cursor-extend", HandleKeyboardSelectExtend },
- { "select-cursor-start", HandleKeyboardSelectStart },
- { "insert-selection", HandleInsertSelection },
- { "select-start", HandleSelectStart },
- { "select-extend", HandleSelectExtend },
- { "start-extend", HandleStartExtend },
- { "select-end", HandleSelectEnd },
- { "clear-saved-lines", HandleClearSavedLines },
- { "popup-menu", HandlePopupMenu },
- { "bell", HandleBell },
- { "ignore", HandleIgnore },
-#if OPT_DABBREV
- { "dabbrev-expand", HandleDabbrevExpand },
-#endif
-#if OPT_SHIFT_FONTS
- { "larger-vt-font", HandleLargerFont },
- { "smaller-vt-font", HandleSmallerFont },
-#endif
- };
- /* *INDENT-ON* */
-
- XtAppAddActions(app_con, input_actions, XtNumber(input_actions));
-#endif
- XtAugmentTranslations(w, XtParseTranslationTable(defaultTranslations));
-}
-
-#if OPT_ISO_COLORS
-/*
- * The terminal's foreground and background colors are set via two mechanisms:
- * text (cur_foreground, cur_background values that are passed down to
- * XDrawImageString and XDrawString)
- * area (X11 graphics context used in XClearArea and XFillRectangle)
- */
-void
-SGR_Foreground(int color)
-{
- TScreen *screen = &term->screen;
- Pixel fg;
-
- if (color >= 0) {
- term->flags |= FG_COLOR;
- } else {
- term->flags &= ~FG_COLOR;
- }
- fg = getXtermForeground(term->flags, color);
- term->cur_foreground = color;
-
- XSetForeground(screen->display, NormalGC(screen), fg);
- XSetBackground(screen->display, ReverseGC(screen), fg);
-
- if (NormalGC(screen) != NormalBoldGC(screen)) {
- XSetForeground(screen->display, NormalBoldGC(screen), fg);
- XSetBackground(screen->display, ReverseBoldGC(screen), fg);
- }
-}
-
-void
-SGR_Background(int color)
-{
- TScreen *screen = &term->screen;
- Pixel bg;
-
- /*
- * An indexing operation may have set screen->scroll_amt, which would
- * normally result in calling FlushScroll() in WriteText(). However,
- * if we're changing the background color now, then the new value
- * should not apply to the pending blank lines.
- */
- if (screen->scroll_amt && (color != term->cur_background))
- FlushScroll(screen);
-
- if (color >= 0) {
- term->flags |= BG_COLOR;
- } else {
- term->flags &= ~BG_COLOR;
- }
- bg = getXtermBackground(term->flags, color);
- term->cur_background = color;
-
- XSetBackground(screen->display, NormalGC(screen), bg);
- XSetForeground(screen->display, ReverseGC(screen), bg);
-
- if (NormalGC(screen) != NormalBoldGC(screen)) {
- XSetBackground(screen->display, NormalBoldGC(screen), bg);
- XSetForeground(screen->display, ReverseBoldGC(screen), bg);
- }
-}
-
-/* Invoked after updating bold/underline flags, computes the extended color
- * index to use for foreground. (See also 'extract_fg()').
- */
-static void
-setExtendedFG(void)
-{
- int fg = term->sgr_foreground;
-
- if (term->screen.colorAttrMode
- || (fg < 0)) {
- if (term->screen.colorULMode && (term->flags & UNDERLINE))
- fg = COLOR_UL;
- if (term->screen.colorBDMode && (term->flags & BOLD))
- fg = COLOR_BD;
- if (term->screen.colorBLMode && (term->flags & BLINK))
- fg = COLOR_BL;
- }
-
- /* This implements the IBM PC-style convention of 8-colors, with one
- * bit for bold, thus mapping the 0-7 codes to 8-15. It won't make
- * much sense for 16-color applications, but we keep it to retain
- * compatiblity with ANSI-color applications.
- */
-#if OPT_PC_COLORS /* XXXJTL should be settable at runtime (resource or OSC?) */
- if (term->screen.boldColors
- && (!term->sgr_extended)
- && (fg >= 0)
- && (fg < 8)
- && (term->flags & BOLD))
- fg |= 8;
-#endif
-
- SGR_Foreground(fg);
-}
-
-/* Invoked after updating inverse flag, computes the extended color
- * index to use for background. (See also 'extract_bg()').
- */
-static void
-setExtendedBG(void)
-{
- int bg = term->sgr_background;
-
- if (term->screen.colorAttrMode
- || (bg < 0)) {
- if (term->screen.colorRVMode && (term->flags & INVERSE))
- bg = COLOR_RV;
- }
-
- SGR_Background(bg);
-}
-
-static void
-reset_SGR_Foreground(void)
-{
- term->sgr_foreground = -1;
- term->sgr_extended = 0;
- setExtendedFG();
-}
-
-static void
-reset_SGR_Background(void)
-{
- term->sgr_background = -1;
- setExtendedBG();
-}
-
-static void
-reset_SGR_Colors(void)
-{
- reset_SGR_Foreground();
- reset_SGR_Background();
-}
-#endif /* OPT_ISO_COLORS */
-
-void
-resetCharsets(TScreen * screen)
-{
- TRACE(("resetCharsets\n"));
-
- screen->gsets[0] = 'B'; /* ASCII_G */
- screen->gsets[1] = 'B'; /* ASCII_G */
- screen->gsets[2] = 'B'; /* ASCII_G */
- screen->gsets[3] = 'B'; /* ASCII_G */
-
- screen->curgl = 0; /* G0 => GL. */
- screen->curgr = 2; /* G2 => GR. */
- screen->curss = 0; /* No single shift. */
-
-#if OPT_VT52_MODE
- if (screen->vtXX_level == 0)
- screen->gsets[1] = '0'; /* Graphics */
-#endif
-}
-
-/*
- * VT300 and up support three ANSI conformance levels, defined according to
- * the dpANSI X3.134.1 standard. DEC's manuals equate levels 1 and 2, and
- * are unclear. This code is written based on the manuals.
- */
-static void
-set_ansi_conformance(TScreen * screen, int level)
-{
- TRACE(("set_ansi_conformance(%d) terminal_id %d, ansi_level %d\n",
- level,
- screen->terminal_id,
- screen->ansi_level));
- if (screen->vtXX_level >= 3) {
- switch (screen->ansi_level = level) {
- case 1:
- /* FALLTHRU */
- case 2:
- screen->gsets[0] = 'B'; /* G0 is ASCII */
- screen->gsets[1] = 'B'; /* G1 is ISO Latin-1 (FIXME) */
- screen->curgl = 0;
- screen->curgr = 1;
- break;
- case 3:
- screen->gsets[0] = 'B'; /* G0 is ASCII */
- screen->curgl = 0;
- break;
- }
- }
-}
-
-/*
- * Set scrolling margins. VTxxx terminals require that the top/bottom are
- * different, so we have at least two lines in the scrolling region.
- */
-void
-set_tb_margins(TScreen * screen, int top, int bottom)
-{
- TRACE(("set_tb_margins %d..%d, prior %d..%d\n",
- top, bottom,
- screen->top_marg,
- screen->bot_marg));
- if (bottom > top) {
- screen->top_marg = top;
- screen->bot_marg = bottom;
- }
- if (screen->top_marg > screen->max_row)
- screen->top_marg = screen->max_row;
- if (screen->bot_marg > screen->max_row)
- screen->bot_marg = screen->max_row;
-}
-
-void
-set_max_col(TScreen * screen, int cols)
-{
- TRACE(("set_max_col %d, prior %d\n", cols, screen->max_col));
- if (cols < 0)
- cols = 0;
- screen->max_col = cols;
-}
-
-void
-set_max_row(TScreen * screen, int rows)
-{
- TRACE(("set_max_row %d, prior %d\n", rows, screen->max_row));
- if (rows < 0)
- rows = 0;
- screen->max_row = rows;
-}
-
-#if OPT_TRACE
-#define WHICH_TABLE(name) if (table == name) result = #name
-static char *
-which_table(Const PARSE_T * table)
-{
- char *result = "?";
- /* *INDENT-OFF* */
- WHICH_TABLE (ansi_table);
- else WHICH_TABLE (csi_table);
- else WHICH_TABLE (csi2_table);
- else WHICH_TABLE (csi_ex_table);
- else WHICH_TABLE (csi_quo_table);
-#if OPT_DEC_LOCATOR
- else WHICH_TABLE (csi_tick_table);
-#endif
-#if OPT_DEC_RECTOPS
- else WHICH_TABLE (csi_dollar_table);
- else WHICH_TABLE (csi_star_table);
-#endif
- else WHICH_TABLE (dec_table);
- else WHICH_TABLE (dec2_table);
- else WHICH_TABLE (dec3_table);
- else WHICH_TABLE (cigtable);
- else WHICH_TABLE (eigtable);
- else WHICH_TABLE (esc_table);
- else WHICH_TABLE (esc_sp_table);
- else WHICH_TABLE (scrtable);
- else WHICH_TABLE (scstable);
- else WHICH_TABLE (sos_table);
-#if OPT_WIDE_CHARS
- else WHICH_TABLE (esc_pct_table);
-#endif
-#if OPT_VT52_MODE
- else WHICH_TABLE (vt52_table);
- else WHICH_TABLE (vt52_esc_table);
- else WHICH_TABLE (vt52_ignore_table);
-#endif
- /* *INDENT-ON* */
-
- return result;
-}
-#endif
-
- /* allocate larger buffer if needed/possible */
-#define SafeAlloc(type, area, used, size) \
- type *new_string = area; \
- unsigned new_length = size; \
- if (new_length == 0) { \
- new_length = 256; \
- new_string = TypeMallocN(type, new_length); \
- } else if (used+1 >= new_length) { \
- new_length = size * 2; \
- new_string = TypeMallocN(type, new_length); \
- if (new_string != 0 \
- && area != 0 \
- && used != 0) \
- memcpy(new_string, area, used * sizeof(type)); \
- }
-
-#define WriteNow() { \
- unsigned single = 0; \
- \
- if (screen->curss) { \
- dotext(screen, \
- screen->gsets[(int) (screen->curss)], \
- print_area, 1); \
- screen->curss = 0; \
- single++; \
- } \
- if (print_used > single) { \
- dotext(screen, \
- screen->gsets[(int) (screen->curgl)], \
- print_area + single, \
- print_used - single); \
- } \
- print_used = 0; \
- } \
-
-struct ParseState {
-#if OPT_VT52_MODE
- Bool vt52_cup;
-#endif
- Const PARSE_T *groundtable;
- Const PARSE_T *parsestate;
- int scstype;
- Bool private_function; /* distinguish private-mode from standard */
- int string_mode; /* nonzero iff we're processing a string */
- int lastchar; /* positive iff we had a graphic character */
- int nextstate;
-#if OPT_WIDE_CHARS
- int last_was_wide;
-#endif
-};
-
-static struct ParseState myState;
-
-static Boolean
-doparsing(unsigned c, struct ParseState *sp)
-{
- /* Buffer for processing printable text */
- static IChar *print_area;
- static size_t print_size, print_used;
-
- /* Buffer for processing strings (e.g., OSC ... ST) */
- static Char *string_area;
- static size_t string_size, string_used;
-
- TScreen *screen = &term->screen;
- int row;
- int col;
- int top;
- int bot;
- int count;
- int laststate;
- int thischar = -1;
- XTermRect myRect;
-
- do {
-#if OPT_WIDE_CHARS
-
- /*
- * Handle zero-width combining characters. Make it faster by noting
- * that according to the Unicode charts, the majority of Western
- * character sets do not use this feature. There are some unassigned
- * codes at 0x242, but no zero-width characters until past 0x300.
- */
- if (c >= 0x300 && screen->wide_chars
- && my_wcwidth((int) c) == 0) {
- int prev, precomposed;
-
- WriteNow();
-
- prev = getXtermCell(screen,
- screen->last_written_row,
- screen->last_written_col);
- precomposed = do_precomposition(prev, (int) c);
-
- if (precomposed != -1) {
- putXtermCell(screen,
- screen->last_written_row,
- screen->last_written_col, precomposed);
- } else {
- addXtermCombining(screen,
- screen->last_written_row,
- screen->last_written_col, c);
- }
- if (!screen->scroll_amt)
- ScrnUpdate(screen,
- screen->last_written_row,
- screen->last_written_col, 1, 1, 1);
- continue;
- }
-#endif
-
- /* Intercept characters for printer controller mode */
- if (screen->printer_controlmode == 2) {
- if ((c = xtermPrinterControl((int) c)) == 0)
- continue;
- }
-
- /*
- * VT52 is a little ugly in the one place it has a parameterized
- * control sequence, since the parameter falls after the character
- * that denotes the type of sequence.
- */
-#if OPT_VT52_MODE
- if (sp->vt52_cup) {
- if (nparam < NPARAM)
- param[nparam++] = (c & 0x7f) - 32;
- if (nparam < 2)
- continue;
- sp->vt52_cup = False;
- if ((row = param[0]) < 0)
- row = 0;
- if ((col = param[1]) < 0)
- col = 0;
- CursorSet(screen, row, col, term->flags);
- sp->parsestate = vt52_table;
- param[0] = 0;
- param[1] = 0;
- continue;
- }
-#endif
-
- /*
- * The parsing tables all have 256 entries. If we're supporting
- * wide characters, we handle them by treating them the same as
- * printing characters.
- */
- laststate = sp->nextstate;
-#if OPT_WIDE_CHARS
- if (c > 255) {
- if (sp->parsestate == sp->groundtable) {
- sp->nextstate = CASE_PRINT;
- } else if (sp->parsestate == sos_table) {
- c &= 0xffff;
- if (c > 255) {
- TRACE(("Found code > 255 while in SOS state: %04X\n", c));
- c = '?';
- }
- } else {
- sp->nextstate = CASE_GROUND_STATE;
- }
- } else
-#endif
- sp->nextstate = sp->parsestate[E2A(c)];
-
-#if OPT_BROKEN_OSC
- /*
- * Linux console palette escape sequences start with an OSC, but do
- * not terminate correctly. Some scripts do not check before writing
- * them, making xterm appear to hang (it's awaiting a valid string
- * terminator). Just ignore these if we see them - there's no point
- * in emulating bad code.
- */
- if (screen->brokenLinuxOSC
- && sp->parsestate == sos_table) {
- if (string_used) {
- switch (string_area[0]) {
- case 'P':
- if (string_used <= 7)
- break;
- /* FALLTHRU */
- case 'R':
- sp->parsestate = sp->groundtable;
- sp->nextstate = sp->parsestate[E2A(c)];
- TRACE(("Reset to ground state (brokenLinuxOSC)\n"));
- break;
- }
- }
- }
-#endif
-
-#if OPT_BROKEN_ST
- /*
- * Before patch #171, carriage control embedded within an OSC string
- * would terminate it. Some (buggy, of course) applications rely on
- * this behavior. Accommodate them by allowing one to compile xterm
- * and emulate the old behavior.
- */
- if (screen->brokenStringTerm
- && sp->parsestate == sos_table
- && c < 32) {
- switch (c) {
- case 5: /* FALLTHRU */
- case 8: /* FALLTHRU */
- case 9: /* FALLTHRU */
- case 10: /* FALLTHRU */
- case 11: /* FALLTHRU */
- case 12: /* FALLTHRU */
- case 13: /* FALLTHRU */
- case 14: /* FALLTHRU */
- case 15: /* FALLTHRU */
- case 24:
- sp->parsestate = sp->groundtable;
- sp->nextstate = sp->parsestate[E2A(c)];
- TRACE(("Reset to ground state (brokenStringTerm)\n"));
- break;
- }
- }
-#endif
-
-#if OPT_C1_PRINT
- /*
- * This is not completely foolproof, but will allow an application
- * with values in the C1 range to use them as printable characters,
- * provided that they are not intermixed with an escape sequence.
- */
- if (screen->c1_printable
- && (c >= 128 && c < 160)) {
- sp->nextstate = (sp->parsestate == esc_table
- ? CASE_ESC_IGNORE
- : sp->parsestate[E2A(160)]);
- }
-#endif
-
-#if OPT_WIDE_CHARS
- /*
- * If we have a C1 code and the c1_printable flag is not set, simply
- * ignore it when it was translated from UTF-8. That is because the
- * value could not have been present as-is in the UTF-8.
- *
- * To see that CASE_IGNORE is a consistent value, note that it is
- * always used for NUL and other uninteresting C0 controls.
- */
-#if OPT_C1_PRINT
- if (!screen->c1_printable)
-#endif
- if (screen->wide_chars
- && (c >= 128 && c < 160)) {
- sp->nextstate = CASE_IGNORE;
- }
-
- /*
- * If this character is a different width than the last one, put the
- * previous text into the buffer and draw it now.
- */
- if (iswide((int) c) != sp->last_was_wide) {
- WriteNow();
- }
-#endif
-
- /*
- * Accumulate string for printable text. This may be 8/16-bit
- * characters.
- */
- if (sp->nextstate == CASE_PRINT) {
- SafeAlloc(IChar, print_area, print_used, print_size);
- if (new_string == 0) {
- fprintf(stderr,
- "Cannot allocate %u bytes for printable text\n",
- new_length);
- continue;
- }
-#if OPT_VT52_MODE
- /*
- * Strip output text to 7-bits for VT52. We should do this for
- * VT100 also (which is a 7-bit device), but xterm has been
- * doing this for so long we shouldn't change this behavior.
- */
- if (screen->vtXX_level < 1)
- c &= 0x7f;
-#endif
- print_area = new_string;
- print_size = new_length;
- print_area[print_used++] = sp->lastchar = thischar = c;
-#if OPT_WIDE_CHARS
- sp->last_was_wide = iswide((int) c);
-#endif
- if (morePtyData(screen, VTbuffer)) {
- continue;
- }
- }
-
- if (sp->nextstate == CASE_PRINT
- || (laststate == CASE_PRINT && print_used)) {
- WriteNow();
- }
-
- /*
- * Accumulate string for APC, DCS, PM, OSC, SOS controls
- * This should always be 8-bit characters.
- */
- if (sp->parsestate == sos_table) {
- SafeAlloc(Char, string_area, string_used, string_size);
- if (new_string == 0) {
- fprintf(stderr,
- "Cannot allocate %u bytes for string mode %d\n",
- new_length, sp->string_mode);
- continue;
- }
-#if OPT_WIDE_CHARS
- /*
- * We cannot display codes above 255, but let's try to
- * accommodate the application a little by not aborting the
- * string.
- */
- if ((c & 0xffff) > 255) {
- sp->nextstate = CASE_PRINT;
- c = '?';
- }
-#endif
- string_area = new_string;
- string_size = new_length;
- string_area[string_used++] = c;
- } else if (sp->parsestate != esc_table) {
- /* if we were accumulating, we're not any more */
- sp->string_mode = 0;
- string_used = 0;
- }
-
- TRACE(("parse %04X -> %d %s\n", c, sp->nextstate, which_table(sp->parsestate)));
-
- switch (sp->nextstate) {
- case CASE_PRINT:
- TRACE(("CASE_PRINT - printable characters\n"));
- break;
-
- case CASE_GROUND_STATE:
- TRACE(("CASE_GROUND_STATE - exit ignore mode\n"));
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_IGNORE:
- TRACE(("CASE_IGNORE - Ignore character %02X\n", c));
- break;
-
- case CASE_ENQ:
- TRACE(("CASE_ENQ - answerback\n"));
- for (count = 0; screen->answer_back[count] != 0; count++)
- unparseputc(screen->answer_back[count], screen->respond);
- break;
-
- case CASE_BELL:
- TRACE(("CASE_BELL - bell\n"));
- if (sp->string_mode == OSC) {
- if (string_used)
- string_area[--string_used] = '\0';
- do_osc(string_area, string_used, (int) c);
- sp->parsestate = sp->groundtable;
- } else {
- /* bell */
- Bell(XkbBI_TerminalBell, 0);
- }
- break;
-
- case CASE_BS:
- TRACE(("CASE_BS - backspace\n"));
- CursorBack(screen, 1);
- break;
-
- case CASE_CR:
- /* CR */
- CarriageReturn(screen);
- break;
-
- case CASE_ESC:
- if_OPT_VT52_MODE(screen, {
- sp->parsestate = vt52_esc_table;
- break;
- });
- sp->parsestate = esc_table;
- break;
-
-#if OPT_VT52_MODE
- case CASE_VT52_CUP:
- TRACE(("CASE_VT52_CUP - VT52 cursor addressing\n"));
- sp->vt52_cup = True;
- nparam = 0;
- break;
-
- case CASE_VT52_IGNORE:
- TRACE(("CASE_VT52_IGNORE - VT52 ignore-character\n"));
- sp->parsestate = vt52_ignore_table;
- break;
-#endif
-
- case CASE_VMOT:
- /*
- * form feed, line feed, vertical tab
- */
- xtermAutoPrint((int) c);
- xtermIndex(screen, 1);
- if (term->flags & LINEFEED)
- CarriageReturn(screen);
- do_xevents();
- break;
-
- case CASE_CBT:
- /* cursor backward tabulation */
- if ((count = param[0]) == DEFAULT)
- count = 1;
- while ((count-- > 0)
- && (TabToPrevStop(screen))) ;
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_CHT:
- /* cursor forward tabulation */
- if ((count = param[0]) == DEFAULT)
- count = 1;
- while ((count-- > 0)
- && (TabToNextStop(screen))) ;
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_TAB:
- /* tab */
- TabToNextStop(screen);
- break;
-
- case CASE_SI:
- screen->curgl = 0;
- if_OPT_VT52_MODE(screen, {
- sp->parsestate = sp->groundtable;
- });
- break;
-
- case CASE_SO:
- screen->curgl = 1;
- if_OPT_VT52_MODE(screen, {
- sp->parsestate = sp->groundtable;
- });
- break;
-
- case CASE_DECDHL:
- xterm_DECDHL(c == '3');
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DECSWL:
- xterm_DECSWL();
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DECDWL:
- xterm_DECDWL();
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_SCR_STATE:
- /* enter scr state */
- sp->parsestate = scrtable;
- break;
-
- case CASE_SCS0_STATE:
- /* enter scs state 0 */
- sp->scstype = 0;
- sp->parsestate = scstable;
- break;
-
- case CASE_SCS1_STATE:
- /* enter scs state 1 */
- sp->scstype = 1;
- sp->parsestate = scstable;
- break;
-
- case CASE_SCS2_STATE:
- /* enter scs state 2 */
- sp->scstype = 2;
- sp->parsestate = scstable;
- break;
-
- case CASE_SCS3_STATE:
- /* enter scs state 3 */
- sp->scstype = 3;
- sp->parsestate = scstable;
- break;
-
- case CASE_ESC_IGNORE:
- /* unknown escape sequence */
- sp->parsestate = eigtable;
- break;
-
- case CASE_ESC_DIGIT:
- /* digit in csi or dec mode */
- if ((row = param[nparam - 1]) == DEFAULT)
- row = 0;
- param[nparam - 1] = 10 * row + (c - '0');
- if (param[nparam - 1] > 65535)
- param[nparam - 1] = 65535;
- if (sp->parsestate == csi_table)
- sp->parsestate = csi2_table;
- break;
-
- case CASE_ESC_SEMI:
- /* semicolon in csi or dec mode */
- if (nparam < NPARAM)
- param[nparam++] = DEFAULT;
- if (sp->parsestate == csi_table)
- sp->parsestate = csi2_table;
- break;
-
- case CASE_DEC_STATE:
- /* enter dec mode */
- sp->parsestate = dec_table;
- break;
-
- case CASE_DEC2_STATE:
- /* enter dec2 mode */
- sp->parsestate = dec2_table;
- break;
-
- case CASE_DEC3_STATE:
- /* enter dec3 mode */
- sp->parsestate = dec3_table;
- break;
-
- case CASE_ICH:
- TRACE(("CASE_ICH - insert char\n"));
- if ((row = param[0]) < 1)
- row = 1;
- InsertChar(screen, (unsigned) row);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_CUU:
- TRACE(("CASE_CUU - cursor up\n"));
- if ((row = param[0]) < 1)
- row = 1;
- CursorUp(screen, row);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_CUD:
- TRACE(("CASE_CUD - cursor down\n"));
- if ((row = param[0]) < 1)
- row = 1;
- CursorDown(screen, row);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_CUF:
- TRACE(("CASE_CUF - cursor forward\n"));
- if ((col = param[0]) < 1)
- col = 1;
- CursorForward(screen, col);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_CUB:
- TRACE(("CASE_CUB - cursor backward\n"));
- if ((col = param[0]) < 1)
- col = 1;
- CursorBack(screen, col);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_CUP:
- TRACE(("CASE_CUP - cursor position\n"));
- if_OPT_XMC_GLITCH(screen, {
- Jump_XMC(screen);
- });
- if ((row = param[0]) < 1)
- row = 1;
- if (nparam < 2 || (col = param[1]) < 1)
- col = 1;
- CursorSet(screen, row - 1, col - 1, term->flags);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_VPA:
- TRACE(("CASE_VPA - vertical position\n"));
- if ((row = param[0]) < 1)
- row = 1;
- CursorSet(screen, row - 1, screen->cur_col, term->flags);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_HPA:
- TRACE(("CASE_HPA - horizontal position\n"));
- if ((col = param[0]) < 1)
- col = 1;
- CursorSet(screen, screen->cur_row, col - 1, term->flags);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_HP_BUGGY_LL:
- TRACE(("CASE_HP_BUGGY_LL\n"));
- /* Some HP-UX applications have the bug that they
- assume ESC F goes to the lower left corner of
- the screen, regardless of what terminfo says. */
- if (screen->hp_ll_bc)
- CursorSet(screen, screen->max_row, 0, term->flags);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_ED:
- TRACE(("CASE_ED - erase display\n"));
- do_erase_display(screen, param[0], OFF_PROTECT);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_EL:
- TRACE(("CASE_EL - erase line\n"));
- do_erase_line(screen, param[0], OFF_PROTECT);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_ECH:
- TRACE(("CASE_ECH - erase char\n"));
- /* ECH */
- ClearRight(screen, param[0] < 1 ? 1 : param[0]);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_IL:
- TRACE(("CASE_IL - insert line\n"));
- if ((row = param[0]) < 1)
- row = 1;
- InsertLine(screen, row);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DL:
- TRACE(("CASE_DL - delete line\n"));
- if ((row = param[0]) < 1)
- row = 1;
- DeleteLine(screen, row);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DCH:
- TRACE(("CASE_DCH - delete char\n"));
- if ((row = param[0]) < 1)
- row = 1;
- DeleteChar(screen, (unsigned) row);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_TRACK_MOUSE:
- /*
- * A single parameter other than zero is always scroll-down.
- * A zero-parameter is used to reset the mouse mode, and is
- * not useful for scrolling anyway.
- */
- if (nparam > 1 || param[0] == 0) {
- TRACE(("CASE_TRACK_MOUSE\n"));
- /* Track mouse as long as in window and between
- * specified rows
- */
- TrackMouse(param[0],
- param[2] - 1, param[1] - 1,
- param[3] - 1, param[4] - 2);
- } else {
- TRACE(("CASE_SD - scroll down\n"));
- /* SD */
- if ((count = param[0]) < 1)
- count = 1;
- RevScroll(screen, count);
- do_xevents();
- }
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DECID:
- TRACE(("CASE_DECID\n"));
- if_OPT_VT52_MODE(screen, {
- unparseputc(ESC, screen->respond);
- unparseputc('/', screen->respond);
- unparseputc('Z', screen->respond);
- sp->parsestate = sp->groundtable;
- break;
- });
- param[0] = DEFAULT; /* Default ID parameter */
- /* FALLTHRU */
- case CASE_DA1:
- TRACE(("CASE_DA1\n"));
- if (param[0] <= 0) { /* less than means DEFAULT */
- count = 0;
- reply.a_type = CSI;
- reply.a_pintro = '?';
-
- /* The first param corresponds to the highest
- * operating level (i.e., service level) of the
- * emulation. A DEC terminal can be setup to
- * respond with a different DA response, but
- * there's no control sequence that modifies this.
- * We set it via a resource.
- */
- if (screen->terminal_id < 200) {
- switch (screen->terminal_id) {
- case 102:
- reply.a_param[count++] = 6; /* VT102 */
- break;
- case 101:
- reply.a_param[count++] = 1; /* VT101 */
- reply.a_param[count++] = 0; /* no options */
- break;
- default: /* VT100 */
- reply.a_param[count++] = 1; /* VT100 */
- reply.a_param[count++] = 2; /* AVO */
- break;
- }
- } else {
- reply.a_param[count++] = 60 + screen->terminal_id / 100;
- reply.a_param[count++] = 1; /* 132-columns */
- reply.a_param[count++] = 2; /* printer */
- reply.a_param[count++] = 6; /* selective-erase */
-#if OPT_SUNPC_KBD
- if (term->keyboard.type == keyboardIsVT220)
-#endif
- reply.a_param[count++] = 8; /* user-defined-keys */
- reply.a_param[count++] = 9; /* national replacement charsets */
- reply.a_param[count++] = 15; /* technical characters */
- if_OPT_ISO_COLORS(screen, {
- reply.a_param[count++] = 22; /* ANSI color, VT525 */
- });
-#if OPT_DEC_LOCATOR
- reply.a_param[count++] = 29; /* ANSI text locator */
-#endif
- }
- reply.a_nparam = count;
- reply.a_inters = 0;
- reply.a_final = 'c';
- unparseseq(&reply, screen->respond);
- }
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DA2:
- TRACE(("CASE_DA2\n"));
- if (param[0] <= 0) { /* less than means DEFAULT */
- count = 0;
- reply.a_type = CSI;
- reply.a_pintro = '>';
-
- if (screen->terminal_id >= 200)
- reply.a_param[count++] = 1; /* VT220 */
- else
- reply.a_param[count++] = 0; /* VT100 (nonstandard) */
- reply.a_param[count++] = XTERM_PATCH; /* Version */
- reply.a_param[count++] = 0; /* options (none) */
- reply.a_nparam = count;
- reply.a_inters = 0;
- reply.a_final = 'c';
- unparseseq(&reply, screen->respond);
- }
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DECRPTUI:
- TRACE(("CASE_DECRPTUI\n"));
- if ((screen->terminal_id >= 400)
- && (param[0] <= 0)) { /* less than means DEFAULT */
- unparseputc1(DCS, screen->respond);
- unparseputc('!', screen->respond);
- unparseputc('|', screen->respond);
- unparseputc('0', screen->respond);
- unparseputc1(ST, screen->respond);
- }
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_TBC:
- TRACE(("CASE_TBC - tab clear\n"));
- if ((row = param[0]) <= 0) /* less than means default */
- TabClear(term->tabs, screen->cur_col);
- else if (row == 3)
- TabZonk(term->tabs);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_SET:
- TRACE(("CASE_SET - set mode\n"));
- ansi_modes(term, bitset);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_RST:
- TRACE(("CASE_RST - reset mode\n"));
- ansi_modes(term, bitclr);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_SGR:
- for (row = 0; row < nparam; ++row) {
- if_OPT_XMC_GLITCH(screen, {
- Mark_XMC(screen, param[row]);
- });
- TRACE(("CASE_SGR %d\n", param[row]));
- switch (param[row]) {
- case DEFAULT:
- case 0:
- term->flags &=
- ~(INVERSE | BOLD | BLINK | UNDERLINE | INVISIBLE);
- if_OPT_ISO_COLORS(screen, {
- reset_SGR_Colors();
- });
- break;
- case 1: /* Bold */
- term->flags |= BOLD;
- if_OPT_ISO_COLORS(screen, {
- setExtendedFG();
- });
- break;
- case 5: /* Blink */
- term->flags |= BLINK;
- StartBlinking(screen);
- if_OPT_ISO_COLORS(screen, {
- setExtendedFG();
- });
- break;
- case 4: /* Underscore */
- term->flags |= UNDERLINE;
- if_OPT_ISO_COLORS(screen, {
- setExtendedFG();
- });
- break;
- case 7:
- term->flags |= INVERSE;
- if_OPT_ISO_COLORS(screen, {
- setExtendedBG();
- });
- break;
- case 8:
- term->flags |= INVISIBLE;
- break;
- case 22: /* reset 'bold' */
- term->flags &= ~BOLD;
- if_OPT_ISO_COLORS(screen, {
- setExtendedFG();
- });
- break;
- case 24:
- term->flags &= ~UNDERLINE;
- if_OPT_ISO_COLORS(screen, {
- setExtendedFG();
- });
- break;
- case 25: /* reset 'blink' */
- term->flags &= ~BLINK;
- if_OPT_ISO_COLORS(screen, {
- setExtendedFG();
- });
- break;
- case 27:
- term->flags &= ~INVERSE;
- if_OPT_ISO_COLORS(screen, {
- setExtendedBG();
- });
- break;
- case 28:
- term->flags &= ~INVISIBLE;
- break;
- case 30:
- case 31:
- case 32:
- case 33:
- case 34:
- case 35:
- case 36:
- case 37:
- if_OPT_ISO_COLORS(screen, {
- term->sgr_foreground = (param[row] - 30);
- term->sgr_extended = 0;
- setExtendedFG();
- });
- break;
- case 38:
- /* This is more complicated than I'd
- like, but it should properly eat all
- the parameters for unsupported modes
- */
- if_OPT_ISO_COLORS(screen, {
- row++;
- if (row < nparam) {
- switch (param[row]) {
- case 5:
- row++;
- if (row < nparam &&
- param[row] < NUM_ANSI_COLORS) {
- term->sgr_foreground = param[row];
- term->sgr_extended = 1;
- setExtendedFG();
- }
- break;
- default:
- row += 7;
- break;
- }
- }
- });
- break;
- case 39:
- if_OPT_ISO_COLORS(screen, {
- reset_SGR_Foreground();
- });
- break;
- case 40:
- case 41:
- case 42:
- case 43:
- case 44:
- case 45:
- case 46:
- case 47:
- if_OPT_ISO_COLORS(screen, {
- term->sgr_background = (param[row] - 40);
- setExtendedBG();
- });
- break;
- case 48:
- if_OPT_ISO_COLORS(screen, {
- row++;
- if (row < nparam) {
- switch (param[row]) {
- case 5:
- row++;
- if (row < nparam &&
- param[row] < NUM_ANSI_COLORS) {
- term->sgr_background = param[row];
- setExtendedBG();
- }
- break;
- default:
- row += 7;
- break;
- }
- }
- });
- break;
- case 49:
- if_OPT_ISO_COLORS(screen, {
- reset_SGR_Background();
- });
- break;
- case 90:
- case 91:
- case 92:
- case 93:
- case 94:
- case 95:
- case 96:
- case 97:
- if_OPT_AIX_COLORS(screen, {
- term->sgr_foreground = (param[row] - 90 + 8);
- term->sgr_extended = 0;
- setExtendedFG();
- });
- break;
- case 100:
-#if !OPT_AIX_COLORS
- if_OPT_ISO_COLORS(screen, {
- reset_SGR_Foreground();
- reset_SGR_Background();
- });
- break;
-#endif
- case 101:
- case 102:
- case 103:
- case 104:
- case 105:
- case 106:
- case 107:
- if_OPT_AIX_COLORS(screen, {
- term->sgr_background = (param[row] - 100 + 8);
- setExtendedBG();
- });
- break;
- }
- }
- sp->parsestate = sp->groundtable;
- break;
-
- /* DSR (except for the '?') is a superset of CPR */
- case CASE_DSR:
- sp->private_function = True;
-
- /* FALLTHRU */
- case CASE_CPR:
- TRACE(("CASE_CPR - cursor position\n"));
- count = 0;
- reply.a_type = CSI;
- reply.a_pintro = sp->private_function ? '?' : 0;
- reply.a_inters = 0;
- reply.a_final = 'n';
-
- switch (param[0]) {
- case 5:
- /* operating status */
- reply.a_param[count++] = 0; /* (no malfunction ;-) */
- break;
- case 6:
- /* CPR */
- /* DECXCPR (with page=0) */
- reply.a_param[count++] = screen->cur_row + 1;
- reply.a_param[count++] = screen->cur_col + 1;
- reply.a_final = 'R';
- break;
- case 15:
- /* printer status */
- reply.a_param[count++] = 13; /* implement printer */
- break;
- case 25:
- /* UDK status */
- reply.a_param[count++] = 20; /* UDK always unlocked */
- break;
- case 26:
- /* keyboard status */
- reply.a_param[count++] = 27;
- reply.a_param[count++] = 1; /* North American */
- if (screen->terminal_id >= 400) {
- reply.a_param[count++] = 0; /* ready */
- reply.a_param[count++] = 0; /* LK201 */
- }
- break;
- case 53:
- /* Locator status */
-#if OPT_DEC_LOCATOR
- reply.a_param[count++] = 50; /* locator ready */
-#else
- reply.a_param[count++] = 53; /* no locator */
-#endif
- break;
- }
-
- if ((reply.a_nparam = count) != 0)
- unparseseq(&reply, screen->respond);
-
- sp->parsestate = sp->groundtable;
- sp->private_function = False;
- break;
-
- case CASE_MC:
- TRACE(("CASE_MC - media control\n"));
- xtermMediaControl(param[0], False);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DEC_MC:
- TRACE(("CASE_DEC_MC - DEC media control\n"));
- xtermMediaControl(param[0], True);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_HP_MEM_LOCK:
- case CASE_HP_MEM_UNLOCK:
- TRACE(("%s\n", ((sp->parsestate[c] == CASE_HP_MEM_LOCK)
- ? "CASE_HP_MEM_LOCK"
- : "CASE_HP_MEM_UNLOCK")));
- if (screen->scroll_amt)
- FlushScroll(screen);
- if (sp->parsestate[c] == CASE_HP_MEM_LOCK)
- set_tb_margins(screen, screen->cur_row, screen->bot_marg);
- else
- set_tb_margins(screen, 0, screen->bot_marg);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DECSTBM:
- TRACE(("CASE_DECSTBM - set scrolling region\n"));
- if ((top = param[0]) < 1)
- top = 1;
- if (nparam < 2 || (bot = param[1]) == DEFAULT
- || bot > MaxRows(screen)
- || bot == 0)
- bot = MaxRows(screen);
- if (bot > top) {
- if (screen->scroll_amt)
- FlushScroll(screen);
- set_tb_margins(screen, top - 1, bot - 1);
- CursorSet(screen, 0, 0, term->flags);
- }
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DECREQTPARM:
- TRACE(("CASE_DECREQTPARM\n"));
- if (screen->terminal_id < 200) { /* VT102 */
- if ((row = param[0]) == DEFAULT)
- row = 0;
- if (row == 0 || row == 1) {
- reply.a_type = CSI;
- reply.a_pintro = 0;
- reply.a_nparam = 7;
- reply.a_param[0] = row + 2;
- reply.a_param[1] = 1; /* no parity */
- reply.a_param[2] = 1; /* eight bits */
- reply.a_param[3] = 128; /* transmit 38.4k baud */
- reply.a_param[4] = 128; /* receive 38.4k baud */
- reply.a_param[5] = 1; /* clock multiplier ? */
- reply.a_param[6] = 0; /* STP flags ? */
- reply.a_inters = 0;
- reply.a_final = 'x';
- unparseseq(&reply, screen->respond);
- }
- }
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DECSET:
- /* DECSET */
-#if OPT_VT52_MODE
- if (screen->vtXX_level != 0)
-#endif
- dpmodes(term, bitset);
- sp->parsestate = sp->groundtable;
-#if OPT_TEK4014
- if (screen->TekEmu)
- return False;
-#endif
- break;
-
- case CASE_DECRST:
- /* DECRST */
- dpmodes(term, bitclr);
-#if OPT_VT52_MODE
- if (screen->vtXX_level == 0)
- sp->groundtable = vt52_table;
- else if (screen->terminal_id >= 100)
- sp->groundtable = ansi_table;
-#endif
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DECALN:
- TRACE(("CASE_DECALN - alignment test\n"));
- if (screen->cursor_state)
- HideCursor();
- set_tb_margins(screen, 0, screen->max_row);
- CursorSet(screen, 0, 0, term->flags);
- xtermParseRect(screen, 0, 0, &myRect);
- ScrnFillRectangle(screen, &myRect, 'E', 0);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_GSETS:
- TRACE(("CASE_GSETS(%d) = '%c'\n", sp->scstype, c));
- if (screen->vtXX_level != 0)
- screen->gsets[sp->scstype] = c;
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DECSC:
- TRACE(("CASE_DECSC - save cursor\n"));
- CursorSave(term);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DECRC:
- TRACE(("CASE_DECRC - restore cursor\n"));
- CursorRestore(term);
- if_OPT_ISO_COLORS(screen, {
- setExtendedFG();
- });
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DECKPAM:
- TRACE(("CASE_DECKPAM\n"));
- term->keyboard.flags |= MODE_DECKPAM;
- update_appkeypad();
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DECKPNM:
- TRACE(("CASE_DECKPNM\n"));
- term->keyboard.flags &= ~MODE_DECKPAM;
- update_appkeypad();
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_CSI_QUOTE_STATE:
- sp->parsestate = csi_quo_table;
- break;
-
-#if OPT_VT52_MODE
- case CASE_VT52_FINISH:
- TRACE(("CASE_VT52_FINISH terminal_id %d, vtXX_level %d\n",
- screen->terminal_id,
- screen->vtXX_level));
- if (screen->terminal_id >= 100
- && screen->vtXX_level == 0) {
- sp->groundtable =
- sp->parsestate = ansi_table;
- screen->vtXX_level = screen->vt52_save_level;
- screen->curgl = screen->vt52_save_curgl;
- screen->curgr = screen->vt52_save_curgr;
- screen->curss = screen->vt52_save_curss;
- memmove(screen->gsets, screen->vt52_save_gsets, sizeof(screen->gsets));
- }
- break;
-#endif
-
- case CASE_ANSI_LEVEL_1:
- TRACE(("CASE_ANSI_LEVEL_1\n"));
- set_ansi_conformance(screen, 1);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_ANSI_LEVEL_2:
- TRACE(("CASE_ANSI_LEVEL_2\n"));
- set_ansi_conformance(screen, 2);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_ANSI_LEVEL_3:
- TRACE(("CASE_ANSI_LEVEL_3\n"));
- set_ansi_conformance(screen, 3);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DECSCL:
- TRACE(("CASE_DECSCL(%d,%d)\n", param[0], param[1]));
- if (param[0] >= 61 && param[0] <= 65) {
- /*
- * VT300, VT420, VT520 manuals claim that DECSCL does a hard
- * reset (RIS). VT220 manual states that it is a soft reset.
- * Perhaps both are right (unlikely). Kermit says it's soft.
- */
- VTReset(False, False);
- screen->vtXX_level = param[0] - 60;
- if (param[0] > 61) {
- if (param[1] == 1)
- show_8bit_control(False);
- else if (param[1] == 0 || param[1] == 2)
- show_8bit_control(True);
- }
- }
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DECSCA:
- TRACE(("CASE_DECSCA\n"));
- screen->protected_mode = DEC_PROTECT;
- if (param[0] <= 0 || param[0] == 2)
- term->flags &= ~PROTECTED;
- else if (param[0] == 1)
- term->flags |= PROTECTED;
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DECSED:
- TRACE(("CASE_DECSED\n"));
- do_erase_display(screen, param[0], DEC_PROTECT);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DECSEL:
- TRACE(("CASE_DECSEL\n"));
- do_erase_line(screen, param[0], DEC_PROTECT);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_ST:
- TRACE(("CASE_ST: End of String (%d bytes)\n", string_used));
- sp->parsestate = sp->groundtable;
- if (!string_used)
- break;
- string_area[--string_used] = '\0';
- switch (sp->string_mode) {
- case APC:
- /* ignored */
- break;
- case DCS:
- do_dcs(string_area, string_used);
- break;
- case OSC:
- do_osc(string_area, string_used, ST);
- break;
- case PM:
- /* ignored */
- break;
- case SOS:
- /* ignored */
- break;
- }
- break;
-
- case CASE_SOS:
- TRACE(("CASE_SOS: Start of String\n"));
- sp->string_mode = SOS;
- sp->parsestate = sos_table;
- break;
-
- case CASE_PM:
- TRACE(("CASE_PM: Privacy Message\n"));
- sp->string_mode = PM;
- sp->parsestate = sos_table;
- break;
-
- case CASE_DCS:
- TRACE(("CASE_DCS: Device Control String\n"));
- sp->string_mode = DCS;
- sp->parsestate = sos_table;
- break;
-
- case CASE_APC:
- TRACE(("CASE_APC: Application Program Command\n"));
- sp->string_mode = APC;
- sp->parsestate = sos_table;
- break;
-
- case CASE_SPA:
- TRACE(("CASE_SPA - start protected area\n"));
- screen->protected_mode = ISO_PROTECT;
- term->flags |= PROTECTED;
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_EPA:
- TRACE(("CASE_EPA - end protected area\n"));
- term->flags &= ~PROTECTED;
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_SU:
- TRACE(("CASE_SU - scroll up\n"));
- if ((count = param[0]) < 1)
- count = 1;
- xtermScroll(screen, count);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_IND:
- TRACE(("CASE_IND - index\n"));
- xtermIndex(screen, 1);
- do_xevents();
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_CPL:
- TRACE(("CASE_CPL - cursor prev line\n"));
- CursorPrevLine(screen, param[0]);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_CNL:
- TRACE(("CASE_NPL - cursor next line\n"));
- CursorNextLine(screen, param[0]);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_NEL:
- TRACE(("CASE_NEL\n"));
- xtermIndex(screen, 1);
- CarriageReturn(screen);
- do_xevents();
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_HTS:
- TRACE(("CASE_HTS - horizontal tab set\n"));
- TabSet(term->tabs, screen->cur_col);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_RI:
- TRACE(("CASE_RI - reverse index\n"));
- RevIndex(screen, 1);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_SS2:
- TRACE(("CASE_SS2\n"));
- screen->curss = 2;
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_SS3:
- TRACE(("CASE_SS3\n"));
- screen->curss = 3;
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_CSI_STATE:
- /* enter csi state */
- nparam = 1;
- param[0] = DEFAULT;
- sp->parsestate = csi_table;
- break;
-
- case CASE_ESC_SP_STATE:
- /* esc space */
- sp->parsestate = esc_sp_table;
- break;
-
- case CASE_CSI_EX_STATE:
- /* csi exclamation */
- sp->parsestate = csi_ex_table;
- break;
-
-#if OPT_DEC_LOCATOR
- case CASE_CSI_TICK_STATE:
- /* csi tick (') */
- sp->parsestate = csi_tick_table;
- break;
-
- case CASE_DECEFR:
- TRACE(("CASE_DECEFR - Enable Filter Rectangle\n"));
- if (screen->send_mouse_pos == DEC_LOCATOR) {
- MotionOff(screen, term);
- if ((screen->loc_filter_top = param[0]) < 1)
- screen->loc_filter_top = LOC_FILTER_POS;
- if (nparam < 2 || (screen->loc_filter_left = param[1]) < 1)
- screen->loc_filter_left = LOC_FILTER_POS;
- if (nparam < 3 || (screen->loc_filter_bottom = param[2]) < 1)
- screen->loc_filter_bottom = LOC_FILTER_POS;
- if (nparam < 4 || (screen->loc_filter_right = param[3]) < 1)
- screen->loc_filter_right = LOC_FILTER_POS;
- InitLocatorFilter(term);
- }
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DECELR:
- MotionOff(screen, term);
- if (param[0] <= 0 || param[0] > 2) {
- screen->send_mouse_pos = MOUSE_OFF;
- TRACE(("DECELR - Disable Locator Reports\n"));
- } else {
- TRACE(("DECELR - Enable Locator Reports\n"));
- screen->send_mouse_pos = DEC_LOCATOR;
- if (param[0] == 2) {
- screen->locator_reset = True;
- } else {
- screen->locator_reset = False;
- }
- if (nparam < 2 || param[1] != 1) {
- screen->locator_pixels = False;
- } else {
- screen->locator_pixels = True;
- }
- screen->loc_filter = False;
- }
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DECSLE:
- TRACE(("DECSLE - Select Locator Events\n"));
- for (count = 0; count < nparam; ++count) {
- switch (param[count]) {
- case DEFAULT:
- case 0:
- MotionOff(screen, term);
- screen->loc_filter = False;
- screen->locator_events = 0;
- break;
- case 1:
- screen->locator_events |= LOC_BTNS_DN;
- break;
- case 2:
- screen->locator_events &= ~LOC_BTNS_DN;
- break;
- case 3:
- screen->locator_events |= LOC_BTNS_UP;
- break;
- case 4:
- screen->locator_events &= ~LOC_BTNS_UP;
- break;
- }
- }
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DECRQLP:
- TRACE(("DECRQLP - Request Locator Position\n"));
- if (param[0] < 2) {
- /* Issue DECLRP Locator Position Report */
- GetLocatorPosition(term);
- }
- sp->parsestate = sp->groundtable;
- break;
-#endif /* OPT_DEC_LOCATOR */
-
-#if OPT_DEC_RECTOPS
- case CASE_CSI_DOLLAR_STATE:
- /* csi dollar ($) */
- if (screen->vtXX_level >= 4)
- sp->parsestate = csi_dollar_table;
- else
- sp->parsestate = eigtable;
- break;
-
- case CASE_CSI_STAR_STATE:
- /* csi dollar (*) */
- if (screen->vtXX_level >= 4)
- sp->parsestate = csi_star_table;
- else
- sp->parsestate = eigtable;
- break;
-
- case CASE_DECCRA:
- TRACE(("CASE_DECCRA - Copy rectangular area\n"));
- xtermParseRect(screen, nparam, param, &myRect);
- ScrnCopyRectangle(screen, &myRect, nparam - 5, param + 5);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DECERA:
- TRACE(("CASE_DECERA - Erase rectangular area\n"));
- xtermParseRect(screen, nparam, param, &myRect);
- ScrnFillRectangle(screen, &myRect, ' ', 0);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DECFRA:
- TRACE(("CASE_DECFRA - Fill rectangular area\n"));
- if (nparam > 0
- && ((param[0] >= 32 && param[0] <= 126)
- || (param[0] >= 160 && param[0] <= 255))) {
- xtermParseRect(screen, nparam - 1, param + 1, &myRect);
- ScrnFillRectangle(screen, &myRect, param[0], term->flags);
- }
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DECSERA:
- TRACE(("CASE_DECSERA - Selective erase rectangular area\n"));
- xtermParseRect(screen, nparam > 4 ? 4 : nparam, param, &myRect);
- ScrnWipeRectangle(screen, &myRect);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DECSACE:
- TRACE(("CASE_DECSACE - Select attribute change extent\n"));
- screen->cur_decsace = param[0];
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DECCARA:
- TRACE(("CASE_DECCARA - Change attributes in rectangular area\n"));
- xtermParseRect(screen, nparam > 4 ? 4 : nparam, param, &myRect);
- ScrnMarkRectangle(screen, &myRect, False, nparam - 4, param + 4);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DECRARA:
- TRACE(("CASE_DECRARA - Reverse attributes in rectangular area\n"));
- xtermParseRect(screen, nparam > 4 ? 4 : nparam, param, &myRect);
- ScrnMarkRectangle(screen, &myRect, True, nparam - 4, param + 4);
- sp->parsestate = sp->groundtable;
- break;
-#else
- case CASE_CSI_DOLLAR_STATE:
- /* csi dollar ($) */
- sp->parsestate = eigtable;
- break;
-
- case CASE_CSI_STAR_STATE:
- /* csi dollar (*) */
- sp->parsestate = eigtable;
- break;
-#endif /* OPT_DEC_RECTOPS */
-
- case CASE_S7C1T:
- TRACE(("CASE_S7C1T\n"));
- show_8bit_control(False);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_S8C1T:
- TRACE(("CASE_S8C1T\n"));
-#if OPT_VT52_MODE
- if (screen->vtXX_level <= 1)
- break;
-#endif
- show_8bit_control(True);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_OSC:
- TRACE(("CASE_OSC: Operating System Command\n"));
- sp->parsestate = sos_table;
- sp->string_mode = OSC;
- break;
-
- case CASE_RIS:
- TRACE(("CASE_RIS\n"));
- VTReset(True, True);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DECSTR:
- TRACE(("CASE_DECSTR\n"));
- VTReset(False, False);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_REP:
- TRACE(("CASE_REP\n"));
- if (sp->lastchar >= 0 &&
- sp->groundtable[E2A(sp->lastchar)] == CASE_PRINT) {
- IChar repeated[2];
- count = (param[0] < 1) ? 1 : param[0];
- repeated[0] = sp->lastchar;
- while (count-- > 0) {
- dotext(screen,
- screen->gsets[(int) (screen->curgl)],
- repeated, 1);
- }
- }
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_LS2:
- TRACE(("CASE_LS2\n"));
- screen->curgl = 2;
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_LS3:
- TRACE(("CASE_LS3\n"));
- screen->curgl = 3;
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_LS3R:
- TRACE(("CASE_LS3R\n"));
- screen->curgr = 3;
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_LS2R:
- TRACE(("CASE_LS2R\n"));
- screen->curgr = 2;
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_LS1R:
- TRACE(("CASE_LS1R\n"));
- screen->curgr = 1;
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_XTERM_SAVE:
- savemodes(term);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_XTERM_RESTORE:
- restoremodes(term);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_XTERM_WINOPS:
- TRACE(("CASE_XTERM_WINOPS\n"));
- if (screen->allowWindowOps)
- window_ops(term);
- sp->parsestate = sp->groundtable;
- break;
-#if OPT_WIDE_CHARS
- case CASE_ESC_PERCENT:
- sp->parsestate = esc_pct_table;
- break;
-
- case CASE_UTF8:
- /* If we did not set UTF-8 mode from resource or the
- * command-line, allow it to be enabled/disabled by
- * control sequence.
- */
- if (!screen->wide_chars) {
- WriteNow();
- ChangeToWide(screen);
- }
- if (screen->wide_chars
- && screen->utf8_mode != uAlways) {
- switchPtyData(screen, c == 'G');
- TRACE(("UTF8 mode %s\n",
- BtoS(screen->utf8_mode)));
- } else {
- TRACE(("UTF8 mode NOT turned %s (%s)\n",
- BtoS(c == 'G'),
- (screen->utf8_mode == uAlways)
- ? "UTF-8 mode set from command-line"
- : "wideChars resource was not set"));
- }
- sp->parsestate = sp->groundtable;
- break;
-#endif
-
- case CASE_CSI_IGNORE:
- sp->parsestate = cigtable;
- break;
- }
- if (sp->parsestate == sp->groundtable)
- sp->lastchar = thischar;
- } while (0);
-
-#if OPT_WIDE_CHARS
- screen->utf8_inparse = (screen->utf8_mode != uFalse
- && sp->parsestate != sos_table);
-#endif
-
- return True;
-}
-
-static void
-VTparse(void)
-{
- TScreen *screen;
-
- /* We longjmp back to this point in VTReset() */
- (void) setjmp(vtjmpbuf);
- screen = &term->screen;
- memset(&myState, 0, sizeof(myState));
-#if OPT_VT52_MODE
- myState.groundtable = screen->vtXX_level ? ansi_table : vt52_table;
-#else
- myState.groundtable = ansi_table;
-#endif
- myState.parsestate = myState.groundtable;
- myState.lastchar = -1; /* not a legal IChar */
- myState.nextstate = -1; /* not a legal state */
-
- for (;;) {
- if (!doparsing(doinput(), &myState))
- return;
- }
-}
-
-static Char *v_buffer; /* pointer to physical buffer */
-static Char *v_bufstr = NULL; /* beginning of area to write */
-static Char *v_bufptr; /* end of area to write */
-static Char *v_bufend; /* end of physical buffer */
-
-/* Write data to the pty as typed by the user, pasted with the mouse,
- or generated by us in response to a query ESC sequence. */
-
-int
-v_write(int f, Char * data, unsigned len)
-{
- int riten;
- unsigned c = len;
-
- if (v_bufstr == NULL && len > 0) {
- v_buffer = (Char *) XtMalloc(len);
- v_bufstr = v_buffer;
- v_bufptr = v_buffer;
- v_bufend = v_buffer + len;
- }
-#ifdef DEBUG
- if (debug) {
- fprintf(stderr, "v_write called with %d bytes (%d left over)",
- len, v_bufptr - v_bufstr);
- if (len > 1 && len < 10)
- fprintf(stderr, " \"%.*s\"", len, (char *) data);
- fprintf(stderr, "\n");
- }
-#endif
-
-#ifdef VMS
- if ((1 << f) != pty_mask)
- return (tt_write((char *) data, len));
-#else /* VMS */
- if (!FD_ISSET(f, &pty_mask))
- return (write(f, (char *) data, len));
-#endif /* VMS */
-
- /*
- * Append to the block we already have.
- * Always doing this simplifies the code, and
- * isn't too bad, either. If this is a short
- * block, it isn't too expensive, and if this is
- * a long block, we won't be able to write it all
- * anyway.
- */
-
- if (len > 0) {
-#if OPT_DABBREV
- term->screen.dabbrev_working = 0; /* break dabbrev sequence */
-#endif
- if (v_bufend < v_bufptr + len) { /* we've run out of room */
- if (v_bufstr != v_buffer) {
- /* there is unused space, move everything down */
- /* possibly overlapping memmove here */
-#ifdef DEBUG
- if (debug)
- fprintf(stderr, "moving data down %d\n",
- v_bufstr - v_buffer);
-#endif
- memmove(v_buffer, v_bufstr, (unsigned) (v_bufptr - v_bufstr));
- v_bufptr -= v_bufstr - v_buffer;
- v_bufstr = v_buffer;
- }
- if (v_bufend < v_bufptr + len) {
- /* still won't fit: get more space */
- /* Don't use XtRealloc because an error is not fatal. */
- int size = v_bufptr - v_buffer; /* save across realloc */
- v_buffer = TypeRealloc(Char, size + len, v_buffer);
- if (v_buffer) {
-#ifdef DEBUG
- if (debug)
- fprintf(stderr, "expanded buffer to %d\n",
- size + len);
-#endif
- v_bufstr = v_buffer;
- v_bufptr = v_buffer + size;
- v_bufend = v_bufptr + len;
- } else {
- /* no memory: ignore entire write request */
- fprintf(stderr, "%s: cannot allocate buffer space\n",
- xterm_name);
- v_buffer = v_bufstr; /* restore clobbered pointer */
- c = 0;
- }
- }
- }
- if (v_bufend >= v_bufptr + len) {
- /* new stuff will fit */
- memmove(v_bufptr, data, len);
- v_bufptr += len;
- }
- }
-
- /*
- * Write out as much of the buffer as we can.
- * Be careful not to overflow the pty's input silo.
- * We are conservative here and only write
- * a small amount at a time.
- *
- * If we can't push all the data into the pty yet, we expect write
- * to return a non-negative number less than the length requested
- * (if some data written) or -1 and set errno to EAGAIN,
- * EWOULDBLOCK, or EINTR (if no data written).
- *
- * (Not all systems do this, sigh, so the code is actually
- * a little more forgiving.)
- */
-
-#define MAX_PTY_WRITE 128 /* 1/2 POSIX minimum MAX_INPUT */
-
- if (v_bufptr > v_bufstr) {
-#ifdef VMS
- riten = tt_write(v_bufstr,
- ((v_bufptr - v_bufstr <= VMS_TERM_BUFFER_SIZE)
- ? v_bufptr - v_bufstr
- : VMS_TERM_BUFFER_SIZE));
- if (riten == 0)
- return (riten);
-#else /* VMS */
- riten = write(f, v_bufstr,
- (size_t) ((v_bufptr - v_bufstr <= MAX_PTY_WRITE)
- ? v_bufptr - v_bufstr
- : MAX_PTY_WRITE));
- if (riten < 0)
-#endif /* VMS */
- {
-#ifdef DEBUG
- if (debug)
- perror("write");
-#endif
- riten = 0;
- }
-#ifdef DEBUG
- if (debug)
- fprintf(stderr, "write called with %d, wrote %d\n",
- v_bufptr - v_bufstr <= MAX_PTY_WRITE ?
- v_bufptr - v_bufstr : MAX_PTY_WRITE,
- riten);
-#endif
- v_bufstr += riten;
- if (v_bufstr >= v_bufptr) /* we wrote it all */
- v_bufstr = v_bufptr = v_buffer;
- }
-
- /*
- * If we have lots of unused memory allocated, return it
- */
- if (v_bufend - v_bufptr > 1024) { /* arbitrary hysteresis */
- /* save pointers across realloc */
- int start = v_bufstr - v_buffer;
- int size = v_bufptr - v_buffer;
- unsigned allocsize = (unsigned) (size ? size : 1);
-
- v_buffer = TypeRealloc(Char, allocsize, v_buffer);
- if (v_buffer) {
- v_bufstr = v_buffer + start;
- v_bufptr = v_buffer + size;
- v_bufend = v_buffer + allocsize;
-#ifdef DEBUG
- if (debug)
- fprintf(stderr, "shrunk buffer to %d\n", allocsize);
-#endif
- } else {
- /* should we print a warning if couldn't return memory? */
- v_buffer = v_bufstr - start; /* restore clobbered pointer */
- }
- }
- return (c);
-}
-
-#ifdef VMS
-#define ptymask() (v_bufptr > v_bufstr ? pty_mask : 0)
-
-static void
-in_put(void)
-{
- static PtySelect select_mask;
- static PtySelect write_mask;
- int update = VTbuffer->update;
- int size;
-
- int status;
- Dimension replyWidth, replyHeight;
- XtGeometryResult stat;
-
- TScreen *screen = &term->screen;
- char *cp;
- int i;
-
- select_mask = pty_mask; /* force initial read */
- for (;;) {
-
- /* if the terminal changed size, resize the widget */
- if (tt_changed) {
- tt_changed = False;
-
- stat = XtMakeResizeRequest((Widget) term,
- ((Dimension) FontWidth(screen)
- * (tt_width)
- + 2 * screen->border
- + screen->fullVwin.sb_info.width),
- ((Dimension) FontHeight(screen)
- * (tt_length)
- + 2 * screen->border),
- &replyWidth, &replyHeight);
-
- if (stat == XtGeometryYes || stat == XtGeometryDone) {
- term->core.width = replyWidth;
- term->core.height = replyHeight;
-
- ScreenResize(&term->screen, replyWidth, replyHeight,
- &term->flags);
- }
- repairSizeHints();
- }
-
- if (eventMode == NORMAL
- && readPtyData(screen, &select_mask, VTbuffer)) {
- if (screen->scrollWidget
- && screen->scrollttyoutput
- && screen->topline < 0)
- /* Scroll to bottom */
- WindowScroll(screen, 0);
- break;
- }
- if (screen->scroll_amt)
- FlushScroll(screen);
- if (screen->cursor_set && CursorMoved(screen)) {
- if (screen->cursor_state)
- HideCursor();
- ShowCursor();
-#if OPT_INPUT_METHOD
- PreeditPosition(screen);
-#endif
- } else if (screen->cursor_set != screen->cursor_state) {
- if (screen->cursor_set)
- ShowCursor();
- else
- HideCursor();
- }
-
- if (QLength(screen->display)) {
- select_mask = X_mask;
- } else {
- write_mask = ptymask();
- XFlush(screen->display);
- select_mask = Select_mask;
- if (eventMode != NORMAL)
- select_mask = X_mask;
- }
- if (write_mask & ptymask()) {
- v_write(screen->respond, 0, 0); /* flush buffer */
- }
-
- if (select_mask & X_mask) {
- xevents();
- if (VTbuffer->update != update)
- break;
- }
- }
-}
-#else /* VMS */
-
-static void
-in_put(void)
-{
- static PtySelect select_mask;
- static PtySelect write_mask;
-
- TScreen *screen = &term->screen;
- int i, time_select;
- int size;
- int update = VTbuffer->update;
-
- static struct timeval select_timeout;
-
-#if OPT_BLINK_CURS
- /*
- * Compute the timeout for the blinking cursor to be much smaller than
- * the "on" or "off" interval.
- */
- int tick = ((screen->blink_on < screen->blink_off)
- ? screen->blink_on
- : screen->blink_off);
- tick *= (1000 / 8); /* 1000 for msec/usec, 8 for "much" smaller */
- if (tick < 1)
- tick = 1;
-#endif
-
- for (;;) {
- if (eventMode == NORMAL
- && (size = readPtyData(screen, &select_mask, VTbuffer)) != 0) {
- if (screen->scrollWidget
- && screen->scrollttyoutput
- && screen->topline < 0)
- WindowScroll(screen, 0); /* Scroll to bottom */
- /* stop speed reading at some point to look for X stuff */
- TRACE(("VTbuffer uses %d/%d\n",
- VTbuffer->last - VTbuffer->buffer,
- BUF_SIZE));
- if ((VTbuffer->last - VTbuffer->buffer) > BUF_SIZE) {
- FD_CLR(screen->respond, &select_mask);
- break;
- }
-#if defined(HAVE_SCHED_YIELD)
- /*
- * If we've read a full (small/fragment) buffer, let the operating
- * system have a turn, and we'll resume reading until we've either
- * read only a fragment of the buffer, or we've filled the large
- * buffer (see above). Doing this helps keep up with large bursts
- * of output.
- */
- if (size == FRG_SIZE) {
- select_timeout.tv_sec = 0;
- i = Select(max_plus1, &select_mask, &write_mask, 0,
- &select_timeout);
- if (i > 0) {
- sched_yield();
- } else
- break;
- } else {
- break;
- }
-#else
- (void) size; /* unused in this branch */
- break;
-#endif
- }
- /* update the screen */
- if (screen->scroll_amt)
- FlushScroll(screen);
- if (screen->cursor_set && CursorMoved(screen)) {
- if (screen->cursor_state)
- HideCursor();
- ShowCursor();
-#if OPT_INPUT_METHOD
- PreeditPosition(screen);
-#endif
- } else if (screen->cursor_set != screen->cursor_state) {
- if (screen->cursor_set)
- ShowCursor();
- else
- HideCursor();
- }
-
- XFlush(screen->display); /* always flush writes before waiting */
-
- /* Update the masks and, unless X events are already in the queue,
- wait for I/O to be possible. */
- XFD_COPYSET(&Select_mask, &select_mask);
- /* in selection mode xterm does not read pty */
- if (eventMode != NORMAL)
- FD_CLR(screen->respond, &select_mask);
-
- if (v_bufptr > v_bufstr) {
- XFD_COPYSET(&pty_mask, &write_mask);
- } else
- FD_ZERO(&write_mask);
- select_timeout.tv_sec = 0;
- time_select = 0;
-
- /*
- * if there's either an XEvent or an XtTimeout pending, just take
- * a quick peek, i.e. timeout from the select() immediately. If
- * there's nothing pending, let select() block a little while, but
- * for a shorter interval than the arrow-style scrollbar timeout.
- * The blocking is optional, because it tends to increase the load
- * on the host.
- */
- if (XtAppPending(app_con)) {
- select_timeout.tv_usec = 0;
- time_select = 1;
- } else if (screen->awaitInput) {
- select_timeout.tv_usec = 50000;
- time_select = 1;
-#if OPT_BLINK_CURS
- } else if ((screen->blink_timer != 0 &&
- ((screen->select & FOCUS) || screen->always_highlight)) ||
- (screen->cursor_state == BLINKED_OFF)) {
- select_timeout.tv_usec = tick;
- while (select_timeout.tv_usec > 1000000) {
- select_timeout.tv_usec -= 1000000;
- select_timeout.tv_sec++;
- }
- time_select = 1;
-#endif
-#if OPT_SESSION_MGT
- } else if (resource.sessionMgt) {
- /*
- * When session management is enabled, we should not block since
- * session related events can arrive any time.
- */
- select_timeout.tv_sec = 1;
- select_timeout.tv_usec = 0;
- time_select = 1;
-#endif
- }
- if (need_cleanup)
- Cleanup(0);
-
-#if defined(NX_TRANS_SOCKET) && defined(NX_TRANS_TEST)
- fprintf(stderr, "xterm::in_put: Select called with [%d][%p][%p][%p][%p].\n",
- max_plus1, (void *) &select_mask, (void *) &write_mask, (void *) 0,
- (void *) (time_select ? &select_timeout : 0));
-#endif
-
- i = Select(max_plus1, &select_mask, &write_mask, 0,
- (time_select ? &select_timeout : 0));
- if (i < 0) {
- if (errno != EINTR)
- SysError(ERROR_SELECT);
- continue;
- }
-
- /* if there is room to write more data to the pty, go write more */
- if (FD_ISSET(screen->respond, &write_mask)) {
- v_write(screen->respond, (Char *) 0, 0); /* flush buffer */
- }
-
- /* if there are X events already in our queue, it
- counts as being readable */
- if (XtAppPending(app_con) ||
- FD_ISSET(ConnectionNumber(screen->display), &select_mask)) {
- xevents();
- if (VTbuffer->update != update) /* HandleInterpret */
- break;
- }
-
- }
-}
-#endif /* VMS */
-
-static IChar
-doinput(void)
-{
- TScreen *screen = &term->screen;
-
- while (!morePtyData(screen, VTbuffer))
- in_put();
- return nextPtyData(screen, VTbuffer);
-}
-
-#if OPT_INPUT_METHOD
-/*
- * For OverTheSpot, client has to inform the position for XIM preedit.
- */
-static void
-PreeditPosition(TScreen * screen)
-{
- XPoint spot;
- XVaNestedList list;
-
- if (!screen->xic)
- return;
- spot.x = CurCursorX(screen, screen->cur_row, screen->cur_col);
- spot.y = CursorY(screen, screen->cur_row) + screen->fs_ascent;
- list = XVaCreateNestedList(0,
- XNSpotLocation, &spot,
- XNForeground, T_COLOR(screen, TEXT_FG),
- XNBackground, T_COLOR(screen, TEXT_BG),
- NULL);
- XSetICValues(screen->xic, XNPreeditAttributes, list, NULL);
- XFree(list);
-}
-#endif
-
-/*
- * process a string of characters according to the character set indicated
- * by charset. worry about end of line conditions (wraparound if selected).
- */
-void
-dotext(TScreen * screen,
- int charset,
- IChar * buf, /* start of characters to process */
- Cardinal len) /* end */
-{
-#if OPT_WIDE_CHARS
- Cardinal chars_chomped = 1;
-#else
- int next_col, last_col, this_col; /* must be signed */
-#endif
- Cardinal offset;
-
-#if OPT_WIDE_CHARS
- /* don't translate if we use UTF-8, and are not handling legacy support
- * for line-drawing characters.
- */
- if ((screen->utf8_mode == uFalse)
- || (screen->vt100_graphics && charset == '0'))
-#endif
-
- if (!xtermCharSetOut(buf, buf + len, charset))
- return;
-
- if_OPT_XMC_GLITCH(screen, {
- Cardinal n;
- if (charset != '?') {
- for (n = 0; n < len; n++) {
- if (buf[n] == XMC_GLITCH)
- buf[n] = XMC_GLITCH + 1;
- }
- }
- });
-
-#if OPT_WIDE_CHARS
- for (offset = 0;
- offset < len && (chars_chomped > 0 || screen->do_wrap);
- offset += chars_chomped) {
- int width_available = MaxCols(screen) - screen->cur_col;
- int width_here = 0;
- int need_wrap = 0;
- chars_chomped = 0;
-
- if (screen->do_wrap && (term->flags & WRAPAROUND)) {
- /* mark that we had to wrap this line */
- ScrnSetWrapped(screen, screen->cur_row);
- xtermAutoPrint('\n');
- xtermIndex(screen, 1);
- set_cur_col(screen, 0);
- screen->do_wrap = 0;
- width_available = MaxCols(screen) - screen->cur_col;
- }
-
- while (width_here <= width_available && chars_chomped < (len - offset)) {
- if (!screen->utf8_mode
- || (screen->vt100_graphics && charset == '0'))
- width_here++;
- else
- width_here += my_wcwidth((int) buf[chars_chomped + offset]);
- chars_chomped++;
- }
-
- if (width_here > width_available) {
- chars_chomped--;
- if (!screen->utf8_mode
- || (screen->vt100_graphics && charset == '0'))
- width_here--;
- else
- width_here -= my_wcwidth((int) buf[chars_chomped + offset]);
- need_wrap = 1;
- } else if (width_here == width_available) {
- need_wrap = 1;
- } else if (chars_chomped != (len - offset)) {
- need_wrap = 1;
- }
-
- /*
- * Split the wide characters back into separate arrays of 8-bit
- * characters so we can use the existing interface.
- *
- * FIXME: If we rewrote this interface, it would involve
- * rewriting all of the memory-management for the screen
- * buffers (perhaps this is simpler).
- */
- if (chars_chomped != 0) {
- static unsigned limit;
- static Char *hibyte, *lobyte;
- Bool both = False;
- unsigned j, k;
-
- if (chars_chomped >= limit) {
- limit = (chars_chomped + 1) * 2;
- lobyte = (Char *) XtRealloc((char *) lobyte, limit);
- hibyte = (Char *) XtRealloc((char *) hibyte, limit);
- }
- for (j = offset; j < offset + chars_chomped; j++) {
- k = j - offset;
- lobyte[k] = buf[j];
- if (buf[j] > 255) {
- hibyte[k] = (buf[j] >> 8);
- both = True;
- } else {
- hibyte[k] = 0;
- }
- }
-
- WriteText(screen, PAIRED_CHARS(lobyte,
- (both ? hibyte : 0)),
- chars_chomped);
- }
- screen->do_wrap = need_wrap;
- }
-#else
-
- for (offset = 0; offset < len; offset += this_col) {
- last_col = CurMaxCol(screen, screen->cur_row);
- this_col = last_col - screen->cur_col + 1;
- if (this_col <= 1) {
- if (screen->do_wrap && (term->flags & WRAPAROUND)) {
- /* mark that we had to wrap this line */
- ScrnSetWrapped(screen, screen->cur_row);
- xtermAutoPrint('\n');
- xtermIndex(screen, 1);
- set_cur_col(screen, 0);
- screen->do_wrap = 0;
- this_col = last_col + 1;
- } else
- this_col = 1;
- }
- if (offset + this_col > len) {
- this_col = len - offset;
- }
- next_col = screen->cur_col + this_col;
-
- WriteText(screen, PAIRED_CHARS(buf + offset,
- buf2 ? buf2 + offset : 0),
- this_col);
-
- /*
- * the call to WriteText updates screen->cur_col.
- * If screen->cur_col != next_col, we must have
- * hit the right margin, so set the do_wrap flag.
- */
- screen->do_wrap = (screen->cur_col < (int) next_col);
- }
-
-#endif
-}
-
-#if HANDLE_STRUCT_NOTIFY
-/* Flag icon name with "*** " on window output when iconified.
- * I'd like to do something like reverse video, but I don't
- * know how to tell this to window managers in general.
- *
- * mapstate can be IsUnmapped, !IsUnmapped, or -1;
- * -1 means no change; the other two are set by event handlers
- * and indicate a new mapstate. !IsMapped is done in the handler.
- * we worry about IsUnmapped when output occurs. -IAN!
- */
-static int mapstate = -1;
-#endif /* HANDLE_STRUCT_NOTIFY */
-
-#if OPT_WIDE_CHARS
-unsigned
-visual_width(PAIRED_CHARS(Char * str, Char * str2), Cardinal len)
-{
- /* returns the visual width of a string (doublewide characters count
- as 2, normalwide characters count as 1) */
- int my_len = 0;
- while (len) {
- int ch = *str;
- if (str2)
- ch |= *str2 << 8;
- if (str)
- str++;
- if (str2)
- str2++;
- if (iswide(ch))
- my_len += 2;
- else
- my_len++;
- len--;
- }
- return my_len;
-}
-#endif
-
-/*
- * write a string str of length len onto the screen at
- * the current cursor position. update cursor position.
- */
-static void
-WriteText(TScreen * screen, PAIRED_CHARS(Char * str, Char * str2), Cardinal len)
-{
- ScrnPtr PAIRED_CHARS(temp_str = 0, temp_str2 = 0);
- unsigned test;
- unsigned flags = term->flags;
- unsigned fg_bg = makeColorPair(term->cur_foreground, term->cur_background);
- unsigned cells = visual_width(PAIRED_CHARS(str, str2), len);
- GC currentGC;
-
- TRACE(("WriteText (%2d,%2d) (%d) %3d:%s\n",
- screen->cur_row,
- screen->cur_col,
- curXtermChrSet(screen->cur_row),
- len, visibleChars(PAIRED_CHARS(str, str2), len)));
-
- if (ScrnHaveSelection(screen)
- && ScrnIsLineInSelection(screen, screen->cur_row - screen->topline)) {
- ScrnDisownSelection(screen);
- }
-
- if (screen->cur_row - screen->topline <= screen->max_row) {
- if (screen->cursor_state)
- HideCursor();
-
- if (flags & INSERT) {
- InsertChar(screen, cells);
- }
- if (!AddToRefresh(screen)) {
-
- if (screen->scroll_amt)
- FlushScroll(screen);
-
- if (flags & INVISIBLE) {
- if (cells > len) {
- str = temp_str = TypeMallocN(Char, cells);
- if (str == 0)
- return;
- }
- if_OPT_WIDE_CHARS(screen, {
- if (cells > len) {
- str2 = temp_str2 = TypeMallocN(Char, cells);
- }
- });
- len = cells;
-
- memset(str, ' ', len);
- if_OPT_WIDE_CHARS(screen, {
- if (str2 != 0)
- memset(str2, 0, len);
- });
- }
-
- TRACE(("WriteText calling drawXtermText (%d,%d)\n",
- screen->cur_col,
- screen->cur_row));
-
- test = flags;
- checkVeryBoldColors(test, term->cur_foreground);
-
- /* make sure that the correct GC is current */
- currentGC = updatedXtermGC(screen, flags, fg_bg, False);
-
- drawXtermText(screen, test & DRAWX_MASK, currentGC,
- CurCursorX(screen, screen->cur_row, screen->cur_col),
- CursorY(screen, screen->cur_row),
- curXtermChrSet(screen->cur_row),
- PAIRED_CHARS(str, str2), len, 0);
-
- resetXtermGC(screen, flags, False);
- }
- }
-
- ScreenWrite(screen, PAIRED_CHARS(str, str2), flags, fg_bg, len);
- CursorForward(screen, (int) cells);
-#if OPT_ZICONBEEP
- /* Flag icon name with "***" on window output when iconified.
- */
- if (zIconBeep && mapstate == IsUnmapped && !zIconBeep_flagged) {
- static char *icon_name;
- static Arg args[] =
- {
- {XtNiconName, (XtArgVal) & icon_name}
- };
-
- icon_name = NULL;
- XtGetValues(toplevel, args, XtNumber(args));
-
- if (icon_name != NULL) {
- zIconBeep_flagged = True;
- Changename(icon_name);
- }
- if (zIconBeep > 0) {
-#if defined(HAVE_XKBBELL)
- XkbBell(XtDisplay(toplevel), VShellWindow, zIconBeep, XkbBI_Info);
-#else
- XBell(XtDisplay(toplevel), zIconBeep);
-#endif
- }
- }
- mapstate = -1;
-#endif /* OPT_ZICONBEEP */
- if (temp_str != 0)
- free(temp_str);
- if_OPT_WIDE_CHARS(screen, {
- if (temp_str2 != 0)
- free(temp_str2);
- });
- return;
-}
-
-#if HANDLE_STRUCT_NOTIFY
-/* Flag icon name with "***" on window output when iconified.
- */
-static void
-HandleStructNotify(Widget w GCC_UNUSED,
- XtPointer closure GCC_UNUSED,
- XEvent * event,
- Boolean * cont GCC_UNUSED)
-{
- static char *icon_name;
- static Arg args[] =
- {
- {XtNiconName, (XtArgVal) & icon_name}
- };
-
- switch (event->type) {
- case MapNotify:
- TRACE(("HandleStructNotify(MapNotify)\n"));
-#if OPT_ZICONBEEP
- if (zIconBeep_flagged) {
- zIconBeep_flagged = False;
- icon_name = NULL;
- XtGetValues(toplevel, args, XtNumber(args));
- if (icon_name != NULL) {
- char *buf = CastMallocN(char, strlen(icon_name));
- if (buf == NULL) {
- zIconBeep_flagged = True;
- return;
- }
- strcpy(buf, icon_name + 4);
- Changename(buf);
- free(buf);
- }
- }
-#endif /* OPT_ZICONBEEP */
- mapstate = !IsUnmapped;
- break;
- case UnmapNotify:
- TRACE(("HandleStructNotify(UnmapNotify)\n"));
- mapstate = IsUnmapped;
- break;
- case ConfigureNotify:
- TRACE(("HandleStructNotify(ConfigureNotify)\n"));
-#if OPT_TOOLBAR
- /* the notify is for the top-level widget, but we care about vt100 */
- if (term->screen.Vshow) {
- TScreen *screen = &term->screen;
- struct _vtwin *Vwin = WhichVWin(&(term->screen));
- TbInfo *info = &(Vwin->tb_info);
- TbInfo save = *info;
-
- if (info->menu_bar) {
- XtVaGetValues(info->menu_bar,
- XtNheight, &info->menu_height,
- XtNborderWidth, &info->menu_border,
- (XtPointer) 0);
-
- if (save.menu_height != info->menu_height
- || save.menu_border != info->menu_border) {
-
- TRACE(("...menu_height %d\n", info->menu_height));
- TRACE(("...menu_border %d\n", info->menu_border));
- TRACE(("...had height %d, border %d\n",
- save.menu_height,
- save.menu_border));
-
- /*
- * FIXME: Window manager still may be using the old values.
- * Try to fool it.
- */
- XtMakeResizeRequest((Widget) term,
- screen->fullVwin.fullwidth,
- info->menu_height
- - save.menu_height
- + screen->fullVwin.fullheight,
- NULL, NULL);
- repairSizeHints();
- }
- }
- }
-#endif /* OPT_TOOLBAR */
- break;
- default:
- TRACE(("HandleStructNotify(event %d)\n", event->type));
- break;
- }
-}
-#endif /* HANDLE_STRUCT_NOTIFY */
-
-#if OPT_BLINK_CURS
-static void
-SetCursorBlink(TScreen * screen, int enable)
-{
- screen->cursor_blink = enable;
- if (DoStartBlinking(screen)) {
- StartBlinking(screen);
- } else {
-#if !OPT_BLINK_TEXT
- StopBlinking(screen);
-#endif
- }
- update_cursorblink();
-}
-
-void
-ToggleCursorBlink(TScreen * screen)
-{
- SetCursorBlink(screen, !(screen->cursor_blink));
-}
-#endif
-
-/*
- * process ANSI modes set, reset
- */
-static void
-ansi_modes(XtermWidget termw,
- void (*func) (unsigned *p, unsigned mask))
-{
- int i;
-
- for (i = 0; i < nparam; ++i) {
- switch (param[i]) {
- case 2: /* KAM (if set, keyboard locked */
- (*func) (&termw->keyboard.flags, MODE_KAM);
- break;
-
- case 4: /* IRM */
- (*func) (&termw->flags, INSERT);
- break;
-
- case 12: /* SRM (if set, local echo */
- (*func) (&termw->keyboard.flags, MODE_SRM);
- break;
-
- case 20: /* LNM */
- (*func) (&termw->flags, LINEFEED);
- update_autolinefeed();
- break;
- }
- }
-}
-
-#define set_mousemode(mode) \
- screen->send_mouse_pos = (func == bitset) ? mode : MOUSE_OFF
-#define set_mouseflag(f) \
- ((func == bitset) \
- ? SCREEN_FLAG_set(screen, f) \
- : SCREEN_FLAG_unset(screen, f))
-
-/*
- * process DEC private modes set, reset
- */
-static void
-dpmodes(XtermWidget termw,
- void (*func) (unsigned *p, unsigned mask))
-{
- TScreen *screen = &termw->screen;
- int i, j;
-
- for (i = 0; i < nparam; ++i) {
- TRACE(("%s %d\n", (func == bitset) ? "DECSET" : "DECRST", param[i]));
- switch (param[i]) {
- case 1: /* DECCKM */
- (*func) (&termw->keyboard.flags, MODE_DECCKM);
- update_appcursor();
- break;
- case 2: /* DECANM - ANSI/VT52 mode */
- if (func == bitset) { /* ANSI (VT100) */
- /*
- * Setting DECANM should have no effect, since this function
- * cannot be reached from vt52 mode.
- */
- ;
- }
-#if OPT_VT52_MODE
- else if (screen->terminal_id >= 100) { /* VT52 */
- TRACE(("DECANM terminal_id %d, vtXX_level %d\n",
- screen->terminal_id,
- screen->vtXX_level));
- screen->vt52_save_level = screen->vtXX_level;
- screen->vtXX_level = 0;
- screen->vt52_save_curgl = screen->curgl;
- screen->vt52_save_curgr = screen->curgr;
- screen->vt52_save_curss = screen->curss;
- memmove(screen->vt52_save_gsets, screen->gsets, sizeof(screen->gsets));
- resetCharsets(screen);
- nparam = 0; /* ignore the remaining params, if any */
- }
-#endif
- break;
- case 3: /* DECCOLM */
- if (screen->c132) {
- ClearScreen(screen);
- CursorSet(screen, 0, 0, termw->flags);
- if ((j = func == bitset ? 132 : 80) !=
- ((termw->flags & IN132COLUMNS) ? 132 : 80) ||
- j != MaxCols(screen))
- RequestResize(termw, -1, j, True);
- (*func) (&termw->flags, IN132COLUMNS);
- }
- break;
- case 4: /* DECSCLM (slow scroll) */
- if (func == bitset) {
- screen->jumpscroll = 0;
- if (screen->scroll_amt)
- FlushScroll(screen);
- } else
- screen->jumpscroll = 1;
- (*func) (&termw->flags, SMOOTHSCROLL);
- update_jumpscroll();
- break;
- case 5: /* DECSCNM */
- j = termw->flags;
- (*func) (&termw->flags, REVERSE_VIDEO);
- if ((termw->flags ^ j) & REVERSE_VIDEO)
- ReverseVideo(termw);
- /* update_reversevideo done in RevVid */
- break;
-
- case 6: /* DECOM */
- (*func) (&termw->flags, ORIGIN);
- CursorSet(screen, 0, 0, termw->flags);
- break;
-
- case 7: /* DECAWM */
- (*func) (&termw->flags, WRAPAROUND);
- update_autowrap();
- break;
- case 8: /* DECARM */
- /* ignore autorepeat
- * XAutoRepeatOn() and XAutoRepeatOff() can do this, but only
- * for the whole display - not limited to a given window.
- */
- break;
- case SET_X10_MOUSE: /* MIT bogus sequence */
- MotionOff(screen, termw);
- set_mousemode(X10_MOUSE);
- break;
-#if OPT_TOOLBAR
- case 10: /* rxvt */
- ShowToolbar(func == bitset);
- break;
-#endif
-#if OPT_BLINK_CURS
- case 12: /* att610: Start/stop blinking cursor */
- if (screen->cursor_blink_res) {
- screen->cursor_blink_esc = (func == bitset) ? ON : OFF;
- SetCursorBlink(screen, screen->cursor_blink);
- }
- break;
-#endif
- case 18: /* DECPFF: print form feed */
- screen->printer_formfeed = (func == bitset) ? ON : OFF;
- break;
- case 19: /* DECPEX: print extent */
- screen->printer_extent = (func == bitset) ? ON : OFF;
- break;
- case 25: /* DECTCEM: Show/hide cursor (VT200) */
- screen->cursor_set = (func == bitset) ? ON : OFF;
- break;
- case 30: /* rxvt */
- if (screen->fullVwin.sb_info.width != ((func == bitset) ? ON : OFF))
- ToggleScrollBar(termw);
- break;
-#if OPT_SHIFT_FONTS
- case 35: /* rxvt */
- term->misc.shift_fonts = (func == bitset) ? ON : OFF;
- break;
-#endif
- case 38: /* DECTEK */
-#if OPT_TEK4014
- if (func == bitset && !(screen->inhibit & I_TEK)) {
- FlushLog(screen);
- screen->TekEmu = True;
- }
-#endif
- break;
- case 40: /* 132 column mode */
- screen->c132 = (func == bitset);
- update_allow132();
- break;
- case 41: /* curses hack */
- screen->curses = (func == bitset);
- update_cursesemul();
- break;
- case 42: /* DECNRCM national charset (VT220) */
- (*func) (&termw->flags, NATIONAL);
- break;
- case 44: /* margin bell */
- screen->marginbell = (func == bitset);
- if (!screen->marginbell)
- screen->bellarmed = -1;
- update_marginbell();
- break;
- case 45: /* reverse wraparound */
- (*func) (&termw->flags, REVERSEWRAP);
- update_reversewrap();
- break;
-#ifdef ALLOWLOGGING
- case 46: /* logging */
-#ifdef ALLOWLOGFILEONOFF
- /*
- * if this feature is enabled, logging may be
- * enabled and disabled via escape sequences.
- */
- if (func == bitset)
- StartLog(screen);
- else
- CloseLog(screen);
-#else
- Bell(XkbBI_Info, 0);
- Bell(XkbBI_Info, 0);
-#endif /* ALLOWLOGFILEONOFF */
- break;
-#endif
- case 1049: /* alternate buffer & cursor */
- if (!termw->misc.titeInhibit) {
- if (func == bitset) {
- CursorSave(termw);
- ToAlternate(screen);
- ClearScreen(screen);
- } else {
- FromAlternate(screen);
- CursorRestore(termw);
- }
- } else if (termw->misc.tiXtraScroll) {
- if (func == bitset) {
- xtermScroll(screen, screen->max_row);
- }
- }
- break;
- case 1047:
- case 47: /* alternate buffer */
- if (!termw->misc.titeInhibit) {
- if (func == bitset) {
- ToAlternate(screen);
- } else {
- if (screen->alternate
- && (param[i] == 1047))
- ClearScreen(screen);
- FromAlternate(screen);
- }
- } else if (termw->misc.tiXtraScroll) {
- if (func == bitset) {
- xtermScroll(screen, screen->max_row);
- }
- }
- break;
- case 66: /* DECNKM */
- (*func) (&termw->keyboard.flags, MODE_DECKPAM);
- update_appkeypad();
- break;
- case 67: /* DECBKM */
- /* back-arrow mapped to backspace or delete(D) */
- (*func) (&termw->keyboard.flags, MODE_DECBKM);
- TRACE(("DECSET DECBKM %s\n",
- BtoS(termw->keyboard.flags & MODE_DECBKM)));
- update_decbkm();
- break;
- case SET_VT200_MOUSE: /* xterm bogus sequence */
- MotionOff(screen, termw);
- set_mousemode(VT200_MOUSE);
- break;
- case SET_VT200_HIGHLIGHT_MOUSE: /* xterm sequence w/hilite tracking */
- MotionOff(screen, termw);
- set_mousemode(VT200_HIGHLIGHT_MOUSE);
- break;
- case SET_BTN_EVENT_MOUSE:
- MotionOff(screen, termw);
- set_mousemode(BTN_EVENT_MOUSE);
- break;
- case SET_ANY_EVENT_MOUSE:
- set_mousemode(ANY_EVENT_MOUSE);
- if (screen->send_mouse_pos == MOUSE_OFF) {
- MotionOff(screen, term);
- } else {
- MotionOn(screen, term);
- }
- break;
- case 1010: /* rxvt */
- screen->scrollttyoutput = (func == bitset) ? ON : OFF;
- update_scrollttyoutput();
- break;
- case 1011: /* rxvt */
- screen->scrollkey = (func == bitset) ? ON : OFF;
- update_scrollkey();
- break;
-#if OPT_NUM_LOCK
- case 1035:
- term->misc.real_NumLock = (func == bitset) ? ON : OFF;
- update_num_lock();
- break;
- case 1036:
- screen->meta_sends_esc = (func == bitset) ? ON : OFF;
- update_meta_esc();
- break;
-#endif
- case 1037:
- screen->delete_is_del = (func == bitset) ? ON : OFF;
- update_delete_del();
- break;
- case 1048:
- if (!termw->misc.titeInhibit) {
- if (func == bitset)
- CursorSave(termw);
- else
- CursorRestore(termw);
- }
- break;
- case 1051:
- set_keyboard_type(keyboardIsSun, func == bitset);
- break;
-#if OPT_HP_FUNC_KEYS
- case 1052:
- set_keyboard_type(keyboardIsHP, func == bitset);
- break;
-#endif
-#if OPT_SCO_FUNC_KEYS
- case 1053:
- set_keyboard_type(keyboardIsSCO, func == bitset);
- break;
-#endif
- case 1060:
- set_keyboard_type(keyboardIsLegacy, func == bitset);
- break;
-#if OPT_SUNPC_KBD
- case 1061:
- set_keyboard_type(keyboardIsVT220, func == bitset);
- break;
-#endif
-#if OPT_READLINE
- case SET_BUTTON1_MOVE_POINT:
- set_mouseflag(click1_moves);
- break;
- case SET_BUTTON2_MOVE_POINT:
- set_mouseflag(paste_moves);
- break;
- case SET_DBUTTON3_DELETE:
- set_mouseflag(dclick3_deletes);
- break;
- case SET_PASTE_IN_BRACKET:
- set_mouseflag(paste_brackets);
- break;
- case SET_PASTE_QUOTE:
- set_mouseflag(paste_quotes);
- break;
- case SET_PASTE_LITERAL_NL:
- set_mouseflag(paste_literal_nl);
- break;
-#endif /* OPT_READLINE */
- }
- }
-}
-
-/*
- * process xterm private modes save
- */
-static void
-savemodes(XtermWidget termw)
-{
- TScreen *screen = &termw->screen;
- int i;
-
- for (i = 0; i < nparam; i++) {
- TRACE(("savemodes %d\n", param[i]));
- switch (param[i]) {
- case 1: /* DECCKM */
- DoSM(DP_DECCKM, termw->keyboard.flags & MODE_DECCKM);
- break;
- case 3: /* DECCOLM */
- if (screen->c132)
- DoSM(DP_DECCOLM, termw->flags & IN132COLUMNS);
- break;
- case 4: /* DECSCLM (slow scroll) */
- DoSM(DP_DECSCLM, termw->flags & SMOOTHSCROLL);
- break;
- case 5: /* DECSCNM */
- DoSM(DP_DECSCNM, termw->flags & REVERSE_VIDEO);
- break;
- case 6: /* DECOM */
- DoSM(DP_DECOM, termw->flags & ORIGIN);
- break;
-
- case 7: /* DECAWM */
- DoSM(DP_DECAWM, termw->flags & WRAPAROUND);
- break;
- case 8: /* DECARM */
- /* ignore autorepeat */
- break;
- case SET_X10_MOUSE: /* mouse bogus sequence */
- DoSM(DP_X_X10MSE, screen->send_mouse_pos);
- break;
-#if OPT_TOOLBAR
- case 10: /* rxvt */
- DoSM(DP_TOOLBAR, resource.toolBar);
- break;
-#endif
-#if OPT_BLINK_CURS
- case 12: /* att610: Start/stop blinking cursor */
- if (screen->cursor_blink_res) {
- DoSM(DP_CRS_BLINK, screen->cursor_blink_esc);
- }
- break;
-#endif
- case 18: /* DECPFF: print form feed */
- DoSM(DP_PRN_FORMFEED, screen->printer_formfeed);
- break;
- case 19: /* DECPEX: print extent */
- DoSM(DP_PRN_EXTENT, screen->printer_extent);
- break;
- case 25: /* DECTCEM: Show/hide cursor (VT200) */
- DoSM(DP_CRS_VISIBLE, screen->cursor_set);
- break;
- case 40: /* 132 column mode */
- DoSM(DP_X_DECCOLM, screen->c132);
- break;
- case 41: /* curses hack */
- DoSM(DP_X_MORE, screen->curses);
- break;
- case 44: /* margin bell */
- DoSM(DP_X_MARGIN, screen->marginbell);
- break;
- case 45: /* reverse wraparound */
- DoSM(DP_X_REVWRAP, termw->flags & REVERSEWRAP);
- break;
-#ifdef ALLOWLOGGING
- case 46: /* logging */
- DoSM(DP_X_LOGGING, screen->logging);
- break;
-#endif
- case 1047: /* alternate buffer */
- /* FALLTHRU */
- case 47: /* alternate buffer */
- DoSM(DP_X_ALTSCRN, screen->alternate);
- break;
- case SET_VT200_MOUSE: /* mouse bogus sequence */
- case SET_VT200_HIGHLIGHT_MOUSE:
- case SET_BTN_EVENT_MOUSE:
- case SET_ANY_EVENT_MOUSE:
- DoSM(DP_X_MOUSE, screen->send_mouse_pos);
- break;
- case 1048:
- if (!termw->misc.titeInhibit) {
- CursorSave(termw);
- }
- break;
-#if OPT_READLINE
- case SET_BUTTON1_MOVE_POINT:
- SCREEN_FLAG_save(screen, click1_moves);
- break;
- case SET_BUTTON2_MOVE_POINT:
- SCREEN_FLAG_save(screen, paste_moves);
- break;
- case SET_DBUTTON3_DELETE:
- SCREEN_FLAG_save(screen, dclick3_deletes);
- break;
- case SET_PASTE_IN_BRACKET:
- SCREEN_FLAG_save(screen, paste_brackets);
- break;
- case SET_PASTE_QUOTE:
- SCREEN_FLAG_save(screen, paste_quotes);
- break;
- case SET_PASTE_LITERAL_NL:
- SCREEN_FLAG_save(screen, paste_literal_nl);
- break;
-#endif /* OPT_READLINE */
- }
- }
-}
-
-/*
- * process xterm private modes restore
- */
-static void
-restoremodes(XtermWidget termw)
-{
- TScreen *screen = &termw->screen;
- int i, j;
-
- for (i = 0; i < nparam; i++) {
- TRACE(("restoremodes %d\n", param[i]));
- switch (param[i]) {
- case 1: /* DECCKM */
- bitcpy(&termw->keyboard.flags,
- screen->save_modes[DP_DECCKM], MODE_DECCKM);
- update_appcursor();
- break;
- case 3: /* DECCOLM */
- if (screen->c132) {
- ClearScreen(screen);
- CursorSet(screen, 0, 0, termw->flags);
- if ((j = (screen->save_modes[DP_DECCOLM] & IN132COLUMNS)
- ? 132 : 80) != ((termw->flags & IN132COLUMNS)
- ? 132 : 80) || j != MaxCols(screen))
- RequestResize(termw, -1, j, True);
- bitcpy(&termw->flags,
- screen->save_modes[DP_DECCOLM],
- IN132COLUMNS);
- }
- break;
- case 4: /* DECSCLM (slow scroll) */
- if (screen->save_modes[DP_DECSCLM] & SMOOTHSCROLL) {
- screen->jumpscroll = 0;
- if (screen->scroll_amt)
- FlushScroll(screen);
- } else
- screen->jumpscroll = 1;
- bitcpy(&termw->flags, screen->save_modes[DP_DECSCLM], SMOOTHSCROLL);
- update_jumpscroll();
- break;
- case 5: /* DECSCNM */
- if ((screen->save_modes[DP_DECSCNM] ^ termw->flags) & REVERSE_VIDEO) {
- bitcpy(&termw->flags, screen->save_modes[DP_DECSCNM], REVERSE_VIDEO);
- ReverseVideo(termw);
- /* update_reversevideo done in RevVid */
- }
- break;
- case 6: /* DECOM */
- bitcpy(&termw->flags, screen->save_modes[DP_DECOM], ORIGIN);
- CursorSet(screen, 0, 0, termw->flags);
- break;
-
- case 7: /* DECAWM */
- bitcpy(&termw->flags, screen->save_modes[DP_DECAWM], WRAPAROUND);
- update_autowrap();
- break;
- case 8: /* DECARM */
- /* ignore autorepeat */
- break;
- case SET_X10_MOUSE: /* MIT bogus sequence */
- DoRM(DP_X_X10MSE, screen->send_mouse_pos);
- break;
-#if OPT_TOOLBAR
- case 10: /* rxvt */
- DoRM(DP_TOOLBAR, resource.toolBar);
- ShowToolbar(resource.toolBar);
- break;
-#endif
-#if OPT_BLINK_CURS
- case 12: /* att610: Start/stop blinking cursor */
- if (screen->cursor_blink_res) {
- DoRM(DP_CRS_BLINK, screen->cursor_blink_esc);
- SetCursorBlink(screen, screen->cursor_blink);
- }
- break;
-#endif
- case 18: /* DECPFF: print form feed */
- DoRM(DP_PRN_FORMFEED, screen->printer_formfeed);
- break;
- case 19: /* DECPEX: print extent */
- DoRM(DP_PRN_EXTENT, screen->printer_extent);
- break;
- case 25: /* DECTCEM: Show/hide cursor (VT200) */
- DoRM(DP_CRS_VISIBLE, screen->cursor_set);
- break;
- case 40: /* 132 column mode */
- DoRM(DP_X_DECCOLM, screen->c132);
- update_allow132();
- break;
- case 41: /* curses hack */
- DoRM(DP_X_MORE, screen->curses);
- update_cursesemul();
- break;
- case 44: /* margin bell */
- if ((DoRM(DP_X_MARGIN, screen->marginbell)) == 0)
- screen->bellarmed = -1;
- update_marginbell();
- break;
- case 45: /* reverse wraparound */
- bitcpy(&termw->flags, screen->save_modes[DP_X_REVWRAP], REVERSEWRAP);
- update_reversewrap();
- break;
-#ifdef ALLOWLOGGING
- case 46: /* logging */
-#ifdef ALLOWLOGFILEONOFF
- if (screen->save_modes[DP_X_LOGGING])
- StartLog(screen);
- else
- CloseLog(screen);
-#endif /* ALLOWLOGFILEONOFF */
- /* update_logging done by StartLog and CloseLog */
- break;
-#endif
- case 1047: /* alternate buffer */
- /* FALLTHRU */
- case 47: /* alternate buffer */
- if (!termw->misc.titeInhibit) {
- if (screen->save_modes[DP_X_ALTSCRN])
- ToAlternate(screen);
- else
- FromAlternate(screen);
- /* update_altscreen done by ToAlt and FromAlt */
- } else if (termw->misc.tiXtraScroll) {
- if (screen->save_modes[DP_X_ALTSCRN]) {
- xtermScroll(screen, screen->max_row);
- }
- }
- break;
- case SET_VT200_MOUSE: /* mouse bogus sequence */
- case SET_VT200_HIGHLIGHT_MOUSE:
- case SET_BTN_EVENT_MOUSE:
- case SET_ANY_EVENT_MOUSE:
- DoRM(DP_X_MOUSE, screen->send_mouse_pos);
- break;
- case 1048:
- if (!termw->misc.titeInhibit) {
- CursorRestore(termw);
- }
- break;
-#if OPT_READLINE
- case SET_BUTTON1_MOVE_POINT:
- SCREEN_FLAG_restore(screen, click1_moves);
- break;
- case SET_BUTTON2_MOVE_POINT:
- SCREEN_FLAG_restore(screen, paste_moves);
- break;
- case SET_DBUTTON3_DELETE:
- SCREEN_FLAG_restore(screen, dclick3_deletes);
- break;
- case SET_PASTE_IN_BRACKET:
- SCREEN_FLAG_restore(screen, paste_brackets);
- break;
- case SET_PASTE_QUOTE:
- SCREEN_FLAG_restore(screen, paste_quotes);
- break;
- case SET_PASTE_LITERAL_NL:
- SCREEN_FLAG_restore(screen, paste_literal_nl);
- break;
-#endif /* OPT_READLINE */
- }
- }
-}
-
-/*
- * Report window label (icon or title) in dtterm protocol
- * ESC ] code label ESC backslash
- */
-static void
-report_win_label(TScreen * screen,
- int code,
- XTextProperty * text,
- Status ok)
-{
- char **list;
- int length = 0;
-
- reply.a_type = ESC;
- unparseputc(ESC, screen->respond);
- unparseputc(']', screen->respond);
- unparseputc(code, screen->respond);
-
- if (ok) {
- if (XTextPropertyToStringList(text, &list, &length)) {
- int n, c;
- for (n = 0; n < length; n++) {
- char *s = list[n];
- while ((c = *s++) != '\0')
- unparseputc(c, screen->respond);
- }
- XFreeStringList(list);
- }
- if (text->value != 0)
- XFree(text->value);
- }
-
- unparseputc(ESC, screen->respond);
- unparseputc('\\', screen->respond);
-}
-
-/*
- * Window operations (from CDE dtterm description, as well as extensions).
- * See also "allowWindowOps" resource.
- */
-static void
-window_ops(XtermWidget termw)
-{
- TScreen *screen = &termw->screen;
- XWindowChanges values;
- XWindowAttributes win_attrs;
- XTextProperty text;
- unsigned value_mask;
- unsigned root_width;
- unsigned root_height;
-
- TRACE(("window_ops %d\n", param[0]));
- switch (param[0]) {
- case 1: /* Restore (de-iconify) window */
- XMapWindow(screen->display,
- VShellWindow);
- break;
-
- case 2: /* Minimize (iconify) window */
- XIconifyWindow(screen->display,
- VShellWindow,
- DefaultScreen(screen->display));
- break;
-
- case 3: /* Move the window to the given position */
- values.x = param[1];
- values.y = param[2];
- value_mask = (CWX | CWY);
- XReconfigureWMWindow(screen->display,
- VShellWindow,
- DefaultScreen(screen->display),
- value_mask,
- &values);
- break;
-
- case 4: /* Resize the window to given size in pixels */
- RequestResize(termw, param[1], param[2], False);
- break;
-
- case 5: /* Raise the window to the front of the stack */
- XRaiseWindow(screen->display, VShellWindow);
- break;
-
- case 6: /* Lower the window to the bottom of the stack */
- XLowerWindow(screen->display, VShellWindow);
- break;
-
- case 7: /* Refresh the window */
- Redraw();
- break;
-
- case 8: /* Resize the text-area, in characters */
- RequestResize(termw, param[1], param[2], True);
- break;
-
-#if OPT_MAXIMIZE
- case 9: /* Maximize or restore */
- RequestMaximize(termw, param[1]);
- break;
-#endif
-
- case 11: /* Report the window's state */
- XGetWindowAttributes(screen->display,
- VWindow(screen),
- &win_attrs);
- reply.a_type = CSI;
- reply.a_pintro = 0;
- reply.a_nparam = 1;
- reply.a_param[0] = (win_attrs.map_state == IsViewable) ? 1 : 2;
- reply.a_inters = 0;
- reply.a_final = 't';
- unparseseq(&reply, screen->respond);
- break;
-
- case 13: /* Report the window's position */
- XGetWindowAttributes(screen->display,
- WMFrameWindow(termw),
- &win_attrs);
- reply.a_type = CSI;
- reply.a_pintro = 0;
- reply.a_nparam = 3;
- reply.a_param[0] = 3;
- reply.a_param[1] = win_attrs.x;
- reply.a_param[2] = win_attrs.y;
- reply.a_inters = 0;
- reply.a_final = 't';
- unparseseq(&reply, screen->respond);
- break;
-
- case 14: /* Report the window's size in pixels */
- XGetWindowAttributes(screen->display,
- VWindow(screen),
- &win_attrs);
- reply.a_type = CSI;
- reply.a_pintro = 0;
- reply.a_nparam = 3;
- reply.a_param[0] = 4;
- /*FIXME: find if dtterm uses
- * win_attrs.height or Height
- * win_attrs.width or Width
- */
- reply.a_param[1] = Height(screen);
- reply.a_param[2] = Width(screen);
- reply.a_inters = 0;
- reply.a_final = 't';
- unparseseq(&reply, screen->respond);
- break;
-
- case 18: /* Report the text's size in characters */
- reply.a_type = CSI;
- reply.a_pintro = 0;
- reply.a_nparam = 3;
- reply.a_param[0] = 8;
- reply.a_param[1] = MaxRows(screen);
- reply.a_param[2] = MaxCols(screen);
- reply.a_inters = 0;
- reply.a_final = 't';
- unparseseq(&reply, screen->respond);
- break;
-
-#if OPT_MAXIMIZE
- case 19: /* Report the screen's size, in characters */
- if (!QueryMaximize(term, &root_height, &root_width)) {
- root_height = 0;
- root_width = 0;
- }
- reply.a_type = CSI;
- reply.a_pintro = 0;
- reply.a_nparam = 3;
- reply.a_param[0] = 9;
- reply.a_param[1] = root_height / FontHeight(screen);
- reply.a_param[2] = root_width / FontWidth(screen);
- reply.a_inters = 0;
- reply.a_final = 't';
- unparseseq(&reply, screen->respond);
- break;
-#endif
-
- case 20: /* Report the icon's label */
- report_win_label(screen, 'L', &text,
- XGetWMIconName(screen->display, VShellWindow, &text));
- break;
-
- case 21: /* Report the window's title */
- report_win_label(screen, 'l', &text,
- XGetWMName(screen->display, VShellWindow, &text));
- break;
-
- default: /* DECSLPP (24, 25, 36, 48, 72, 144) */
- if (param[0] >= 24)
- RequestResize(termw, param[0], -1, True);
- break;
- }
-}
-
-/*
- * set a bit in a word given a pointer to the word and a mask.
- */
-static void
-bitset(unsigned *p, unsigned mask)
-{
- *p |= mask;
-}
-
-/*
- * clear a bit in a word given a pointer to the word and a mask.
- */
-static void
-bitclr(unsigned *p, unsigned mask)
-{
- *p &= ~mask;
-}
-
-/*
- * Copy bits from one word to another, given a mask
- */
-static void
-bitcpy(unsigned *p, unsigned q, unsigned mask)
-{
- bitclr(p, mask);
- bitset(p, q & mask);
-}
-
-void
-unparseputc1(int c, int fd)
-{
- if (c >= 0x80 && c <= 0x9F) {
- if (!term->screen.control_eight_bits) {
- unparseputc(A2E(ESC), fd);
- c = A2E(c - 0x40);
- }
- }
- unparseputc(c, fd);
-}
-
-void
-unparseseq(ANSI * ap, int fd)
-{
- int c;
- int i;
- int inters;
-
- unparseputc1(c = ap->a_type, fd);
- if (c == ESC
- || c == DCS
- || c == CSI
- || c == OSC
- || c == PM
- || c == APC
- || c == SS3) {
- if (ap->a_pintro != 0)
- unparseputc(ap->a_pintro, fd);
- for (i = 0; i < ap->a_nparam; ++i) {
- if (i != 0)
- unparseputc(';', fd);
- unparseputn((unsigned int) ap->a_param[i], fd);
- }
- if ((inters = ap->a_inters) != 0) {
- for (i = 3; i >= 0; --i) {
- c = CharOf(inters >> (8 * i));
- if (c != 0)
- unparseputc(c, fd);
- }
- }
- unparseputc((char) ap->a_final, fd);
- }
-}
-
-static void
-unparseputn(unsigned int n, int fd)
-{
- unsigned int q;
-
- q = n / 10;
- if (q != 0)
- unparseputn(q, fd);
- unparseputc((char) ('0' + (n % 10)), fd);
-}
-
-void
-unparseputc(int c, int fd)
-{
- IChar buf[2];
- unsigned i = 1;
-
-#if OPT_TCAP_QUERY
- /*
- * If we're returning a termcap string, it has to be translated since
- * a DCS must not contain any characters except for the normal 7-bit
- * printable ASCII (counting tab, carriage return, etc). For now,
- * just use hexadecimal for the whole thing.
- */
- if (term->screen.tc_query >= 0) {
- char tmp[3];
- sprintf(tmp, "%02X", c & 0xFF);
- buf[0] = tmp[0];
- buf[1] = tmp[1];
- i = 2;
- } else
-#endif
- if ((buf[0] = c) == '\r' && (term->flags & LINEFEED)) {
- buf[1] = '\n';
- i++;
- }
-#ifdef VMS
- tt_write(&buf, i);
-#else /* VMS */
- writePtyData(fd, buf, i);
-#endif /* VMS */
-
- /* If send/receive mode is reset, we echo characters locally */
- if ((term->keyboard.flags & MODE_SRM) == 0) {
- (void) doparsing((unsigned) c, &myState);
- }
-}
-
-void
-unparseputs(char *s, int fd)
-{
- while (*s)
- unparseputc(*s++, fd);
-}
-
-void
-ToggleAlternate(TScreen * screen)
-{
- if (screen->alternate)
- FromAlternate(screen);
- else
- ToAlternate(screen);
-}
-
-static void
-ToAlternate(TScreen * screen)
-{
- if (screen->alternate)
- return;
- TRACE(("ToAlternate\n"));
- if (!screen->altbuf)
- screen->altbuf = Allocate(MaxRows(screen), MaxCols(screen),
- &screen->abuf_address);
- SwitchBufs(screen);
- screen->alternate = True;
- update_altscreen();
-}
-
-static void
-FromAlternate(TScreen * screen)
-{
- if (!screen->alternate)
- return;
- TRACE(("FromAlternate\n"));
- if (screen->scroll_amt)
- FlushScroll(screen);
- screen->alternate = False;
- SwitchBufs(screen);
- update_altscreen();
-}
-
-static void
-SwitchBufs(TScreen * screen)
-{
- int rows, top;
-
- if (screen->cursor_state)
- HideCursor();
-
- rows = MaxRows(screen);
- SwitchBufPtrs(screen);
-
- if ((top = -screen->topline) < rows) {
- if (screen->scroll_amt)
- FlushScroll(screen);
- if (top == 0)
- XClearWindow(screen->display, VWindow(screen));
- else
- XClearArea(screen->display,
- VWindow(screen),
- (int) OriginX(screen),
- (int) top * FontHeight(screen) + screen->border,
- (unsigned) Width(screen),
- (unsigned) (rows - top) * FontHeight(screen),
- False);
- }
- ScrnUpdate(screen, 0, 0, rows, MaxCols(screen), False);
-}
-
-/* swap buffer line pointers between alt and regular screens */
-void
-SwitchBufPtrs(TScreen * screen)
-{
- size_t len = ScrnPointers(screen, (unsigned) MaxRows(screen));
-
- memcpy((char *) screen->save_ptr, (char *) screen->visbuf, len);
- memcpy((char *) screen->visbuf, (char *) screen->altbuf, len);
- memcpy((char *) screen->altbuf, (char *) screen->save_ptr, len);
-}
-
-void
-VTRun(void)
-{
- TScreen *screen = &term->screen;
-
- TRACE(("VTRun ...\n"));
-
- if (!screen->Vshow) {
- set_vt_visibility(True);
- }
- update_vttekmode();
- update_vtshow();
- update_tekshow();
- set_vthide_sensitivity();
-
- if (screen->allbuf == NULL)
- VTallocbuf();
-
- screen->cursor_state = OFF;
- screen->cursor_set = ON;
-#if OPT_BLINK_CURS
- if (DoStartBlinking(screen))
- StartBlinking(screen);
-#endif
-
-#if OPT_TEK4014
- if (Tpushb > Tpushback) {
- fillPtyData(screen, VTbuffer, (char *) Tpushback, Tpushb - Tpushback);
- Tpushb = Tpushback;
- }
-#endif
- if (!setjmp(VTend))
- VTparse();
- StopBlinking(screen);
- HideCursor();
- screen->cursor_set = OFF;
-}
-
-/*ARGSUSED*/
-static void
-VTExpose(Widget w GCC_UNUSED,
- XEvent * event,
- Region region GCC_UNUSED)
-{
- TScreen *screen = &term->screen;
-
-#ifdef DEBUG
- if (debug)
- fputs("Expose\n", stderr);
-#endif /* DEBUG */
- if (event->type == Expose)
- HandleExposure(screen, event);
-}
-
-static void
-VTGraphicsOrNoExpose(XEvent * event)
-{
- TScreen *screen = &term->screen;
- if (screen->incopy <= 0) {
- screen->incopy = 1;
- if (screen->scrolls > 0)
- screen->scrolls--;
- }
- if (event->type == GraphicsExpose)
- if (HandleExposure(screen, event))
- screen->cursor_state = OFF;
- if ((event->type == NoExpose)
- || ((XGraphicsExposeEvent *) event)->count == 0) {
- if (screen->incopy <= 0 && screen->scrolls > 0)
- screen->scrolls--;
- if (screen->scrolls)
- screen->incopy = -1;
- else
- screen->incopy = 0;
- }
-}
-
-/*ARGSUSED*/
-static void
-VTNonMaskableEvent(Widget w GCC_UNUSED,
- XtPointer closure GCC_UNUSED,
- XEvent * event,
- Boolean * cont GCC_UNUSED)
-{
- switch (event->type) {
- case GraphicsExpose:
- case NoExpose:
- VTGraphicsOrNoExpose(event);
- break;
- }
-}
-
-static void
-VTResize(Widget w)
-{
- if (XtIsRealized(w)) {
- ScreenResize(&term->screen, term->core.width, term->core.height, &term->flags);
- }
-}
-
-#define okDimension(src,dst) ((src <= 32767) && ((dst = src) == src))
-
-static void
-RequestResize(XtermWidget termw, int rows, int cols, int text)
-{
-#ifndef nothack
- XSizeHints sizehints;
- long supp;
-#endif
- TScreen *screen = &termw->screen;
- unsigned long value;
- Dimension replyWidth, replyHeight;
- Dimension askedWidth, askedHeight;
- XtGeometryResult status;
- XWindowAttributes attrs;
-
- TRACE(("RequestResize(rows=%d, cols=%d, text=%d)\n", rows, cols, text));
-
- if ((askedWidth = cols) < cols
- || (askedHeight = rows) < rows)
- return;
-
- if (askedHeight == 0
- || askedWidth == 0
- || term->misc.limit_resize > 0) {
- XGetWindowAttributes(XtDisplay(termw),
- RootWindowOfScreen(XtScreen(termw)), &attrs);
- }
-
- if (text) {
- if ((value = rows) != 0) {
- if (rows < 0)
- value = MaxRows(screen);
- value *= FontHeight(screen);
- value += (2 * screen->border);
- if (!okDimension(value, askedHeight))
- return;
- }
-
- if ((value = cols) != 0) {
- if (cols < 0)
- value = MaxCols(screen);
- value *= FontWidth(screen);
- value += (2 * screen->border) + ScrollbarWidth(screen);
- if (!okDimension(value, askedWidth))
- return;
- }
-
- } else {
- if (rows < 0)
- askedHeight = FullHeight(screen);
- if (cols < 0)
- askedWidth = FullWidth(screen);
- }
-
- if (rows == 0)
- askedHeight = attrs.height;
- if (cols == 0)
- askedWidth = attrs.width;
-
- if (term->misc.limit_resize > 0) {
- Dimension high = term->misc.limit_resize * attrs.height;
- Dimension wide = term->misc.limit_resize * attrs.width;
- if (high < attrs.height)
- high = attrs.height;
- if (askedHeight > high)
- askedHeight = high;
- if (wide < attrs.width)
- wide = attrs.width;
- if (askedWidth > wide)
- askedWidth = wide;
- }
-#ifndef nothack
- if (!XGetWMNormalHints(screen->display, VShellWindow,
- &sizehints, &supp))
- bzero(&sizehints, sizeof(sizehints));
-#endif
-
- status = XtMakeResizeRequest((Widget) termw,
- askedWidth, askedHeight,
- &replyWidth, &replyHeight);
- TRACE(("charproc.c XtMakeResizeRequest %dx%d -> %dx%d (status %d)\n",
- askedHeight, askedWidth,
- replyHeight, replyWidth,
- status));
-
- if (status == XtGeometryYes ||
- status == XtGeometryDone) {
- ScreenResize(&termw->screen,
- replyWidth,
- replyHeight,
- &termw->flags);
- }
-#ifndef nothack
- /*
- * XtMakeResizeRequest() has the undesirable side-effect of clearing
- * the window manager's hints, even on a failed request. This would
- * presumably be fixed if the shell did its own work.
- */
- if (sizehints.flags
- && replyHeight
- && replyWidth) {
- sizehints.height = replyHeight;
- sizehints.width = replyWidth;
-
- TRACE(("%s@%d -- ", __FILE__, __LINE__));
- TRACE_HINTS(&sizehints);
- XSetWMNormalHints(screen->display, VShellWindow, &sizehints);
- TRACE(("%s@%d -- ", __FILE__, __LINE__));
- TRACE_WM_HINTS(termw);
- }
-#endif
-
- XSync(screen->display, False); /* synchronize */
- if (XtAppPending(app_con))
- xevents();
-}
-
-static String xterm_trans =
-"<ClientMessage>WM_PROTOCOLS: DeleteWindow()\n\
- <MappingNotify>: KeyboardMapping()\n";
-
-int
-VTInit(void)
-{
- TScreen *screen = &term->screen;
- Widget vtparent = SHELL_OF(term);
-
- XtRealizeWidget(vtparent);
- XtOverrideTranslations(vtparent, XtParseTranslationTable(xterm_trans));
- (void) XSetWMProtocols(XtDisplay(vtparent), XtWindow(vtparent),
- &wm_delete_window, 1);
- TRACE_TRANS("shell", vtparent);
- TRACE_TRANS("vt100", (Widget) (term));
-
- if (screen->allbuf == NULL)
- VTallocbuf();
- return (1);
-}
-
-static void
-VTallocbuf(void)
-{
- TScreen *screen = &term->screen;
- int nrows = MaxRows(screen);
-
- /* allocate screen buffer now, if necessary. */
- if (screen->scrollWidget)
- nrows += screen->savelines;
- screen->allbuf = Allocate(nrows, MaxCols(screen),
- &screen->sbuf_address);
- if (screen->scrollWidget)
- screen->visbuf = &screen->allbuf[MAX_PTRS * screen->savelines];
- else
- screen->visbuf = screen->allbuf;
- return;
-}
-
-static void
-VTClassInit(void)
-{
- XtAddConverter(XtRString, XtRGravity, XmuCvtStringToGravity,
- (XtConvertArgList) NULL, (Cardinal) 0);
-}
-
-/*
- * The whole wnew->screen struct is zeroed in VTInitialize. Use these macros
- * where applicable for copying the pieces from the request widget into the
- * new widget. We do not have to use them for wnew->misc, but the associated
- * traces are very useful for debugging.
- */
-#if OPT_TRACE
-#define init_Bres(name) \
- TRACE(("init " #name " = %s\n", \
- BtoS(wnew->name = request->name)))
-#define init_Dres(name) \
- TRACE(("init " #name " = %f\n", \
- wnew->name = request->name))
-#define init_Ires(name) \
- TRACE(("init " #name " = %d\n", \
- wnew->name = request->name))
-#define init_Sres(name) \
- TRACE(("init " #name " = \"%s\"\n", \
- (wnew->name = x_strtrim(request->name)) != NULL \
- ? wnew->name : "<null>"))
-#define init_Tres(offset) \
- TRACE(("init screen.Tcolors[" #offset "] = %#lx\n", \
- fill_Tres(wnew, request, offset)))
-#else
-#define init_Bres(name) wnew->name = request->name
-#define init_Dres(name) wnew->name = request->name
-#define init_Ires(name) wnew->name = request->name
-#define init_Sres(name) wnew->name = x_strtrim(request->name)
-#define init_Tres(offset) fill_Tres(wnew, request, offset)
-#endif
-
-#if OPT_COLOR_RES
-/*
- * Override the use of XtDefaultForeground/XtDefaultBackground to make some
- * colors, such as cursor color, use the actual foreground/background value
- * if there is no explicit resource value used.
- */
-static Pixel
-fill_Tres(XtermWidget target, XtermWidget source, int offset)
-{
- char *name;
- ScrnColors temp;
-
- target->screen.Tcolors[offset] = source->screen.Tcolors[offset];
- target->screen.Tcolors[offset].mode = False;
-
- if ((name = x_strtrim(target->screen.Tcolors[offset].resource)) != 0)
- target->screen.Tcolors[offset].resource = name;
-
- if (name == 0) {
- target->screen.Tcolors[offset].value = target->dft_foreground;
- } else if (!x_strcasecmp(name, XtDefaultForeground)) {
- target->screen.Tcolors[offset].value =
- ((offset == TEXT_FG || offset == TEXT_BG)
- ? target->dft_foreground
- : target->screen.Tcolors[TEXT_FG].value);
- } else if (!x_strcasecmp(name, XtDefaultBackground)) {
- target->screen.Tcolors[offset].value =
- ((offset == TEXT_FG || offset == TEXT_BG)
- ? target->dft_background
- : target->screen.Tcolors[TEXT_BG].value);
- } else {
- if (AllocateTermColor(target, &temp, offset, name)) {
- target->screen.Tcolors[offset].value = temp.colors[offset];
- }
- }
- return target->screen.Tcolors[offset].value;
-}
-#else
-#define fill_Tres(target, source, offset) \
- target->screen.Tcolors[offset] = source->screen.Tcolors[offset]
-#endif
-
-#if OPT_WIDE_CHARS
-static void
-VTInitialize_locale(XtermWidget request)
-{
- Bool is_utf8 = xtermEnvUTF8();
-
- TRACE(("VTInitialize_locale\n"));
- TRACE(("... request screen.utf8_mode = %d\n", request->screen.utf8_mode));
-
- if (request->screen.utf8_mode < 0)
- request->screen.utf8_mode = uFalse;
-
- if (request->screen.utf8_mode > 3)
- request->screen.utf8_mode = uDefault;
-
- request->screen.latin9_mode = 0;
- request->screen.unicode_font = 0;
-#if OPT_LUIT_PROG
- request->misc.callfilter = 0;
- request->misc.use_encoding = 0;
-
- TRACE(("... setup for luit:\n"));
- TRACE(("... request misc.locale_str = \"%s\"\n", request->misc.locale_str));
-
- if (request->screen.utf8_mode == uFalse) {
- TRACE(("... command-line +u8 overrides\n"));
- } else
-#if OPT_MINI_LUIT
- if (x_strcasecmp(request->misc.locale_str, "CHECKFONT") == 0) {
- int fl = (request->misc.default_font.f_n
- ? strlen(request->misc.default_font.f_n)
- : 0);
- if (fl > 11
- && x_strcasecmp(request->misc.default_font.f_n + fl - 11,
- "-ISO10646-1") == 0) {
- request->screen.unicode_font = 1;
- /* unicode font, use True */
-#ifdef HAVE_LANGINFO_CODESET
- if (!strcmp(xtermEnvEncoding(), "ANSI_X3.4-1968")
- || !strcmp(xtermEnvEncoding(), "ISO-8859-1")) {
- if (request->screen.utf8_mode == uDefault)
- request->screen.utf8_mode = uFalse;
- } else if (!strcmp(xtermEnvEncoding(), "ISO-8859-15")) {
- if (request->screen.utf8_mode == uDefault)
- request->screen.utf8_mode = uFalse;
- request->screen.latin9_mode = 1;
- } else {
- request->misc.callfilter = is_utf8 ? 0 : 1;
- request->screen.utf8_mode = uAlways;
- }
-#else
- request->misc.callfilter = is_utf8 ? 0 : 1;
- request->screen.utf8_mode = uAlways;
-#endif
- } else {
- /* other encoding, use False */
- if (request->screen.utf8_mode == uDefault) {
- request->screen.utf8_mode = is_utf8 ? uAlways : uFalse;
- }
- }
- } else
-#endif /* OPT_MINI_LUIT */
- if (x_strcasecmp(request->misc.locale_str, "TRUE") == 0 ||
- x_strcasecmp(request->misc.locale_str, "ON") == 0 ||
- x_strcasecmp(request->misc.locale_str, "YES") == 0 ||
- x_strcasecmp(request->misc.locale_str, "AUTO") == 0 ||
- strcmp(request->misc.locale_str, "1") == 0) {
- /* when true ... fully obeying LC_CTYPE locale */
- request->misc.callfilter = is_utf8 ? 0 : 1;
- request->screen.utf8_mode = uAlways;
- } else if (x_strcasecmp(request->misc.locale_str, "FALSE") == 0 ||
- x_strcasecmp(request->misc.locale_str, "OFF") == 0 ||
- x_strcasecmp(request->misc.locale_str, "NO") == 0 ||
- strcmp(request->misc.locale_str, "0") == 0) {
- /* when false ... original value of utf8_mode is effective */
- if (request->screen.utf8_mode == uDefault) {
- request->screen.utf8_mode = is_utf8 ? uAlways : uFalse;
- }
- } else if (x_strcasecmp(request->misc.locale_str, "MEDIUM") == 0 ||
- x_strcasecmp(request->misc.locale_str, "SEMIAUTO") == 0) {
- /* when medium ... obeying locale only for UTF-8 and Asian */
- if (is_utf8) {
- request->screen.utf8_mode = uAlways;
- } else if (
-#ifdef MB_CUR_MAX
- MB_CUR_MAX > 1 ||
-#else
- !strncmp(xtermEnvLocale(), "ja", 2) ||
- !strncmp(xtermEnvLocale(), "ko", 2) ||
- !strncmp(xtermEnvLocale(), "zh", 2) ||
-#endif
- !strncmp(xtermEnvLocale(), "th", 2) ||
- !strncmp(xtermEnvLocale(), "vi", 2)) {
- request->misc.callfilter = 1;
- request->screen.utf8_mode = uAlways;
- } else {
- request->screen.utf8_mode = uFalse;
- }
- } else if (x_strcasecmp(request->misc.locale_str, "UTF-8") == 0 ||
- x_strcasecmp(request->misc.locale_str, "UTF8") == 0) {
- /* when UTF-8 ... UTF-8 mode */
- request->screen.utf8_mode = uAlways;
- } else {
- /* other words are regarded as encoding name passed to luit */
- request->misc.callfilter = 1;
- request->screen.utf8_mode = uAlways;
- request->misc.use_encoding = 1;
- }
- TRACE(("... updated misc.callfilter = %s\n", BtoS(request->misc.callfilter)));
- TRACE(("... updated misc.use_encoding = %s\n", BtoS(request->misc.use_encoding)));
-#else
- if (request->screen.utf8_mode == uDefault) {
- request->screen.utf8_mode = is_utf8 ? uAlways : uFalse;
- }
-#endif /* OPT_LUIT_PROG */
-
- request->screen.utf8_inparse = (request->screen.utf8_mode != uFalse);
-
- TRACE(("... updated screen.utf8_mode = %d\n", request->screen.utf8_mode));
- TRACE(("...VTInitialize_locale done\n"));
-}
-#endif
-
-/* ARGSUSED */
-static void
-VTInitialize(Widget wrequest,
- Widget new_arg,
- ArgList args GCC_UNUSED,
- Cardinal *num_args GCC_UNUSED)
-{
- XtermWidget request = (XtermWidget) wrequest;
- XtermWidget wnew = (XtermWidget) new_arg;
- Widget my_parent = SHELL_OF(wnew);
- int i;
- char *s;
-
-#if OPT_ISO_COLORS
- Bool color_ok;
-#endif
-
-#if OPT_COLOR_RES2 && (MAXCOLORS > MIN_ANSI_COLORS)
- static XtResource fake_resources[] =
- {
-#if OPT_256_COLORS
-# include <256colres.h>
-#elif OPT_88_COLORS
-# include <88colres.h>
-#endif
- };
-#endif /* OPT_COLOR_RES2 */
-
- TRACE(("VTInitialize\n"));
-
- /* Zero out the entire "screen" component of "wnew" widget, then do
- * field-by-field assignment of "screen" fields that are named in the
- * resource list.
- */
- bzero((char *) &wnew->screen, sizeof(wnew->screen));
-
- /* dummy values so that we don't try to Realize the parent shell with height
- * or width of 0, which is illegal in X. The real size is computed in the
- * xtermWidget's Realize proc, but the shell's Realize proc is called first,
- * and must see a valid size.
- */
- wnew->core.height = wnew->core.width = 1;
-
- /*
- * The definition of -rv now is that it changes the definition of
- * XtDefaultForeground and XtDefaultBackground. So, we no longer
- * need to do anything special.
- */
- wnew->screen.display = wnew->core.screen->display;
-
- /*
- * We use the default foreground/background colors to compare/check if a
- * color-resource has been set.
- */
-#define MyBlackPixel(dpy) BlackPixel(dpy,DefaultScreen(dpy))
-#define MyWhitePixel(dpy) WhitePixel(dpy,DefaultScreen(dpy))
-
- if (request->misc.re_verse) {
- wnew->dft_foreground = MyWhitePixel(wnew->screen.display);
- wnew->dft_background = MyBlackPixel(wnew->screen.display);
- } else {
- wnew->dft_foreground = MyBlackPixel(wnew->screen.display);
- wnew->dft_background = MyWhitePixel(wnew->screen.display);
- }
- init_Tres(TEXT_FG);
- init_Tres(TEXT_BG);
-
- TRACE(("Color resource initialization:\n"));
- TRACE((" Default foreground %#lx\n", wnew->dft_foreground));
- TRACE((" Default background %#lx\n", wnew->dft_background));
- TRACE((" Screen foreground %#lx\n", T_COLOR(&(wnew->screen), TEXT_FG)));
- TRACE((" Screen background %#lx\n", T_COLOR(&(wnew->screen), TEXT_BG)));
-
- wnew->screen.mouse_button = -1;
- wnew->screen.mouse_row = -1;
- wnew->screen.mouse_col = -1;
-
-#if OPT_BOX_CHARS
- init_Bres(screen.force_box_chars);
- init_Bres(screen.force_all_chars);
-#endif
- init_Bres(screen.free_bold_box);
-
- init_Bres(screen.c132);
- init_Bres(screen.curses);
- init_Bres(screen.hp_ll_bc);
-#if OPT_XMC_GLITCH
- init_Ires(screen.xmc_glitch);
- init_Ires(screen.xmc_attributes);
- init_Bres(screen.xmc_inline);
- init_Bres(screen.move_sgr_ok);
-#endif
-#if OPT_BLINK_CURS
- init_Bres(screen.cursor_blink);
- init_Ires(screen.blink_on);
- init_Ires(screen.blink_off);
- wnew->screen.cursor_blink_res = wnew->screen.cursor_blink;
-#endif
-#if OPT_BLINK_TEXT
- init_Ires(screen.blink_as_bold);
-#endif
- init_Ires(screen.border);
- init_Bres(screen.jumpscroll);
- init_Bres(screen.old_fkeys);
- init_Bres(screen.delete_is_del);
- wnew->keyboard.type = wnew->screen.old_fkeys
- ? keyboardIsLegacy
- : keyboardIsDefault;
-#ifdef ALLOWLOGGING
- init_Sres(screen.logfile);
-#endif
- init_Bres(screen.bellOnReset);
- init_Bres(screen.marginbell);
- init_Bres(screen.multiscroll);
- init_Ires(screen.nmarginbell);
- init_Ires(screen.savelines);
- init_Ires(screen.scrollBarBorder);
- init_Ires(screen.scrolllines);
- init_Bres(screen.scrollttyoutput);
- init_Bres(screen.scrollkey);
-
- init_Sres(screen.term_id);
- for (s = request->screen.term_id; *s; s++) {
- if (!isalpha(CharOf(*s)))
- break;
- }
- wnew->screen.terminal_id = atoi(s);
- if (wnew->screen.terminal_id < MIN_DECID)
- wnew->screen.terminal_id = MIN_DECID;
- if (wnew->screen.terminal_id > MAX_DECID)
- wnew->screen.terminal_id = MAX_DECID;
- TRACE(("term_id '%s' -> terminal_id %d\n",
- wnew->screen.term_id,
- wnew->screen.terminal_id));
-
- wnew->screen.vtXX_level = (wnew->screen.terminal_id / 100);
- init_Bres(screen.visualbell);
- init_Ires(screen.visualBellDelay);
- init_Bres(screen.poponbell);
- init_Ires(misc.limit_resize);
-#if OPT_NUM_LOCK
- init_Bres(misc.real_NumLock);
- init_Bres(misc.alwaysUseMods);
- wnew->misc.num_lock = 0;
- wnew->misc.alt_left = 0;
- wnew->misc.alt_right = 0;
- wnew->misc.meta_trans = False;
- wnew->misc.meta_left = 0;
- wnew->misc.meta_right = 0;
-#endif
-#if OPT_SHIFT_FONTS
- init_Bres(misc.shift_fonts);
-#endif
-#if OPT_SUNPC_KBD
- init_Ires(misc.ctrl_fkeys);
-#endif
-#if OPT_TEK4014
- init_Bres(misc.tekInhibit);
- init_Bres(misc.tekSmall);
- init_Bres(screen.TekEmu);
-#endif
-#if OPT_TCAP_QUERY
- wnew->screen.tc_query = -1;
-#endif
- wnew->misc.re_verse0 = request->misc.re_verse;
- init_Bres(misc.re_verse);
- init_Ires(screen.multiClickTime);
- init_Ires(screen.bellSuppressTime);
- init_Sres(screen.charClass);
- init_Bres(screen.cutNewline);
- init_Bres(screen.cutToBeginningOfLine);
- init_Bres(screen.highlight_selection);
- init_Bres(screen.trim_selection);
- init_Bres(screen.i18nSelections);
- init_Bres(screen.brokenSelections);
- init_Bres(screen.always_highlight);
- wnew->screen.pointer_cursor = request->screen.pointer_cursor;
-
- init_Sres(screen.answer_back);
-
- init_Sres(screen.printer_command);
- init_Bres(screen.printer_autoclose);
- init_Bres(screen.printer_extent);
- init_Bres(screen.printer_formfeed);
- init_Ires(screen.printer_controlmode);
-#if OPT_PRINT_COLORS
- init_Ires(screen.print_attributes);
-#endif
-
- init_Sres(screen.keyboard_dialect);
-
- init_Bres(screen.input_eight_bits);
- init_Bres(screen.output_eight_bits);
- init_Bres(screen.control_eight_bits);
- init_Bres(screen.backarrow_key);
- init_Bres(screen.meta_sends_esc);
-
- init_Bres(screen.allowSendEvent0);
- init_Bres(screen.allowWindowOp0);
-
- /* make a copy so that editres cannot change the resource after startup */
- wnew->screen.allowSendEvents = wnew->screen.allowSendEvent0;
- wnew->screen.allowWindowOps = wnew->screen.allowWindowOp0;
-
-#ifndef NO_ACTIVE_ICON
- wnew->screen.fnt_icon = request->screen.fnt_icon;
- init_Bres(misc.active_icon);
- init_Ires(misc.icon_border_width);
- wnew->misc.icon_border_pixel = request->misc.icon_border_pixel;
-#endif /* NO_ACTIVE_ICON */
- init_Bres(misc.titeInhibit);
- init_Bres(misc.tiXtraScroll);
- init_Bres(misc.dynamicColors);
- for (i = fontMenu_font1; i <= fontMenu_lastBuiltin; i++) {
- init_Sres(screen.MenuFontName(i));
- }
- /* set default in realize proc */
- wnew->screen.MenuFontName(fontMenu_fontdefault) = NULL;
- wnew->screen.MenuFontName(fontMenu_fontescape) = NULL;
- wnew->screen.MenuFontName(fontMenu_fontsel) = NULL;
- wnew->screen.menu_font_number = fontMenu_fontdefault;
-
-#if OPT_BROKEN_OSC
- init_Bres(screen.brokenLinuxOSC);
-#endif
-
-#if OPT_BROKEN_ST
- init_Bres(screen.brokenStringTerm);
-#endif
-
-#if OPT_C1_PRINT
- init_Bres(screen.c1_printable);
-#endif
-
-#if OPT_DEC_CHRSET
- init_Bres(screen.font_doublesize);
- init_Ires(screen.cache_doublesize);
- if (wnew->screen.cache_doublesize > NUM_CHRSET)
- wnew->screen.cache_doublesize = NUM_CHRSET;
- if (wnew->screen.cache_doublesize == 0)
- wnew->screen.font_doublesize = False;
- TRACE(("Doublesize%s enabled, up to %d fonts\n",
- wnew->screen.font_doublesize ? "" : " not",
- wnew->screen.cache_doublesize));
-#endif
-
-#if OPT_ISO_COLORS || OPT_DEC_CHRSET || OPT_WIDE_CHARS
- wnew->num_ptrs = (OFF_ATTRS + 1); /* OFF_FLAGS, OFF_CHARS, OFF_ATTRS */
-#endif
-#if OPT_ISO_COLORS
- init_Ires(screen.veryBoldColors);
- init_Bres(screen.boldColors);
- init_Bres(screen.colorAttrMode);
- init_Bres(screen.colorBDMode);
- init_Bres(screen.colorBLMode);
- init_Bres(screen.colorMode);
- init_Bres(screen.colorULMode);
- init_Bres(screen.italicULMode);
- init_Bres(screen.colorRVMode);
-
- for (i = 0, color_ok = False; i < MAXCOLORS; i++) {
-
-#if OPT_COLOR_RES2 && (MAXCOLORS > MIN_ANSI_COLORS)
- /*
- * Xt has a hardcoded limit on the maximum number of resources that can
- * be used in a widget. If we configure both luit (which implies
- * wide-characters) and 256-colors, it goes over that limit. Most
- * people would not need a resource-file with 256-colors; the default
- * values in our table are sufficient. In that case, fake the resource
- * setting by copying the default value from the table. The #define's
- * can be overridden to make these true resources.
- */
- if (i >= MIN_ANSI_COLORS && i < NUM_ANSI_COLORS) {
- wnew->screen.Acolors[i].resource
- = ((char *) fake_resources[i - MIN_ANSI_COLORS].default_addr);
- if (wnew->screen.Acolors[i].resource == 0)
- wnew->screen.Acolors[i].resource = XtDefaultForeground;
- } else
-#endif /* OPT_COLOR_RES2 */
- wnew->screen.Acolors[i] = request->screen.Acolors[i];
-
-#if OPT_COLOR_RES
- TRACE(("Acolors[%d] = %s\n", i, wnew->screen.Acolors[i].resource));
- wnew->screen.Acolors[i].mode = False;
- if (!x_strcasecmp(wnew->screen.Acolors[i].resource, XtDefaultForeground)) {
- wnew->screen.Acolors[i].value = T_COLOR(&(wnew->screen), TEXT_FG);
- wnew->screen.Acolors[i].mode = True;
- } else if (!x_strcasecmp(wnew->screen.Acolors[i].resource, XtDefaultBackground)) {
- wnew->screen.Acolors[i].value = T_COLOR(&(wnew->screen), TEXT_BG);
- wnew->screen.Acolors[i].mode = True;
- } else {
- color_ok = True;
- }
-#else
- TRACE(("Acolors[%d] = %#lx\n", i, request->screen.Acolors[i]));
- if (wnew->screen.Acolors[i] != wnew->dft_foreground &&
- wnew->screen.Acolors[i] != T_COLOR(&(wnew->screen), TEXT_FG) &&
- wnew->screen.Acolors[i] != T_COLOR(&(wnew->screen), TEXT_BG))
- color_ok = True;
-#endif
- }
-
- /*
- * Check if we're trying to use color in a monochrome screen. Disable
- * color in that case, since that would make ANSI colors unusable. A 4-bit
- * or 8-bit display is usable, so we do not have to check for anything more
- * specific.
- */
- if (color_ok) {
- Display *display = wnew->screen.display;
- XVisualInfo myTemplate, *visInfoPtr;
- int numFound;
-
- myTemplate.visualid = XVisualIDFromVisual(DefaultVisual(display,
- XDefaultScreen(display)));
- visInfoPtr = XGetVisualInfo(display, (long) VisualIDMask,
- &myTemplate, &numFound);
- if (visInfoPtr == 0
- || numFound == 0
- || visInfoPtr->depth <= 1) {
- TRACE(("disabling color since screen is monochrome\n"));
- color_ok = False;
- } else {
- XFree(visInfoPtr);
- }
- }
-
- /* If none of the colors are anything other than the foreground or
- * background, we'll assume this isn't color, no matter what the colorMode
- * resource says. (There doesn't seem to be any good way to determine if
- * the resource lookup failed versus the user having misconfigured this).
- */
- if (!color_ok) {
- wnew->screen.colorMode = False;
- TRACE(("All colors are foreground or background: disable colorMode\n"));
- }
-#if OPT_EXT_COLORS
- wnew->num_ptrs = (OFF_BGRND + 1);
-#else
- wnew->num_ptrs = (OFF_COLOR + 1);
-#endif
- wnew->sgr_foreground = -1;
- wnew->sgr_background = -1;
- wnew->sgr_extended = 0;
-#endif /* OPT_ISO_COLORS */
-
- init_Tres(MOUSE_FG);
- init_Tres(MOUSE_BG);
- init_Tres(TEXT_CURSOR);
-#if OPT_HIGHLIGHT_COLOR
- init_Tres(HIGHLIGHT_BG);
-#endif
-
-#if OPT_TEK4014
- /*
- * The Tek4014 window has no separate resources for foreground, background
- * and cursor color. Since xterm always creates the vt100 widget first, we
- * can set the Tektronix colors here. That lets us use escape sequences to
- * set its dynamic colors and get consistent behavior whether or not the
- * window is displayed.
- */
- T_COLOR(&(wnew->screen), TEK_BG) = T_COLOR(&(wnew->screen), TEXT_BG);
- T_COLOR(&(wnew->screen), TEK_FG) = T_COLOR(&(wnew->screen), TEXT_FG);
- T_COLOR(&(wnew->screen), TEK_CURSOR) = T_COLOR(&(wnew->screen), TEXT_CURSOR);
-#endif
-
-#if OPT_DEC_CHRSET
- wnew->num_ptrs = (OFF_CSETS + 1);
-#endif
-
-#if OPT_WIDE_CHARS
- VTInitialize_locale(request);
-
-#if OPT_LUIT_PROG
- init_Bres(misc.callfilter);
- init_Bres(misc.use_encoding);
- init_Sres(misc.locale_str);
- init_Sres(misc.localefilter);
-#endif
-
-#if OPT_RENDERFONT
- init_Dres(misc.face_size);
- init_Sres(misc.face_name);
- init_Sres(misc.face_wide_name);
- init_Bres(misc.render_font);
- /* minor tweak to make debug traces consistent: */
- if (wnew->misc.render_font) {
- if (wnew->misc.face_name == 0) {
- wnew->misc.render_font = False;
- TRACE(("reset render_font since there is no face_name\n"));
- }
- }
-#endif
-
- init_Bres(screen.vt100_graphics);
- init_Ires(screen.utf8_mode);
- init_Bres(screen.wide_chars);
- init_Bres(misc.mk_width);
- init_Bres(misc.cjk_width);
- if (request->screen.utf8_mode) {
- TRACE(("setting wide_chars on\n"));
- wnew->screen.wide_chars = True;
- } else {
- TRACE(("setting utf8_mode to 0\n"));
- wnew->screen.utf8_mode = uFalse;
- }
- TRACE(("initialized UTF-8 mode to %d\n", wnew->screen.utf8_mode));
-
-#if OPT_MINI_LUIT
- if (request->screen.latin9_mode) {
- wnew->screen.latin9_mode = True;
- }
- if (request->screen.unicode_font) {
- wnew->screen.unicode_font = True;
- }
- TRACE(("initialized Latin9 mode to %d\n", wnew->screen.latin9_mode));
- TRACE(("initialized unicode_font to %d\n", wnew->screen.unicode_font));
-#endif
-
- if (wnew->screen.wide_chars != False)
- wnew->num_ptrs = (OFF_COM2H + 1);
-
- decode_wcwidth((wnew->misc.cjk_width ? 2 : 0)
- + (wnew->misc.mk_width ? 1 : 0)
- + 1);
-#endif /* OPT_WIDE_CHARS */
-
- init_Bres(screen.bold_mode);
- init_Bres(screen.underline);
-
- wnew->cur_foreground = 0;
- wnew->cur_background = 0;
-
- wnew->keyboard.flags = MODE_SRM;
- if (wnew->screen.backarrow_key)
- wnew->keyboard.flags |= MODE_DECBKM;
- TRACE(("initialized DECBKM %s\n",
- BtoS(wnew->keyboard.flags & MODE_DECBKM)));
-
- /* look for focus related events on the shell, because we need
- * to care about the shell's border being part of our focus.
- */
- XtAddEventHandler(my_parent, EnterWindowMask, False,
- HandleEnterWindow, (Opaque) NULL);
- XtAddEventHandler(my_parent, LeaveWindowMask, False,
- HandleLeaveWindow, (Opaque) NULL);
- XtAddEventHandler(my_parent, FocusChangeMask, False,
- HandleFocusChange, (Opaque) NULL);
- XtAddEventHandler((Widget) wnew, 0L, True,
- VTNonMaskableEvent, (Opaque) NULL);
- XtAddEventHandler((Widget) wnew, PropertyChangeMask, False,
- HandleBellPropertyChange, (Opaque) NULL);
-
-#if HANDLE_STRUCT_NOTIFY
-#if OPT_TOOLBAR
- wnew->VT100_TB_INFO(menu_bar) = request->VT100_TB_INFO(menu_bar);
- init_Ires(VT100_TB_INFO(menu_height));
-#else
- /* Flag icon name with "***" on window output when iconified.
- * Put in a handler that will tell us when we get Map/Unmap events.
- */
- if (zIconBeep)
-#endif
- XtAddEventHandler(my_parent, StructureNotifyMask, False,
- HandleStructNotify, (Opaque) 0);
-#endif /* HANDLE_STRUCT_NOTIFY */
-
- wnew->screen.bellInProgress = False;
-
- set_character_class(wnew->screen.charClass);
-
- /* create it, but don't realize it */
- ScrollBarOn(wnew, True, False);
-
- /* make sure that the resize gravity acceptable */
- if (wnew->misc.resizeGravity != NorthWestGravity &&
- wnew->misc.resizeGravity != SouthWestGravity) {
- Cardinal nparams = 1;
-
- XtAppWarningMsg(app_con, "rangeError", "resizeGravity", "XTermError",
- "unsupported resizeGravity resource value (%d)",
- (String *) & (wnew->misc.resizeGravity), &nparams);
- wnew->misc.resizeGravity = SouthWestGravity;
- }
-#ifndef NO_ACTIVE_ICON
- wnew->screen.whichVwin = &wnew->screen.fullVwin;
-#if OPT_TEK4014
- wnew->screen.whichTwin = &wnew->screen.fullTwin;
-#endif
-#endif /* NO_ACTIVE_ICON */
-
- if (wnew->screen.savelines < 0)
- wnew->screen.savelines = 0;
-
- init_Bres(screen.awaitInput);
-
- wnew->flags = 0;
- if (!wnew->screen.jumpscroll)
- wnew->flags |= SMOOTHSCROLL;
- if (wnew->misc.reverseWrap)
- wnew->flags |= REVERSEWRAP;
- if (wnew->misc.autoWrap)
- wnew->flags |= WRAPAROUND;
- if (wnew->misc.re_verse != wnew->misc.re_verse0)
- wnew->flags |= REVERSE_VIDEO;
- if (wnew->screen.c132)
- wnew->flags |= IN132COLUMNS;
-
- wnew->initflags = wnew->flags;
-
- init_Ires(keyboard.modify_cursor_keys);
-
- init_Ires(misc.appcursorDefault);
- if (wnew->misc.appcursorDefault)
- wnew->keyboard.flags |= MODE_DECCKM;
-
- init_Ires(misc.appkeypadDefault);
- if (wnew->misc.appkeypadDefault)
- wnew->keyboard.flags |= MODE_DECKPAM;
-
- return;
-}
-
-static void
-VTDestroy(Widget w)
-{
- XtFree((char *) (((XtermWidget) w)->screen.selection_data));
-}
-
-/*ARGSUSED*/
-static void
-VTRealize(Widget w,
- XtValueMask * valuemask,
- XSetWindowAttributes * values)
-{
- XtermWidget xw = (XtermWidget) w;
- TScreen *screen = &xw->screen;
-
- unsigned width, height;
- int xpos, ypos, pr;
- XSizeHints sizehints;
- Atom pid_atom;
-
- TRACE(("VTRealize\n"));
-
- TabReset(xw->tabs);
-
- screen->MenuFontName(fontMenu_fontdefault) = xw->misc.default_font.f_n;
- screen->fnt_norm = NULL;
- screen->fnt_bold = NULL;
-#if OPT_WIDE_CHARS
- screen->fnt_dwd = NULL;
- screen->fnt_dwdb = NULL;
-#endif
- if (!xtermLoadFont(xw,
- &(xw->misc.default_font),
- False, 0)) {
- if (XmuCompareISOLatin1(xw->misc.default_font.f_n, "fixed") != 0) {
- fprintf(stderr,
- "%s: unable to open font \"%s\", trying \"fixed\"....\n",
- xterm_name, xw->misc.default_font.f_n);
- (void) xtermLoadFont(xw,
- xtermFontName("fixed"),
- False, 0);
- screen->MenuFontName(fontMenu_fontdefault) = "fixed";
- }
- }
-
- /* really screwed if we couldn't open default font */
- if (!screen->fnt_norm) {
- fprintf(stderr, "%s: unable to locate a suitable font\n",
- xterm_name);
- Exit(1);
- }
-#if OPT_WIDE_CHARS
- if (xw->screen.utf8_mode) {
- TRACE(("check if this is a wide font, if not try again\n"));
- if (xtermLoadWideFonts(xw, False))
- SetVTFont(xw, screen->menu_font_number, TRUE, NULL);
- }
-#endif
-
- /* making cursor */
- if (!screen->pointer_cursor) {
- screen->pointer_cursor =
- make_colored_cursor(XC_xterm,
- T_COLOR(screen, MOUSE_FG),
- T_COLOR(screen, MOUSE_BG));
- } else {
- recolor_cursor(screen->pointer_cursor,
- T_COLOR(screen, MOUSE_FG),
- T_COLOR(screen, MOUSE_BG));
- }
-
- /* set defaults */
- xpos = 1;
- ypos = 1;
- width = 80;
- height = 24;
-
- TRACE(("parsing geo_metry %s\n", NonNull(xw->misc.geo_metry)));
- pr = XParseGeometry(xw->misc.geo_metry, &xpos, &ypos,
- &width, &height);
- TRACE(("... position %d,%d size %dx%d\n", ypos, xpos, height, width));
-
- set_max_col(screen, (int) (width - 1)); /* units in character cells */
- set_max_row(screen, (int) (height - 1)); /* units in character cells */
- xtermUpdateFontInfo(xw, False);
-
- width = screen->fullVwin.fullwidth;
- height = screen->fullVwin.fullheight;
-
- TRACE(("... border widget %d parent %d shell %d\n",
- BorderWidth(xw),
- BorderWidth(XtParent(xw)),
- BorderWidth(SHELL_OF(xw))));
-
- if ((pr & XValue) && (XNegative & pr)) {
- xpos += DisplayWidth(screen->display, DefaultScreen(screen->display))
- - width - (BorderWidth(XtParent(xw)) * 2);
- }
- if ((pr & YValue) && (YNegative & pr)) {
- ypos += DisplayHeight(screen->display, DefaultScreen(screen->display))
- - height - (BorderWidth(XtParent(xw)) * 2);
- }
-
- /* set up size hints for window manager; min 1 char by 1 char */
- bzero(&sizehints, sizeof(sizehints));
- xtermSizeHints(xw, &sizehints, (xw->misc.scrollbar
- ? (screen->scrollWidget->core.width
- + BorderWidth(screen->scrollWidget))
- : 0));
-
- sizehints.x = xpos;
- sizehints.y = ypos;
- if ((XValue & pr) || (YValue & pr)) {
- sizehints.flags |= USSize | USPosition;
- sizehints.flags |= PWinGravity;
- switch (pr & (XNegative | YNegative)) {
- case 0:
- sizehints.win_gravity = NorthWestGravity;
- break;
- case XNegative:
- sizehints.win_gravity = NorthEastGravity;
- break;
- case YNegative:
- sizehints.win_gravity = SouthWestGravity;
- break;
- default:
- sizehints.win_gravity = SouthEastGravity;
- break;
- }
- } else {
- /* set a default size, but do *not* set position */
- sizehints.flags |= PSize;
- }
- sizehints.height = sizehints.base_height
- + sizehints.height_inc * MaxRows(screen);
- sizehints.width = sizehints.base_width
- + sizehints.width_inc * MaxCols(screen);
-
- if ((WidthValue & pr) || (HeightValue & pr))
- sizehints.flags |= USSize;
- else
- sizehints.flags |= PSize;
-
- /*
- * Note that the size-hints are for the shell, while the resize-request
- * is for the vt100 widget. They are not the same size.
- */
- TRACE(("make resize request %dx%d\n", height, width));
- (void) XtMakeResizeRequest((Widget) xw,
- (Dimension) width, (Dimension) height,
- &xw->core.width, &xw->core.height);
- TRACE(("...made resize request %dx%d\n", xw->core.height, xw->core.width));
-
- /* XXX This is bogus. We are parsing geometries too late. This
- * is information that the shell widget ought to have before we get
- * realized, so that it can do the right thing.
- */
- if (sizehints.flags & USPosition)
- XMoveWindow(XtDisplay(xw), XtWindow(SHELL_OF(xw)),
- sizehints.x, sizehints.y);
-
- TRACE(("%s@%d -- ", __FILE__, __LINE__));
- TRACE_HINTS(&sizehints);
- XSetWMNormalHints(XtDisplay(xw), XtWindow(SHELL_OF(xw)), &sizehints);
- TRACE(("%s@%d -- ", __FILE__, __LINE__));
- TRACE_WM_HINTS(xw);
-
- if ((pid_atom = XInternAtom(XtDisplay(xw), "_NET_WM_PID", False)) != None) {
- /* XChangeProperty format 32 really is "long" */
- unsigned long pid_l = (unsigned long) getpid();
- TRACE(("Setting _NET_WM_PID property to %lu\n", pid_l));
- XChangeProperty(XtDisplay(xw), VShellWindow,
- pid_atom, XA_CARDINAL, 32, PropModeReplace,
- (unsigned char *) &pid_l, 1);
- }
-
- XFlush(XtDisplay(xw)); /* get it out to window manager */
-
- /* use ForgetGravity instead of SouthWestGravity because translating
- the Expose events for ConfigureNotifys is too hard */
- values->bit_gravity = ((xw->misc.resizeGravity == NorthWestGravity)
- ? NorthWestGravity
- : ForgetGravity);
- xw->screen.fullVwin.window = XtWindow(xw) =
- XCreateWindow(XtDisplay(xw), XtWindow(XtParent(xw)),
- xw->core.x, xw->core.y,
- xw->core.width, xw->core.height, BorderWidth(xw),
- (int) xw->core.depth,
- InputOutput, CopyFromParent,
- *valuemask | CWBitGravity, values);
- screen->event_mask = values->event_mask;
-
-#ifndef NO_ACTIVE_ICON
- if (xw->misc.active_icon && screen->fnt_icon) {
- int iconX = 0, iconY = 0;
- Widget shell = SHELL_OF(xw);
- unsigned long mask;
- XGCValues xgcv;
-
- TRACE(("Initializing active-icon\n"));
- XtVaGetValues(shell, XtNiconX, &iconX, XtNiconY, &iconY, (XtPointer) 0);
- xtermComputeFontInfo(xw, &(screen->iconVwin), screen->fnt_icon, 0);
-
- /* since only one client is permitted to select for Button
- * events, we have to let the window manager get 'em...
- */
- values->event_mask &= ~(ButtonPressMask | ButtonReleaseMask);
- values->border_pixel = xw->misc.icon_border_pixel;
-
- screen->iconVwin.window =
- XCreateWindow(XtDisplay(xw),
- RootWindowOfScreen(XtScreen(shell)),
- iconX, iconY,
- screen->iconVwin.fullwidth,
- screen->iconVwin.fullheight,
- xw->misc.icon_border_width,
- (int) xw->core.depth,
- InputOutput, CopyFromParent,
- *valuemask | CWBitGravity | CWBorderPixel,
- values);
- XtVaSetValues(shell,
- XtNiconWindow, screen->iconVwin.window,
- (XtPointer) 0);
- XtRegisterDrawable(XtDisplay(xw), screen->iconVwin.window, w);
-
- mask = (GCFont | GCForeground | GCBackground |
- GCGraphicsExposures | GCFunction);
-
- xgcv.font = screen->fnt_icon->fid;
- xgcv.foreground = T_COLOR(screen, TEXT_FG);
- xgcv.background = T_COLOR(screen, TEXT_BG);
- xgcv.graphics_exposures = True; /* default */
- xgcv.function = GXcopy;
-
- screen->iconVwin.normalGC =
- screen->iconVwin.normalboldGC =
- XtGetGC(shell, mask, &xgcv);
-
- xgcv.foreground = T_COLOR(screen, TEXT_BG);
- xgcv.background = T_COLOR(screen, TEXT_FG);
-
- screen->iconVwin.reverseGC =
- screen->iconVwin.reverseboldGC =
- XtGetGC(shell, mask, &xgcv);
-#if OPT_TOOLBAR
- /*
- * Toolbar is initialized before we get here. Enable the menu item
- * and set it properly.
- */
- set_sensitivity(mw,
- vtMenuEntries[vtMenu_activeicon].widget,
- True);
- update_activeicon();
-#endif
- } else {
- TRACE(("Disabled active-icon\n"));
- xw->misc.active_icon = False;
- }
-#endif /* NO_ACTIVE_ICON */
-
-#if OPT_I18N_SUPPORT && OPT_INPUT_METHOD
- VTInitI18N();
-#else
- xw->screen.xic = NULL;
-#endif
-#if OPT_NUM_LOCK
- VTInitModifiers();
-#endif
-
- set_cursor_gcs(screen);
-
- /* Reset variables used by ANSI emulation. */
-
- resetCharsets(screen);
-
- XDefineCursor(screen->display, VShellWindow, screen->pointer_cursor);
-
- set_cur_col(screen, 0);
- set_cur_row(screen, 0);
- set_max_col(screen, Width(screen) / screen->fullVwin.f_width - 1);
- set_max_row(screen, Height(screen) / screen->fullVwin.f_height - 1);
- set_tb_margins(screen, 0, screen->max_row);
-
- memset(screen->sc, 0, sizeof(screen->sc));
-
- /* Mark screen buffer as unallocated. We wait until the run loop so
- that the child process does not fork and exec with all the dynamic
- memory it will never use. If we were to do it here, the
- swap space for new process would be huge for huge savelines. */
-#if OPT_TEK4014
- if (!tekWidget) /* if not called after fork */
-#endif
- screen->visbuf = screen->allbuf = NULL;
-
- screen->do_wrap = 0;
- screen->scrolls = screen->incopy = 0;
- xtermSetCursorBox(screen);
-
- screen->savedlines = 0;
-
- if (xw->misc.scrollbar) {
- screen->fullVwin.sb_info.width = 0;
- ScrollBarOn(xw, False, True);
- }
- CursorSave(xw);
- return;
-}
-
-#if OPT_I18N_SUPPORT && OPT_INPUT_METHOD
-
-/* limit this feature to recent XFree86 since X11R6.x core dumps */
-#if defined(XtSpecificationRelease) && XtSpecificationRelease >= 6 && defined(X_HAVE_UTF8_STRING)
-#define USE_XIM_INSTANTIATE_CB
-
-static void
-xim_instantiate_cb(Display * display,
- XPointer client_data GCC_UNUSED,
- XPointer call_data GCC_UNUSED)
-{
- if (display != XtDisplay(term))
- return;
-
- VTInitI18N();
-}
-
-static void
-xim_destroy_cb(XIM im GCC_UNUSED,
- XPointer client_data GCC_UNUSED,
- XPointer call_data GCC_UNUSED)
-{
- term->screen.xic = NULL;
-
- XRegisterIMInstantiateCallback(XtDisplay(term), NULL, NULL, NULL,
- xim_instantiate_cb, NULL);
-}
-#endif /* X11R6+ */
-
-static void
-xim_real_init(void)
-{
- unsigned i, j;
- char *p, *s, *t, *ns, *end, buf[32];
- XIMStyles *xim_styles;
- XIMStyle input_style = 0;
- Bool found;
- static struct {
- char *name;
- unsigned long code;
- } known_style[] = {
- {
- "OverTheSpot", (XIMPreeditPosition | XIMStatusNothing)
- },
- {
- "OffTheSpot", (XIMPreeditArea | XIMStatusArea)
- },
- {
- "Root", (XIMPreeditNothing | XIMStatusNothing)
- },
- };
-
- term->screen.xic = NULL;
-
- if (term->misc.cannot_im) {
- return;
- }
-
- if (!term->misc.input_method || !*term->misc.input_method) {
- if ((p = XSetLocaleModifiers("")) != NULL && *p)
- term->screen.xim = XOpenIM(XtDisplay(term), NULL, NULL, NULL);
- } else {
- s = term->misc.input_method;
- i = 5 + strlen(s);
- t = (char *) MyStackAlloc(i, buf);
- if (t == NULL)
- SysError(ERROR_VINIT);
-
- for (ns = s; ns && *s;) {
- while (*s && isspace(CharOf(*s)))
- s++;
- if (!*s)
- break;
- if ((ns = end = strchr(s, ',')) == 0)
- end = s + strlen(s);
- while ((end != s) && isspace(CharOf(end[-1])))
- end--;
-
- if (end != s) {
- strcpy(t, "@im=");
- strncat(t, s, (unsigned) (end - s));
-
- if ((p = XSetLocaleModifiers(t)) != 0 && *p
- && (term->screen.xim = XOpenIM(XtDisplay(term),
- NULL,
- NULL,
- NULL)) != 0)
- break;
-
- }
- s = ns + 1;
- }
- MyStackFree(t, buf);
- }
-
- if (term->screen.xim == NULL
- && (p = XSetLocaleModifiers("@im=none")) != NULL
- && *p) {
- term->screen.xim = XOpenIM(XtDisplay(term), NULL, NULL, NULL);
- }
-
- if (!term->screen.xim) {
- fprintf(stderr, "Failed to open input method\n");
- return;
- }
- TRACE(("VTInitI18N opened input method\n"));
-
- if (XGetIMValues(term->screen.xim, XNQueryInputStyle, &xim_styles, NULL)
- || !xim_styles
- || !xim_styles->count_styles) {
- fprintf(stderr, "input method doesn't support any style\n");
- XCloseIM(term->screen.xim);
- term->misc.cannot_im = True;
- return;
- }
-
- found = False;
- for (s = term->misc.preedit_type; s && !found;) {
- while (*s && isspace(CharOf(*s)))
- s++;
- if (!*s)
- break;
- if ((ns = end = strchr(s, ',')) != 0)
- ns++;
- else
- end = s + strlen(s);
- while ((end != s) && isspace(CharOf(end[-1])))
- end--;
-
- if (end != s) { /* just in case we have a spurious comma */
- TRACE(("looking for style '%.*s'\n", end - s, s));
- for (i = 0; i < XtNumber(known_style); i++) {
- if ((int) strlen(known_style[i].name) == (end - s)
- && !strncmp(s, known_style[i].name, (unsigned) (end - s))) {
- input_style = known_style[i].code;
- for (j = 0; j < xim_styles->count_styles; j++) {
- if (input_style == xim_styles->supported_styles[j]) {
- found = True;
- break;
- }
- }
- if (found)
- break;
- }
- }
- }
-
- s = ns;
- }
- XFree(xim_styles);
-
- if (!found) {
- fprintf(stderr,
- "input method doesn't support my preedit type (%s)\n",
- term->misc.preedit_type);
- XCloseIM(term->screen.xim);
- term->misc.cannot_im = True;
- return;
- }
-
- /*
- * Check for styles we do not yet support.
- */
- TRACE(("input_style %#lx\n", input_style));
- if (input_style == (XIMPreeditArea | XIMStatusArea)) {
- fprintf(stderr,
- "This program doesn't support the 'OffTheSpot' preedit type\n");
- XCloseIM(term->screen.xim);
- term->misc.cannot_im = True;
- return;
- }
-
- /*
- * For XIMPreeditPosition (or OverTheSpot), XIM client has to
- * prepare a font.
- * The font has to be locale-dependent XFontSet, whereas
- * XTerm use Unicode font. This leads a problem that the
- * same font cannot be used for XIM preedit.
- */
- if (input_style != (XIMPreeditNothing | XIMStatusNothing)) {
- char **missing_charset_list;
- int missing_charset_count;
- char *def_string;
- XVaNestedList p_list;
- XPoint spot =
- {0, 0};
- XFontStruct **fonts;
- char **font_name_list;
-
- term->screen.fs = XCreateFontSet(XtDisplay(term),
- term->misc.f_x,
- &missing_charset_list,
- &missing_charset_count,
- &def_string);
- if (term->screen.fs == NULL) {
- fprintf(stderr, "Preparation of font set "
- "\"%s\" for XIM failed.\n", term->misc.f_x);
- term->screen.fs = XCreateFontSet(XtDisplay(term),
- DEFXIMFONT,
- &missing_charset_list,
- &missing_charset_count,
- &def_string);
- }
- if (term->screen.fs == NULL) {
- fprintf(stderr, "Preparation of default font set "
- "\"%s\" for XIM failed.\n", DEFXIMFONT);
- XCloseIM(term->screen.xim);
- term->misc.cannot_im = True;
- return;
- }
- (void) XExtentsOfFontSet(term->screen.fs);
- j = XFontsOfFontSet(term->screen.fs, &fonts, &font_name_list);
- for (i = 0, term->screen.fs_ascent = 0; i < j; i++) {
- if (term->screen.fs_ascent < (*fonts)->ascent)
- term->screen.fs_ascent = (*fonts)->ascent;
- }
- p_list = XVaCreateNestedList(0,
- XNSpotLocation, &spot,
- XNFontSet, term->screen.fs,
- NULL);
- term->screen.xic = XCreateIC(term->screen.xim,
- XNInputStyle, input_style,
- XNClientWindow, XtWindow(term),
- XNFocusWindow, XtWindow(term),
- XNPreeditAttributes, p_list,
- NULL);
- } else {
- term->screen.xic = XCreateIC(term->screen.xim, XNInputStyle, input_style,
- XNClientWindow, XtWindow(term),
- XNFocusWindow, XtWindow(term),
- NULL);
- }
-
- if (!term->screen.xic) {
- fprintf(stderr, "Failed to create input context\n");
- XCloseIM(term->screen.xim);
- }
-#if defined(USE_XIM_INSTANTIATE_CB)
- else {
- XIMCallback destroy_cb;
-
- destroy_cb.callback = xim_destroy_cb;
- destroy_cb.client_data = NULL;
- if (XSetIMValues(term->screen.xim, XNDestroyCallback, &destroy_cb, NULL))
- fprintf(stderr, "Could not set destroy callback to IM\n");
- }
-#endif
-
- return;
-}
-
-static void
-VTInitI18N(void)
-{
- if (term->misc.open_im) {
- xim_real_init();
-
-#if defined(USE_XIM_INSTANTIATE_CB)
- if (term->screen.xic == NULL && !term->misc.cannot_im) {
- sleep(3);
- XRegisterIMInstantiateCallback(XtDisplay(term), NULL, NULL, NULL,
- xim_instantiate_cb, NULL);
- }
-#endif
- }
-}
-#endif /* OPT_I18N_SUPPORT && OPT_INPUT_METHOD */
-
-static Boolean
-VTSetValues(Widget cur,
- Widget request GCC_UNUSED,
- Widget wnew,
- ArgList args GCC_UNUSED,
- Cardinal *num_args GCC_UNUSED)
-{
- XtermWidget curvt = (XtermWidget) cur;
- XtermWidget newvt = (XtermWidget) wnew;
- Bool refresh_needed = False;
- Bool fonts_redone = False;
-
- if ((T_COLOR(&(curvt->screen), TEXT_BG) !=
- T_COLOR(&(newvt->screen), TEXT_BG)) ||
- (T_COLOR(&(curvt->screen), TEXT_FG) !=
- T_COLOR(&(newvt->screen), TEXT_FG)) ||
- (curvt->screen.MenuFontName(curvt->screen.menu_font_number) !=
- newvt->screen.MenuFontName(newvt->screen.menu_font_number)) ||
- (curvt->misc.default_font.f_n != newvt->misc.default_font.f_n)) {
- if (curvt->misc.default_font.f_n != newvt->misc.default_font.f_n)
- newvt->screen.MenuFontName(fontMenu_fontdefault) = newvt->misc.default_font.f_n;
- if (xtermLoadFont(newvt,
- xtermFontName(newvt->screen.MenuFontName(curvt->screen.menu_font_number)),
- True, newvt->screen.menu_font_number)) {
- /* resizing does the redisplay, so don't ask for it here */
- refresh_needed = True;
- fonts_redone = True;
- } else if (curvt->misc.default_font.f_n != newvt->misc.default_font.f_n)
- newvt->screen.MenuFontName(fontMenu_fontdefault) = curvt->misc.default_font.f_n;
- }
- if (!fonts_redone
- && (T_COLOR(&(curvt->screen), TEXT_CURSOR) !=
- T_COLOR(&(newvt->screen), TEXT_CURSOR))) {
- set_cursor_gcs(&newvt->screen);
- refresh_needed = True;
- }
- if (curvt->misc.re_verse != newvt->misc.re_verse) {
- newvt->flags ^= REVERSE_VIDEO;
- ReverseVideo(newvt);
- newvt->misc.re_verse = !newvt->misc.re_verse; /* ReverseVideo toggles */
- refresh_needed = True;
- }
- if ((T_COLOR(&(curvt->screen), MOUSE_FG) !=
- T_COLOR(&(newvt->screen), MOUSE_FG)) ||
- (T_COLOR(&(curvt->screen), MOUSE_BG) !=
- T_COLOR(&(newvt->screen), MOUSE_BG))) {
- recolor_cursor(newvt->screen.pointer_cursor,
- T_COLOR(&(newvt->screen), MOUSE_FG),
- T_COLOR(&(newvt->screen), MOUSE_BG));
- refresh_needed = True;
- }
- if (curvt->misc.scrollbar != newvt->misc.scrollbar) {
- ToggleScrollBar(newvt);
- }
-
- return refresh_needed;
-}
-
-#define setGC(value) set_at = __LINE__, currentGC = value
-
-#define OutsideSelection(screen,row,col) \
- ((row) > (screen)->endHRow || \
- ((row) == (screen)->endHRow && \
- (col) >= (screen)->endHCol) || \
- (row) < (screen)->startHRow || \
- ((row) == (screen)->startHRow && \
- (col) < (screen)->startHCol))
-
-/*
- * Shows cursor at new cursor position in screen.
- */
-void
-ShowCursor(void)
-{
- TScreen *screen = &term->screen;
- int x, y;
- Char clo;
- unsigned flags;
- unsigned fg_bg = 0;
- GC currentGC;
- int set_at;
- Bool in_selection;
- Bool reversed;
- Pixel fg_pix;
- Pixel bg_pix;
- Pixel tmp;
-#if OPT_HIGHLIGHT_COLOR
- Pixel hi_pix = T_COLOR(screen, HIGHLIGHT_BG);
-#endif
-#if OPT_WIDE_CHARS
- Char chi = 0;
- Char c1h = 0;
- Char c1l = 0;
- Char c2h = 0;
- Char c2l = 0;
- int base;
-#endif
- int cursor_col;
-
- if (screen->cursor_state == BLINKED_OFF)
- return;
-
- if (eventMode != NORMAL)
- return;
-
- if (screen->cur_row - screen->topline > screen->max_row)
- return;
-
- screen->cursor_row = screen->cur_row;
- cursor_col = screen->cursor_col = screen->cur_col;
- screen->cursor_moved = False;
-
-#ifndef NO_ACTIVE_ICON
- if (IsIcon(screen)) {
- screen->cursor_state = ON;
- return;
- }
-#endif /* NO_ACTIVE_ICON */
-
-#if OPT_WIDE_CHARS
- base =
-#endif
- clo = SCRN_BUF_CHARS(screen, screen->cursor_row)[cursor_col];
-
- if_OPT_WIDE_CHARS(screen, {
- int my_col;
- chi = SCRN_BUF_WIDEC(screen, screen->cursor_row)[cursor_col];
- if (clo == HIDDEN_LO && chi == HIDDEN_HI && cursor_col > 0) {
- /* if cursor points to non-initial part of wide character,
- * back it up
- */
- --cursor_col;
- clo = SCRN_BUF_CHARS(screen, screen->cursor_row)[cursor_col];
- chi = SCRN_BUF_WIDEC(screen, screen->cursor_row)[cursor_col];
- }
- my_col = cursor_col;
- base = (chi << 8) | clo;
- if (iswide(base))
- my_col += 1;
- c1l = SCRN_BUF_COM1L(screen, screen->cursor_row)[my_col];
- c1h = SCRN_BUF_COM1H(screen, screen->cursor_row)[my_col];
- c2l = SCRN_BUF_COM2L(screen, screen->cursor_row)[my_col];
- c2h = SCRN_BUF_COM2H(screen, screen->cursor_row)[my_col];
- });
-
- flags = SCRN_BUF_ATTRS(screen, screen->cursor_row)[cursor_col];
-
- if (clo == 0
-#if OPT_WIDE_CHARS
- && chi == 0
-#endif
- ) {
- clo = ' ';
- }
-
- /*
- * If the cursor happens to be on blanks, and the foreground color is set
- * but not the background, do not treat it as a colored cell.
- */
-#if OPT_ISO_COLORS
- if ((flags & TERM_COLOR_FLAGS(term)) == BG_COLOR
-#if OPT_WIDE_CHARS
- && chi == 0
-#endif
- && clo == ' ') {
- flags &= ~TERM_COLOR_FLAGS(term);
- }
-#endif
-
- /*
- * Compare the current cell to the last set of colors used for the
- * cursor and update the GC's if needed.
- */
- if_OPT_EXT_COLORS(screen, {
- fg_bg = (SCRN_BUF_FGRND(screen, screen->cursor_row)[cursor_col] << 8)
- | (SCRN_BUF_BGRND(screen, screen->cursor_row)[cursor_col]);
- });
- if_OPT_ISO_TRADITIONAL_COLORS(screen, {
- fg_bg = SCRN_BUF_COLOR(screen, screen->cursor_row)[cursor_col];
- });
- fg_pix = getXtermForeground(flags, extract_fg(fg_bg, flags));
- bg_pix = getXtermBackground(flags, extract_bg(fg_bg, flags));
-
- if (OutsideSelection(screen, screen->cur_row, screen->cur_col))
- in_selection = False;
- else
- in_selection = True;
-
- reversed = ReverseOrHilite(screen, flags, in_selection);
-
- /* This is like updatedXtermGC(), except that we have to worry about
- * whether the window has focus, since in that case we want just an
- * outline for the cursor.
- */
- if (screen->select || screen->always_highlight) {
- if (reversed) { /* text is reverse video */
- if (screen->cursorGC) {
- setGC(screen->cursorGC);
- } else {
- if (flags & BOLDATTR(screen)) {
- setGC(NormalBoldGC(screen));
- } else {
- setGC(NormalGC(screen));
- }
- }
-#if OPT_HIGHLIGHT_COLOR
- if (hi_pix != T_COLOR(screen, TEXT_FG)
- && hi_pix != fg_pix
- && hi_pix != bg_pix
- && hi_pix != term->dft_foreground) {
- bg_pix = fg_pix;
- fg_pix = hi_pix;
- }
-#endif
- EXCHANGE(fg_pix, bg_pix, tmp);
- } else { /* normal video */
- if (screen->reversecursorGC) {
- setGC(screen->reversecursorGC);
- } else {
- if (flags & BOLDATTR(screen)) {
- setGC(ReverseBoldGC(screen));
- } else {
- setGC(ReverseGC(screen));
- }
- }
- }
- if (T_COLOR(screen, TEXT_CURSOR) == term->dft_foreground) {
- XSetBackground(screen->display, currentGC, fg_pix);
- }
- XSetForeground(screen->display, currentGC, bg_pix);
- } else { /* not selected */
- if (reversed) { /* text is reverse video */
-#if OPT_HIGHLIGHT_COLOR
- if (hi_pix != T_COLOR(screen, TEXT_FG)
- && hi_pix != fg_pix
- && hi_pix != bg_pix
- && hi_pix != term->dft_foreground) {
- bg_pix = fg_pix;
- fg_pix = hi_pix;
- }
-#endif
- setGC(ReverseGC(screen));
- XSetForeground(screen->display, currentGC, bg_pix);
- XSetBackground(screen->display, currentGC, fg_pix);
- } else { /* normal video */
- setGC(NormalGC(screen));
- XSetForeground(screen->display, currentGC, fg_pix);
- XSetBackground(screen->display, currentGC, bg_pix);
- }
- }
-
- if (screen->cursor_busy == 0
- && (screen->cursor_state != ON || screen->cursor_GC != set_at)) {
-
- screen->cursor_GC = set_at;
- TRACE(("ShowCursor calling drawXtermText cur(%d,%d)\n",
- screen->cur_row, screen->cur_col));
-
- drawXtermText(screen, flags & DRAWX_MASK, currentGC,
- x = CurCursorX(screen, screen->cur_row, cursor_col),
- y = CursorY(screen, screen->cur_row),
- curXtermChrSet(screen->cur_row),
- PAIRED_CHARS(&clo, &chi), 1, 0);
-
-#if OPT_WIDE_CHARS
- if (c1l || c1h) {
- drawXtermText(screen, (flags & DRAWX_MASK) | NOBACKGROUND,
- currentGC, x, y,
- curXtermChrSet(screen->cur_row),
- PAIRED_CHARS(&c1l, &c1h), 1, iswide(base));
-
- if (c2l || c2h)
- drawXtermText(screen, (flags & DRAWX_MASK) | NOBACKGROUND,
- currentGC, x, y,
- curXtermChrSet(screen->cur_row),
- PAIRED_CHARS(&c2l, &c2h), 1, iswide(base));
- }
-#endif
-
- if (!screen->select && !screen->always_highlight) {
- screen->box->x = x;
- screen->box->y = y;
- XDrawLines(screen->display, VWindow(screen),
- screen->cursoroutlineGC ? screen->cursoroutlineGC
- : currentGC,
- screen->box, NBOX, CoordModePrevious);
- }
- }
- screen->cursor_state = ON;
-}
-
-/*
- * hide cursor at previous cursor position in screen.
- */
-void
-HideCursor(void)
-{
- TScreen *screen = &term->screen;
- GC currentGC;
- unsigned flags;
- unsigned fg_bg = 0;
- int x, y;
- Char clo;
- Bool in_selection;
-#if OPT_WIDE_CHARS
- Char chi = 0;
- Char c1h = 0;
- Char c1l = 0;
- Char c2h = 0;
- Char c2l = 0;
- int base;
-#endif
- int cursor_col;
-
- if (screen->cursor_state == OFF) /* FIXME */
- return;
- if (screen->cursor_row - screen->topline > screen->max_row)
- return;
-
- cursor_col = screen->cursor_col;
-
-#ifndef NO_ACTIVE_ICON
- if (IsIcon(screen)) {
- screen->cursor_state = OFF;
- return;
- }
-#endif /* NO_ACTIVE_ICON */
-
-#if OPT_WIDE_CHARS
- base =
-#endif
- clo = SCRN_BUF_CHARS(screen, screen->cursor_row)[cursor_col];
- flags = SCRN_BUF_ATTRS(screen, screen->cursor_row)[cursor_col];
-
- if_OPT_WIDE_CHARS(screen, {
- int my_col;
- chi = SCRN_BUF_WIDEC(screen, screen->cursor_row)[cursor_col];
- if (clo == HIDDEN_LO && chi == HIDDEN_HI) {
- /* if cursor points to non-initial part of wide character,
- * back it up
- */
- --cursor_col;
- clo = SCRN_BUF_CHARS(screen, screen->cursor_row)[cursor_col];
- chi = SCRN_BUF_WIDEC(screen, screen->cursor_row)[cursor_col];
- }
- my_col = cursor_col;
- base = (chi << 8) | clo;
- if (iswide(base))
- my_col += 1;
- c1l = SCRN_BUF_COM1L(screen, screen->cursor_row)[my_col];
- c1h = SCRN_BUF_COM1H(screen, screen->cursor_row)[my_col];
- c2l = SCRN_BUF_COM2L(screen, screen->cursor_row)[my_col];
- c2h = SCRN_BUF_COM2H(screen, screen->cursor_row)[my_col];
- });
-
- if_OPT_EXT_COLORS(screen, {
- fg_bg = (SCRN_BUF_FGRND(screen, screen->cursor_row)[cursor_col] << 8)
- | (SCRN_BUF_BGRND(screen, screen->cursor_row)[cursor_col]);
- });
- if_OPT_ISO_TRADITIONAL_COLORS(screen, {
- fg_bg = SCRN_BUF_COLOR(screen, screen->cursor_row)[cursor_col];
- });
-
- if (OutsideSelection(screen, screen->cursor_row, screen->cursor_col))
- in_selection = False;
- else
- in_selection = True;
-
- currentGC = updatedXtermGC(screen, flags, fg_bg, in_selection);
-
- if (clo == 0
-#if OPT_WIDE_CHARS
- && chi == 0
-#endif
- ) {
- clo = ' ';
- }
-
- TRACE(("HideCursor calling drawXtermText cur(%d,%d)\n",
- screen->cursor_row, screen->cursor_col));
- drawXtermText(screen, flags & DRAWX_MASK, currentGC,
- x = CurCursorX(screen, screen->cursor_row, cursor_col),
- y = CursorY(screen, screen->cursor_row),
- curXtermChrSet(screen->cursor_row),
- PAIRED_CHARS(&clo, &chi), 1, 0);
-
-#if OPT_WIDE_CHARS
- if (c1l || c1h) {
- drawXtermText(screen, (flags & DRAWX_MASK) | NOBACKGROUND,
- currentGC, x, y,
- curXtermChrSet(screen->cur_row),
- PAIRED_CHARS(&c1l, &c1h), 1, iswide(base));
-
- if (c2l || c2h)
- drawXtermText(screen, (flags & DRAWX_MASK) | NOBACKGROUND,
- currentGC, x, y,
- curXtermChrSet(screen->cur_row),
- PAIRED_CHARS(&c2l, &c2h), 1, iswide(base));
- }
-#endif
- screen->cursor_state = OFF;
- resetXtermGC(screen, flags, in_selection);
-}
-
-#if OPT_BLINK_CURS || OPT_BLINK_TEXT
-static void
-StartBlinking(TScreen * screen)
-{
- if (screen->blink_timer == 0) {
- unsigned long interval = (screen->cursor_state == ON ?
- screen->blink_on : screen->blink_off);
- if (interval == 0) /* wow! */
- interval = 1; /* let's humor him anyway */
- screen->blink_timer = XtAppAddTimeOut(app_con,
- interval,
- HandleBlinking,
- screen);
- }
-}
-
-static void
-StopBlinking(TScreen * screen)
-{
- if (screen->blink_timer)
- XtRemoveTimeOut(screen->blink_timer);
- screen->blink_timer = 0;
-}
-
-#if OPT_BLINK_TEXT
-static Bool
-ScrnHasBlinking(TScreen * screen, int row)
-{
- Char *attrs = SCRN_BUF_ATTRS(screen, row);
- int col;
- Bool result = False;
-
- for (col = 0; col < MaxCols(screen); ++col) {
- if (attrs[col] & BLINK) {
- result = True;
- break;
- }
- }
- return result;
-}
-#endif
-
-/*
- * Blink the cursor by alternately showing/hiding cursor. We leave the timer
- * running all the time (even though that's a little inefficient) to make the
- * logic simple.
- */
-static void
-HandleBlinking(XtPointer closure, XtIntervalId * id GCC_UNUSED)
-{
- TScreen *screen = (TScreen *) closure;
- Bool resume = False;
-
- screen->blink_timer = 0;
- screen->blink_state = !screen->blink_state;
-
-#if OPT_BLINK_CURS
- if (DoStartBlinking(screen)) {
- if (screen->cursor_state == ON) {
- if (screen->select || screen->always_highlight) {
- HideCursor();
- if (screen->cursor_state == OFF)
- screen->cursor_state = BLINKED_OFF;
- }
- } else if (screen->cursor_state == BLINKED_OFF) {
- screen->cursor_state = OFF;
- ShowCursor();
- if (screen->cursor_state == OFF)
- screen->cursor_state = BLINKED_OFF;
- }
- resume = True;
- }
-#endif
-
-#if OPT_BLINK_TEXT
- /*
- * Inspect the line on the current screen to see if any have the BLINK flag
- * associated with them. Prune off any that have had the corresponding
- * cells reset. If any are left, repaint those lines with ScrnRefresh().
- */
- if (!(screen->blink_as_bold)) {
- int row;
- int first_row = screen->max_row;
- int last_row = -1;
-
- for (row = screen->max_row; row >= 0; row--) {
- if (ScrnTstBlinked(screen, row)) {
- if (ScrnHasBlinking(screen, row)) {
- resume = True;
- if (row > last_row)
- last_row = row;
- if (row < first_row)
- first_row = row;
- } else {
- ScrnClrBlinked(screen, row);
- }
- }
- }
- /*
- * FIXME: this could be a little more efficient, e.g,. by limiting the
- * columns which are updated.
- */
- if (first_row <= last_row) {
- ScrnRefresh(screen,
- first_row,
- 0,
- last_row + 1 - first_row,
- MaxCols(screen),
- True);
- }
- }
-#endif
-
- /*
- * If either the cursor or text is blinking, restart the timer.
- */
- if (resume)
- StartBlinking(screen);
-}
-#endif /* OPT_BLINK_CURS || OPT_BLINK_TEXT */
-
-/*
- * Implement soft or hard (full) reset of the VTxxx emulation. There are a
- * couple of differences from real DEC VTxxx terminals (to avoid breaking
- * applications which have come to rely on xterm doing this):
- *
- * + autowrap mode should be reset (instead it's reset to the resource
- * default).
- * + the popup menu offers a choice of resetting the savedLines, or not.
- * (but the control sequence does this anyway).
- */
-void
-VTReset(Bool full, Bool saved)
-{
- TScreen *screen = &term->screen;
-
- if (!XtIsRealized((Widget) term)) {
- Bell(XkbBI_MinorError, 0);
- return;
- }
-
- if (saved) {
- screen->savedlines = 0;
- ScrollBarDrawThumb(screen->scrollWidget);
- }
-
- /* make cursor visible */
- screen->cursor_set = ON;
-
- /* reset scrolling region */
- set_tb_margins(screen, 0, screen->max_row);
-
- bitclr(&term->flags, ORIGIN);
-
- if_OPT_ISO_COLORS(screen, {
- reset_SGR_Colors();
- });
-
- /* Reset character-sets to initial state */
- resetCharsets(screen);
-
- /* Reset DECSCA */
- bitclr(&term->flags, PROTECTED);
- screen->protected_mode = OFF_PROTECT;
-
- if (full) { /* RIS */
- if (screen->bellOnReset)
- Bell(XkbBI_TerminalBell, 0);
-
- /* reset the mouse mode */
- screen->send_mouse_pos = MOUSE_OFF;
- waitingForTrackInfo = False;
- eventMode = NORMAL;
-
- TabReset(term->tabs);
- term->keyboard.flags = MODE_SRM;
-#if OPT_INITIAL_ERASE
- if (term->keyboard.reset_DECBKM == 1)
- term->keyboard.flags |= MODE_DECBKM;
- else if (term->keyboard.reset_DECBKM == 2)
-#endif
- if (term->screen.backarrow_key)
- term->keyboard.flags |= MODE_DECBKM;
- TRACE(("full reset DECBKM %s\n",
- BtoS(term->keyboard.flags & MODE_DECBKM)));
- update_appcursor();
- update_appkeypad();
- update_decbkm();
- show_8bit_control(False);
- reset_decudk();
-
- FromAlternate(screen);
- ClearScreen(screen);
- screen->cursor_state = OFF;
- if (term->flags & REVERSE_VIDEO)
- ReverseVideo(term);
-
- term->flags = term->initflags;
- update_reversevideo();
- update_autowrap();
- update_reversewrap();
- update_autolinefeed();
-
- screen->jumpscroll = !(term->flags & SMOOTHSCROLL);
- update_jumpscroll();
-
- if (screen->c132 && (term->flags & IN132COLUMNS)) {
- Dimension reqWidth = (80 * FontWidth(screen)
- + 2 * screen->border + ScrollbarWidth(screen));
- Dimension reqHeight = (FontHeight(screen)
- * MaxRows(screen) + 2 * screen->border);
- Dimension replyWidth;
- Dimension replyHeight;
-
- TRACE(("Making resize-request to restore 80-columns %dx%d\n",
- reqHeight, reqWidth));
- XtMakeResizeRequest((Widget) term,
- reqWidth,
- reqHeight,
- &replyWidth, &replyHeight);
- TRACE(("...result %dx%d\n", replyHeight, replyWidth));
- repairSizeHints();
- XSync(screen->display, False); /* synchronize */
- if (XtAppPending(app_con))
- xevents();
- }
-
- CursorSet(screen, 0, 0, term->flags);
- CursorSave(term);
- } else { /* DECSTR */
- /*
- * There's a tiny difference, to accommodate usage of xterm.
- * We reset autowrap to the resource values rather than turning
- * it off.
- */
- term->keyboard.flags &= ~(MODE_DECCKM | MODE_KAM | MODE_DECKPAM);
- bitcpy(&term->flags, term->initflags, WRAPAROUND | REVERSEWRAP);
- bitclr(&term->flags, INSERT | INVERSE | BOLD | BLINK | UNDERLINE | INVISIBLE);
- if_OPT_ISO_COLORS(screen, {
- reset_SGR_Colors();
- });
- update_appcursor();
- update_autowrap();
- update_reversewrap();
-
- CursorSave(term);
- screen->sc[screen->alternate != False].row =
- screen->sc[screen->alternate != False].col = 0;
- }
- longjmp(vtjmpbuf, 1); /* force ground state in parser */
-}
-
-/*
- * set_character_class - takes a string of the form
- *
- * low[-high]:val[,low[-high]:val[...]]
- *
- * and sets the indicated ranges to the indicated values.
- */
-static int
-set_character_class(char *s)
-{
- int i; /* iterator, index into s */
- int len; /* length of s */
- int acc; /* accumulator */
- int low, high; /* bounds of range [0..127] */
- int base; /* 8, 10, 16 (octal, decimal, hex) */
- int numbers; /* count of numbers per range */
- int digits; /* count of digits in a number */
- static char *errfmt = "%s: %s in range string \"%s\" (position %d)\n";
-
- if (!s || !s[0])
- return -1;
-
- base = 10; /* in case we ever add octal, hex */
- low = high = -1; /* out of range */
-
- for (i = 0, len = strlen(s), acc = 0, numbers = digits = 0;
- i < len; i++) {
- Char c = s[i];
-
- if (isspace(c)) {
- continue;
- } else if (isdigit(c)) {
- acc = acc * base + (c - '0');
- digits++;
- continue;
- } else if (c == '-') {
- low = acc;
- acc = 0;
- if (digits == 0) {
- fprintf(stderr, errfmt, ProgramName, "missing number", s, i);
- return (-1);
- }
- digits = 0;
- numbers++;
- continue;
- } else if (c == ':') {
- if (numbers == 0)
- low = acc;
- else if (numbers == 1)
- high = acc;
- else {
- fprintf(stderr, errfmt, ProgramName, "too many numbers",
- s, i);
- return (-1);
- }
- digits = 0;
- numbers++;
- acc = 0;
- continue;
- } else if (c == ',') {
- /*
- * now, process it
- */
-
- if (high < 0) {
- high = low;
- numbers++;
- }
- if (numbers != 2) {
- fprintf(stderr, errfmt, ProgramName, "bad value number",
- s, i);
- } else if (SetCharacterClassRange(low, high, acc) != 0) {
- fprintf(stderr, errfmt, ProgramName, "bad range", s, i);
- }
-
- low = high = -1;
- acc = 0;
- digits = 0;
- numbers = 0;
- continue;
- } else {
- fprintf(stderr, errfmt, ProgramName, "bad character", s, i);
- return (-1);
- } /* end if else if ... else */
-
- }
-
- if (low < 0 && high < 0)
- return (0);
-
- /*
- * now, process it
- */
-
- if (high < 0)
- high = low;
- if (numbers < 1 || numbers > 2) {
- fprintf(stderr, errfmt, ProgramName, "bad value number", s, i);
- } else if (SetCharacterClassRange(low, high, acc) != 0) {
- fprintf(stderr, errfmt, ProgramName, "bad range", s, i);
- }
-
- return (0);
-}
-
-/* ARGSUSED */
-static void
-HandleKeymapChange(Widget w,
- XEvent * event GCC_UNUSED,
- String * params,
- Cardinal *param_count)
-{
- static XtTranslations keymap, original;
- static XtResource key_resources[] =
- {
- {XtNtranslations, XtCTranslations, XtRTranslationTable,
- sizeof(XtTranslations), 0, XtRTranslationTable, (XtPointer) NULL}
- };
- char mapName[1000];
- char mapClass[1000];
- char *pmapName;
- char *pmapClass;
- size_t len;
-
- if (*param_count != 1)
- return;
-
- if (original == NULL)
- original = w->core.tm.translations;
-
- if (strcmp(params[0], "None") == 0) {
- XtOverrideTranslations(w, original);
- return;
- }
-
- len = strlen(params[0]) + 7;
-
- pmapName = (char *) MyStackAlloc(len, mapName);
- pmapClass = (char *) MyStackAlloc(len, mapClass);
- if (pmapName == NULL
- || pmapClass == NULL)
- SysError(ERROR_KMMALLOC1);
-
- (void) sprintf(pmapName, "%sKeymap", params[0]);
- (void) strcpy(pmapClass, pmapName);
- if (islower(CharOf(pmapClass[0])))
- pmapClass[0] = toupper(CharOf(pmapClass[0]));
- XtGetSubresources(w, (XtPointer) &keymap, pmapName, pmapClass,
- key_resources, (Cardinal) 1, NULL, (Cardinal) 0);
- if (keymap != NULL)
- XtOverrideTranslations(w, keymap);
-
- MyStackFree(pmapName, mapName);
- MyStackFree(pmapClass, mapClass);
-}
-
-/* ARGSUSED */
-static void
-HandleBell(Widget w GCC_UNUSED,
- XEvent * event GCC_UNUSED,
- String * params, /* [0] = volume */
- Cardinal *param_count) /* 0 or 1 */
-{
- int percent = (*param_count) ? atoi(params[0]) : 0;
-
- Bell(XkbBI_TerminalBell, percent);
-}
-
-/* ARGSUSED */
-static void
-HandleVisualBell(Widget w GCC_UNUSED,
- XEvent * event GCC_UNUSED,
- String * params GCC_UNUSED,
- Cardinal *param_count GCC_UNUSED)
-{
- VisualBell();
-}
-
-/* ARGSUSED */
-static void
-HandleIgnore(Widget w,
- XEvent * event,
- String * params GCC_UNUSED,
- Cardinal *param_count GCC_UNUSED)
-{
- /* do nothing, but check for funny escape sequences */
- (void) SendMousePosition(w, event);
-}
-
-/* ARGSUSED */
-static void
-DoSetSelectedFont(Widget w GCC_UNUSED,
- XtPointer client_data GCC_UNUSED,
- Atom * selection GCC_UNUSED,
- Atom * type,
- XtPointer value,
- unsigned long *length GCC_UNUSED,
- int *format)
-{
- char *val = (char *) value;
- int len;
- if (*type != XA_STRING || *format != 8) {
- Bell(XkbBI_MinorError, 0);
- return;
- }
- len = strlen(val);
- if (len > 0) {
- if (val[len - 1] == '\n')
- val[len - 1] = '\0';
- /* Do some sanity checking to avoid sending a long selection
- back to the server in an OpenFont that is unlikely to succeed.
- XLFD allows up to 255 characters and no control characters;
- we are a little more liberal here. */
- if (len > 1000 || strchr(val, '\n'))
- return;
- if (!xtermLoadFont(term,
- xtermFontName(val),
- True,
- fontMenu_fontsel))
- Bell(XkbBI_MinorError, 0);
- }
-}
-
-void
-FindFontSelection(char *atom_name, Bool justprobe)
-{
- static AtomPtr *atoms;
- static int atomCount = 0;
- AtomPtr *pAtom;
- int a;
- Atom target;
-
- if (!atom_name)
- atom_name = "PRIMARY";
-
- for (pAtom = atoms, a = atomCount; a; a--, pAtom++) {
- if (strcmp(atom_name, XmuNameOfAtom(*pAtom)) == 0)
- break;
- }
- if (!a) {
- atoms = (AtomPtr *) XtRealloc((char *) atoms,
- sizeof(AtomPtr) * (atomCount + 1));
- *(pAtom = &atoms[atomCount++]) = XmuMakeAtom(atom_name);
- }
-
- target = XmuInternAtom(XtDisplay(term), *pAtom);
- if (justprobe) {
- term->screen.MenuFontName(fontMenu_fontsel) =
- XGetSelectionOwner(XtDisplay(term), target) ? _Font_Selected_ : 0;
- } else {
- XtGetSelectionValue((Widget) term, target, XA_STRING,
- DoSetSelectedFont, NULL,
- XtLastTimestampProcessed(XtDisplay(term)));
- }
- return;
-}
-
-void
-set_cursor_gcs(TScreen * screen)
-{
- XGCValues xgcv;
- XtGCMask mask;
- Pixel cc = T_COLOR(screen, TEXT_CURSOR);
- Pixel fg = T_COLOR(screen, TEXT_FG);
- Pixel bg = T_COLOR(screen, TEXT_BG);
- GC new_cursorGC = NULL;
- GC new_cursorFillGC = NULL;
- GC new_reversecursorGC = NULL;
- GC new_cursoroutlineGC = NULL;
-
- /*
- * Let's see, there are three things that have "color":
- *
- * background
- * text
- * cursorblock
- *
- * And, there are four situation when drawing a cursor, if we decide
- * that we like have a solid block of cursor color with the letter
- * that it is highlighting shown in the background color to make it
- * stand out:
- *
- * selected window, normal video - background on cursor
- * selected window, reverse video - foreground on cursor
- * unselected window, normal video - foreground on background
- * unselected window, reverse video - background on foreground
- *
- * Since the last two are really just normalGC and reverseGC, we only
- * need two new GC's. Under monochrome, we get the same effect as
- * above by setting cursor color to foreground.
- */
-
-#if OPT_ISO_COLORS
- /*
- * If we're using ANSI colors, the functions manipulating the SGR code will
- * use the same GC's. To avoid having the cursor change color, we use the
- * Xlib calls rather than the Xt calls.
- *
- * Use the colorMode value to determine which we'll do (the VWindow may
- * not be set before the widget's realized, so it's tested separately).
- */
- if (screen->colorMode) {
- if (VWindow(screen) != 0 && (cc != bg) && (cc != fg)) {
- /* we might have a colored foreground/background later */
- xgcv.font = screen->fnt_norm->fid;
- mask = (GCForeground | GCBackground | GCFont);
- xgcv.foreground = fg;
- xgcv.background = cc;
- new_cursorGC = XCreateGC(screen->display, VWindow(screen), mask, &xgcv);
-
- xgcv.foreground = cc;
- xgcv.background = fg;
- new_cursorFillGC =
- XCreateGC(screen->display, VWindow(screen), mask, &xgcv);
-
- if (screen->always_highlight) {
- new_reversecursorGC = (GC) 0;
- new_cursoroutlineGC = (GC) 0;
- } else {
- xgcv.foreground = bg;
- xgcv.background = cc;
- new_reversecursorGC =
- XCreateGC(screen->display, VWindow(screen), mask, &xgcv);
- xgcv.foreground = cc;
- xgcv.background = bg;
- new_cursoroutlineGC =
- XCreateGC(screen->display, VWindow(screen), mask, &xgcv);
- }
- }
- } else
-#endif
- if (cc != fg && cc != bg) {
- /* we have a colored cursor */
- xgcv.font = screen->fnt_norm->fid;
- mask = (GCForeground | GCBackground | GCFont);
-
- xgcv.foreground = fg;
- xgcv.background = cc;
- new_cursorGC = XtGetGC((Widget) term, mask, &xgcv);
-
- xgcv.foreground = cc;
- xgcv.background = fg;
- new_cursorFillGC = XtGetGC((Widget) term, mask, &xgcv);
-
- if (screen->always_highlight) {
- new_reversecursorGC = (GC) 0;
- new_cursoroutlineGC = (GC) 0;
- } else {
- xgcv.foreground = bg;
- xgcv.background = cc;
- new_reversecursorGC = XtGetGC((Widget) term, mask, &xgcv);
- xgcv.foreground = cc;
- xgcv.background = bg;
- new_cursoroutlineGC = XtGetGC((Widget) term, mask, &xgcv);
- }
- }
-#if OPT_ISO_COLORS
- if (screen->colorMode) {
- if (screen->cursorGC)
- XFreeGC(screen->display, screen->cursorGC);
- if (screen->fillCursorGC)
- XFreeGC(screen->display, screen->fillCursorGC);
- if (screen->reversecursorGC)
- XFreeGC(screen->display, screen->reversecursorGC);
- if (screen->cursoroutlineGC)
- XFreeGC(screen->display, screen->cursoroutlineGC);
- } else
-#endif
- {
- if (screen->cursorGC)
- XtReleaseGC((Widget) term, screen->cursorGC);
- if (screen->fillCursorGC)
- XtReleaseGC((Widget) term, screen->fillCursorGC);
- if (screen->reversecursorGC)
- XtReleaseGC((Widget) term, screen->reversecursorGC);
- if (screen->cursoroutlineGC)
- XtReleaseGC((Widget) term, screen->cursoroutlineGC);
- }
-
- screen->cursorGC = new_cursorGC;
- screen->fillCursorGC = new_cursorFillGC;
- screen->reversecursorGC = new_reversecursorGC;
- screen->cursoroutlineGC = new_cursoroutlineGC;
-}
diff --git a/nx-X11/programs/xterm/charproc.c.X.original b/nx-X11/programs/xterm/charproc.c.X.original
deleted file mode 100644
index 2c72b5bdc..000000000
--- a/nx-X11/programs/xterm/charproc.c.X.original
+++ /dev/null
@@ -1,7276 +0,0 @@
-/* $XTermId: charproc.c,v 1.627 2005/11/13 23:10:35 tom Exp $ */
-
-/*
- * $Xorg: charproc.c,v 1.6 2001/02/09 02:06:02 xorgcvs Exp $
- */
-
-/* $XFree86: xc/programs/xterm/charproc.c,v 3.177 2005/11/13 23:10:35 dickey Exp $ */
-
-/*
-
-Copyright 1999-2004,2005 by Thomas E. Dickey
-
- All Rights Reserved
-
-Permission is hereby granted, free of charge, to any person obtaining a
-copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name(s) of the above copyright
-holders shall not be used in advertising or otherwise to promote the
-sale, use or other dealings in this Software without prior written
-authorization.
-
-Copyright 1988 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-
-*/
-/*
- * Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
- *
- * All Rights Reserved
- *
- * Permission to use, copy, modify, and distribute this software and its
- * documentation for any purpose and without fee is hereby granted,
- * provided that the above copyright notice appear in all copies and that
- * both that copyright notice and this permission notice appear in
- * supporting documentation, and that the name of Digital Equipment
- * Corporation not be used in advertising or publicity pertaining to
- * distribution of the software without specific, written prior permission.
- *
- *
- * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
- * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
- * DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
- * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
- * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
- * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- * SOFTWARE.
- */
-
-/* charproc.c */
-
-#include <version.h>
-#include <xterm.h>
-
-#include <X11/Xatom.h>
-#include <X11/Xutil.h>
-#include <X11/cursorfont.h>
-#include <X11/Xmu/Atoms.h>
-#include <X11/Xmu/CharSet.h>
-#include <X11/Xmu/Converters.h>
-
-#if OPT_INPUT_METHOD
-
-#if defined(HAVE_LIB_XAW)
-#include <X11/Xaw/XawImP.h>
-#elif defined(HAVE_LIB_XAW3D)
-#include <X11/Xaw3d/XawImP.h>
-#elif defined(HAVE_LIB_NEXTAW)
-#include <X11/neXtaw/XawImP.h>
-#elif defined(HAVE_LIB_XAWPLUS)
-#include <X11/XawPlus/XawImP.h>
-#endif
-
-#endif
-
-#if OPT_WIDE_CHARS
-#include <wcwidth.h>
-#include <precompose.h>
-#ifdef HAVE_LANGINFO_CODESET
-#include <langinfo.h>
-#endif
-#endif
-
-#if OPT_INPUT_METHOD
-#include <X11/Xlocale.h>
-#endif
-
-#include <stdio.h>
-#include <ctype.h>
-
-#if defined(HAVE_SCHED_YIELD)
-#include <sched.h>
-#endif
-
-#include <VTparse.h>
-#include <data.h>
-#include <error.h>
-#include <menu.h>
-#include <main.h>
-#include <fontutils.h>
-#include <xcharmouse.h>
-#include <charclass.h>
-#include <xstrings.h>
-
-#if OPT_ZICONBEEP || OPT_TOOLBAR
-#define HANDLE_STRUCT_NOTIFY 1
-#else
-#define HANDLE_STRUCT_NOTIFY 0
-#endif
-
-static IChar doinput(void);
-static int set_character_class(char *s);
-static void FromAlternate(TScreen * screen);
-static void RequestResize(XtermWidget termw, int rows, int cols, int text);
-static void SwitchBufs(TScreen * screen);
-static void ToAlternate(TScreen * screen);
-static void VTallocbuf(void);
-static void WriteText(TScreen * screen,
- PAIRED_CHARS(Char * str, Char * str2),
- Cardinal len);
-static void ansi_modes(XtermWidget termw,
- void (*func) (unsigned *p, unsigned mask));
-static void bitclr(unsigned *p, unsigned mask);
-static void bitcpy(unsigned *p, unsigned q, unsigned mask);
-static void bitset(unsigned *p, unsigned mask);
-static void dpmodes(XtermWidget termw, void (*func) (unsigned *p, unsigned mask));
-static void restoremodes(XtermWidget termw);
-static void savemodes(XtermWidget termw);
-static void unparseputn(unsigned int n, int fd);
-static void window_ops(XtermWidget termw);
-
-#define DoStartBlinking(s) ((s)->cursor_blink ^ (s)->cursor_blink_esc)
-
-#if OPT_BLINK_CURS || OPT_BLINK_TEXT
-static void HandleBlinking(XtPointer closure, XtIntervalId * id);
-static void StartBlinking(TScreen * screen);
-static void StopBlinking(TScreen * screen);
-#else
-#define StartBlinking(screen) /* nothing */
-#define StopBlinking(screen) /* nothing */
-#endif
-
-#if OPT_INPUT_METHOD
-static void PreeditPosition(TScreen * screen);
-#endif
-
-#define DEFAULT -1
-#define BELLSUPPRESSMSEC 200
-
-static int nparam;
-static ANSI reply;
-static int param[NPARAM];
-
-static jmp_buf vtjmpbuf;
-
-/* event handlers */
-static void HandleBell PROTO_XT_ACTIONS_ARGS;
-static void HandleIgnore PROTO_XT_ACTIONS_ARGS;
-static void HandleKeymapChange PROTO_XT_ACTIONS_ARGS;
-static void HandleVisualBell PROTO_XT_ACTIONS_ARGS;
-#if HANDLE_STRUCT_NOTIFY
-static void HandleStructNotify PROTO_XT_EV_HANDLER_ARGS;
-#endif
-
-/*
- * NOTE: VTInitialize zeros out the entire ".screen" component of the
- * XtermWidget, so make sure to add an assignment statement in VTInitialize()
- * for each new ".screen" field added to this resource list.
- */
-
-/* Defaults */
-#if OPT_ISO_COLORS
-
-/*
- * If we default to colorMode enabled, compile-in defaults for the ANSI colors.
- */
-#if DFT_COLORMODE
-#define DFT_COLOR(name) name
-#else
-#define DFT_COLOR(name) XtDefaultForeground
-#endif
-#endif
-
-static char *_Font_Selected_ = "yes"; /* string is arbitrary */
-
-static char defaultTranslations[] =
-"\
- Shift <KeyPress> Prior:scroll-back(1,halfpage) \n\
- Shift <KeyPress> Next:scroll-forw(1,halfpage) \n\
- Shift <KeyPress> Select:select-cursor-start() select-cursor-end(PRIMARY, CUT_BUFFER0) \n\
- Shift <KeyPress> Insert:insert-selection(PRIMARY, CUT_BUFFER0) \n\
-"
-#if OPT_SHIFT_FONTS
-"\
- Shift~Ctrl <KeyPress> KP_Add:larger-vt-font() \n\
- Shift Ctrl <KeyPress> KP_Add:smaller-vt-font() \n\
- Shift <KeyPress> KP_Subtract:smaller-vt-font() \n\
-"
-#endif
-"\
- ~Meta <KeyPress>:insert-seven-bit() \n\
- Meta <KeyPress>:insert-eight-bit() \n\
- !Ctrl <Btn1Down>:popup-menu(mainMenu) \n\
- !Lock Ctrl <Btn1Down>:popup-menu(mainMenu) \n\
- !Lock Ctrl @Num_Lock <Btn1Down>:popup-menu(mainMenu) \n\
- ! @Num_Lock Ctrl <Btn1Down>:popup-menu(mainMenu) \n\
- ~Meta <Btn1Down>:select-start() \n\
- ~Meta <Btn1Motion>:select-extend() \n\
- !Ctrl <Btn2Down>:popup-menu(vtMenu) \n\
- !Lock Ctrl <Btn2Down>:popup-menu(vtMenu) \n\
- !Lock Ctrl @Num_Lock <Btn2Down>:popup-menu(vtMenu) \n\
- ! @Num_Lock Ctrl <Btn2Down>:popup-menu(vtMenu) \n\
- ~Ctrl ~Meta <Btn2Down>:ignore() \n\
- Meta <Btn2Down>:clear-saved-lines() \n\
- ~Ctrl ~Meta <Btn2Up>:insert-selection(PRIMARY, CUT_BUFFER0) \n\
- !Ctrl <Btn3Down>:popup-menu(fontMenu) \n\
- !Lock Ctrl <Btn3Down>:popup-menu(fontMenu) \n\
- !Lock Ctrl @Num_Lock <Btn3Down>:popup-menu(fontMenu) \n\
- ! @Num_Lock Ctrl <Btn3Down>:popup-menu(fontMenu) \n\
- ~Ctrl ~Meta <Btn3Down>:start-extend() \n\
- ~Meta <Btn3Motion>:select-extend() \n\
- Ctrl <Btn4Down>:scroll-back(1,halfpage,m) \n\
- Lock Ctrl <Btn4Down>:scroll-back(1,halfpage,m) \n\
- Lock @Num_Lock Ctrl <Btn4Down>:scroll-back(1,halfpage,m) \n\
- @Num_Lock Ctrl <Btn4Down>:scroll-back(1,halfpage,m) \n\
- <Btn4Down>:scroll-back(5,line,m) \n\
- Ctrl <Btn5Down>:scroll-forw(1,halfpage,m) \n\
- Lock Ctrl <Btn5Down>:scroll-forw(1,halfpage,m) \n\
- Lock @Num_Lock Ctrl <Btn5Down>:scroll-forw(1,halfpage,m) \n\
- @Num_Lock Ctrl <Btn5Down>:scroll-forw(1,halfpage,m) \n\
- <Btn5Down>:scroll-forw(5,line,m) \n\
- <BtnUp>:select-end(PRIMARY, CUT_BUFFER0) \n\
- <BtnDown>:ignore() \
-"; /* PROCURA added "Meta <Btn2Down>:clear-saved-lines()" */
-/* *INDENT-OFF* */
-static XtActionsRec actionsList[] = {
- { "allow-send-events", HandleAllowSends },
- { "bell", HandleBell },
- { "clear-saved-lines", HandleClearSavedLines },
- { "create-menu", HandleCreateMenu },
- { "dired-button", DiredButton },
- { "hard-reset", HandleHardReset },
- { "ignore", HandleIgnore },
- { "insert", HandleKeyPressed }, /* alias for insert-seven-bit */
- { "insert-eight-bit", HandleEightBitKeyPressed },
- { "insert-selection", HandleInsertSelection },
- { "insert-seven-bit", HandleKeyPressed },
- { "interpret", HandleInterpret },
- { "keymap", HandleKeymapChange },
- { "popup-menu", HandlePopupMenu },
- { "print", HandlePrintScreen },
- { "print-redir", HandlePrintControlMode },
- { "quit", HandleQuit },
- { "redraw", HandleRedraw },
- { "delete-is-del", HandleDeleteIsDEL },
- { "scroll-back", HandleScrollBack },
- { "scroll-forw", HandleScrollForward },
- { "secure", HandleSecure },
- { "select-cursor-end", HandleKeyboardSelectEnd },
- { "select-cursor-extend", HandleKeyboardSelectExtend },
- { "select-cursor-start", HandleKeyboardSelectStart },
- { "select-end", HandleSelectEnd },
- { "select-extend", HandleSelectExtend },
- { "select-set", HandleSelectSet },
- { "select-start", HandleSelectStart },
- { "send-signal", HandleSendSignal },
- { "set-8-bit-control", Handle8BitControl },
- { "set-allow132", HandleAllow132 },
- { "set-altscreen", HandleAltScreen },
- { "set-appcursor", HandleAppCursor },
- { "set-appkeypad", HandleAppKeypad },
- { "set-autolinefeed", HandleAutoLineFeed },
- { "set-autowrap", HandleAutoWrap },
- { "set-backarrow", HandleBackarrow },
- { "set-cursesemul", HandleCursesEmul },
- { "set-jumpscroll", HandleJumpscroll },
- { "set-old-function-keys", HandleOldFunctionKeys },
- { "set-marginbell", HandleMarginBell },
- { "set-reverse-video", HandleReverseVideo },
- { "set-reversewrap", HandleReverseWrap },
- { "set-scroll-on-key", HandleScrollKey },
- { "set-scroll-on-tty-output", HandleScrollTtyOutput },
- { "set-scrollbar", HandleScrollbar },
- { "set-sun-function-keys", HandleSunFunctionKeys },
- { "set-sun-keyboard", HandleSunKeyboard },
- { "set-titeInhibit", HandleTiteInhibit },
- { "set-visual-bell", HandleSetVisualBell },
- { "set-pop-on-bell", HandleSetPopOnBell },
- { "set-vt-font", HandleSetFont },
- { "soft-reset", HandleSoftReset },
- { "start-cursor-extend", HandleKeyboardStartExtend },
- { "start-extend", HandleStartExtend },
- { "string", HandleStringEvent },
- { "vi-button", ViButton },
- { "visual-bell", HandleVisualBell },
-#ifdef ALLOWLOGGING
- { "set-logging", HandleLogging },
-#endif
-#if OPT_BLINK_CURS
- { "set-cursorblink", HandleCursorBlink },
-#endif
-#if OPT_BOX_CHARS
- { "set-font-linedrawing", HandleFontBoxChars },
-#endif
-#if OPT_DABBREV
- { "dabbrev-expand", HandleDabbrevExpand },
-#endif
-#if OPT_DEC_CHRSET
- { "set-font-doublesize", HandleFontDoublesize },
-#endif
-#if OPT_DEC_SOFTFONT
- { "set-font-loading", HandleFontLoading },
-#endif
-#if OPT_HP_FUNC_KEYS
- { "set-hp-function-keys", HandleHpFunctionKeys },
-#endif
-#if OPT_LOAD_VTFONTS
- { "load-vt-fonts", HandleLoadVTFonts },
-#endif
-#if OPT_MAXIMIZE
- { "deiconify", HandleDeIconify },
- { "iconify", HandleIconify },
- { "maximize", HandleMaximize },
- { "restore", HandleRestoreSize },
-#endif
-#if OPT_NUM_LOCK
- { "alt-sends-escape", HandleAltEsc },
- { "meta-sends-escape", HandleMetaEsc },
- { "set-num-lock", HandleNumLock },
-#endif
-#if OPT_READLINE
- { "readline-button", ReadLineButton },
-#endif
-#if OPT_RENDERFONT
- { "set-render-font", HandleRenderFont },
-#endif
-#if OPT_SCO_FUNC_KEYS
- { "set-sco-function-keys", HandleScoFunctionKeys },
-#endif
-#if OPT_SHIFT_FONTS
- { "larger-vt-font", HandleLargerFont },
- { "smaller-vt-font", HandleSmallerFont },
-#endif
-#if OPT_TEK4014
- { "set-terminal-type", HandleSetTerminalType },
- { "set-visibility", HandleVisibility },
- { "set-tek-text", HandleSetTekText },
- { "tek-page", HandleTekPage },
- { "tek-reset", HandleTekReset },
- { "tek-copy", HandleTekCopy },
-#endif
-#if OPT_TOOLBAR
- { "set-toolbar", HandleToolbar },
-#endif
-#if OPT_WIDE_CHARS
- { "set-utf8-mode", HandleUTF8Mode },
-#endif
-};
-/* *INDENT-ON* */
-
-static XtResource resources[] =
-{
- Bres(XtNallowSendEvents, XtCAllowSendEvents, screen.allowSendEvent0, False),
- Bres(XtNallowWindowOps, XtCAllowWindowOps, screen.allowWindowOp0, True),
- Bres(XtNalwaysHighlight, XtCAlwaysHighlight, screen.always_highlight, False),
- Bres(XtNappcursorDefault, XtCAppcursorDefault, misc.appcursorDefault, False),
- Bres(XtNappkeypadDefault, XtCAppkeypadDefault, misc.appkeypadDefault, False),
- Bres(XtNautoWrap, XtCAutoWrap, misc.autoWrap, True),
- Bres(XtNawaitInput, XtCAwaitInput, screen.awaitInput, False),
- Bres(XtNfreeBoldBox, XtCFreeBoldBox, screen.free_bold_box, False),
- Bres(XtNbackarrowKey, XtCBackarrowKey, screen.backarrow_key, True),
- Bres(XtNbellOnReset, XtCBellOnReset, screen.bellOnReset, True),
- Bres(XtNboldMode, XtCBoldMode, screen.bold_mode, True),
- Bres(XtNbrokenSelections, XtCBrokenSelections, screen.brokenSelections, False),
- Bres(XtNc132, XtCC132, screen.c132, False),
- Bres(XtNcurses, XtCCurses, screen.curses, False),
- Bres(XtNcutNewline, XtCCutNewline, screen.cutNewline, True),
- Bres(XtNcutToBeginningOfLine, XtCCutToBeginningOfLine,
- screen.cutToBeginningOfLine, True),
- Bres(XtNdeleteIsDEL, XtCDeleteIsDEL, screen.delete_is_del, DEFDELETE_DEL),
- Bres(XtNdynamicColors, XtCDynamicColors, misc.dynamicColors, True),
- Bres(XtNeightBitControl, XtCEightBitControl, screen.control_eight_bits, False),
- Bres(XtNeightBitInput, XtCEightBitInput, screen.input_eight_bits, True),
- Bres(XtNeightBitOutput, XtCEightBitOutput, screen.output_eight_bits, True),
- Bres(XtNhighlightSelection, XtCHighlightSelection,
- screen.highlight_selection, False),
- Bres(XtNhpLowerleftBugCompat, XtCHpLowerleftBugCompat, screen.hp_ll_bc, False),
- Bres(XtNi18nSelections, XtCI18nSelections, screen.i18nSelections, True),
- Bres(XtNjumpScroll, XtCJumpScroll, screen.jumpscroll, True),
- Bres(XtNloginShell, XtCLoginShell, misc.login_shell, False),
- Bres(XtNmarginBell, XtCMarginBell, screen.marginbell, False),
- Bres(XtNmetaSendsEscape, XtCMetaSendsEscape, screen.meta_sends_esc, False),
- Bres(XtNmultiScroll, XtCMultiScroll, screen.multiscroll, False),
- Bres(XtNoldXtermFKeys, XtCOldXtermFKeys, screen.old_fkeys, False),
- Bres(XtNpopOnBell, XtCPopOnBell, screen.poponbell, False),
- Bres(XtNprinterAutoClose, XtCPrinterAutoClose, screen.printer_autoclose, False),
- Bres(XtNprinterExtent, XtCPrinterExtent, screen.printer_extent, False),
- Bres(XtNprinterFormFeed, XtCPrinterFormFeed, screen.printer_formfeed, False),
- Bres(XtNreverseVideo, XtCReverseVideo, misc.re_verse, False),
- Bres(XtNreverseWrap, XtCReverseWrap, misc.reverseWrap, False),
- Bres(XtNscrollBar, XtCScrollBar, misc.scrollbar, False),
- Bres(XtNscrollKey, XtCScrollCond, screen.scrollkey, False),
- Bres(XtNscrollTtyOutput, XtCScrollCond, screen.scrollttyoutput, True),
- Bres(XtNsignalInhibit, XtCSignalInhibit, misc.signalInhibit, False),
- Bres(XtNtiteInhibit, XtCTiteInhibit, misc.titeInhibit, False),
- Bres(XtNtiXtraScroll, XtCTiXtraScroll, misc.tiXtraScroll, False),
- Bres(XtNtrimSelection, XtCTrimSelection, screen.trim_selection, False),
- Bres(XtNunderLine, XtCUnderLine, screen.underline, True),
- Bres(XtNvisualBell, XtCVisualBell, screen.visualbell, False),
-
- Ires(XtNbellSuppressTime, XtCBellSuppressTime, screen.bellSuppressTime, BELLSUPPRESSMSEC),
- Ires(XtNinternalBorder, XtCBorderWidth, screen.border, DEFBORDER),
- Ires(XtNlimitResize, XtCLimitResize, misc.limit_resize, 1),
- Ires(XtNmultiClickTime, XtCMultiClickTime, screen.multiClickTime, MULTICLICKTIME),
- Ires(XtNnMarginBell, XtCColumn, screen.nmarginbell, N_MARGINBELL),
- Ires(XtNprinterControlMode, XtCPrinterControlMode,
- screen.printer_controlmode, 0),
- Ires(XtNvisualBellDelay, XtCVisualBellDelay, screen.visualBellDelay, 100),
- Ires(XtNsaveLines, XtCSaveLines, screen.savelines, SAVELINES),
- Ires(XtNscrollBarBorder, XtCScrollBarBorder, screen.scrollBarBorder, 1),
- Ires(XtNscrollLines, XtCScrollLines, screen.scrolllines, SCROLLLINES),
-
- Sres(XtNfont1, XtCFont1, screen.MenuFontName(fontMenu_font1), NULL),
- Sres(XtNfont2, XtCFont2, screen.MenuFontName(fontMenu_font2), NULL),
- Sres(XtNfont3, XtCFont3, screen.MenuFontName(fontMenu_font3), NULL),
- Sres(XtNfont4, XtCFont4, screen.MenuFontName(fontMenu_font4), NULL),
- Sres(XtNfont5, XtCFont5, screen.MenuFontName(fontMenu_font5), NULL),
- Sres(XtNfont6, XtCFont6, screen.MenuFontName(fontMenu_font6), NULL),
- Sres(XtNanswerbackString, XtCAnswerbackString, screen.answer_back, ""),
- Sres(XtNboldFont, XtCBoldFont, misc.default_font.f_b, DEFBOLDFONT),
- Sres(XtNcharClass, XtCCharClass, screen.charClass, NULL),
- Sres(XtNdecTerminalID, XtCDecTerminalID, screen.term_id, DFT_DECID),
- Sres(XtNfont, XtCFont, misc.default_font.f_n, DEFFONT),
- Sres(XtNgeometry, XtCGeometry, misc.geo_metry, NULL),
- Sres(XtNkeyboardDialect, XtCKeyboardDialect, screen.keyboard_dialect, DFT_KBD_DIALECT),
- Sres(XtNprinterCommand, XtCPrinterCommand, screen.printer_command, ""),
- Sres(XtNtekGeometry, XtCGeometry, misc.T_geometry, NULL),
-
- Tres(XtNcursorColor, XtCCursorColor, TEXT_CURSOR, XtDefaultForeground),
- Tres(XtNforeground, XtCForeground, TEXT_FG, XtDefaultForeground),
- Tres(XtNpointerColor, XtCPointerColor, MOUSE_FG, XtDefaultForeground),
- Tres(XtNbackground, XtCBackground, TEXT_BG, XtDefaultBackground),
- Tres(XtNpointerColorBackground, XtCBackground, MOUSE_BG, XtDefaultBackground),
-
- {XtNresizeGravity, XtCResizeGravity, XtRGravity, sizeof(XtGravity),
- XtOffsetOf(XtermWidgetRec, misc.resizeGravity),
- XtRImmediate, (XtPointer) SouthWestGravity},
-
- {XtNpointerShape, XtCCursor, XtRCursor, sizeof(Cursor),
- XtOffsetOf(XtermWidgetRec, screen.pointer_cursor),
- XtRString, (XtPointer) "xterm"},
-
-#ifdef ALLOWLOGGING
- Bres(XtNlogInhibit, XtCLogInhibit, misc.logInhibit, False),
- Bres(XtNlogging, XtCLogging, misc.log_on, False),
- Sres(XtNlogFile, XtCLogfile, screen.logfile, NULL),
-#endif
-
-#ifndef NO_ACTIVE_ICON
- Bres("activeIcon", "ActiveIcon", misc.active_icon, False),
- Ires("iconBorderWidth", XtCBorderWidth, misc.icon_border_width, 2),
- Fres("iconFont", "IconFont", screen.fnt_icon, XtDefaultFont),
- Cres("iconBorderColor", XtCBorderColor, misc.icon_border_pixel, XtDefaultBackground),
-#endif /* NO_ACTIVE_ICON */
-
-#if OPT_BLINK_CURS
- Bres(XtNcursorBlink, XtCCursorBlink, screen.cursor_blink, False),
-#endif
-
-#if OPT_BLINK_TEXT
- Bres(XtNshowBlinkAsBold, XtCCursorBlink, screen.blink_as_bold, DEFBLINKASBOLD),
-#endif
-
-#if OPT_BLINK_CURS || OPT_BLINK_TEXT
- Ires(XtNcursorOnTime, XtCCursorOnTime, screen.blink_on, 600),
- Ires(XtNcursorOffTime, XtCCursorOffTime, screen.blink_off, 300),
-#endif
-
-#if OPT_BOX_CHARS
- Bres(XtNforceBoxChars, XtCForceBoxChars, screen.force_box_chars, False),
- Bres(XtNshowMissingGlyphs, XtCShowMissingGlyphs, screen.force_all_chars, False),
-#endif
-
-#if OPT_BROKEN_OSC
- Bres(XtNbrokenLinuxOSC, XtCBrokenLinuxOSC, screen.brokenLinuxOSC, True),
-#endif
-
-#if OPT_BROKEN_ST
- Bres(XtNbrokenStringTerm, XtCBrokenStringTerm, screen.brokenStringTerm, True),
-#endif
-
-#if OPT_C1_PRINT
- Bres(XtNallowC1Printable, XtCAllowC1Printable, screen.c1_printable, False),
-#endif
-
-#if OPT_DEC_CHRSET
- Bres(XtNfontDoublesize, XtCFontDoublesize, screen.font_doublesize, True),
- Ires(XtNcacheDoublesize, XtCCacheDoublesize, screen.cache_doublesize, NUM_CHRSET),
-#endif
-
-#if OPT_HIGHLIGHT_COLOR
- Tres(XtNhighlightColor, XtCHighlightColor, HIGHLIGHT_BG, XtDefaultForeground),
-#endif /* OPT_HIGHLIGHT_COLOR */
-
-#if OPT_INPUT_METHOD
- Bres(XtNopenIm, XtCOpenIm, misc.open_im, True),
- Sres(XtNinputMethod, XtCInputMethod, misc.input_method, NULL),
- Sres(XtNpreeditType, XtCPreeditType, misc.preedit_type,
- "OverTheSpot,Root"),
-#endif
-
-#if OPT_ISO_COLORS
- Bres(XtNboldColors, XtCColorMode, screen.boldColors, True),
- Ires(XtNveryBoldColors, XtCVeryBoldColors, screen.veryBoldColors, 0),
- Bres(XtNcolorMode, XtCColorMode, screen.colorMode, DFT_COLORMODE),
-
- Bres(XtNcolorAttrMode, XtCColorAttrMode, screen.colorAttrMode, False),
- Bres(XtNcolorBDMode, XtCColorAttrMode, screen.colorBDMode, False),
- Bres(XtNcolorBLMode, XtCColorAttrMode, screen.colorBLMode, False),
- Bres(XtNcolorRVMode, XtCColorAttrMode, screen.colorRVMode, False),
- Bres(XtNcolorULMode, XtCColorAttrMode, screen.colorULMode, False),
- Bres(XtNitalicULMode, XtCColorAttrMode, screen.italicULMode, False),
-
- COLOR_RES("0", screen.Acolors[COLOR_0], DFT_COLOR("black")),
- COLOR_RES("1", screen.Acolors[COLOR_1], DFT_COLOR("red3")),
- COLOR_RES("2", screen.Acolors[COLOR_2], DFT_COLOR("green3")),
- COLOR_RES("3", screen.Acolors[COLOR_3], DFT_COLOR("yellow3")),
- COLOR_RES("4", screen.Acolors[COLOR_4], DFT_COLOR(DEF_COLOR4)),
- COLOR_RES("5", screen.Acolors[COLOR_5], DFT_COLOR("magenta3")),
- COLOR_RES("6", screen.Acolors[COLOR_6], DFT_COLOR("cyan3")),
- COLOR_RES("7", screen.Acolors[COLOR_7], DFT_COLOR("gray90")),
- COLOR_RES("8", screen.Acolors[COLOR_8], DFT_COLOR("gray50")),
- COLOR_RES("9", screen.Acolors[COLOR_9], DFT_COLOR("red")),
- COLOR_RES("10", screen.Acolors[COLOR_10], DFT_COLOR("green")),
- COLOR_RES("11", screen.Acolors[COLOR_11], DFT_COLOR("yellow")),
- COLOR_RES("12", screen.Acolors[COLOR_12], DFT_COLOR(DEF_COLOR12)),
- COLOR_RES("13", screen.Acolors[COLOR_13], DFT_COLOR("magenta")),
- COLOR_RES("14", screen.Acolors[COLOR_14], DFT_COLOR("cyan")),
- COLOR_RES("15", screen.Acolors[COLOR_15], DFT_COLOR("white")),
- COLOR_RES("BD", screen.Acolors[COLOR_BD], DFT_COLOR(XtDefaultForeground)),
- COLOR_RES("BL", screen.Acolors[COLOR_BL], DFT_COLOR(XtDefaultForeground)),
- COLOR_RES("UL", screen.Acolors[COLOR_UL], DFT_COLOR(XtDefaultForeground)),
- COLOR_RES("RV", screen.Acolors[COLOR_RV], DFT_COLOR(XtDefaultForeground)),
-
-#if !OPT_COLOR_RES2
-#if OPT_256_COLORS
-# include <256colres.h>
-#elif OPT_88_COLORS
-# include <88colres.h>
-#endif
-#endif /* !OPT_COLOR_RES2 */
-
-#endif /* OPT_ISO_COLORS */
-
-#if OPT_MOD_FKEYS
- Ires(XtNmodifyCursorKeys, XtCModifyCursorKeys,
- keyboard.modify_cursor_keys, 2),
-#endif
-
-#if OPT_NUM_LOCK
- Bres(XtNalwaysUseMods, XtCAlwaysUseMods, misc.alwaysUseMods, False),
- Bres(XtNnumLock, XtCNumLock, misc.real_NumLock, True),
-#endif
-
-#if OPT_PRINT_COLORS
- Ires(XtNprintAttributes, XtCPrintAttributes, screen.print_attributes, 1),
-#endif
-
-#if OPT_SHIFT_FONTS
- Bres(XtNshiftFonts, XtCShiftFonts, misc.shift_fonts, True),
-#endif
-
-#if OPT_SUNPC_KBD
- Ires(XtNctrlFKeys, XtCCtrlFKeys, misc.ctrl_fkeys, 10),
-#endif
-
-#if OPT_TEK4014
- Bres(XtNtekInhibit, XtCTekInhibit, misc.tekInhibit, False),
- Bres(XtNtekSmall, XtCTekSmall, misc.tekSmall, False),
- Bres(XtNtekStartup, XtCTekStartup, screen.TekEmu, False),
-#endif
-
-#if OPT_TOOLBAR
- Wres(XtNmenuBar, XtCMenuBar, VT100_TB_INFO(menu_bar), 0),
- Ires(XtNmenuHeight, XtCMenuHeight, VT100_TB_INFO(menu_height), 25),
-#endif
-
-#if OPT_WIDE_CHARS
- Ires(XtNutf8, XtCUtf8, screen.utf8_mode, uDefault),
- Bres(XtNwideChars, XtCWideChars, screen.wide_chars, False),
- Bres(XtNmkWidth, XtCMkWidth, misc.mk_width, False),
- Bres(XtNcjkWidth, XtCCjkWidth, misc.cjk_width, False),
- Bres(XtNvt100Graphics, XtCVT100Graphics, screen.vt100_graphics, True),
- Sres(XtNwideBoldFont, XtCWideBoldFont, misc.default_font.f_wb, DEFWIDEBOLDFONT),
- Sres(XtNwideFont, XtCWideFont, misc.default_font.f_w, DEFWIDEFONT),
-#endif
-
-#if OPT_LUIT_PROG
- Sres(XtNlocale, XtCLocale, misc.locale_str, "medium"),
- Sres(XtNlocaleFilter, XtCLocaleFilter, misc.localefilter, DEFLOCALEFILTER),
-#endif
-
-#if OPT_INPUT_METHOD
- Sres(XtNximFont, XtCXimFont, misc.f_x, DEFXIMFONT),
-#endif
-
-#if OPT_XMC_GLITCH
- Bres(XtNxmcInline, XtCXmcInline, screen.xmc_inline, False),
- Bres(XtNxmcMoveSGR, XtCXmcMoveSGR, screen.move_sgr_ok, True),
- Ires(XtNxmcAttributes, XtCXmcAttributes, screen.xmc_attributes, 1),
- Ires(XtNxmcGlitch, XtCXmcGlitch, screen.xmc_glitch, 0),
-#endif
-
-#ifdef SCROLLBAR_RIGHT
- Bres(XtNrightScrollBar, XtCRightScrollBar, misc.useRight, False),
-#endif
-
-#if OPT_RENDERFONT
- Dres(XtNfaceSize, XtCFaceSize, misc.face_size, DEFFACESIZE),
- Sres(XtNfaceName, XtCFaceName, misc.face_name, DEFFACENAME),
- Sres(XtNfaceNameDoublesize, XtCFaceNameDoublesize, misc.face_wide_name, DEFFACENAME),
- Bres(XtNrenderFont, XtCRenderFont, misc.render_font, True),
-#endif
-};
-
-static Boolean VTSetValues(Widget cur, Widget request, Widget new_arg,
- ArgList args, Cardinal *num_args);
-static void VTClassInit(void);
-static void VTDestroy(Widget w);
-static void VTExpose(Widget w, XEvent * event, Region region);
-static void VTInitialize(Widget wrequest, Widget new_arg, ArgList args,
- Cardinal *num_args);
-static void VTRealize(Widget w, XtValueMask * valuemask,
- XSetWindowAttributes * values);
-static void VTResize(Widget w);
-
-#if OPT_I18N_SUPPORT && OPT_INPUT_METHOD
-static void VTInitI18N(void);
-#endif
-
-#ifdef VMS
-globaldef {
- "xtermclassrec"
-} noshare
-
-#else
-static
-#endif /* VMS */
-WidgetClassRec xtermClassRec =
-{
- {
-/* core_class fields */
- (WidgetClass) & widgetClassRec, /* superclass */
- "VT100", /* class_name */
- sizeof(XtermWidgetRec), /* widget_size */
- VTClassInit, /* class_initialize */
- NULL, /* class_part_initialize */
- False, /* class_inited */
- VTInitialize, /* initialize */
- NULL, /* initialize_hook */
- VTRealize, /* realize */
- actionsList, /* actions */
- XtNumber(actionsList), /* num_actions */
- resources, /* resources */
- XtNumber(resources), /* num_resources */
- NULLQUARK, /* xrm_class */
- True, /* compress_motion */
- False, /* compress_exposure */
- True, /* compress_enterleave */
- False, /* visible_interest */
- VTDestroy, /* destroy */
- VTResize, /* resize */
- VTExpose, /* expose */
- VTSetValues, /* set_values */
- NULL, /* set_values_hook */
- XtInheritSetValuesAlmost, /* set_values_almost */
- NULL, /* get_values_hook */
- NULL, /* accept_focus */
- XtVersion, /* version */
- NULL, /* callback_offsets */
- defaultTranslations, /* tm_table */
- XtInheritQueryGeometry, /* query_geometry */
- XtInheritDisplayAccelerator, /* display_accelerator */
- NULL /* extension */
- }
-};
-
-#ifdef VMS
-globaldef {
- "xtermwidgetclass"
-}
-noshare
-#endif /* VMS */
-WidgetClass xtermWidgetClass = (WidgetClass) & xtermClassRec;
-
-/*
- * Add input-actions for widgets that are overlooked (scrollbar and toolbar):
- *
- * a) Sometimes the scrollbar passes through translations, sometimes it
- * doesn't. We add the KeyPress translations here, just to be sure.
- * b) In the normal (non-toolbar) configuration, the xterm widget covers
- * almost all of the window. With a toolbar, there's a relatively
- * large area that the user would expect to enter keystrokes since the
- * program can get the focus.
- */
-void
-xtermAddInput(Widget w)
-{
-#if OPT_TOOLBAR
- /* *INDENT-OFF* */
- XtActionsRec input_actions[] = {
- { "insert", HandleKeyPressed }, /* alias */
- { "insert-eight-bit", HandleEightBitKeyPressed },
- { "insert-seven-bit", HandleKeyPressed },
- { "secure", HandleSecure },
- { "string", HandleStringEvent },
- { "scroll-back", HandleScrollBack },
- { "scroll-forw", HandleScrollForward },
- { "select-cursor-end", HandleKeyboardSelectEnd },
- { "select-cursor-extend", HandleKeyboardSelectExtend },
- { "select-cursor-start", HandleKeyboardSelectStart },
- { "insert-selection", HandleInsertSelection },
- { "select-start", HandleSelectStart },
- { "select-extend", HandleSelectExtend },
- { "start-extend", HandleStartExtend },
- { "select-end", HandleSelectEnd },
- { "clear-saved-lines", HandleClearSavedLines },
- { "popup-menu", HandlePopupMenu },
- { "bell", HandleBell },
- { "ignore", HandleIgnore },
-#if OPT_DABBREV
- { "dabbrev-expand", HandleDabbrevExpand },
-#endif
-#if OPT_SHIFT_FONTS
- { "larger-vt-font", HandleLargerFont },
- { "smaller-vt-font", HandleSmallerFont },
-#endif
- };
- /* *INDENT-ON* */
-
- XtAppAddActions(app_con, input_actions, XtNumber(input_actions));
-#endif
- XtAugmentTranslations(w, XtParseTranslationTable(defaultTranslations));
-}
-
-#if OPT_ISO_COLORS
-/*
- * The terminal's foreground and background colors are set via two mechanisms:
- * text (cur_foreground, cur_background values that are passed down to
- * XDrawImageString and XDrawString)
- * area (X11 graphics context used in XClearArea and XFillRectangle)
- */
-void
-SGR_Foreground(int color)
-{
- TScreen *screen = &term->screen;
- Pixel fg;
-
- if (color >= 0) {
- term->flags |= FG_COLOR;
- } else {
- term->flags &= ~FG_COLOR;
- }
- fg = getXtermForeground(term->flags, color);
- term->cur_foreground = color;
-
- XSetForeground(screen->display, NormalGC(screen), fg);
- XSetBackground(screen->display, ReverseGC(screen), fg);
-
- if (NormalGC(screen) != NormalBoldGC(screen)) {
- XSetForeground(screen->display, NormalBoldGC(screen), fg);
- XSetBackground(screen->display, ReverseBoldGC(screen), fg);
- }
-}
-
-void
-SGR_Background(int color)
-{
- TScreen *screen = &term->screen;
- Pixel bg;
-
- /*
- * An indexing operation may have set screen->scroll_amt, which would
- * normally result in calling FlushScroll() in WriteText(). However,
- * if we're changing the background color now, then the new value
- * should not apply to the pending blank lines.
- */
- if (screen->scroll_amt && (color != term->cur_background))
- FlushScroll(screen);
-
- if (color >= 0) {
- term->flags |= BG_COLOR;
- } else {
- term->flags &= ~BG_COLOR;
- }
- bg = getXtermBackground(term->flags, color);
- term->cur_background = color;
-
- XSetBackground(screen->display, NormalGC(screen), bg);
- XSetForeground(screen->display, ReverseGC(screen), bg);
-
- if (NormalGC(screen) != NormalBoldGC(screen)) {
- XSetBackground(screen->display, NormalBoldGC(screen), bg);
- XSetForeground(screen->display, ReverseBoldGC(screen), bg);
- }
-}
-
-/* Invoked after updating bold/underline flags, computes the extended color
- * index to use for foreground. (See also 'extract_fg()').
- */
-static void
-setExtendedFG(void)
-{
- int fg = term->sgr_foreground;
-
- if (term->screen.colorAttrMode
- || (fg < 0)) {
- if (term->screen.colorULMode && (term->flags & UNDERLINE))
- fg = COLOR_UL;
- if (term->screen.colorBDMode && (term->flags & BOLD))
- fg = COLOR_BD;
- if (term->screen.colorBLMode && (term->flags & BLINK))
- fg = COLOR_BL;
- }
-
- /* This implements the IBM PC-style convention of 8-colors, with one
- * bit for bold, thus mapping the 0-7 codes to 8-15. It won't make
- * much sense for 16-color applications, but we keep it to retain
- * compatiblity with ANSI-color applications.
- */
-#if OPT_PC_COLORS /* XXXJTL should be settable at runtime (resource or OSC?) */
- if (term->screen.boldColors
- && (!term->sgr_extended)
- && (fg >= 0)
- && (fg < 8)
- && (term->flags & BOLD))
- fg |= 8;
-#endif
-
- SGR_Foreground(fg);
-}
-
-/* Invoked after updating inverse flag, computes the extended color
- * index to use for background. (See also 'extract_bg()').
- */
-static void
-setExtendedBG(void)
-{
- int bg = term->sgr_background;
-
- if (term->screen.colorAttrMode
- || (bg < 0)) {
- if (term->screen.colorRVMode && (term->flags & INVERSE))
- bg = COLOR_RV;
- }
-
- SGR_Background(bg);
-}
-
-static void
-reset_SGR_Foreground(void)
-{
- term->sgr_foreground = -1;
- term->sgr_extended = 0;
- setExtendedFG();
-}
-
-static void
-reset_SGR_Background(void)
-{
- term->sgr_background = -1;
- setExtendedBG();
-}
-
-static void
-reset_SGR_Colors(void)
-{
- reset_SGR_Foreground();
- reset_SGR_Background();
-}
-#endif /* OPT_ISO_COLORS */
-
-void
-resetCharsets(TScreen * screen)
-{
- TRACE(("resetCharsets\n"));
-
- screen->gsets[0] = 'B'; /* ASCII_G */
- screen->gsets[1] = 'B'; /* ASCII_G */
- screen->gsets[2] = 'B'; /* ASCII_G */
- screen->gsets[3] = 'B'; /* ASCII_G */
-
- screen->curgl = 0; /* G0 => GL. */
- screen->curgr = 2; /* G2 => GR. */
- screen->curss = 0; /* No single shift. */
-
-#if OPT_VT52_MODE
- if (screen->vtXX_level == 0)
- screen->gsets[1] = '0'; /* Graphics */
-#endif
-}
-
-/*
- * VT300 and up support three ANSI conformance levels, defined according to
- * the dpANSI X3.134.1 standard. DEC's manuals equate levels 1 and 2, and
- * are unclear. This code is written based on the manuals.
- */
-static void
-set_ansi_conformance(TScreen * screen, int level)
-{
- TRACE(("set_ansi_conformance(%d) terminal_id %d, ansi_level %d\n",
- level,
- screen->terminal_id,
- screen->ansi_level));
- if (screen->vtXX_level >= 3) {
- switch (screen->ansi_level = level) {
- case 1:
- /* FALLTHRU */
- case 2:
- screen->gsets[0] = 'B'; /* G0 is ASCII */
- screen->gsets[1] = 'B'; /* G1 is ISO Latin-1 (FIXME) */
- screen->curgl = 0;
- screen->curgr = 1;
- break;
- case 3:
- screen->gsets[0] = 'B'; /* G0 is ASCII */
- screen->curgl = 0;
- break;
- }
- }
-}
-
-/*
- * Set scrolling margins. VTxxx terminals require that the top/bottom are
- * different, so we have at least two lines in the scrolling region.
- */
-void
-set_tb_margins(TScreen * screen, int top, int bottom)
-{
- TRACE(("set_tb_margins %d..%d, prior %d..%d\n",
- top, bottom,
- screen->top_marg,
- screen->bot_marg));
- if (bottom > top) {
- screen->top_marg = top;
- screen->bot_marg = bottom;
- }
- if (screen->top_marg > screen->max_row)
- screen->top_marg = screen->max_row;
- if (screen->bot_marg > screen->max_row)
- screen->bot_marg = screen->max_row;
-}
-
-void
-set_max_col(TScreen * screen, int cols)
-{
- TRACE(("set_max_col %d, prior %d\n", cols, screen->max_col));
- if (cols < 0)
- cols = 0;
- screen->max_col = cols;
-}
-
-void
-set_max_row(TScreen * screen, int rows)
-{
- TRACE(("set_max_row %d, prior %d\n", rows, screen->max_row));
- if (rows < 0)
- rows = 0;
- screen->max_row = rows;
-}
-
-#if OPT_TRACE
-#define WHICH_TABLE(name) if (table == name) result = #name
-static char *
-which_table(Const PARSE_T * table)
-{
- char *result = "?";
- /* *INDENT-OFF* */
- WHICH_TABLE (ansi_table);
- else WHICH_TABLE (csi_table);
- else WHICH_TABLE (csi2_table);
- else WHICH_TABLE (csi_ex_table);
- else WHICH_TABLE (csi_quo_table);
-#if OPT_DEC_LOCATOR
- else WHICH_TABLE (csi_tick_table);
-#endif
-#if OPT_DEC_RECTOPS
- else WHICH_TABLE (csi_dollar_table);
- else WHICH_TABLE (csi_star_table);
-#endif
- else WHICH_TABLE (dec_table);
- else WHICH_TABLE (dec2_table);
- else WHICH_TABLE (dec3_table);
- else WHICH_TABLE (cigtable);
- else WHICH_TABLE (eigtable);
- else WHICH_TABLE (esc_table);
- else WHICH_TABLE (esc_sp_table);
- else WHICH_TABLE (scrtable);
- else WHICH_TABLE (scstable);
- else WHICH_TABLE (sos_table);
-#if OPT_WIDE_CHARS
- else WHICH_TABLE (esc_pct_table);
-#endif
-#if OPT_VT52_MODE
- else WHICH_TABLE (vt52_table);
- else WHICH_TABLE (vt52_esc_table);
- else WHICH_TABLE (vt52_ignore_table);
-#endif
- /* *INDENT-ON* */
-
- return result;
-}
-#endif
-
- /* allocate larger buffer if needed/possible */
-#define SafeAlloc(type, area, used, size) \
- type *new_string = area; \
- unsigned new_length = size; \
- if (new_length == 0) { \
- new_length = 256; \
- new_string = TypeMallocN(type, new_length); \
- } else if (used+1 >= new_length) { \
- new_length = size * 2; \
- new_string = TypeMallocN(type, new_length); \
- if (new_string != 0 \
- && area != 0 \
- && used != 0) \
- memcpy(new_string, area, used * sizeof(type)); \
- }
-
-#define WriteNow() { \
- unsigned single = 0; \
- \
- if (screen->curss) { \
- dotext(screen, \
- screen->gsets[(int) (screen->curss)], \
- print_area, 1); \
- screen->curss = 0; \
- single++; \
- } \
- if (print_used > single) { \
- dotext(screen, \
- screen->gsets[(int) (screen->curgl)], \
- print_area + single, \
- print_used - single); \
- } \
- print_used = 0; \
- } \
-
-struct ParseState {
-#if OPT_VT52_MODE
- Bool vt52_cup;
-#endif
- Const PARSE_T *groundtable;
- Const PARSE_T *parsestate;
- int scstype;
- Bool private_function; /* distinguish private-mode from standard */
- int string_mode; /* nonzero iff we're processing a string */
- int lastchar; /* positive iff we had a graphic character */
- int nextstate;
-#if OPT_WIDE_CHARS
- int last_was_wide;
-#endif
-};
-
-static struct ParseState myState;
-
-static Boolean
-doparsing(unsigned c, struct ParseState *sp)
-{
- /* Buffer for processing printable text */
- static IChar *print_area;
- static size_t print_size, print_used;
-
- /* Buffer for processing strings (e.g., OSC ... ST) */
- static Char *string_area;
- static size_t string_size, string_used;
-
- TScreen *screen = &term->screen;
- int row;
- int col;
- int top;
- int bot;
- int count;
- int laststate;
- int thischar = -1;
- XTermRect myRect;
-
- do {
-#if OPT_WIDE_CHARS
-
- /*
- * Handle zero-width combining characters. Make it faster by noting
- * that according to the Unicode charts, the majority of Western
- * character sets do not use this feature. There are some unassigned
- * codes at 0x242, but no zero-width characters until past 0x300.
- */
- if (c >= 0x300 && screen->wide_chars
- && my_wcwidth((int) c) == 0) {
- int prev, precomposed;
-
- WriteNow();
-
- prev = getXtermCell(screen,
- screen->last_written_row,
- screen->last_written_col);
- precomposed = do_precomposition(prev, (int) c);
-
- if (precomposed != -1) {
- putXtermCell(screen,
- screen->last_written_row,
- screen->last_written_col, precomposed);
- } else {
- addXtermCombining(screen,
- screen->last_written_row,
- screen->last_written_col, c);
- }
- if (!screen->scroll_amt)
- ScrnUpdate(screen,
- screen->last_written_row,
- screen->last_written_col, 1, 1, 1);
- continue;
- }
-#endif
-
- /* Intercept characters for printer controller mode */
- if (screen->printer_controlmode == 2) {
- if ((c = xtermPrinterControl((int) c)) == 0)
- continue;
- }
-
- /*
- * VT52 is a little ugly in the one place it has a parameterized
- * control sequence, since the parameter falls after the character
- * that denotes the type of sequence.
- */
-#if OPT_VT52_MODE
- if (sp->vt52_cup) {
- if (nparam < NPARAM)
- param[nparam++] = (c & 0x7f) - 32;
- if (nparam < 2)
- continue;
- sp->vt52_cup = False;
- if ((row = param[0]) < 0)
- row = 0;
- if ((col = param[1]) < 0)
- col = 0;
- CursorSet(screen, row, col, term->flags);
- sp->parsestate = vt52_table;
- param[0] = 0;
- param[1] = 0;
- continue;
- }
-#endif
-
- /*
- * The parsing tables all have 256 entries. If we're supporting
- * wide characters, we handle them by treating them the same as
- * printing characters.
- */
- laststate = sp->nextstate;
-#if OPT_WIDE_CHARS
- if (c > 255) {
- if (sp->parsestate == sp->groundtable) {
- sp->nextstate = CASE_PRINT;
- } else if (sp->parsestate == sos_table) {
- c &= 0xffff;
- if (c > 255) {
- TRACE(("Found code > 255 while in SOS state: %04X\n", c));
- c = '?';
- }
- } else {
- sp->nextstate = CASE_GROUND_STATE;
- }
- } else
-#endif
- sp->nextstate = sp->parsestate[E2A(c)];
-
-#if OPT_BROKEN_OSC
- /*
- * Linux console palette escape sequences start with an OSC, but do
- * not terminate correctly. Some scripts do not check before writing
- * them, making xterm appear to hang (it's awaiting a valid string
- * terminator). Just ignore these if we see them - there's no point
- * in emulating bad code.
- */
- if (screen->brokenLinuxOSC
- && sp->parsestate == sos_table) {
- if (string_used) {
- switch (string_area[0]) {
- case 'P':
- if (string_used <= 7)
- break;
- /* FALLTHRU */
- case 'R':
- sp->parsestate = sp->groundtable;
- sp->nextstate = sp->parsestate[E2A(c)];
- TRACE(("Reset to ground state (brokenLinuxOSC)\n"));
- break;
- }
- }
- }
-#endif
-
-#if OPT_BROKEN_ST
- /*
- * Before patch #171, carriage control embedded within an OSC string
- * would terminate it. Some (buggy, of course) applications rely on
- * this behavior. Accommodate them by allowing one to compile xterm
- * and emulate the old behavior.
- */
- if (screen->brokenStringTerm
- && sp->parsestate == sos_table
- && c < 32) {
- switch (c) {
- case 5: /* FALLTHRU */
- case 8: /* FALLTHRU */
- case 9: /* FALLTHRU */
- case 10: /* FALLTHRU */
- case 11: /* FALLTHRU */
- case 12: /* FALLTHRU */
- case 13: /* FALLTHRU */
- case 14: /* FALLTHRU */
- case 15: /* FALLTHRU */
- case 24:
- sp->parsestate = sp->groundtable;
- sp->nextstate = sp->parsestate[E2A(c)];
- TRACE(("Reset to ground state (brokenStringTerm)\n"));
- break;
- }
- }
-#endif
-
-#if OPT_C1_PRINT
- /*
- * This is not completely foolproof, but will allow an application
- * with values in the C1 range to use them as printable characters,
- * provided that they are not intermixed with an escape sequence.
- */
- if (screen->c1_printable
- && (c >= 128 && c < 160)) {
- sp->nextstate = (sp->parsestate == esc_table
- ? CASE_ESC_IGNORE
- : sp->parsestate[E2A(160)]);
- }
-#endif
-
-#if OPT_WIDE_CHARS
- /*
- * If we have a C1 code and the c1_printable flag is not set, simply
- * ignore it when it was translated from UTF-8. That is because the
- * value could not have been present as-is in the UTF-8.
- *
- * To see that CASE_IGNORE is a consistent value, note that it is
- * always used for NUL and other uninteresting C0 controls.
- */
-#if OPT_C1_PRINT
- if (!screen->c1_printable)
-#endif
- if (screen->wide_chars
- && (c >= 128 && c < 160)) {
- sp->nextstate = CASE_IGNORE;
- }
-
- /*
- * If this character is a different width than the last one, put the
- * previous text into the buffer and draw it now.
- */
- if (iswide((int) c) != sp->last_was_wide) {
- WriteNow();
- }
-#endif
-
- /*
- * Accumulate string for printable text. This may be 8/16-bit
- * characters.
- */
- if (sp->nextstate == CASE_PRINT) {
- SafeAlloc(IChar, print_area, print_used, print_size);
- if (new_string == 0) {
- fprintf(stderr,
- "Cannot allocate %u bytes for printable text\n",
- new_length);
- continue;
- }
-#if OPT_VT52_MODE
- /*
- * Strip output text to 7-bits for VT52. We should do this for
- * VT100 also (which is a 7-bit device), but xterm has been
- * doing this for so long we shouldn't change this behavior.
- */
- if (screen->vtXX_level < 1)
- c &= 0x7f;
-#endif
- print_area = new_string;
- print_size = new_length;
- print_area[print_used++] = sp->lastchar = thischar = c;
-#if OPT_WIDE_CHARS
- sp->last_was_wide = iswide((int) c);
-#endif
- if (morePtyData(screen, VTbuffer)) {
- continue;
- }
- }
-
- if (sp->nextstate == CASE_PRINT
- || (laststate == CASE_PRINT && print_used)) {
- WriteNow();
- }
-
- /*
- * Accumulate string for APC, DCS, PM, OSC, SOS controls
- * This should always be 8-bit characters.
- */
- if (sp->parsestate == sos_table) {
- SafeAlloc(Char, string_area, string_used, string_size);
- if (new_string == 0) {
- fprintf(stderr,
- "Cannot allocate %u bytes for string mode %d\n",
- new_length, sp->string_mode);
- continue;
- }
-#if OPT_WIDE_CHARS
- /*
- * We cannot display codes above 255, but let's try to
- * accommodate the application a little by not aborting the
- * string.
- */
- if ((c & 0xffff) > 255) {
- sp->nextstate = CASE_PRINT;
- c = '?';
- }
-#endif
- string_area = new_string;
- string_size = new_length;
- string_area[string_used++] = c;
- } else if (sp->parsestate != esc_table) {
- /* if we were accumulating, we're not any more */
- sp->string_mode = 0;
- string_used = 0;
- }
-
- TRACE(("parse %04X -> %d %s\n", c, sp->nextstate, which_table(sp->parsestate)));
-
- switch (sp->nextstate) {
- case CASE_PRINT:
- TRACE(("CASE_PRINT - printable characters\n"));
- break;
-
- case CASE_GROUND_STATE:
- TRACE(("CASE_GROUND_STATE - exit ignore mode\n"));
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_IGNORE:
- TRACE(("CASE_IGNORE - Ignore character %02X\n", c));
- break;
-
- case CASE_ENQ:
- TRACE(("CASE_ENQ - answerback\n"));
- for (count = 0; screen->answer_back[count] != 0; count++)
- unparseputc(screen->answer_back[count], screen->respond);
- break;
-
- case CASE_BELL:
- TRACE(("CASE_BELL - bell\n"));
- if (sp->string_mode == OSC) {
- if (string_used)
- string_area[--string_used] = '\0';
- do_osc(string_area, string_used, (int) c);
- sp->parsestate = sp->groundtable;
- } else {
- /* bell */
- Bell(XkbBI_TerminalBell, 0);
- }
- break;
-
- case CASE_BS:
- TRACE(("CASE_BS - backspace\n"));
- CursorBack(screen, 1);
- break;
-
- case CASE_CR:
- /* CR */
- CarriageReturn(screen);
- break;
-
- case CASE_ESC:
- if_OPT_VT52_MODE(screen, {
- sp->parsestate = vt52_esc_table;
- break;
- });
- sp->parsestate = esc_table;
- break;
-
-#if OPT_VT52_MODE
- case CASE_VT52_CUP:
- TRACE(("CASE_VT52_CUP - VT52 cursor addressing\n"));
- sp->vt52_cup = True;
- nparam = 0;
- break;
-
- case CASE_VT52_IGNORE:
- TRACE(("CASE_VT52_IGNORE - VT52 ignore-character\n"));
- sp->parsestate = vt52_ignore_table;
- break;
-#endif
-
- case CASE_VMOT:
- /*
- * form feed, line feed, vertical tab
- */
- xtermAutoPrint((int) c);
- xtermIndex(screen, 1);
- if (term->flags & LINEFEED)
- CarriageReturn(screen);
- do_xevents();
- break;
-
- case CASE_CBT:
- /* cursor backward tabulation */
- if ((count = param[0]) == DEFAULT)
- count = 1;
- while ((count-- > 0)
- && (TabToPrevStop(screen))) ;
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_CHT:
- /* cursor forward tabulation */
- if ((count = param[0]) == DEFAULT)
- count = 1;
- while ((count-- > 0)
- && (TabToNextStop(screen))) ;
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_TAB:
- /* tab */
- TabToNextStop(screen);
- break;
-
- case CASE_SI:
- screen->curgl = 0;
- if_OPT_VT52_MODE(screen, {
- sp->parsestate = sp->groundtable;
- });
- break;
-
- case CASE_SO:
- screen->curgl = 1;
- if_OPT_VT52_MODE(screen, {
- sp->parsestate = sp->groundtable;
- });
- break;
-
- case CASE_DECDHL:
- xterm_DECDHL(c == '3');
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DECSWL:
- xterm_DECSWL();
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DECDWL:
- xterm_DECDWL();
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_SCR_STATE:
- /* enter scr state */
- sp->parsestate = scrtable;
- break;
-
- case CASE_SCS0_STATE:
- /* enter scs state 0 */
- sp->scstype = 0;
- sp->parsestate = scstable;
- break;
-
- case CASE_SCS1_STATE:
- /* enter scs state 1 */
- sp->scstype = 1;
- sp->parsestate = scstable;
- break;
-
- case CASE_SCS2_STATE:
- /* enter scs state 2 */
- sp->scstype = 2;
- sp->parsestate = scstable;
- break;
-
- case CASE_SCS3_STATE:
- /* enter scs state 3 */
- sp->scstype = 3;
- sp->parsestate = scstable;
- break;
-
- case CASE_ESC_IGNORE:
- /* unknown escape sequence */
- sp->parsestate = eigtable;
- break;
-
- case CASE_ESC_DIGIT:
- /* digit in csi or dec mode */
- if ((row = param[nparam - 1]) == DEFAULT)
- row = 0;
- param[nparam - 1] = 10 * row + (c - '0');
- if (param[nparam - 1] > 65535)
- param[nparam - 1] = 65535;
- if (sp->parsestate == csi_table)
- sp->parsestate = csi2_table;
- break;
-
- case CASE_ESC_SEMI:
- /* semicolon in csi or dec mode */
- if (nparam < NPARAM)
- param[nparam++] = DEFAULT;
- if (sp->parsestate == csi_table)
- sp->parsestate = csi2_table;
- break;
-
- case CASE_DEC_STATE:
- /* enter dec mode */
- sp->parsestate = dec_table;
- break;
-
- case CASE_DEC2_STATE:
- /* enter dec2 mode */
- sp->parsestate = dec2_table;
- break;
-
- case CASE_DEC3_STATE:
- /* enter dec3 mode */
- sp->parsestate = dec3_table;
- break;
-
- case CASE_ICH:
- TRACE(("CASE_ICH - insert char\n"));
- if ((row = param[0]) < 1)
- row = 1;
- InsertChar(screen, (unsigned) row);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_CUU:
- TRACE(("CASE_CUU - cursor up\n"));
- if ((row = param[0]) < 1)
- row = 1;
- CursorUp(screen, row);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_CUD:
- TRACE(("CASE_CUD - cursor down\n"));
- if ((row = param[0]) < 1)
- row = 1;
- CursorDown(screen, row);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_CUF:
- TRACE(("CASE_CUF - cursor forward\n"));
- if ((col = param[0]) < 1)
- col = 1;
- CursorForward(screen, col);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_CUB:
- TRACE(("CASE_CUB - cursor backward\n"));
- if ((col = param[0]) < 1)
- col = 1;
- CursorBack(screen, col);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_CUP:
- TRACE(("CASE_CUP - cursor position\n"));
- if_OPT_XMC_GLITCH(screen, {
- Jump_XMC(screen);
- });
- if ((row = param[0]) < 1)
- row = 1;
- if (nparam < 2 || (col = param[1]) < 1)
- col = 1;
- CursorSet(screen, row - 1, col - 1, term->flags);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_VPA:
- TRACE(("CASE_VPA - vertical position\n"));
- if ((row = param[0]) < 1)
- row = 1;
- CursorSet(screen, row - 1, screen->cur_col, term->flags);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_HPA:
- TRACE(("CASE_HPA - horizontal position\n"));
- if ((col = param[0]) < 1)
- col = 1;
- CursorSet(screen, screen->cur_row, col - 1, term->flags);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_HP_BUGGY_LL:
- TRACE(("CASE_HP_BUGGY_LL\n"));
- /* Some HP-UX applications have the bug that they
- assume ESC F goes to the lower left corner of
- the screen, regardless of what terminfo says. */
- if (screen->hp_ll_bc)
- CursorSet(screen, screen->max_row, 0, term->flags);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_ED:
- TRACE(("CASE_ED - erase display\n"));
- do_erase_display(screen, param[0], OFF_PROTECT);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_EL:
- TRACE(("CASE_EL - erase line\n"));
- do_erase_line(screen, param[0], OFF_PROTECT);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_ECH:
- TRACE(("CASE_ECH - erase char\n"));
- /* ECH */
- ClearRight(screen, param[0] < 1 ? 1 : param[0]);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_IL:
- TRACE(("CASE_IL - insert line\n"));
- if ((row = param[0]) < 1)
- row = 1;
- InsertLine(screen, row);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DL:
- TRACE(("CASE_DL - delete line\n"));
- if ((row = param[0]) < 1)
- row = 1;
- DeleteLine(screen, row);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DCH:
- TRACE(("CASE_DCH - delete char\n"));
- if ((row = param[0]) < 1)
- row = 1;
- DeleteChar(screen, (unsigned) row);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_TRACK_MOUSE:
- /*
- * A single parameter other than zero is always scroll-down.
- * A zero-parameter is used to reset the mouse mode, and is
- * not useful for scrolling anyway.
- */
- if (nparam > 1 || param[0] == 0) {
- TRACE(("CASE_TRACK_MOUSE\n"));
- /* Track mouse as long as in window and between
- * specified rows
- */
- TrackMouse(param[0],
- param[2] - 1, param[1] - 1,
- param[3] - 1, param[4] - 2);
- } else {
- TRACE(("CASE_SD - scroll down\n"));
- /* SD */
- if ((count = param[0]) < 1)
- count = 1;
- RevScroll(screen, count);
- do_xevents();
- }
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DECID:
- TRACE(("CASE_DECID\n"));
- if_OPT_VT52_MODE(screen, {
- unparseputc(ESC, screen->respond);
- unparseputc('/', screen->respond);
- unparseputc('Z', screen->respond);
- sp->parsestate = sp->groundtable;
- break;
- });
- param[0] = DEFAULT; /* Default ID parameter */
- /* FALLTHRU */
- case CASE_DA1:
- TRACE(("CASE_DA1\n"));
- if (param[0] <= 0) { /* less than means DEFAULT */
- count = 0;
- reply.a_type = CSI;
- reply.a_pintro = '?';
-
- /* The first param corresponds to the highest
- * operating level (i.e., service level) of the
- * emulation. A DEC terminal can be setup to
- * respond with a different DA response, but
- * there's no control sequence that modifies this.
- * We set it via a resource.
- */
- if (screen->terminal_id < 200) {
- switch (screen->terminal_id) {
- case 102:
- reply.a_param[count++] = 6; /* VT102 */
- break;
- case 101:
- reply.a_param[count++] = 1; /* VT101 */
- reply.a_param[count++] = 0; /* no options */
- break;
- default: /* VT100 */
- reply.a_param[count++] = 1; /* VT100 */
- reply.a_param[count++] = 2; /* AVO */
- break;
- }
- } else {
- reply.a_param[count++] = 60 + screen->terminal_id / 100;
- reply.a_param[count++] = 1; /* 132-columns */
- reply.a_param[count++] = 2; /* printer */
- reply.a_param[count++] = 6; /* selective-erase */
-#if OPT_SUNPC_KBD
- if (term->keyboard.type == keyboardIsVT220)
-#endif
- reply.a_param[count++] = 8; /* user-defined-keys */
- reply.a_param[count++] = 9; /* national replacement charsets */
- reply.a_param[count++] = 15; /* technical characters */
- if_OPT_ISO_COLORS(screen, {
- reply.a_param[count++] = 22; /* ANSI color, VT525 */
- });
-#if OPT_DEC_LOCATOR
- reply.a_param[count++] = 29; /* ANSI text locator */
-#endif
- }
- reply.a_nparam = count;
- reply.a_inters = 0;
- reply.a_final = 'c';
- unparseseq(&reply, screen->respond);
- }
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DA2:
- TRACE(("CASE_DA2\n"));
- if (param[0] <= 0) { /* less than means DEFAULT */
- count = 0;
- reply.a_type = CSI;
- reply.a_pintro = '>';
-
- if (screen->terminal_id >= 200)
- reply.a_param[count++] = 1; /* VT220 */
- else
- reply.a_param[count++] = 0; /* VT100 (nonstandard) */
- reply.a_param[count++] = XTERM_PATCH; /* Version */
- reply.a_param[count++] = 0; /* options (none) */
- reply.a_nparam = count;
- reply.a_inters = 0;
- reply.a_final = 'c';
- unparseseq(&reply, screen->respond);
- }
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DECRPTUI:
- TRACE(("CASE_DECRPTUI\n"));
- if ((screen->terminal_id >= 400)
- && (param[0] <= 0)) { /* less than means DEFAULT */
- unparseputc1(DCS, screen->respond);
- unparseputc('!', screen->respond);
- unparseputc('|', screen->respond);
- unparseputc('0', screen->respond);
- unparseputc1(ST, screen->respond);
- }
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_TBC:
- TRACE(("CASE_TBC - tab clear\n"));
- if ((row = param[0]) <= 0) /* less than means default */
- TabClear(term->tabs, screen->cur_col);
- else if (row == 3)
- TabZonk(term->tabs);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_SET:
- TRACE(("CASE_SET - set mode\n"));
- ansi_modes(term, bitset);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_RST:
- TRACE(("CASE_RST - reset mode\n"));
- ansi_modes(term, bitclr);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_SGR:
- for (row = 0; row < nparam; ++row) {
- if_OPT_XMC_GLITCH(screen, {
- Mark_XMC(screen, param[row]);
- });
- TRACE(("CASE_SGR %d\n", param[row]));
- switch (param[row]) {
- case DEFAULT:
- case 0:
- term->flags &=
- ~(INVERSE | BOLD | BLINK | UNDERLINE | INVISIBLE);
- if_OPT_ISO_COLORS(screen, {
- reset_SGR_Colors();
- });
- break;
- case 1: /* Bold */
- term->flags |= BOLD;
- if_OPT_ISO_COLORS(screen, {
- setExtendedFG();
- });
- break;
- case 5: /* Blink */
- term->flags |= BLINK;
- StartBlinking(screen);
- if_OPT_ISO_COLORS(screen, {
- setExtendedFG();
- });
- break;
- case 4: /* Underscore */
- term->flags |= UNDERLINE;
- if_OPT_ISO_COLORS(screen, {
- setExtendedFG();
- });
- break;
- case 7:
- term->flags |= INVERSE;
- if_OPT_ISO_COLORS(screen, {
- setExtendedBG();
- });
- break;
- case 8:
- term->flags |= INVISIBLE;
- break;
- case 22: /* reset 'bold' */
- term->flags &= ~BOLD;
- if_OPT_ISO_COLORS(screen, {
- setExtendedFG();
- });
- break;
- case 24:
- term->flags &= ~UNDERLINE;
- if_OPT_ISO_COLORS(screen, {
- setExtendedFG();
- });
- break;
- case 25: /* reset 'blink' */
- term->flags &= ~BLINK;
- if_OPT_ISO_COLORS(screen, {
- setExtendedFG();
- });
- break;
- case 27:
- term->flags &= ~INVERSE;
- if_OPT_ISO_COLORS(screen, {
- setExtendedBG();
- });
- break;
- case 28:
- term->flags &= ~INVISIBLE;
- break;
- case 30:
- case 31:
- case 32:
- case 33:
- case 34:
- case 35:
- case 36:
- case 37:
- if_OPT_ISO_COLORS(screen, {
- term->sgr_foreground = (param[row] - 30);
- term->sgr_extended = 0;
- setExtendedFG();
- });
- break;
- case 38:
- /* This is more complicated than I'd
- like, but it should properly eat all
- the parameters for unsupported modes
- */
- if_OPT_ISO_COLORS(screen, {
- row++;
- if (row < nparam) {
- switch (param[row]) {
- case 5:
- row++;
- if (row < nparam &&
- param[row] < NUM_ANSI_COLORS) {
- term->sgr_foreground = param[row];
- term->sgr_extended = 1;
- setExtendedFG();
- }
- break;
- default:
- row += 7;
- break;
- }
- }
- });
- break;
- case 39:
- if_OPT_ISO_COLORS(screen, {
- reset_SGR_Foreground();
- });
- break;
- case 40:
- case 41:
- case 42:
- case 43:
- case 44:
- case 45:
- case 46:
- case 47:
- if_OPT_ISO_COLORS(screen, {
- term->sgr_background = (param[row] - 40);
- setExtendedBG();
- });
- break;
- case 48:
- if_OPT_ISO_COLORS(screen, {
- row++;
- if (row < nparam) {
- switch (param[row]) {
- case 5:
- row++;
- if (row < nparam &&
- param[row] < NUM_ANSI_COLORS) {
- term->sgr_background = param[row];
- setExtendedBG();
- }
- break;
- default:
- row += 7;
- break;
- }
- }
- });
- break;
- case 49:
- if_OPT_ISO_COLORS(screen, {
- reset_SGR_Background();
- });
- break;
- case 90:
- case 91:
- case 92:
- case 93:
- case 94:
- case 95:
- case 96:
- case 97:
- if_OPT_AIX_COLORS(screen, {
- term->sgr_foreground = (param[row] - 90 + 8);
- term->sgr_extended = 0;
- setExtendedFG();
- });
- break;
- case 100:
-#if !OPT_AIX_COLORS
- if_OPT_ISO_COLORS(screen, {
- reset_SGR_Foreground();
- reset_SGR_Background();
- });
- break;
-#endif
- case 101:
- case 102:
- case 103:
- case 104:
- case 105:
- case 106:
- case 107:
- if_OPT_AIX_COLORS(screen, {
- term->sgr_background = (param[row] - 100 + 8);
- setExtendedBG();
- });
- break;
- }
- }
- sp->parsestate = sp->groundtable;
- break;
-
- /* DSR (except for the '?') is a superset of CPR */
- case CASE_DSR:
- sp->private_function = True;
-
- /* FALLTHRU */
- case CASE_CPR:
- TRACE(("CASE_CPR - cursor position\n"));
- count = 0;
- reply.a_type = CSI;
- reply.a_pintro = sp->private_function ? '?' : 0;
- reply.a_inters = 0;
- reply.a_final = 'n';
-
- switch (param[0]) {
- case 5:
- /* operating status */
- reply.a_param[count++] = 0; /* (no malfunction ;-) */
- break;
- case 6:
- /* CPR */
- /* DECXCPR (with page=0) */
- reply.a_param[count++] = screen->cur_row + 1;
- reply.a_param[count++] = screen->cur_col + 1;
- reply.a_final = 'R';
- break;
- case 15:
- /* printer status */
- reply.a_param[count++] = 13; /* implement printer */
- break;
- case 25:
- /* UDK status */
- reply.a_param[count++] = 20; /* UDK always unlocked */
- break;
- case 26:
- /* keyboard status */
- reply.a_param[count++] = 27;
- reply.a_param[count++] = 1; /* North American */
- if (screen->terminal_id >= 400) {
- reply.a_param[count++] = 0; /* ready */
- reply.a_param[count++] = 0; /* LK201 */
- }
- break;
- case 53:
- /* Locator status */
-#if OPT_DEC_LOCATOR
- reply.a_param[count++] = 50; /* locator ready */
-#else
- reply.a_param[count++] = 53; /* no locator */
-#endif
- break;
- }
-
- if ((reply.a_nparam = count) != 0)
- unparseseq(&reply, screen->respond);
-
- sp->parsestate = sp->groundtable;
- sp->private_function = False;
- break;
-
- case CASE_MC:
- TRACE(("CASE_MC - media control\n"));
- xtermMediaControl(param[0], False);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DEC_MC:
- TRACE(("CASE_DEC_MC - DEC media control\n"));
- xtermMediaControl(param[0], True);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_HP_MEM_LOCK:
- case CASE_HP_MEM_UNLOCK:
- TRACE(("%s\n", ((sp->parsestate[c] == CASE_HP_MEM_LOCK)
- ? "CASE_HP_MEM_LOCK"
- : "CASE_HP_MEM_UNLOCK")));
- if (screen->scroll_amt)
- FlushScroll(screen);
- if (sp->parsestate[c] == CASE_HP_MEM_LOCK)
- set_tb_margins(screen, screen->cur_row, screen->bot_marg);
- else
- set_tb_margins(screen, 0, screen->bot_marg);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DECSTBM:
- TRACE(("CASE_DECSTBM - set scrolling region\n"));
- if ((top = param[0]) < 1)
- top = 1;
- if (nparam < 2 || (bot = param[1]) == DEFAULT
- || bot > MaxRows(screen)
- || bot == 0)
- bot = MaxRows(screen);
- if (bot > top) {
- if (screen->scroll_amt)
- FlushScroll(screen);
- set_tb_margins(screen, top - 1, bot - 1);
- CursorSet(screen, 0, 0, term->flags);
- }
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DECREQTPARM:
- TRACE(("CASE_DECREQTPARM\n"));
- if (screen->terminal_id < 200) { /* VT102 */
- if ((row = param[0]) == DEFAULT)
- row = 0;
- if (row == 0 || row == 1) {
- reply.a_type = CSI;
- reply.a_pintro = 0;
- reply.a_nparam = 7;
- reply.a_param[0] = row + 2;
- reply.a_param[1] = 1; /* no parity */
- reply.a_param[2] = 1; /* eight bits */
- reply.a_param[3] = 128; /* transmit 38.4k baud */
- reply.a_param[4] = 128; /* receive 38.4k baud */
- reply.a_param[5] = 1; /* clock multiplier ? */
- reply.a_param[6] = 0; /* STP flags ? */
- reply.a_inters = 0;
- reply.a_final = 'x';
- unparseseq(&reply, screen->respond);
- }
- }
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DECSET:
- /* DECSET */
-#if OPT_VT52_MODE
- if (screen->vtXX_level != 0)
-#endif
- dpmodes(term, bitset);
- sp->parsestate = sp->groundtable;
-#if OPT_TEK4014
- if (screen->TekEmu)
- return False;
-#endif
- break;
-
- case CASE_DECRST:
- /* DECRST */
- dpmodes(term, bitclr);
-#if OPT_VT52_MODE
- if (screen->vtXX_level == 0)
- sp->groundtable = vt52_table;
- else if (screen->terminal_id >= 100)
- sp->groundtable = ansi_table;
-#endif
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DECALN:
- TRACE(("CASE_DECALN - alignment test\n"));
- if (screen->cursor_state)
- HideCursor();
- set_tb_margins(screen, 0, screen->max_row);
- CursorSet(screen, 0, 0, term->flags);
- xtermParseRect(screen, 0, 0, &myRect);
- ScrnFillRectangle(screen, &myRect, 'E', 0);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_GSETS:
- TRACE(("CASE_GSETS(%d) = '%c'\n", sp->scstype, c));
- if (screen->vtXX_level != 0)
- screen->gsets[sp->scstype] = c;
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DECSC:
- TRACE(("CASE_DECSC - save cursor\n"));
- CursorSave(term);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DECRC:
- TRACE(("CASE_DECRC - restore cursor\n"));
- CursorRestore(term);
- if_OPT_ISO_COLORS(screen, {
- setExtendedFG();
- });
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DECKPAM:
- TRACE(("CASE_DECKPAM\n"));
- term->keyboard.flags |= MODE_DECKPAM;
- update_appkeypad();
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DECKPNM:
- TRACE(("CASE_DECKPNM\n"));
- term->keyboard.flags &= ~MODE_DECKPAM;
- update_appkeypad();
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_CSI_QUOTE_STATE:
- sp->parsestate = csi_quo_table;
- break;
-
-#if OPT_VT52_MODE
- case CASE_VT52_FINISH:
- TRACE(("CASE_VT52_FINISH terminal_id %d, vtXX_level %d\n",
- screen->terminal_id,
- screen->vtXX_level));
- if (screen->terminal_id >= 100
- && screen->vtXX_level == 0) {
- sp->groundtable =
- sp->parsestate = ansi_table;
- screen->vtXX_level = screen->vt52_save_level;
- screen->curgl = screen->vt52_save_curgl;
- screen->curgr = screen->vt52_save_curgr;
- screen->curss = screen->vt52_save_curss;
- memmove(screen->gsets, screen->vt52_save_gsets, sizeof(screen->gsets));
- }
- break;
-#endif
-
- case CASE_ANSI_LEVEL_1:
- TRACE(("CASE_ANSI_LEVEL_1\n"));
- set_ansi_conformance(screen, 1);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_ANSI_LEVEL_2:
- TRACE(("CASE_ANSI_LEVEL_2\n"));
- set_ansi_conformance(screen, 2);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_ANSI_LEVEL_3:
- TRACE(("CASE_ANSI_LEVEL_3\n"));
- set_ansi_conformance(screen, 3);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DECSCL:
- TRACE(("CASE_DECSCL(%d,%d)\n", param[0], param[1]));
- if (param[0] >= 61 && param[0] <= 65) {
- /*
- * VT300, VT420, VT520 manuals claim that DECSCL does a hard
- * reset (RIS). VT220 manual states that it is a soft reset.
- * Perhaps both are right (unlikely). Kermit says it's soft.
- */
- VTReset(False, False);
- screen->vtXX_level = param[0] - 60;
- if (param[0] > 61) {
- if (param[1] == 1)
- show_8bit_control(False);
- else if (param[1] == 0 || param[1] == 2)
- show_8bit_control(True);
- }
- }
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DECSCA:
- TRACE(("CASE_DECSCA\n"));
- screen->protected_mode = DEC_PROTECT;
- if (param[0] <= 0 || param[0] == 2)
- term->flags &= ~PROTECTED;
- else if (param[0] == 1)
- term->flags |= PROTECTED;
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DECSED:
- TRACE(("CASE_DECSED\n"));
- do_erase_display(screen, param[0], DEC_PROTECT);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DECSEL:
- TRACE(("CASE_DECSEL\n"));
- do_erase_line(screen, param[0], DEC_PROTECT);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_ST:
- TRACE(("CASE_ST: End of String (%d bytes)\n", string_used));
- sp->parsestate = sp->groundtable;
- if (!string_used)
- break;
- string_area[--string_used] = '\0';
- switch (sp->string_mode) {
- case APC:
- /* ignored */
- break;
- case DCS:
- do_dcs(string_area, string_used);
- break;
- case OSC:
- do_osc(string_area, string_used, ST);
- break;
- case PM:
- /* ignored */
- break;
- case SOS:
- /* ignored */
- break;
- }
- break;
-
- case CASE_SOS:
- TRACE(("CASE_SOS: Start of String\n"));
- sp->string_mode = SOS;
- sp->parsestate = sos_table;
- break;
-
- case CASE_PM:
- TRACE(("CASE_PM: Privacy Message\n"));
- sp->string_mode = PM;
- sp->parsestate = sos_table;
- break;
-
- case CASE_DCS:
- TRACE(("CASE_DCS: Device Control String\n"));
- sp->string_mode = DCS;
- sp->parsestate = sos_table;
- break;
-
- case CASE_APC:
- TRACE(("CASE_APC: Application Program Command\n"));
- sp->string_mode = APC;
- sp->parsestate = sos_table;
- break;
-
- case CASE_SPA:
- TRACE(("CASE_SPA - start protected area\n"));
- screen->protected_mode = ISO_PROTECT;
- term->flags |= PROTECTED;
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_EPA:
- TRACE(("CASE_EPA - end protected area\n"));
- term->flags &= ~PROTECTED;
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_SU:
- TRACE(("CASE_SU - scroll up\n"));
- if ((count = param[0]) < 1)
- count = 1;
- xtermScroll(screen, count);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_IND:
- TRACE(("CASE_IND - index\n"));
- xtermIndex(screen, 1);
- do_xevents();
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_CPL:
- TRACE(("CASE_CPL - cursor prev line\n"));
- CursorPrevLine(screen, param[0]);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_CNL:
- TRACE(("CASE_NPL - cursor next line\n"));
- CursorNextLine(screen, param[0]);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_NEL:
- TRACE(("CASE_NEL\n"));
- xtermIndex(screen, 1);
- CarriageReturn(screen);
- do_xevents();
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_HTS:
- TRACE(("CASE_HTS - horizontal tab set\n"));
- TabSet(term->tabs, screen->cur_col);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_RI:
- TRACE(("CASE_RI - reverse index\n"));
- RevIndex(screen, 1);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_SS2:
- TRACE(("CASE_SS2\n"));
- screen->curss = 2;
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_SS3:
- TRACE(("CASE_SS3\n"));
- screen->curss = 3;
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_CSI_STATE:
- /* enter csi state */
- nparam = 1;
- param[0] = DEFAULT;
- sp->parsestate = csi_table;
- break;
-
- case CASE_ESC_SP_STATE:
- /* esc space */
- sp->parsestate = esc_sp_table;
- break;
-
- case CASE_CSI_EX_STATE:
- /* csi exclamation */
- sp->parsestate = csi_ex_table;
- break;
-
-#if OPT_DEC_LOCATOR
- case CASE_CSI_TICK_STATE:
- /* csi tick (') */
- sp->parsestate = csi_tick_table;
- break;
-
- case CASE_DECEFR:
- TRACE(("CASE_DECEFR - Enable Filter Rectangle\n"));
- if (screen->send_mouse_pos == DEC_LOCATOR) {
- MotionOff(screen, term);
- if ((screen->loc_filter_top = param[0]) < 1)
- screen->loc_filter_top = LOC_FILTER_POS;
- if (nparam < 2 || (screen->loc_filter_left = param[1]) < 1)
- screen->loc_filter_left = LOC_FILTER_POS;
- if (nparam < 3 || (screen->loc_filter_bottom = param[2]) < 1)
- screen->loc_filter_bottom = LOC_FILTER_POS;
- if (nparam < 4 || (screen->loc_filter_right = param[3]) < 1)
- screen->loc_filter_right = LOC_FILTER_POS;
- InitLocatorFilter(term);
- }
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DECELR:
- MotionOff(screen, term);
- if (param[0] <= 0 || param[0] > 2) {
- screen->send_mouse_pos = MOUSE_OFF;
- TRACE(("DECELR - Disable Locator Reports\n"));
- } else {
- TRACE(("DECELR - Enable Locator Reports\n"));
- screen->send_mouse_pos = DEC_LOCATOR;
- if (param[0] == 2) {
- screen->locator_reset = True;
- } else {
- screen->locator_reset = False;
- }
- if (nparam < 2 || param[1] != 1) {
- screen->locator_pixels = False;
- } else {
- screen->locator_pixels = True;
- }
- screen->loc_filter = False;
- }
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DECSLE:
- TRACE(("DECSLE - Select Locator Events\n"));
- for (count = 0; count < nparam; ++count) {
- switch (param[count]) {
- case DEFAULT:
- case 0:
- MotionOff(screen, term);
- screen->loc_filter = False;
- screen->locator_events = 0;
- break;
- case 1:
- screen->locator_events |= LOC_BTNS_DN;
- break;
- case 2:
- screen->locator_events &= ~LOC_BTNS_DN;
- break;
- case 3:
- screen->locator_events |= LOC_BTNS_UP;
- break;
- case 4:
- screen->locator_events &= ~LOC_BTNS_UP;
- break;
- }
- }
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DECRQLP:
- TRACE(("DECRQLP - Request Locator Position\n"));
- if (param[0] < 2) {
- /* Issue DECLRP Locator Position Report */
- GetLocatorPosition(term);
- }
- sp->parsestate = sp->groundtable;
- break;
-#endif /* OPT_DEC_LOCATOR */
-
-#if OPT_DEC_RECTOPS
- case CASE_CSI_DOLLAR_STATE:
- /* csi dollar ($) */
- if (screen->vtXX_level >= 4)
- sp->parsestate = csi_dollar_table;
- else
- sp->parsestate = eigtable;
- break;
-
- case CASE_CSI_STAR_STATE:
- /* csi dollar (*) */
- if (screen->vtXX_level >= 4)
- sp->parsestate = csi_star_table;
- else
- sp->parsestate = eigtable;
- break;
-
- case CASE_DECCRA:
- TRACE(("CASE_DECCRA - Copy rectangular area\n"));
- xtermParseRect(screen, nparam, param, &myRect);
- ScrnCopyRectangle(screen, &myRect, nparam - 5, param + 5);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DECERA:
- TRACE(("CASE_DECERA - Erase rectangular area\n"));
- xtermParseRect(screen, nparam, param, &myRect);
- ScrnFillRectangle(screen, &myRect, ' ', 0);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DECFRA:
- TRACE(("CASE_DECFRA - Fill rectangular area\n"));
- if (nparam > 0
- && ((param[0] >= 32 && param[0] <= 126)
- || (param[0] >= 160 && param[0] <= 255))) {
- xtermParseRect(screen, nparam - 1, param + 1, &myRect);
- ScrnFillRectangle(screen, &myRect, param[0], term->flags);
- }
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DECSERA:
- TRACE(("CASE_DECSERA - Selective erase rectangular area\n"));
- xtermParseRect(screen, nparam > 4 ? 4 : nparam, param, &myRect);
- ScrnWipeRectangle(screen, &myRect);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DECSACE:
- TRACE(("CASE_DECSACE - Select attribute change extent\n"));
- screen->cur_decsace = param[0];
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DECCARA:
- TRACE(("CASE_DECCARA - Change attributes in rectangular area\n"));
- xtermParseRect(screen, nparam > 4 ? 4 : nparam, param, &myRect);
- ScrnMarkRectangle(screen, &myRect, False, nparam - 4, param + 4);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DECRARA:
- TRACE(("CASE_DECRARA - Reverse attributes in rectangular area\n"));
- xtermParseRect(screen, nparam > 4 ? 4 : nparam, param, &myRect);
- ScrnMarkRectangle(screen, &myRect, True, nparam - 4, param + 4);
- sp->parsestate = sp->groundtable;
- break;
-#else
- case CASE_CSI_DOLLAR_STATE:
- /* csi dollar ($) */
- sp->parsestate = eigtable;
- break;
-
- case CASE_CSI_STAR_STATE:
- /* csi dollar (*) */
- sp->parsestate = eigtable;
- break;
-#endif /* OPT_DEC_RECTOPS */
-
- case CASE_S7C1T:
- TRACE(("CASE_S7C1T\n"));
- show_8bit_control(False);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_S8C1T:
- TRACE(("CASE_S8C1T\n"));
-#if OPT_VT52_MODE
- if (screen->vtXX_level <= 1)
- break;
-#endif
- show_8bit_control(True);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_OSC:
- TRACE(("CASE_OSC: Operating System Command\n"));
- sp->parsestate = sos_table;
- sp->string_mode = OSC;
- break;
-
- case CASE_RIS:
- TRACE(("CASE_RIS\n"));
- VTReset(True, True);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_DECSTR:
- TRACE(("CASE_DECSTR\n"));
- VTReset(False, False);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_REP:
- TRACE(("CASE_REP\n"));
- if (sp->lastchar >= 0 &&
- sp->groundtable[E2A(sp->lastchar)] == CASE_PRINT) {
- IChar repeated[2];
- count = (param[0] < 1) ? 1 : param[0];
- repeated[0] = sp->lastchar;
- while (count-- > 0) {
- dotext(screen,
- screen->gsets[(int) (screen->curgl)],
- repeated, 1);
- }
- }
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_LS2:
- TRACE(("CASE_LS2\n"));
- screen->curgl = 2;
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_LS3:
- TRACE(("CASE_LS3\n"));
- screen->curgl = 3;
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_LS3R:
- TRACE(("CASE_LS3R\n"));
- screen->curgr = 3;
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_LS2R:
- TRACE(("CASE_LS2R\n"));
- screen->curgr = 2;
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_LS1R:
- TRACE(("CASE_LS1R\n"));
- screen->curgr = 1;
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_XTERM_SAVE:
- savemodes(term);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_XTERM_RESTORE:
- restoremodes(term);
- sp->parsestate = sp->groundtable;
- break;
-
- case CASE_XTERM_WINOPS:
- TRACE(("CASE_XTERM_WINOPS\n"));
- if (screen->allowWindowOps)
- window_ops(term);
- sp->parsestate = sp->groundtable;
- break;
-#if OPT_WIDE_CHARS
- case CASE_ESC_PERCENT:
- sp->parsestate = esc_pct_table;
- break;
-
- case CASE_UTF8:
- /* If we did not set UTF-8 mode from resource or the
- * command-line, allow it to be enabled/disabled by
- * control sequence.
- */
- if (!screen->wide_chars) {
- WriteNow();
- ChangeToWide(screen);
- }
- if (screen->wide_chars
- && screen->utf8_mode != uAlways) {
- switchPtyData(screen, c == 'G');
- TRACE(("UTF8 mode %s\n",
- BtoS(screen->utf8_mode)));
- } else {
- TRACE(("UTF8 mode NOT turned %s (%s)\n",
- BtoS(c == 'G'),
- (screen->utf8_mode == uAlways)
- ? "UTF-8 mode set from command-line"
- : "wideChars resource was not set"));
- }
- sp->parsestate = sp->groundtable;
- break;
-#endif
-
- case CASE_CSI_IGNORE:
- sp->parsestate = cigtable;
- break;
- }
- if (sp->parsestate == sp->groundtable)
- sp->lastchar = thischar;
- } while (0);
-
-#if OPT_WIDE_CHARS
- screen->utf8_inparse = (screen->utf8_mode != uFalse
- && sp->parsestate != sos_table);
-#endif
-
- return True;
-}
-
-static void
-VTparse(void)
-{
- TScreen *screen;
-
- /* We longjmp back to this point in VTReset() */
- (void) setjmp(vtjmpbuf);
- screen = &term->screen;
- memset(&myState, 0, sizeof(myState));
-#if OPT_VT52_MODE
- myState.groundtable = screen->vtXX_level ? ansi_table : vt52_table;
-#else
- myState.groundtable = ansi_table;
-#endif
- myState.parsestate = myState.groundtable;
- myState.lastchar = -1; /* not a legal IChar */
- myState.nextstate = -1; /* not a legal state */
-
- for (;;) {
- if (!doparsing(doinput(), &myState))
- return;
- }
-}
-
-static Char *v_buffer; /* pointer to physical buffer */
-static Char *v_bufstr = NULL; /* beginning of area to write */
-static Char *v_bufptr; /* end of area to write */
-static Char *v_bufend; /* end of physical buffer */
-
-/* Write data to the pty as typed by the user, pasted with the mouse,
- or generated by us in response to a query ESC sequence. */
-
-int
-v_write(int f, Char * data, unsigned len)
-{
- int riten;
- unsigned c = len;
-
- if (v_bufstr == NULL && len > 0) {
- v_buffer = (Char *) XtMalloc(len);
- v_bufstr = v_buffer;
- v_bufptr = v_buffer;
- v_bufend = v_buffer + len;
- }
-#ifdef DEBUG
- if (debug) {
- fprintf(stderr, "v_write called with %d bytes (%d left over)",
- len, v_bufptr - v_bufstr);
- if (len > 1 && len < 10)
- fprintf(stderr, " \"%.*s\"", len, (char *) data);
- fprintf(stderr, "\n");
- }
-#endif
-
-#ifdef VMS
- if ((1 << f) != pty_mask)
- return (tt_write((char *) data, len));
-#else /* VMS */
- if (!FD_ISSET(f, &pty_mask))
- return (write(f, (char *) data, len));
-#endif /* VMS */
-
- /*
- * Append to the block we already have.
- * Always doing this simplifies the code, and
- * isn't too bad, either. If this is a short
- * block, it isn't too expensive, and if this is
- * a long block, we won't be able to write it all
- * anyway.
- */
-
- if (len > 0) {
-#if OPT_DABBREV
- term->screen.dabbrev_working = 0; /* break dabbrev sequence */
-#endif
- if (v_bufend < v_bufptr + len) { /* we've run out of room */
- if (v_bufstr != v_buffer) {
- /* there is unused space, move everything down */
- /* possibly overlapping memmove here */
-#ifdef DEBUG
- if (debug)
- fprintf(stderr, "moving data down %d\n",
- v_bufstr - v_buffer);
-#endif
- memmove(v_buffer, v_bufstr, (unsigned) (v_bufptr - v_bufstr));
- v_bufptr -= v_bufstr - v_buffer;
- v_bufstr = v_buffer;
- }
- if (v_bufend < v_bufptr + len) {
- /* still won't fit: get more space */
- /* Don't use XtRealloc because an error is not fatal. */
- int size = v_bufptr - v_buffer; /* save across realloc */
- v_buffer = TypeRealloc(Char, size + len, v_buffer);
- if (v_buffer) {
-#ifdef DEBUG
- if (debug)
- fprintf(stderr, "expanded buffer to %d\n",
- size + len);
-#endif
- v_bufstr = v_buffer;
- v_bufptr = v_buffer + size;
- v_bufend = v_bufptr + len;
- } else {
- /* no memory: ignore entire write request */
- fprintf(stderr, "%s: cannot allocate buffer space\n",
- xterm_name);
- v_buffer = v_bufstr; /* restore clobbered pointer */
- c = 0;
- }
- }
- }
- if (v_bufend >= v_bufptr + len) {
- /* new stuff will fit */
- memmove(v_bufptr, data, len);
- v_bufptr += len;
- }
- }
-
- /*
- * Write out as much of the buffer as we can.
- * Be careful not to overflow the pty's input silo.
- * We are conservative here and only write
- * a small amount at a time.
- *
- * If we can't push all the data into the pty yet, we expect write
- * to return a non-negative number less than the length requested
- * (if some data written) or -1 and set errno to EAGAIN,
- * EWOULDBLOCK, or EINTR (if no data written).
- *
- * (Not all systems do this, sigh, so the code is actually
- * a little more forgiving.)
- */
-
-#define MAX_PTY_WRITE 128 /* 1/2 POSIX minimum MAX_INPUT */
-
- if (v_bufptr > v_bufstr) {
-#ifdef VMS
- riten = tt_write(v_bufstr,
- ((v_bufptr - v_bufstr <= VMS_TERM_BUFFER_SIZE)
- ? v_bufptr - v_bufstr
- : VMS_TERM_BUFFER_SIZE));
- if (riten == 0)
- return (riten);
-#else /* VMS */
- riten = write(f, v_bufstr,
- (size_t) ((v_bufptr - v_bufstr <= MAX_PTY_WRITE)
- ? v_bufptr - v_bufstr
- : MAX_PTY_WRITE));
- if (riten < 0)
-#endif /* VMS */
- {
-#ifdef DEBUG
- if (debug)
- perror("write");
-#endif
- riten = 0;
- }
-#ifdef DEBUG
- if (debug)
- fprintf(stderr, "write called with %d, wrote %d\n",
- v_bufptr - v_bufstr <= MAX_PTY_WRITE ?
- v_bufptr - v_bufstr : MAX_PTY_WRITE,
- riten);
-#endif
- v_bufstr += riten;
- if (v_bufstr >= v_bufptr) /* we wrote it all */
- v_bufstr = v_bufptr = v_buffer;
- }
-
- /*
- * If we have lots of unused memory allocated, return it
- */
- if (v_bufend - v_bufptr > 1024) { /* arbitrary hysteresis */
- /* save pointers across realloc */
- int start = v_bufstr - v_buffer;
- int size = v_bufptr - v_buffer;
- unsigned allocsize = (unsigned) (size ? size : 1);
-
- v_buffer = TypeRealloc(Char, allocsize, v_buffer);
- if (v_buffer) {
- v_bufstr = v_buffer + start;
- v_bufptr = v_buffer + size;
- v_bufend = v_buffer + allocsize;
-#ifdef DEBUG
- if (debug)
- fprintf(stderr, "shrunk buffer to %d\n", allocsize);
-#endif
- } else {
- /* should we print a warning if couldn't return memory? */
- v_buffer = v_bufstr - start; /* restore clobbered pointer */
- }
- }
- return (c);
-}
-
-#ifdef VMS
-#define ptymask() (v_bufptr > v_bufstr ? pty_mask : 0)
-
-static void
-in_put(void)
-{
- static PtySelect select_mask;
- static PtySelect write_mask;
- int update = VTbuffer->update;
- int size;
-
- int status;
- Dimension replyWidth, replyHeight;
- XtGeometryResult stat;
-
- TScreen *screen = &term->screen;
- char *cp;
- int i;
-
- select_mask = pty_mask; /* force initial read */
- for (;;) {
-
- /* if the terminal changed size, resize the widget */
- if (tt_changed) {
- tt_changed = False;
-
- stat = XtMakeResizeRequest((Widget) term,
- ((Dimension) FontWidth(screen)
- * (tt_width)
- + 2 * screen->border
- + screen->fullVwin.sb_info.width),
- ((Dimension) FontHeight(screen)
- * (tt_length)
- + 2 * screen->border),
- &replyWidth, &replyHeight);
-
- if (stat == XtGeometryYes || stat == XtGeometryDone) {
- term->core.width = replyWidth;
- term->core.height = replyHeight;
-
- ScreenResize(&term->screen, replyWidth, replyHeight,
- &term->flags);
- }
- repairSizeHints();
- }
-
- if (eventMode == NORMAL
- && readPtyData(screen, &select_mask, VTbuffer)) {
- if (screen->scrollWidget
- && screen->scrollttyoutput
- && screen->topline < 0)
- /* Scroll to bottom */
- WindowScroll(screen, 0);
- break;
- }
- if (screen->scroll_amt)
- FlushScroll(screen);
- if (screen->cursor_set && CursorMoved(screen)) {
- if (screen->cursor_state)
- HideCursor();
- ShowCursor();
-#if OPT_INPUT_METHOD
- PreeditPosition(screen);
-#endif
- } else if (screen->cursor_set != screen->cursor_state) {
- if (screen->cursor_set)
- ShowCursor();
- else
- HideCursor();
- }
-
- if (QLength(screen->display)) {
- select_mask = X_mask;
- } else {
- write_mask = ptymask();
- XFlush(screen->display);
- select_mask = Select_mask;
- if (eventMode != NORMAL)
- select_mask = X_mask;
- }
- if (write_mask & ptymask()) {
- v_write(screen->respond, 0, 0); /* flush buffer */
- }
-
- if (select_mask & X_mask) {
- xevents();
- if (VTbuffer->update != update)
- break;
- }
- }
-}
-#else /* VMS */
-
-static void
-in_put(void)
-{
- static PtySelect select_mask;
- static PtySelect write_mask;
-
- TScreen *screen = &term->screen;
- int i, time_select;
- int size;
- int update = VTbuffer->update;
-
- static struct timeval select_timeout;
-
-#if OPT_BLINK_CURS
- /*
- * Compute the timeout for the blinking cursor to be much smaller than
- * the "on" or "off" interval.
- */
- int tick = ((screen->blink_on < screen->blink_off)
- ? screen->blink_on
- : screen->blink_off);
- tick *= (1000 / 8); /* 1000 for msec/usec, 8 for "much" smaller */
- if (tick < 1)
- tick = 1;
-#endif
-
- for (;;) {
- if (eventMode == NORMAL
- && (size = readPtyData(screen, &select_mask, VTbuffer)) != 0) {
- if (screen->scrollWidget
- && screen->scrollttyoutput
- && screen->topline < 0)
- WindowScroll(screen, 0); /* Scroll to bottom */
- /* stop speed reading at some point to look for X stuff */
- TRACE(("VTbuffer uses %d/%d\n",
- VTbuffer->last - VTbuffer->buffer,
- BUF_SIZE));
- if ((VTbuffer->last - VTbuffer->buffer) > BUF_SIZE) {
- FD_CLR(screen->respond, &select_mask);
- break;
- }
-#if defined(HAVE_SCHED_YIELD)
- /*
- * If we've read a full (small/fragment) buffer, let the operating
- * system have a turn, and we'll resume reading until we've either
- * read only a fragment of the buffer, or we've filled the large
- * buffer (see above). Doing this helps keep up with large bursts
- * of output.
- */
- if (size == FRG_SIZE) {
- select_timeout.tv_sec = 0;
- i = Select(max_plus1, &select_mask, &write_mask, 0,
- &select_timeout);
- if (i > 0) {
- sched_yield();
- } else
- break;
- } else {
- break;
- }
-#else
- (void) size; /* unused in this branch */
- break;
-#endif
- }
- /* update the screen */
- if (screen->scroll_amt)
- FlushScroll(screen);
- if (screen->cursor_set && CursorMoved(screen)) {
- if (screen->cursor_state)
- HideCursor();
- ShowCursor();
-#if OPT_INPUT_METHOD
- PreeditPosition(screen);
-#endif
- } else if (screen->cursor_set != screen->cursor_state) {
- if (screen->cursor_set)
- ShowCursor();
- else
- HideCursor();
- }
-
- XFlush(screen->display); /* always flush writes before waiting */
-
- /* Update the masks and, unless X events are already in the queue,
- wait for I/O to be possible. */
- XFD_COPYSET(&Select_mask, &select_mask);
- /* in selection mode xterm does not read pty */
- if (eventMode != NORMAL)
- FD_CLR(screen->respond, &select_mask);
-
- if (v_bufptr > v_bufstr) {
- XFD_COPYSET(&pty_mask, &write_mask);
- } else
- FD_ZERO(&write_mask);
- select_timeout.tv_sec = 0;
- time_select = 0;
-
- /*
- * if there's either an XEvent or an XtTimeout pending, just take
- * a quick peek, i.e. timeout from the select() immediately. If
- * there's nothing pending, let select() block a little while, but
- * for a shorter interval than the arrow-style scrollbar timeout.
- * The blocking is optional, because it tends to increase the load
- * on the host.
- */
- if (XtAppPending(app_con)) {
- select_timeout.tv_usec = 0;
- time_select = 1;
- } else if (screen->awaitInput) {
- select_timeout.tv_usec = 50000;
- time_select = 1;
-#if OPT_BLINK_CURS
- } else if ((screen->blink_timer != 0 &&
- ((screen->select & FOCUS) || screen->always_highlight)) ||
- (screen->cursor_state == BLINKED_OFF)) {
- select_timeout.tv_usec = tick;
- while (select_timeout.tv_usec > 1000000) {
- select_timeout.tv_usec -= 1000000;
- select_timeout.tv_sec++;
- }
- time_select = 1;
-#endif
-#if OPT_SESSION_MGT
- } else if (resource.sessionMgt) {
- /*
- * When session management is enabled, we should not block since
- * session related events can arrive any time.
- */
- select_timeout.tv_sec = 1;
- select_timeout.tv_usec = 0;
- time_select = 1;
-#endif
- }
- if (need_cleanup)
- Cleanup(0);
- i = Select(max_plus1, &select_mask, &write_mask, 0,
- (time_select ? &select_timeout : 0));
- if (i < 0) {
- if (errno != EINTR)
- SysError(ERROR_SELECT);
- continue;
- }
-
- /* if there is room to write more data to the pty, go write more */
- if (FD_ISSET(screen->respond, &write_mask)) {
- v_write(screen->respond, (Char *) 0, 0); /* flush buffer */
- }
-
- /* if there are X events already in our queue, it
- counts as being readable */
- if (XtAppPending(app_con) ||
- FD_ISSET(ConnectionNumber(screen->display), &select_mask)) {
- xevents();
- if (VTbuffer->update != update) /* HandleInterpret */
- break;
- }
-
- }
-}
-#endif /* VMS */
-
-static IChar
-doinput(void)
-{
- TScreen *screen = &term->screen;
-
- while (!morePtyData(screen, VTbuffer))
- in_put();
- return nextPtyData(screen, VTbuffer);
-}
-
-#if OPT_INPUT_METHOD
-/*
- * For OverTheSpot, client has to inform the position for XIM preedit.
- */
-static void
-PreeditPosition(TScreen * screen)
-{
- XPoint spot;
- XVaNestedList list;
-
- if (!screen->xic)
- return;
- spot.x = CurCursorX(screen, screen->cur_row, screen->cur_col);
- spot.y = CursorY(screen, screen->cur_row) + screen->fs_ascent;
- list = XVaCreateNestedList(0,
- XNSpotLocation, &spot,
- XNForeground, T_COLOR(screen, TEXT_FG),
- XNBackground, T_COLOR(screen, TEXT_BG),
- NULL);
- XSetICValues(screen->xic, XNPreeditAttributes, list, NULL);
- XFree(list);
-}
-#endif
-
-/*
- * process a string of characters according to the character set indicated
- * by charset. worry about end of line conditions (wraparound if selected).
- */
-void
-dotext(TScreen * screen,
- int charset,
- IChar * buf, /* start of characters to process */
- Cardinal len) /* end */
-{
-#if OPT_WIDE_CHARS
- Cardinal chars_chomped = 1;
-#else
- int next_col, last_col, this_col; /* must be signed */
-#endif
- Cardinal offset;
-
-#if OPT_WIDE_CHARS
- /* don't translate if we use UTF-8, and are not handling legacy support
- * for line-drawing characters.
- */
- if ((screen->utf8_mode == uFalse)
- || (screen->vt100_graphics && charset == '0'))
-#endif
-
- if (!xtermCharSetOut(buf, buf + len, charset))
- return;
-
- if_OPT_XMC_GLITCH(screen, {
- Cardinal n;
- if (charset != '?') {
- for (n = 0; n < len; n++) {
- if (buf[n] == XMC_GLITCH)
- buf[n] = XMC_GLITCH + 1;
- }
- }
- });
-
-#if OPT_WIDE_CHARS
- for (offset = 0;
- offset < len && (chars_chomped > 0 || screen->do_wrap);
- offset += chars_chomped) {
- int width_available = MaxCols(screen) - screen->cur_col;
- int width_here = 0;
- int need_wrap = 0;
- chars_chomped = 0;
-
- if (screen->do_wrap && (term->flags & WRAPAROUND)) {
- /* mark that we had to wrap this line */
- ScrnSetWrapped(screen, screen->cur_row);
- xtermAutoPrint('\n');
- xtermIndex(screen, 1);
- set_cur_col(screen, 0);
- screen->do_wrap = 0;
- width_available = MaxCols(screen) - screen->cur_col;
- }
-
- while (width_here <= width_available && chars_chomped < (len - offset)) {
- if (!screen->utf8_mode
- || (screen->vt100_graphics && charset == '0'))
- width_here++;
- else
- width_here += my_wcwidth((int) buf[chars_chomped + offset]);
- chars_chomped++;
- }
-
- if (width_here > width_available) {
- chars_chomped--;
- if (!screen->utf8_mode
- || (screen->vt100_graphics && charset == '0'))
- width_here--;
- else
- width_here -= my_wcwidth((int) buf[chars_chomped + offset]);
- need_wrap = 1;
- } else if (width_here == width_available) {
- need_wrap = 1;
- } else if (chars_chomped != (len - offset)) {
- need_wrap = 1;
- }
-
- /*
- * Split the wide characters back into separate arrays of 8-bit
- * characters so we can use the existing interface.
- *
- * FIXME: If we rewrote this interface, it would involve
- * rewriting all of the memory-management for the screen
- * buffers (perhaps this is simpler).
- */
- if (chars_chomped != 0) {
- static unsigned limit;
- static Char *hibyte, *lobyte;
- Bool both = False;
- unsigned j, k;
-
- if (chars_chomped >= limit) {
- limit = (chars_chomped + 1) * 2;
- lobyte = (Char *) XtRealloc((char *) lobyte, limit);
- hibyte = (Char *) XtRealloc((char *) hibyte, limit);
- }
- for (j = offset; j < offset + chars_chomped; j++) {
- k = j - offset;
- lobyte[k] = buf[j];
- if (buf[j] > 255) {
- hibyte[k] = (buf[j] >> 8);
- both = True;
- } else {
- hibyte[k] = 0;
- }
- }
-
- WriteText(screen, PAIRED_CHARS(lobyte,
- (both ? hibyte : 0)),
- chars_chomped);
- }
- screen->do_wrap = need_wrap;
- }
-#else
-
- for (offset = 0; offset < len; offset += this_col) {
- last_col = CurMaxCol(screen, screen->cur_row);
- this_col = last_col - screen->cur_col + 1;
- if (this_col <= 1) {
- if (screen->do_wrap && (term->flags & WRAPAROUND)) {
- /* mark that we had to wrap this line */
- ScrnSetWrapped(screen, screen->cur_row);
- xtermAutoPrint('\n');
- xtermIndex(screen, 1);
- set_cur_col(screen, 0);
- screen->do_wrap = 0;
- this_col = last_col + 1;
- } else
- this_col = 1;
- }
- if (offset + this_col > len) {
- this_col = len - offset;
- }
- next_col = screen->cur_col + this_col;
-
- WriteText(screen, PAIRED_CHARS(buf + offset,
- buf2 ? buf2 + offset : 0),
- this_col);
-
- /*
- * the call to WriteText updates screen->cur_col.
- * If screen->cur_col != next_col, we must have
- * hit the right margin, so set the do_wrap flag.
- */
- screen->do_wrap = (screen->cur_col < (int) next_col);
- }
-
-#endif
-}
-
-#if HANDLE_STRUCT_NOTIFY
-/* Flag icon name with "*** " on window output when iconified.
- * I'd like to do something like reverse video, but I don't
- * know how to tell this to window managers in general.
- *
- * mapstate can be IsUnmapped, !IsUnmapped, or -1;
- * -1 means no change; the other two are set by event handlers
- * and indicate a new mapstate. !IsMapped is done in the handler.
- * we worry about IsUnmapped when output occurs. -IAN!
- */
-static int mapstate = -1;
-#endif /* HANDLE_STRUCT_NOTIFY */
-
-#if OPT_WIDE_CHARS
-unsigned
-visual_width(PAIRED_CHARS(Char * str, Char * str2), Cardinal len)
-{
- /* returns the visual width of a string (doublewide characters count
- as 2, normalwide characters count as 1) */
- int my_len = 0;
- while (len) {
- int ch = *str;
- if (str2)
- ch |= *str2 << 8;
- if (str)
- str++;
- if (str2)
- str2++;
- if (iswide(ch))
- my_len += 2;
- else
- my_len++;
- len--;
- }
- return my_len;
-}
-#endif
-
-/*
- * write a string str of length len onto the screen at
- * the current cursor position. update cursor position.
- */
-static void
-WriteText(TScreen * screen, PAIRED_CHARS(Char * str, Char * str2), Cardinal len)
-{
- ScrnPtr PAIRED_CHARS(temp_str = 0, temp_str2 = 0);
- unsigned test;
- unsigned flags = term->flags;
- unsigned fg_bg = makeColorPair(term->cur_foreground, term->cur_background);
- unsigned cells = visual_width(PAIRED_CHARS(str, str2), len);
- GC currentGC;
-
- TRACE(("WriteText (%2d,%2d) (%d) %3d:%s\n",
- screen->cur_row,
- screen->cur_col,
- curXtermChrSet(screen->cur_row),
- len, visibleChars(PAIRED_CHARS(str, str2), len)));
-
- if (ScrnHaveSelection(screen)
- && ScrnIsLineInSelection(screen, screen->cur_row - screen->topline)) {
- ScrnDisownSelection(screen);
- }
-
- if (screen->cur_row - screen->topline <= screen->max_row) {
- if (screen->cursor_state)
- HideCursor();
-
- if (flags & INSERT) {
- InsertChar(screen, cells);
- }
- if (!AddToRefresh(screen)) {
-
- if (screen->scroll_amt)
- FlushScroll(screen);
-
- if (flags & INVISIBLE) {
- if (cells > len) {
- str = temp_str = TypeMallocN(Char, cells);
- if (str == 0)
- return;
- }
- if_OPT_WIDE_CHARS(screen, {
- if (cells > len) {
- str2 = temp_str2 = TypeMallocN(Char, cells);
- }
- });
- len = cells;
-
- memset(str, ' ', len);
- if_OPT_WIDE_CHARS(screen, {
- if (str2 != 0)
- memset(str2, 0, len);
- });
- }
-
- TRACE(("WriteText calling drawXtermText (%d,%d)\n",
- screen->cur_col,
- screen->cur_row));
-
- test = flags;
- checkVeryBoldColors(test, term->cur_foreground);
-
- /* make sure that the correct GC is current */
- currentGC = updatedXtermGC(screen, flags, fg_bg, False);
-
- drawXtermText(screen, test & DRAWX_MASK, currentGC,
- CurCursorX(screen, screen->cur_row, screen->cur_col),
- CursorY(screen, screen->cur_row),
- curXtermChrSet(screen->cur_row),
- PAIRED_CHARS(str, str2), len, 0);
-
- resetXtermGC(screen, flags, False);
- }
- }
-
- ScreenWrite(screen, PAIRED_CHARS(str, str2), flags, fg_bg, len);
- CursorForward(screen, (int) cells);
-#if OPT_ZICONBEEP
- /* Flag icon name with "***" on window output when iconified.
- */
- if (zIconBeep && mapstate == IsUnmapped && !zIconBeep_flagged) {
- static char *icon_name;
- static Arg args[] =
- {
- {XtNiconName, (XtArgVal) & icon_name}
- };
-
- icon_name = NULL;
- XtGetValues(toplevel, args, XtNumber(args));
-
- if (icon_name != NULL) {
- zIconBeep_flagged = True;
- Changename(icon_name);
- }
- if (zIconBeep > 0) {
-#if defined(HAVE_XKBBELL)
- XkbBell(XtDisplay(toplevel), VShellWindow, zIconBeep, XkbBI_Info);
-#else
- XBell(XtDisplay(toplevel), zIconBeep);
-#endif
- }
- }
- mapstate = -1;
-#endif /* OPT_ZICONBEEP */
- if (temp_str != 0)
- free(temp_str);
- if_OPT_WIDE_CHARS(screen, {
- if (temp_str2 != 0)
- free(temp_str2);
- });
- return;
-}
-
-#if HANDLE_STRUCT_NOTIFY
-/* Flag icon name with "***" on window output when iconified.
- */
-static void
-HandleStructNotify(Widget w GCC_UNUSED,
- XtPointer closure GCC_UNUSED,
- XEvent * event,
- Boolean * cont GCC_UNUSED)
-{
- static char *icon_name;
- static Arg args[] =
- {
- {XtNiconName, (XtArgVal) & icon_name}
- };
-
- switch (event->type) {
- case MapNotify:
- TRACE(("HandleStructNotify(MapNotify)\n"));
-#if OPT_ZICONBEEP
- if (zIconBeep_flagged) {
- zIconBeep_flagged = False;
- icon_name = NULL;
- XtGetValues(toplevel, args, XtNumber(args));
- if (icon_name != NULL) {
- char *buf = CastMallocN(char, strlen(icon_name));
- if (buf == NULL) {
- zIconBeep_flagged = True;
- return;
- }
- strcpy(buf, icon_name + 4);
- Changename(buf);
- free(buf);
- }
- }
-#endif /* OPT_ZICONBEEP */
- mapstate = !IsUnmapped;
- break;
- case UnmapNotify:
- TRACE(("HandleStructNotify(UnmapNotify)\n"));
- mapstate = IsUnmapped;
- break;
- case ConfigureNotify:
- TRACE(("HandleStructNotify(ConfigureNotify)\n"));
-#if OPT_TOOLBAR
- /* the notify is for the top-level widget, but we care about vt100 */
- if (term->screen.Vshow) {
- TScreen *screen = &term->screen;
- struct _vtwin *Vwin = WhichVWin(&(term->screen));
- TbInfo *info = &(Vwin->tb_info);
- TbInfo save = *info;
-
- if (info->menu_bar) {
- XtVaGetValues(info->menu_bar,
- XtNheight, &info->menu_height,
- XtNborderWidth, &info->menu_border,
- (XtPointer) 0);
-
- if (save.menu_height != info->menu_height
- || save.menu_border != info->menu_border) {
-
- TRACE(("...menu_height %d\n", info->menu_height));
- TRACE(("...menu_border %d\n", info->menu_border));
- TRACE(("...had height %d, border %d\n",
- save.menu_height,
- save.menu_border));
-
- /*
- * FIXME: Window manager still may be using the old values.
- * Try to fool it.
- */
- XtMakeResizeRequest((Widget) term,
- screen->fullVwin.fullwidth,
- info->menu_height
- - save.menu_height
- + screen->fullVwin.fullheight,
- NULL, NULL);
- repairSizeHints();
- }
- }
- }
-#endif /* OPT_TOOLBAR */
- break;
- default:
- TRACE(("HandleStructNotify(event %d)\n", event->type));
- break;
- }
-}
-#endif /* HANDLE_STRUCT_NOTIFY */
-
-#if OPT_BLINK_CURS
-static void
-SetCursorBlink(TScreen * screen, int enable)
-{
- screen->cursor_blink = enable;
- if (DoStartBlinking(screen)) {
- StartBlinking(screen);
- } else {
-#if !OPT_BLINK_TEXT
- StopBlinking(screen);
-#endif
- }
- update_cursorblink();
-}
-
-void
-ToggleCursorBlink(TScreen * screen)
-{
- SetCursorBlink(screen, !(screen->cursor_blink));
-}
-#endif
-
-/*
- * process ANSI modes set, reset
- */
-static void
-ansi_modes(XtermWidget termw,
- void (*func) (unsigned *p, unsigned mask))
-{
- int i;
-
- for (i = 0; i < nparam; ++i) {
- switch (param[i]) {
- case 2: /* KAM (if set, keyboard locked */
- (*func) (&termw->keyboard.flags, MODE_KAM);
- break;
-
- case 4: /* IRM */
- (*func) (&termw->flags, INSERT);
- break;
-
- case 12: /* SRM (if set, local echo */
- (*func) (&termw->keyboard.flags, MODE_SRM);
- break;
-
- case 20: /* LNM */
- (*func) (&termw->flags, LINEFEED);
- update_autolinefeed();
- break;
- }
- }
-}
-
-#define set_mousemode(mode) \
- screen->send_mouse_pos = (func == bitset) ? mode : MOUSE_OFF
-#define set_mouseflag(f) \
- ((func == bitset) \
- ? SCREEN_FLAG_set(screen, f) \
- : SCREEN_FLAG_unset(screen, f))
-
-/*
- * process DEC private modes set, reset
- */
-static void
-dpmodes(XtermWidget termw,
- void (*func) (unsigned *p, unsigned mask))
-{
- TScreen *screen = &termw->screen;
- int i, j;
-
- for (i = 0; i < nparam; ++i) {
- TRACE(("%s %d\n", (func == bitset) ? "DECSET" : "DECRST", param[i]));
- switch (param[i]) {
- case 1: /* DECCKM */
- (*func) (&termw->keyboard.flags, MODE_DECCKM);
- update_appcursor();
- break;
- case 2: /* DECANM - ANSI/VT52 mode */
- if (func == bitset) { /* ANSI (VT100) */
- /*
- * Setting DECANM should have no effect, since this function
- * cannot be reached from vt52 mode.
- */
- ;
- }
-#if OPT_VT52_MODE
- else if (screen->terminal_id >= 100) { /* VT52 */
- TRACE(("DECANM terminal_id %d, vtXX_level %d\n",
- screen->terminal_id,
- screen->vtXX_level));
- screen->vt52_save_level = screen->vtXX_level;
- screen->vtXX_level = 0;
- screen->vt52_save_curgl = screen->curgl;
- screen->vt52_save_curgr = screen->curgr;
- screen->vt52_save_curss = screen->curss;
- memmove(screen->vt52_save_gsets, screen->gsets, sizeof(screen->gsets));
- resetCharsets(screen);
- nparam = 0; /* ignore the remaining params, if any */
- }
-#endif
- break;
- case 3: /* DECCOLM */
- if (screen->c132) {
- ClearScreen(screen);
- CursorSet(screen, 0, 0, termw->flags);
- if ((j = func == bitset ? 132 : 80) !=
- ((termw->flags & IN132COLUMNS) ? 132 : 80) ||
- j != MaxCols(screen))
- RequestResize(termw, -1, j, True);
- (*func) (&termw->flags, IN132COLUMNS);
- }
- break;
- case 4: /* DECSCLM (slow scroll) */
- if (func == bitset) {
- screen->jumpscroll = 0;
- if (screen->scroll_amt)
- FlushScroll(screen);
- } else
- screen->jumpscroll = 1;
- (*func) (&termw->flags, SMOOTHSCROLL);
- update_jumpscroll();
- break;
- case 5: /* DECSCNM */
- j = termw->flags;
- (*func) (&termw->flags, REVERSE_VIDEO);
- if ((termw->flags ^ j) & REVERSE_VIDEO)
- ReverseVideo(termw);
- /* update_reversevideo done in RevVid */
- break;
-
- case 6: /* DECOM */
- (*func) (&termw->flags, ORIGIN);
- CursorSet(screen, 0, 0, termw->flags);
- break;
-
- case 7: /* DECAWM */
- (*func) (&termw->flags, WRAPAROUND);
- update_autowrap();
- break;
- case 8: /* DECARM */
- /* ignore autorepeat
- * XAutoRepeatOn() and XAutoRepeatOff() can do this, but only
- * for the whole display - not limited to a given window.
- */
- break;
- case SET_X10_MOUSE: /* MIT bogus sequence */
- MotionOff(screen, termw);
- set_mousemode(X10_MOUSE);
- break;
-#if OPT_TOOLBAR
- case 10: /* rxvt */
- ShowToolbar(func == bitset);
- break;
-#endif
-#if OPT_BLINK_CURS
- case 12: /* att610: Start/stop blinking cursor */
- if (screen->cursor_blink_res) {
- screen->cursor_blink_esc = (func == bitset) ? ON : OFF;
- SetCursorBlink(screen, screen->cursor_blink);
- }
- break;
-#endif
- case 18: /* DECPFF: print form feed */
- screen->printer_formfeed = (func == bitset) ? ON : OFF;
- break;
- case 19: /* DECPEX: print extent */
- screen->printer_extent = (func == bitset) ? ON : OFF;
- break;
- case 25: /* DECTCEM: Show/hide cursor (VT200) */
- screen->cursor_set = (func == bitset) ? ON : OFF;
- break;
- case 30: /* rxvt */
- if (screen->fullVwin.sb_info.width != ((func == bitset) ? ON : OFF))
- ToggleScrollBar(termw);
- break;
-#if OPT_SHIFT_FONTS
- case 35: /* rxvt */
- term->misc.shift_fonts = (func == bitset) ? ON : OFF;
- break;
-#endif
- case 38: /* DECTEK */
-#if OPT_TEK4014
- if (func == bitset && !(screen->inhibit & I_TEK)) {
- FlushLog(screen);
- screen->TekEmu = True;
- }
-#endif
- break;
- case 40: /* 132 column mode */
- screen->c132 = (func == bitset);
- update_allow132();
- break;
- case 41: /* curses hack */
- screen->curses = (func == bitset);
- update_cursesemul();
- break;
- case 42: /* DECNRCM national charset (VT220) */
- (*func) (&termw->flags, NATIONAL);
- break;
- case 44: /* margin bell */
- screen->marginbell = (func == bitset);
- if (!screen->marginbell)
- screen->bellarmed = -1;
- update_marginbell();
- break;
- case 45: /* reverse wraparound */
- (*func) (&termw->flags, REVERSEWRAP);
- update_reversewrap();
- break;
-#ifdef ALLOWLOGGING
- case 46: /* logging */
-#ifdef ALLOWLOGFILEONOFF
- /*
- * if this feature is enabled, logging may be
- * enabled and disabled via escape sequences.
- */
- if (func == bitset)
- StartLog(screen);
- else
- CloseLog(screen);
-#else
- Bell(XkbBI_Info, 0);
- Bell(XkbBI_Info, 0);
-#endif /* ALLOWLOGFILEONOFF */
- break;
-#endif
- case 1049: /* alternate buffer & cursor */
- if (!termw->misc.titeInhibit) {
- if (func == bitset) {
- CursorSave(termw);
- ToAlternate(screen);
- ClearScreen(screen);
- } else {
- FromAlternate(screen);
- CursorRestore(termw);
- }
- } else if (termw->misc.tiXtraScroll) {
- if (func == bitset) {
- xtermScroll(screen, screen->max_row);
- }
- }
- break;
- case 1047:
- case 47: /* alternate buffer */
- if (!termw->misc.titeInhibit) {
- if (func == bitset) {
- ToAlternate(screen);
- } else {
- if (screen->alternate
- && (param[i] == 1047))
- ClearScreen(screen);
- FromAlternate(screen);
- }
- } else if (termw->misc.tiXtraScroll) {
- if (func == bitset) {
- xtermScroll(screen, screen->max_row);
- }
- }
- break;
- case 66: /* DECNKM */
- (*func) (&termw->keyboard.flags, MODE_DECKPAM);
- update_appkeypad();
- break;
- case 67: /* DECBKM */
- /* back-arrow mapped to backspace or delete(D) */
- (*func) (&termw->keyboard.flags, MODE_DECBKM);
- TRACE(("DECSET DECBKM %s\n",
- BtoS(termw->keyboard.flags & MODE_DECBKM)));
- update_decbkm();
- break;
- case SET_VT200_MOUSE: /* xterm bogus sequence */
- MotionOff(screen, termw);
- set_mousemode(VT200_MOUSE);
- break;
- case SET_VT200_HIGHLIGHT_MOUSE: /* xterm sequence w/hilite tracking */
- MotionOff(screen, termw);
- set_mousemode(VT200_HIGHLIGHT_MOUSE);
- break;
- case SET_BTN_EVENT_MOUSE:
- MotionOff(screen, termw);
- set_mousemode(BTN_EVENT_MOUSE);
- break;
- case SET_ANY_EVENT_MOUSE:
- set_mousemode(ANY_EVENT_MOUSE);
- if (screen->send_mouse_pos == MOUSE_OFF) {
- MotionOff(screen, term);
- } else {
- MotionOn(screen, term);
- }
- break;
- case 1010: /* rxvt */
- screen->scrollttyoutput = (func == bitset) ? ON : OFF;
- update_scrollttyoutput();
- break;
- case 1011: /* rxvt */
- screen->scrollkey = (func == bitset) ? ON : OFF;
- update_scrollkey();
- break;
-#if OPT_NUM_LOCK
- case 1035:
- term->misc.real_NumLock = (func == bitset) ? ON : OFF;
- update_num_lock();
- break;
- case 1036:
- screen->meta_sends_esc = (func == bitset) ? ON : OFF;
- update_meta_esc();
- break;
-#endif
- case 1037:
- screen->delete_is_del = (func == bitset) ? ON : OFF;
- update_delete_del();
- break;
- case 1048:
- if (!termw->misc.titeInhibit) {
- if (func == bitset)
- CursorSave(termw);
- else
- CursorRestore(termw);
- }
- break;
- case 1051:
- set_keyboard_type(keyboardIsSun, func == bitset);
- break;
-#if OPT_HP_FUNC_KEYS
- case 1052:
- set_keyboard_type(keyboardIsHP, func == bitset);
- break;
-#endif
-#if OPT_SCO_FUNC_KEYS
- case 1053:
- set_keyboard_type(keyboardIsSCO, func == bitset);
- break;
-#endif
- case 1060:
- set_keyboard_type(keyboardIsLegacy, func == bitset);
- break;
-#if OPT_SUNPC_KBD
- case 1061:
- set_keyboard_type(keyboardIsVT220, func == bitset);
- break;
-#endif
-#if OPT_READLINE
- case SET_BUTTON1_MOVE_POINT:
- set_mouseflag(click1_moves);
- break;
- case SET_BUTTON2_MOVE_POINT:
- set_mouseflag(paste_moves);
- break;
- case SET_DBUTTON3_DELETE:
- set_mouseflag(dclick3_deletes);
- break;
- case SET_PASTE_IN_BRACKET:
- set_mouseflag(paste_brackets);
- break;
- case SET_PASTE_QUOTE:
- set_mouseflag(paste_quotes);
- break;
- case SET_PASTE_LITERAL_NL:
- set_mouseflag(paste_literal_nl);
- break;
-#endif /* OPT_READLINE */
- }
- }
-}
-
-/*
- * process xterm private modes save
- */
-static void
-savemodes(XtermWidget termw)
-{
- TScreen *screen = &termw->screen;
- int i;
-
- for (i = 0; i < nparam; i++) {
- TRACE(("savemodes %d\n", param[i]));
- switch (param[i]) {
- case 1: /* DECCKM */
- DoSM(DP_DECCKM, termw->keyboard.flags & MODE_DECCKM);
- break;
- case 3: /* DECCOLM */
- if (screen->c132)
- DoSM(DP_DECCOLM, termw->flags & IN132COLUMNS);
- break;
- case 4: /* DECSCLM (slow scroll) */
- DoSM(DP_DECSCLM, termw->flags & SMOOTHSCROLL);
- break;
- case 5: /* DECSCNM */
- DoSM(DP_DECSCNM, termw->flags & REVERSE_VIDEO);
- break;
- case 6: /* DECOM */
- DoSM(DP_DECOM, termw->flags & ORIGIN);
- break;
-
- case 7: /* DECAWM */
- DoSM(DP_DECAWM, termw->flags & WRAPAROUND);
- break;
- case 8: /* DECARM */
- /* ignore autorepeat */
- break;
- case SET_X10_MOUSE: /* mouse bogus sequence */
- DoSM(DP_X_X10MSE, screen->send_mouse_pos);
- break;
-#if OPT_TOOLBAR
- case 10: /* rxvt */
- DoSM(DP_TOOLBAR, resource.toolBar);
- break;
-#endif
-#if OPT_BLINK_CURS
- case 12: /* att610: Start/stop blinking cursor */
- if (screen->cursor_blink_res) {
- DoSM(DP_CRS_BLINK, screen->cursor_blink_esc);
- }
- break;
-#endif
- case 18: /* DECPFF: print form feed */
- DoSM(DP_PRN_FORMFEED, screen->printer_formfeed);
- break;
- case 19: /* DECPEX: print extent */
- DoSM(DP_PRN_EXTENT, screen->printer_extent);
- break;
- case 25: /* DECTCEM: Show/hide cursor (VT200) */
- DoSM(DP_CRS_VISIBLE, screen->cursor_set);
- break;
- case 40: /* 132 column mode */
- DoSM(DP_X_DECCOLM, screen->c132);
- break;
- case 41: /* curses hack */
- DoSM(DP_X_MORE, screen->curses);
- break;
- case 44: /* margin bell */
- DoSM(DP_X_MARGIN, screen->marginbell);
- break;
- case 45: /* reverse wraparound */
- DoSM(DP_X_REVWRAP, termw->flags & REVERSEWRAP);
- break;
-#ifdef ALLOWLOGGING
- case 46: /* logging */
- DoSM(DP_X_LOGGING, screen->logging);
- break;
-#endif
- case 1047: /* alternate buffer */
- /* FALLTHRU */
- case 47: /* alternate buffer */
- DoSM(DP_X_ALTSCRN, screen->alternate);
- break;
- case SET_VT200_MOUSE: /* mouse bogus sequence */
- case SET_VT200_HIGHLIGHT_MOUSE:
- case SET_BTN_EVENT_MOUSE:
- case SET_ANY_EVENT_MOUSE:
- DoSM(DP_X_MOUSE, screen->send_mouse_pos);
- break;
- case 1048:
- if (!termw->misc.titeInhibit) {
- CursorSave(termw);
- }
- break;
-#if OPT_READLINE
- case SET_BUTTON1_MOVE_POINT:
- SCREEN_FLAG_save(screen, click1_moves);
- break;
- case SET_BUTTON2_MOVE_POINT:
- SCREEN_FLAG_save(screen, paste_moves);
- break;
- case SET_DBUTTON3_DELETE:
- SCREEN_FLAG_save(screen, dclick3_deletes);
- break;
- case SET_PASTE_IN_BRACKET:
- SCREEN_FLAG_save(screen, paste_brackets);
- break;
- case SET_PASTE_QUOTE:
- SCREEN_FLAG_save(screen, paste_quotes);
- break;
- case SET_PASTE_LITERAL_NL:
- SCREEN_FLAG_save(screen, paste_literal_nl);
- break;
-#endif /* OPT_READLINE */
- }
- }
-}
-
-/*
- * process xterm private modes restore
- */
-static void
-restoremodes(XtermWidget termw)
-{
- TScreen *screen = &termw->screen;
- int i, j;
-
- for (i = 0; i < nparam; i++) {
- TRACE(("restoremodes %d\n", param[i]));
- switch (param[i]) {
- case 1: /* DECCKM */
- bitcpy(&termw->keyboard.flags,
- screen->save_modes[DP_DECCKM], MODE_DECCKM);
- update_appcursor();
- break;
- case 3: /* DECCOLM */
- if (screen->c132) {
- ClearScreen(screen);
- CursorSet(screen, 0, 0, termw->flags);
- if ((j = (screen->save_modes[DP_DECCOLM] & IN132COLUMNS)
- ? 132 : 80) != ((termw->flags & IN132COLUMNS)
- ? 132 : 80) || j != MaxCols(screen))
- RequestResize(termw, -1, j, True);
- bitcpy(&termw->flags,
- screen->save_modes[DP_DECCOLM],
- IN132COLUMNS);
- }
- break;
- case 4: /* DECSCLM (slow scroll) */
- if (screen->save_modes[DP_DECSCLM] & SMOOTHSCROLL) {
- screen->jumpscroll = 0;
- if (screen->scroll_amt)
- FlushScroll(screen);
- } else
- screen->jumpscroll = 1;
- bitcpy(&termw->flags, screen->save_modes[DP_DECSCLM], SMOOTHSCROLL);
- update_jumpscroll();
- break;
- case 5: /* DECSCNM */
- if ((screen->save_modes[DP_DECSCNM] ^ termw->flags) & REVERSE_VIDEO) {
- bitcpy(&termw->flags, screen->save_modes[DP_DECSCNM], REVERSE_VIDEO);
- ReverseVideo(termw);
- /* update_reversevideo done in RevVid */
- }
- break;
- case 6: /* DECOM */
- bitcpy(&termw->flags, screen->save_modes[DP_DECOM], ORIGIN);
- CursorSet(screen, 0, 0, termw->flags);
- break;
-
- case 7: /* DECAWM */
- bitcpy(&termw->flags, screen->save_modes[DP_DECAWM], WRAPAROUND);
- update_autowrap();
- break;
- case 8: /* DECARM */
- /* ignore autorepeat */
- break;
- case SET_X10_MOUSE: /* MIT bogus sequence */
- DoRM(DP_X_X10MSE, screen->send_mouse_pos);
- break;
-#if OPT_TOOLBAR
- case 10: /* rxvt */
- DoRM(DP_TOOLBAR, resource.toolBar);
- ShowToolbar(resource.toolBar);
- break;
-#endif
-#if OPT_BLINK_CURS
- case 12: /* att610: Start/stop blinking cursor */
- if (screen->cursor_blink_res) {
- DoRM(DP_CRS_BLINK, screen->cursor_blink_esc);
- SetCursorBlink(screen, screen->cursor_blink);
- }
- break;
-#endif
- case 18: /* DECPFF: print form feed */
- DoRM(DP_PRN_FORMFEED, screen->printer_formfeed);
- break;
- case 19: /* DECPEX: print extent */
- DoRM(DP_PRN_EXTENT, screen->printer_extent);
- break;
- case 25: /* DECTCEM: Show/hide cursor (VT200) */
- DoRM(DP_CRS_VISIBLE, screen->cursor_set);
- break;
- case 40: /* 132 column mode */
- DoRM(DP_X_DECCOLM, screen->c132);
- update_allow132();
- break;
- case 41: /* curses hack */
- DoRM(DP_X_MORE, screen->curses);
- update_cursesemul();
- break;
- case 44: /* margin bell */
- if ((DoRM(DP_X_MARGIN, screen->marginbell)) == 0)
- screen->bellarmed = -1;
- update_marginbell();
- break;
- case 45: /* reverse wraparound */
- bitcpy(&termw->flags, screen->save_modes[DP_X_REVWRAP], REVERSEWRAP);
- update_reversewrap();
- break;
-#ifdef ALLOWLOGGING
- case 46: /* logging */
-#ifdef ALLOWLOGFILEONOFF
- if (screen->save_modes[DP_X_LOGGING])
- StartLog(screen);
- else
- CloseLog(screen);
-#endif /* ALLOWLOGFILEONOFF */
- /* update_logging done by StartLog and CloseLog */
- break;
-#endif
- case 1047: /* alternate buffer */
- /* FALLTHRU */
- case 47: /* alternate buffer */
- if (!termw->misc.titeInhibit) {
- if (screen->save_modes[DP_X_ALTSCRN])
- ToAlternate(screen);
- else
- FromAlternate(screen);
- /* update_altscreen done by ToAlt and FromAlt */
- } else if (termw->misc.tiXtraScroll) {
- if (screen->save_modes[DP_X_ALTSCRN]) {
- xtermScroll(screen, screen->max_row);
- }
- }
- break;
- case SET_VT200_MOUSE: /* mouse bogus sequence */
- case SET_VT200_HIGHLIGHT_MOUSE:
- case SET_BTN_EVENT_MOUSE:
- case SET_ANY_EVENT_MOUSE:
- DoRM(DP_X_MOUSE, screen->send_mouse_pos);
- break;
- case 1048:
- if (!termw->misc.titeInhibit) {
- CursorRestore(termw);
- }
- break;
-#if OPT_READLINE
- case SET_BUTTON1_MOVE_POINT:
- SCREEN_FLAG_restore(screen, click1_moves);
- break;
- case SET_BUTTON2_MOVE_POINT:
- SCREEN_FLAG_restore(screen, paste_moves);
- break;
- case SET_DBUTTON3_DELETE:
- SCREEN_FLAG_restore(screen, dclick3_deletes);
- break;
- case SET_PASTE_IN_BRACKET:
- SCREEN_FLAG_restore(screen, paste_brackets);
- break;
- case SET_PASTE_QUOTE:
- SCREEN_FLAG_restore(screen, paste_quotes);
- break;
- case SET_PASTE_LITERAL_NL:
- SCREEN_FLAG_restore(screen, paste_literal_nl);
- break;
-#endif /* OPT_READLINE */
- }
- }
-}
-
-/*
- * Report window label (icon or title) in dtterm protocol
- * ESC ] code label ESC backslash
- */
-static void
-report_win_label(TScreen * screen,
- int code,
- XTextProperty * text,
- Status ok)
-{
- char **list;
- int length = 0;
-
- reply.a_type = ESC;
- unparseputc(ESC, screen->respond);
- unparseputc(']', screen->respond);
- unparseputc(code, screen->respond);
-
- if (ok) {
- if (XTextPropertyToStringList(text, &list, &length)) {
- int n, c;
- for (n = 0; n < length; n++) {
- char *s = list[n];
- while ((c = *s++) != '\0')
- unparseputc(c, screen->respond);
- }
- XFreeStringList(list);
- }
- if (text->value != 0)
- XFree(text->value);
- }
-
- unparseputc(ESC, screen->respond);
- unparseputc('\\', screen->respond);
-}
-
-/*
- * Window operations (from CDE dtterm description, as well as extensions).
- * See also "allowWindowOps" resource.
- */
-static void
-window_ops(XtermWidget termw)
-{
- TScreen *screen = &termw->screen;
- XWindowChanges values;
- XWindowAttributes win_attrs;
- XTextProperty text;
- unsigned value_mask;
- unsigned root_width;
- unsigned root_height;
-
- TRACE(("window_ops %d\n", param[0]));
- switch (param[0]) {
- case 1: /* Restore (de-iconify) window */
- XMapWindow(screen->display,
- VShellWindow);
- break;
-
- case 2: /* Minimize (iconify) window */
- XIconifyWindow(screen->display,
- VShellWindow,
- DefaultScreen(screen->display));
- break;
-
- case 3: /* Move the window to the given position */
- values.x = param[1];
- values.y = param[2];
- value_mask = (CWX | CWY);
- XReconfigureWMWindow(screen->display,
- VShellWindow,
- DefaultScreen(screen->display),
- value_mask,
- &values);
- break;
-
- case 4: /* Resize the window to given size in pixels */
- RequestResize(termw, param[1], param[2], False);
- break;
-
- case 5: /* Raise the window to the front of the stack */
- XRaiseWindow(screen->display, VShellWindow);
- break;
-
- case 6: /* Lower the window to the bottom of the stack */
- XLowerWindow(screen->display, VShellWindow);
- break;
-
- case 7: /* Refresh the window */
- Redraw();
- break;
-
- case 8: /* Resize the text-area, in characters */
- RequestResize(termw, param[1], param[2], True);
- break;
-
-#if OPT_MAXIMIZE
- case 9: /* Maximize or restore */
- RequestMaximize(termw, param[1]);
- break;
-#endif
-
- case 11: /* Report the window's state */
- XGetWindowAttributes(screen->display,
- VWindow(screen),
- &win_attrs);
- reply.a_type = CSI;
- reply.a_pintro = 0;
- reply.a_nparam = 1;
- reply.a_param[0] = (win_attrs.map_state == IsViewable) ? 1 : 2;
- reply.a_inters = 0;
- reply.a_final = 't';
- unparseseq(&reply, screen->respond);
- break;
-
- case 13: /* Report the window's position */
- XGetWindowAttributes(screen->display,
- WMFrameWindow(termw),
- &win_attrs);
- reply.a_type = CSI;
- reply.a_pintro = 0;
- reply.a_nparam = 3;
- reply.a_param[0] = 3;
- reply.a_param[1] = win_attrs.x;
- reply.a_param[2] = win_attrs.y;
- reply.a_inters = 0;
- reply.a_final = 't';
- unparseseq(&reply, screen->respond);
- break;
-
- case 14: /* Report the window's size in pixels */
- XGetWindowAttributes(screen->display,
- VWindow(screen),
- &win_attrs);
- reply.a_type = CSI;
- reply.a_pintro = 0;
- reply.a_nparam = 3;
- reply.a_param[0] = 4;
- /*FIXME: find if dtterm uses
- * win_attrs.height or Height
- * win_attrs.width or Width
- */
- reply.a_param[1] = Height(screen);
- reply.a_param[2] = Width(screen);
- reply.a_inters = 0;
- reply.a_final = 't';
- unparseseq(&reply, screen->respond);
- break;
-
- case 18: /* Report the text's size in characters */
- reply.a_type = CSI;
- reply.a_pintro = 0;
- reply.a_nparam = 3;
- reply.a_param[0] = 8;
- reply.a_param[1] = MaxRows(screen);
- reply.a_param[2] = MaxCols(screen);
- reply.a_inters = 0;
- reply.a_final = 't';
- unparseseq(&reply, screen->respond);
- break;
-
-#if OPT_MAXIMIZE
- case 19: /* Report the screen's size, in characters */
- if (!QueryMaximize(term, &root_height, &root_width)) {
- root_height = 0;
- root_width = 0;
- }
- reply.a_type = CSI;
- reply.a_pintro = 0;
- reply.a_nparam = 3;
- reply.a_param[0] = 9;
- reply.a_param[1] = root_height / FontHeight(screen);
- reply.a_param[2] = root_width / FontWidth(screen);
- reply.a_inters = 0;
- reply.a_final = 't';
- unparseseq(&reply, screen->respond);
- break;
-#endif
-
- case 20: /* Report the icon's label */
- report_win_label(screen, 'L', &text,
- XGetWMIconName(screen->display, VShellWindow, &text));
- break;
-
- case 21: /* Report the window's title */
- report_win_label(screen, 'l', &text,
- XGetWMName(screen->display, VShellWindow, &text));
- break;
-
- default: /* DECSLPP (24, 25, 36, 48, 72, 144) */
- if (param[0] >= 24)
- RequestResize(termw, param[0], -1, True);
- break;
- }
-}
-
-/*
- * set a bit in a word given a pointer to the word and a mask.
- */
-static void
-bitset(unsigned *p, unsigned mask)
-{
- *p |= mask;
-}
-
-/*
- * clear a bit in a word given a pointer to the word and a mask.
- */
-static void
-bitclr(unsigned *p, unsigned mask)
-{
- *p &= ~mask;
-}
-
-/*
- * Copy bits from one word to another, given a mask
- */
-static void
-bitcpy(unsigned *p, unsigned q, unsigned mask)
-{
- bitclr(p, mask);
- bitset(p, q & mask);
-}
-
-void
-unparseputc1(int c, int fd)
-{
- if (c >= 0x80 && c <= 0x9F) {
- if (!term->screen.control_eight_bits) {
- unparseputc(A2E(ESC), fd);
- c = A2E(c - 0x40);
- }
- }
- unparseputc(c, fd);
-}
-
-void
-unparseseq(ANSI * ap, int fd)
-{
- int c;
- int i;
- int inters;
-
- unparseputc1(c = ap->a_type, fd);
- if (c == ESC
- || c == DCS
- || c == CSI
- || c == OSC
- || c == PM
- || c == APC
- || c == SS3) {
- if (ap->a_pintro != 0)
- unparseputc(ap->a_pintro, fd);
- for (i = 0; i < ap->a_nparam; ++i) {
- if (i != 0)
- unparseputc(';', fd);
- unparseputn((unsigned int) ap->a_param[i], fd);
- }
- if ((inters = ap->a_inters) != 0) {
- for (i = 3; i >= 0; --i) {
- c = CharOf(inters >> (8 * i));
- if (c != 0)
- unparseputc(c, fd);
- }
- }
- unparseputc((char) ap->a_final, fd);
- }
-}
-
-static void
-unparseputn(unsigned int n, int fd)
-{
- unsigned int q;
-
- q = n / 10;
- if (q != 0)
- unparseputn(q, fd);
- unparseputc((char) ('0' + (n % 10)), fd);
-}
-
-void
-unparseputc(int c, int fd)
-{
- IChar buf[2];
- unsigned i = 1;
-
-#if OPT_TCAP_QUERY
- /*
- * If we're returning a termcap string, it has to be translated since
- * a DCS must not contain any characters except for the normal 7-bit
- * printable ASCII (counting tab, carriage return, etc). For now,
- * just use hexadecimal for the whole thing.
- */
- if (term->screen.tc_query >= 0) {
- char tmp[3];
- sprintf(tmp, "%02X", c & 0xFF);
- buf[0] = tmp[0];
- buf[1] = tmp[1];
- i = 2;
- } else
-#endif
- if ((buf[0] = c) == '\r' && (term->flags & LINEFEED)) {
- buf[1] = '\n';
- i++;
- }
-#ifdef VMS
- tt_write(&buf, i);
-#else /* VMS */
- writePtyData(fd, buf, i);
-#endif /* VMS */
-
- /* If send/receive mode is reset, we echo characters locally */
- if ((term->keyboard.flags & MODE_SRM) == 0) {
- (void) doparsing((unsigned) c, &myState);
- }
-}
-
-void
-unparseputs(char *s, int fd)
-{
- while (*s)
- unparseputc(*s++, fd);
-}
-
-void
-ToggleAlternate(TScreen * screen)
-{
- if (screen->alternate)
- FromAlternate(screen);
- else
- ToAlternate(screen);
-}
-
-static void
-ToAlternate(TScreen * screen)
-{
- if (screen->alternate)
- return;
- TRACE(("ToAlternate\n"));
- if (!screen->altbuf)
- screen->altbuf = Allocate(MaxRows(screen), MaxCols(screen),
- &screen->abuf_address);
- SwitchBufs(screen);
- screen->alternate = True;
- update_altscreen();
-}
-
-static void
-FromAlternate(TScreen * screen)
-{
- if (!screen->alternate)
- return;
- TRACE(("FromAlternate\n"));
- if (screen->scroll_amt)
- FlushScroll(screen);
- screen->alternate = False;
- SwitchBufs(screen);
- update_altscreen();
-}
-
-static void
-SwitchBufs(TScreen * screen)
-{
- int rows, top;
-
- if (screen->cursor_state)
- HideCursor();
-
- rows = MaxRows(screen);
- SwitchBufPtrs(screen);
-
- if ((top = -screen->topline) < rows) {
- if (screen->scroll_amt)
- FlushScroll(screen);
- if (top == 0)
- XClearWindow(screen->display, VWindow(screen));
- else
- XClearArea(screen->display,
- VWindow(screen),
- (int) OriginX(screen),
- (int) top * FontHeight(screen) + screen->border,
- (unsigned) Width(screen),
- (unsigned) (rows - top) * FontHeight(screen),
- False);
- }
- ScrnUpdate(screen, 0, 0, rows, MaxCols(screen), False);
-}
-
-/* swap buffer line pointers between alt and regular screens */
-void
-SwitchBufPtrs(TScreen * screen)
-{
- size_t len = ScrnPointers(screen, (unsigned) MaxRows(screen));
-
- memcpy((char *) screen->save_ptr, (char *) screen->visbuf, len);
- memcpy((char *) screen->visbuf, (char *) screen->altbuf, len);
- memcpy((char *) screen->altbuf, (char *) screen->save_ptr, len);
-}
-
-void
-VTRun(void)
-{
- TScreen *screen = &term->screen;
-
- TRACE(("VTRun ...\n"));
-
- if (!screen->Vshow) {
- set_vt_visibility(True);
- }
- update_vttekmode();
- update_vtshow();
- update_tekshow();
- set_vthide_sensitivity();
-
- if (screen->allbuf == NULL)
- VTallocbuf();
-
- screen->cursor_state = OFF;
- screen->cursor_set = ON;
-#if OPT_BLINK_CURS
- if (DoStartBlinking(screen))
- StartBlinking(screen);
-#endif
-
-#if OPT_TEK4014
- if (Tpushb > Tpushback) {
- fillPtyData(screen, VTbuffer, (char *) Tpushback, Tpushb - Tpushback);
- Tpushb = Tpushback;
- }
-#endif
- if (!setjmp(VTend))
- VTparse();
- StopBlinking(screen);
- HideCursor();
- screen->cursor_set = OFF;
-}
-
-/*ARGSUSED*/
-static void
-VTExpose(Widget w GCC_UNUSED,
- XEvent * event,
- Region region GCC_UNUSED)
-{
- TScreen *screen = &term->screen;
-
-#ifdef DEBUG
- if (debug)
- fputs("Expose\n", stderr);
-#endif /* DEBUG */
- if (event->type == Expose)
- HandleExposure(screen, event);
-}
-
-static void
-VTGraphicsOrNoExpose(XEvent * event)
-{
- TScreen *screen = &term->screen;
- if (screen->incopy <= 0) {
- screen->incopy = 1;
- if (screen->scrolls > 0)
- screen->scrolls--;
- }
- if (event->type == GraphicsExpose)
- if (HandleExposure(screen, event))
- screen->cursor_state = OFF;
- if ((event->type == NoExpose)
- || ((XGraphicsExposeEvent *) event)->count == 0) {
- if (screen->incopy <= 0 && screen->scrolls > 0)
- screen->scrolls--;
- if (screen->scrolls)
- screen->incopy = -1;
- else
- screen->incopy = 0;
- }
-}
-
-/*ARGSUSED*/
-static void
-VTNonMaskableEvent(Widget w GCC_UNUSED,
- XtPointer closure GCC_UNUSED,
- XEvent * event,
- Boolean * cont GCC_UNUSED)
-{
- switch (event->type) {
- case GraphicsExpose:
- case NoExpose:
- VTGraphicsOrNoExpose(event);
- break;
- }
-}
-
-static void
-VTResize(Widget w)
-{
- if (XtIsRealized(w)) {
- ScreenResize(&term->screen, term->core.width, term->core.height, &term->flags);
- }
-}
-
-#define okDimension(src,dst) ((src <= 32767) && ((dst = src) == src))
-
-static void
-RequestResize(XtermWidget termw, int rows, int cols, int text)
-{
-#ifndef nothack
- XSizeHints sizehints;
- long supp;
-#endif
- TScreen *screen = &termw->screen;
- unsigned long value;
- Dimension replyWidth, replyHeight;
- Dimension askedWidth, askedHeight;
- XtGeometryResult status;
- XWindowAttributes attrs;
-
- TRACE(("RequestResize(rows=%d, cols=%d, text=%d)\n", rows, cols, text));
-
- if ((askedWidth = cols) < cols
- || (askedHeight = rows) < rows)
- return;
-
- if (askedHeight == 0
- || askedWidth == 0
- || term->misc.limit_resize > 0) {
- XGetWindowAttributes(XtDisplay(termw),
- RootWindowOfScreen(XtScreen(termw)), &attrs);
- }
-
- if (text) {
- if ((value = rows) != 0) {
- if (rows < 0)
- value = MaxRows(screen);
- value *= FontHeight(screen);
- value += (2 * screen->border);
- if (!okDimension(value, askedHeight))
- return;
- }
-
- if ((value = cols) != 0) {
- if (cols < 0)
- value = MaxCols(screen);
- value *= FontWidth(screen);
- value += (2 * screen->border) + ScrollbarWidth(screen);
- if (!okDimension(value, askedWidth))
- return;
- }
-
- } else {
- if (rows < 0)
- askedHeight = FullHeight(screen);
- if (cols < 0)
- askedWidth = FullWidth(screen);
- }
-
- if (rows == 0)
- askedHeight = attrs.height;
- if (cols == 0)
- askedWidth = attrs.width;
-
- if (term->misc.limit_resize > 0) {
- Dimension high = term->misc.limit_resize * attrs.height;
- Dimension wide = term->misc.limit_resize * attrs.width;
- if (high < attrs.height)
- high = attrs.height;
- if (askedHeight > high)
- askedHeight = high;
- if (wide < attrs.width)
- wide = attrs.width;
- if (askedWidth > wide)
- askedWidth = wide;
- }
-#ifndef nothack
- if (!XGetWMNormalHints(screen->display, VShellWindow,
- &sizehints, &supp))
- bzero(&sizehints, sizeof(sizehints));
-#endif
-
- status = XtMakeResizeRequest((Widget) termw,
- askedWidth, askedHeight,
- &replyWidth, &replyHeight);
- TRACE(("charproc.c XtMakeResizeRequest %dx%d -> %dx%d (status %d)\n",
- askedHeight, askedWidth,
- replyHeight, replyWidth,
- status));
-
- if (status == XtGeometryYes ||
- status == XtGeometryDone) {
- ScreenResize(&termw->screen,
- replyWidth,
- replyHeight,
- &termw->flags);
- }
-#ifndef nothack
- /*
- * XtMakeResizeRequest() has the undesirable side-effect of clearing
- * the window manager's hints, even on a failed request. This would
- * presumably be fixed if the shell did its own work.
- */
- if (sizehints.flags
- && replyHeight
- && replyWidth) {
- sizehints.height = replyHeight;
- sizehints.width = replyWidth;
-
- TRACE(("%s@%d -- ", __FILE__, __LINE__));
- TRACE_HINTS(&sizehints);
- XSetWMNormalHints(screen->display, VShellWindow, &sizehints);
- TRACE(("%s@%d -- ", __FILE__, __LINE__));
- TRACE_WM_HINTS(termw);
- }
-#endif
-
- XSync(screen->display, False); /* synchronize */
- if (XtAppPending(app_con))
- xevents();
-}
-
-static String xterm_trans =
-"<ClientMessage>WM_PROTOCOLS: DeleteWindow()\n\
- <MappingNotify>: KeyboardMapping()\n";
-
-int
-VTInit(void)
-{
- TScreen *screen = &term->screen;
- Widget vtparent = SHELL_OF(term);
-
- XtRealizeWidget(vtparent);
- XtOverrideTranslations(vtparent, XtParseTranslationTable(xterm_trans));
- (void) XSetWMProtocols(XtDisplay(vtparent), XtWindow(vtparent),
- &wm_delete_window, 1);
- TRACE_TRANS("shell", vtparent);
- TRACE_TRANS("vt100", (Widget) (term));
-
- if (screen->allbuf == NULL)
- VTallocbuf();
- return (1);
-}
-
-static void
-VTallocbuf(void)
-{
- TScreen *screen = &term->screen;
- int nrows = MaxRows(screen);
-
- /* allocate screen buffer now, if necessary. */
- if (screen->scrollWidget)
- nrows += screen->savelines;
- screen->allbuf = Allocate(nrows, MaxCols(screen),
- &screen->sbuf_address);
- if (screen->scrollWidget)
- screen->visbuf = &screen->allbuf[MAX_PTRS * screen->savelines];
- else
- screen->visbuf = screen->allbuf;
- return;
-}
-
-static void
-VTClassInit(void)
-{
- XtAddConverter(XtRString, XtRGravity, XmuCvtStringToGravity,
- (XtConvertArgList) NULL, (Cardinal) 0);
-}
-
-/*
- * The whole wnew->screen struct is zeroed in VTInitialize. Use these macros
- * where applicable for copying the pieces from the request widget into the
- * new widget. We do not have to use them for wnew->misc, but the associated
- * traces are very useful for debugging.
- */
-#if OPT_TRACE
-#define init_Bres(name) \
- TRACE(("init " #name " = %s\n", \
- BtoS(wnew->name = request->name)))
-#define init_Dres(name) \
- TRACE(("init " #name " = %f\n", \
- wnew->name = request->name))
-#define init_Ires(name) \
- TRACE(("init " #name " = %d\n", \
- wnew->name = request->name))
-#define init_Sres(name) \
- TRACE(("init " #name " = \"%s\"\n", \
- (wnew->name = x_strtrim(request->name)) != NULL \
- ? wnew->name : "<null>"))
-#define init_Tres(offset) \
- TRACE(("init screen.Tcolors[" #offset "] = %#lx\n", \
- fill_Tres(wnew, request, offset)))
-#else
-#define init_Bres(name) wnew->name = request->name
-#define init_Dres(name) wnew->name = request->name
-#define init_Ires(name) wnew->name = request->name
-#define init_Sres(name) wnew->name = x_strtrim(request->name)
-#define init_Tres(offset) fill_Tres(wnew, request, offset)
-#endif
-
-#if OPT_COLOR_RES
-/*
- * Override the use of XtDefaultForeground/XtDefaultBackground to make some
- * colors, such as cursor color, use the actual foreground/background value
- * if there is no explicit resource value used.
- */
-static Pixel
-fill_Tres(XtermWidget target, XtermWidget source, int offset)
-{
- char *name;
- ScrnColors temp;
-
- target->screen.Tcolors[offset] = source->screen.Tcolors[offset];
- target->screen.Tcolors[offset].mode = False;
-
- if ((name = x_strtrim(target->screen.Tcolors[offset].resource)) != 0)
- target->screen.Tcolors[offset].resource = name;
-
- if (name == 0) {
- target->screen.Tcolors[offset].value = target->dft_foreground;
- } else if (!x_strcasecmp(name, XtDefaultForeground)) {
- target->screen.Tcolors[offset].value =
- ((offset == TEXT_FG || offset == TEXT_BG)
- ? target->dft_foreground
- : target->screen.Tcolors[TEXT_FG].value);
- } else if (!x_strcasecmp(name, XtDefaultBackground)) {
- target->screen.Tcolors[offset].value =
- ((offset == TEXT_FG || offset == TEXT_BG)
- ? target->dft_background
- : target->screen.Tcolors[TEXT_BG].value);
- } else {
- if (AllocateTermColor(target, &temp, offset, name)) {
- target->screen.Tcolors[offset].value = temp.colors[offset];
- }
- }
- return target->screen.Tcolors[offset].value;
-}
-#else
-#define fill_Tres(target, source, offset) \
- target->screen.Tcolors[offset] = source->screen.Tcolors[offset]
-#endif
-
-#if OPT_WIDE_CHARS
-static void
-VTInitialize_locale(XtermWidget request)
-{
- Bool is_utf8 = xtermEnvUTF8();
-
- TRACE(("VTInitialize_locale\n"));
- TRACE(("... request screen.utf8_mode = %d\n", request->screen.utf8_mode));
-
- if (request->screen.utf8_mode < 0)
- request->screen.utf8_mode = uFalse;
-
- if (request->screen.utf8_mode > 3)
- request->screen.utf8_mode = uDefault;
-
- request->screen.latin9_mode = 0;
- request->screen.unicode_font = 0;
-#if OPT_LUIT_PROG
- request->misc.callfilter = 0;
- request->misc.use_encoding = 0;
-
- TRACE(("... setup for luit:\n"));
- TRACE(("... request misc.locale_str = \"%s\"\n", request->misc.locale_str));
-
- if (request->screen.utf8_mode == uFalse) {
- TRACE(("... command-line +u8 overrides\n"));
- } else
-#if OPT_MINI_LUIT
- if (x_strcasecmp(request->misc.locale_str, "CHECKFONT") == 0) {
- int fl = (request->misc.default_font.f_n
- ? strlen(request->misc.default_font.f_n)
- : 0);
- if (fl > 11
- && x_strcasecmp(request->misc.default_font.f_n + fl - 11,
- "-ISO10646-1") == 0) {
- request->screen.unicode_font = 1;
- /* unicode font, use True */
-#ifdef HAVE_LANGINFO_CODESET
- if (!strcmp(xtermEnvEncoding(), "ANSI_X3.4-1968")
- || !strcmp(xtermEnvEncoding(), "ISO-8859-1")) {
- if (request->screen.utf8_mode == uDefault)
- request->screen.utf8_mode = uFalse;
- } else if (!strcmp(xtermEnvEncoding(), "ISO-8859-15")) {
- if (request->screen.utf8_mode == uDefault)
- request->screen.utf8_mode = uFalse;
- request->screen.latin9_mode = 1;
- } else {
- request->misc.callfilter = is_utf8 ? 0 : 1;
- request->screen.utf8_mode = uAlways;
- }
-#else
- request->misc.callfilter = is_utf8 ? 0 : 1;
- request->screen.utf8_mode = uAlways;
-#endif
- } else {
- /* other encoding, use False */
- if (request->screen.utf8_mode == uDefault) {
- request->screen.utf8_mode = is_utf8 ? uAlways : uFalse;
- }
- }
- } else
-#endif /* OPT_MINI_LUIT */
- if (x_strcasecmp(request->misc.locale_str, "TRUE") == 0 ||
- x_strcasecmp(request->misc.locale_str, "ON") == 0 ||
- x_strcasecmp(request->misc.locale_str, "YES") == 0 ||
- x_strcasecmp(request->misc.locale_str, "AUTO") == 0 ||
- strcmp(request->misc.locale_str, "1") == 0) {
- /* when true ... fully obeying LC_CTYPE locale */
- request->misc.callfilter = is_utf8 ? 0 : 1;
- request->screen.utf8_mode = uAlways;
- } else if (x_strcasecmp(request->misc.locale_str, "FALSE") == 0 ||
- x_strcasecmp(request->misc.locale_str, "OFF") == 0 ||
- x_strcasecmp(request->misc.locale_str, "NO") == 0 ||
- strcmp(request->misc.locale_str, "0") == 0) {
- /* when false ... original value of utf8_mode is effective */
- if (request->screen.utf8_mode == uDefault) {
- request->screen.utf8_mode = is_utf8 ? uAlways : uFalse;
- }
- } else if (x_strcasecmp(request->misc.locale_str, "MEDIUM") == 0 ||
- x_strcasecmp(request->misc.locale_str, "SEMIAUTO") == 0) {
- /* when medium ... obeying locale only for UTF-8 and Asian */
- if (is_utf8) {
- request->screen.utf8_mode = uAlways;
- } else if (
-#ifdef MB_CUR_MAX
- MB_CUR_MAX > 1 ||
-#else
- !strncmp(xtermEnvLocale(), "ja", 2) ||
- !strncmp(xtermEnvLocale(), "ko", 2) ||
- !strncmp(xtermEnvLocale(), "zh", 2) ||
-#endif
- !strncmp(xtermEnvLocale(), "th", 2) ||
- !strncmp(xtermEnvLocale(), "vi", 2)) {
- request->misc.callfilter = 1;
- request->screen.utf8_mode = uAlways;
- } else {
- request->screen.utf8_mode = uFalse;
- }
- } else if (x_strcasecmp(request->misc.locale_str, "UTF-8") == 0 ||
- x_strcasecmp(request->misc.locale_str, "UTF8") == 0) {
- /* when UTF-8 ... UTF-8 mode */
- request->screen.utf8_mode = uAlways;
- } else {
- /* other words are regarded as encoding name passed to luit */
- request->misc.callfilter = 1;
- request->screen.utf8_mode = uAlways;
- request->misc.use_encoding = 1;
- }
- TRACE(("... updated misc.callfilter = %s\n", BtoS(request->misc.callfilter)));
- TRACE(("... updated misc.use_encoding = %s\n", BtoS(request->misc.use_encoding)));
-#else
- if (request->screen.utf8_mode == uDefault) {
- request->screen.utf8_mode = is_utf8 ? uAlways : uFalse;
- }
-#endif /* OPT_LUIT_PROG */
-
- request->screen.utf8_inparse = (request->screen.utf8_mode != uFalse);
-
- TRACE(("... updated screen.utf8_mode = %d\n", request->screen.utf8_mode));
- TRACE(("...VTInitialize_locale done\n"));
-}
-#endif
-
-/* ARGSUSED */
-static void
-VTInitialize(Widget wrequest,
- Widget new_arg,
- ArgList args GCC_UNUSED,
- Cardinal *num_args GCC_UNUSED)
-{
- XtermWidget request = (XtermWidget) wrequest;
- XtermWidget wnew = (XtermWidget) new_arg;
- Widget my_parent = SHELL_OF(wnew);
- int i;
- char *s;
-
-#if OPT_ISO_COLORS
- Bool color_ok;
-#endif
-
-#if OPT_COLOR_RES2 && (MAXCOLORS > MIN_ANSI_COLORS)
- static XtResource fake_resources[] =
- {
-#if OPT_256_COLORS
-# include <256colres.h>
-#elif OPT_88_COLORS
-# include <88colres.h>
-#endif
- };
-#endif /* OPT_COLOR_RES2 */
-
- TRACE(("VTInitialize\n"));
-
- /* Zero out the entire "screen" component of "wnew" widget, then do
- * field-by-field assignment of "screen" fields that are named in the
- * resource list.
- */
- bzero((char *) &wnew->screen, sizeof(wnew->screen));
-
- /* dummy values so that we don't try to Realize the parent shell with height
- * or width of 0, which is illegal in X. The real size is computed in the
- * xtermWidget's Realize proc, but the shell's Realize proc is called first,
- * and must see a valid size.
- */
- wnew->core.height = wnew->core.width = 1;
-
- /*
- * The definition of -rv now is that it changes the definition of
- * XtDefaultForeground and XtDefaultBackground. So, we no longer
- * need to do anything special.
- */
- wnew->screen.display = wnew->core.screen->display;
-
- /*
- * We use the default foreground/background colors to compare/check if a
- * color-resource has been set.
- */
-#define MyBlackPixel(dpy) BlackPixel(dpy,DefaultScreen(dpy))
-#define MyWhitePixel(dpy) WhitePixel(dpy,DefaultScreen(dpy))
-
- if (request->misc.re_verse) {
- wnew->dft_foreground = MyWhitePixel(wnew->screen.display);
- wnew->dft_background = MyBlackPixel(wnew->screen.display);
- } else {
- wnew->dft_foreground = MyBlackPixel(wnew->screen.display);
- wnew->dft_background = MyWhitePixel(wnew->screen.display);
- }
- init_Tres(TEXT_FG);
- init_Tres(TEXT_BG);
-
- TRACE(("Color resource initialization:\n"));
- TRACE((" Default foreground %#lx\n", wnew->dft_foreground));
- TRACE((" Default background %#lx\n", wnew->dft_background));
- TRACE((" Screen foreground %#lx\n", T_COLOR(&(wnew->screen), TEXT_FG)));
- TRACE((" Screen background %#lx\n", T_COLOR(&(wnew->screen), TEXT_BG)));
-
- wnew->screen.mouse_button = -1;
- wnew->screen.mouse_row = -1;
- wnew->screen.mouse_col = -1;
-
-#if OPT_BOX_CHARS
- init_Bres(screen.force_box_chars);
- init_Bres(screen.force_all_chars);
-#endif
- init_Bres(screen.free_bold_box);
-
- init_Bres(screen.c132);
- init_Bres(screen.curses);
- init_Bres(screen.hp_ll_bc);
-#if OPT_XMC_GLITCH
- init_Ires(screen.xmc_glitch);
- init_Ires(screen.xmc_attributes);
- init_Bres(screen.xmc_inline);
- init_Bres(screen.move_sgr_ok);
-#endif
-#if OPT_BLINK_CURS
- init_Bres(screen.cursor_blink);
- init_Ires(screen.blink_on);
- init_Ires(screen.blink_off);
- wnew->screen.cursor_blink_res = wnew->screen.cursor_blink;
-#endif
-#if OPT_BLINK_TEXT
- init_Ires(screen.blink_as_bold);
-#endif
- init_Ires(screen.border);
- init_Bres(screen.jumpscroll);
- init_Bres(screen.old_fkeys);
- init_Bres(screen.delete_is_del);
- wnew->keyboard.type = wnew->screen.old_fkeys
- ? keyboardIsLegacy
- : keyboardIsDefault;
-#ifdef ALLOWLOGGING
- init_Sres(screen.logfile);
-#endif
- init_Bres(screen.bellOnReset);
- init_Bres(screen.marginbell);
- init_Bres(screen.multiscroll);
- init_Ires(screen.nmarginbell);
- init_Ires(screen.savelines);
- init_Ires(screen.scrollBarBorder);
- init_Ires(screen.scrolllines);
- init_Bres(screen.scrollttyoutput);
- init_Bres(screen.scrollkey);
-
- init_Sres(screen.term_id);
- for (s = request->screen.term_id; *s; s++) {
- if (!isalpha(CharOf(*s)))
- break;
- }
- wnew->screen.terminal_id = atoi(s);
- if (wnew->screen.terminal_id < MIN_DECID)
- wnew->screen.terminal_id = MIN_DECID;
- if (wnew->screen.terminal_id > MAX_DECID)
- wnew->screen.terminal_id = MAX_DECID;
- TRACE(("term_id '%s' -> terminal_id %d\n",
- wnew->screen.term_id,
- wnew->screen.terminal_id));
-
- wnew->screen.vtXX_level = (wnew->screen.terminal_id / 100);
- init_Bres(screen.visualbell);
- init_Ires(screen.visualBellDelay);
- init_Bres(screen.poponbell);
- init_Ires(misc.limit_resize);
-#if OPT_NUM_LOCK
- init_Bres(misc.real_NumLock);
- init_Bres(misc.alwaysUseMods);
- wnew->misc.num_lock = 0;
- wnew->misc.alt_left = 0;
- wnew->misc.alt_right = 0;
- wnew->misc.meta_trans = False;
- wnew->misc.meta_left = 0;
- wnew->misc.meta_right = 0;
-#endif
-#if OPT_SHIFT_FONTS
- init_Bres(misc.shift_fonts);
-#endif
-#if OPT_SUNPC_KBD
- init_Ires(misc.ctrl_fkeys);
-#endif
-#if OPT_TEK4014
- init_Bres(misc.tekInhibit);
- init_Bres(misc.tekSmall);
- init_Bres(screen.TekEmu);
-#endif
-#if OPT_TCAP_QUERY
- wnew->screen.tc_query = -1;
-#endif
- wnew->misc.re_verse0 = request->misc.re_verse;
- init_Bres(misc.re_verse);
- init_Ires(screen.multiClickTime);
- init_Ires(screen.bellSuppressTime);
- init_Sres(screen.charClass);
- init_Bres(screen.cutNewline);
- init_Bres(screen.cutToBeginningOfLine);
- init_Bres(screen.highlight_selection);
- init_Bres(screen.trim_selection);
- init_Bres(screen.i18nSelections);
- init_Bres(screen.brokenSelections);
- init_Bres(screen.always_highlight);
- wnew->screen.pointer_cursor = request->screen.pointer_cursor;
-
- init_Sres(screen.answer_back);
-
- init_Sres(screen.printer_command);
- init_Bres(screen.printer_autoclose);
- init_Bres(screen.printer_extent);
- init_Bres(screen.printer_formfeed);
- init_Ires(screen.printer_controlmode);
-#if OPT_PRINT_COLORS
- init_Ires(screen.print_attributes);
-#endif
-
- init_Sres(screen.keyboard_dialect);
-
- init_Bres(screen.input_eight_bits);
- init_Bres(screen.output_eight_bits);
- init_Bres(screen.control_eight_bits);
- init_Bres(screen.backarrow_key);
- init_Bres(screen.meta_sends_esc);
-
- init_Bres(screen.allowSendEvent0);
- init_Bres(screen.allowWindowOp0);
-
- /* make a copy so that editres cannot change the resource after startup */
- wnew->screen.allowSendEvents = wnew->screen.allowSendEvent0;
- wnew->screen.allowWindowOps = wnew->screen.allowWindowOp0;
-
-#ifndef NO_ACTIVE_ICON
- wnew->screen.fnt_icon = request->screen.fnt_icon;
- init_Bres(misc.active_icon);
- init_Ires(misc.icon_border_width);
- wnew->misc.icon_border_pixel = request->misc.icon_border_pixel;
-#endif /* NO_ACTIVE_ICON */
- init_Bres(misc.titeInhibit);
- init_Bres(misc.tiXtraScroll);
- init_Bres(misc.dynamicColors);
- for (i = fontMenu_font1; i <= fontMenu_lastBuiltin; i++) {
- init_Sres(screen.MenuFontName(i));
- }
- /* set default in realize proc */
- wnew->screen.MenuFontName(fontMenu_fontdefault) = NULL;
- wnew->screen.MenuFontName(fontMenu_fontescape) = NULL;
- wnew->screen.MenuFontName(fontMenu_fontsel) = NULL;
- wnew->screen.menu_font_number = fontMenu_fontdefault;
-
-#if OPT_BROKEN_OSC
- init_Bres(screen.brokenLinuxOSC);
-#endif
-
-#if OPT_BROKEN_ST
- init_Bres(screen.brokenStringTerm);
-#endif
-
-#if OPT_C1_PRINT
- init_Bres(screen.c1_printable);
-#endif
-
-#if OPT_DEC_CHRSET
- init_Bres(screen.font_doublesize);
- init_Ires(screen.cache_doublesize);
- if (wnew->screen.cache_doublesize > NUM_CHRSET)
- wnew->screen.cache_doublesize = NUM_CHRSET;
- if (wnew->screen.cache_doublesize == 0)
- wnew->screen.font_doublesize = False;
- TRACE(("Doublesize%s enabled, up to %d fonts\n",
- wnew->screen.font_doublesize ? "" : " not",
- wnew->screen.cache_doublesize));
-#endif
-
-#if OPT_ISO_COLORS || OPT_DEC_CHRSET || OPT_WIDE_CHARS
- wnew->num_ptrs = (OFF_ATTRS + 1); /* OFF_FLAGS, OFF_CHARS, OFF_ATTRS */
-#endif
-#if OPT_ISO_COLORS
- init_Ires(screen.veryBoldColors);
- init_Bres(screen.boldColors);
- init_Bres(screen.colorAttrMode);
- init_Bres(screen.colorBDMode);
- init_Bres(screen.colorBLMode);
- init_Bres(screen.colorMode);
- init_Bres(screen.colorULMode);
- init_Bres(screen.italicULMode);
- init_Bres(screen.colorRVMode);
-
- for (i = 0, color_ok = False; i < MAXCOLORS; i++) {
-
-#if OPT_COLOR_RES2 && (MAXCOLORS > MIN_ANSI_COLORS)
- /*
- * Xt has a hardcoded limit on the maximum number of resources that can
- * be used in a widget. If we configure both luit (which implies
- * wide-characters) and 256-colors, it goes over that limit. Most
- * people would not need a resource-file with 256-colors; the default
- * values in our table are sufficient. In that case, fake the resource
- * setting by copying the default value from the table. The #define's
- * can be overridden to make these true resources.
- */
- if (i >= MIN_ANSI_COLORS && i < NUM_ANSI_COLORS) {
- wnew->screen.Acolors[i].resource
- = ((char *) fake_resources[i - MIN_ANSI_COLORS].default_addr);
- if (wnew->screen.Acolors[i].resource == 0)
- wnew->screen.Acolors[i].resource = XtDefaultForeground;
- } else
-#endif /* OPT_COLOR_RES2 */
- wnew->screen.Acolors[i] = request->screen.Acolors[i];
-
-#if OPT_COLOR_RES
- TRACE(("Acolors[%d] = %s\n", i, wnew->screen.Acolors[i].resource));
- wnew->screen.Acolors[i].mode = False;
- if (!x_strcasecmp(wnew->screen.Acolors[i].resource, XtDefaultForeground)) {
- wnew->screen.Acolors[i].value = T_COLOR(&(wnew->screen), TEXT_FG);
- wnew->screen.Acolors[i].mode = True;
- } else if (!x_strcasecmp(wnew->screen.Acolors[i].resource, XtDefaultBackground)) {
- wnew->screen.Acolors[i].value = T_COLOR(&(wnew->screen), TEXT_BG);
- wnew->screen.Acolors[i].mode = True;
- } else {
- color_ok = True;
- }
-#else
- TRACE(("Acolors[%d] = %#lx\n", i, request->screen.Acolors[i]));
- if (wnew->screen.Acolors[i] != wnew->dft_foreground &&
- wnew->screen.Acolors[i] != T_COLOR(&(wnew->screen), TEXT_FG) &&
- wnew->screen.Acolors[i] != T_COLOR(&(wnew->screen), TEXT_BG))
- color_ok = True;
-#endif
- }
-
- /*
- * Check if we're trying to use color in a monochrome screen. Disable
- * color in that case, since that would make ANSI colors unusable. A 4-bit
- * or 8-bit display is usable, so we do not have to check for anything more
- * specific.
- */
- if (color_ok) {
- Display *display = wnew->screen.display;
- XVisualInfo myTemplate, *visInfoPtr;
- int numFound;
-
- myTemplate.visualid = XVisualIDFromVisual(DefaultVisual(display,
- XDefaultScreen(display)));
- visInfoPtr = XGetVisualInfo(display, (long) VisualIDMask,
- &myTemplate, &numFound);
- if (visInfoPtr == 0
- || numFound == 0
- || visInfoPtr->depth <= 1) {
- TRACE(("disabling color since screen is monochrome\n"));
- color_ok = False;
- } else {
- XFree(visInfoPtr);
- }
- }
-
- /* If none of the colors are anything other than the foreground or
- * background, we'll assume this isn't color, no matter what the colorMode
- * resource says. (There doesn't seem to be any good way to determine if
- * the resource lookup failed versus the user having misconfigured this).
- */
- if (!color_ok) {
- wnew->screen.colorMode = False;
- TRACE(("All colors are foreground or background: disable colorMode\n"));
- }
-#if OPT_EXT_COLORS
- wnew->num_ptrs = (OFF_BGRND + 1);
-#else
- wnew->num_ptrs = (OFF_COLOR + 1);
-#endif
- wnew->sgr_foreground = -1;
- wnew->sgr_background = -1;
- wnew->sgr_extended = 0;
-#endif /* OPT_ISO_COLORS */
-
- init_Tres(MOUSE_FG);
- init_Tres(MOUSE_BG);
- init_Tres(TEXT_CURSOR);
-#if OPT_HIGHLIGHT_COLOR
- init_Tres(HIGHLIGHT_BG);
-#endif
-
-#if OPT_TEK4014
- /*
- * The Tek4014 window has no separate resources for foreground, background
- * and cursor color. Since xterm always creates the vt100 widget first, we
- * can set the Tektronix colors here. That lets us use escape sequences to
- * set its dynamic colors and get consistent behavior whether or not the
- * window is displayed.
- */
- T_COLOR(&(wnew->screen), TEK_BG) = T_COLOR(&(wnew->screen), TEXT_BG);
- T_COLOR(&(wnew->screen), TEK_FG) = T_COLOR(&(wnew->screen), TEXT_FG);
- T_COLOR(&(wnew->screen), TEK_CURSOR) = T_COLOR(&(wnew->screen), TEXT_CURSOR);
-#endif
-
-#if OPT_DEC_CHRSET
- wnew->num_ptrs = (OFF_CSETS + 1);
-#endif
-
-#if OPT_WIDE_CHARS
- VTInitialize_locale(request);
-
-#if OPT_LUIT_PROG
- init_Bres(misc.callfilter);
- init_Bres(misc.use_encoding);
- init_Sres(misc.locale_str);
- init_Sres(misc.localefilter);
-#endif
-
-#if OPT_RENDERFONT
- init_Dres(misc.face_size);
- init_Sres(misc.face_name);
- init_Sres(misc.face_wide_name);
- init_Bres(misc.render_font);
- /* minor tweak to make debug traces consistent: */
- if (wnew->misc.render_font) {
- if (wnew->misc.face_name == 0) {
- wnew->misc.render_font = False;
- TRACE(("reset render_font since there is no face_name\n"));
- }
- }
-#endif
-
- init_Bres(screen.vt100_graphics);
- init_Ires(screen.utf8_mode);
- init_Bres(screen.wide_chars);
- init_Bres(misc.mk_width);
- init_Bres(misc.cjk_width);
- if (request->screen.utf8_mode) {
- TRACE(("setting wide_chars on\n"));
- wnew->screen.wide_chars = True;
- } else {
- TRACE(("setting utf8_mode to 0\n"));
- wnew->screen.utf8_mode = uFalse;
- }
- TRACE(("initialized UTF-8 mode to %d\n", wnew->screen.utf8_mode));
-
-#if OPT_MINI_LUIT
- if (request->screen.latin9_mode) {
- wnew->screen.latin9_mode = True;
- }
- if (request->screen.unicode_font) {
- wnew->screen.unicode_font = True;
- }
- TRACE(("initialized Latin9 mode to %d\n", wnew->screen.latin9_mode));
- TRACE(("initialized unicode_font to %d\n", wnew->screen.unicode_font));
-#endif
-
- if (wnew->screen.wide_chars != False)
- wnew->num_ptrs = (OFF_COM2H + 1);
-
- decode_wcwidth((wnew->misc.cjk_width ? 2 : 0)
- + (wnew->misc.mk_width ? 1 : 0)
- + 1);
-#endif /* OPT_WIDE_CHARS */
-
- init_Bres(screen.bold_mode);
- init_Bres(screen.underline);
-
- wnew->cur_foreground = 0;
- wnew->cur_background = 0;
-
- wnew->keyboard.flags = MODE_SRM;
- if (wnew->screen.backarrow_key)
- wnew->keyboard.flags |= MODE_DECBKM;
- TRACE(("initialized DECBKM %s\n",
- BtoS(wnew->keyboard.flags & MODE_DECBKM)));
-
- /* look for focus related events on the shell, because we need
- * to care about the shell's border being part of our focus.
- */
- XtAddEventHandler(my_parent, EnterWindowMask, False,
- HandleEnterWindow, (Opaque) NULL);
- XtAddEventHandler(my_parent, LeaveWindowMask, False,
- HandleLeaveWindow, (Opaque) NULL);
- XtAddEventHandler(my_parent, FocusChangeMask, False,
- HandleFocusChange, (Opaque) NULL);
- XtAddEventHandler((Widget) wnew, 0L, True,
- VTNonMaskableEvent, (Opaque) NULL);
- XtAddEventHandler((Widget) wnew, PropertyChangeMask, False,
- HandleBellPropertyChange, (Opaque) NULL);
-
-#if HANDLE_STRUCT_NOTIFY
-#if OPT_TOOLBAR
- wnew->VT100_TB_INFO(menu_bar) = request->VT100_TB_INFO(menu_bar);
- init_Ires(VT100_TB_INFO(menu_height));
-#else
- /* Flag icon name with "***" on window output when iconified.
- * Put in a handler that will tell us when we get Map/Unmap events.
- */
- if (zIconBeep)
-#endif
- XtAddEventHandler(my_parent, StructureNotifyMask, False,
- HandleStructNotify, (Opaque) 0);
-#endif /* HANDLE_STRUCT_NOTIFY */
-
- wnew->screen.bellInProgress = False;
-
- set_character_class(wnew->screen.charClass);
-
- /* create it, but don't realize it */
- ScrollBarOn(wnew, True, False);
-
- /* make sure that the resize gravity acceptable */
- if (wnew->misc.resizeGravity != NorthWestGravity &&
- wnew->misc.resizeGravity != SouthWestGravity) {
- Cardinal nparams = 1;
-
- XtAppWarningMsg(app_con, "rangeError", "resizeGravity", "XTermError",
- "unsupported resizeGravity resource value (%d)",
- (String *) & (wnew->misc.resizeGravity), &nparams);
- wnew->misc.resizeGravity = SouthWestGravity;
- }
-#ifndef NO_ACTIVE_ICON
- wnew->screen.whichVwin = &wnew->screen.fullVwin;
-#if OPT_TEK4014
- wnew->screen.whichTwin = &wnew->screen.fullTwin;
-#endif
-#endif /* NO_ACTIVE_ICON */
-
- if (wnew->screen.savelines < 0)
- wnew->screen.savelines = 0;
-
- init_Bres(screen.awaitInput);
-
- wnew->flags = 0;
- if (!wnew->screen.jumpscroll)
- wnew->flags |= SMOOTHSCROLL;
- if (wnew->misc.reverseWrap)
- wnew->flags |= REVERSEWRAP;
- if (wnew->misc.autoWrap)
- wnew->flags |= WRAPAROUND;
- if (wnew->misc.re_verse != wnew->misc.re_verse0)
- wnew->flags |= REVERSE_VIDEO;
- if (wnew->screen.c132)
- wnew->flags |= IN132COLUMNS;
-
- wnew->initflags = wnew->flags;
-
- init_Ires(keyboard.modify_cursor_keys);
-
- init_Ires(misc.appcursorDefault);
- if (wnew->misc.appcursorDefault)
- wnew->keyboard.flags |= MODE_DECCKM;
-
- init_Ires(misc.appkeypadDefault);
- if (wnew->misc.appkeypadDefault)
- wnew->keyboard.flags |= MODE_DECKPAM;
-
- return;
-}
-
-static void
-VTDestroy(Widget w)
-{
- XtFree((char *) (((XtermWidget) w)->screen.selection_data));
-}
-
-/*ARGSUSED*/
-static void
-VTRealize(Widget w,
- XtValueMask * valuemask,
- XSetWindowAttributes * values)
-{
- XtermWidget xw = (XtermWidget) w;
- TScreen *screen = &xw->screen;
-
- unsigned width, height;
- int xpos, ypos, pr;
- XSizeHints sizehints;
- Atom pid_atom;
-
- TRACE(("VTRealize\n"));
-
- TabReset(xw->tabs);
-
- screen->MenuFontName(fontMenu_fontdefault) = xw->misc.default_font.f_n;
- screen->fnt_norm = NULL;
- screen->fnt_bold = NULL;
-#if OPT_WIDE_CHARS
- screen->fnt_dwd = NULL;
- screen->fnt_dwdb = NULL;
-#endif
- if (!xtermLoadFont(xw,
- &(xw->misc.default_font),
- False, 0)) {
- if (XmuCompareISOLatin1(xw->misc.default_font.f_n, "fixed") != 0) {
- fprintf(stderr,
- "%s: unable to open font \"%s\", trying \"fixed\"....\n",
- xterm_name, xw->misc.default_font.f_n);
- (void) xtermLoadFont(xw,
- xtermFontName("fixed"),
- False, 0);
- screen->MenuFontName(fontMenu_fontdefault) = "fixed";
- }
- }
-
- /* really screwed if we couldn't open default font */
- if (!screen->fnt_norm) {
- fprintf(stderr, "%s: unable to locate a suitable font\n",
- xterm_name);
- Exit(1);
- }
-#if OPT_WIDE_CHARS
- if (xw->screen.utf8_mode) {
- TRACE(("check if this is a wide font, if not try again\n"));
- if (xtermLoadWideFonts(xw, False))
- SetVTFont(xw, screen->menu_font_number, TRUE, NULL);
- }
-#endif
-
- /* making cursor */
- if (!screen->pointer_cursor) {
- screen->pointer_cursor =
- make_colored_cursor(XC_xterm,
- T_COLOR(screen, MOUSE_FG),
- T_COLOR(screen, MOUSE_BG));
- } else {
- recolor_cursor(screen->pointer_cursor,
- T_COLOR(screen, MOUSE_FG),
- T_COLOR(screen, MOUSE_BG));
- }
-
- /* set defaults */
- xpos = 1;
- ypos = 1;
- width = 80;
- height = 24;
-
- TRACE(("parsing geo_metry %s\n", NonNull(xw->misc.geo_metry)));
- pr = XParseGeometry(xw->misc.geo_metry, &xpos, &ypos,
- &width, &height);
- TRACE(("... position %d,%d size %dx%d\n", ypos, xpos, height, width));
-
- set_max_col(screen, (int) (width - 1)); /* units in character cells */
- set_max_row(screen, (int) (height - 1)); /* units in character cells */
- xtermUpdateFontInfo(xw, False);
-
- width = screen->fullVwin.fullwidth;
- height = screen->fullVwin.fullheight;
-
- TRACE(("... border widget %d parent %d shell %d\n",
- BorderWidth(xw),
- BorderWidth(XtParent(xw)),
- BorderWidth(SHELL_OF(xw))));
-
- if ((pr & XValue) && (XNegative & pr)) {
- xpos += DisplayWidth(screen->display, DefaultScreen(screen->display))
- - width - (BorderWidth(XtParent(xw)) * 2);
- }
- if ((pr & YValue) && (YNegative & pr)) {
- ypos += DisplayHeight(screen->display, DefaultScreen(screen->display))
- - height - (BorderWidth(XtParent(xw)) * 2);
- }
-
- /* set up size hints for window manager; min 1 char by 1 char */
- bzero(&sizehints, sizeof(sizehints));
- xtermSizeHints(xw, &sizehints, (xw->misc.scrollbar
- ? (screen->scrollWidget->core.width
- + BorderWidth(screen->scrollWidget))
- : 0));
-
- sizehints.x = xpos;
- sizehints.y = ypos;
- if ((XValue & pr) || (YValue & pr)) {
- sizehints.flags |= USSize | USPosition;
- sizehints.flags |= PWinGravity;
- switch (pr & (XNegative | YNegative)) {
- case 0:
- sizehints.win_gravity = NorthWestGravity;
- break;
- case XNegative:
- sizehints.win_gravity = NorthEastGravity;
- break;
- case YNegative:
- sizehints.win_gravity = SouthWestGravity;
- break;
- default:
- sizehints.win_gravity = SouthEastGravity;
- break;
- }
- } else {
- /* set a default size, but do *not* set position */
- sizehints.flags |= PSize;
- }
- sizehints.height = sizehints.base_height
- + sizehints.height_inc * MaxRows(screen);
- sizehints.width = sizehints.base_width
- + sizehints.width_inc * MaxCols(screen);
-
- if ((WidthValue & pr) || (HeightValue & pr))
- sizehints.flags |= USSize;
- else
- sizehints.flags |= PSize;
-
- /*
- * Note that the size-hints are for the shell, while the resize-request
- * is for the vt100 widget. They are not the same size.
- */
- TRACE(("make resize request %dx%d\n", height, width));
- (void) XtMakeResizeRequest((Widget) xw,
- (Dimension) width, (Dimension) height,
- &xw->core.width, &xw->core.height);
- TRACE(("...made resize request %dx%d\n", xw->core.height, xw->core.width));
-
- /* XXX This is bogus. We are parsing geometries too late. This
- * is information that the shell widget ought to have before we get
- * realized, so that it can do the right thing.
- */
- if (sizehints.flags & USPosition)
- XMoveWindow(XtDisplay(xw), XtWindow(SHELL_OF(xw)),
- sizehints.x, sizehints.y);
-
- TRACE(("%s@%d -- ", __FILE__, __LINE__));
- TRACE_HINTS(&sizehints);
- XSetWMNormalHints(XtDisplay(xw), XtWindow(SHELL_OF(xw)), &sizehints);
- TRACE(("%s@%d -- ", __FILE__, __LINE__));
- TRACE_WM_HINTS(xw);
-
- if ((pid_atom = XInternAtom(XtDisplay(xw), "_NET_WM_PID", False)) != None) {
- /* XChangeProperty format 32 really is "long" */
- unsigned long pid_l = (unsigned long) getpid();
- TRACE(("Setting _NET_WM_PID property to %lu\n", pid_l));
- XChangeProperty(XtDisplay(xw), VShellWindow,
- pid_atom, XA_CARDINAL, 32, PropModeReplace,
- (unsigned char *) &pid_l, 1);
- }
-
- XFlush(XtDisplay(xw)); /* get it out to window manager */
-
- /* use ForgetGravity instead of SouthWestGravity because translating
- the Expose events for ConfigureNotifys is too hard */
- values->bit_gravity = ((xw->misc.resizeGravity == NorthWestGravity)
- ? NorthWestGravity
- : ForgetGravity);
- xw->screen.fullVwin.window = XtWindow(xw) =
- XCreateWindow(XtDisplay(xw), XtWindow(XtParent(xw)),
- xw->core.x, xw->core.y,
- xw->core.width, xw->core.height, BorderWidth(xw),
- (int) xw->core.depth,
- InputOutput, CopyFromParent,
- *valuemask | CWBitGravity, values);
- screen->event_mask = values->event_mask;
-
-#ifndef NO_ACTIVE_ICON
- if (xw->misc.active_icon && screen->fnt_icon) {
- int iconX = 0, iconY = 0;
- Widget shell = SHELL_OF(xw);
- unsigned long mask;
- XGCValues xgcv;
-
- TRACE(("Initializing active-icon\n"));
- XtVaGetValues(shell, XtNiconX, &iconX, XtNiconY, &iconY, (XtPointer) 0);
- xtermComputeFontInfo(xw, &(screen->iconVwin), screen->fnt_icon, 0);
-
- /* since only one client is permitted to select for Button
- * events, we have to let the window manager get 'em...
- */
- values->event_mask &= ~(ButtonPressMask | ButtonReleaseMask);
- values->border_pixel = xw->misc.icon_border_pixel;
-
- screen->iconVwin.window =
- XCreateWindow(XtDisplay(xw),
- RootWindowOfScreen(XtScreen(shell)),
- iconX, iconY,
- screen->iconVwin.fullwidth,
- screen->iconVwin.fullheight,
- xw->misc.icon_border_width,
- (int) xw->core.depth,
- InputOutput, CopyFromParent,
- *valuemask | CWBitGravity | CWBorderPixel,
- values);
- XtVaSetValues(shell,
- XtNiconWindow, screen->iconVwin.window,
- (XtPointer) 0);
- XtRegisterDrawable(XtDisplay(xw), screen->iconVwin.window, w);
-
- mask = (GCFont | GCForeground | GCBackground |
- GCGraphicsExposures | GCFunction);
-
- xgcv.font = screen->fnt_icon->fid;
- xgcv.foreground = T_COLOR(screen, TEXT_FG);
- xgcv.background = T_COLOR(screen, TEXT_BG);
- xgcv.graphics_exposures = True; /* default */
- xgcv.function = GXcopy;
-
- screen->iconVwin.normalGC =
- screen->iconVwin.normalboldGC =
- XtGetGC(shell, mask, &xgcv);
-
- xgcv.foreground = T_COLOR(screen, TEXT_BG);
- xgcv.background = T_COLOR(screen, TEXT_FG);
-
- screen->iconVwin.reverseGC =
- screen->iconVwin.reverseboldGC =
- XtGetGC(shell, mask, &xgcv);
-#if OPT_TOOLBAR
- /*
- * Toolbar is initialized before we get here. Enable the menu item
- * and set it properly.
- */
- set_sensitivity(mw,
- vtMenuEntries[vtMenu_activeicon].widget,
- True);
- update_activeicon();
-#endif
- } else {
- TRACE(("Disabled active-icon\n"));
- xw->misc.active_icon = False;
- }
-#endif /* NO_ACTIVE_ICON */
-
-#if OPT_I18N_SUPPORT && OPT_INPUT_METHOD
- VTInitI18N();
-#else
- xw->screen.xic = NULL;
-#endif
-#if OPT_NUM_LOCK
- VTInitModifiers();
-#endif
-
- set_cursor_gcs(screen);
-
- /* Reset variables used by ANSI emulation. */
-
- resetCharsets(screen);
-
- XDefineCursor(screen->display, VShellWindow, screen->pointer_cursor);
-
- set_cur_col(screen, 0);
- set_cur_row(screen, 0);
- set_max_col(screen, Width(screen) / screen->fullVwin.f_width - 1);
- set_max_row(screen, Height(screen) / screen->fullVwin.f_height - 1);
- set_tb_margins(screen, 0, screen->max_row);
-
- memset(screen->sc, 0, sizeof(screen->sc));
-
- /* Mark screen buffer as unallocated. We wait until the run loop so
- that the child process does not fork and exec with all the dynamic
- memory it will never use. If we were to do it here, the
- swap space for new process would be huge for huge savelines. */
-#if OPT_TEK4014
- if (!tekWidget) /* if not called after fork */
-#endif
- screen->visbuf = screen->allbuf = NULL;
-
- screen->do_wrap = 0;
- screen->scrolls = screen->incopy = 0;
- xtermSetCursorBox(screen);
-
- screen->savedlines = 0;
-
- if (xw->misc.scrollbar) {
- screen->fullVwin.sb_info.width = 0;
- ScrollBarOn(xw, False, True);
- }
- CursorSave(xw);
- return;
-}
-
-#if OPT_I18N_SUPPORT && OPT_INPUT_METHOD
-
-/* limit this feature to recent XFree86 since X11R6.x core dumps */
-#if defined(XtSpecificationRelease) && XtSpecificationRelease >= 6 && defined(X_HAVE_UTF8_STRING)
-#define USE_XIM_INSTANTIATE_CB
-
-static void
-xim_instantiate_cb(Display * display,
- XPointer client_data GCC_UNUSED,
- XPointer call_data GCC_UNUSED)
-{
- if (display != XtDisplay(term))
- return;
-
- VTInitI18N();
-}
-
-static void
-xim_destroy_cb(XIM im GCC_UNUSED,
- XPointer client_data GCC_UNUSED,
- XPointer call_data GCC_UNUSED)
-{
- term->screen.xic = NULL;
-
- XRegisterIMInstantiateCallback(XtDisplay(term), NULL, NULL, NULL,
- xim_instantiate_cb, NULL);
-}
-#endif /* X11R6+ */
-
-static void
-xim_real_init(void)
-{
- unsigned i, j;
- char *p, *s, *t, *ns, *end, buf[32];
- XIMStyles *xim_styles;
- XIMStyle input_style = 0;
- Bool found;
- static struct {
- char *name;
- unsigned long code;
- } known_style[] = {
- {
- "OverTheSpot", (XIMPreeditPosition | XIMStatusNothing)
- },
- {
- "OffTheSpot", (XIMPreeditArea | XIMStatusArea)
- },
- {
- "Root", (XIMPreeditNothing | XIMStatusNothing)
- },
- };
-
- term->screen.xic = NULL;
-
- if (term->misc.cannot_im) {
- return;
- }
-
- if (!term->misc.input_method || !*term->misc.input_method) {
- if ((p = XSetLocaleModifiers("")) != NULL && *p)
- term->screen.xim = XOpenIM(XtDisplay(term), NULL, NULL, NULL);
- } else {
- s = term->misc.input_method;
- i = 5 + strlen(s);
- t = (char *) MyStackAlloc(i, buf);
- if (t == NULL)
- SysError(ERROR_VINIT);
-
- for (ns = s; ns && *s;) {
- while (*s && isspace(CharOf(*s)))
- s++;
- if (!*s)
- break;
- if ((ns = end = strchr(s, ',')) == 0)
- end = s + strlen(s);
- while ((end != s) && isspace(CharOf(end[-1])))
- end--;
-
- if (end != s) {
- strcpy(t, "@im=");
- strncat(t, s, (unsigned) (end - s));
-
- if ((p = XSetLocaleModifiers(t)) != 0 && *p
- && (term->screen.xim = XOpenIM(XtDisplay(term),
- NULL,
- NULL,
- NULL)) != 0)
- break;
-
- }
- s = ns + 1;
- }
- MyStackFree(t, buf);
- }
-
- if (term->screen.xim == NULL
- && (p = XSetLocaleModifiers("@im=none")) != NULL
- && *p) {
- term->screen.xim = XOpenIM(XtDisplay(term), NULL, NULL, NULL);
- }
-
- if (!term->screen.xim) {
- fprintf(stderr, "Failed to open input method\n");
- return;
- }
- TRACE(("VTInitI18N opened input method\n"));
-
- if (XGetIMValues(term->screen.xim, XNQueryInputStyle, &xim_styles, NULL)
- || !xim_styles
- || !xim_styles->count_styles) {
- fprintf(stderr, "input method doesn't support any style\n");
- XCloseIM(term->screen.xim);
- term->misc.cannot_im = True;
- return;
- }
-
- found = False;
- for (s = term->misc.preedit_type; s && !found;) {
- while (*s && isspace(CharOf(*s)))
- s++;
- if (!*s)
- break;
- if ((ns = end = strchr(s, ',')) != 0)
- ns++;
- else
- end = s + strlen(s);
- while ((end != s) && isspace(CharOf(end[-1])))
- end--;
-
- if (end != s) { /* just in case we have a spurious comma */
- TRACE(("looking for style '%.*s'\n", end - s, s));
- for (i = 0; i < XtNumber(known_style); i++) {
- if ((int) strlen(known_style[i].name) == (end - s)
- && !strncmp(s, known_style[i].name, (unsigned) (end - s))) {
- input_style = known_style[i].code;
- for (j = 0; j < xim_styles->count_styles; j++) {
- if (input_style == xim_styles->supported_styles[j]) {
- found = True;
- break;
- }
- }
- if (found)
- break;
- }
- }
- }
-
- s = ns;
- }
- XFree(xim_styles);
-
- if (!found) {
- fprintf(stderr,
- "input method doesn't support my preedit type (%s)\n",
- term->misc.preedit_type);
- XCloseIM(term->screen.xim);
- term->misc.cannot_im = True;
- return;
- }
-
- /*
- * Check for styles we do not yet support.
- */
- TRACE(("input_style %#lx\n", input_style));
- if (input_style == (XIMPreeditArea | XIMStatusArea)) {
- fprintf(stderr,
- "This program doesn't support the 'OffTheSpot' preedit type\n");
- XCloseIM(term->screen.xim);
- term->misc.cannot_im = True;
- return;
- }
-
- /*
- * For XIMPreeditPosition (or OverTheSpot), XIM client has to
- * prepare a font.
- * The font has to be locale-dependent XFontSet, whereas
- * XTerm use Unicode font. This leads a problem that the
- * same font cannot be used for XIM preedit.
- */
- if (input_style != (XIMPreeditNothing | XIMStatusNothing)) {
- char **missing_charset_list;
- int missing_charset_count;
- char *def_string;
- XVaNestedList p_list;
- XPoint spot =
- {0, 0};
- XFontStruct **fonts;
- char **font_name_list;
-
- term->screen.fs = XCreateFontSet(XtDisplay(term),
- term->misc.f_x,
- &missing_charset_list,
- &missing_charset_count,
- &def_string);
- if (term->screen.fs == NULL) {
- fprintf(stderr, "Preparation of font set "
- "\"%s\" for XIM failed.\n", term->misc.f_x);
- term->screen.fs = XCreateFontSet(XtDisplay(term),
- DEFXIMFONT,
- &missing_charset_list,
- &missing_charset_count,
- &def_string);
- }
- if (term->screen.fs == NULL) {
- fprintf(stderr, "Preparation of default font set "
- "\"%s\" for XIM failed.\n", DEFXIMFONT);
- XCloseIM(term->screen.xim);
- term->misc.cannot_im = True;
- return;
- }
- (void) XExtentsOfFontSet(term->screen.fs);
- j = XFontsOfFontSet(term->screen.fs, &fonts, &font_name_list);
- for (i = 0, term->screen.fs_ascent = 0; i < j; i++) {
- if (term->screen.fs_ascent < (*fonts)->ascent)
- term->screen.fs_ascent = (*fonts)->ascent;
- }
- p_list = XVaCreateNestedList(0,
- XNSpotLocation, &spot,
- XNFontSet, term->screen.fs,
- NULL);
- term->screen.xic = XCreateIC(term->screen.xim,
- XNInputStyle, input_style,
- XNClientWindow, XtWindow(term),
- XNFocusWindow, XtWindow(term),
- XNPreeditAttributes, p_list,
- NULL);
- } else {
- term->screen.xic = XCreateIC(term->screen.xim, XNInputStyle, input_style,
- XNClientWindow, XtWindow(term),
- XNFocusWindow, XtWindow(term),
- NULL);
- }
-
- if (!term->screen.xic) {
- fprintf(stderr, "Failed to create input context\n");
- XCloseIM(term->screen.xim);
- }
-#if defined(USE_XIM_INSTANTIATE_CB)
- else {
- XIMCallback destroy_cb;
-
- destroy_cb.callback = xim_destroy_cb;
- destroy_cb.client_data = NULL;
- if (XSetIMValues(term->screen.xim, XNDestroyCallback, &destroy_cb, NULL))
- fprintf(stderr, "Could not set destroy callback to IM\n");
- }
-#endif
-
- return;
-}
-
-static void
-VTInitI18N(void)
-{
- if (term->misc.open_im) {
- xim_real_init();
-
-#if defined(USE_XIM_INSTANTIATE_CB)
- if (term->screen.xic == NULL && !term->misc.cannot_im) {
- sleep(3);
- XRegisterIMInstantiateCallback(XtDisplay(term), NULL, NULL, NULL,
- xim_instantiate_cb, NULL);
- }
-#endif
- }
-}
-#endif /* OPT_I18N_SUPPORT && OPT_INPUT_METHOD */
-
-static Boolean
-VTSetValues(Widget cur,
- Widget request GCC_UNUSED,
- Widget wnew,
- ArgList args GCC_UNUSED,
- Cardinal *num_args GCC_UNUSED)
-{
- XtermWidget curvt = (XtermWidget) cur;
- XtermWidget newvt = (XtermWidget) wnew;
- Bool refresh_needed = False;
- Bool fonts_redone = False;
-
- if ((T_COLOR(&(curvt->screen), TEXT_BG) !=
- T_COLOR(&(newvt->screen), TEXT_BG)) ||
- (T_COLOR(&(curvt->screen), TEXT_FG) !=
- T_COLOR(&(newvt->screen), TEXT_FG)) ||
- (curvt->screen.MenuFontName(curvt->screen.menu_font_number) !=
- newvt->screen.MenuFontName(newvt->screen.menu_font_number)) ||
- (curvt->misc.default_font.f_n != newvt->misc.default_font.f_n)) {
- if (curvt->misc.default_font.f_n != newvt->misc.default_font.f_n)
- newvt->screen.MenuFontName(fontMenu_fontdefault) = newvt->misc.default_font.f_n;
- if (xtermLoadFont(newvt,
- xtermFontName(newvt->screen.MenuFontName(curvt->screen.menu_font_number)),
- True, newvt->screen.menu_font_number)) {
- /* resizing does the redisplay, so don't ask for it here */
- refresh_needed = True;
- fonts_redone = True;
- } else if (curvt->misc.default_font.f_n != newvt->misc.default_font.f_n)
- newvt->screen.MenuFontName(fontMenu_fontdefault) = curvt->misc.default_font.f_n;
- }
- if (!fonts_redone
- && (T_COLOR(&(curvt->screen), TEXT_CURSOR) !=
- T_COLOR(&(newvt->screen), TEXT_CURSOR))) {
- set_cursor_gcs(&newvt->screen);
- refresh_needed = True;
- }
- if (curvt->misc.re_verse != newvt->misc.re_verse) {
- newvt->flags ^= REVERSE_VIDEO;
- ReverseVideo(newvt);
- newvt->misc.re_verse = !newvt->misc.re_verse; /* ReverseVideo toggles */
- refresh_needed = True;
- }
- if ((T_COLOR(&(curvt->screen), MOUSE_FG) !=
- T_COLOR(&(newvt->screen), MOUSE_FG)) ||
- (T_COLOR(&(curvt->screen), MOUSE_BG) !=
- T_COLOR(&(newvt->screen), MOUSE_BG))) {
- recolor_cursor(newvt->screen.pointer_cursor,
- T_COLOR(&(newvt->screen), MOUSE_FG),
- T_COLOR(&(newvt->screen), MOUSE_BG));
- refresh_needed = True;
- }
- if (curvt->misc.scrollbar != newvt->misc.scrollbar) {
- ToggleScrollBar(newvt);
- }
-
- return refresh_needed;
-}
-
-#define setGC(value) set_at = __LINE__, currentGC = value
-
-#define OutsideSelection(screen,row,col) \
- ((row) > (screen)->endHRow || \
- ((row) == (screen)->endHRow && \
- (col) >= (screen)->endHCol) || \
- (row) < (screen)->startHRow || \
- ((row) == (screen)->startHRow && \
- (col) < (screen)->startHCol))
-
-/*
- * Shows cursor at new cursor position in screen.
- */
-void
-ShowCursor(void)
-{
- TScreen *screen = &term->screen;
- int x, y;
- Char clo;
- unsigned flags;
- unsigned fg_bg = 0;
- GC currentGC;
- int set_at;
- Bool in_selection;
- Bool reversed;
- Pixel fg_pix;
- Pixel bg_pix;
- Pixel tmp;
-#if OPT_HIGHLIGHT_COLOR
- Pixel hi_pix = T_COLOR(screen, HIGHLIGHT_BG);
-#endif
-#if OPT_WIDE_CHARS
- Char chi = 0;
- Char c1h = 0;
- Char c1l = 0;
- Char c2h = 0;
- Char c2l = 0;
- int base;
-#endif
- int cursor_col;
-
- if (screen->cursor_state == BLINKED_OFF)
- return;
-
- if (eventMode != NORMAL)
- return;
-
- if (screen->cur_row - screen->topline > screen->max_row)
- return;
-
- screen->cursor_row = screen->cur_row;
- cursor_col = screen->cursor_col = screen->cur_col;
- screen->cursor_moved = False;
-
-#ifndef NO_ACTIVE_ICON
- if (IsIcon(screen)) {
- screen->cursor_state = ON;
- return;
- }
-#endif /* NO_ACTIVE_ICON */
-
-#if OPT_WIDE_CHARS
- base =
-#endif
- clo = SCRN_BUF_CHARS(screen, screen->cursor_row)[cursor_col];
-
- if_OPT_WIDE_CHARS(screen, {
- int my_col;
- chi = SCRN_BUF_WIDEC(screen, screen->cursor_row)[cursor_col];
- if (clo == HIDDEN_LO && chi == HIDDEN_HI && cursor_col > 0) {
- /* if cursor points to non-initial part of wide character,
- * back it up
- */
- --cursor_col;
- clo = SCRN_BUF_CHARS(screen, screen->cursor_row)[cursor_col];
- chi = SCRN_BUF_WIDEC(screen, screen->cursor_row)[cursor_col];
- }
- my_col = cursor_col;
- base = (chi << 8) | clo;
- if (iswide(base))
- my_col += 1;
- c1l = SCRN_BUF_COM1L(screen, screen->cursor_row)[my_col];
- c1h = SCRN_BUF_COM1H(screen, screen->cursor_row)[my_col];
- c2l = SCRN_BUF_COM2L(screen, screen->cursor_row)[my_col];
- c2h = SCRN_BUF_COM2H(screen, screen->cursor_row)[my_col];
- });
-
- flags = SCRN_BUF_ATTRS(screen, screen->cursor_row)[cursor_col];
-
- if (clo == 0
-#if OPT_WIDE_CHARS
- && chi == 0
-#endif
- ) {
- clo = ' ';
- }
-
- /*
- * If the cursor happens to be on blanks, and the foreground color is set
- * but not the background, do not treat it as a colored cell.
- */
-#if OPT_ISO_COLORS
- if ((flags & TERM_COLOR_FLAGS(term)) == BG_COLOR
-#if OPT_WIDE_CHARS
- && chi == 0
-#endif
- && clo == ' ') {
- flags &= ~TERM_COLOR_FLAGS(term);
- }
-#endif
-
- /*
- * Compare the current cell to the last set of colors used for the
- * cursor and update the GC's if needed.
- */
- if_OPT_EXT_COLORS(screen, {
- fg_bg = (SCRN_BUF_FGRND(screen, screen->cursor_row)[cursor_col] << 8)
- | (SCRN_BUF_BGRND(screen, screen->cursor_row)[cursor_col]);
- });
- if_OPT_ISO_TRADITIONAL_COLORS(screen, {
- fg_bg = SCRN_BUF_COLOR(screen, screen->cursor_row)[cursor_col];
- });
- fg_pix = getXtermForeground(flags, extract_fg(fg_bg, flags));
- bg_pix = getXtermBackground(flags, extract_bg(fg_bg, flags));
-
- if (OutsideSelection(screen, screen->cur_row, screen->cur_col))
- in_selection = False;
- else
- in_selection = True;
-
- reversed = ReverseOrHilite(screen, flags, in_selection);
-
- /* This is like updatedXtermGC(), except that we have to worry about
- * whether the window has focus, since in that case we want just an
- * outline for the cursor.
- */
- if (screen->select || screen->always_highlight) {
- if (reversed) { /* text is reverse video */
- if (screen->cursorGC) {
- setGC(screen->cursorGC);
- } else {
- if (flags & BOLDATTR(screen)) {
- setGC(NormalBoldGC(screen));
- } else {
- setGC(NormalGC(screen));
- }
- }
-#if OPT_HIGHLIGHT_COLOR
- if (hi_pix != T_COLOR(screen, TEXT_FG)
- && hi_pix != fg_pix
- && hi_pix != bg_pix
- && hi_pix != term->dft_foreground) {
- bg_pix = fg_pix;
- fg_pix = hi_pix;
- }
-#endif
- EXCHANGE(fg_pix, bg_pix, tmp);
- } else { /* normal video */
- if (screen->reversecursorGC) {
- setGC(screen->reversecursorGC);
- } else {
- if (flags & BOLDATTR(screen)) {
- setGC(ReverseBoldGC(screen));
- } else {
- setGC(ReverseGC(screen));
- }
- }
- }
- if (T_COLOR(screen, TEXT_CURSOR) == term->dft_foreground) {
- XSetBackground(screen->display, currentGC, fg_pix);
- }
- XSetForeground(screen->display, currentGC, bg_pix);
- } else { /* not selected */
- if (reversed) { /* text is reverse video */
-#if OPT_HIGHLIGHT_COLOR
- if (hi_pix != T_COLOR(screen, TEXT_FG)
- && hi_pix != fg_pix
- && hi_pix != bg_pix
- && hi_pix != term->dft_foreground) {
- bg_pix = fg_pix;
- fg_pix = hi_pix;
- }
-#endif
- setGC(ReverseGC(screen));
- XSetForeground(screen->display, currentGC, bg_pix);
- XSetBackground(screen->display, currentGC, fg_pix);
- } else { /* normal video */
- setGC(NormalGC(screen));
- XSetForeground(screen->display, currentGC, fg_pix);
- XSetBackground(screen->display, currentGC, bg_pix);
- }
- }
-
- if (screen->cursor_busy == 0
- && (screen->cursor_state != ON || screen->cursor_GC != set_at)) {
-
- screen->cursor_GC = set_at;
- TRACE(("ShowCursor calling drawXtermText cur(%d,%d)\n",
- screen->cur_row, screen->cur_col));
-
- drawXtermText(screen, flags & DRAWX_MASK, currentGC,
- x = CurCursorX(screen, screen->cur_row, cursor_col),
- y = CursorY(screen, screen->cur_row),
- curXtermChrSet(screen->cur_row),
- PAIRED_CHARS(&clo, &chi), 1, 0);
-
-#if OPT_WIDE_CHARS
- if (c1l || c1h) {
- drawXtermText(screen, (flags & DRAWX_MASK) | NOBACKGROUND,
- currentGC, x, y,
- curXtermChrSet(screen->cur_row),
- PAIRED_CHARS(&c1l, &c1h), 1, iswide(base));
-
- if (c2l || c2h)
- drawXtermText(screen, (flags & DRAWX_MASK) | NOBACKGROUND,
- currentGC, x, y,
- curXtermChrSet(screen->cur_row),
- PAIRED_CHARS(&c2l, &c2h), 1, iswide(base));
- }
-#endif
-
- if (!screen->select && !screen->always_highlight) {
- screen->box->x = x;
- screen->box->y = y;
- XDrawLines(screen->display, VWindow(screen),
- screen->cursoroutlineGC ? screen->cursoroutlineGC
- : currentGC,
- screen->box, NBOX, CoordModePrevious);
- }
- }
- screen->cursor_state = ON;
-}
-
-/*
- * hide cursor at previous cursor position in screen.
- */
-void
-HideCursor(void)
-{
- TScreen *screen = &term->screen;
- GC currentGC;
- unsigned flags;
- unsigned fg_bg = 0;
- int x, y;
- Char clo;
- Bool in_selection;
-#if OPT_WIDE_CHARS
- Char chi = 0;
- Char c1h = 0;
- Char c1l = 0;
- Char c2h = 0;
- Char c2l = 0;
- int base;
-#endif
- int cursor_col;
-
- if (screen->cursor_state == OFF) /* FIXME */
- return;
- if (screen->cursor_row - screen->topline > screen->max_row)
- return;
-
- cursor_col = screen->cursor_col;
-
-#ifndef NO_ACTIVE_ICON
- if (IsIcon(screen)) {
- screen->cursor_state = OFF;
- return;
- }
-#endif /* NO_ACTIVE_ICON */
-
-#if OPT_WIDE_CHARS
- base =
-#endif
- clo = SCRN_BUF_CHARS(screen, screen->cursor_row)[cursor_col];
- flags = SCRN_BUF_ATTRS(screen, screen->cursor_row)[cursor_col];
-
- if_OPT_WIDE_CHARS(screen, {
- int my_col;
- chi = SCRN_BUF_WIDEC(screen, screen->cursor_row)[cursor_col];
- if (clo == HIDDEN_LO && chi == HIDDEN_HI) {
- /* if cursor points to non-initial part of wide character,
- * back it up
- */
- --cursor_col;
- clo = SCRN_BUF_CHARS(screen, screen->cursor_row)[cursor_col];
- chi = SCRN_BUF_WIDEC(screen, screen->cursor_row)[cursor_col];
- }
- my_col = cursor_col;
- base = (chi << 8) | clo;
- if (iswide(base))
- my_col += 1;
- c1l = SCRN_BUF_COM1L(screen, screen->cursor_row)[my_col];
- c1h = SCRN_BUF_COM1H(screen, screen->cursor_row)[my_col];
- c2l = SCRN_BUF_COM2L(screen, screen->cursor_row)[my_col];
- c2h = SCRN_BUF_COM2H(screen, screen->cursor_row)[my_col];
- });
-
- if_OPT_EXT_COLORS(screen, {
- fg_bg = (SCRN_BUF_FGRND(screen, screen->cursor_row)[cursor_col] << 8)
- | (SCRN_BUF_BGRND(screen, screen->cursor_row)[cursor_col]);
- });
- if_OPT_ISO_TRADITIONAL_COLORS(screen, {
- fg_bg = SCRN_BUF_COLOR(screen, screen->cursor_row)[cursor_col];
- });
-
- if (OutsideSelection(screen, screen->cursor_row, screen->cursor_col))
- in_selection = False;
- else
- in_selection = True;
-
- currentGC = updatedXtermGC(screen, flags, fg_bg, in_selection);
-
- if (clo == 0
-#if OPT_WIDE_CHARS
- && chi == 0
-#endif
- ) {
- clo = ' ';
- }
-
- TRACE(("HideCursor calling drawXtermText cur(%d,%d)\n",
- screen->cursor_row, screen->cursor_col));
- drawXtermText(screen, flags & DRAWX_MASK, currentGC,
- x = CurCursorX(screen, screen->cursor_row, cursor_col),
- y = CursorY(screen, screen->cursor_row),
- curXtermChrSet(screen->cursor_row),
- PAIRED_CHARS(&clo, &chi), 1, 0);
-
-#if OPT_WIDE_CHARS
- if (c1l || c1h) {
- drawXtermText(screen, (flags & DRAWX_MASK) | NOBACKGROUND,
- currentGC, x, y,
- curXtermChrSet(screen->cur_row),
- PAIRED_CHARS(&c1l, &c1h), 1, iswide(base));
-
- if (c2l || c2h)
- drawXtermText(screen, (flags & DRAWX_MASK) | NOBACKGROUND,
- currentGC, x, y,
- curXtermChrSet(screen->cur_row),
- PAIRED_CHARS(&c2l, &c2h), 1, iswide(base));
- }
-#endif
- screen->cursor_state = OFF;
- resetXtermGC(screen, flags, in_selection);
-}
-
-#if OPT_BLINK_CURS || OPT_BLINK_TEXT
-static void
-StartBlinking(TScreen * screen)
-{
- if (screen->blink_timer == 0) {
- unsigned long interval = (screen->cursor_state == ON ?
- screen->blink_on : screen->blink_off);
- if (interval == 0) /* wow! */
- interval = 1; /* let's humor him anyway */
- screen->blink_timer = XtAppAddTimeOut(app_con,
- interval,
- HandleBlinking,
- screen);
- }
-}
-
-static void
-StopBlinking(TScreen * screen)
-{
- if (screen->blink_timer)
- XtRemoveTimeOut(screen->blink_timer);
- screen->blink_timer = 0;
-}
-
-#if OPT_BLINK_TEXT
-static Bool
-ScrnHasBlinking(TScreen * screen, int row)
-{
- Char *attrs = SCRN_BUF_ATTRS(screen, row);
- int col;
- Bool result = False;
-
- for (col = 0; col < MaxCols(screen); ++col) {
- if (attrs[col] & BLINK) {
- result = True;
- break;
- }
- }
- return result;
-}
-#endif
-
-/*
- * Blink the cursor by alternately showing/hiding cursor. We leave the timer
- * running all the time (even though that's a little inefficient) to make the
- * logic simple.
- */
-static void
-HandleBlinking(XtPointer closure, XtIntervalId * id GCC_UNUSED)
-{
- TScreen *screen = (TScreen *) closure;
- Bool resume = False;
-
- screen->blink_timer = 0;
- screen->blink_state = !screen->blink_state;
-
-#if OPT_BLINK_CURS
- if (DoStartBlinking(screen)) {
- if (screen->cursor_state == ON) {
- if (screen->select || screen->always_highlight) {
- HideCursor();
- if (screen->cursor_state == OFF)
- screen->cursor_state = BLINKED_OFF;
- }
- } else if (screen->cursor_state == BLINKED_OFF) {
- screen->cursor_state = OFF;
- ShowCursor();
- if (screen->cursor_state == OFF)
- screen->cursor_state = BLINKED_OFF;
- }
- resume = True;
- }
-#endif
-
-#if OPT_BLINK_TEXT
- /*
- * Inspect the line on the current screen to see if any have the BLINK flag
- * associated with them. Prune off any that have had the corresponding
- * cells reset. If any are left, repaint those lines with ScrnRefresh().
- */
- if (!(screen->blink_as_bold)) {
- int row;
- int first_row = screen->max_row;
- int last_row = -1;
-
- for (row = screen->max_row; row >= 0; row--) {
- if (ScrnTstBlinked(screen, row)) {
- if (ScrnHasBlinking(screen, row)) {
- resume = True;
- if (row > last_row)
- last_row = row;
- if (row < first_row)
- first_row = row;
- } else {
- ScrnClrBlinked(screen, row);
- }
- }
- }
- /*
- * FIXME: this could be a little more efficient, e.g,. by limiting the
- * columns which are updated.
- */
- if (first_row <= last_row) {
- ScrnRefresh(screen,
- first_row,
- 0,
- last_row + 1 - first_row,
- MaxCols(screen),
- True);
- }
- }
-#endif
-
- /*
- * If either the cursor or text is blinking, restart the timer.
- */
- if (resume)
- StartBlinking(screen);
-}
-#endif /* OPT_BLINK_CURS || OPT_BLINK_TEXT */
-
-/*
- * Implement soft or hard (full) reset of the VTxxx emulation. There are a
- * couple of differences from real DEC VTxxx terminals (to avoid breaking
- * applications which have come to rely on xterm doing this):
- *
- * + autowrap mode should be reset (instead it's reset to the resource
- * default).
- * + the popup menu offers a choice of resetting the savedLines, or not.
- * (but the control sequence does this anyway).
- */
-void
-VTReset(Bool full, Bool saved)
-{
- TScreen *screen = &term->screen;
-
- if (!XtIsRealized((Widget) term)) {
- Bell(XkbBI_MinorError, 0);
- return;
- }
-
- if (saved) {
- screen->savedlines = 0;
- ScrollBarDrawThumb(screen->scrollWidget);
- }
-
- /* make cursor visible */
- screen->cursor_set = ON;
-
- /* reset scrolling region */
- set_tb_margins(screen, 0, screen->max_row);
-
- bitclr(&term->flags, ORIGIN);
-
- if_OPT_ISO_COLORS(screen, {
- reset_SGR_Colors();
- });
-
- /* Reset character-sets to initial state */
- resetCharsets(screen);
-
- /* Reset DECSCA */
- bitclr(&term->flags, PROTECTED);
- screen->protected_mode = OFF_PROTECT;
-
- if (full) { /* RIS */
- if (screen->bellOnReset)
- Bell(XkbBI_TerminalBell, 0);
-
- /* reset the mouse mode */
- screen->send_mouse_pos = MOUSE_OFF;
- waitingForTrackInfo = False;
- eventMode = NORMAL;
-
- TabReset(term->tabs);
- term->keyboard.flags = MODE_SRM;
-#if OPT_INITIAL_ERASE
- if (term->keyboard.reset_DECBKM == 1)
- term->keyboard.flags |= MODE_DECBKM;
- else if (term->keyboard.reset_DECBKM == 2)
-#endif
- if (term->screen.backarrow_key)
- term->keyboard.flags |= MODE_DECBKM;
- TRACE(("full reset DECBKM %s\n",
- BtoS(term->keyboard.flags & MODE_DECBKM)));
- update_appcursor();
- update_appkeypad();
- update_decbkm();
- show_8bit_control(False);
- reset_decudk();
-
- FromAlternate(screen);
- ClearScreen(screen);
- screen->cursor_state = OFF;
- if (term->flags & REVERSE_VIDEO)
- ReverseVideo(term);
-
- term->flags = term->initflags;
- update_reversevideo();
- update_autowrap();
- update_reversewrap();
- update_autolinefeed();
-
- screen->jumpscroll = !(term->flags & SMOOTHSCROLL);
- update_jumpscroll();
-
- if (screen->c132 && (term->flags & IN132COLUMNS)) {
- Dimension reqWidth = (80 * FontWidth(screen)
- + 2 * screen->border + ScrollbarWidth(screen));
- Dimension reqHeight = (FontHeight(screen)
- * MaxRows(screen) + 2 * screen->border);
- Dimension replyWidth;
- Dimension replyHeight;
-
- TRACE(("Making resize-request to restore 80-columns %dx%d\n",
- reqHeight, reqWidth));
- XtMakeResizeRequest((Widget) term,
- reqWidth,
- reqHeight,
- &replyWidth, &replyHeight);
- TRACE(("...result %dx%d\n", replyHeight, replyWidth));
- repairSizeHints();
- XSync(screen->display, False); /* synchronize */
- if (XtAppPending(app_con))
- xevents();
- }
-
- CursorSet(screen, 0, 0, term->flags);
- CursorSave(term);
- } else { /* DECSTR */
- /*
- * There's a tiny difference, to accommodate usage of xterm.
- * We reset autowrap to the resource values rather than turning
- * it off.
- */
- term->keyboard.flags &= ~(MODE_DECCKM | MODE_KAM | MODE_DECKPAM);
- bitcpy(&term->flags, term->initflags, WRAPAROUND | REVERSEWRAP);
- bitclr(&term->flags, INSERT | INVERSE | BOLD | BLINK | UNDERLINE | INVISIBLE);
- if_OPT_ISO_COLORS(screen, {
- reset_SGR_Colors();
- });
- update_appcursor();
- update_autowrap();
- update_reversewrap();
-
- CursorSave(term);
- screen->sc[screen->alternate != False].row =
- screen->sc[screen->alternate != False].col = 0;
- }
- longjmp(vtjmpbuf, 1); /* force ground state in parser */
-}
-
-/*
- * set_character_class - takes a string of the form
- *
- * low[-high]:val[,low[-high]:val[...]]
- *
- * and sets the indicated ranges to the indicated values.
- */
-static int
-set_character_class(char *s)
-{
- int i; /* iterator, index into s */
- int len; /* length of s */
- int acc; /* accumulator */
- int low, high; /* bounds of range [0..127] */
- int base; /* 8, 10, 16 (octal, decimal, hex) */
- int numbers; /* count of numbers per range */
- int digits; /* count of digits in a number */
- static char *errfmt = "%s: %s in range string \"%s\" (position %d)\n";
-
- if (!s || !s[0])
- return -1;
-
- base = 10; /* in case we ever add octal, hex */
- low = high = -1; /* out of range */
-
- for (i = 0, len = strlen(s), acc = 0, numbers = digits = 0;
- i < len; i++) {
- Char c = s[i];
-
- if (isspace(c)) {
- continue;
- } else if (isdigit(c)) {
- acc = acc * base + (c - '0');
- digits++;
- continue;
- } else if (c == '-') {
- low = acc;
- acc = 0;
- if (digits == 0) {
- fprintf(stderr, errfmt, ProgramName, "missing number", s, i);
- return (-1);
- }
- digits = 0;
- numbers++;
- continue;
- } else if (c == ':') {
- if (numbers == 0)
- low = acc;
- else if (numbers == 1)
- high = acc;
- else {
- fprintf(stderr, errfmt, ProgramName, "too many numbers",
- s, i);
- return (-1);
- }
- digits = 0;
- numbers++;
- acc = 0;
- continue;
- } else if (c == ',') {
- /*
- * now, process it
- */
-
- if (high < 0) {
- high = low;
- numbers++;
- }
- if (numbers != 2) {
- fprintf(stderr, errfmt, ProgramName, "bad value number",
- s, i);
- } else if (SetCharacterClassRange(low, high, acc) != 0) {
- fprintf(stderr, errfmt, ProgramName, "bad range", s, i);
- }
-
- low = high = -1;
- acc = 0;
- digits = 0;
- numbers = 0;
- continue;
- } else {
- fprintf(stderr, errfmt, ProgramName, "bad character", s, i);
- return (-1);
- } /* end if else if ... else */
-
- }
-
- if (low < 0 && high < 0)
- return (0);
-
- /*
- * now, process it
- */
-
- if (high < 0)
- high = low;
- if (numbers < 1 || numbers > 2) {
- fprintf(stderr, errfmt, ProgramName, "bad value number", s, i);
- } else if (SetCharacterClassRange(low, high, acc) != 0) {
- fprintf(stderr, errfmt, ProgramName, "bad range", s, i);
- }
-
- return (0);
-}
-
-/* ARGSUSED */
-static void
-HandleKeymapChange(Widget w,
- XEvent * event GCC_UNUSED,
- String * params,
- Cardinal *param_count)
-{
- static XtTranslations keymap, original;
- static XtResource key_resources[] =
- {
- {XtNtranslations, XtCTranslations, XtRTranslationTable,
- sizeof(XtTranslations), 0, XtRTranslationTable, (XtPointer) NULL}
- };
- char mapName[1000];
- char mapClass[1000];
- char *pmapName;
- char *pmapClass;
- size_t len;
-
- if (*param_count != 1)
- return;
-
- if (original == NULL)
- original = w->core.tm.translations;
-
- if (strcmp(params[0], "None") == 0) {
- XtOverrideTranslations(w, original);
- return;
- }
-
- len = strlen(params[0]) + 7;
-
- pmapName = (char *) MyStackAlloc(len, mapName);
- pmapClass = (char *) MyStackAlloc(len, mapClass);
- if (pmapName == NULL
- || pmapClass == NULL)
- SysError(ERROR_KMMALLOC1);
-
- (void) sprintf(pmapName, "%sKeymap", params[0]);
- (void) strcpy(pmapClass, pmapName);
- if (islower(CharOf(pmapClass[0])))
- pmapClass[0] = toupper(CharOf(pmapClass[0]));
- XtGetSubresources(w, (XtPointer) &keymap, pmapName, pmapClass,
- key_resources, (Cardinal) 1, NULL, (Cardinal) 0);
- if (keymap != NULL)
- XtOverrideTranslations(w, keymap);
-
- MyStackFree(pmapName, mapName);
- MyStackFree(pmapClass, mapClass);
-}
-
-/* ARGSUSED */
-static void
-HandleBell(Widget w GCC_UNUSED,
- XEvent * event GCC_UNUSED,
- String * params, /* [0] = volume */
- Cardinal *param_count) /* 0 or 1 */
-{
- int percent = (*param_count) ? atoi(params[0]) : 0;
-
- Bell(XkbBI_TerminalBell, percent);
-}
-
-/* ARGSUSED */
-static void
-HandleVisualBell(Widget w GCC_UNUSED,
- XEvent * event GCC_UNUSED,
- String * params GCC_UNUSED,
- Cardinal *param_count GCC_UNUSED)
-{
- VisualBell();
-}
-
-/* ARGSUSED */
-static void
-HandleIgnore(Widget w,
- XEvent * event,
- String * params GCC_UNUSED,
- Cardinal *param_count GCC_UNUSED)
-{
- /* do nothing, but check for funny escape sequences */
- (void) SendMousePosition(w, event);
-}
-
-/* ARGSUSED */
-static void
-DoSetSelectedFont(Widget w GCC_UNUSED,
- XtPointer client_data GCC_UNUSED,
- Atom * selection GCC_UNUSED,
- Atom * type,
- XtPointer value,
- unsigned long *length GCC_UNUSED,
- int *format)
-{
- char *val = (char *) value;
- int len;
- if (*type != XA_STRING || *format != 8) {
- Bell(XkbBI_MinorError, 0);
- return;
- }
- len = strlen(val);
- if (len > 0) {
- if (val[len - 1] == '\n')
- val[len - 1] = '\0';
- /* Do some sanity checking to avoid sending a long selection
- back to the server in an OpenFont that is unlikely to succeed.
- XLFD allows up to 255 characters and no control characters;
- we are a little more liberal here. */
- if (len > 1000 || strchr(val, '\n'))
- return;
- if (!xtermLoadFont(term,
- xtermFontName(val),
- True,
- fontMenu_fontsel))
- Bell(XkbBI_MinorError, 0);
- }
-}
-
-void
-FindFontSelection(char *atom_name, Bool justprobe)
-{
- static AtomPtr *atoms;
- static int atomCount = 0;
- AtomPtr *pAtom;
- int a;
- Atom target;
-
- if (!atom_name)
- atom_name = "PRIMARY";
-
- for (pAtom = atoms, a = atomCount; a; a--, pAtom++) {
- if (strcmp(atom_name, XmuNameOfAtom(*pAtom)) == 0)
- break;
- }
- if (!a) {
- atoms = (AtomPtr *) XtRealloc((char *) atoms,
- sizeof(AtomPtr) * (atomCount + 1));
- *(pAtom = &atoms[atomCount++]) = XmuMakeAtom(atom_name);
- }
-
- target = XmuInternAtom(XtDisplay(term), *pAtom);
- if (justprobe) {
- term->screen.MenuFontName(fontMenu_fontsel) =
- XGetSelectionOwner(XtDisplay(term), target) ? _Font_Selected_ : 0;
- } else {
- XtGetSelectionValue((Widget) term, target, XA_STRING,
- DoSetSelectedFont, NULL,
- XtLastTimestampProcessed(XtDisplay(term)));
- }
- return;
-}
-
-void
-set_cursor_gcs(TScreen * screen)
-{
- XGCValues xgcv;
- XtGCMask mask;
- Pixel cc = T_COLOR(screen, TEXT_CURSOR);
- Pixel fg = T_COLOR(screen, TEXT_FG);
- Pixel bg = T_COLOR(screen, TEXT_BG);
- GC new_cursorGC = NULL;
- GC new_cursorFillGC = NULL;
- GC new_reversecursorGC = NULL;
- GC new_cursoroutlineGC = NULL;
-
- /*
- * Let's see, there are three things that have "color":
- *
- * background
- * text
- * cursorblock
- *
- * And, there are four situation when drawing a cursor, if we decide
- * that we like have a solid block of cursor color with the letter
- * that it is highlighting shown in the background color to make it
- * stand out:
- *
- * selected window, normal video - background on cursor
- * selected window, reverse video - foreground on cursor
- * unselected window, normal video - foreground on background
- * unselected window, reverse video - background on foreground
- *
- * Since the last two are really just normalGC and reverseGC, we only
- * need two new GC's. Under monochrome, we get the same effect as
- * above by setting cursor color to foreground.
- */
-
-#if OPT_ISO_COLORS
- /*
- * If we're using ANSI colors, the functions manipulating the SGR code will
- * use the same GC's. To avoid having the cursor change color, we use the
- * Xlib calls rather than the Xt calls.
- *
- * Use the colorMode value to determine which we'll do (the VWindow may
- * not be set before the widget's realized, so it's tested separately).
- */
- if (screen->colorMode) {
- if (VWindow(screen) != 0 && (cc != bg) && (cc != fg)) {
- /* we might have a colored foreground/background later */
- xgcv.font = screen->fnt_norm->fid;
- mask = (GCForeground | GCBackground | GCFont);
- xgcv.foreground = fg;
- xgcv.background = cc;
- new_cursorGC = XCreateGC(screen->display, VWindow(screen), mask, &xgcv);
-
- xgcv.foreground = cc;
- xgcv.background = fg;
- new_cursorFillGC =
- XCreateGC(screen->display, VWindow(screen), mask, &xgcv);
-
- if (screen->always_highlight) {
- new_reversecursorGC = (GC) 0;
- new_cursoroutlineGC = (GC) 0;
- } else {
- xgcv.foreground = bg;
- xgcv.background = cc;
- new_reversecursorGC =
- XCreateGC(screen->display, VWindow(screen), mask, &xgcv);
- xgcv.foreground = cc;
- xgcv.background = bg;
- new_cursoroutlineGC =
- XCreateGC(screen->display, VWindow(screen), mask, &xgcv);
- }
- }
- } else
-#endif
- if (cc != fg && cc != bg) {
- /* we have a colored cursor */
- xgcv.font = screen->fnt_norm->fid;
- mask = (GCForeground | GCBackground | GCFont);
-
- xgcv.foreground = fg;
- xgcv.background = cc;
- new_cursorGC = XtGetGC((Widget) term, mask, &xgcv);
-
- xgcv.foreground = cc;
- xgcv.background = fg;
- new_cursorFillGC = XtGetGC((Widget) term, mask, &xgcv);
-
- if (screen->always_highlight) {
- new_reversecursorGC = (GC) 0;
- new_cursoroutlineGC = (GC) 0;
- } else {
- xgcv.foreground = bg;
- xgcv.background = cc;
- new_reversecursorGC = XtGetGC((Widget) term, mask, &xgcv);
- xgcv.foreground = cc;
- xgcv.background = bg;
- new_cursoroutlineGC = XtGetGC((Widget) term, mask, &xgcv);
- }
- }
-#if OPT_ISO_COLORS
- if (screen->colorMode) {
- if (screen->cursorGC)
- XFreeGC(screen->display, screen->cursorGC);
- if (screen->fillCursorGC)
- XFreeGC(screen->display, screen->fillCursorGC);
- if (screen->reversecursorGC)
- XFreeGC(screen->display, screen->reversecursorGC);
- if (screen->cursoroutlineGC)
- XFreeGC(screen->display, screen->cursoroutlineGC);
- } else
-#endif
- {
- if (screen->cursorGC)
- XtReleaseGC((Widget) term, screen->cursorGC);
- if (screen->fillCursorGC)
- XtReleaseGC((Widget) term, screen->fillCursorGC);
- if (screen->reversecursorGC)
- XtReleaseGC((Widget) term, screen->reversecursorGC);
- if (screen->cursoroutlineGC)
- XtReleaseGC((Widget) term, screen->cursoroutlineGC);
- }
-
- screen->cursorGC = new_cursorGC;
- screen->fillCursorGC = new_cursorFillGC;
- screen->reversecursorGC = new_reversecursorGC;
- screen->cursoroutlineGC = new_cursoroutlineGC;
-}
diff --git a/nx-X11/programs/xterm/charsets.c b/nx-X11/programs/xterm/charsets.c
deleted file mode 100644
index 528175aeb..000000000
--- a/nx-X11/programs/xterm/charsets.c
+++ /dev/null
@@ -1,461 +0,0 @@
-/* $XTermId: charsets.c,v 1.32 2005/01/14 01:50:02 tom Exp $ */
-
-/*
- * $XFree86: xc/programs/xterm/charsets.c,v 1.12 2005/01/14 01:50:02 dickey Exp $
- */
-
-/************************************************************
-
-Copyright 1998-2003,2005 by Thomas E. Dickey
-
- All Rights Reserved
-
-Permission is hereby granted, free of charge, to any person obtaining a
-copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name(s) of the above copyright
-holders shall not be used in advertising or otherwise to promote the
-sale, use or other dealings in this Software without prior written
-authorization.
-
-********************************************************/
-
-#include <xterm.h>
-#include <data.h>
-#include <fontutils.h>
-
-#include <X11/keysym.h>
-
-/*
- * This module performs translation as needed to support the DEC VT220 national
- * replacement character sets. We assume that xterm's font is based on the ISO
- * 8859-1 (Latin 1) character set, which is almost the same as the DEC
- * multinational character set. Glyph positions 0-31 have to be the DEC
- * graphic characters, though.
- *
- * References:
- * "VT220 Programmer Pocket Guide" EK-VT220-HR-002 (2nd ed., 1984), which
- * contains character charts for the national character sets.
- * "VT330/VT340 Programmer Reference Manual Volume 1: Text Programming"
- * EK-VT3XX-TP-001 (1st ed, 1987), which contains a table (2-1)
- * listing the glyphs which are mapped from the multinational
- * character set to the national character set.
- *
- * The latter reference, though easier to read, has a few errors and omissions.
- */
-
-/*
- * Translate an input keysym to the corresponding NRC keysym.
- */
-unsigned xtermCharSetIn(unsigned code, int charset)
-{
- if (code >= 128 && code < 256) {
- switch (charset) {
- case 'A': /* United Kingdom set (or Latin 1) */
- if (code == XK_sterling)
- code = 0x23;
- code &= 0x7f;
- break;
-
-#if OPT_XMC_GLITCH
- case '?':
-#endif
- case '1': /* Alternate Character ROM standard characters */
- case '2': /* Alternate Character ROM special graphics */
- case 'B': /* ASCII set */
- break;
-
- case '0': /* special graphics (line drawing) */
- break;
-
- case '4': /* Dutch */
- switch (code) {
- case XK_sterling: code = 0x23; break;
- case XK_threequarters: code = 0x40; break;
- case XK_ydiaeresis: code = 0x5b; break;
- case XK_onehalf: code = 0x5c; break;
- /* N/A case XK_bar: code = 0x5d; break; */
- case XK_diaeresis: code = 0x7b; break;
- /* N/A case XK_f: code = 0x7c; break; */
- case XK_onequarter: code = 0x7d; break;
- case XK_acute: code = 0x7e; break;
- }
- break;
-
- case 'C':
- case '5': /* Finnish */
- switch (code) {
- case XK_Adiaeresis: code = 0x5b; break;
- case XK_Odiaeresis: code = 0x5c; break;
- case XK_Aring: code = 0x5d; break;
- case XK_Udiaeresis: code = 0x5e; break;
- case XK_eacute: code = 0x60; break;
- case XK_adiaeresis: code = 0x7b; break;
- case XK_odiaeresis: code = 0x7c; break;
- case XK_aring: code = 0x7d; break;
- case XK_udiaeresis: code = 0x7e; break;
- }
- break;
-
- case 'R': /* French */
- switch (code) {
- case XK_sterling: code = 0x23; break;
- case XK_agrave: code = 0x40; break;
- case XK_degree: code = 0x5b; break;
- case XK_ccedilla: code = 0x5c; break;
- case XK_section: code = 0x5d; break;
- case XK_eacute: code = 0x7b; break;
- case XK_ugrave: code = 0x7c; break;
- case XK_egrave: code = 0x7d; break;
- case XK_diaeresis: code = 0x7e; break;
- }
- break;
-
- case 'Q': /* French Canadian */
- switch (code) {
- case XK_agrave: code = 0x40; break;
- case XK_acircumflex: code = 0x5b; break;
- case XK_ccedilla: code = 0x5c; break;
- case XK_ecircumflex: code = 0x5d; break;
- case XK_icircumflex: code = 0x5e; break;
- case XK_ocircumflex: code = 0x60; break;
- case XK_eacute: code = 0x7b; break;
- case XK_ugrave: code = 0x7c; break;
- case XK_egrave: code = 0x7d; break;
- case XK_ucircumflex: code = 0x7e; break;
- }
- break;
-
- case 'K': /* German */
- switch (code) {
- case XK_section: code = 0x40; break;
- case XK_Adiaeresis: code = 0x5b; break;
- case XK_Odiaeresis: code = 0x5c; break;
- case XK_Udiaeresis: code = 0x5d; break;
- case XK_adiaeresis: code = 0x7b; break;
- case XK_odiaeresis: code = 0x7c; break;
- case XK_udiaeresis: code = 0x7d; break;
- case XK_ssharp: code = 0x7e; break;
- }
- break;
-
- case 'Y': /* Italian */
- switch (code) {
- case XK_sterling: code = 0x23; break;
- case XK_section: code = 0x40; break;
- case XK_degree: code = 0x5b; break;
- case XK_ccedilla: code = 0x5c; break;
- case XK_eacute: code = 0x5d; break;
- case XK_ugrave: code = 0x60; break;
- case XK_agrave: code = 0x7b; break;
- case XK_ograve: code = 0x7c; break;
- case XK_egrave: code = 0x7d; break;
- case XK_igrave: code = 0x7e; break;
- }
- break;
-
- case 'E':
- case '6': /* Norwegian/Danish */
- switch (code) {
- case XK_Adiaeresis: code = 0x40; break;
- case XK_AE: code = 0x5b; break;
- case XK_Ooblique: code = 0x5c; break;
- case XK_Aring: code = 0x5d; break;
- case XK_Udiaeresis: code = 0x5e; break;
- case XK_adiaeresis: code = 0x60; break;
- case XK_ae: code = 0x7b; break;
- case XK_oslash: code = 0x7c; break;
- case XK_aring: code = 0x7d; break;
- case XK_udiaeresis: code = 0x7e; break;
- }
- break;
-
- case 'Z': /* Spanish */
- switch (code) {
- case XK_sterling: code = 0x23; break;
- case XK_section: code = 0x40; break;
- case XK_exclamdown: code = 0x5b; break;
- case XK_Ntilde: code = 0x5c; break;
- case XK_questiondown: code = 0x5d; break;
- case XK_degree: code = 0x7b; break;
- case XK_ntilde: code = 0x7c; break;
- case XK_ccedilla: code = 0x7d; break;
- }
- break;
-
- case 'H':
- case '7': /* Swedish */
- switch (code) {
- case XK_Eacute: code = 0x40; break;
- case XK_Adiaeresis: code = 0x5b; break;
- case XK_Odiaeresis: code = 0x5c; break;
- case XK_Aring: code = 0x5d; break;
- case XK_Udiaeresis: code = 0x5e; break;
- case XK_eacute: code = 0x60; break;
- case XK_adiaeresis: code = 0x7b; break;
- case XK_odiaeresis: code = 0x7c; break;
- case XK_aring: code = 0x7d; break;
- case XK_udiaeresis: code = 0x7e; break;
- }
- break;
-
- case '=': /* Swiss */
- switch (code) {
- case XK_ugrave: code = 0x23; break;
- case XK_agrave: code = 0x40; break;
- case XK_eacute: code = 0x5b; break;
- case XK_ccedilla: code = 0x5c; break;
- case XK_ecircumflex: code = 0x5d; break;
- case XK_icircumflex: code = 0x5e; break;
- case XK_egrave: code = 0x5f; break;
- case XK_ocircumflex: code = 0x60; break;
- case XK_adiaeresis: code = 0x7b; break;
- case XK_odiaeresis: code = 0x7c; break;
- case XK_udiaeresis: code = 0x7d; break;
- case XK_ucircumflex: code = 0x7e; break;
- }
- break;
-
- default: /* any character sets we don't recognize*/
- break;
- }
- code &= 0x7f; /* NRC in any case is 7-bit */
- }
- return code;
-}
-
-/*
- * Translate a string to the display form. This assumes the font has the
- * DEC graphic characters in cells 0-31, and otherwise is ISO-8859-1.
- */
-int xtermCharSetOut(IChar *buf, IChar *ptr, int leftset)
-{
- IChar *s;
- register TScreen *screen = &term->screen;
- int count = 0;
- int rightset = screen->gsets[(int)(screen->curgr)];
-
- TRACE(("CHARSET GL=%c(G%d) GR=%c(G%d) SS%d:%s\n",
- leftset, screen->curgl,
- rightset, screen->curgr,
- screen->curss,
- visibleIChar(buf, (unsigned)(ptr - buf))));
-
- for (s = buf; s < ptr; ++s) {
- int eight = CharOf(E2A(*s));
- int seven = eight & 0x7f;
- int cs = (eight >= 128) ? rightset : leftset;
- int chr = eight;
-
- count++;
- switch (cs) {
- case 'A': /* United Kingdom set (or Latin 1) */
- if ((term->flags & NATIONAL)
- || (screen->vtXX_level <= 1)) {
- if (chr == 0x23)
- chr = XPOUND; /* UK pound sign*/
- } else {
- chr = (seven | 0x80);
- }
- break;
-
-#if OPT_XMC_GLITCH
- case '?':
-#endif
- case '1': /* Alternate Character ROM standard characters */
- case '2': /* Alternate Character ROM special graphics */
- case 'B': /* ASCII set */
- break;
-
- case '0': /* special graphics (line drawing) */
- if (seven > 0x5f && seven <= 0x7e) {
-#if OPT_WIDE_CHARS
- if (screen->utf8_mode)
- chr = dec2ucs((unsigned)(seven - 0x5f));
- else
-#endif
- chr = seven - 0x5f;
- } else {
- chr = seven;
- }
- break;
-
- case '4': /* Dutch */
- switch (chr = seven) {
- case 0x23: chr = XK_sterling; break;
- case 0x40: chr = XK_threequarters; break;
- case 0x5b: chr = XK_ydiaeresis; break;
- case 0x5c: chr = XK_onehalf; break;
- case 0x5d: chr = XK_bar; break;
- case 0x7b: chr = XK_diaeresis; break;
- case 0x7c: chr = XK_f; break;
- case 0x7d: chr = XK_onequarter; break;
- case 0x7e: chr = XK_acute; break;
- }
- break;
-
- case 'C':
- case '5': /* Finnish */
- switch (chr = seven) {
- case 0x5b: chr = XK_Adiaeresis; break;
- case 0x5c: chr = XK_Odiaeresis; break;
- case 0x5d: chr = XK_Aring; break;
- case 0x5e: chr = XK_Udiaeresis; break;
- case 0x60: chr = XK_eacute; break;
- case 0x7b: chr = XK_adiaeresis; break;
- case 0x7c: chr = XK_odiaeresis; break;
- case 0x7d: chr = XK_aring; break;
- case 0x7e: chr = XK_udiaeresis; break;
- }
- break;
-
- case 'R': /* French */
- switch (chr = seven) {
- case 0x23: chr = XK_sterling; break;
- case 0x40: chr = XK_agrave; break;
- case 0x5b: chr = XK_degree; break;
- case 0x5c: chr = XK_ccedilla; break;
- case 0x5d: chr = XK_section; break;
- case 0x7b: chr = XK_eacute; break;
- case 0x7c: chr = XK_ugrave; break;
- case 0x7d: chr = XK_egrave; break;
- case 0x7e: chr = XK_diaeresis; break;
- }
- break;
-
- case 'Q': /* French Canadian */
- switch (chr = seven) {
- case 0x40: chr = XK_agrave; break;
- case 0x5b: chr = XK_acircumflex; break;
- case 0x5c: chr = XK_ccedilla; break;
- case 0x5d: chr = XK_ecircumflex; break;
- case 0x5e: chr = XK_icircumflex; break;
- case 0x60: chr = XK_ocircumflex; break;
- case 0x7b: chr = XK_eacute; break;
- case 0x7c: chr = XK_ugrave; break;
- case 0x7d: chr = XK_egrave; break;
- case 0x7e: chr = XK_ucircumflex; break;
- }
- break;
-
- case 'K': /* German */
- switch (chr = seven) {
- case 0x40: chr = XK_section; break;
- case 0x5b: chr = XK_Adiaeresis; break;
- case 0x5c: chr = XK_Odiaeresis; break;
- case 0x5d: chr = XK_Udiaeresis; break;
- case 0x7b: chr = XK_adiaeresis; break;
- case 0x7c: chr = XK_odiaeresis; break;
- case 0x7d: chr = XK_udiaeresis; break;
- case 0x7e: chr = XK_ssharp; break;
- }
- break;
-
- case 'Y': /* Italian */
- switch (chr = seven) {
- case 0x23: chr = XK_sterling; break;
- case 0x40: chr = XK_section; break;
- case 0x5b: chr = XK_degree; break;
- case 0x5c: chr = XK_ccedilla; break;
- case 0x5d: chr = XK_eacute; break;
- case 0x60: chr = XK_ugrave; break;
- case 0x7b: chr = XK_agrave; break;
- case 0x7c: chr = XK_ograve; break;
- case 0x7d: chr = XK_egrave; break;
- case 0x7e: chr = XK_igrave; break;
- }
- break;
-
- case 'E':
- case '6': /* Norwegian/Danish */
- switch (chr = seven) {
- case 0x40: chr = XK_Adiaeresis; break;
- case 0x5b: chr = XK_AE; break;
- case 0x5c: chr = XK_Ooblique; break;
- case 0x5d: chr = XK_Aring; break;
- case 0x5e: chr = XK_Udiaeresis; break;
- case 0x60: chr = XK_adiaeresis; break;
- case 0x7b: chr = XK_ae; break;
- case 0x7c: chr = XK_oslash; break;
- case 0x7d: chr = XK_aring; break;
- case 0x7e: chr = XK_udiaeresis; break;
- }
- break;
-
- case 'Z': /* Spanish */
- switch (chr = seven) {
- case 0x23: chr = XK_sterling; break;
- case 0x40: chr = XK_section; break;
- case 0x5b: chr = XK_exclamdown; break;
- case 0x5c: chr = XK_Ntilde; break;
- case 0x5d: chr = XK_questiondown; break;
- case 0x7b: chr = XK_degree; break;
- case 0x7c: chr = XK_ntilde; break;
- case 0x7d: chr = XK_ccedilla; break;
- }
- break;
-
- case 'H':
- case '7': /* Swedish */
- switch (chr = seven) {
- case 0x40: chr = XK_Eacute; break;
- case 0x5b: chr = XK_Adiaeresis; break;
- case 0x5c: chr = XK_Odiaeresis; break;
- case 0x5d: chr = XK_Aring; break;
- case 0x5e: chr = XK_Udiaeresis; break;
- case 0x60: chr = XK_eacute; break;
- case 0x7b: chr = XK_adiaeresis; break;
- case 0x7c: chr = XK_odiaeresis; break;
- case 0x7d: chr = XK_aring; break;
- case 0x7e: chr = XK_udiaeresis; break;
- }
- break;
-
- case '=': /* Swiss */
- switch (chr = seven) {
- case 0x23: chr = XK_ugrave; break;
- case 0x40: chr = XK_agrave; break;
- case 0x5b: chr = XK_eacute; break;
- case 0x5c: chr = XK_ccedilla; break;
- case 0x5d: chr = XK_ecircumflex; break;
- case 0x5e: chr = XK_icircumflex; break;
- case 0x5f: chr = XK_egrave; break;
- case 0x60: chr = XK_ocircumflex; break;
- case 0x7b: chr = XK_adiaeresis; break;
- case 0x7c: chr = XK_odiaeresis; break;
- case 0x7d: chr = XK_udiaeresis; break;
- case 0x7e: chr = XK_ucircumflex; break;
- }
- break;
-
- default: /* any character sets we don't recognize*/
- count --;
- break;
- }
- /*
- * The state machine already treated DEL as a nonprinting and
- * nonspacing character. If we have DEL now, simply render
- * it as a blank.
- */
- if (chr == 0x7f)
- chr = ' ';
- *s = A2E(chr);
- }
- return count;
-}
diff --git a/nx-X11/programs/xterm/config.guess b/nx-X11/programs/xterm/config.guess
deleted file mode 100644
index 6d71f752f..000000000
--- a/nx-X11/programs/xterm/config.guess
+++ /dev/null
@@ -1,1499 +0,0 @@
-#! /bin/sh
-# Attempt to guess a canonical system name.
-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-# 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
-
-timestamp='2005-05-27'
-
-# This file 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 2 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, write to the Free Software
-# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
-# 02110-1301, USA.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-
-# Originally written by Per Bothner <per@bothner.com>.
-# Please send patches to <config-patches@gnu.org>. Submit a context
-# diff and a properly formatted ChangeLog entry.
-#
-# This script attempts to guess a canonical system name similar to
-# config.sub. If it succeeds, it prints the system name on stdout, and
-# exits with 0. Otherwise, it exits with 1.
-#
-# The plan is that this can be called by configure scripts if you
-# don't specify an explicit build system type.
-
-me=`echo "$0" | sed -e 's,.*/,,'`
-
-usage="\
-Usage: $0 [OPTION]
-
-Output the configuration name of the system \`$me' is run on.
-
-Operation modes:
- -h, --help print this help, then exit
- -t, --time-stamp print date of last modification, then exit
- -v, --version print version number, then exit
-
-Report bugs and patches to <config-patches@gnu.org>."
-
-version="\
-GNU config.guess ($timestamp)
-
-Originally written by Per Bothner.
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
-Free Software Foundation, Inc.
-
-This is free software; see the source for copying conditions. There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
-
-help="
-Try \`$me --help' for more information."
-
-# Parse command line
-while test $# -gt 0 ; do
- case $1 in
- --time-stamp | --time* | -t )
- echo "$timestamp" ; exit ;;
- --version | -v )
- echo "$version" ; exit ;;
- --help | --h* | -h )
- echo "$usage"; exit ;;
- -- ) # Stop option processing
- shift; break ;;
- - ) # Use stdin as input.
- break ;;
- -* )
- echo "$me: invalid option $1$help" >&2
- exit 1 ;;
- * )
- break ;;
- esac
-done
-
-if test $# != 0; then
- echo "$me: too many arguments$help" >&2
- exit 1
-fi
-
-trap 'exit 1' 1 2 15
-
-# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
-# compiler to aid in system detection is discouraged as it requires
-# temporary files to be created and, as you can see below, it is a
-# headache to deal with in a portable fashion.
-
-# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
-# use `HOST_CC' if defined, but it is deprecated.
-
-# Portable tmp directory creation inspired by the Autoconf team.
-
-set_cc_for_build='
-trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
-trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
-: ${TMPDIR=/tmp} ;
- { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
- { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
- { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
- { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
-dummy=$tmp/dummy ;
-tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
-case $CC_FOR_BUILD,$HOST_CC,$CC in
- ,,) echo "int x;" > $dummy.c ;
- for c in cc gcc c89 c99 ; do
- if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
- CC_FOR_BUILD="$c"; break ;
- fi ;
- done ;
- if test x"$CC_FOR_BUILD" = x ; then
- CC_FOR_BUILD=no_compiler_found ;
- fi
- ;;
- ,,*) CC_FOR_BUILD=$CC ;;
- ,*,*) CC_FOR_BUILD=$HOST_CC ;;
-esac ;'
-
-# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
-# (ghazi@noc.rutgers.edu 1994-08-24)
-if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
- PATH=$PATH:/.attbin ; export PATH
-fi
-
-UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
-UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
-UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
-UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
-
-# Note: order is significant - the case branches are not exclusive.
-
-case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
- *:NetBSD:*:*)
- # NetBSD (nbsd) targets should (where applicable) match one or
- # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
- # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently
- # switched to ELF, *-*-netbsd* would select the old
- # object file format. This provides both forward
- # compatibility and a consistent mechanism for selecting the
- # object file format.
- #
- # Note: NetBSD doesn't particularly care about the vendor
- # portion of the name. We always set it to "unknown".
- sysctl="sysctl -n hw.machine_arch"
- UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
- /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
- case "${UNAME_MACHINE_ARCH}" in
- armeb) machine=armeb-unknown ;;
- arm*) machine=arm-unknown ;;
- sh3el) machine=shl-unknown ;;
- sh3eb) machine=sh-unknown ;;
- *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
- esac
- # The Operating System including object format, if it has switched
- # to ELF recently, or will in the future.
- case "${UNAME_MACHINE_ARCH}" in
- arm*|i386|m68k|ns32k|sh3*|sparc|vax)
- eval $set_cc_for_build
- if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
- | grep __ELF__ >/dev/null
- then
- # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
- # Return netbsd for either. FIX?
- os=netbsd
- else
- os=netbsdelf
- fi
- ;;
- *)
- os=netbsd
- ;;
- esac
- # The OS release
- # Debian GNU/NetBSD machines have a different userland, and
- # thus, need a distinct triplet. However, they do not need
- # kernel version information, so it can be replaced with a
- # suitable tag, in the style of linux-gnu.
- case "${UNAME_VERSION}" in
- Debian*)
- release='-gnu'
- ;;
- *)
- release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
- ;;
- esac
- # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
- # contains redundant information, the shorter form:
- # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
- echo "${machine}-${os}${release}"
- exit ;;
- amd64:OpenBSD:*:*)
- echo x86_64-unknown-openbsd${UNAME_RELEASE}
- exit ;;
- amiga:OpenBSD:*:*)
- echo m68k-unknown-openbsd${UNAME_RELEASE}
- exit ;;
- cats:OpenBSD:*:*)
- echo arm-unknown-openbsd${UNAME_RELEASE}
- exit ;;
- hp300:OpenBSD:*:*)
- echo m68k-unknown-openbsd${UNAME_RELEASE}
- exit ;;
- luna88k:OpenBSD:*:*)
- echo m88k-unknown-openbsd${UNAME_RELEASE}
- exit ;;
- mac68k:OpenBSD:*:*)
- echo m68k-unknown-openbsd${UNAME_RELEASE}
- exit ;;
- macppc:OpenBSD:*:*)
- echo powerpc-unknown-openbsd${UNAME_RELEASE}
- exit ;;
- mvme68k:OpenBSD:*:*)
- echo m68k-unknown-openbsd${UNAME_RELEASE}
- exit ;;
- mvme88k:OpenBSD:*:*)
- echo m88k-unknown-openbsd${UNAME_RELEASE}
- exit ;;
- mvmeppc:OpenBSD:*:*)
- echo powerpc-unknown-openbsd${UNAME_RELEASE}
- exit ;;
- sgi:OpenBSD:*:*)
- echo mips64-unknown-openbsd${UNAME_RELEASE}
- exit ;;
- sun3:OpenBSD:*:*)
- echo m68k-unknown-openbsd${UNAME_RELEASE}
- exit ;;
- *:OpenBSD:*:*)
- echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE}
- exit ;;
- *:ekkoBSD:*:*)
- echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
- exit ;;
- macppc:MirBSD:*:*)
- echo powerppc-unknown-mirbsd${UNAME_RELEASE}
- exit ;;
- *:MirBSD:*:*)
- echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
- exit ;;
- alpha:OSF1:*:*)
- case $UNAME_RELEASE in
- *4.0)
- UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
- ;;
- *5.*)
- UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
- ;;
- esac
- # According to Compaq, /usr/sbin/psrinfo has been available on
- # OSF/1 and Tru64 systems produced since 1995. I hope that
- # covers most systems running today. This code pipes the CPU
- # types through head -n 1, so we only detect the type of CPU 0.
- ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1`
- case "$ALPHA_CPU_TYPE" in
- "EV4 (21064)")
- UNAME_MACHINE="alpha" ;;
- "EV4.5 (21064)")
- UNAME_MACHINE="alpha" ;;
- "LCA4 (21066/21068)")
- UNAME_MACHINE="alpha" ;;
- "EV5 (21164)")
- UNAME_MACHINE="alphaev5" ;;
- "EV5.6 (21164A)")
- UNAME_MACHINE="alphaev56" ;;
- "EV5.6 (21164PC)")
- UNAME_MACHINE="alphapca56" ;;
- "EV5.7 (21164PC)")
- UNAME_MACHINE="alphapca57" ;;
- "EV6 (21264)")
- UNAME_MACHINE="alphaev6" ;;
- "EV6.7 (21264A)")
- UNAME_MACHINE="alphaev67" ;;
- "EV6.8CB (21264C)")
- UNAME_MACHINE="alphaev68" ;;
- "EV6.8AL (21264B)")
- UNAME_MACHINE="alphaev68" ;;
- "EV6.8CX (21264D)")
- UNAME_MACHINE="alphaev68" ;;
- "EV6.9A (21264/EV69A)")
- UNAME_MACHINE="alphaev69" ;;
- "EV7 (21364)")
- UNAME_MACHINE="alphaev7" ;;
- "EV7.9 (21364A)")
- UNAME_MACHINE="alphaev79" ;;
- esac
- # A Pn.n version is a patched version.
- # A Vn.n version is a released version.
- # A Tn.n version is a released field test version.
- # A Xn.n version is an unreleased experimental baselevel.
- # 1.2 uses "1.2" for uname -r.
- echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
- exit ;;
- Alpha\ *:Windows_NT*:*)
- # How do we know it's Interix rather than the generic POSIX subsystem?
- # Should we change UNAME_MACHINE based on the output of uname instead
- # of the specific Alpha model?
- echo alpha-pc-interix
- exit ;;
- 21064:Windows_NT:50:3)
- echo alpha-dec-winnt3.5
- exit ;;
- Amiga*:UNIX_System_V:4.0:*)
- echo m68k-unknown-sysv4
- exit ;;
- *:[Aa]miga[Oo][Ss]:*:*)
- echo ${UNAME_MACHINE}-unknown-amigaos
- exit ;;
- *:[Mm]orph[Oo][Ss]:*:*)
- echo ${UNAME_MACHINE}-unknown-morphos
- exit ;;
- *:OS/390:*:*)
- echo i370-ibm-openedition
- exit ;;
- *:z/VM:*:*)
- echo s390-ibm-zvmoe
- exit ;;
- *:OS400:*:*)
- echo powerpc-ibm-os400
- exit ;;
- arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
- echo arm-acorn-riscix${UNAME_RELEASE}
- exit ;;
- arm:riscos:*:*|arm:RISCOS:*:*)
- echo arm-unknown-riscos
- exit ;;
- SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
- echo hppa1.1-hitachi-hiuxmpp
- exit ;;
- Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
- # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
- if test "`(/bin/universe) 2>/dev/null`" = att ; then
- echo pyramid-pyramid-sysv3
- else
- echo pyramid-pyramid-bsd
- fi
- exit ;;
- NILE*:*:*:dcosx)
- echo pyramid-pyramid-svr4
- exit ;;
- DRS?6000:unix:4.0:6*)
- echo sparc-icl-nx6
- exit ;;
- DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
- case `/usr/bin/uname -p` in
- sparc) echo sparc-icl-nx7; exit ;;
- esac ;;
- sun4H:SunOS:5.*:*)
- echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit ;;
- sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
- echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit ;;
- i86pc:SunOS:5.*:*)
- echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit ;;
- sun4*:SunOS:6*:*)
- # According to config.sub, this is the proper way to canonicalize
- # SunOS6. Hard to guess exactly what SunOS6 will be like, but
- # it's likely to be more like Solaris than SunOS4.
- echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit ;;
- sun4*:SunOS:*:*)
- case "`/usr/bin/arch -k`" in
- Series*|S4*)
- UNAME_RELEASE=`uname -v`
- ;;
- esac
- # Japanese Language versions have a version number like `4.1.3-JL'.
- echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
- exit ;;
- sun3*:SunOS:*:*)
- echo m68k-sun-sunos${UNAME_RELEASE}
- exit ;;
- sun*:*:4.2BSD:*)
- UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
- test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
- case "`/bin/arch`" in
- sun3)
- echo m68k-sun-sunos${UNAME_RELEASE}
- ;;
- sun4)
- echo sparc-sun-sunos${UNAME_RELEASE}
- ;;
- esac
- exit ;;
- aushp:SunOS:*:*)
- echo sparc-auspex-sunos${UNAME_RELEASE}
- exit ;;
- # The situation for MiNT is a little confusing. The machine name
- # can be virtually everything (everything which is not
- # "atarist" or "atariste" at least should have a processor
- # > m68000). The system name ranges from "MiNT" over "FreeMiNT"
- # to the lowercase version "mint" (or "freemint"). Finally
- # the system name "TOS" denotes a system which is actually not
- # MiNT. But MiNT is downward compatible to TOS, so this should
- # be no problem.
- atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
- echo m68k-atari-mint${UNAME_RELEASE}
- exit ;;
- atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
- echo m68k-atari-mint${UNAME_RELEASE}
- exit ;;
- *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
- echo m68k-atari-mint${UNAME_RELEASE}
- exit ;;
- milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
- echo m68k-milan-mint${UNAME_RELEASE}
- exit ;;
- hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
- echo m68k-hades-mint${UNAME_RELEASE}
- exit ;;
- *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
- echo m68k-unknown-mint${UNAME_RELEASE}
- exit ;;
- m68k:machten:*:*)
- echo m68k-apple-machten${UNAME_RELEASE}
- exit ;;
- powerpc:machten:*:*)
- echo powerpc-apple-machten${UNAME_RELEASE}
- exit ;;
- RISC*:Mach:*:*)
- echo mips-dec-mach_bsd4.3
- exit ;;
- RISC*:ULTRIX:*:*)
- echo mips-dec-ultrix${UNAME_RELEASE}
- exit ;;
- VAX*:ULTRIX*:*:*)
- echo vax-dec-ultrix${UNAME_RELEASE}
- exit ;;
- 2020:CLIX:*:* | 2430:CLIX:*:*)
- echo clipper-intergraph-clix${UNAME_RELEASE}
- exit ;;
- mips:*:*:UMIPS | mips:*:*:RISCos)
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
-#ifdef __cplusplus
-#include <stdio.h> /* for printf() prototype */
- int main (int argc, char *argv[]) {
-#else
- int main (argc, argv) int argc; char *argv[]; {
-#endif
- #if defined (host_mips) && defined (MIPSEB)
- #if defined (SYSTYPE_SYSV)
- printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
- #endif
- #if defined (SYSTYPE_SVR4)
- printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
- #endif
- #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
- printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
- #endif
- #endif
- exit (-1);
- }
-EOF
- $CC_FOR_BUILD -o $dummy $dummy.c &&
- dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` &&
- SYSTEM_NAME=`$dummy $dummyarg` &&
- { echo "$SYSTEM_NAME"; exit; }
- echo mips-mips-riscos${UNAME_RELEASE}
- exit ;;
- Motorola:PowerMAX_OS:*:*)
- echo powerpc-motorola-powermax
- exit ;;
- Motorola:*:4.3:PL8-*)
- echo powerpc-harris-powermax
- exit ;;
- Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
- echo powerpc-harris-powermax
- exit ;;
- Night_Hawk:Power_UNIX:*:*)
- echo powerpc-harris-powerunix
- exit ;;
- m88k:CX/UX:7*:*)
- echo m88k-harris-cxux7
- exit ;;
- m88k:*:4*:R4*)
- echo m88k-motorola-sysv4
- exit ;;
- m88k:*:3*:R3*)
- echo m88k-motorola-sysv3
- exit ;;
- AViiON:dgux:*:*)
- # DG/UX returns AViiON for all architectures
- UNAME_PROCESSOR=`/usr/bin/uname -p`
- if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
- then
- if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
- [ ${TARGET_BINARY_INTERFACE}x = x ]
- then
- echo m88k-dg-dgux${UNAME_RELEASE}
- else
- echo m88k-dg-dguxbcs${UNAME_RELEASE}
- fi
- else
- echo i586-dg-dgux${UNAME_RELEASE}
- fi
- exit ;;
- M88*:DolphinOS:*:*) # DolphinOS (SVR3)
- echo m88k-dolphin-sysv3
- exit ;;
- M88*:*:R3*:*)
- # Delta 88k system running SVR3
- echo m88k-motorola-sysv3
- exit ;;
- XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
- echo m88k-tektronix-sysv3
- exit ;;
- Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
- echo m68k-tektronix-bsd
- exit ;;
- *:IRIX*:*:*)
- echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
- exit ;;
- ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
- echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
- exit ;; # Note that: echo "'`uname -s`'" gives 'AIX '
- i*86:AIX:*:*)
- echo i386-ibm-aix
- exit ;;
- ia64:AIX:*:*)
- if [ -x /usr/bin/oslevel ] ; then
- IBM_REV=`/usr/bin/oslevel`
- else
- IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
- fi
- echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
- exit ;;
- *:AIX:2:3)
- if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
- #include <sys/systemcfg.h>
-
- main()
- {
- if (!__power_pc())
- exit(1);
- puts("powerpc-ibm-aix3.2.5");
- exit(0);
- }
-EOF
- if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`
- then
- echo "$SYSTEM_NAME"
- else
- echo rs6000-ibm-aix3.2.5
- fi
- elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
- echo rs6000-ibm-aix3.2.4
- else
- echo rs6000-ibm-aix3.2
- fi
- exit ;;
- *:AIX:*:[45])
- IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
- if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
- IBM_ARCH=rs6000
- else
- IBM_ARCH=powerpc
- fi
- if [ -x /usr/bin/oslevel ] ; then
- IBM_REV=`/usr/bin/oslevel`
- else
- IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
- fi
- echo ${IBM_ARCH}-ibm-aix${IBM_REV}
- exit ;;
- *:AIX:*:*)
- echo rs6000-ibm-aix
- exit ;;
- ibmrt:4.4BSD:*|romp-ibm:BSD:*)
- echo romp-ibm-bsd4.4
- exit ;;
- ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and
- echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to
- exit ;; # report: romp-ibm BSD 4.3
- *:BOSX:*:*)
- echo rs6000-bull-bosx
- exit ;;
- DPX/2?00:B.O.S.:*:*)
- echo m68k-bull-sysv3
- exit ;;
- 9000/[34]??:4.3bsd:1.*:*)
- echo m68k-hp-bsd
- exit ;;
- hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
- echo m68k-hp-bsd4.4
- exit ;;
- 9000/[34678]??:HP-UX:*:*)
- HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
- case "${UNAME_MACHINE}" in
- 9000/31? ) HP_ARCH=m68000 ;;
- 9000/[34]?? ) HP_ARCH=m68k ;;
- 9000/[678][0-9][0-9])
- if [ -x /usr/bin/getconf ]; then
- sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
- sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
- case "${sc_cpu_version}" in
- 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
- 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
- 532) # CPU_PA_RISC2_0
- case "${sc_kernel_bits}" in
- 32) HP_ARCH="hppa2.0n" ;;
- 64) HP_ARCH="hppa2.0w" ;;
- '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20
- esac ;;
- esac
- fi
- if [ "${HP_ARCH}" = "" ]; then
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
-
- #define _HPUX_SOURCE
- #include <stdlib.h>
- #include <unistd.h>
-
- int main ()
- {
- #if defined(_SC_KERNEL_BITS)
- long bits = sysconf(_SC_KERNEL_BITS);
- #endif
- long cpu = sysconf (_SC_CPU_VERSION);
-
- switch (cpu)
- {
- case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
- case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
- case CPU_PA_RISC2_0:
- #if defined(_SC_KERNEL_BITS)
- switch (bits)
- {
- case 64: puts ("hppa2.0w"); break;
- case 32: puts ("hppa2.0n"); break;
- default: puts ("hppa2.0"); break;
- } break;
- #else /* !defined(_SC_KERNEL_BITS) */
- puts ("hppa2.0"); break;
- #endif
- default: puts ("hppa1.0"); break;
- }
- exit (0);
- }
-EOF
- (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
- test -z "$HP_ARCH" && HP_ARCH=hppa
- fi ;;
- esac
- if [ ${HP_ARCH} = "hppa2.0w" ]
- then
- # avoid double evaluation of $set_cc_for_build
- test -n "$CC_FOR_BUILD" || eval $set_cc_for_build
-
- # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
- # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler
- # generating 64-bit code. GNU and HP use different nomenclature:
- #
- # $ CC_FOR_BUILD=cc ./config.guess
- # => hppa2.0w-hp-hpux11.23
- # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
- # => hppa64-hp-hpux11.23
-
- if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
- grep __LP64__ >/dev/null
- then
- HP_ARCH="hppa2.0w"
- else
- HP_ARCH="hppa64"
- fi
- fi
- echo ${HP_ARCH}-hp-hpux${HPUX_REV}
- exit ;;
- ia64:HP-UX:*:*)
- HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
- echo ia64-hp-hpux${HPUX_REV}
- exit ;;
- 3050*:HI-UX:*:*)
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
- #include <unistd.h>
- int
- main ()
- {
- long cpu = sysconf (_SC_CPU_VERSION);
- /* The order matters, because CPU_IS_HP_MC68K erroneously returns
- true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct
- results, however. */
- if (CPU_IS_PA_RISC (cpu))
- {
- switch (cpu)
- {
- case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
- case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
- case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
- default: puts ("hppa-hitachi-hiuxwe2"); break;
- }
- }
- else if (CPU_IS_HP_MC68K (cpu))
- puts ("m68k-hitachi-hiuxwe2");
- else puts ("unknown-hitachi-hiuxwe2");
- exit (0);
- }
-EOF
- $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&
- { echo "$SYSTEM_NAME"; exit; }
- echo unknown-hitachi-hiuxwe2
- exit ;;
- 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
- echo hppa1.1-hp-bsd
- exit ;;
- 9000/8??:4.3bsd:*:*)
- echo hppa1.0-hp-bsd
- exit ;;
- *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
- echo hppa1.0-hp-mpeix
- exit ;;
- hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
- echo hppa1.1-hp-osf
- exit ;;
- hp8??:OSF1:*:*)
- echo hppa1.0-hp-osf
- exit ;;
- i*86:OSF1:*:*)
- if [ -x /usr/sbin/sysversion ] ; then
- echo ${UNAME_MACHINE}-unknown-osf1mk
- else
- echo ${UNAME_MACHINE}-unknown-osf1
- fi
- exit ;;
- parisc*:Lites*:*:*)
- echo hppa1.1-hp-lites
- exit ;;
- C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
- echo c1-convex-bsd
- exit ;;
- C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
- if getsysinfo -f scalar_acc
- then echo c32-convex-bsd
- else echo c2-convex-bsd
- fi
- exit ;;
- C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
- echo c34-convex-bsd
- exit ;;
- C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
- echo c38-convex-bsd
- exit ;;
- C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
- echo c4-convex-bsd
- exit ;;
- CRAY*Y-MP:*:*:*)
- echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit ;;
- CRAY*[A-Z]90:*:*:*)
- echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
- | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
- -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
- -e 's/\.[^.]*$/.X/'
- exit ;;
- CRAY*TS:*:*:*)
- echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit ;;
- CRAY*T3E:*:*:*)
- echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit ;;
- CRAY*SV1:*:*:*)
- echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit ;;
- *:UNICOS/mp:*:*)
- echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit ;;
- F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
- FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
- FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
- FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
- echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
- exit ;;
- 5000:UNIX_System_V:4.*:*)
- FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
- FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
- echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
- exit ;;
- i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
- echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
- exit ;;
- sparc*:BSD/OS:*:*)
- echo sparc-unknown-bsdi${UNAME_RELEASE}
- exit ;;
- *:BSD/OS:*:*)
- echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
- exit ;;
- *:FreeBSD:*:*)
- echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
- exit ;;
- i*:CYGWIN*:*)
- echo ${UNAME_MACHINE}-pc-cygwin
- exit ;;
- i*:MINGW*:*)
- echo ${UNAME_MACHINE}-pc-mingw32
- exit ;;
- i*:windows32*:*)
- # uname -m includes "-pc" on this system.
- echo ${UNAME_MACHINE}-mingw32
- exit ;;
- i*:PW*:*)
- echo ${UNAME_MACHINE}-pc-pw32
- exit ;;
- x86:Interix*:[34]*)
- echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//'
- exit ;;
- [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
- echo i${UNAME_MACHINE}-pc-mks
- exit ;;
- i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
- # How do we know it's Interix rather than the generic POSIX subsystem?
- # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
- # UNAME_MACHINE based on the output of uname instead of i386?
- echo i586-pc-interix
- exit ;;
- i*:UWIN*:*)
- echo ${UNAME_MACHINE}-pc-uwin
- exit ;;
- amd64:CYGWIN*:*:*)
- echo x86_64-unknown-cygwin
- exit ;;
- p*:CYGWIN*:*)
- echo powerpcle-unknown-cygwin
- exit ;;
- prep*:SunOS:5.*:*)
- echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit ;;
- *:GNU:*:*)
- # the GNU system
- echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
- exit ;;
- *:GNU/*:*:*)
- # other systems with GNU libc and userland
- echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
- exit ;;
- i*86:Minix:*:*)
- echo ${UNAME_MACHINE}-pc-minix
- exit ;;
- arm*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit ;;
- cris:Linux:*:*)
- echo cris-axis-linux-gnu
- exit ;;
- crisv32:Linux:*:*)
- echo crisv32-axis-linux-gnu
- exit ;;
- frv:Linux:*:*)
- echo frv-unknown-linux-gnu
- exit ;;
- ia64:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit ;;
- m32r*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit ;;
- m68*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit ;;
- mips:Linux:*:*)
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
- #undef CPU
- #undef mips
- #undef mipsel
- #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
- CPU=mipsel
- #else
- #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
- CPU=mips
- #else
- CPU=
- #endif
- #endif
-EOF
- eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
- test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
- ;;
- mips64:Linux:*:*)
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
- #undef CPU
- #undef mips64
- #undef mips64el
- #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
- CPU=mips64el
- #else
- #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
- CPU=mips64
- #else
- CPU=
- #endif
- #endif
-EOF
- eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
- test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
- ;;
- ppc:Linux:*:*)
- echo powerpc-unknown-linux-gnu
- exit ;;
- ppc64:Linux:*:*)
- echo powerpc64-unknown-linux-gnu
- exit ;;
- alpha:Linux:*:*)
- case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
- EV5) UNAME_MACHINE=alphaev5 ;;
- EV56) UNAME_MACHINE=alphaev56 ;;
- PCA56) UNAME_MACHINE=alphapca56 ;;
- PCA57) UNAME_MACHINE=alphapca56 ;;
- EV6) UNAME_MACHINE=alphaev6 ;;
- EV67) UNAME_MACHINE=alphaev67 ;;
- EV68*) UNAME_MACHINE=alphaev68 ;;
- esac
- objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
- if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
- echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
- exit ;;
- parisc:Linux:*:* | hppa:Linux:*:*)
- # Look for CPU level
- case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
- PA7*) echo hppa1.1-unknown-linux-gnu ;;
- PA8*) echo hppa2.0-unknown-linux-gnu ;;
- *) echo hppa-unknown-linux-gnu ;;
- esac
- exit ;;
- parisc64:Linux:*:* | hppa64:Linux:*:*)
- echo hppa64-unknown-linux-gnu
- exit ;;
- s390:Linux:*:* | s390x:Linux:*:*)
- echo ${UNAME_MACHINE}-ibm-linux
- exit ;;
- sh64*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit ;;
- sh*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit ;;
- sparc:Linux:*:* | sparc64:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit ;;
- x86_64:Linux:*:*)
- echo x86_64-unknown-linux-gnu
- exit ;;
- i*86:Linux:*:*)
- # The BFD linker knows what the default object file format is, so
- # first see if it will tell us. cd to the root directory to prevent
- # problems with other programs or directories called `ld' in the path.
- # Set LC_ALL=C to ensure ld outputs messages in English.
- ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \
- | sed -ne '/supported targets:/!d
- s/[ ][ ]*/ /g
- s/.*supported targets: *//
- s/ .*//
- p'`
- case "$ld_supported_targets" in
- elf32-i386)
- TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
- ;;
- a.out-i386-linux)
- echo "${UNAME_MACHINE}-pc-linux-gnuaout"
- exit ;;
- coff-i386)
- echo "${UNAME_MACHINE}-pc-linux-gnucoff"
- exit ;;
- "")
- # Either a pre-BFD a.out linker (linux-gnuoldld) or
- # one that does not give us useful --help.
- echo "${UNAME_MACHINE}-pc-linux-gnuoldld"
- exit ;;
- esac
- # Determine whether the default compiler is a.out or elf
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
- #include <features.h>
- #ifdef __ELF__
- # ifdef __GLIBC__
- # if __GLIBC__ >= 2
- LIBC=gnu
- # else
- LIBC=gnulibc1
- # endif
- # else
- LIBC=gnulibc1
- # endif
- #else
- #ifdef __INTEL_COMPILER
- LIBC=gnu
- #else
- LIBC=gnuaout
- #endif
- #endif
- #ifdef __dietlibc__
- LIBC=dietlibc
- #endif
-EOF
- eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
- test x"${LIBC}" != x && {
- echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
- exit
- }
- test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; }
- ;;
- i*86:DYNIX/ptx:4*:*)
- # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
- # earlier versions are messed up and put the nodename in both
- # sysname and nodename.
- echo i386-sequent-sysv4
- exit ;;
- i*86:UNIX_SV:4.2MP:2.*)
- # Unixware is an offshoot of SVR4, but it has its own version
- # number series starting with 2...
- # I am not positive that other SVR4 systems won't match this,
- # I just have to hope. -- rms.
- # Use sysv4.2uw... so that sysv4* matches it.
- echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
- exit ;;
- i*86:OS/2:*:*)
- # If we were able to find `uname', then EMX Unix compatibility
- # is probably installed.
- echo ${UNAME_MACHINE}-pc-os2-emx
- exit ;;
- i*86:XTS-300:*:STOP)
- echo ${UNAME_MACHINE}-unknown-stop
- exit ;;
- i*86:atheos:*:*)
- echo ${UNAME_MACHINE}-unknown-atheos
- exit ;;
- i*86:syllable:*:*)
- echo ${UNAME_MACHINE}-pc-syllable
- exit ;;
- i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
- echo i386-unknown-lynxos${UNAME_RELEASE}
- exit ;;
- i*86:*DOS:*:*)
- echo ${UNAME_MACHINE}-pc-msdosdjgpp
- exit ;;
- i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
- UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
- if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
- echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
- else
- echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
- fi
- exit ;;
- i*86:*:5:[678]*)
- # UnixWare 7.x, OpenUNIX and OpenServer 6.
- case `/bin/uname -X | grep "^Machine"` in
- *486*) UNAME_MACHINE=i486 ;;
- *Pentium) UNAME_MACHINE=i586 ;;
- *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
- esac
- echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
- exit ;;
- i*86:*:3.2:*)
- if test -f /usr/options/cb.name; then
- UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
- echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
- elif /bin/uname -X 2>/dev/null >/dev/null ; then
- UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
- (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
- (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
- && UNAME_MACHINE=i586
- (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
- && UNAME_MACHINE=i686
- (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
- && UNAME_MACHINE=i686
- echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
- else
- echo ${UNAME_MACHINE}-pc-sysv32
- fi
- exit ;;
- pc:*:*:*)
- # Left here for compatibility:
- # uname -m prints for DJGPP always 'pc', but it prints nothing about
- # the processor, so we play safe by assuming i386.
- echo i386-pc-msdosdjgpp
- exit ;;
- Intel:Mach:3*:*)
- echo i386-pc-mach3
- exit ;;
- paragon:*:*:*)
- echo i860-intel-osf1
- exit ;;
- i860:*:4.*:*) # i860-SVR4
- if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
- echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
- else # Add other i860-SVR4 vendors below as they are discovered.
- echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4
- fi
- exit ;;
- mini*:CTIX:SYS*5:*)
- # "miniframe"
- echo m68010-convergent-sysv
- exit ;;
- mc68k:UNIX:SYSTEM5:3.51m)
- echo m68k-convergent-sysv
- exit ;;
- M680?0:D-NIX:5.3:*)
- echo m68k-diab-dnix
- exit ;;
- M68*:*:R3V[5678]*:*)
- test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
- 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
- OS_REL=''
- test -r /etc/.relid \
- && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
- /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
- && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
- /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
- && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
- 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
- /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
- && { echo i486-ncr-sysv4; exit; } ;;
- m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
- echo m68k-unknown-lynxos${UNAME_RELEASE}
- exit ;;
- mc68030:UNIX_System_V:4.*:*)
- echo m68k-atari-sysv4
- exit ;;
- TSUNAMI:LynxOS:2.*:*)
- echo sparc-unknown-lynxos${UNAME_RELEASE}
- exit ;;
- rs6000:LynxOS:2.*:*)
- echo rs6000-unknown-lynxos${UNAME_RELEASE}
- exit ;;
- PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
- echo powerpc-unknown-lynxos${UNAME_RELEASE}
- exit ;;
- SM[BE]S:UNIX_SV:*:*)
- echo mips-dde-sysv${UNAME_RELEASE}
- exit ;;
- RM*:ReliantUNIX-*:*:*)
- echo mips-sni-sysv4
- exit ;;
- RM*:SINIX-*:*:*)
- echo mips-sni-sysv4
- exit ;;
- *:SINIX-*:*:*)
- if uname -p 2>/dev/null >/dev/null ; then
- UNAME_MACHINE=`(uname -p) 2>/dev/null`
- echo ${UNAME_MACHINE}-sni-sysv4
- else
- echo ns32k-sni-sysv
- fi
- exit ;;
- PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
- # says <Richard.M.Bartel@ccMail.Census.GOV>
- echo i586-unisys-sysv4
- exit ;;
- *:UNIX_System_V:4*:FTX*)
- # From Gerald Hewes <hewes@openmarket.com>.
- # How about differentiating between stratus architectures? -djm
- echo hppa1.1-stratus-sysv4
- exit ;;
- *:*:*:FTX*)
- # From seanf@swdc.stratus.com.
- echo i860-stratus-sysv4
- exit ;;
- i*86:VOS:*:*)
- # From Paul.Green@stratus.com.
- echo ${UNAME_MACHINE}-stratus-vos
- exit ;;
- *:VOS:*:*)
- # From Paul.Green@stratus.com.
- echo hppa1.1-stratus-vos
- exit ;;
- mc68*:A/UX:*:*)
- echo m68k-apple-aux${UNAME_RELEASE}
- exit ;;
- news*:NEWS-OS:6*:*)
- echo mips-sony-newsos6
- exit ;;
- R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
- if [ -d /usr/nec ]; then
- echo mips-nec-sysv${UNAME_RELEASE}
- else
- echo mips-unknown-sysv${UNAME_RELEASE}
- fi
- exit ;;
- BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only.
- echo powerpc-be-beos
- exit ;;
- BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only.
- echo powerpc-apple-beos
- exit ;;
- BePC:BeOS:*:*) # BeOS running on Intel PC compatible.
- echo i586-pc-beos
- exit ;;
- SX-4:SUPER-UX:*:*)
- echo sx4-nec-superux${UNAME_RELEASE}
- exit ;;
- SX-5:SUPER-UX:*:*)
- echo sx5-nec-superux${UNAME_RELEASE}
- exit ;;
- SX-6:SUPER-UX:*:*)
- echo sx6-nec-superux${UNAME_RELEASE}
- exit ;;
- Power*:Rhapsody:*:*)
- echo powerpc-apple-rhapsody${UNAME_RELEASE}
- exit ;;
- *:Rhapsody:*:*)
- echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
- exit ;;
- *:Darwin:*:*)
- UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
- case $UNAME_PROCESSOR in
- *86) UNAME_PROCESSOR=i686 ;;
- unknown) UNAME_PROCESSOR=powerpc ;;
- esac
- echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
- exit ;;
- *:procnto*:*:* | *:QNX:[0123456789]*:*)
- UNAME_PROCESSOR=`uname -p`
- if test "$UNAME_PROCESSOR" = "x86"; then
- UNAME_PROCESSOR=i386
- UNAME_MACHINE=pc
- fi
- echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
- exit ;;
- *:QNX:*:4*)
- echo i386-pc-qnx
- exit ;;
- NSE-?:NONSTOP_KERNEL:*:*)
- echo nse-tandem-nsk${UNAME_RELEASE}
- exit ;;
- NSR-?:NONSTOP_KERNEL:*:*)
- echo nsr-tandem-nsk${UNAME_RELEASE}
- exit ;;
- *:NonStop-UX:*:*)
- echo mips-compaq-nonstopux
- exit ;;
- BS2000:POSIX*:*:*)
- echo bs2000-siemens-sysv
- exit ;;
- DS/*:UNIX_System_V:*:*)
- echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
- exit ;;
- *:Plan9:*:*)
- # "uname -m" is not consistent, so use $cputype instead. 386
- # is converted to i386 for consistency with other x86
- # operating systems.
- if test "$cputype" = "386"; then
- UNAME_MACHINE=i386
- else
- UNAME_MACHINE="$cputype"
- fi
- echo ${UNAME_MACHINE}-unknown-plan9
- exit ;;
- *:TOPS-10:*:*)
- echo pdp10-unknown-tops10
- exit ;;
- *:TENEX:*:*)
- echo pdp10-unknown-tenex
- exit ;;
- KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
- echo pdp10-dec-tops20
- exit ;;
- XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
- echo pdp10-xkl-tops20
- exit ;;
- *:TOPS-20:*:*)
- echo pdp10-unknown-tops20
- exit ;;
- *:ITS:*:*)
- echo pdp10-unknown-its
- exit ;;
- SEI:*:*:SEIUX)
- echo mips-sei-seiux${UNAME_RELEASE}
- exit ;;
- *:DragonFly:*:*)
- echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
- exit ;;
- *:*VMS:*:*)
- UNAME_MACHINE=`(uname -p) 2>/dev/null`
- case "${UNAME_MACHINE}" in
- A*) echo alpha-dec-vms ; exit ;;
- I*) echo ia64-dec-vms ; exit ;;
- V*) echo vax-dec-vms ; exit ;;
- esac ;;
- *:XENIX:*:SysV)
- echo i386-pc-xenix
- exit ;;
- i*86:skyos:*:*)
- echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'
- exit ;;
-esac
-
-#echo '(No uname command or uname output not recognized.)' 1>&2
-#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
-
-eval $set_cc_for_build
-cat >$dummy.c <<EOF
-#ifdef _SEQUENT_
-# include <sys/types.h>
-# include <sys/utsname.h>
-#endif
-main ()
-{
-#if defined (sony)
-#if defined (MIPSEB)
- /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed,
- I don't know.... */
- printf ("mips-sony-bsd\n"); exit (0);
-#else
-#include <sys/param.h>
- printf ("m68k-sony-newsos%s\n",
-#ifdef NEWSOS4
- "4"
-#else
- ""
-#endif
- ); exit (0);
-#endif
-#endif
-
-#if defined (__arm) && defined (__acorn) && defined (__unix)
- printf ("arm-acorn-riscix\n"); exit (0);
-#endif
-
-#if defined (hp300) && !defined (hpux)
- printf ("m68k-hp-bsd\n"); exit (0);
-#endif
-
-#if defined (NeXT)
-#if !defined (__ARCHITECTURE__)
-#define __ARCHITECTURE__ "m68k"
-#endif
- int version;
- version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
- if (version < 4)
- printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
- else
- printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
- exit (0);
-#endif
-
-#if defined (MULTIMAX) || defined (n16)
-#if defined (UMAXV)
- printf ("ns32k-encore-sysv\n"); exit (0);
-#else
-#if defined (CMU)
- printf ("ns32k-encore-mach\n"); exit (0);
-#else
- printf ("ns32k-encore-bsd\n"); exit (0);
-#endif
-#endif
-#endif
-
-#if defined (__386BSD__)
- printf ("i386-pc-bsd\n"); exit (0);
-#endif
-
-#if defined (sequent)
-#if defined (i386)
- printf ("i386-sequent-dynix\n"); exit (0);
-#endif
-#if defined (ns32000)
- printf ("ns32k-sequent-dynix\n"); exit (0);
-#endif
-#endif
-
-#if defined (_SEQUENT_)
- struct utsname un;
-
- uname(&un);
-
- if (strncmp(un.version, "V2", 2) == 0) {
- printf ("i386-sequent-ptx2\n"); exit (0);
- }
- if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
- printf ("i386-sequent-ptx1\n"); exit (0);
- }
- printf ("i386-sequent-ptx\n"); exit (0);
-
-#endif
-
-#if defined (vax)
-# if !defined (ultrix)
-# include <sys/param.h>
-# if defined (BSD)
-# if BSD == 43
- printf ("vax-dec-bsd4.3\n"); exit (0);
-# else
-# if BSD == 199006
- printf ("vax-dec-bsd4.3reno\n"); exit (0);
-# else
- printf ("vax-dec-bsd\n"); exit (0);
-# endif
-# endif
-# else
- printf ("vax-dec-bsd\n"); exit (0);
-# endif
-# else
- printf ("vax-dec-ultrix\n"); exit (0);
-# endif
-#endif
-
-#if defined (alliant) && defined (i860)
- printf ("i860-alliant-bsd\n"); exit (0);
-#endif
-
- exit (1);
-}
-EOF
-
-$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` &&
- { echo "$SYSTEM_NAME"; exit; }
-
-# Apollos put the system type in the environment.
-
-test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; }
-
-# Convex versions that predate uname can use getsysinfo(1)
-
-if [ -x /usr/convex/getsysinfo ]
-then
- case `getsysinfo -f cpu_type` in
- c1*)
- echo c1-convex-bsd
- exit ;;
- c2*)
- if getsysinfo -f scalar_acc
- then echo c32-convex-bsd
- else echo c2-convex-bsd
- fi
- exit ;;
- c34*)
- echo c34-convex-bsd
- exit ;;
- c38*)
- echo c38-convex-bsd
- exit ;;
- c4*)
- echo c4-convex-bsd
- exit ;;
- esac
-fi
-
-cat >&2 <<EOF
-$0: unable to guess system type
-
-This script, last modified $timestamp, has failed to recognize
-the operating system you are using. It is advised that you
-download the most up to date version of the config scripts from
-
- http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.guess
-and
- http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.sub
-
-If the version you run ($0) is already up to date, please
-send the following data and any information you think might be
-pertinent to <config-patches@gnu.org> in order to provide the needed
-information to handle your system.
-
-config.guess timestamp = $timestamp
-
-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`
-/bin/uname -X = `(/bin/uname -X) 2>/dev/null`
-
-hostinfo = `(hostinfo) 2>/dev/null`
-/bin/universe = `(/bin/universe) 2>/dev/null`
-/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null`
-/bin/arch = `(/bin/arch) 2>/dev/null`
-/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null`
-/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
-
-UNAME_MACHINE = ${UNAME_MACHINE}
-UNAME_RELEASE = ${UNAME_RELEASE}
-UNAME_SYSTEM = ${UNAME_SYSTEM}
-UNAME_VERSION = ${UNAME_VERSION}
-EOF
-
-exit 1
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "timestamp='"
-# time-stamp-format: "%:y-%02m-%02d"
-# time-stamp-end: "'"
-# End:
diff --git a/nx-X11/programs/xterm/config.sub b/nx-X11/programs/xterm/config.sub
deleted file mode 100644
index 8b2c57a6e..000000000
--- a/nx-X11/programs/xterm/config.sub
+++ /dev/null
@@ -1,1577 +0,0 @@
-#! /bin/sh
-# Configuration validation subroutine script.
-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-# 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
-
-timestamp='2005-06-02'
-
-# This file is (in principle) common to ALL GNU software.
-# The presence of a machine in this file suggests that SOME GNU software
-# can handle that machine. It does not imply ALL GNU software can.
-#
-# This file 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 2 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, write to the Free Software
-# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
-# 02110-1301, USA.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-
-# Please send patches to <config-patches@gnu.org>. Submit a context
-# diff and a properly formatted ChangeLog entry.
-#
-# Configuration subroutine to validate and canonicalize a configuration type.
-# Supply the specified configuration type as an argument.
-# If it is invalid, we print an error message on stderr and exit with code 1.
-# Otherwise, we print the canonical config type on stdout and succeed.
-
-# This file is supposed to be the same for all GNU packages
-# and recognize all the CPU types, system types and aliases
-# that are meaningful with *any* GNU software.
-# Each package is responsible for reporting which valid configurations
-# it does not support. The user should be able to distinguish
-# a failure to support a valid configuration from a meaningless
-# configuration.
-
-# The goal of this file is to map all the various variations of a given
-# machine specification into a single specification in the form:
-# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
-# or in some cases, the newer four-part form:
-# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
-# It is wrong to echo any other type of specification.
-
-me=`echo "$0" | sed -e 's,.*/,,'`
-
-usage="\
-Usage: $0 [OPTION] CPU-MFR-OPSYS
- $0 [OPTION] ALIAS
-
-Canonicalize a configuration name.
-
-Operation modes:
- -h, --help print this help, then exit
- -t, --time-stamp print date of last modification, then exit
- -v, --version print version number, then exit
-
-Report bugs and patches to <config-patches@gnu.org>."
-
-version="\
-GNU config.sub ($timestamp)
-
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
-Free Software Foundation, Inc.
-
-This is free software; see the source for copying conditions. There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
-
-help="
-Try \`$me --help' for more information."
-
-# Parse command line
-while test $# -gt 0 ; do
- case $1 in
- --time-stamp | --time* | -t )
- echo "$timestamp" ; exit ;;
- --version | -v )
- echo "$version" ; exit ;;
- --help | --h* | -h )
- echo "$usage"; exit ;;
- -- ) # Stop option processing
- shift; break ;;
- - ) # Use stdin as input.
- break ;;
- -* )
- echo "$me: invalid option $1$help"
- exit 1 ;;
-
- *local*)
- # First pass through any local machine types.
- echo $1
- exit ;;
-
- * )
- break ;;
- esac
-done
-
-case $# in
- 0) echo "$me: missing argument$help" >&2
- exit 1;;
- 1) ;;
- *) echo "$me: too many arguments$help" >&2
- exit 1;;
-esac
-
-# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
-# Here we must recognize all the valid KERNEL-OS combinations.
-maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
-case $maybe_os in
- nto-qnx* | linux-gnu* | linux-dietlibc | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | \
- kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*)
- os=-$maybe_os
- basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
- ;;
- *)
- basic_machine=`echo $1 | sed 's/-[^-]*$//'`
- if [ $basic_machine != $1 ]
- then os=`echo $1 | sed 's/.*-/-/'`
- else os=; fi
- ;;
-esac
-
-### Let's recognize common machines as not being operating systems so
-### that things like config.sub decstation-3100 work. We also
-### recognize some manufacturers as not being operating systems, so we
-### can provide default operating systems below.
-case $os in
- -sun*os*)
- # Prevent following clause from handling this invalid input.
- ;;
- -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
- -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
- -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
- -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
- -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
- -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
- -apple | -axis | -knuth | -cray)
- os=
- basic_machine=$1
- ;;
- -sim | -cisco | -oki | -wec | -winbond)
- os=
- basic_machine=$1
- ;;
- -scout)
- ;;
- -wrs)
- os=-vxworks
- basic_machine=$1
- ;;
- -chorusos*)
- os=-chorusos
- basic_machine=$1
- ;;
- -chorusrdb)
- os=-chorusrdb
- basic_machine=$1
- ;;
- -hiux*)
- os=-hiuxwe2
- ;;
- -sco5)
- os=-sco3.2v5
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco4)
- os=-sco3.2v4
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco3.2.[4-9]*)
- os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco3.2v[4-9]*)
- # Don't forget version if it is 3.2v4 or newer.
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco*)
- os=-sco3.2v2
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -udk*)
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -isc)
- os=-isc2.2
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -clix*)
- basic_machine=clipper-intergraph
- ;;
- -isc*)
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -lynx*)
- os=-lynxos
- ;;
- -ptx*)
- basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
- ;;
- -windowsnt*)
- os=`echo $os | sed -e 's/windowsnt/winnt/'`
- ;;
- -psos*)
- os=-psos
- ;;
- -mint | -mint[0-9]*)
- basic_machine=m68k-atari
- os=-mint
- ;;
-esac
-
-# Decode aliases for certain CPU-COMPANY combinations.
-case $basic_machine in
- # Recognize the basic CPU types without company name.
- # Some are omitted here because they have special meanings below.
- 1750a | 580 \
- | a29k \
- | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
- | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
- | am33_2.0 \
- | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
- | bfin \
- | c4x | clipper \
- | d10v | d30v | dlx | dsp16xx \
- | fr30 | frv \
- | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
- | i370 | i860 | i960 | ia64 \
- | ip2k | iq2000 \
- | m32r | m32rle | m68000 | m68k | m88k | maxq | mcore \
- | mips | mipsbe | mipseb | mipsel | mipsle \
- | mips16 \
- | mips64 | mips64el \
- | mips64vr | mips64vrel \
- | mips64orion | mips64orionel \
- | mips64vr4100 | mips64vr4100el \
- | mips64vr4300 | mips64vr4300el \
- | mips64vr5000 | mips64vr5000el \
- | mipsisa32 | mipsisa32el \
- | mipsisa32r2 | mipsisa32r2el \
- | mipsisa64 | mipsisa64el \
- | mipsisa64r2 | mipsisa64r2el \
- | mipsisa64sb1 | mipsisa64sb1el \
- | mipsisa64sr71k | mipsisa64sr71kel \
- | mipstx39 | mipstx39el \
- | mn10200 | mn10300 \
- | ms1 \
- | msp430 \
- | ns16k | ns32k \
- | openrisc | or32 \
- | pdp10 | pdp11 | pj | pjl \
- | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
- | pyramid \
- | sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \
- | sh64 | sh64le \
- | sparc | sparc64 | sparc64b | sparc86x | sparclet | sparclite \
- | sparcv8 | sparcv9 | sparcv9b \
- | strongarm \
- | tahoe | thumb | tic4x | tic80 | tron \
- | v850 | v850e \
- | we32k \
- | x86 | xscale | xscalee[bl] | xstormy16 | xtensa \
- | z8k)
- basic_machine=$basic_machine-unknown
- ;;
- m32c)
- basic_machine=$basic_machine-unknown
- ;;
- m6811 | m68hc11 | m6812 | m68hc12)
- # Motorola 68HC11/12.
- basic_machine=$basic_machine-unknown
- os=-none
- ;;
- m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
- ;;
-
- # We use `pc' rather than `unknown'
- # because (1) that's what they normally are, and
- # (2) the word "unknown" tends to confuse beginning users.
- i*86 | x86_64)
- basic_machine=$basic_machine-pc
- ;;
- # Object if more than one company name word.
- *-*-*)
- echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
- exit 1
- ;;
- # Recognize the basic CPU types with company name.
- 580-* \
- | a29k-* \
- | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
- | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
- | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
- | arm-* | armbe-* | armle-* | armeb-* | armv*-* \
- | avr-* \
- | bfin-* | bs2000-* \
- | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
- | clipper-* | craynv-* | cydra-* \
- | d10v-* | d30v-* | dlx-* \
- | elxsi-* \
- | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \
- | h8300-* | h8500-* \
- | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
- | i*86-* | i860-* | i960-* | ia64-* \
- | ip2k-* | iq2000-* \
- | m32r-* | m32rle-* \
- | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
- | m88110-* | m88k-* | maxq-* | mcore-* \
- | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
- | mips16-* \
- | mips64-* | mips64el-* \
- | mips64vr-* | mips64vrel-* \
- | mips64orion-* | mips64orionel-* \
- | mips64vr4100-* | mips64vr4100el-* \
- | mips64vr4300-* | mips64vr4300el-* \
- | mips64vr5000-* | mips64vr5000el-* \
- | mipsisa32-* | mipsisa32el-* \
- | mipsisa32r2-* | mipsisa32r2el-* \
- | mipsisa64-* | mipsisa64el-* \
- | mipsisa64r2-* | mipsisa64r2el-* \
- | mipsisa64sb1-* | mipsisa64sb1el-* \
- | mipsisa64sr71k-* | mipsisa64sr71kel-* \
- | mipstx39-* | mipstx39el-* \
- | mmix-* \
- | ms1-* \
- | msp430-* \
- | none-* | np1-* | ns16k-* | ns32k-* \
- | orion-* \
- | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
- | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
- | pyramid-* \
- | romp-* | rs6000-* \
- | sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \
- | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
- | sparc-* | sparc64-* | sparc64b-* | sparc86x-* | sparclet-* \
- | sparclite-* \
- | sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
- | tahoe-* | thumb-* \
- | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
- | tron-* \
- | v850-* | v850e-* | vax-* \
- | we32k-* \
- | x86-* | x86_64-* | xps100-* | xscale-* | xscalee[bl]-* \
- | xstormy16-* | xtensa-* \
- | ymp-* \
- | z8k-*)
- ;;
- m32c-*)
- ;;
- # Recognize the various machine names and aliases which stand
- # for a CPU type and a company and sometimes even an OS.
- 386bsd)
- basic_machine=i386-unknown
- os=-bsd
- ;;
- 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
- basic_machine=m68000-att
- ;;
- 3b*)
- basic_machine=we32k-att
- ;;
- a29khif)
- basic_machine=a29k-amd
- os=-udi
- ;;
- abacus)
- basic_machine=abacus-unknown
- ;;
- adobe68k)
- basic_machine=m68010-adobe
- os=-scout
- ;;
- alliant | fx80)
- basic_machine=fx80-alliant
- ;;
- altos | altos3068)
- basic_machine=m68k-altos
- ;;
- am29k)
- basic_machine=a29k-none
- os=-bsd
- ;;
- amd64)
- basic_machine=x86_64-pc
- ;;
- amd64-*)
- basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- amdahl)
- basic_machine=580-amdahl
- os=-sysv
- ;;
- amiga | amiga-*)
- basic_machine=m68k-unknown
- ;;
- amigaos | amigados)
- basic_machine=m68k-unknown
- os=-amigaos
- ;;
- amigaunix | amix)
- basic_machine=m68k-unknown
- os=-sysv4
- ;;
- apollo68)
- basic_machine=m68k-apollo
- os=-sysv
- ;;
- apollo68bsd)
- basic_machine=m68k-apollo
- os=-bsd
- ;;
- aux)
- basic_machine=m68k-apple
- os=-aux
- ;;
- balance)
- basic_machine=ns32k-sequent
- os=-dynix
- ;;
- c90)
- basic_machine=c90-cray
- os=-unicos
- ;;
- convex-c1)
- basic_machine=c1-convex
- os=-bsd
- ;;
- convex-c2)
- basic_machine=c2-convex
- os=-bsd
- ;;
- convex-c32)
- basic_machine=c32-convex
- os=-bsd
- ;;
- convex-c34)
- basic_machine=c34-convex
- os=-bsd
- ;;
- convex-c38)
- basic_machine=c38-convex
- os=-bsd
- ;;
- cray | j90)
- basic_machine=j90-cray
- os=-unicos
- ;;
- craynv)
- basic_machine=craynv-cray
- os=-unicosmp
- ;;
- cr16c)
- basic_machine=cr16c-unknown
- os=-elf
- ;;
- crds | unos)
- basic_machine=m68k-crds
- ;;
- crisv32 | crisv32-* | etraxfs*)
- basic_machine=crisv32-axis
- ;;
- cris | cris-* | etrax*)
- basic_machine=cris-axis
- ;;
- crx)
- basic_machine=crx-unknown
- os=-elf
- ;;
- da30 | da30-*)
- basic_machine=m68k-da30
- ;;
- decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
- basic_machine=mips-dec
- ;;
- decsystem10* | dec10*)
- basic_machine=pdp10-dec
- os=-tops10
- ;;
- decsystem20* | dec20*)
- basic_machine=pdp10-dec
- os=-tops20
- ;;
- delta | 3300 | motorola-3300 | motorola-delta \
- | 3300-motorola | delta-motorola)
- basic_machine=m68k-motorola
- ;;
- delta88)
- basic_machine=m88k-motorola
- os=-sysv3
- ;;
- djgpp)
- basic_machine=i586-pc
- os=-msdosdjgpp
- ;;
- dpx20 | dpx20-*)
- basic_machine=rs6000-bull
- os=-bosx
- ;;
- dpx2* | dpx2*-bull)
- basic_machine=m68k-bull
- os=-sysv3
- ;;
- ebmon29k)
- basic_machine=a29k-amd
- os=-ebmon
- ;;
- elxsi)
- basic_machine=elxsi-elxsi
- os=-bsd
- ;;
- encore | umax | mmax)
- basic_machine=ns32k-encore
- ;;
- es1800 | OSE68k | ose68k | ose | OSE)
- basic_machine=m68k-ericsson
- os=-ose
- ;;
- fx2800)
- basic_machine=i860-alliant
- ;;
- genix)
- basic_machine=ns32k-ns
- ;;
- gmicro)
- basic_machine=tron-gmicro
- os=-sysv
- ;;
- go32)
- basic_machine=i386-pc
- os=-go32
- ;;
- h3050r* | hiux*)
- basic_machine=hppa1.1-hitachi
- os=-hiuxwe2
- ;;
- h8300hms)
- basic_machine=h8300-hitachi
- os=-hms
- ;;
- h8300xray)
- basic_machine=h8300-hitachi
- os=-xray
- ;;
- h8500hms)
- basic_machine=h8500-hitachi
- os=-hms
- ;;
- harris)
- basic_machine=m88k-harris
- os=-sysv3
- ;;
- hp300-*)
- basic_machine=m68k-hp
- ;;
- hp300bsd)
- basic_machine=m68k-hp
- os=-bsd
- ;;
- hp300hpux)
- basic_machine=m68k-hp
- os=-hpux
- ;;
- hp3k9[0-9][0-9] | hp9[0-9][0-9])
- basic_machine=hppa1.0-hp
- ;;
- hp9k2[0-9][0-9] | hp9k31[0-9])
- basic_machine=m68000-hp
- ;;
- hp9k3[2-9][0-9])
- basic_machine=m68k-hp
- ;;
- hp9k6[0-9][0-9] | hp6[0-9][0-9])
- basic_machine=hppa1.0-hp
- ;;
- hp9k7[0-79][0-9] | hp7[0-79][0-9])
- basic_machine=hppa1.1-hp
- ;;
- hp9k78[0-9] | hp78[0-9])
- # FIXME: really hppa2.0-hp
- basic_machine=hppa1.1-hp
- ;;
- hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
- # FIXME: really hppa2.0-hp
- basic_machine=hppa1.1-hp
- ;;
- hp9k8[0-9][13679] | hp8[0-9][13679])
- basic_machine=hppa1.1-hp
- ;;
- hp9k8[0-9][0-9] | hp8[0-9][0-9])
- basic_machine=hppa1.0-hp
- ;;
- hppa-next)
- os=-nextstep3
- ;;
- hppaosf)
- basic_machine=hppa1.1-hp
- os=-osf
- ;;
- hppro)
- basic_machine=hppa1.1-hp
- os=-proelf
- ;;
- i370-ibm* | ibm*)
- basic_machine=i370-ibm
- ;;
-# I'm not sure what "Sysv32" means. Should this be sysv3.2?
- i*86v32)
- basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
- os=-sysv32
- ;;
- i*86v4*)
- basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
- os=-sysv4
- ;;
- i*86v)
- basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
- os=-sysv
- ;;
- i*86sol2)
- basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
- os=-solaris2
- ;;
- i386mach)
- basic_machine=i386-mach
- os=-mach
- ;;
- i386-vsta | vsta)
- basic_machine=i386-unknown
- os=-vsta
- ;;
- iris | iris4d)
- basic_machine=mips-sgi
- case $os in
- -irix*)
- ;;
- *)
- os=-irix4
- ;;
- esac
- ;;
- isi68 | isi)
- basic_machine=m68k-isi
- os=-sysv
- ;;
- m88k-omron*)
- basic_machine=m88k-omron
- ;;
- magnum | m3230)
- basic_machine=mips-mips
- os=-sysv
- ;;
- merlin)
- basic_machine=ns32k-utek
- os=-sysv
- ;;
- mingw32)
- basic_machine=i386-pc
- os=-mingw32
- ;;
- miniframe)
- basic_machine=m68000-convergent
- ;;
- *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
- basic_machine=m68k-atari
- os=-mint
- ;;
- mips3*-*)
- basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
- ;;
- mips3*)
- basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
- ;;
- monitor)
- basic_machine=m68k-rom68k
- os=-coff
- ;;
- morphos)
- basic_machine=powerpc-unknown
- os=-morphos
- ;;
- msdos)
- basic_machine=i386-pc
- os=-msdos
- ;;
- mvs)
- basic_machine=i370-ibm
- os=-mvs
- ;;
- ncr3000)
- basic_machine=i486-ncr
- os=-sysv4
- ;;
- netbsd386)
- basic_machine=i386-unknown
- os=-netbsd
- ;;
- netwinder)
- basic_machine=armv4l-rebel
- os=-linux
- ;;
- news | news700 | news800 | news900)
- basic_machine=m68k-sony
- os=-newsos
- ;;
- news1000)
- basic_machine=m68030-sony
- os=-newsos
- ;;
- news-3600 | risc-news)
- basic_machine=mips-sony
- os=-newsos
- ;;
- necv70)
- basic_machine=v70-nec
- os=-sysv
- ;;
- next | m*-next )
- basic_machine=m68k-next
- case $os in
- -nextstep* )
- ;;
- -ns2*)
- os=-nextstep2
- ;;
- *)
- os=-nextstep3
- ;;
- esac
- ;;
- nh3000)
- basic_machine=m68k-harris
- os=-cxux
- ;;
- nh[45]000)
- basic_machine=m88k-harris
- os=-cxux
- ;;
- nindy960)
- basic_machine=i960-intel
- os=-nindy
- ;;
- mon960)
- basic_machine=i960-intel
- os=-mon960
- ;;
- nonstopux)
- basic_machine=mips-compaq
- os=-nonstopux
- ;;
- np1)
- basic_machine=np1-gould
- ;;
- nsr-tandem)
- basic_machine=nsr-tandem
- ;;
- op50n-* | op60c-*)
- basic_machine=hppa1.1-oki
- os=-proelf
- ;;
- or32 | or32-*)
- basic_machine=or32-unknown
- os=-coff
- ;;
- os400)
- basic_machine=powerpc-ibm
- os=-os400
- ;;
- OSE68000 | ose68000)
- basic_machine=m68000-ericsson
- os=-ose
- ;;
- os68k)
- basic_machine=m68k-none
- os=-os68k
- ;;
- pa-hitachi)
- basic_machine=hppa1.1-hitachi
- os=-hiuxwe2
- ;;
- paragon)
- basic_machine=i860-intel
- os=-osf
- ;;
- pbd)
- basic_machine=sparc-tti
- ;;
- pbb)
- basic_machine=m68k-tti
- ;;
- pc532 | pc532-*)
- basic_machine=ns32k-pc532
- ;;
- pentium | p5 | k5 | k6 | nexgen | viac3)
- basic_machine=i586-pc
- ;;
- pentiumpro | p6 | 6x86 | athlon | athlon_*)
- basic_machine=i686-pc
- ;;
- pentiumii | pentium2 | pentiumiii | pentium3)
- basic_machine=i686-pc
- ;;
- pentium4)
- basic_machine=i786-pc
- ;;
- pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
- basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- pentiumpro-* | p6-* | 6x86-* | athlon-*)
- basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
- basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- pentium4-*)
- basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- pn)
- basic_machine=pn-gould
- ;;
- power) basic_machine=power-ibm
- ;;
- ppc) basic_machine=powerpc-unknown
- ;;
- ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- ppcle | powerpclittle | ppc-le | powerpc-little)
- basic_machine=powerpcle-unknown
- ;;
- ppcle-* | powerpclittle-*)
- basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- ppc64) basic_machine=powerpc64-unknown
- ;;
- ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- ppc64le | powerpc64little | ppc64-le | powerpc64-little)
- basic_machine=powerpc64le-unknown
- ;;
- ppc64le-* | powerpc64little-*)
- basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- ps2)
- basic_machine=i386-ibm
- ;;
- pw32)
- basic_machine=i586-unknown
- os=-pw32
- ;;
- rom68k)
- basic_machine=m68k-rom68k
- os=-coff
- ;;
- rm[46]00)
- basic_machine=mips-siemens
- ;;
- rtpc | rtpc-*)
- basic_machine=romp-ibm
- ;;
- s390 | s390-*)
- basic_machine=s390-ibm
- ;;
- s390x | s390x-*)
- basic_machine=s390x-ibm
- ;;
- sa29200)
- basic_machine=a29k-amd
- os=-udi
- ;;
- sb1)
- basic_machine=mipsisa64sb1-unknown
- ;;
- sb1el)
- basic_machine=mipsisa64sb1el-unknown
- ;;
- sei)
- basic_machine=mips-sei
- os=-seiux
- ;;
- sequent)
- basic_machine=i386-sequent
- ;;
- sh)
- basic_machine=sh-hitachi
- os=-hms
- ;;
- sh64)
- basic_machine=sh64-unknown
- ;;
- sparclite-wrs | simso-wrs)
- basic_machine=sparclite-wrs
- os=-vxworks
- ;;
- sps7)
- basic_machine=m68k-bull
- os=-sysv2
- ;;
- spur)
- basic_machine=spur-unknown
- ;;
- st2000)
- basic_machine=m68k-tandem
- ;;
- stratus)
- basic_machine=i860-stratus
- os=-sysv4
- ;;
- sun2)
- basic_machine=m68000-sun
- ;;
- sun2os3)
- basic_machine=m68000-sun
- os=-sunos3
- ;;
- sun2os4)
- basic_machine=m68000-sun
- os=-sunos4
- ;;
- sun3os3)
- basic_machine=m68k-sun
- os=-sunos3
- ;;
- sun3os4)
- basic_machine=m68k-sun
- os=-sunos4
- ;;
- sun4os3)
- basic_machine=sparc-sun
- os=-sunos3
- ;;
- sun4os4)
- basic_machine=sparc-sun
- os=-sunos4
- ;;
- sun4sol2)
- basic_machine=sparc-sun
- os=-solaris2
- ;;
- sun3 | sun3-*)
- basic_machine=m68k-sun
- ;;
- sun4)
- basic_machine=sparc-sun
- ;;
- sun386 | sun386i | roadrunner)
- basic_machine=i386-sun
- ;;
- sv1)
- basic_machine=sv1-cray
- os=-unicos
- ;;
- symmetry)
- basic_machine=i386-sequent
- os=-dynix
- ;;
- t3e)
- basic_machine=alphaev5-cray
- os=-unicos
- ;;
- t90)
- basic_machine=t90-cray
- os=-unicos
- ;;
- tic54x | c54x*)
- basic_machine=tic54x-unknown
- os=-coff
- ;;
- tic55x | c55x*)
- basic_machine=tic55x-unknown
- os=-coff
- ;;
- tic6x | c6x*)
- basic_machine=tic6x-unknown
- os=-coff
- ;;
- tx39)
- basic_machine=mipstx39-unknown
- ;;
- tx39el)
- basic_machine=mipstx39el-unknown
- ;;
- toad1)
- basic_machine=pdp10-xkl
- os=-tops20
- ;;
- tower | tower-32)
- basic_machine=m68k-ncr
- ;;
- tpf)
- basic_machine=s390x-ibm
- os=-tpf
- ;;
- udi29k)
- basic_machine=a29k-amd
- os=-udi
- ;;
- ultra3)
- basic_machine=a29k-nyu
- os=-sym1
- ;;
- v810 | necv810)
- basic_machine=v810-nec
- os=-none
- ;;
- vaxv)
- basic_machine=vax-dec
- os=-sysv
- ;;
- vms)
- basic_machine=vax-dec
- os=-vms
- ;;
- vpp*|vx|vx-*)
- basic_machine=f301-fujitsu
- ;;
- vxworks960)
- basic_machine=i960-wrs
- os=-vxworks
- ;;
- vxworks68)
- basic_machine=m68k-wrs
- os=-vxworks
- ;;
- vxworks29k)
- basic_machine=a29k-wrs
- os=-vxworks
- ;;
- w65*)
- basic_machine=w65-wdc
- os=-none
- ;;
- w89k-*)
- basic_machine=hppa1.1-winbond
- os=-proelf
- ;;
- xbox)
- basic_machine=i686-pc
- os=-mingw32
- ;;
- xps | xps100)
- basic_machine=xps100-honeywell
- ;;
- ymp)
- basic_machine=ymp-cray
- os=-unicos
- ;;
- z8k-*-coff)
- basic_machine=z8k-unknown
- os=-sim
- ;;
- none)
- basic_machine=none-none
- os=-none
- ;;
-
-# Here we handle the default manufacturer of certain CPU types. It is in
-# some cases the only manufacturer, in others, it is the most popular.
- w89k)
- basic_machine=hppa1.1-winbond
- ;;
- op50n)
- basic_machine=hppa1.1-oki
- ;;
- op60c)
- basic_machine=hppa1.1-oki
- ;;
- romp)
- basic_machine=romp-ibm
- ;;
- mmix)
- basic_machine=mmix-knuth
- ;;
- rs6000)
- basic_machine=rs6000-ibm
- ;;
- vax)
- basic_machine=vax-dec
- ;;
- pdp10)
- # there are many clones, so DEC is not a safe bet
- basic_machine=pdp10-unknown
- ;;
- pdp11)
- basic_machine=pdp11-dec
- ;;
- we32k)
- basic_machine=we32k-att
- ;;
- sh3 | sh4 | sh[34]eb | sh[1234]le | sh[23]ele)
- basic_machine=sh-unknown
- ;;
- sh64)
- basic_machine=sh64-unknown
- ;;
- sparc | sparcv8 | sparcv9 | sparcv9b)
- basic_machine=sparc-sun
- ;;
- cydra)
- basic_machine=cydra-cydrome
- ;;
- orion)
- basic_machine=orion-highlevel
- ;;
- orion105)
- basic_machine=clipper-highlevel
- ;;
- mac | mpw | mac-mpw)
- basic_machine=m68k-apple
- ;;
- pmac | pmac-mpw)
- basic_machine=powerpc-apple
- ;;
- *-unknown)
- # Make sure to match an already-canonicalized machine name.
- ;;
- *)
- echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
- exit 1
- ;;
-esac
-
-# Here we canonicalize certain aliases for manufacturers.
-case $basic_machine in
- *-digital*)
- basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
- ;;
- *-commodore*)
- basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
- ;;
- *)
- ;;
-esac
-
-# Decode manufacturer-specific aliases for certain operating systems.
-
-if [ x"$os" != x"" ]
-then
-case $os in
- # First match some system type aliases
- # that might get confused with valid system types.
- # -solaris* is a basic system type, with this one exception.
- -solaris1 | -solaris1.*)
- os=`echo $os | sed -e 's|solaris1|sunos4|'`
- ;;
- -solaris)
- os=-solaris2
- ;;
- -svr4*)
- os=-sysv4
- ;;
- -unixware*)
- os=-sysv4.2uw
- ;;
- -gnu/linux*)
- os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
- ;;
- # First accept the basic system types.
- # The portable systems comes first.
- # Each alternative MUST END IN A *, to match a version number.
- # -sysv* is not here because it comes later, after sysvr4.
- -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
- | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
- | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
- | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
- | -aos* \
- | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
- | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
- | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* | -openbsd* \
- | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
- | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
- | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
- | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
- | -chorusos* | -chorusrdb* \
- | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
- | -mingw32* | -linux-gnu* | -linux-uclibc* | -uxpv* | -beos* | -mpeix* | -udk* \
- | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
- | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
- | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
- | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
- | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
- | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* | -skyos*)
- # Remember, each alternative MUST END IN *, to match a version number.
- ;;
- -qnx*)
- case $basic_machine in
- x86-* | i*86-*)
- ;;
- *)
- os=-nto$os
- ;;
- esac
- ;;
- -nto-qnx*)
- ;;
- -nto*)
- os=`echo $os | sed -e 's|nto|nto-qnx|'`
- ;;
- -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
- | -windows* | -osx | -abug | -netware* | -os9* | -beos* \
- | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
- ;;
- -mac*)
- os=`echo $os | sed -e 's|mac|macos|'`
- ;;
- -linux-dietlibc)
- os=-linux-dietlibc
- ;;
- -linux*)
- os=`echo $os | sed -e 's|linux|linux-gnu|'`
- ;;
- -sunos5*)
- os=`echo $os | sed -e 's|sunos5|solaris2|'`
- ;;
- -sunos6*)
- os=`echo $os | sed -e 's|sunos6|solaris3|'`
- ;;
- -opened*)
- os=-openedition
- ;;
- -os400*)
- os=-os400
- ;;
- -wince*)
- os=-wince
- ;;
- -osfrose*)
- os=-osfrose
- ;;
- -osf*)
- os=-osf
- ;;
- -utek*)
- os=-bsd
- ;;
- -dynix*)
- os=-bsd
- ;;
- -acis*)
- os=-aos
- ;;
- -atheos*)
- os=-atheos
- ;;
- -syllable*)
- os=-syllable
- ;;
- -386bsd)
- os=-bsd
- ;;
- -ctix* | -uts*)
- os=-sysv
- ;;
- -nova*)
- os=-rtmk-nova
- ;;
- -ns2 )
- os=-nextstep2
- ;;
- -nsk*)
- os=-nsk
- ;;
- # Preserve the version number of sinix5.
- -sinix5.*)
- os=`echo $os | sed -e 's|sinix|sysv|'`
- ;;
- -sinix*)
- os=-sysv4
- ;;
- -tpf*)
- os=-tpf
- ;;
- -triton*)
- os=-sysv3
- ;;
- -oss*)
- os=-sysv3
- ;;
- -svr4)
- os=-sysv4
- ;;
- -svr3)
- os=-sysv3
- ;;
- -sysvr4)
- os=-sysv4
- ;;
- # This must come after -sysvr4.
- -sysv*)
- ;;
- -ose*)
- os=-ose
- ;;
- -es1800*)
- os=-ose
- ;;
- -xenix)
- os=-xenix
- ;;
- -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
- os=-mint
- ;;
- -aros*)
- os=-aros
- ;;
- -kaos*)
- os=-kaos
- ;;
- -zvmoe)
- os=-zvmoe
- ;;
- -none)
- ;;
- *)
- # Get rid of the `-' at the beginning of $os.
- os=`echo $os | sed 's/[^-]*-//'`
- echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
- exit 1
- ;;
-esac
-else
-
-# Here we handle the default operating systems that come with various machines.
-# The value should be what the vendor currently ships out the door with their
-# machine or put another way, the most popular os provided with the machine.
-
-# Note that if you're going to try to match "-MANUFACTURER" here (say,
-# "-sun"), then you have to tell the case statement up towards the top
-# that MANUFACTURER isn't an operating system. Otherwise, code above
-# will signal an error saying that MANUFACTURER isn't an operating
-# system, and we'll never get to this point.
-
-case $basic_machine in
- *-acorn)
- os=-riscix1.2
- ;;
- arm*-rebel)
- os=-linux
- ;;
- arm*-semi)
- os=-aout
- ;;
- c4x-* | tic4x-*)
- os=-coff
- ;;
- # This must come before the *-dec entry.
- pdp10-*)
- os=-tops20
- ;;
- pdp11-*)
- os=-none
- ;;
- *-dec | vax-*)
- os=-ultrix4.2
- ;;
- m68*-apollo)
- os=-domain
- ;;
- i386-sun)
- os=-sunos4.0.2
- ;;
- m68000-sun)
- os=-sunos3
- # This also exists in the configure program, but was not the
- # default.
- # os=-sunos4
- ;;
- m68*-cisco)
- os=-aout
- ;;
- mips*-cisco)
- os=-elf
- ;;
- mips*-*)
- os=-elf
- ;;
- or32-*)
- os=-coff
- ;;
- *-tti) # must be before sparc entry or we get the wrong os.
- os=-sysv3
- ;;
- sparc-* | *-sun)
- os=-sunos4.1.1
- ;;
- *-be)
- os=-beos
- ;;
- *-ibm)
- os=-aix
- ;;
- *-knuth)
- os=-mmixware
- ;;
- *-wec)
- os=-proelf
- ;;
- *-winbond)
- os=-proelf
- ;;
- *-oki)
- os=-proelf
- ;;
- *-hp)
- os=-hpux
- ;;
- *-hitachi)
- os=-hiux
- ;;
- i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
- os=-sysv
- ;;
- *-cbm)
- os=-amigaos
- ;;
- *-dg)
- os=-dgux
- ;;
- *-dolphin)
- os=-sysv3
- ;;
- m68k-ccur)
- os=-rtu
- ;;
- m88k-omron*)
- os=-luna
- ;;
- *-next )
- os=-nextstep
- ;;
- *-sequent)
- os=-ptx
- ;;
- *-crds)
- os=-unos
- ;;
- *-ns)
- os=-genix
- ;;
- i370-*)
- os=-mvs
- ;;
- *-next)
- os=-nextstep3
- ;;
- *-gould)
- os=-sysv
- ;;
- *-highlevel)
- os=-bsd
- ;;
- *-encore)
- os=-bsd
- ;;
- *-sgi)
- os=-irix
- ;;
- *-siemens)
- os=-sysv4
- ;;
- *-masscomp)
- os=-rtu
- ;;
- f30[01]-fujitsu | f700-fujitsu)
- os=-uxpv
- ;;
- *-rom68k)
- os=-coff
- ;;
- *-*bug)
- os=-coff
- ;;
- *-apple)
- os=-macos
- ;;
- *-atari*)
- os=-mint
- ;;
- *)
- os=-none
- ;;
-esac
-fi
-
-# Here we handle the case where we know the os, and the CPU type, but not the
-# manufacturer. We pick the logical manufacturer.
-vendor=unknown
-case $basic_machine in
- *-unknown)
- case $os in
- -riscix*)
- vendor=acorn
- ;;
- -sunos*)
- vendor=sun
- ;;
- -aix*)
- vendor=ibm
- ;;
- -beos*)
- vendor=be
- ;;
- -hpux*)
- vendor=hp
- ;;
- -mpeix*)
- vendor=hp
- ;;
- -hiux*)
- vendor=hitachi
- ;;
- -unos*)
- vendor=crds
- ;;
- -dgux*)
- vendor=dg
- ;;
- -luna*)
- vendor=omron
- ;;
- -genix*)
- vendor=ns
- ;;
- -mvs* | -opened*)
- vendor=ibm
- ;;
- -os400*)
- vendor=ibm
- ;;
- -ptx*)
- vendor=sequent
- ;;
- -tpf*)
- vendor=ibm
- ;;
- -vxsim* | -vxworks* | -windiss*)
- vendor=wrs
- ;;
- -aux*)
- vendor=apple
- ;;
- -hms*)
- vendor=hitachi
- ;;
- -mpw* | -macos*)
- vendor=apple
- ;;
- -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
- vendor=atari
- ;;
- -vos*)
- vendor=stratus
- ;;
- esac
- basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
- ;;
-esac
-
-echo $basic_machine$os
-exit
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "timestamp='"
-# time-stamp-format: "%:y-%02m-%02d"
-# time-stamp-end: "'"
-# End:
diff --git a/nx-X11/programs/xterm/configure b/nx-X11/programs/xterm/configure
deleted file mode 100644
index 7cdc6da4f..000000000
--- a/nx-X11/programs/xterm/configure
+++ /dev/null
@@ -1,11548 +0,0 @@
-#! /bin/sh
-# Guess values for system-dependent variables and create Makefiles.
-# Generated by Autoconf 2.52.20030208.
-#
-# Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001
-# Free Software Foundation, Inc.
-# This configure script is free software; the Free Software Foundation
-# gives unlimited permission to copy, distribute and modify it.
-
-# 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
-
-# Sed expression to map a string onto a valid variable name.
-as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g"
-
-# Sed expression to map a string onto a valid CPP name.
-as_tr_cpp="sed y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g"
-
-# Be Bourne compatible
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
- emulate sh
- NULLCMD=:
-elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
- set -o posix
-fi
-
-# Name of the executable.
-as_me=`echo "$0" |sed 's,.*[\\/],,'`
-
-if expr a : '\(a\)' >/dev/null 2>&1; then
- as_expr=expr
-else
- as_expr=false
-fi
-
-rm -f conf$$ conf$$.exe conf$$.file
-echo >conf$$.file
-if ln -s conf$$.file conf$$ 2>/dev/null; then
- # We could just check for DJGPP; but this test a) works b) is more generic
- # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
- if test -f conf$$.exe; then
- # Don't use ln at all; we don't have any links
- as_ln_s='cp -p'
- else
- as_ln_s='ln -s'
- fi
-elif ln conf$$.file conf$$ 2>/dev/null; then
- as_ln_s=ln
-else
- as_ln_s='cp -p'
-fi
-rm -f conf$$ conf$$.exe conf$$.file
-
-as_executable_p="test -f"
-
-# Support unset when possible.
-if (FOO=FOO; unset FOO) >/dev/null 2>&1; then
- as_unset=unset
-else
- as_unset=false
-fi
-
-# NLS nuisances.
-$as_unset LANG || test "${LANG+set}" != set || { LANG=C; export LANG; }
-$as_unset LC_ALL || test "${LC_ALL+set}" != set || { LC_ALL=C; export LC_ALL; }
-$as_unset LC_TIME || test "${LC_TIME+set}" != set || { LC_TIME=C; export LC_TIME; }
-$as_unset LC_CTYPE || test "${LC_CTYPE+set}" != set || { LC_CTYPE=C; export LC_CTYPE; }
-$as_unset LANGUAGE || test "${LANGUAGE+set}" != set || { LANGUAGE=C; export LANGUAGE; }
-$as_unset LC_COLLATE || test "${LC_COLLATE+set}" != set || { LC_COLLATE=C; export LC_COLLATE; }
-$as_unset LC_NUMERIC || test "${LC_NUMERIC+set}" != set || { LC_NUMERIC=C; export LC_NUMERIC; }
-$as_unset LC_MESSAGES || test "${LC_MESSAGES+set}" != set || { LC_MESSAGES=C; export LC_MESSAGES; }
-
-# IFS
-# We need space, tab and new line, in precisely that order.
-as_nl='
-'
-IFS=" $as_nl"
-
-# CDPATH.
-$as_unset CDPATH || test "${CDPATH+set}" != set || { CDPATH=:; export CDPATH; }
-
-# Name of the host.
-# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
-# so uname gets run too.
-ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
-
-exec 6>&1
-
-#
-# Initializations.
-#
-ac_default_prefix=/usr/local
-cross_compiling=no
-subdirs=
-MFLAGS= MAKEFLAGS=
-SHELL=${CONFIG_SHELL-/bin/sh}
-
-# Maximum number of lines to put in a shell here document.
-# This variable seems obsolete. It should probably be removed, and
-# only ac_max_sed_lines should be used.
-: ${ac_max_here_lines=38}
-
-ac_unique_file="charproc.c"
-# Factoring default headers for most tests.
-ac_includes_default="\
-#include <stdio.h>
-#if HAVE_SYS_TYPES_H
-# include <sys/types.h>
-#endif
-#if HAVE_SYS_STAT_H
-# include <sys/stat.h>
-#endif
-#if STDC_HEADERS
-# include <stdlib.h>
-# include <stddef.h>
-#else
-# if HAVE_STDLIB_H
-# include <stdlib.h>
-# endif
-#endif
-#if HAVE_STRING_H
-# if !STDC_HEADERS && HAVE_MEMORY_H
-# include <memory.h>
-# endif
-# include <string.h>
-#endif
-#if HAVE_STRINGS_H
-# include <strings.h>
-#endif
-#if HAVE_INTTYPES_H
-# include <inttypes.h>
-#else
-# if HAVE_STDINT_H
-# include <stdint.h>
-# endif
-#endif
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#endif"
-
-# Initialize some variables set by options.
-ac_init_help=
-ac_init_version=false
-# 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.
-bindir='${exec_prefix}/bin'
-sbindir='${exec_prefix}/sbin'
-libexecdir='${exec_prefix}/libexec'
-datadir='${prefix}/share'
-sysconfdir='${prefix}/etc'
-sharedstatedir='${prefix}/com'
-localstatedir='${prefix}/var'
-libdir='${exec_prefix}/lib'
-includedir='${prefix}/include'
-oldincludedir='/usr/include'
-infodir='${prefix}/info'
-mandir='${prefix}/man'
-
-# Identity of this package.
-PACKAGE_NAME=
-PACKAGE_TARNAME=
-PACKAGE_VERSION=
-PACKAGE_STRING=
-PACKAGE_BUGREPORT=
-
-ac_prev=
-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
-
- ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
-
- # Accept the important Cygnus configure options, so we can diagnose typos.
-
- case $ac_option in
-
- -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 | --data | --dat | --da)
- ac_prev=datadir ;;
- -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
- | --da=*)
- datadir=$ac_optarg ;;
-
- -disable-* | --disable-*)
- ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
- { echo "$as_me: error: invalid feature name: $ac_feature" >&2
- { (exit 1); exit 1; }; }
- ac_feature=`echo $ac_feature | sed 's/-/_/g'`
- eval "enable_$ac_feature=no" ;;
-
- -enable-* | --enable-*)
- ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
- { echo "$as_me: error: invalid feature name: $ac_feature" >&2
- { (exit 1); exit 1; }; }
- ac_feature=`echo $ac_feature | sed 's/-/_/g'`
- case $ac_option in
- *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
- *) ac_optarg=yes ;;
- esac
- eval "enable_$ac_feature='$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 ;;
-
- -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 ;;
-
- -localstatedir | --localstatedir | --localstatedi | --localstated \
- | --localstate | --localstat | --localsta | --localst \
- | --locals | --local | --loca | --loc | --lo)
- ac_prev=localstatedir ;;
- -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
- | --localstate=* | --localstat=* | --localsta=* | --localst=* \
- | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
- 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)
- 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 ;;
-
- -q | -quiet | --quiet | --quie | --qui | --qu | --q \
- | -silent | --silent | --silen | --sile | --sil)
- silent=yes ;;
-
- -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_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
- { echo "$as_me: error: invalid package name: $ac_package" >&2
- { (exit 1); exit 1; }; }
- ac_package=`echo $ac_package| sed 's/-/_/g'`
- case $ac_option in
- *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
- *) ac_optarg=yes ;;
- esac
- eval "with_$ac_package='$ac_optarg'" ;;
-
- -without-* | --without-*)
- ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
- { echo "$as_me: error: invalid package name: $ac_package" >&2
- { (exit 1); exit 1; }; }
- ac_package=`echo $ac_package | sed 's/-/_/g'`
- eval "with_$ac_package=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 ;;
-
- -*) { echo "$as_me: error: unrecognized option: $ac_option
-Try \`$0 --help' for more information." >&2
- { (exit 1); exit 1; }; }
- ;;
-
- *=*)
- ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
- # Reject names that are not valid shell variable names.
- expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
- { echo "$as_me: error: invalid variable name: $ac_envvar" >&2
- { (exit 1); exit 1; }; }
- ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`
- eval "$ac_envvar='$ac_optarg'"
- export $ac_envvar ;;
-
- *)
- # FIXME: should be removed in autoconf 3.0.
- echo "$as_me: WARNING: you should use --build, --host, --target" >&2
- expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
- echo "$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'`
- { echo "$as_me: error: missing argument to $ac_option" >&2
- { (exit 1); exit 1; }; }
-fi
-
-# Be sure to have absolute paths.
-for ac_var in exec_prefix prefix
-do
- eval ac_val=$`echo $ac_var`
- case $ac_val in
- [\\/$]* | ?:[\\/]* | NONE | '' ) ;;
- *) { echo "$as_me: error: expected an absolute path for --$ac_var: $ac_val" >&2
- { (exit 1); exit 1; }; };;
- esac
-done
-
-# Be sure to have absolute paths.
-for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \
- localstatedir libdir includedir oldincludedir infodir mandir
-do
- eval ac_val=$`echo $ac_var`
- case $ac_val in
- [\\/$]* | ?:[\\/]* ) ;;
- *) { echo "$as_me: error: expected an absolute path for --$ac_var: $ac_val" >&2
- { (exit 1); exit 1; }; };;
- esac
-done
-
-# There might be people who depend on the old broken behavior: `$host'
-# used to hold the argument of --host etc.
-build=$build_alias
-host=$host_alias
-target=$target_alias
-
-# FIXME: should be removed in autoconf 3.0.
-if test "x$host_alias" != x; then
- if test "x$build_alias" = x; then
- cross_compiling=maybe
- echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
- If a cross compiler is detected then cross compile mode will be used." >&2
- 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
-
-# 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 its parent.
- ac_prog=$0
- ac_confdir=`echo "$ac_prog" | sed 's%[\\/][^\\/][^\\/]*$%%'`
- test "x$ac_confdir" = "x$ac_prog" && ac_confdir=.
- 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
- if test "$ac_srcdir_defaulted" = yes; then
- { echo "$as_me: error: cannot find sources in $ac_confdir or .." >&2
- { (exit 1); exit 1; }; }
- else
- { echo "$as_me: error: cannot find sources in $srcdir" >&2
- { (exit 1); exit 1; }; }
- fi
-fi
-srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'`
-ac_env_build_alias_set=${build_alias+set}
-ac_env_build_alias_value=$build_alias
-ac_cv_env_build_alias_set=${build_alias+set}
-ac_cv_env_build_alias_value=$build_alias
-ac_env_host_alias_set=${host_alias+set}
-ac_env_host_alias_value=$host_alias
-ac_cv_env_host_alias_set=${host_alias+set}
-ac_cv_env_host_alias_value=$host_alias
-ac_env_target_alias_set=${target_alias+set}
-ac_env_target_alias_value=$target_alias
-ac_cv_env_target_alias_set=${target_alias+set}
-ac_cv_env_target_alias_value=$target_alias
-ac_env_CC_set=${CC+set}
-ac_env_CC_value=$CC
-ac_cv_env_CC_set=${CC+set}
-ac_cv_env_CC_value=$CC
-ac_env_CFLAGS_set=${CFLAGS+set}
-ac_env_CFLAGS_value=$CFLAGS
-ac_cv_env_CFLAGS_set=${CFLAGS+set}
-ac_cv_env_CFLAGS_value=$CFLAGS
-ac_env_LDFLAGS_set=${LDFLAGS+set}
-ac_env_LDFLAGS_value=$LDFLAGS
-ac_cv_env_LDFLAGS_set=${LDFLAGS+set}
-ac_cv_env_LDFLAGS_value=$LDFLAGS
-ac_env_CPPFLAGS_set=${CPPFLAGS+set}
-ac_env_CPPFLAGS_value=$CPPFLAGS
-ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set}
-ac_cv_env_CPPFLAGS_value=$CPPFLAGS
-ac_env_CPP_set=${CPP+set}
-ac_env_CPP_value=$CPP
-ac_cv_env_CPP_set=${CPP+set}
-ac_cv_env_CPP_value=$CPP
-
-#
-# 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 <<EOF
-\`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 \`..']
-
-EOF
-
- cat <<EOF
-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]
- --datadir=DIR read-only architecture-independent data [PREFIX/share]
- --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]
- --libdir=DIR object code libraries [EPREFIX/lib]
- --includedir=DIR C header files [PREFIX/include]
- --oldincludedir=DIR C header files for non-gcc [/usr/include]
- --infodir=DIR info documentation [PREFIX/info]
- --mandir=DIR man documentation [PREFIX/man]
-EOF
-
- cat <<\EOF
-
-Program names:
- --program-prefix=PREFIX prepend PREFIX to installed program names
- --program-suffix=SUFFIX append SUFFIX to installed program names
- --program-transform-name=PROGRAM run sed PROGRAM on installed program names
-
-X features:
- --x-includes=DIR X include files are in DIR
- --x-libraries=DIR X library files are in DIR
-
-System types:
- --build=BUILD configure for building on BUILD [guessed]
- --host=HOST build programs to run on HOST [BUILD]
-EOF
-fi
-
-if test -n "$ac_init_help"; then
-
- cat <<\EOF
-
-Optional Features:
- --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
- --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
-
-Optional Packages:
- --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
- --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
-
-Compile/Install Options:
- --disable-full-tgetent disable check for full tgetent function
- --with-app-defaults=DIR directory in which to install resource files (default: EPREFIX/lib/X11/app-defaults)
- --with-reference=XXX program to use as permissions-reference
- --disable-setuid disable setuid in xterm, do not install setuid
- --with-setuid=XXX use the given setuid user
- --with-utmp-setgid=XXX use setgid to match utmp/utmpx file
- --with-utempter use utempter library for access to utmp
- --with-x use the X Window System
- --with-Xaw3d link with Xaw 3d library
- --with-neXtaw link with neXT Athena library
- --with-XawPlus link with Athena-Plus library
- --enable-narrowproto enable narrow prototypes for X libraries
- --disable-imake disable use of imake for definitions
-Terminal Configuration:
- --with-terminal-id=V set default decTerminalID (default: vt100)
- --with-terminal-type=T set default $TERM (default: xterm)
- --with-own-terminfo=P set default $TERMINFO (default: from environment)
-Optional Features:
- --disable-active-icon disable X11R6.3 active-icon feature
- --disable-ansi-color disable ANSI color
- --disable-16-color disable 16-color support
- --enable-256-color enable 256-color support
- --enable-88-color enable 88-color support
- --disable-blink-cursor disable support for blinking cursor
- --enable-broken-osc allow broken Linux OSC-strings
- --enable-broken-st allow broken string-terminators
- --disable-c1-print disallow -k8 option for printable 128-159
- --disable-bold-color disable PC-style mapping of bold colors
- --disable-color-class disable separate color class resources
- --disable-color-mode disable default colorMode resource
- --disable-highlighting disable support for color highlighting
- --disable-doublechars disable support for double-size chars
- --disable-boxchars disable fallback-support for box chars
- --disable-freetype disable freetype library-support
- --with-freetype-cflags -D/-I options for compiling with FreeType
- --with-freetype-libs -L/-l options to link FreeType
- --enable-hp-fkeys enable support for HP-style function keys
- --enable-sco-fkeys enable support for SCO-style function keys
- --disable-i18n disable internationalization
- --disable-initial-erase disable setup for stty erase
- --disable-input-method disable input-method
- --enable-load-vt-fonts enable load-vt-fonts() action
- --enable-logging enable logging
- --enable-logfile-exec enable exec'd logfile filter
- --disable-maximize disable actions for iconify/deiconify/maximize/restore
- --disable-num-lock disable NumLock keypad support
- --enable-paste64 enable get/set base64 selection data
- --disable-pty-handshake disable pty-handshake support
- --enable-readline-mouse enable support for mouse in readline applications
- --disable-rightbar disable right-scrollbar support
- --disable-samename disable check for redundant name-change
- --disable-session-mgt disable support for session management
- --enable-tcap-query compile-in termcap-query support
- --disable-tek4014 disable tek4014 emulation
- --enable-toolbar compile-in toolbar for pulldown menus
- --disable-vt52 disable VT52 emulation
- --enable-mini-luit enable mini-luit (built-in Latin9 support)
- --enable-luit enable luit filter (Unicode translation)
- --enable-wide-chars enable wide-character support
- --enable-dabbrev enable dynamic-abbreviation support
- --enable-dec-locator enable DECterm Locator support
- --disable-ziconbeep disable -ziconbeep option
-Testing/development Options:
- --enable-trace test: set to enable debugging traces
- --disable-echo display "compiling" commands
- --enable-xmc-glitch test: enable xmc magic-cookie emulation
- --enable-warnings test: turn on GCC compiler warnings
-
-Some influential environment variables:
- CC C compiler command
- CFLAGS C compiler flags
- LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
- nonstandard directory <lib dir>
- CPPFLAGS C/C++ preprocessor flags, e.g. -I<include dir> if you have
- headers in a nonstandard directory <include dir>
- 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.
-
-EOF
-fi
-
-if test "$ac_init_help" = "recursive"; then
- # If there are subdirs, report their specific --help.
- ac_popdir=`pwd`
- for ac_subdir in : $ac_subdirs_all; do test "x$ac_subdir" = x: && continue
- cd $ac_subdir
- # A "../" for each directory in /$ac_subdir.
- ac_dots=`echo $ac_subdir |
- sed 's,^\./,,;s,[^/]$,&/,;s,[^/]*/,../,g'`
-
- case $srcdir in
- .) # No --srcdir option. We are building in place.
- ac_sub_srcdir=$srcdir ;;
- [\\/]* | ?:[\\/]* ) # Absolute path.
- ac_sub_srcdir=$srcdir/$ac_subdir ;;
- *) # Relative path.
- ac_sub_srcdir=$ac_dots$srcdir/$ac_subdir ;;
- esac
-
- # Check for guested configure; otherwise get Cygnus style configure.
- if test -f $ac_sub_srcdir/configure.gnu; then
- echo
- $SHELL $ac_sub_srcdir/configure.gnu --help=recursive
- elif test -f $ac_sub_srcdir/configure; then
- echo
- $SHELL $ac_sub_srcdir/configure --help=recursive
- elif test -f $ac_sub_srcdir/configure.ac ||
- test -f $ac_sub_srcdir/configure.in; then
- echo
- $ac_configure --help
- else
- echo "$as_me: WARNING: no configuration information is in $ac_subdir" >&2
- fi
- cd $ac_popdir
- done
-fi
-
-test -n "$ac_init_help" && exit 0
-if $ac_init_version; then
- cat <<\EOF
-
-Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001
-Free Software Foundation, Inc.
-This configure script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it.
-EOF
- exit 0
-fi
-exec 5>config.log
-cat >&5 <<EOF
-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.52.20030208. Invocation command line was
-
- $ $0 $@
-
-EOF
-{
-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`
-hostinfo = `(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`
-
-PATH = $PATH
-
-_ASUNAME
-} >&5
-
-cat >&5 <<EOF
-## ------------ ##
-## Core tests. ##
-## ------------ ##
-
-EOF
-
-# Keep a trace of the command line.
-# Strip out --no-create and --no-recursion so they do not pile up.
-# Also quote any args containing shell meta-characters.
-ac_configure_args=
-ac_sep=
-for ac_arg
-do
- case $ac_arg in
- -no-create | --no-create | --no-creat | --no-crea | --no-cre \
- | --no-cr | --no-c) ;;
- -no-recursion | --no-recursion | --no-recursio | --no-recursi \
- | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;;
- *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
- ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"`
- ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'"
- ac_sep=" " ;;
- *) ac_configure_args="$ac_configure_args$ac_sep$ac_arg"
- ac_sep=" " ;;
- esac
- # Get rid of the leading space.
-done
-
-# 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.
-trap 'exit_status=$?
- # Save into config.log some information that might help in debugging.
- echo >&5
- echo "## ----------------- ##" >&5
- echo "## Cache variables. ##" >&5
- echo "## ----------------- ##" >&5
- echo >&5
- # The following way of writing the cache mishandles newlines in values,
-{
- (set) 2>&1 |
- case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in
- *ac_space=\ *)
- sed -n \
- "s/'"'"'/'"'"'\\\\'"'"''"'"'/g;
- s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p"
- ;;
- *)
- sed -n \
- "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
- ;;
- esac;
-} >&5
- sed "/^$/d" confdefs.h >conftest.log
- if test -s conftest.log; then
- echo >&5
- echo "## ------------ ##" >&5
- echo "## confdefs.h. ##" >&5
- echo "## ------------ ##" >&5
- echo >&5
- cat conftest.log >&5
- fi
- (echo; echo) >&5
- test "$ac_signal" != 0 &&
- echo "$as_me: caught signal $ac_signal" >&5
- echo "$as_me: exit $exit_status" >&5
- rm -rf conftest* confdefs* core core.* *.core conf$$* $ac_clean_files &&
- exit $exit_status
- ' 0
-for ac_signal in 1 2 13 15; do
- trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
-done
-ac_signal=0
-
-# confdefs.h avoids OS command line length limits that DEFS can exceed.
-rm -rf conftest* confdefs.h
-# AIX cpp loses on an empty file, so make sure it contains at least a newline.
-echo >confdefs.h
-
-# Let the site file select an alternate cache file if it wants to.
-# Prefer explicitly selected file to automatically selected ones.
-if test -z "$CONFIG_SITE"; then
- if test "x$prefix" != xNONE; then
- CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
- else
- CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
- fi
-fi
-for ac_site_file in $CONFIG_SITE; do
- if test -r "$ac_site_file"; then
- { echo "$as_me:945: loading site script $ac_site_file" >&5
-echo "$as_me: loading site script $ac_site_file" >&6;}
- cat "$ac_site_file" >&5
- . "$ac_site_file"
- 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.
- if test -f "$cache_file"; then
- { echo "$as_me:956: loading cache $cache_file" >&5
-echo "$as_me: loading cache $cache_file" >&6;}
- case $cache_file in
- [\\/]* | ?:[\\/]* ) . $cache_file;;
- *) . ./$cache_file;;
- esac
- fi
-else
- { echo "$as_me:964: creating cache $cache_file" >&5
-echo "$as_me: creating cache $cache_file" >&6;}
- >$cache_file
-fi
-
-# Check that the precious variables saved in the cache have kept the same
-# value.
-ac_cache_corrupted=false
-for ac_var in `(set) 2>&1 |
- sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; 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,)
- { echo "$as_me:980: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
-echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
- ac_cache_corrupted=: ;;
- ,set)
- { echo "$as_me:984: error: \`$ac_var' was not set in the previous run" >&5
-echo "$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
- { echo "$as_me:990: error: \`$ac_var' has changed since the previous run:" >&5
-echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
- { echo "$as_me:992: former value: $ac_old_val" >&5
-echo "$as_me: former value: $ac_old_val" >&2;}
- { echo "$as_me:994: current value: $ac_new_val" >&5
-echo "$as_me: current value: $ac_new_val" >&2;}
- ac_cache_corrupted=:
- fi;;
- esac
- # Pass precious variables to config.status. It doesn't matter if
- # we pass some twice (in addition to the command line arguments).
- if test "$ac_new_set" = set; then
- case $ac_new_val in
- *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
- ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"`
- ac_configure_args="$ac_configure_args '$ac_arg'"
- ;;
- *) ac_configure_args="$ac_configure_args $ac_var=$ac_new_val"
- ;;
- esac
- fi
-done
-if $ac_cache_corrupted; then
- { echo "$as_me:1013: error: changes in the environment can compromise the build" >&5
-echo "$as_me: error: changes in the environment can compromise the build" >&2;}
- { { echo "$as_me:1015: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
-echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
- { (exit 1); exit 1; }; }
-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
-
-case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
- *c*,-n*) ECHO_N= ECHO_C='
-' ECHO_T=' ' ;;
- *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;;
- *) ECHO_N= ECHO_C='\c' ECHO_T= ;;
-esac
-echo "#! $SHELL" >conftest.sh
-echo "exit 0" >>conftest.sh
-chmod +x conftest.sh
-if { (echo "$as_me:1035: PATH=\".;.\"; conftest.sh") >&5
- (PATH=".;."; conftest.sh) 2>&5
- ac_status=$?
- echo "$as_me:1038: \$? = $ac_status" >&5
- (exit $ac_status); }; then
- ac_path_separator=';'
-else
- ac_path_separator=:
-fi
-PATH_SEPARATOR="$ac_path_separator"
-rm -f conftest.sh
-
-ac_config_headers="$ac_config_headers xtermcfg.h:xtermcfg.hin"
-
-ac_aux_dir=
-for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
- if test -f $ac_dir/install-sh; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/install-sh -c"
- break
- elif test -f $ac_dir/install.sh; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/install.sh -c"
- break
- elif test -f $ac_dir/shtool; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/shtool install -c"
- break
- fi
-done
-if test -z "$ac_aux_dir"; then
- { { echo "$as_me:1066: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5
-echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;}
- { (exit 1); exit 1; }; }
-fi
-ac_config_guess="$SHELL $ac_aux_dir/config.guess"
-ac_config_sub="$SHELL $ac_aux_dir/config.sub"
-ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure.
-
-# Make sure we can run config.sub.
-$ac_config_sub sun4 >/dev/null 2>&1 ||
- { { echo "$as_me:1076: error: cannot run $ac_config_sub" >&5
-echo "$as_me: error: cannot run $ac_config_sub" >&2;}
- { (exit 1); exit 1; }; }
-
-echo "$as_me:1080: checking build system type" >&5
-echo $ECHO_N "checking build system type... $ECHO_C" >&6
-if test "${ac_cv_build+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_cv_build_alias=$build_alias
-test -z "$ac_cv_build_alias" &&
- ac_cv_build_alias=`$ac_config_guess`
-test -z "$ac_cv_build_alias" &&
- { { echo "$as_me:1089: error: cannot guess build type; you must specify one" >&5
-echo "$as_me: error: cannot guess build type; you must specify one" >&2;}
- { (exit 1); exit 1; }; }
-ac_cv_build=`$ac_config_sub $ac_cv_build_alias` ||
- { { echo "$as_me:1093: error: $ac_config_sub $ac_cv_build_alias failed." >&5
-echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed." >&2;}
- { (exit 1); exit 1; }; }
-
-fi
-echo "$as_me:1098: result: $ac_cv_build" >&5
-echo "${ECHO_T}$ac_cv_build" >&6
-build=$ac_cv_build
-build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
-build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
-build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
-
-if test -f $srcdir/config.guess || test -f $ac_aux_dir/config.guess ; then
- echo "$as_me:1106: checking host system type" >&5
-echo $ECHO_N "checking host system type... $ECHO_C" >&6
-if test "${ac_cv_host+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_cv_host_alias=$host_alias
-test -z "$ac_cv_host_alias" &&
- ac_cv_host_alias=$ac_cv_build_alias
-ac_cv_host=`$ac_config_sub $ac_cv_host_alias` ||
- { { echo "$as_me:1115: error: $ac_config_sub $ac_cv_host_alias failed" >&5
-echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;}
- { (exit 1); exit 1; }; }
-
-fi
-echo "$as_me:1120: result: $ac_cv_host" >&5
-echo "${ECHO_T}$ac_cv_host" >&6
-host=$ac_cv_host
-host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
-host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
-host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
-
- system_name="$host_os"
-else
- system_name="`(uname -s -r) 2>/dev/null`"
- if test -z "$system_name" ; then
- system_name="`(hostname) 2>/dev/null`"
- fi
-fi
-test -n "$system_name" && cat >>confdefs.h <<EOF
-#define SYSTEM_NAME "$system_name"
-EOF
-
-if test "${cf_cv_system_name+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cf_cv_system_name="$system_name"
-fi
-
-test -z "$system_name" && system_name="$cf_cv_system_name"
-test -n "$cf_cv_system_name" && echo "$as_me:1145: result: Configuring for $cf_cv_system_name" >&5
-echo "${ECHO_T}Configuring for $cf_cv_system_name" >&6
-
-if test ".$system_name" != ".$cf_cv_system_name" ; then
- echo "$as_me:1149: result: Cached system name ($system_name) does not agree with actual ($cf_cv_system_name)" >&5
-echo "${ECHO_T}Cached system name ($system_name) does not agree with actual ($cf_cv_system_name)" >&6
- { { echo "$as_me:1151: error: \"Please remove config.cache and try again.\"" >&5
-echo "$as_me: error: \"Please remove config.cache and try again.\"" >&2;}
- { (exit 1); exit 1; }; }
-fi
-
-### checks for alternative programs
-
-case "$host_os" in
-openedition) : ${CFLAGS="-O2 -Wc,dll -Wl,EDIT=NO"}
- : ${CPPFLAGS="-D_ALL_SOURCE"}
- : ${LIBS="/usr/lib/Xaw.x /usr/lib/SM.x /usr/lib/ICE.x /usr/lib/X11.x"}
- : ${CC=c89};;
-darwin*)
- : ${LDFLAGS}="${LDFLAGS} -Wl,-bind_at_load";;
-esac
-
-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
-echo "$as_me:1175: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_CC+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
- ac_save_IFS=$IFS; IFS=$ac_path_separator
-ac_dummy="$PATH"
-for ac_dir in $ac_dummy; do
- IFS=$ac_save_IFS
- test -z "$ac_dir" && ac_dir=.
- $as_executable_p "$ac_dir/$ac_word" || continue
-ac_cv_prog_CC="${ac_tool_prefix}gcc"
-echo "$as_me:1190: found $ac_dir/$ac_word" >&5
-break
-done
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- echo "$as_me:1198: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
-else
- echo "$as_me:1201: result: no" >&5
-echo "${ECHO_T}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
-echo "$as_me:1210: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$ac_ct_CC"; then
- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
- ac_save_IFS=$IFS; IFS=$ac_path_separator
-ac_dummy="$PATH"
-for ac_dir in $ac_dummy; do
- IFS=$ac_save_IFS
- test -z "$ac_dir" && ac_dir=.
- $as_executable_p "$ac_dir/$ac_word" || continue
-ac_cv_prog_ac_ct_CC="gcc"
-echo "$as_me:1225: found $ac_dir/$ac_word" >&5
-break
-done
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
- echo "$as_me:1233: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6
-else
- echo "$as_me:1236: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
- CC=$ac_ct_CC
-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
-echo "$as_me:1249: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_CC+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
- ac_save_IFS=$IFS; IFS=$ac_path_separator
-ac_dummy="$PATH"
-for ac_dir in $ac_dummy; do
- IFS=$ac_save_IFS
- test -z "$ac_dir" && ac_dir=.
- $as_executable_p "$ac_dir/$ac_word" || continue
-ac_cv_prog_CC="${ac_tool_prefix}cc"
-echo "$as_me:1264: found $ac_dir/$ac_word" >&5
-break
-done
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- echo "$as_me:1272: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
-else
- echo "$as_me:1275: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-fi
-if test -z "$ac_cv_prog_CC"; then
- ac_ct_CC=$CC
- # Extract the first word of "cc", so it can be a program name with args.
-set dummy cc; ac_word=$2
-echo "$as_me:1284: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$ac_ct_CC"; then
- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
- ac_save_IFS=$IFS; IFS=$ac_path_separator
-ac_dummy="$PATH"
-for ac_dir in $ac_dummy; do
- IFS=$ac_save_IFS
- test -z "$ac_dir" && ac_dir=.
- $as_executable_p "$ac_dir/$ac_word" || continue
-ac_cv_prog_ac_ct_CC="cc"
-echo "$as_me:1299: found $ac_dir/$ac_word" >&5
-break
-done
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
- echo "$as_me:1307: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6
-else
- echo "$as_me:1310: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
- CC=$ac_ct_CC
-else
- CC="$ac_cv_prog_CC"
-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
-echo "$as_me:1323: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_CC+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
- ac_prog_rejected=no
- ac_save_IFS=$IFS; IFS=$ac_path_separator
-ac_dummy="$PATH"
-for ac_dir in $ac_dummy; do
- IFS=$ac_save_IFS
- test -z "$ac_dir" && ac_dir=.
- $as_executable_p "$ac_dir/$ac_word" || continue
-if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then
- ac_prog_rejected=yes
- continue
-fi
-ac_cv_prog_CC="cc"
-echo "$as_me:1343: found $ac_dir/$ac_word" >&5
-break
-done
-
-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
- set dummy "$ac_dir/$ac_word" ${1+"$@"}
- shift
- ac_cv_prog_CC="$@"
- fi
-fi
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- echo "$as_me:1365: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
-else
- echo "$as_me:1368: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-fi
-if test -z "$CC"; then
- if test -n "$ac_tool_prefix"; then
- for ac_prog in cl
- 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
-echo "$as_me:1379: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_CC+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
- ac_save_IFS=$IFS; IFS=$ac_path_separator
-ac_dummy="$PATH"
-for ac_dir in $ac_dummy; do
- IFS=$ac_save_IFS
- test -z "$ac_dir" && ac_dir=.
- $as_executable_p "$ac_dir/$ac_word" || continue
-ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
-echo "$as_me:1394: found $ac_dir/$ac_word" >&5
-break
-done
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- echo "$as_me:1402: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
-else
- echo "$as_me:1405: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
- test -n "$CC" && break
- done
-fi
-if test -z "$CC"; then
- ac_ct_CC=$CC
- for ac_prog in cl
-do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-echo "$as_me:1418: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$ac_ct_CC"; then
- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
- ac_save_IFS=$IFS; IFS=$ac_path_separator
-ac_dummy="$PATH"
-for ac_dir in $ac_dummy; do
- IFS=$ac_save_IFS
- test -z "$ac_dir" && ac_dir=.
- $as_executable_p "$ac_dir/$ac_word" || continue
-ac_cv_prog_ac_ct_CC="$ac_prog"
-echo "$as_me:1433: found $ac_dir/$ac_word" >&5
-break
-done
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
- echo "$as_me:1441: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6
-else
- echo "$as_me:1444: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
- test -n "$ac_ct_CC" && break
-done
-
- CC=$ac_ct_CC
-fi
-
-fi
-
-test -z "$CC" && { { echo "$as_me:1456: error: no acceptable cc found in \$PATH" >&5
-echo "$as_me: error: no acceptable cc found in \$PATH" >&2;}
- { (exit 1); exit 1; }; }
-
-# Provide some information about the compiler.
-echo "$as_me:1461:" \
- "checking for C compiler version" >&5
-ac_compiler=`set X $ac_compile; echo $2`
-{ (eval echo "$as_me:1464: \"$ac_compiler --version </dev/null >&5\"") >&5
- (eval $ac_compiler --version </dev/null >&5) 2>&5
- ac_status=$?
- echo "$as_me:1467: \$? = $ac_status" >&5
- (exit $ac_status); }
-{ (eval echo "$as_me:1469: \"$ac_compiler -v </dev/null >&5\"") >&5
- (eval $ac_compiler -v </dev/null >&5) 2>&5
- ac_status=$?
- echo "$as_me:1472: \$? = $ac_status" >&5
- (exit $ac_status); }
-{ (eval echo "$as_me:1474: \"$ac_compiler -V </dev/null >&5\"") >&5
- (eval $ac_compiler -V </dev/null >&5) 2>&5
- ac_status=$?
- echo "$as_me:1477: \$? = $ac_status" >&5
- (exit $ac_status); }
-
-cat >conftest.$ac_ext <<_ACEOF
-#line 1481 "configure"
-#include "confdefs.h"
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files a.out a.exe"
-# 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.
-echo "$as_me:1497: checking for C compiler default output" >&5
-echo $ECHO_N "checking for C compiler default output... $ECHO_C" >&6
-ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
-if { (eval echo "$as_me:1500: \"$ac_link_default\"") >&5
- (eval $ac_link_default) 2>&5
- ac_status=$?
- echo "$as_me:1503: \$? = $ac_status" >&5
- (exit $ac_status); }; then
- # Find the output, starting from the most likely. This scheme is
-# not robust to junk in `.', hence go to wildcards (a.*) only as a last
-# resort.
-for ac_file in `ls a.exe conftest.exe 2>/dev/null;
- ls a.out conftest 2>/dev/null;
- ls a.* conftest.* 2>/dev/null`; do
- case $ac_file in
- *.$ac_ext | *.o | *.obj | *.xcoff | *.tds | *.d | *.pdb ) ;;
- a.out ) # We found the default executable, but exeext='' is most
- # certainly right.
- break;;
- *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
- # FIXME: I believe we export ac_cv_exeext for Libtool --akim.
- export ac_cv_exeext
- break;;
- * ) break;;
- esac
-done
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-{ { echo "$as_me:1526: error: C compiler cannot create executables" >&5
-echo "$as_me: error: C compiler cannot create executables" >&2;}
- { (exit 77); exit 77; }; }
-fi
-
-ac_exeext=$ac_cv_exeext
-echo "$as_me:1532: result: $ac_file" >&5
-echo "${ECHO_T}$ac_file" >&6
-
-# Check the compiler produces executables we can run. If not, either
-# the compiler is broken, or we cross compile.
-echo "$as_me:1537: checking whether the C compiler works" >&5
-echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6
-# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
-# If not cross compiling, check that we can run a simple program.
-if test "$cross_compiling" != yes; then
- if { ac_try='./$ac_file'
- { (eval echo "$as_me:1543: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:1546: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cross_compiling=no
- else
- if test "$cross_compiling" = maybe; then
- cross_compiling=yes
- else
- { { echo "$as_me:1553: error: cannot run C compiled programs.
-If you meant to cross compile, use \`--host'." >&5
-echo "$as_me: error: cannot run C compiled programs.
-If you meant to cross compile, use \`--host'." >&2;}
- { (exit 1); exit 1; }; }
- fi
- fi
-fi
-echo "$as_me:1561: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-
-rm -f a.out a.exe conftest$ac_cv_exeext
-ac_clean_files=$ac_clean_files_save
-# Check the compiler produces executables we can run. If not, either
-# the compiler is broken, or we cross compile.
-echo "$as_me:1568: checking whether we are cross compiling" >&5
-echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6
-echo "$as_me:1570: result: $cross_compiling" >&5
-echo "${ECHO_T}$cross_compiling" >&6
-
-echo "$as_me:1573: checking for executable suffix" >&5
-echo $ECHO_N "checking for executable suffix... $ECHO_C" >&6
-if { (eval echo "$as_me:1575: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:1578: \$? = $ac_status" >&5
- (exit $ac_status); }; 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 `(ls conftest.exe; ls conftest; ls conftest.*) 2>/dev/null`; do
- case $ac_file in
- *.$ac_ext | *.o | *.obj | *.xcoff | *.tds | *.d | *.pdb ) ;;
- *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
- export ac_cv_exeext
- break;;
- * ) break;;
- esac
-done
-else
- { { echo "$as_me:1594: error: cannot compute EXEEXT: cannot compile and link" >&5
-echo "$as_me: error: cannot compute EXEEXT: cannot compile and link" >&2;}
- { (exit 1); exit 1; }; }
-fi
-
-rm -f conftest$ac_cv_exeext
-echo "$as_me:1600: result: $ac_cv_exeext" >&5
-echo "${ECHO_T}$ac_cv_exeext" >&6
-
-rm -f conftest.$ac_ext
-EXEEXT=$ac_cv_exeext
-ac_exeext=$EXEEXT
-echo "$as_me:1606: checking for object suffix" >&5
-echo $ECHO_N "checking for object suffix... $ECHO_C" >&6
-if test "${ac_cv_objext+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-#line 1612 "configure"
-#include "confdefs.h"
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.o conftest.obj
-if { (eval echo "$as_me:1624: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- echo "$as_me:1627: \$? = $ac_status" >&5
- (exit $ac_status); }; then
- for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb ) ;;
- *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
- break;;
- esac
-done
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-{ { echo "$as_me:1639: error: cannot compute OBJEXT: cannot compile" >&5
-echo "$as_me: error: cannot compute OBJEXT: cannot compile" >&2;}
- { (exit 1); exit 1; }; }
-fi
-
-rm -f conftest.$ac_cv_objext conftest.$ac_ext
-fi
-echo "$as_me:1646: result: $ac_cv_objext" >&5
-echo "${ECHO_T}$ac_cv_objext" >&6
-OBJEXT=$ac_cv_objext
-ac_objext=$OBJEXT
-echo "$as_me:1650: checking whether we are using the GNU C compiler" >&5
-echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6
-if test "${ac_cv_c_compiler_gnu+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-#line 1656 "configure"
-#include "confdefs.h"
-
-int
-main ()
-{
-#ifndef __GNUC__
- choke me
-#endif
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:1671: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- echo "$as_me:1674: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:1677: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:1680: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_compiler_gnu=yes
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_compiler_gnu=no
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-ac_cv_c_compiler_gnu=$ac_compiler_gnu
-
-fi
-echo "$as_me:1692: result: $ac_cv_c_compiler_gnu" >&5
-echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6
-GCC=`test $ac_compiler_gnu = yes && echo yes`
-ac_test_CFLAGS=${CFLAGS+set}
-ac_save_CFLAGS=$CFLAGS
-CFLAGS="-g"
-echo "$as_me:1698: checking whether $CC accepts -g" >&5
-echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6
-if test "${ac_cv_prog_cc_g+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-#line 1704 "configure"
-#include "confdefs.h"
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:1716: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- echo "$as_me:1719: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:1722: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:1725: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_prog_cc_g=yes
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_cv_prog_cc_g=no
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:1735: result: $ac_cv_prog_cc_g" >&5
-echo "${ECHO_T}$ac_cv_prog_cc_g" >&6
-if test "$ac_test_CFLAGS" = set; 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
-# Some people use a C++ compiler to compile C. Since we use `exit',
-# in C++ we need to declare it. In case someone uses the same compiler
-# for both compiling C and C++ we need to have the C++ compiler decide
-# the declaration of exit, since it's the most demanding environment.
-cat >conftest.$ac_ext <<_ACEOF
-#ifndef __cplusplus
- choke me
-#endif
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:1762: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- echo "$as_me:1765: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:1768: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:1771: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- for ac_declaration in \
- ''\
- '#include <stdlib.h>' \
- 'extern "C" void std::exit (int) throw (); using std::exit;' \
- 'extern "C" void std::exit (int); using std::exit;' \
- 'extern "C" void exit (int) throw ();' \
- 'extern "C" void exit (int);' \
- 'void exit (int);'
-do
- cat >conftest.$ac_ext <<_ACEOF
-#line 1783 "configure"
-#include "confdefs.h"
-#include <stdlib.h>
-$ac_declaration
-int
-main ()
-{
-exit (42);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:1796: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- echo "$as_me:1799: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:1802: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:1805: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- :
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-continue
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
- cat >conftest.$ac_ext <<_ACEOF
-#line 1815 "configure"
-#include "confdefs.h"
-$ac_declaration
-int
-main ()
-{
-exit (42);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:1827: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- echo "$as_me:1830: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:1833: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:1836: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- break
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-done
-rm -f conftest*
-if test -n "$ac_declaration"; then
- echo '#ifdef __cplusplus' >>confdefs.h
- echo $ac_declaration >>confdefs.h
- echo '#endif' >>confdefs.h
-fi
-
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-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
-echo "$as_me:1868: checking how to run the C preprocessor" >&5
-echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&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+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- # Double quotes because CPP needs to be expanded
- for CPP in "$CC -E" "$CC -E -traditional-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 >conftest.$ac_ext <<_ACEOF
-#line 1889 "configure"
-#include "confdefs.h"
-#include <assert.h>
- Syntax error
-_ACEOF
-if { (eval echo "$as_me:1894: \"$ac_cpp conftest.$ac_ext\"") >&5
- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
- ac_status=$?
- egrep -v '^ *\+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:1900: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null; then
- if test -s conftest.err; then
- ac_cpp_err=$ac_c_preproc_warn_flag
- else
- ac_cpp_err=
- fi
-else
- ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
- :
-else
- echo "$as_me: failed program was:" >&5
- cat conftest.$ac_ext >&5
- # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.$ac_ext
-
- # OK, works on sane cases. Now check whether non-existent headers
- # can be detected and how.
- cat >conftest.$ac_ext <<_ACEOF
-#line 1923 "configure"
-#include "confdefs.h"
-#include <ac_nonexistent.h>
-_ACEOF
-if { (eval echo "$as_me:1927: \"$ac_cpp conftest.$ac_ext\"") >&5
- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
- ac_status=$?
- egrep -v '^ *\+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:1933: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null; then
- if test -s conftest.err; then
- ac_cpp_err=$ac_c_preproc_warn_flag
- else
- ac_cpp_err=
- fi
-else
- ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
- # Broken: success on invalid input.
-continue
-else
- echo "$as_me: failed program was:" >&5
- cat conftest.$ac_ext >&5
- # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f 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
-echo "$as_me:1970: result: $CPP" >&5
-echo "${ECHO_T}$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 >conftest.$ac_ext <<_ACEOF
-#line 1980 "configure"
-#include "confdefs.h"
-#include <assert.h>
- Syntax error
-_ACEOF
-if { (eval echo "$as_me:1985: \"$ac_cpp conftest.$ac_ext\"") >&5
- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
- ac_status=$?
- egrep -v '^ *\+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:1991: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null; then
- if test -s conftest.err; then
- ac_cpp_err=$ac_c_preproc_warn_flag
- else
- ac_cpp_err=
- fi
-else
- ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
- :
-else
- echo "$as_me: failed program was:" >&5
- cat conftest.$ac_ext >&5
- # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.$ac_ext
-
- # OK, works on sane cases. Now check whether non-existent headers
- # can be detected and how.
- cat >conftest.$ac_ext <<_ACEOF
-#line 2014 "configure"
-#include "confdefs.h"
-#include <ac_nonexistent.h>
-_ACEOF
-if { (eval echo "$as_me:2018: \"$ac_cpp conftest.$ac_ext\"") >&5
- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
- ac_status=$?
- egrep -v '^ *\+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:2024: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null; then
- if test -s conftest.err; then
- ac_cpp_err=$ac_c_preproc_warn_flag
- else
- ac_cpp_err=
- fi
-else
- ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
- # Broken: success on invalid input.
-continue
-else
- echo "$as_me: failed program was:" >&5
- cat conftest.$ac_ext >&5
- # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then
- :
-else
- { { echo "$as_me:2052: error: C preprocessor \"$CPP\" fails sanity check" >&5
-echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check" >&2;}
- { (exit 1); exit 1; }; }
-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
-
-if test $ac_cv_c_compiler_gnu = yes; then
- echo "$as_me:2064: checking whether $CC needs -traditional" >&5
-echo $ECHO_N "checking whether $CC needs -traditional... $ECHO_C" >&6
-if test "${ac_cv_prog_gcc_traditional+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_pattern="Autoconf.*'x'"
- cat >conftest.$ac_ext <<_ACEOF
-#line 2071 "configure"
-#include "confdefs.h"
-#include <sgtty.h>
-int 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
- ac_cv_prog_gcc_traditional=no
-fi
-rm -f conftest*
-
- if test $ac_cv_prog_gcc_traditional = no; then
- cat >conftest.$ac_ext <<_ACEOF
-#line 2086 "configure"
-#include "confdefs.h"
-#include <termio.h>
-int 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 -f conftest*
-
- fi
-fi
-echo "$as_me:2099: result: $ac_cv_prog_gcc_traditional" >&5
-echo "${ECHO_T}$ac_cv_prog_gcc_traditional" >&6
- if test $ac_cv_prog_gcc_traditional = yes; then
- CC="$CC -traditional"
- fi
-fi
-
-for ac_prog in mawk gawk 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
-echo "$as_me:2110: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_AWK+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$AWK"; then
- ac_cv_prog_AWK="$AWK" # Let the user override the test.
-else
- ac_save_IFS=$IFS; IFS=$ac_path_separator
-ac_dummy="$PATH"
-for ac_dir in $ac_dummy; do
- IFS=$ac_save_IFS
- test -z "$ac_dir" && ac_dir=.
- $as_executable_p "$ac_dir/$ac_word" || continue
-ac_cv_prog_AWK="$ac_prog"
-echo "$as_me:2125: found $ac_dir/$ac_word" >&5
-break
-done
-
-fi
-fi
-AWK=$ac_cv_prog_AWK
-if test -n "$AWK"; then
- echo "$as_me:2133: result: $AWK" >&5
-echo "${ECHO_T}$AWK" >&6
-else
- echo "$as_me:2136: result: no" >&5
-echo "${ECHO_T}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"
-# ./install, which can be erroneously created by make from ./install.sh.
-echo "$as_me:2155: checking for a BSD compatible install" >&5
-echo $ECHO_N "checking for a BSD compatible install... $ECHO_C" >&6
-if test -z "$INSTALL"; then
-if test "${ac_cv_path_install+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_save_IFS=$IFS; IFS=$ac_path_separator
- for ac_dir in $PATH; do
- IFS=$ac_save_IFS
- # Account for people who put trailing slashes in PATH elements.
- case $ac_dir/ in
- / | ./ | .// | /cC/* \
- | /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* \
- | /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
- if $as_executable_p "$ac_dir/$ac_prog"; then
- if test $ac_prog = install &&
- grep dspmsg "$ac_dir/$ac_prog" >/dev/null 2>&1; then
- # AIX install. It has an incompatible calling convention.
- :
- elif test $ac_prog = install &&
- grep pwplus "$ac_dir/$ac_prog" >/dev/null 2>&1; then
- # program-specific install script used by HP pwplus--don't use.
- :
- else
- ac_cv_path_install="$ac_dir/$ac_prog -c"
- break 2
- fi
- fi
- done
- ;;
- esac
- done
-
-fi
- if test "${ac_cv_path_install+set}" = set; then
- INSTALL=$ac_cv_path_install
- else
- # As a last resort, use the slow shell script. We don't cache a
- # path for INSTALL within a source directory, because that will
- # break other packages using the cache if that directory is
- # removed, or if the path is relative.
- INSTALL=$ac_install_sh
- fi
-fi
-echo "$as_me:2204: result: $INSTALL" >&5
-echo "${ECHO_T}$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'
-
-test "$program_prefix" != NONE &&
- program_transform_name="s,^,$program_prefix,;$program_transform_name"
-# Use a double $ so make ignores it.
-test "$program_suffix" != NONE &&
- program_transform_name="s,\$,$program_suffix,;$program_transform_name"
-# Double any \ or $. echo might interpret backslashes.
-# By default was `s,x,x', remove it if useless.
-cat <<\_ACEOF >conftest.sed
-s/[\\$]/&&/g;s/;s,x,x,$//
-_ACEOF
-program_transform_name=`echo $program_transform_name | sed -f conftest.sed`
-rm conftest.sed
-
-for ac_prog in tdlint lint alint
-do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-echo "$as_me:2232: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_LINT+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$LINT"; then
- ac_cv_prog_LINT="$LINT" # Let the user override the test.
-else
- ac_save_IFS=$IFS; IFS=$ac_path_separator
-ac_dummy="$PATH"
-for ac_dir in $ac_dummy; do
- IFS=$ac_save_IFS
- test -z "$ac_dir" && ac_dir=.
- $as_executable_p "$ac_dir/$ac_word" || continue
-ac_cv_prog_LINT="$ac_prog"
-echo "$as_me:2247: found $ac_dir/$ac_word" >&5
-break
-done
-
-fi
-fi
-LINT=$ac_cv_prog_LINT
-if test -n "$LINT"; then
- echo "$as_me:2255: result: $LINT" >&5
-echo "${ECHO_T}$LINT" >&6
-else
- echo "$as_me:2258: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
- test -n "$LINT" && break
-done
-
-### checks for UNIX variants that set C preprocessor variables
-
-echo "$as_me:2267: checking for AIX" >&5
-echo $ECHO_N "checking for AIX... $ECHO_C" >&6
-cat >conftest.$ac_ext <<_ACEOF
-#line 2270 "configure"
-#include "confdefs.h"
-#ifdef _AIX
- yes
-#endif
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- egrep "yes" >/dev/null 2>&1; then
- echo "$as_me:2279: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-cat >>confdefs.h <<\EOF
-#define _ALL_SOURCE 1
-EOF
-
-else
- echo "$as_me:2286: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-rm -f conftest*
-
-echo "$as_me:2291: checking for POSIXized ISC" >&5
-echo $ECHO_N "checking for POSIXized ISC... $ECHO_C" >&6
-if test -d /etc/conf/kconfig.d &&
- grep _POSIX_VERSION /usr/include/sys/unistd.h >/dev/null 2>&1
-then
- echo "$as_me:2296: result: yes" >&5
-echo "${ECHO_T}yes" >&6
- ISC=yes # If later tests want to check for ISC.
-
-cat >>confdefs.h <<\EOF
-#define _POSIX_SOURCE 1
-EOF
-
- if test "$GCC" = yes; then
- CC="$CC -posix"
- else
- CC="$CC -Xp"
- fi
-else
- echo "$as_me:2310: result: no" >&5
-echo "${ECHO_T}no" >&6
- ISC=
-fi
-
-### checks for compiler characteristics
-
-echo "$as_me:2317: checking for ${CC-cc} option to accept ANSI C" >&5
-echo $ECHO_N "checking for ${CC-cc} option to accept ANSI C... $ECHO_C" >&6
-if test "${cf_cv_ansi_cc+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-cf_cv_ansi_cc=no
-cf_save_CFLAGS="$CFLAGS"
-cf_save_CPPFLAGS="$CPPFLAGS"
-# Don't try gcc -ansi; that turns off useful extensions and
-# breaks some systems' header files.
-# AIX -qlanglvl=ansi
-# Ultrix and OSF/1 -std1
-# HP-UX -Aa -D_HPUX_SOURCE
-# SVR4 -Xc
-# UnixWare 1.2 (cannot use -Xc, since ANSI/POSIX clashes)
-for cf_arg in "-DCC_HAS_PROTOS" \
- "" \
- -qlanglvl=ansi \
- -std1 \
- -Ae \
- "-Aa -D_HPUX_SOURCE" \
- -Xc
-do
-
-cf_fix_cppflags=no
-cf_new_cflags=
-cf_new_cppflags=
-cf_new_extra_cppflags=
-
-for cf_add_cflags in $cf_arg
-do
-case $cf_fix_cppflags in
-no)
- case $cf_add_cflags in #(vi
- -undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) #(vi
- case $cf_add_cflags in
- -D*)
- cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
-
- test "${cf_add_cflags}" != "${cf_tst_cflags}" \
- && test -z "${cf_tst_cflags}" \
- && cf_fix_cppflags=yes
-
- if test $cf_fix_cppflags = yes ; then
- cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
- continue
- elif test "${cf_tst_cflags}" = "\"'" ; then
- cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
- continue
- fi
- ;;
- esac
- case "$CPPFLAGS" in
- *$cf_add_cflags) #(vi
- ;;
- *) #(vi
- cf_new_cppflags="$cf_new_cppflags $cf_add_cflags"
- ;;
- esac
- ;;
- *)
- cf_new_cflags="$cf_new_cflags $cf_add_cflags"
- ;;
- esac
- ;;
-yes)
- cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
-
- cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'`
-
- test "${cf_add_cflags}" != "${cf_tst_cflags}" \
- && test -z "${cf_tst_cflags}" \
- && cf_fix_cppflags=no
- ;;
-esac
-done
-
-if test -n "$cf_new_cflags" ; then
-
- CFLAGS="$CFLAGS $cf_new_cflags"
-fi
-
-if test -n "$cf_new_cppflags" ; then
-
- CPPFLAGS="$cf_new_cppflags $CPPFLAGS"
-fi
-
-if test -n "$cf_new_extra_cppflags" ; then
-
- EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS"
-fi
-
- cat >conftest.$ac_ext <<_ACEOF
-#line 2411 "configure"
-#include "confdefs.h"
-
-#ifndef CC_HAS_PROTOS
-#if !defined(__STDC__) || (__STDC__ != 1)
-choke me
-#endif
-#endif
-
-int
-main ()
-{
-
- int test (int i, double x);
- struct s1 {int (*f) (int a);};
- struct s2 {int (*f) (double a);};
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:2432: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- echo "$as_me:2435: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:2438: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:2441: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cf_cv_ansi_cc="$cf_arg"; break
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-done
-CFLAGS="$cf_save_CFLAGS"
-CPPFLAGS="$cf_save_CPPFLAGS"
-
-fi
-echo "$as_me:2454: result: $cf_cv_ansi_cc" >&5
-echo "${ECHO_T}$cf_cv_ansi_cc" >&6
-
-if test "$cf_cv_ansi_cc" != "no"; then
-if test ".$cf_cv_ansi_cc" != ".-DCC_HAS_PROTOS"; then
-
-cf_fix_cppflags=no
-cf_new_cflags=
-cf_new_cppflags=
-cf_new_extra_cppflags=
-
-for cf_add_cflags in $cf_cv_ansi_cc
-do
-case $cf_fix_cppflags in
-no)
- case $cf_add_cflags in #(vi
- -undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) #(vi
- case $cf_add_cflags in
- -D*)
- cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
-
- test "${cf_add_cflags}" != "${cf_tst_cflags}" \
- && test -z "${cf_tst_cflags}" \
- && cf_fix_cppflags=yes
-
- if test $cf_fix_cppflags = yes ; then
- cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
- continue
- elif test "${cf_tst_cflags}" = "\"'" ; then
- cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
- continue
- fi
- ;;
- esac
- case "$CPPFLAGS" in
- *$cf_add_cflags) #(vi
- ;;
- *) #(vi
- cf_new_cppflags="$cf_new_cppflags $cf_add_cflags"
- ;;
- esac
- ;;
- *)
- cf_new_cflags="$cf_new_cflags $cf_add_cflags"
- ;;
- esac
- ;;
-yes)
- cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
-
- cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'`
-
- test "${cf_add_cflags}" != "${cf_tst_cflags}" \
- && test -z "${cf_tst_cflags}" \
- && cf_fix_cppflags=no
- ;;
-esac
-done
-
-if test -n "$cf_new_cflags" ; then
-
- CFLAGS="$CFLAGS $cf_new_cflags"
-fi
-
-if test -n "$cf_new_cppflags" ; then
-
- CPPFLAGS="$cf_new_cppflags $CPPFLAGS"
-fi
-
-if test -n "$cf_new_extra_cppflags" ; then
-
- EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS"
-fi
-
-else
- cat >>confdefs.h <<\EOF
-#define CC_HAS_PROTOS 1
-EOF
-
-fi
-fi
-
-echo "$as_me:2536: checking for $CC option to accept ANSI C" >&5
-echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6
-if test "${ac_cv_prog_cc_stdc+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_cv_prog_cc_stdc=no
-ac_save_CC=$CC
-cat >conftest.$ac_ext <<_ACEOF
-#line 2544 "configure"
-#include "confdefs.h"
-#include <stdarg.h>
-#include <stdio.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
-struct buf { int x; };
-FILE * (*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;
-}
-int test (int i, double x);
-struct s1 {int (*f) (int a);};
-struct s2 {int (*f) (double a);};
-int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
-int argc;
-char **argv;
-int
-main ()
-{
-return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
- ;
- return 0;
-}
-_ACEOF
-# Don't try gcc -ansi; that turns off useful extensions and
-# breaks some systems' header files.
-# AIX -qlanglvl=ansi
-# Ultrix and OSF/1 -std1
-# HP-UX 10.20 and later -Ae
-# HP-UX older versions -Aa -D_HPUX_SOURCE
-# SVR4 -Xc -D__EXTENSIONS__
-for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
-do
- CC="$ac_save_CC $ac_arg"
- rm -f conftest.$ac_objext
-if { (eval echo "$as_me:2593: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- echo "$as_me:2596: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:2599: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:2602: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_prog_cc_stdc=$ac_arg
-break
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-fi
-rm -f conftest.$ac_objext
-done
-rm -f conftest.$ac_ext conftest.$ac_objext
-CC=$ac_save_CC
-
-fi
-
-case "x$ac_cv_prog_cc_stdc" in
- x|xno)
- echo "$as_me:2619: result: none needed" >&5
-echo "${ECHO_T}none needed" >&6 ;;
- *)
- echo "$as_me:2622: result: $ac_cv_prog_cc_stdc" >&5
-echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6
- CC="$CC $ac_cv_prog_cc_stdc" ;;
-esac
-
-echo "$as_me:2627: checking for an ANSI C-conforming const" >&5
-echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6
-if test "${ac_cv_c_const+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-#line 2633 "configure"
-#include "confdefs.h"
-
-int
-main ()
-{
-/* FIXME: Include the comments suggested by Paul. */
-#ifndef __cplusplus
- /* Ultrix mips cc rejects this. */
- typedef int charset[2];
- const charset x;
- /* SunOS 4.1.1 cc rejects this. */
- char const *const *ccp;
- char **p;
- /* NEC SVR4.0.2 mips cc rejects this. */
- struct point {int x, y;};
- static struct point const zero = {0,0};
- /* AIX XL C 1.02.0.0 rejects this.
- It does not let you subtract one const X* pointer from another in
- an arm of an if-expression whose if-part is not a constant
- expression */
- const char *g = "string";
- ccp = &g + (g ? g-g : 0);
- /* HPUX 7.0 cc rejects these. */
- ++ccp;
- p = (char**) ccp;
- ccp = (char const *const *) p;
- { /* SCO 3.2v4 cc rejects this. */
- char *t;
- char const *s = 0 ? (char *) 0 : (char const *) 0;
-
- *t++ = 0;
- }
- { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */
- int x[] = {25, 17};
- const int *foo = &x[0];
- ++foo;
- }
- { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
- typedef const int *iptr;
- iptr p = 0;
- ++p;
- }
- { /* AIX XL C 1.02.0.0 rejects this saying
- "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
- struct s { int j; const int *ap[3]; };
- struct s *b; b->j = 5;
- }
- { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
- const int foo = 10;
- }
-#endif
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:2691: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- echo "$as_me:2694: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:2697: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:2700: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_c_const=yes
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_cv_c_const=no
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:2710: result: $ac_cv_c_const" >&5
-echo "${ECHO_T}$ac_cv_c_const" >&6
-if test $ac_cv_c_const = no; then
-
-cat >>confdefs.h <<\EOF
-#define const
-EOF
-
-fi
-
-case $cf_cv_system_name in
-os2*)
- CFLAGS="$CFLAGS -Zmt"
- CPPFLAGS="$CPPFLAGS -D__ST_MT_ERRNO__"
- CXXFLAGS="$CXXFLAGS -Zmt"
- # autoconf's macro sets -Zexe and suffix both, which conflict:w
- LDFLAGS="$LDFLAGS -Zmt -Zcrtdll"
- ac_cv_exeext=.exe
- ;;
-esac
-
-PROG_EXT="$EXEEXT"
-
-test -n "$PROG_EXT" && cat >>confdefs.h <<EOF
-#define PROG_EXT "$PROG_EXT"
-EOF
-
-echo "$as_me:2737: checking if $CC -U and -D options work together" >&5
-echo $ECHO_N "checking if $CC -U and -D options work together... $ECHO_C" >&6
-if test "${cf_cv_cc_u_d_options+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
- cf_save_CPPFLAGS="$CPPFLAGS"
- CPPFLAGS="-UU_D_OPTIONS -DU_D_OPTIONS -DD_U_OPTIONS -UD_U_OPTIONS"
- cat >conftest.$ac_ext <<_ACEOF
-#line 2746 "configure"
-#include "confdefs.h"
-
-int
-main ()
-{
-
-#ifndef U_D_OPTIONS
-make an undefined-error
-#endif
-#ifdef D_U_OPTIONS
-make a defined-error
-#endif
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:2765: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- echo "$as_me:2768: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:2771: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:2774: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
-
- cf_cv_cc_u_d_options=yes
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-
- cf_cv_cc_u_d_options=no
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
- CPPFLAGS="$cf_save_CPPFLAGS"
-
-fi
-echo "$as_me:2788: result: $cf_cv_cc_u_d_options" >&5
-echo "${ECHO_T}$cf_cv_cc_u_d_options" >&6
-
-cf_XOPEN_SOURCE=500
-cf_POSIX_C_SOURCE=199506L
-
-case $host_os in #(vi
-aix[45]*) #(vi
- CPPFLAGS="$CPPFLAGS -D_ALL_SOURCE"
- ;;
-freebsd*) #(vi
- # 5.x headers associate
- # _XOPEN_SOURCE=600 with _POSIX_C_SOURCE=200112L
- # _XOPEN_SOURCE=500 with _POSIX_C_SOURCE=199506L
- cf_POSIX_C_SOURCE=200112L
- cf_XOPEN_SOURCE=600
- CPPFLAGS="$CPPFLAGS -D_BSD_TYPES -D__BSD_VISIBLE -D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE -D_XOPEN_SOURCE=$cf_XOPEN_SOURCE"
- ;;
-hpux*) #(vi
- CPPFLAGS="$CPPFLAGS -D_HPUX_SOURCE"
- ;;
-irix[56].*) #(vi
- CPPFLAGS="$CPPFLAGS -D_SGI_SOURCE"
- ;;
-linux*|gnu*) #(vi
-
-echo "$as_me:2814: checking if we must define _GNU_SOURCE" >&5
-echo $ECHO_N "checking if we must define _GNU_SOURCE... $ECHO_C" >&6
-if test "${cf_cv_gnu_source+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-cat >conftest.$ac_ext <<_ACEOF
-#line 2821 "configure"
-#include "confdefs.h"
-#include <sys/types.h>
-int
-main ()
-{
-
-#ifndef _XOPEN_SOURCE
-make an error
-#endif
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:2836: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- echo "$as_me:2839: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:2842: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:2845: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cf_cv_gnu_source=no
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cf_save="$CPPFLAGS"
- CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE"
- cat >conftest.$ac_ext <<_ACEOF
-#line 2854 "configure"
-#include "confdefs.h"
-#include <sys/types.h>
-int
-main ()
-{
-
-#ifdef _XOPEN_SOURCE
-make an error
-#endif
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:2869: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- echo "$as_me:2872: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:2875: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:2878: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cf_cv_gnu_source=no
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cf_cv_gnu_source=yes
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
- CPPFLAGS="$cf_save"
-
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-
-fi
-echo "$as_me:2893: result: $cf_cv_gnu_source" >&5
-echo "${ECHO_T}$cf_cv_gnu_source" >&6
-test "$cf_cv_gnu_source" = yes && CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE"
-
- ;;
-mirbsd*) #(vi
- # setting _XOPEN_SOURCE or _POSIX_SOURCE breaks <arpa/inet.h>
- ;;
-netbsd*) #(vi
- # setting _XOPEN_SOURCE breaks IPv6 for lynx on NetBSD 1.6, breaks xterm, is not needed for ncursesw
- ;;
-openbsd*) #(vi
- # setting _XOPEN_SOURCE breaks xterm on OpenBSD 2.8, is not needed for ncursesw
- ;;
-osf[45]*) #(vi
- CPPFLAGS="$CPPFLAGS -D_OSF_SOURCE"
- ;;
-nto-qnx*) #(vi
- CPPFLAGS="$CPPFLAGS -D_QNX_SOURCE"
- ;;
-sco*) #(vi
- # setting _XOPEN_SOURCE breaks Lynx on SCO Unix / OpenServer
- ;;
-solaris*) #(vi
- CPPFLAGS="$CPPFLAGS -D__EXTENSIONS__"
- ;;
-*)
- echo "$as_me:2920: checking if we should define _XOPEN_SOURCE" >&5
-echo $ECHO_N "checking if we should define _XOPEN_SOURCE... $ECHO_C" >&6
-if test "${cf_cv_xopen_source+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
- cat >conftest.$ac_ext <<_ACEOF
-#line 2927 "configure"
-#include "confdefs.h"
-#include <sys/types.h>
-int
-main ()
-{
-
-#ifndef _XOPEN_SOURCE
-make an error
-#endif
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:2942: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- echo "$as_me:2945: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:2948: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:2951: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cf_cv_xopen_source=no
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cf_save="$CPPFLAGS"
- CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE=$cf_XOPEN_SOURCE"
- cat >conftest.$ac_ext <<_ACEOF
-#line 2960 "configure"
-#include "confdefs.h"
-#include <sys/types.h>
-int
-main ()
-{
-
-#ifdef _XOPEN_SOURCE
-make an error
-#endif
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:2975: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- echo "$as_me:2978: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:2981: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:2984: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cf_cv_xopen_source=no
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cf_cv_xopen_source=$cf_XOPEN_SOURCE
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
- CPPFLAGS="$cf_save"
-
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-
-fi
-echo "$as_me:2999: result: $cf_cv_xopen_source" >&5
-echo "${ECHO_T}$cf_cv_xopen_source" >&6
- if test "$cf_cv_xopen_source" != no ; then
-
-# remove _XOPEN_SOURCE symbol from $CFLAGS
-CFLAGS=`echo "$CFLAGS" | \
- sed -e 's/-[UD]_XOPEN_SOURCE\(=[^ ]*\)\?[ ]/ /g' \
- -e 's/-[UD]_XOPEN_SOURCE\(=[^ ]*\)\?$//g'`
-
-# remove _XOPEN_SOURCE symbol from $CPPFLAGS
-CPPFLAGS=`echo "$CPPFLAGS" | \
- sed -e 's/-[UD]_XOPEN_SOURCE\(=[^ ]*\)\?[ ]/ /g' \
- -e 's/-[UD]_XOPEN_SOURCE\(=[^ ]*\)\?$//g'`
-
- test "$cf_cv_cc_u_d_options" = yes && \
- CPPFLAGS="$CPPFLAGS -U_XOPEN_SOURCE"
- CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE=$cf_cv_xopen_source"
- fi
-
-cf_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE
-
-cf_save_CFLAGS="$CFLAGS"
-cf_save_CPPFLAGS="$CPPFLAGS"
-
-# remove _POSIX_C_SOURCE symbol from $cf_save_CFLAGS
-cf_trim_CFLAGS=`echo "$cf_save_CFLAGS" | \
- sed -e 's/-[UD]_POSIX_C_SOURCE\(=[^ ]*\)\?[ ]/ /g' \
- -e 's/-[UD]_POSIX_C_SOURCE\(=[^ ]*\)\?$//g'`
-
-# remove _POSIX_C_SOURCE symbol from $cf_save_CPPFLAGS
-cf_trim_CPPFLAGS=`echo "$cf_save_CPPFLAGS" | \
- sed -e 's/-[UD]_POSIX_C_SOURCE\(=[^ ]*\)\?[ ]/ /g' \
- -e 's/-[UD]_POSIX_C_SOURCE\(=[^ ]*\)\?$//g'`
-
-echo "$as_me:3033: checking if we should define _POSIX_C_SOURCE" >&5
-echo $ECHO_N "checking if we should define _POSIX_C_SOURCE... $ECHO_C" >&6
-if test "${cf_cv_posix_c_source+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-echo "(line 3039) testing if the symbol is already defined go no further ..." 1>&5
-
- cat >conftest.$ac_ext <<_ACEOF
-#line 3042 "configure"
-#include "confdefs.h"
-#include <sys/types.h>
-int
-main ()
-{
-
-#ifndef _POSIX_C_SOURCE
-make an error
-#endif
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:3057: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- echo "$as_me:3060: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:3063: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:3066: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cf_cv_posix_c_source=no
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cf_want_posix_source=no
- case .$cf_POSIX_C_SOURCE in #(vi
- .[12]??*) #(vi
- cf_cv_posix_c_source="-D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE"
- ;;
- .2) #(vi
- cf_cv_posix_c_source="-D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE"
- cf_want_posix_source=yes
- ;;
- .*)
- cf_want_posix_source=yes
- ;;
- esac
- if test "$cf_want_posix_source" = yes ; then
- cat >conftest.$ac_ext <<_ACEOF
-#line 3087 "configure"
-#include "confdefs.h"
-#include <sys/types.h>
-int
-main ()
-{
-
-#ifdef _POSIX_SOURCE
-make an error
-#endif
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:3102: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- echo "$as_me:3105: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:3108: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:3111: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- :
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cf_cv_posix_c_source="$cf_cv_posix_c_source -D_POSIX_SOURCE"
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
- fi
-
-echo "(line 3122) testing ifdef from value $cf_POSIX_C_SOURCE ..." 1>&5
-
- CFLAGS="$cf_trim_CFLAGS"
- CPPFLAGS="$cf_trim_CPPFLAGS $cf_cv_posix_c_source"
-
-echo "(line 3127) testing if the second compile does not leave our definition intact error ..." 1>&5
-
- cat >conftest.$ac_ext <<_ACEOF
-#line 3130 "configure"
-#include "confdefs.h"
-#include <sys/types.h>
-int
-main ()
-{
-
-#ifndef _POSIX_C_SOURCE
-make an error
-#endif
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:3145: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- echo "$as_me:3148: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:3151: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:3154: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- :
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cf_cv_posix_c_source=no
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
- CFLAGS="$cf_save_CFLAGS"
- CPPFLAGS="$cf_save_CPPFLAGS"
-
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-
-fi
-echo "$as_me:3170: result: $cf_cv_posix_c_source" >&5
-echo "${ECHO_T}$cf_cv_posix_c_source" >&6
-
-if test "$cf_cv_posix_c_source" != no ; then
- CFLAGS="$cf_trim_CFLAGS"
- CPPFLAGS="$cf_trim_CPPFLAGS"
- if test "$cf_cv_cc_u_d_options" = yes ; then
- cf_temp_posix_c_source=`echo "$cf_cv_posix_c_source" | \
- sed -e 's/-D/-U/g' -e 's/=[^ ]*//g'`
- CPPFLAGS="$CPPFLAGS $cf_temp_posix_c_source"
- fi
- CPPFLAGS="$CPPFLAGS $cf_cv_posix_c_source"
-fi
-
- ;;
-esac
-
-### checks for header files
-
-for ac_header in \
-ncurses/term.h \
-stdlib.h \
-termios.h \
-unistd.h \
-wchar.h \
-
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-echo "$as_me:3198: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-#line 3204 "configure"
-#include "confdefs.h"
-#include <$ac_header>
-_ACEOF
-if { (eval echo "$as_me:3208: \"$ac_cpp conftest.$ac_ext\"") >&5
- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
- ac_status=$?
- egrep -v '^ *\+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:3214: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null; then
- if test -s conftest.err; then
- ac_cpp_err=$ac_c_preproc_warn_flag
- else
- ac_cpp_err=
- fi
-else
- ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
- eval "$as_ac_Header=yes"
-else
- echo "$as_me: failed program was:" >&5
- cat conftest.$ac_ext >&5
- eval "$as_ac_Header=no"
-fi
-rm -f conftest.err conftest.$ac_ext
-fi
-echo "$as_me:3233: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
- cat >>confdefs.h <<EOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
-EOF
-
-fi
-done
-
-echo "$as_me:3243: checking whether time.h and sys/time.h may both be included" >&5
-echo $ECHO_N "checking whether time.h and sys/time.h may both be included... $ECHO_C" >&6
-if test "${ac_cv_header_time+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-#line 3249 "configure"
-#include "confdefs.h"
-#include <sys/types.h>
-#include <sys/time.h>
-#include <time.h>
-
-int
-main ()
-{
-if ((struct tm *) 0)
-return 0;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:3265: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- echo "$as_me:3268: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:3271: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:3274: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_header_time=yes
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_cv_header_time=no
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:3284: result: $ac_cv_header_time" >&5
-echo "${ECHO_T}$ac_cv_header_time" >&6
-if test $ac_cv_header_time = yes; then
-
-cat >>confdefs.h <<\EOF
-#define TIME_WITH_SYS_TIME 1
-EOF
-
-fi
-
- echo "$as_me:3294: checking for nl_langinfo and CODESET" >&5
-echo $ECHO_N "checking for nl_langinfo and CODESET... $ECHO_C" >&6
-if test "${am_cv_langinfo_codeset+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-#line 3300 "configure"
-#include "confdefs.h"
-#include <langinfo.h>
-int
-main ()
-{
-char* cs = nl_langinfo(CODESET);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:3312: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:3315: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:3318: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:3321: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- am_cv_langinfo_codeset=yes
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-am_cv_langinfo_codeset=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-
-fi
-echo "$as_me:3332: result: $am_cv_langinfo_codeset" >&5
-echo "${ECHO_T}$am_cv_langinfo_codeset" >&6
- if test $am_cv_langinfo_codeset = yes; then
-
-cat >>confdefs.h <<\EOF
-#define HAVE_LANGINFO_CODESET 1
-EOF
-
- fi
-
-### checks for typedefs
-
-echo "$as_me:3344: checking for signal global datatype" >&5
-echo $ECHO_N "checking for signal global datatype... $ECHO_C" >&6
-if test "${cf_cv_sig_atomic_t+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
- for cf_type in \
- "volatile sig_atomic_t" \
- "sig_atomic_t" \
- "int"
- do
- cat >conftest.$ac_ext <<_ACEOF
-#line 3356 "configure"
-#include "confdefs.h"
-
-#include <sys/types.h>
-#include <signal.h>
-#include <stdio.h>
-
-extern $cf_type x;
-$cf_type x;
-static void handler(int sig)
-{
- x = 5;
-}
-int
-main ()
-{
-signal(SIGINT, handler);
- x = 1
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:3379: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- echo "$as_me:3382: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:3385: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:3388: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cf_cv_sig_atomic_t=$cf_type
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cf_cv_sig_atomic_t=no
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
- test "$cf_cv_sig_atomic_t" != no && break
- done
-
-fi
-
-echo "$as_me:3402: result: $cf_cv_sig_atomic_t" >&5
-echo "${ECHO_T}$cf_cv_sig_atomic_t" >&6
-test "$cf_cv_sig_atomic_t" != no && cat >>confdefs.h <<EOF
-#define SIG_ATOMIC_T $cf_cv_sig_atomic_t
-EOF
-
-echo "$as_me:3408: checking for size_t in <sys/types.h> or <stdio.h>" >&5
-echo $ECHO_N "checking for size_t in <sys/types.h> or <stdio.h>... $ECHO_C" >&6
-if test "${cf_cv_type_size_t+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
- cat >conftest.$ac_ext <<_ACEOF
-#line 3415 "configure"
-#include "confdefs.h"
-
-#include <sys/types.h>
-#ifdef STDC_HEADERS
-#include <stdlib.h>
-#include <stddef.h>
-#endif
-#include <stdio.h>
-int
-main ()
-{
-size_t x
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:3433: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- echo "$as_me:3436: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:3439: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:3442: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cf_cv_type_size_t=yes
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cf_cv_type_size_t=no
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-
-fi
-
-echo "$as_me:3454: result: $cf_cv_type_size_t" >&5
-echo "${ECHO_T}$cf_cv_type_size_t" >&6
-test $cf_cv_type_size_t = no && cat >>confdefs.h <<\EOF
-#define size_t unsigned
-EOF
-
-echo "$as_me:3460: checking for ANSI C header files" >&5
-echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6
-if test "${ac_cv_header_stdc+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-#line 3466 "configure"
-#include "confdefs.h"
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <float.h>
-
-_ACEOF
-if { (eval echo "$as_me:3474: \"$ac_cpp conftest.$ac_ext\"") >&5
- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
- ac_status=$?
- egrep -v '^ *\+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:3480: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null; then
- if test -s conftest.err; then
- ac_cpp_err=$ac_c_preproc_warn_flag
- else
- ac_cpp_err=
- fi
-else
- ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
- ac_cv_header_stdc=yes
-else
- echo "$as_me: failed program was:" >&5
- cat conftest.$ac_ext >&5
- ac_cv_header_stdc=no
-fi
-rm -f conftest.err conftest.$ac_ext
-
-if test $ac_cv_header_stdc = yes; then
- # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
- cat >conftest.$ac_ext <<_ACEOF
-#line 3502 "configure"
-#include "confdefs.h"
-#include <string.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- egrep "memchr" >/dev/null 2>&1; then
- :
-else
- ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
- # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
- cat >conftest.$ac_ext <<_ACEOF
-#line 3520 "configure"
-#include "confdefs.h"
-#include <stdlib.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- egrep "free" >/dev/null 2>&1; then
- :
-else
- ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
- # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
- if test "$cross_compiling" = yes; then
- :
-else
- cat >conftest.$ac_ext <<_ACEOF
-#line 3541 "configure"
-#include "confdefs.h"
-#include <ctype.h>
-#if ((' ' & 0x0FF) == 0x020)
-# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
-# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
-#else
-# define ISLOWER(c) (('a' <= (c) && (c) <= 'i') \
- || ('j' <= (c) && (c) <= 'r') \
- || ('s' <= (c) && (c) <= 'z'))
-# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
-#endif
-
-#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
-int
-main ()
-{
- int i;
- for (i = 0; i < 256; i++)
- if (XOR (islower (i), ISLOWER (i))
- || toupper (i) != TOUPPER (i))
- exit(2);
- exit (0);
-}
-_ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:3567: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:3570: \$? = $ac_status" >&5
- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (eval echo "$as_me:3572: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:3575: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- :
-else
- echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_cv_header_stdc=no
-fi
-rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-fi
-fi
-echo "$as_me:3588: result: $ac_cv_header_stdc" >&5
-echo "${ECHO_T}$ac_cv_header_stdc" >&6
-if test $ac_cv_header_stdc = yes; then
-
-cat >>confdefs.h <<\EOF
-#define STDC_HEADERS 1
-EOF
-
-fi
-
-# On IRIX 5.3, sys/types and inttypes.h are conflicting.
-
-for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
- inttypes.h stdint.h unistd.h
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-echo "$as_me:3604: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-#line 3610 "configure"
-#include "confdefs.h"
-$ac_includes_default
-#include <$ac_header>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:3616: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- echo "$as_me:3619: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:3622: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:3625: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_Header=yes"
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-eval "$as_ac_Header=no"
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:3635: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
- cat >>confdefs.h <<EOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
-EOF
-
-fi
-done
-
-echo "$as_me:3645: checking for time_t" >&5
-echo $ECHO_N "checking for time_t... $ECHO_C" >&6
-if test "${ac_cv_type_time_t+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-#line 3651 "configure"
-#include "confdefs.h"
-$ac_includes_default
-int
-main ()
-{
-if ((time_t *) 0)
- return 0;
-if (sizeof (time_t))
- return 0;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:3666: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- echo "$as_me:3669: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:3672: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:3675: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_type_time_t=yes
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_cv_type_time_t=no
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:3685: result: $ac_cv_type_time_t" >&5
-echo "${ECHO_T}$ac_cv_type_time_t" >&6
-if test $ac_cv_type_time_t = yes; then
- :
-else
-
-cat >>confdefs.h <<EOF
-#define time_t long
-EOF
-
-fi
-
-echo "$as_me:3697: checking for mode_t" >&5
-echo $ECHO_N "checking for mode_t... $ECHO_C" >&6
-if test "${ac_cv_type_mode_t+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-#line 3703 "configure"
-#include "confdefs.h"
-$ac_includes_default
-int
-main ()
-{
-if ((mode_t *) 0)
- return 0;
-if (sizeof (mode_t))
- return 0;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:3718: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- echo "$as_me:3721: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:3724: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:3727: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_type_mode_t=yes
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_cv_type_mode_t=no
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:3737: result: $ac_cv_type_mode_t" >&5
-echo "${ECHO_T}$ac_cv_type_mode_t" >&6
-if test $ac_cv_type_mode_t = yes; then
- :
-else
-
-cat >>confdefs.h <<EOF
-#define mode_t int
-EOF
-
-fi
-
-echo "$as_me:3749: checking for pid_t" >&5
-echo $ECHO_N "checking for pid_t... $ECHO_C" >&6
-if test "${ac_cv_type_pid_t+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-#line 3755 "configure"
-#include "confdefs.h"
-$ac_includes_default
-int
-main ()
-{
-if ((pid_t *) 0)
- return 0;
-if (sizeof (pid_t))
- return 0;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:3770: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- echo "$as_me:3773: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:3776: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:3779: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_type_pid_t=yes
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_cv_type_pid_t=no
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:3789: result: $ac_cv_type_pid_t" >&5
-echo "${ECHO_T}$ac_cv_type_pid_t" >&6
-if test $ac_cv_type_pid_t = yes; then
- :
-else
-
-cat >>confdefs.h <<EOF
-#define pid_t int
-EOF
-
-fi
-
-echo "$as_me:3801: checking for uid_t in sys/types.h" >&5
-echo $ECHO_N "checking for uid_t in sys/types.h... $ECHO_C" >&6
-if test "${ac_cv_type_uid_t+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-#line 3807 "configure"
-#include "confdefs.h"
-#include <sys/types.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- egrep "uid_t" >/dev/null 2>&1; then
- ac_cv_type_uid_t=yes
-else
- ac_cv_type_uid_t=no
-fi
-rm -f conftest*
-
-fi
-echo "$as_me:3821: result: $ac_cv_type_uid_t" >&5
-echo "${ECHO_T}$ac_cv_type_uid_t" >&6
-if test $ac_cv_type_uid_t = no; then
-
-cat >>confdefs.h <<\EOF
-#define uid_t int
-EOF
-
-cat >>confdefs.h <<\EOF
-#define gid_t int
-EOF
-
-fi
-
-### checks for library functions
-
-for ac_func in \
- bcopy \
- gethostname \
- getlogin \
- memmove \
- putenv \
- sched_yield \
- strerror \
- strftime \
- tcgetattr \
- waitpid \
- wcswidth \
- wcwidth
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:3852: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-#line 3858 "configure"
-#include "confdefs.h"
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below. */
-#include <assert.h>
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-char (*f) ();
-
-int
-main ()
-{
-/* 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_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-f = $ac_func;
-#endif
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:3889: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:3892: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:3895: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:3898: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-eval "$as_ac_var=no"
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:3908: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<EOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-EOF
-
-fi
-done
-
-echo "$as_me:3918: checking for memmove" >&5
-echo $ECHO_N "checking for memmove... $ECHO_C" >&6
-if test "${ac_cv_func_memmove+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-#line 3924 "configure"
-#include "confdefs.h"
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char memmove (); below. */
-#include <assert.h>
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char memmove ();
-char (*f) ();
-
-int
-main ()
-{
-/* 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_memmove) || defined (__stub___memmove)
-choke me
-#else
-f = memmove;
-#endif
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:3955: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:3958: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:3961: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:3964: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_func_memmove=yes
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_cv_func_memmove=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:3974: result: $ac_cv_func_memmove" >&5
-echo "${ECHO_T}$ac_cv_func_memmove" >&6
-if test $ac_cv_func_memmove = yes; then
- :
-else
-
-echo "$as_me:3980: checking for bcopy" >&5
-echo $ECHO_N "checking for bcopy... $ECHO_C" >&6
-if test "${ac_cv_func_bcopy+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-#line 3986 "configure"
-#include "confdefs.h"
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char bcopy (); below. */
-#include <assert.h>
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char bcopy ();
-char (*f) ();
-
-int
-main ()
-{
-/* 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_bcopy) || defined (__stub___bcopy)
-choke me
-#else
-f = bcopy;
-#endif
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:4017: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:4020: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:4023: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:4026: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_func_bcopy=yes
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_cv_func_bcopy=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:4036: result: $ac_cv_func_bcopy" >&5
-echo "${ECHO_T}$ac_cv_func_bcopy" >&6
-if test $ac_cv_func_bcopy = yes; then
-
- echo "$as_me:4040: checking if bcopy does overlapping moves" >&5
-echo $ECHO_N "checking if bcopy does overlapping moves... $ECHO_C" >&6
-if test "${cf_cv_good_bcopy+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
- if test "$cross_compiling" = yes; then
- cf_cv_good_bcopy=unknown
-else
- cat >conftest.$ac_ext <<_ACEOF
-#line 4050 "configure"
-#include "confdefs.h"
-
-int main() {
- static char data[] = "abcdefghijklmnopqrstuwwxyz";
- char temp[40];
- bcopy(data, temp, sizeof(data));
- bcopy(temp+10, temp, 15);
- bcopy(temp+5, temp+15, 10);
- exit (strcmp(temp, "klmnopqrstuwwxypqrstuwwxyz"));
-}
-
-_ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:4064: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:4067: \$? = $ac_status" >&5
- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (eval echo "$as_me:4069: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:4072: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cf_cv_good_bcopy=yes
-else
- echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cf_cv_good_bcopy=no
-fi
-rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-
-fi
-echo "$as_me:4085: result: $cf_cv_good_bcopy" >&5
-echo "${ECHO_T}$cf_cv_good_bcopy" >&6
-
-else
- cf_cv_good_bcopy=no
-fi
-
- if test "$cf_cv_good_bcopy" = yes ; then
- cat >>confdefs.h <<\EOF
-#define USE_OK_BCOPY 1
-EOF
-
- else
- cat >>confdefs.h <<\EOF
-#define USE_MY_MEMMOVE 1
-EOF
-
- fi
-
-fi
-
-for ac_header in lastlog.h paths.h
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-echo "$as_me:4109: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-#line 4115 "configure"
-#include "confdefs.h"
-#include <$ac_header>
-_ACEOF
-if { (eval echo "$as_me:4119: \"$ac_cpp conftest.$ac_ext\"") >&5
- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
- ac_status=$?
- egrep -v '^ *\+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:4125: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null; then
- if test -s conftest.err; then
- ac_cpp_err=$ac_c_preproc_warn_flag
- else
- ac_cpp_err=
- fi
-else
- ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
- eval "$as_ac_Header=yes"
-else
- echo "$as_me: failed program was:" >&5
- cat conftest.$ac_ext >&5
- eval "$as_ac_Header=no"
-fi
-rm -f conftest.err conftest.$ac_ext
-fi
-echo "$as_me:4144: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
- cat >>confdefs.h <<EOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
-EOF
-
-fi
-done
-
-echo "$as_me:4154: checking for lastlog path" >&5
-echo $ECHO_N "checking for lastlog path... $ECHO_C" >&6
-if test "${cf_cv_path_lastlog+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-cat >conftest.$ac_ext <<_ACEOF
-#line 4161 "configure"
-#include "confdefs.h"
-
-#include <sys/types.h>
-#ifdef HAVE_LASTLOG_H
-#include <lastlog.h>
-#else
-#ifdef HAVE_PATHS_H
-#include <paths.h>
-#endif
-#endif
-int
-main ()
-{
-char *path = _PATH_LASTLOG
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:4181: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- echo "$as_me:4184: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:4187: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:4190: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cf_cv_path_lastlog="_PATH_LASTLOG"
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-if test -f /usr/adm/lastlog ; then
- cf_cv_path_lastlog=/usr/adm/lastlog
- else
- cf_cv_path_lastlog=no
- fi
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-
-fi
-echo "$as_me:4205: result: $cf_cv_path_lastlog" >&5
-echo "${ECHO_T}$cf_cv_path_lastlog" >&6
-test $cf_cv_path_lastlog != no && cat >>confdefs.h <<\EOF
-#define USE_LASTLOG 1
-EOF
-
-echo "$as_me:4211: checking for utmp implementation" >&5
-echo $ECHO_N "checking for utmp implementation... $ECHO_C" >&6
-if test "${cf_cv_have_utmp+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
- cf_cv_have_utmp=no
-for cf_header in utmpx utmp ; do
-cf_utmp_includes="
-#include <sys/types.h>
-#include <${cf_header}.h>
-#define getutent getutxent
-#ifdef USE_LASTLOG
-#include <lastlog.h> /* may conflict with utmpx.h on Linux */
-#endif
-"
- cat >conftest.$ac_ext <<_ACEOF
-#line 4228 "configure"
-#include "confdefs.h"
-$cf_utmp_includes
-int
-main ()
-{
-struct $cf_header x;
- char *name = x.ut_name; /* utmp.h and compatible definitions */
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:4242: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- echo "$as_me:4245: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:4248: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:4251: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cf_cv_have_utmp=$cf_header
- break
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-
- cat >conftest.$ac_ext <<_ACEOF
-#line 4260 "configure"
-#include "confdefs.h"
-$cf_utmp_includes
-int
-main ()
-{
-struct $cf_header x;
- char *name = x.ut_user; /* utmpx.h must declare this */
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:4274: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- echo "$as_me:4277: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:4280: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:4283: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cf_cv_have_utmp=$cf_header
- break
-
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-done
-
-fi
-echo "$as_me:4298: result: $cf_cv_have_utmp" >&5
-echo "${ECHO_T}$cf_cv_have_utmp" >&6
-
-if test $cf_cv_have_utmp != no ; then
- cat >>confdefs.h <<\EOF
-#define HAVE_UTMP 1
-EOF
-
- test $cf_cv_have_utmp = utmpx && cat >>confdefs.h <<\EOF
-#define UTMPX_FOR_UTMP 1
-EOF
-
-if test $cf_cv_have_utmp != no ; then
-echo "$as_me:4311: checking if utmp.ut_host is declared" >&5
-echo $ECHO_N "checking if utmp.ut_host is declared... $ECHO_C" >&6
-if test "${cf_cv_have_utmp_ut_host+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
- cat >conftest.$ac_ext <<_ACEOF
-#line 4318 "configure"
-#include "confdefs.h"
-
-#include <sys/types.h>
-#include <${cf_cv_have_utmp}.h>
-int
-main ()
-{
-struct $cf_cv_have_utmp x; char *y = &x.ut_host[0]
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:4332: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- echo "$as_me:4335: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:4338: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:4341: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cf_cv_have_utmp_ut_host=yes
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cf_cv_have_utmp_ut_host=no
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-
-fi
-
-echo "$as_me:4353: result: $cf_cv_have_utmp_ut_host" >&5
-echo "${ECHO_T}$cf_cv_have_utmp_ut_host" >&6
-test $cf_cv_have_utmp_ut_host != no && cat >>confdefs.h <<\EOF
-#define HAVE_UTMP_UT_HOST 1
-EOF
-
-fi
-
-if test $cf_cv_have_utmp != no ; then
-echo "$as_me:4362: checking if utmp.ut_name is declared" >&5
-echo $ECHO_N "checking if utmp.ut_name is declared... $ECHO_C" >&6
-if test "${cf_cv_have_utmp_ut_name+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
- cf_cv_have_utmp_ut_name=no
-cf_utmp_includes="
-#include <sys/types.h>
-#include <${cf_cv_have_utmp}.h>
-#define getutent getutxent
-#ifdef USE_LASTLOG
-#include <lastlog.h> /* may conflict with utmpx.h on Linux */
-#endif
-"
-for cf_header in ut_name ut_user ; do
- cat >conftest.$ac_ext <<_ACEOF
-#line 4379 "configure"
-#include "confdefs.h"
-$cf_utmp_includes
-int
-main ()
-{
-struct $cf_cv_have_utmp x;
- char *name = x.$cf_header;
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:4393: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- echo "$as_me:4396: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:4399: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:4402: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cf_cv_have_utmp_ut_name=$cf_header
- break
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-done
-
-fi
-echo "$as_me:4414: result: $cf_cv_have_utmp_ut_name" >&5
-echo "${ECHO_T}$cf_cv_have_utmp_ut_name" >&6
-
-case $cf_cv_have_utmp_ut_name in #(vi
-no) #(vi
- { { echo "$as_me:4419: error: Cannot find declaration for ut.ut_name" >&5
-echo "$as_me: error: Cannot find declaration for ut.ut_name" >&2;}
- { (exit 1); exit 1; }; }
- ;;
-ut_user)
- cat >>confdefs.h <<\EOF
-#define ut_name ut_user
-EOF
-
- ;;
-esac
-fi
-
-if test $cf_cv_have_utmp != no ; then
-echo "$as_me:4433: checking for exit-status in $cf_cv_have_utmp" >&5
-echo $ECHO_N "checking for exit-status in $cf_cv_have_utmp... $ECHO_C" >&6
-if test "${cf_cv_have_utmp_ut_xstatus+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-for cf_result in \
- ut_exit.__e_exit \
- ut_exit.e_exit \
- ut_exit.ut_e_exit \
- ut_exit.ut_exit
-do
-cat >conftest.$ac_ext <<_ACEOF
-#line 4446 "configure"
-#include "confdefs.h"
-
-#include <sys/types.h>
-#include <${cf_cv_have_utmp}.h>
-int
-main ()
-{
-struct $cf_cv_have_utmp x; long y = x.$cf_result = 0
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:4460: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- echo "$as_me:4463: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:4466: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:4469: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cf_cv_have_utmp_ut_xstatus=$cf_result
- break
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cf_cv_have_utmp_ut_xstatus=no
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-done
-
-fi
-echo "$as_me:4482: result: $cf_cv_have_utmp_ut_xstatus" >&5
-echo "${ECHO_T}$cf_cv_have_utmp_ut_xstatus" >&6
-if test $cf_cv_have_utmp_ut_xstatus != no ; then
- cat >>confdefs.h <<\EOF
-#define HAVE_UTMP_UT_XSTATUS 1
-EOF
-
- cat >>confdefs.h <<EOF
-#define ut_xstatus $cf_cv_have_utmp_ut_xstatus
-EOF
-
-fi
-fi
-
-if test $cf_cv_have_utmp != no ; then
-echo "$as_me:4497: checking if utmp.ut_xtime is declared" >&5
-echo $ECHO_N "checking if utmp.ut_xtime is declared... $ECHO_C" >&6
-if test "${cf_cv_have_utmp_ut_xtime+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
- cat >conftest.$ac_ext <<_ACEOF
-#line 4504 "configure"
-#include "confdefs.h"
-
-#include <sys/types.h>
-#include <${cf_cv_have_utmp}.h>
-int
-main ()
-{
-struct $cf_cv_have_utmp x; long y = x.ut_xtime = 0
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:4518: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- echo "$as_me:4521: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:4524: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:4527: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cf_cv_have_utmp_ut_xtime=yes
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cat >conftest.$ac_ext <<_ACEOF
-#line 4534 "configure"
-#include "confdefs.h"
-
-#include <sys/types.h>
-#include <${cf_cv_have_utmp}.h>
-int
-main ()
-{
-struct $cf_cv_have_utmp x; long y = x.ut_tv.tv_sec
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:4548: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- echo "$as_me:4551: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:4554: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:4557: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cf_cv_have_utmp_ut_xtime=define
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cf_cv_have_utmp_ut_xtime=no
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-
-fi
-echo "$as_me:4571: result: $cf_cv_have_utmp_ut_xtime" >&5
-echo "${ECHO_T}$cf_cv_have_utmp_ut_xtime" >&6
-if test $cf_cv_have_utmp_ut_xtime != no ; then
- cat >>confdefs.h <<\EOF
-#define HAVE_UTMP_UT_XTIME 1
-EOF
-
- if test $cf_cv_have_utmp_ut_xtime = define ; then
- cat >>confdefs.h <<\EOF
-#define ut_xtime ut_tv.tv_sec
-EOF
-
- fi
-fi
-fi
-
-if test $cf_cv_have_utmp != no ; then
-echo "$as_me:4588: checking if utmp.ut_session is declared" >&5
-echo $ECHO_N "checking if utmp.ut_session is declared... $ECHO_C" >&6
-if test "${cf_cv_have_utmp_ut_session+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
- cat >conftest.$ac_ext <<_ACEOF
-#line 4595 "configure"
-#include "confdefs.h"
-
-#include <sys/types.h>
-#include <${cf_cv_have_utmp}.h>
-int
-main ()
-{
-struct $cf_cv_have_utmp x; long y = x.ut_session
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:4609: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- echo "$as_me:4612: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:4615: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:4618: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cf_cv_have_utmp_ut_session=yes
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cf_cv_have_utmp_ut_session=no
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-
-fi
-echo "$as_me:4629: result: $cf_cv_have_utmp_ut_session" >&5
-echo "${ECHO_T}$cf_cv_have_utmp_ut_session" >&6
-if test $cf_cv_have_utmp_ut_session != no ; then
- cat >>confdefs.h <<\EOF
-#define HAVE_UTMP_UT_SESSION 1
-EOF
-
-fi
-fi
-
-echo "$as_me:4639: checking if $cf_cv_have_utmp is SYSV flavor" >&5
-echo $ECHO_N "checking if $cf_cv_have_utmp is SYSV flavor... $ECHO_C" >&6
-if test "${cf_cv_sysv_utmp+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-test "$cf_cv_have_utmp" = "utmp" && cf_prefix="ut" || cf_prefix="utx"
-cat >conftest.$ac_ext <<_ACEOF
-#line 4647 "configure"
-#include "confdefs.h"
-
-#include <sys/types.h>
-#include <${cf_cv_have_utmp}.h>
-int
-main ()
-{
-
-struct $cf_cv_have_utmp x;
- set${cf_prefix}ent ();
- get${cf_prefix}id(&x);
- put${cf_prefix}line(&x);
- end${cf_prefix}ent();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:4666: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:4669: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:4672: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:4675: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cf_cv_sysv_utmp=yes
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cf_cv_sysv_utmp=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-
-fi
-echo "$as_me:4686: result: $cf_cv_sysv_utmp" >&5
-echo "${ECHO_T}$cf_cv_sysv_utmp" >&6
-test $cf_cv_sysv_utmp = yes && cat >>confdefs.h <<\EOF
-#define USE_SYSV_UTMP 1
-EOF
-
-fi
-
-# compute a reasonable value for $TERM to give tgetent(), since we may be
-# running in 'screen', which sets $TERMCAP to a specific entry that is not
-# necessarily in /etc/termcap - unsetenv is not portable, so we cannot simply
-# discard $TERMCAP.
-cf_TERMVAR=vt100
-test -n "$TERMCAP" && cf_TERMVAR="$TERM"
-test -z "$cf_TERMVAR" && cf_TERMVAR=vt100
-
-echo "$as_me:4702: checking if we want full tgetent function" >&5
-echo $ECHO_N "checking if we want full tgetent function... $ECHO_C" >&6
-
-# Check whether --enable-full-tgetent or --disable-full-tgetent was given.
-if test "${enable_full_tgetent+set}" = set; then
- enableval="$enable_full_tgetent"
- test "$enableval" != no && enableval=yes
- if test "$enableval" != "yes" ; then
- cf_full_tgetent=no
- else
- cf_full_tgetent=yes
- fi
-else
- enableval=yes
- cf_full_tgetent=yes
-
-fi;
-echo "$as_me:4719: result: $cf_full_tgetent" >&5
-echo "${ECHO_T}$cf_full_tgetent" >&6
-
-if test "$cf_full_tgetent" = yes ; then
- cf_test_message="full tgetent"
-else
- cf_test_message="tgetent"
-fi
-
-echo "$as_me:4728: checking for $cf_test_message function" >&5
-echo $ECHO_N "checking for $cf_test_message function... $ECHO_C" >&6
-if test "${cf_cv_lib_tgetent+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-cf_save_LIBS="$LIBS"
-cf_cv_lib_tgetent=no
-if test "$cf_full_tgetent" = yes ; then
- cf_TERMLIB="termcap termlib ncurses curses"
- cf_TERMTST="buffer[0] == 0"
-else
- cf_TERMLIB="termlib ncurses curses"
- cf_TERMTST="0"
-fi
-for cf_termlib in '' $cf_TERMLIB ; do
- LIBS="$cf_save_LIBS"
- test -n "$cf_termlib" && LIBS="$LIBS -l$cf_termlib"
- if test "$cross_compiling" = yes; then
- echo "cross-compiling, cannot verify if a termcap/tgetent is present in $cf_termlib" 1>&5
-else
- cat >conftest.$ac_ext <<_ACEOF
-#line 4750 "configure"
-#include "confdefs.h"
-
-/* terminfo implementations ignore the buffer argument, making it useless for
- * the xterm application, which uses this information to make a new TERMCAP
- * environment variable.
- */
-int main()
-{
- char buffer[1024];
- buffer[0] = 0;
- tgetent(buffer, "$cf_TERMVAR");
- exit($cf_TERMTST); }
-_ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:4765: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:4768: \$? = $ac_status" >&5
- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (eval echo "$as_me:4770: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:4773: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- echo "yes, there is a termcap/tgetent in $cf_termlib" 1>&5
- if test -n "$cf_termlib" ; then
- cf_cv_lib_tgetent="-l$cf_termlib"
- else
- cf_cv_lib_tgetent=yes
- fi
- break
-else
- echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-echo "no, there is no termcap/tgetent in $cf_termlib" 1>&5
-fi
-rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-done
-LIBS="$cf_save_LIBS"
-
-fi
-echo "$as_me:4794: result: $cf_cv_lib_tgetent" >&5
-echo "${ECHO_T}$cf_cv_lib_tgetent" >&6
-
-# If we found a working tgetent(), set LIBS and check for termcap.h.
-# (LIBS cannot be set inside AC_CACHE_CHECK; the commands there should
-# not have side effects other than setting the cache variable, because
-# they are not executed when a cached value exists.)
-if test "$cf_cv_lib_tgetent" != no ; then
- test "$cf_cv_lib_tgetent" != yes && LIBS="$LIBS $cf_cv_lib_tgetent"
- cat >>confdefs.h <<\EOF
-#define USE_TERMCAP 1
-EOF
-
- cat >conftest.$ac_ext <<_ACEOF
-#line 4808 "configure"
-#include "confdefs.h"
-
-#include <termcap.h>
-int
-main ()
-{
-
-#ifdef NCURSES_VERSION
-make an error
-#endif
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:4824: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- echo "$as_me:4827: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:4830: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:4833: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cat >>confdefs.h <<\EOF
-#define HAVE_TERMCAP_H 1
-EOF
-
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-else
- # If we didn't find a tgetent() that supports the buffer
- # argument, look again to see whether we can find even
- # a crippled one. A crippled tgetent() is still useful to
- # validate values for the TERM environment variable given to
- # child processes.
- echo "$as_me:4850: checking for partial tgetent function" >&5
-echo $ECHO_N "checking for partial tgetent function... $ECHO_C" >&6
-if test "${cf_cv_lib_part_tgetent+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
- cf_cv_lib_part_tgetent=no
- for cf_termlib in $cf_TERMLIB ; do
- LIBS="$cf_save_LIBS -l$cf_termlib"
- cat >conftest.$ac_ext <<_ACEOF
-#line 4860 "configure"
-#include "confdefs.h"
-
-int
-main ()
-{
-tgetent(0, "$cf_TERMVAR")
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:4872: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:4875: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:4878: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:4881: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- echo "there is a terminfo/tgetent in $cf_termlib" 1>&5
- cf_cv_lib_part_tgetent="-l$cf_termlib"
- break
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
- done
- LIBS="$cf_save_LIBS"
-
-fi
-echo "$as_me:4895: result: $cf_cv_lib_part_tgetent" >&5
-echo "${ECHO_T}$cf_cv_lib_part_tgetent" >&6
-
- if test "$cf_cv_lib_part_tgetent" != no ; then
- LIBS="$LIBS $cf_cv_lib_part_tgetent"
-
-for ac_header in termcap.h
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-echo "$as_me:4904: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-#line 4910 "configure"
-#include "confdefs.h"
-#include <$ac_header>
-_ACEOF
-if { (eval echo "$as_me:4914: \"$ac_cpp conftest.$ac_ext\"") >&5
- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
- ac_status=$?
- egrep -v '^ *\+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:4920: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null; then
- if test -s conftest.err; then
- ac_cpp_err=$ac_c_preproc_warn_flag
- else
- ac_cpp_err=
- fi
-else
- ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
- eval "$as_ac_Header=yes"
-else
- echo "$as_me: failed program was:" >&5
- cat conftest.$ac_ext >&5
- eval "$as_ac_Header=no"
-fi
-rm -f conftest.err conftest.$ac_ext
-fi
-echo "$as_me:4939: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
- cat >>confdefs.h <<EOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
-EOF
-
-fi
-done
-
- # If this is linking against ncurses, we'll trigger the
- # ifdef in resize.c that turns the termcap stuff back off.
- cat >>confdefs.h <<\EOF
-#define USE_TERMINFO 1
-EOF
-
- fi
-fi
-
-echo "$as_me:4958: checking for directory to install resource files" >&5
-echo $ECHO_N "checking for directory to install resource files... $ECHO_C" >&6
-
-# Check whether --with-app-defaults or --without-app-defaults was given.
-if test "${with_app_defaults+set}" = set; then
- withval="$with_app_defaults"
-
-else
- withval="${appsdir-'\$(exec_prefix)/lib/X11/app-defaults'}"
-fi;
-case ".$withval" in #(vi
-.\$\(*\)*|.\'*\'*) #(vi
- ;;
-..|./*|.\\*) #(vi
- ;;
-.[a-zA-Z]:[\\/]*) #(vi OS/2 EMX
- ;;
-.\${*prefix}*) #(vi
- eval withval="$withval"
- case ".$withval" in #(vi
- .NONE/*)
- withval=`echo $withval | sed -e s%NONE%$ac_default_prefix%`
- ;;
- esac
- ;; #(vi
-.NONE/*)
- withval=`echo $withval | sed -e s%NONE%$ac_default_prefix%`
- ;;
-*)
- { { echo "$as_me:4987: error: expected a pathname, not \"$withval\"" >&5
-echo "$as_me: error: expected a pathname, not \"$withval\"" >&2;}
- { (exit 1); exit 1; }; }
- ;;
-esac
-
-eval appsdir="$withval"
-
-echo "$as_me:4995: result: $appsdir" >&5
-echo "${ECHO_T}$appsdir" >&6
-
-# inherit SINSTALL_OPTS from environment to allow packager to customize it.
-
-echo "$as_me:5000: checking for install-permissions reference" >&5
-echo $ECHO_N "checking for install-permissions reference... $ECHO_C" >&6
-
-# Check whether --with-reference or --without-reference was given.
-if test "${with_reference+set}" = set; then
- withval="$with_reference"
- with_reference=$withval
-else
- with_reference=xterm
-fi;
-echo "$as_me:5010: result: $with_reference" >&5
-echo "${ECHO_T}$with_reference" >&6
-
-test -z "$XTERM_PATH" && XTERM_PATH=$with_reference
-for ac_prog in $XTERM_PATH $with_reference
-do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-echo "$as_me:5018: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_path_XTERM_PATH+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- case $XTERM_PATH in
- [\\/]* | ?:[\\/]*)
- ac_cv_path_XTERM_PATH="$XTERM_PATH" # Let the user override the test with a path.
- ;;
- *)
- ac_save_IFS=$IFS; IFS=$ac_path_separator
-ac_dummy="$PATH"
-for ac_dir in $ac_dummy; do
- IFS=$ac_save_IFS
- test -z "$ac_dir" && ac_dir=.
- if $as_executable_p "$ac_dir/$ac_word"; then
- ac_cv_path_XTERM_PATH="$ac_dir/$ac_word"
- echo "$as_me:5035: found $ac_dir/$ac_word" >&5
- break
-fi
-done
-
- ;;
-esac
-fi
-XTERM_PATH=$ac_cv_path_XTERM_PATH
-
-if test -n "$XTERM_PATH"; then
- echo "$as_me:5046: result: $XTERM_PATH" >&5
-echo "${ECHO_T}$XTERM_PATH" >&6
-else
- echo "$as_me:5049: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
- test -n "$XTERM_PATH" && break
-done
-test -n "$XTERM_PATH" || XTERM_PATH="$XTERM_PATH"
-
-cf_path_prog=""
-cf_path_args=""
-IFS="${IFS= }"; cf_save_ifs="$IFS"
-case $host_os in #(vi
-os2*) #(vi
- IFS="${IFS};"
- ;;
-*)
- IFS="${IFS}:"
- ;;
-esac
-
-for cf_temp in $ac_cv_path_XTERM_PATH
-do
- if test -z "$cf_path_prog" ; then
- if test "$with_full_paths" = yes ; then
-
-case ".$cf_temp" in #(vi
-.\$\(*\)*|.\'*\'*) #(vi
- ;;
-..|./*|.\\*) #(vi
- ;;
-.[a-zA-Z]:[\\/]*) #(vi OS/2 EMX
- ;;
-.\${*prefix}*) #(vi
- eval cf_temp="$cf_temp"
- case ".$cf_temp" in #(vi
- .NONE/*)
- cf_temp=`echo $cf_temp | sed -e s%NONE%$ac_default_prefix%`
- ;;
- esac
- ;; #(vi
-.NONE/*)
- cf_temp=`echo $cf_temp | sed -e s%NONE%$ac_default_prefix%`
- ;;
-*)
- break
- ;;
-esac
-
- cf_path_prog="$cf_temp"
- else
- cf_path_prog="`basename $cf_temp`"
- fi
- elif test -z "$cf_path_args" ; then
- cf_path_args="$cf_temp"
- else
- cf_path_args="$cf_path_args $cf_temp"
- fi
-done
-IFS="$cf_save_ifs"
-
-if test -n "$cf_path_prog" ; then
-
-echo "(line 5111) testing defining path for ${cf_path_prog} ..." 1>&5
-
- cat >>confdefs.h <<EOF
-#define XTERM_PATH_PATH "$cf_path_prog"
-EOF
-
- test -n "$cf_path_args" && cat >>confdefs.h <<EOF
-#define XTERM_PATH_ARGS "$cf_path_args"
-EOF
-
-fi
-
-echo "$as_me:5123: checking if you want to disable setuid" >&5
-echo $ECHO_N "checking if you want to disable setuid... $ECHO_C" >&6
-
-# Check whether --enable-setuid or --disable-setuid was given.
-if test "${enable_setuid+set}" = set; then
- enableval="$enable_setuid"
- test "$enableval" != no && enableval=yes
- if test "$enableval" != "yes" ; then
- disable_setuid=yes
- else
- disable_setuid=no
- fi
-else
- enableval=yes
- disable_setuid=no
-
-fi;
-echo "$as_me:5140: result: $disable_setuid" >&5
-echo "${ECHO_T}$disable_setuid" >&6
-
-echo "$as_me:5143: checking if you want to run xterm setuid to a given user" >&5
-echo $ECHO_N "checking if you want to run xterm setuid to a given user... $ECHO_C" >&6
-
-# Check whether --with-setuid or --without-setuid was given.
-if test "${with_setuid+set}" = set; then
- withval="$with_setuid"
- use_given_setuid=$withval
-else
- use_given_setuid=no
-fi;
-echo "$as_me:5153: result: $use_given_setuid" >&5
-echo "${ECHO_T}$use_given_setuid" >&6
-
-if test "$use_given_setuid" != no ; then
- if test "$use_given_setuid" = yes ; then
- cf_cv_given_setuid=root
- else
- cf_cv_given_setuid=$use_given_setuid
- fi
- SINSTALL_OPTS="$SINSTALL_OPTS u+s -u $cf_cv_given_setuid"
-fi
-
-echo "$as_me:5165: checking if you want to run xterm setgid to match utmp/utmpx file" >&5
-echo $ECHO_N "checking if you want to run xterm setgid to match utmp/utmpx file... $ECHO_C" >&6
-
-# Check whether --with-utmp-setgid or --without-utmp-setgid was given.
-if test "${with_utmp_setgid+set}" = set; then
- withval="$with_utmp_setgid"
- use_utmp_setgid=$withval
-else
- use_utmp_setgid=no
-fi;
-echo "$as_me:5175: result: $use_utmp_setgid" >&5
-echo "${ECHO_T}$use_utmp_setgid" >&6
-
-if test "$use_utmp_setgid" != no ; then
- if test "$use_utmp_setgid" = yes ; then
-
-if test $cf_cv_have_utmp != no ; then
-echo "$as_me:5182: checking for utmp/utmpx group" >&5
-echo $ECHO_N "checking for utmp/utmpx group... $ECHO_C" >&6
-if test "${cf_cv_utmp_group+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-for cf_utmp_path in /var/adm /var/run
-do
- for cf_utmp_file in utmpx utmp
- do
- if test -f $cf_utmp_path/$cf_utmp_file
- then
- cf_cv_utmp_group=root
-
- cf_option="-l -L"
-
- # Expect listing to have fields like this:
- #-r--r--r-- 1 user group 34293 Jul 18 16:29 pathname
- ls $cf_option $cf_utmp_path/$cf_utmp_file >conftest
- read cf_mode cf_links cf_usr cf_grp cf_size cf_date1 cf_date2 cf_date3 cf_rest <conftest
- if test -z "$cf_rest" ; then
- cf_option="$cf_option -g"
- ls $cf_option $cf_utmp_path/$cf_utmp_file >conftest
- read cf_mode cf_links cf_usr cf_grp cf_size cf_date1 cf_date2 cf_date3 cf_rest <conftest
- fi
- rm -f conftest
-
- # If we have a pathname, and the date fields look right, assume we've
- # captured the group as well.
- if test -n "$cf_rest" ; then
- cf_test=`echo "${cf_date2}${cf_date3}" | sed -e 's/[0-9:]//g'`
- if test -z "$cf_test" ; then
- cf_cv_utmp_group=$cf_grp;
- fi
- fi
- break
- fi
- done
- test -n "$cf_cv_utmp_group" && break
-done
-
-fi
-echo "$as_me:5224: result: $cf_cv_utmp_group" >&5
-echo "${ECHO_T}$cf_cv_utmp_group" >&6
-else
- { { echo "$as_me:5227: error: cannot find utmp group" >&5
-echo "$as_me: error: cannot find utmp group" >&2;}
- { (exit 1); exit 1; }; }
-fi
-
- else
- cf_cv_utmp_group=$use_utmp_setgid
- fi
- cat >>confdefs.h <<\EOF
-#define USE_UTMP_SETGID 1
-EOF
-
- SINSTALL_OPTS="$SINSTALL_OPTS g+s -g $cf_cv_utmp_group"
-fi
-
-echo "$as_me:5242: checking if you want to link with utempter" >&5
-echo $ECHO_N "checking if you want to link with utempter... $ECHO_C" >&6
-
-# Check whether --with-utempter or --without-utempter was given.
-if test "${with_utempter+set}" = set; then
- withval="$with_utempter"
- use_utempter=$withval
-else
- use_utempter=no
-fi;
-echo "$as_me:5252: result: $use_utempter" >&5
-echo "${ECHO_T}$use_utempter" >&6
-
-if test "$use_utempter" = yes ; then
-
-echo "$as_me:5257: checking if we can link with utempter library" >&5
-echo $ECHO_N "checking if we can link with utempter library... $ECHO_C" >&6
-if test "${cf_cv_have_utempter+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-cf_save_LIBS="$LIBS"
-LIBS="-lutempter $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-#line 5266 "configure"
-#include "confdefs.h"
-
-#include <utempter.h>
-
-int
-main ()
-{
-
- addToUtmp("/dev/tty", 0, 1);
- removeFromUtmp();
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:5283: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:5286: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:5289: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:5292: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
-
- cf_cv_have_utempter=yes
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-
- cf_cv_have_utempter=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-LIBS="$cf_save_LIBS"
-
-fi
-echo "$as_me:5306: result: $cf_cv_have_utempter" >&5
-echo "${ECHO_T}$cf_cv_have_utempter" >&6
-if test "$cf_cv_have_utempter" = yes ; then
- cat >>confdefs.h <<\EOF
-#define USE_UTEMPTER 1
-EOF
-
- LIBS="-lutempter $LIBS"
-fi
-
- test "$cf_cv_have_utempter" = yes && disable_setuid=yes
-fi
-
-### checks for external data
-
-echo "$as_me:5321: checking if external errno is declared" >&5
-echo $ECHO_N "checking if external errno is declared... $ECHO_C" >&6
-if test "${cf_cv_dcl_errno+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
- cat >conftest.$ac_ext <<_ACEOF
-#line 5328 "configure"
-#include "confdefs.h"
-
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#include <stdio.h>
-#include <sys/types.h>
-#include <errno.h>
-int
-main ()
-{
-long x = (long) errno
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:5346: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- echo "$as_me:5349: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:5352: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:5355: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cf_cv_dcl_errno=yes
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cf_cv_dcl_errno=no
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-
-fi
-echo "$as_me:5366: result: $cf_cv_dcl_errno" >&5
-echo "${ECHO_T}$cf_cv_dcl_errno" >&6
-
-if test "$cf_cv_dcl_errno" = no ; then
-
-cf_result=`echo "decl_errno" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%`
-
- cat >>confdefs.h <<EOF
-#define $cf_result 1
-EOF
-
-fi
-
-# It's possible (for near-UNIX clones) that the data doesn't exist
-
-echo "$as_me:5381: checking if external errno exists" >&5
-echo $ECHO_N "checking if external errno exists... $ECHO_C" >&6
-if test "${cf_cv_have_errno+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
- cat >conftest.$ac_ext <<_ACEOF
-#line 5388 "configure"
-#include "confdefs.h"
-
-#undef errno
-extern int errno;
-
-int
-main ()
-{
-errno = 2
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:5403: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:5406: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:5409: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:5412: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cf_cv_have_errno=yes
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cf_cv_have_errno=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-
-fi
-echo "$as_me:5423: result: $cf_cv_have_errno" >&5
-echo "${ECHO_T}$cf_cv_have_errno" >&6
-
-if test "$cf_cv_have_errno" = yes ; then
-
-cf_result=`echo "have_errno" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%`
-
- cat >>confdefs.h <<EOF
-#define $cf_result 1
-EOF
-
-fi
-
-echo "$as_me:5436: checking for tty group name" >&5
-echo $ECHO_N "checking for tty group name... $ECHO_C" >&6
-if test "${cf_cv_tty_group_name+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-# If we are configuring as root, it is hard to get a clue about the tty group.
-# But we'll guess based on how our connection is set up - assuming it is done
-# properly.
-
-cf_uid=`id | sed -e 's/^^=*=//' -e 's/(.*$//'`
-if test "$cf_uid" != 0 ; then
-cf_cv_tty_group_name=
-cf_tty_name=`tty`
-test "$cf_tty_name" = "not a tty" && cf_tty_name=/dev/tty
-test -z "$cf_tty_name" && cf_tty_name=/dev/tty
-if test -c "$cf_tty_name"
-then
- cf_option="-l -L"
-
- # Expect listing to have fields like this:
- #-rwxrwxrwx 1 user group 34293 Jul 18 16:29 pathname
- ls $cf_option $cf_tty_name >conftest.out
- read cf_mode cf_links cf_usr cf_grp cf_size cf_date1 cf_date2 cf_date3 cf_rest <conftest.out
- if test -z "$cf_rest" ; then
- cf_option="$cf_option -g"
- ls $cf_option $cf_tty_name >conftest.out
- read cf_mode cf_links cf_usr cf_grp cf_size cf_date1 cf_date2 cf_date3 cf_rest <conftest.out
- fi
- rm -f conftest.out
- cf_cv_tty_group_name=$cf_grp
-fi
-fi
-
-# If we cannot deduce the tty group, fall back on hardcoded cases
-
-if test -z "$cf_cv_tty_group_name"
-then
-case $host_os in #(vi
-osf*) #(vi
- cf_cv_tty_group_name="terminal"
- ;;
-*)
- cf_cv_tty_group_name="unknown"
- if ( egrep '^tty:' /etc/group 2>/dev/null 1>/dev/null ) then
- cf_cv_tty_group_name="tty"
- fi
- ;;
-esac
-fi
-
-fi
-echo "$as_me:5488: result: $cf_cv_tty_group_name" >&5
-echo "${ECHO_T}$cf_cv_tty_group_name" >&6
-
-cat >>confdefs.h <<EOF
-#define TTY_GROUP_NAME "$cf_cv_tty_group_name"
-EOF
-
-# This is only a double-check that the group-name we obtained above really
-# does apply to the device. We cannot perform this test if we are in batch
-# mode, or if we are cross-compiling.
-
-echo "$as_me:5499: checking if we may use $cf_cv_tty_group_name group" >&5
-echo $ECHO_N "checking if we may use $cf_cv_tty_group_name group... $ECHO_C" >&6
-if test "${cf_cv_tty_group+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-cf_tty_name=`tty`
-if test "$cf_tty_name" != "not a tty"
-then
-if test "$cross_compiling" = yes; then
- cf_cv_tty_group=unknown
-else
- cat >conftest.$ac_ext <<_ACEOF
-#line 5512 "configure"
-#include "confdefs.h"
-
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <grp.h>
-int main()
-{
- struct stat sb;
- struct group *ttygrp = getgrnam(TTY_GROUP_NAME);
- char *name = ttyname(0);
-
- endgrent();
- if (ttygrp != 0
- && name != 0
- && stat(name, &sb) == 0
- && sb.st_gid != getgid()
- && sb.st_gid == ttygrp->gr_gid) {
- exit(0);
- }
- exit(1);
-}
-
-_ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:5538: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:5541: \$? = $ac_status" >&5
- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (eval echo "$as_me:5543: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:5546: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cf_cv_tty_group=yes
-else
- echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cf_cv_tty_group=no
-fi
-rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-elif test "$cross_compiling" = yes; then
- cf_cv_tty_group=unknown
-else
- cf_cv_tty_group=yes
-fi
-
-fi
-echo "$as_me:5564: result: $cf_cv_tty_group" >&5
-echo "${ECHO_T}$cf_cv_tty_group" >&6
-test $cf_cv_tty_group = yes && cat >>confdefs.h <<\EOF
-#define USE_TTY_GROUP 1
-EOF
-
-### checks for system services and user specified options
-
-echo "$as_me:5572: checking for sys/wait.h that is POSIX.1 compatible" >&5
-echo $ECHO_N "checking for sys/wait.h that is POSIX.1 compatible... $ECHO_C" >&6
-if test "${ac_cv_header_sys_wait_h+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-#line 5578 "configure"
-#include "confdefs.h"
-#include <sys/types.h>
-#include <sys/wait.h>
-#ifndef WEXITSTATUS
-# define WEXITSTATUS(stat_val) ((unsigned)(stat_val) >> 8)
-#endif
-#ifndef WIFEXITED
-# define WIFEXITED(stat_val) (((stat_val) & 255) == 0)
-#endif
-
-int
-main ()
-{
- int s;
- wait (&s);
- s = WIFEXITED (s) ? WEXITSTATUS (s) : 1;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:5600: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- echo "$as_me:5603: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:5606: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:5609: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_header_sys_wait_h=yes
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_cv_header_sys_wait_h=no
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:5619: result: $ac_cv_header_sys_wait_h" >&5
-echo "${ECHO_T}$ac_cv_header_sys_wait_h" >&6
-if test $ac_cv_header_sys_wait_h = yes; then
-
-cat >>confdefs.h <<\EOF
-#define HAVE_SYS_WAIT_H 1
-EOF
-
-fi
-
-echo "$as_me:5629: checking for POSIX wait functions" >&5
-echo $ECHO_N "checking for POSIX wait functions... $ECHO_C" >&6
-if test "${cf_cv_posix_wait+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-cat >conftest.$ac_ext <<_ACEOF
-#line 5636 "configure"
-#include "confdefs.h"
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <sys/types.h>
-#ifdef HAVE_SYS_WAIT_H
-#include <sys/wait.h>
-#endif
-
-int
-main ()
-{
-
- int stat_loc;
- pid_t pid = waitpid(-1, &stat_loc, WNOHANG|WUNTRACED);
- pid_t pid2 = wait(&stat_loc);
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:5659: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:5662: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:5665: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:5668: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cf_cv_posix_wait=yes
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cf_cv_posix_wait=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-
-fi
-echo "$as_me:5679: result: $cf_cv_posix_wait" >&5
-echo "${ECHO_T}$cf_cv_posix_wait" >&6
-test "$cf_cv_posix_wait" = yes && cat >>confdefs.h <<\EOF
-#define USE_POSIX_WAIT 1
-EOF
-
-echo "$as_me:5685: checking if external sys_nerr is declared" >&5
-echo $ECHO_N "checking if external sys_nerr is declared... $ECHO_C" >&6
-if test "${cf_cv_dcl_sys_nerr+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
- cat >conftest.$ac_ext <<_ACEOF
-#line 5692 "configure"
-#include "confdefs.h"
-
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#include <stdio.h>
-#include <sys/types.h>
-#include <errno.h>
-int
-main ()
-{
-long x = (long) sys_nerr
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:5710: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- echo "$as_me:5713: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:5716: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:5719: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cf_cv_dcl_sys_nerr=yes
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cf_cv_dcl_sys_nerr=no
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-
-fi
-echo "$as_me:5730: result: $cf_cv_dcl_sys_nerr" >&5
-echo "${ECHO_T}$cf_cv_dcl_sys_nerr" >&6
-
-if test "$cf_cv_dcl_sys_nerr" = no ; then
-
-cf_result=`echo "decl_sys_nerr" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%`
-
- cat >>confdefs.h <<EOF
-#define $cf_result 1
-EOF
-
-fi
-
-# It's possible (for near-UNIX clones) that the data doesn't exist
-
-echo "$as_me:5745: checking if external sys_nerr exists" >&5
-echo $ECHO_N "checking if external sys_nerr exists... $ECHO_C" >&6
-if test "${cf_cv_have_sys_nerr+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
- cat >conftest.$ac_ext <<_ACEOF
-#line 5752 "configure"
-#include "confdefs.h"
-
-#undef sys_nerr
-extern int sys_nerr;
-
-int
-main ()
-{
-sys_nerr = 2
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:5767: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:5770: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:5773: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:5776: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cf_cv_have_sys_nerr=yes
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cf_cv_have_sys_nerr=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-
-fi
-echo "$as_me:5787: result: $cf_cv_have_sys_nerr" >&5
-echo "${ECHO_T}$cf_cv_have_sys_nerr" >&6
-
-if test "$cf_cv_have_sys_nerr" = yes ; then
-
-cf_result=`echo "have_sys_nerr" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%`
-
- cat >>confdefs.h <<EOF
-#define $cf_result 1
-EOF
-
-fi
-
-echo "$as_me:5800: checking if external sys_errlist is declared" >&5
-echo $ECHO_N "checking if external sys_errlist is declared... $ECHO_C" >&6
-if test "${cf_cv_dcl_sys_errlist+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
- cat >conftest.$ac_ext <<_ACEOF
-#line 5807 "configure"
-#include "confdefs.h"
-
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#include <stdio.h>
-#include <sys/types.h>
-#include <errno.h>
-int
-main ()
-{
-long x = (long) sys_errlist
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:5825: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- echo "$as_me:5828: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:5831: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:5834: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cf_cv_dcl_sys_errlist=yes
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cf_cv_dcl_sys_errlist=no
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-
-fi
-echo "$as_me:5845: result: $cf_cv_dcl_sys_errlist" >&5
-echo "${ECHO_T}$cf_cv_dcl_sys_errlist" >&6
-
-if test "$cf_cv_dcl_sys_errlist" = no ; then
-
-cf_result=`echo "decl_sys_errlist" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%`
-
- cat >>confdefs.h <<EOF
-#define $cf_result 1
-EOF
-
-fi
-
-# It's possible (for near-UNIX clones) that the data doesn't exist
-
-echo "$as_me:5860: checking if external sys_errlist exists" >&5
-echo $ECHO_N "checking if external sys_errlist exists... $ECHO_C" >&6
-if test "${cf_cv_have_sys_errlist+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
- cat >conftest.$ac_ext <<_ACEOF
-#line 5867 "configure"
-#include "confdefs.h"
-
-#undef sys_errlist
-extern int sys_errlist;
-
-int
-main ()
-{
-sys_errlist = 2
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:5882: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:5885: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:5888: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:5891: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cf_cv_have_sys_errlist=yes
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cf_cv_have_sys_errlist=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-
-fi
-echo "$as_me:5902: result: $cf_cv_have_sys_errlist" >&5
-echo "${ECHO_T}$cf_cv_have_sys_errlist" >&6
-
-if test "$cf_cv_have_sys_errlist" = yes ; then
-
-cf_result=`echo "have_sys_errlist" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%`
-
- cat >>confdefs.h <<EOF
-#define $cf_result 1
-EOF
-
-fi
-
-for ac_header in \
-stdlib.h \
-X11/Intrinsic.h \
-
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-echo "$as_me:5921: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-#line 5927 "configure"
-#include "confdefs.h"
-#include <$ac_header>
-_ACEOF
-if { (eval echo "$as_me:5931: \"$ac_cpp conftest.$ac_ext\"") >&5
- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
- ac_status=$?
- egrep -v '^ *\+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:5937: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null; then
- if test -s conftest.err; then
- ac_cpp_err=$ac_c_preproc_warn_flag
- else
- ac_cpp_err=
- fi
-else
- ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
- eval "$as_ac_Header=yes"
-else
- echo "$as_me: failed program was:" >&5
- cat conftest.$ac_ext >&5
- eval "$as_ac_Header=no"
-fi
-rm -f conftest.err conftest.$ac_ext
-fi
-echo "$as_me:5956: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
- cat >>confdefs.h <<EOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
-EOF
-
-fi
-done
-
-echo "$as_me:5966: checking if we should define SYSV" >&5
-echo $ECHO_N "checking if we should define SYSV... $ECHO_C" >&6
-if test "${cf_cv_sysv+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-cat >conftest.$ac_ext <<_ACEOF
-#line 5973 "configure"
-#include "confdefs.h"
-
-#undef SYSV
-#define SYSV 1 /* get Xos.h to declare sys_errlist[] */
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h> /* look for wchar_t */
-#endif
-#ifdef HAVE_X11_INTRINSIC_H
-#include <X11/Intrinsic.h> /* Intrinsic.h has other traps... */
-#endif
-#include <curses.h>
-#include <term.h> /* eliminate most BSD hacks */
-#include <errno.h> /* declare sys_errlist on older systems */
-#include <sys/termio.h> /* eliminate most of the remaining ones */
-
-int
-main ()
-{
-
-static struct termio d_tio;
- d_tio.c_cc[VINTR] = 0;
- d_tio.c_cc[VQUIT] = 0;
- d_tio.c_cc[VERASE] = 0;
- d_tio.c_cc[VKILL] = 0;
- d_tio.c_cc[VEOF] = 0;
- d_tio.c_cc[VEOL] = 0;
- d_tio.c_cc[VMIN] = 0;
- d_tio.c_cc[VTIME] = 0;
-#if defined(HAVE_SYS_ERRLIST) && !defined(DECL_SYS_ERRLIST)
-sys_errlist[0] = ""; /* Cygwin mis-declares this */
-#endif
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:6011: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- echo "$as_me:6014: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:6017: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:6020: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cf_cv_sysv=yes
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cf_cv_sysv=no
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-
-fi
-echo "$as_me:6031: result: $cf_cv_sysv" >&5
-echo "${ECHO_T}$cf_cv_sysv" >&6
-test "$cf_cv_sysv" = yes && cat >>confdefs.h <<\EOF
-#define SYSV 1
-EOF
-
-echo "$as_me:6037: checking for elf_begin in -lelf" >&5
-echo $ECHO_N "checking for elf_begin in -lelf... $ECHO_C" >&6
-if test "${ac_cv_lib_elf_elf_begin+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lelf $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-#line 6045 "configure"
-#include "confdefs.h"
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char elf_begin ();
-int
-main ()
-{
-elf_begin ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:6064: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:6067: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:6070: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:6073: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_lib_elf_elf_begin=yes
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_cv_lib_elf_elf_begin=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:6084: result: $ac_cv_lib_elf_elf_begin" >&5
-echo "${ECHO_T}$ac_cv_lib_elf_elf_begin" >&6
-if test $ac_cv_lib_elf_elf_begin = yes; then
-
-echo "$as_me:6088: checking if this is an SVR4 system" >&5
-echo $ECHO_N "checking if this is an SVR4 system... $ECHO_C" >&6
-if test "${cf_cv_svr4+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-cat >conftest.$ac_ext <<_ACEOF
-#line 6095 "configure"
-#include "confdefs.h"
-
-#include <elf.h>
-#include <sys/termio.h>
-
-int
-main ()
-{
-
-static struct termio d_tio;
- d_tio.c_cc[VINTR] = 0;
- d_tio.c_cc[VQUIT] = 0;
- d_tio.c_cc[VERASE] = 0;
- d_tio.c_cc[VKILL] = 0;
- d_tio.c_cc[VEOF] = 0;
- d_tio.c_cc[VEOL] = 0;
- d_tio.c_cc[VMIN] = 0;
- d_tio.c_cc[VTIME] = 0;
- d_tio.c_cc[VLNEXT] = 0;
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:6121: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- echo "$as_me:6124: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:6127: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:6130: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cf_cv_svr4=yes
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cf_cv_svr4=no
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-
-fi
-echo "$as_me:6141: result: $cf_cv_svr4" >&5
-echo "${ECHO_T}$cf_cv_svr4" >&6
-
-fi
-
-test "$cf_cv_svr4" = yes && cat >>confdefs.h <<\EOF
-#define SVR4 1
-EOF
-
-echo "$as_me:6150: checking for X" >&5
-echo $ECHO_N "checking for X... $ECHO_C" >&6
-
-# Check whether --with-x or --without-x was given.
-if test "${with_x+set}" = set; then
- withval="$with_x"
-
-fi;
-# $have_x is `yes', `no', `disabled', or empty when we do not yet know.
-if test "x$with_x" = xno; then
- # The user explicitly disabled X.
- have_x=disabled
-else
- if test "x$x_includes" != xNONE && test "x$x_libraries" != xNONE; then
- # Both variables are already set.
- have_x=yes
- else
- if test "${ac_cv_have_x+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- # One or both of the vars are not set, and there is no cached value.
-ac_x_includes=no ac_x_libraries=no
-rm -fr conftest.dir
-if mkdir conftest.dir; then
- cd conftest.dir
- # Make sure to not put "make" in the Imakefile rules, since we grep it out.
- cat >Imakefile <<'EOF'
-acfindx:
- @echo 'ac_im_incroot="${INCROOT}"; ac_im_usrlibdir="${USRLIBDIR}"; ac_im_libdir="${LIBDIR}"'
-EOF
- if (xmkmf) >/dev/null 2>/dev/null && test -f Makefile; then
- # GNU make sometimes prints "make[1]: Entering...", which would confuse us.
- eval `${MAKE-make} acfindx 2>/dev/null | grep -v make`
- # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR.
- for ac_extension in a so sl; do
- if test ! -f $ac_im_usrlibdir/libX11.$ac_extension &&
- test -f $ac_im_libdir/libX11.$ac_extension; then
- ac_im_usrlibdir=$ac_im_libdir; break
- fi
- done
- # Screen out bogus values from the imake configuration. They are
- # bogus both because they are the default anyway, and because
- # using them would break gcc on systems where it needs fixed includes.
- case $ac_im_incroot in
- /usr/include) ;;
- *) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes=$ac_im_incroot;;
- esac
- case $ac_im_usrlibdir in
- /usr/lib | /lib) ;;
- *) test -d "$ac_im_usrlibdir" && ac_x_libraries=$ac_im_usrlibdir ;;
- esac
- fi
- cd ..
- rm -fr conftest.dir
-fi
-
-# Standard set of common directories for X headers.
-# Check X11 before X11Rn because it is often a symlink to the current release.
-ac_x_header_dirs='
-/usr/X11/include
-/usr/X11R6/include
-/usr/X11R5/include
-/usr/X11R4/include
-
-/usr/include/X11
-/usr/include/X11R6
-/usr/include/X11R5
-/usr/include/X11R4
-
-/usr/local/X11/include
-/usr/local/X11R6/include
-/usr/local/X11R5/include
-/usr/local/X11R4/include
-
-/usr/local/include/X11
-/usr/local/include/X11R6
-/usr/local/include/X11R5
-/usr/local/include/X11R4
-
-/usr/X386/include
-/usr/x386/include
-/usr/XFree86/include/X11
-
-/usr/include
-/usr/local/include
-/usr/unsupported/include
-/usr/athena/include
-/usr/local/x11r5/include
-/usr/lpp/Xamples/include
-
-/usr/openwin/include
-/usr/openwin/share/include'
-
-if test "$ac_x_includes" = no; then
- # Guess where to find include files, by looking for Intrinsic.h.
- # First, try using that file with no special directory specified.
- cat >conftest.$ac_ext <<_ACEOF
-#line 6247 "configure"
-#include "confdefs.h"
-#include <X11/Intrinsic.h>
-_ACEOF
-if { (eval echo "$as_me:6251: \"$ac_cpp conftest.$ac_ext\"") >&5
- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
- ac_status=$?
- egrep -v '^ *\+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:6257: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null; then
- if test -s conftest.err; then
- ac_cpp_err=$ac_c_preproc_warn_flag
- else
- ac_cpp_err=
- fi
-else
- ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
- # We can compile using X headers with no special include directory.
-ac_x_includes=
-else
- echo "$as_me: failed program was:" >&5
- cat conftest.$ac_ext >&5
- for ac_dir in $ac_x_header_dirs; do
- if test -r "$ac_dir/X11/Intrinsic.h"; then
- ac_x_includes=$ac_dir
- break
- fi
-done
-fi
-rm -f conftest.err conftest.$ac_ext
-fi # $ac_x_includes = no
-
-if test "$ac_x_libraries" = no; then
- # Check for the libraries.
- # See if we find them without any special options.
- # Don't add to $LIBS permanently.
- ac_save_LIBS=$LIBS
- LIBS="-lXt $LIBS"
- cat >conftest.$ac_ext <<_ACEOF
-#line 6290 "configure"
-#include "confdefs.h"
-#include <X11/Intrinsic.h>
-int
-main ()
-{
-XtMalloc (0)
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:6302: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:6305: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:6308: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:6311: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- LIBS=$ac_save_LIBS
-# We can link X programs with no special library path.
-ac_x_libraries=
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-LIBS=$ac_save_LIBS
-for ac_dir in `echo "$ac_x_includes $ac_x_header_dirs" | sed s/include/lib/g`
-do
- # Don't even attempt the hair of trying to link an X program!
- for ac_extension in a so sl; do
- if test -r $ac_dir/libXt.$ac_extension; then
- ac_x_libraries=$ac_dir
- break 2
- fi
- done
-done
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-fi # $ac_x_libraries = no
-
-if test "$ac_x_includes" = no || test "$ac_x_libraries" = no; then
- # Didn't find X anywhere. Cache the known absence of X.
- ac_cv_have_x="have_x=no"
-else
- # Record where we found X for the cache.
- ac_cv_have_x="have_x=yes \
- ac_x_includes=$ac_x_includes ac_x_libraries=$ac_x_libraries"
-fi
-fi
-
- fi
- eval "$ac_cv_have_x"
-fi # $with_x != no
-
-if test "$have_x" != yes; then
- echo "$as_me:6349: result: $have_x" >&5
-echo "${ECHO_T}$have_x" >&6
- no_x=yes
-else
- # If each of the values was on the command line, it overrides each guess.
- test "x$x_includes" = xNONE && x_includes=$ac_x_includes
- test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries
- # Update the cache value to reflect the command line values.
- ac_cv_have_x="have_x=yes \
- ac_x_includes=$x_includes ac_x_libraries=$x_libraries"
- echo "$as_me:6359: result: libraries $x_libraries, headers $x_includes" >&5
-echo "${ECHO_T}libraries $x_libraries, headers $x_includes" >&6
-fi
-
-if test "$no_x" = yes; then
- # Not all programs may use this symbol, but it does not hurt to define it.
-
-cat >>confdefs.h <<\EOF
-#define X_DISPLAY_MISSING 1
-EOF
-
- X_CFLAGS= X_PRE_LIBS= X_LIBS= X_EXTRA_LIBS=
-else
- if test -n "$x_includes"; then
- X_CFLAGS="$X_CFLAGS -I$x_includes"
- fi
-
- # It would also be nice to do this for all -L options, not just this one.
- if test -n "$x_libraries"; then
- X_LIBS="$X_LIBS -L$x_libraries"
- # For Solaris; some versions of Sun CC require a space after -R and
- # others require no space. Words are not sufficient . . . .
- case `(uname -sr) 2>/dev/null` in
- "SunOS 5"*)
- echo "$as_me:6383: checking whether -R must be followed by a space" >&5
-echo $ECHO_N "checking whether -R must be followed by a space... $ECHO_C" >&6
- ac_xsave_LIBS=$LIBS; LIBS="$LIBS -R$x_libraries"
- cat >conftest.$ac_ext <<_ACEOF
-#line 6387 "configure"
-#include "confdefs.h"
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:6399: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:6402: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:6405: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:6408: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_R_nospace=yes
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_R_nospace=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
- if test $ac_R_nospace = yes; then
- echo "$as_me:6418: result: no" >&5
-echo "${ECHO_T}no" >&6
- X_LIBS="$X_LIBS -R$x_libraries"
- else
- LIBS="$ac_xsave_LIBS -R $x_libraries"
- cat >conftest.$ac_ext <<_ACEOF
-#line 6424 "configure"
-#include "confdefs.h"
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:6436: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:6439: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:6442: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:6445: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_R_space=yes
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_R_space=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
- if test $ac_R_space = yes; then
- echo "$as_me:6455: result: yes" >&5
-echo "${ECHO_T}yes" >&6
- X_LIBS="$X_LIBS -R $x_libraries"
- else
- echo "$as_me:6459: result: neither works" >&5
-echo "${ECHO_T}neither works" >&6
- fi
- fi
- LIBS=$ac_xsave_LIBS
- esac
- fi
-
- # Check for system-dependent libraries X programs must link with.
- # Do this before checking for the system-independent R6 libraries
- # (-lICE), since we may need -lsocket or whatever for X linking.
-
- if test "$ISC" = yes; then
- X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl_s -linet"
- else
- # Martyn Johnson says this is needed for Ultrix, if the X
- # libraries were built with DECnet support. And Karl Berry says
- # the Alpha needs dnet_stub (dnet does not exist).
- ac_xsave_LIBS="$LIBS"; LIBS="$LIBS $X_LIBS -lX11"
- cat >conftest.$ac_ext <<_ACEOF
-#line 6479 "configure"
-#include "confdefs.h"
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char XOpenDisplay ();
-int
-main ()
-{
-XOpenDisplay ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:6498: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:6501: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:6504: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:6507: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- :
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-echo "$as_me:6513: checking for dnet_ntoa in -ldnet" >&5
-echo $ECHO_N "checking for dnet_ntoa in -ldnet... $ECHO_C" >&6
-if test "${ac_cv_lib_dnet_dnet_ntoa+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldnet $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-#line 6521 "configure"
-#include "confdefs.h"
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char dnet_ntoa ();
-int
-main ()
-{
-dnet_ntoa ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:6540: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:6543: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:6546: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:6549: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_lib_dnet_dnet_ntoa=yes
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_cv_lib_dnet_dnet_ntoa=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:6560: result: $ac_cv_lib_dnet_dnet_ntoa" >&5
-echo "${ECHO_T}$ac_cv_lib_dnet_dnet_ntoa" >&6
-if test $ac_cv_lib_dnet_dnet_ntoa = yes; then
- X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet"
-fi
-
- if test $ac_cv_lib_dnet_dnet_ntoa = no; then
- echo "$as_me:6567: checking for dnet_ntoa in -ldnet_stub" >&5
-echo $ECHO_N "checking for dnet_ntoa in -ldnet_stub... $ECHO_C" >&6
-if test "${ac_cv_lib_dnet_stub_dnet_ntoa+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldnet_stub $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-#line 6575 "configure"
-#include "confdefs.h"
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char dnet_ntoa ();
-int
-main ()
-{
-dnet_ntoa ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:6594: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:6597: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:6600: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:6603: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_lib_dnet_stub_dnet_ntoa=yes
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_cv_lib_dnet_stub_dnet_ntoa=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:6614: result: $ac_cv_lib_dnet_stub_dnet_ntoa" >&5
-echo "${ECHO_T}$ac_cv_lib_dnet_stub_dnet_ntoa" >&6
-if test $ac_cv_lib_dnet_stub_dnet_ntoa = yes; then
- X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub"
-fi
-
- fi
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
- LIBS="$ac_xsave_LIBS"
-
- # msh@cis.ufl.edu says -lnsl (and -lsocket) are needed for his 386/AT,
- # to get the SysV transport functions.
- # Chad R. Larson says the Pyramis MIS-ES running DC/OSx (SVR4)
- # needs -lnsl.
- # The nsl library prevents programs from opening the X display
- # on Irix 5.2, according to T.E. Dickey.
- # The functions gethostbyname, getservbyname, and inet_addr are
- # in -lbsd on LynxOS 3.0.1/i386, according to Lars Hecking.
- echo "$as_me:6633: checking for gethostbyname" >&5
-echo $ECHO_N "checking for gethostbyname... $ECHO_C" >&6
-if test "${ac_cv_func_gethostbyname+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-#line 6639 "configure"
-#include "confdefs.h"
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char gethostbyname (); below. */
-#include <assert.h>
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char gethostbyname ();
-char (*f) ();
-
-int
-main ()
-{
-/* 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_gethostbyname) || defined (__stub___gethostbyname)
-choke me
-#else
-f = gethostbyname;
-#endif
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:6670: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:6673: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:6676: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:6679: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_func_gethostbyname=yes
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_cv_func_gethostbyname=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:6689: result: $ac_cv_func_gethostbyname" >&5
-echo "${ECHO_T}$ac_cv_func_gethostbyname" >&6
-
- if test $ac_cv_func_gethostbyname = no; then
- echo "$as_me:6693: checking for gethostbyname in -lnsl" >&5
-echo $ECHO_N "checking for gethostbyname in -lnsl... $ECHO_C" >&6
-if test "${ac_cv_lib_nsl_gethostbyname+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lnsl $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-#line 6701 "configure"
-#include "confdefs.h"
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char gethostbyname ();
-int
-main ()
-{
-gethostbyname ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:6720: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:6723: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:6726: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:6729: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_lib_nsl_gethostbyname=yes
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_cv_lib_nsl_gethostbyname=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:6740: result: $ac_cv_lib_nsl_gethostbyname" >&5
-echo "${ECHO_T}$ac_cv_lib_nsl_gethostbyname" >&6
-if test $ac_cv_lib_nsl_gethostbyname = yes; then
- X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl"
-fi
-
- if test $ac_cv_lib_nsl_gethostbyname = no; then
- echo "$as_me:6747: checking for gethostbyname in -lbsd" >&5
-echo $ECHO_N "checking for gethostbyname in -lbsd... $ECHO_C" >&6
-if test "${ac_cv_lib_bsd_gethostbyname+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lbsd $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-#line 6755 "configure"
-#include "confdefs.h"
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char gethostbyname ();
-int
-main ()
-{
-gethostbyname ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:6774: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:6777: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:6780: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:6783: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_lib_bsd_gethostbyname=yes
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_cv_lib_bsd_gethostbyname=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:6794: result: $ac_cv_lib_bsd_gethostbyname" >&5
-echo "${ECHO_T}$ac_cv_lib_bsd_gethostbyname" >&6
-if test $ac_cv_lib_bsd_gethostbyname = yes; then
- X_EXTRA_LIBS="$X_EXTRA_LIBS -lbsd"
-fi
-
- fi
- fi
-
- # lieder@skyler.mavd.honeywell.com says without -lsocket,
- # socket/setsockopt and other routines are undefined under SCO ODT
- # 2.0. But -lsocket is broken on IRIX 5.2 (and is not necessary
- # on later versions), says Simon Leinen: it contains gethostby*
- # variants that don't use the nameserver (or something). -lsocket
- # must be given before -lnsl if both are needed. We assume that
- # if connect needs -lnsl, so does gethostbyname.
- echo "$as_me:6810: checking for connect" >&5
-echo $ECHO_N "checking for connect... $ECHO_C" >&6
-if test "${ac_cv_func_connect+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-#line 6816 "configure"
-#include "confdefs.h"
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char connect (); below. */
-#include <assert.h>
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char connect ();
-char (*f) ();
-
-int
-main ()
-{
-/* 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_connect) || defined (__stub___connect)
-choke me
-#else
-f = connect;
-#endif
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:6847: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:6850: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:6853: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:6856: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_func_connect=yes
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_cv_func_connect=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:6866: result: $ac_cv_func_connect" >&5
-echo "${ECHO_T}$ac_cv_func_connect" >&6
-
- if test $ac_cv_func_connect = no; then
- echo "$as_me:6870: checking for connect in -lsocket" >&5
-echo $ECHO_N "checking for connect in -lsocket... $ECHO_C" >&6
-if test "${ac_cv_lib_socket_connect+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lsocket $X_EXTRA_LIBS $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-#line 6878 "configure"
-#include "confdefs.h"
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char connect ();
-int
-main ()
-{
-connect ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:6897: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:6900: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:6903: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:6906: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_lib_socket_connect=yes
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_cv_lib_socket_connect=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:6917: result: $ac_cv_lib_socket_connect" >&5
-echo "${ECHO_T}$ac_cv_lib_socket_connect" >&6
-if test $ac_cv_lib_socket_connect = yes; then
- X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS"
-fi
-
- fi
-
- # Guillermo Gomez says -lposix is necessary on A/UX.
- echo "$as_me:6926: checking for remove" >&5
-echo $ECHO_N "checking for remove... $ECHO_C" >&6
-if test "${ac_cv_func_remove+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-#line 6932 "configure"
-#include "confdefs.h"
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char remove (); below. */
-#include <assert.h>
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char remove ();
-char (*f) ();
-
-int
-main ()
-{
-/* 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_remove) || defined (__stub___remove)
-choke me
-#else
-f = remove;
-#endif
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:6963: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:6966: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:6969: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:6972: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_func_remove=yes
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_cv_func_remove=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:6982: result: $ac_cv_func_remove" >&5
-echo "${ECHO_T}$ac_cv_func_remove" >&6
-
- if test $ac_cv_func_remove = no; then
- echo "$as_me:6986: checking for remove in -lposix" >&5
-echo $ECHO_N "checking for remove in -lposix... $ECHO_C" >&6
-if test "${ac_cv_lib_posix_remove+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lposix $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-#line 6994 "configure"
-#include "confdefs.h"
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char remove ();
-int
-main ()
-{
-remove ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:7013: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:7016: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:7019: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:7022: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_lib_posix_remove=yes
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_cv_lib_posix_remove=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:7033: result: $ac_cv_lib_posix_remove" >&5
-echo "${ECHO_T}$ac_cv_lib_posix_remove" >&6
-if test $ac_cv_lib_posix_remove = yes; then
- X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix"
-fi
-
- fi
-
- # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay.
- echo "$as_me:7042: checking for shmat" >&5
-echo $ECHO_N "checking for shmat... $ECHO_C" >&6
-if test "${ac_cv_func_shmat+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-#line 7048 "configure"
-#include "confdefs.h"
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char shmat (); below. */
-#include <assert.h>
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char shmat ();
-char (*f) ();
-
-int
-main ()
-{
-/* 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_shmat) || defined (__stub___shmat)
-choke me
-#else
-f = shmat;
-#endif
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:7079: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:7082: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:7085: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:7088: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_func_shmat=yes
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_cv_func_shmat=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:7098: result: $ac_cv_func_shmat" >&5
-echo "${ECHO_T}$ac_cv_func_shmat" >&6
-
- if test $ac_cv_func_shmat = no; then
- echo "$as_me:7102: checking for shmat in -lipc" >&5
-echo $ECHO_N "checking for shmat in -lipc... $ECHO_C" >&6
-if test "${ac_cv_lib_ipc_shmat+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lipc $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-#line 7110 "configure"
-#include "confdefs.h"
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char shmat ();
-int
-main ()
-{
-shmat ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:7129: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:7132: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:7135: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:7138: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_lib_ipc_shmat=yes
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_cv_lib_ipc_shmat=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:7149: result: $ac_cv_lib_ipc_shmat" >&5
-echo "${ECHO_T}$ac_cv_lib_ipc_shmat" >&6
-if test $ac_cv_lib_ipc_shmat = yes; then
- X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc"
-fi
-
- fi
- fi
-
- # Check for libraries that X11R6 Xt/Xaw programs need.
- ac_save_LDFLAGS=$LDFLAGS
- test -n "$x_libraries" && LDFLAGS="$LDFLAGS -L$x_libraries"
- # SM needs ICE to (dynamically) link under SunOS 4.x (so we have to
- # check for ICE first), but we must link in the order -lSM -lICE or
- # we get undefined symbols. So assume we have SM if we have ICE.
- # These have to be linked with before -lX11, unlike the other
- # libraries we check for below, so use a different variable.
- # John Interrante, Karl Berry
- echo "$as_me:7167: checking for IceConnectionNumber in -lICE" >&5
-echo $ECHO_N "checking for IceConnectionNumber in -lICE... $ECHO_C" >&6
-if test "${ac_cv_lib_ICE_IceConnectionNumber+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lICE $X_EXTRA_LIBS $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-#line 7175 "configure"
-#include "confdefs.h"
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char IceConnectionNumber ();
-int
-main ()
-{
-IceConnectionNumber ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:7194: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:7197: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:7200: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:7203: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_lib_ICE_IceConnectionNumber=yes
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_cv_lib_ICE_IceConnectionNumber=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:7214: result: $ac_cv_lib_ICE_IceConnectionNumber" >&5
-echo "${ECHO_T}$ac_cv_lib_ICE_IceConnectionNumber" >&6
-if test $ac_cv_lib_ICE_IceConnectionNumber = yes; then
- X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE"
-fi
-
- LDFLAGS=$ac_save_LDFLAGS
-
-fi
-
-# SYSTEM_NAME=`echo "$cf_cv_system_name"|tr ' ' -`
-
-cf_have_X_LIBS=no
-
-LDFLAGS="$X_LIBS $LDFLAGS"
-
-test -n "$verbose" && echo " checking additions to CFLAGS" 1>&6
-
-cf_check_cflags="$CFLAGS"
-cf_check_cppflags="$CPPFLAGS"
-
-cf_fix_cppflags=no
-cf_new_cflags=
-cf_new_cppflags=
-cf_new_extra_cppflags=
-
-for cf_add_cflags in $X_CFLAGS
-do
-case $cf_fix_cppflags in
-no)
- case $cf_add_cflags in #(vi
- -undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) #(vi
- case $cf_add_cflags in
- -D*)
- cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
-
- test "${cf_add_cflags}" != "${cf_tst_cflags}" \
- && test -z "${cf_tst_cflags}" \
- && cf_fix_cppflags=yes
-
- if test $cf_fix_cppflags = yes ; then
- cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
- continue
- elif test "${cf_tst_cflags}" = "\"'" ; then
- cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
- continue
- fi
- ;;
- esac
- case "$CPPFLAGS" in
- *$cf_add_cflags) #(vi
- ;;
- *) #(vi
- cf_new_cppflags="$cf_new_cppflags $cf_add_cflags"
- ;;
- esac
- ;;
- *)
- cf_new_cflags="$cf_new_cflags $cf_add_cflags"
- ;;
- esac
- ;;
-yes)
- cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
-
- cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'`
-
- test "${cf_add_cflags}" != "${cf_tst_cflags}" \
- && test -z "${cf_tst_cflags}" \
- && cf_fix_cppflags=no
- ;;
-esac
-done
-
-if test -n "$cf_new_cflags" ; then
- test -n "$verbose" && echo " add to \$CFLAGS $cf_new_cflags" 1>&6
-
- CFLAGS="$CFLAGS $cf_new_cflags"
-fi
-
-if test -n "$cf_new_cppflags" ; then
- test -n "$verbose" && echo " add to \$CPPFLAGS $cf_new_cppflags" 1>&6
-
- CPPFLAGS="$cf_new_cppflags $CPPFLAGS"
-fi
-
-if test -n "$cf_new_extra_cppflags" ; then
- test -n "$verbose" && echo " add to \$EXTRA_CPPFLAGS $cf_new_extra_cppflags" 1>&6
-
- EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS"
-fi
-
-if test "$cf_check_cflags" != "$CFLAGS" ; then
-cat >conftest.$ac_ext <<_ACEOF
-#line 7308 "configure"
-#include "confdefs.h"
-#include <stdio.h>
-int
-main ()
-{
-printf("Hello world");
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:7320: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:7323: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:7326: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:7329: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- :
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-test -n "$verbose" && echo " test-compile failed. Undoing change to \$CFLAGS" 1>&6
-
- if test "$cf_check_cppflags" != "$CPPFLAGS" ; then
- test -n "$verbose" && echo " but keeping change to \$CPPFLAGS" 1>&6
-
- fi
- CFLAGS="$cf_check_flags"
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-fi
-
-echo "$as_me:7346: checking for XOpenDisplay" >&5
-echo $ECHO_N "checking for XOpenDisplay... $ECHO_C" >&6
-if test "${ac_cv_func_XOpenDisplay+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-#line 7352 "configure"
-#include "confdefs.h"
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char XOpenDisplay (); below. */
-#include <assert.h>
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char XOpenDisplay ();
-char (*f) ();
-
-int
-main ()
-{
-/* 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_XOpenDisplay) || defined (__stub___XOpenDisplay)
-choke me
-#else
-f = XOpenDisplay;
-#endif
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:7383: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:7386: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:7389: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:7392: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_func_XOpenDisplay=yes
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_cv_func_XOpenDisplay=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:7402: result: $ac_cv_func_XOpenDisplay" >&5
-echo "${ECHO_T}$ac_cv_func_XOpenDisplay" >&6
-if test $ac_cv_func_XOpenDisplay = yes; then
- :
-else
-
-echo "$as_me:7408: checking for XOpenDisplay in -lX11" >&5
-echo $ECHO_N "checking for XOpenDisplay in -lX11... $ECHO_C" >&6
-if test "${ac_cv_lib_X11_XOpenDisplay+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lX11 $X_PRE_LIBS $LIBS $X_EXTRA_LIBS $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-#line 7416 "configure"
-#include "confdefs.h"
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char XOpenDisplay ();
-int
-main ()
-{
-XOpenDisplay ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:7435: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:7438: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:7441: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:7444: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_lib_X11_XOpenDisplay=yes
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_cv_lib_X11_XOpenDisplay=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:7455: result: $ac_cv_lib_X11_XOpenDisplay" >&5
-echo "${ECHO_T}$ac_cv_lib_X11_XOpenDisplay" >&6
-if test $ac_cv_lib_X11_XOpenDisplay = yes; then
- LIBS="-lX11 $LIBS"
-fi
-
-fi
-
-echo "$as_me:7463: checking for XtAppInitialize" >&5
-echo $ECHO_N "checking for XtAppInitialize... $ECHO_C" >&6
-if test "${ac_cv_func_XtAppInitialize+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-#line 7469 "configure"
-#include "confdefs.h"
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char XtAppInitialize (); below. */
-#include <assert.h>
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char XtAppInitialize ();
-char (*f) ();
-
-int
-main ()
-{
-/* 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_XtAppInitialize) || defined (__stub___XtAppInitialize)
-choke me
-#else
-f = XtAppInitialize;
-#endif
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:7500: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:7503: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:7506: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:7509: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_func_XtAppInitialize=yes
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_cv_func_XtAppInitialize=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:7519: result: $ac_cv_func_XtAppInitialize" >&5
-echo "${ECHO_T}$ac_cv_func_XtAppInitialize" >&6
-if test $ac_cv_func_XtAppInitialize = yes; then
- :
-else
-
-echo "$as_me:7525: checking for XtAppInitialize in -lXt" >&5
-echo $ECHO_N "checking for XtAppInitialize in -lXt... $ECHO_C" >&6
-if test "${ac_cv_lib_Xt_XtAppInitialize+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lXt $X_PRE_LIBS $LIBS $X_EXTRA_LIBS $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-#line 7533 "configure"
-#include "confdefs.h"
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char XtAppInitialize ();
-int
-main ()
-{
-XtAppInitialize ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:7552: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:7555: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:7558: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:7561: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_lib_Xt_XtAppInitialize=yes
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_cv_lib_Xt_XtAppInitialize=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:7572: result: $ac_cv_lib_Xt_XtAppInitialize" >&5
-echo "${ECHO_T}$ac_cv_lib_Xt_XtAppInitialize" >&6
-if test $ac_cv_lib_Xt_XtAppInitialize = yes; then
- cat >>confdefs.h <<\EOF
-#define HAVE_LIBXT 1
-EOF
-
- cf_have_X_LIBS=Xt
- LIBS="-lXt $X_PRE_LIBS $LIBS"
-fi
-
-fi
-
-if test $cf_have_X_LIBS = no ; then
- { echo "$as_me:7586: WARNING: Unable to successfully link X Toolkit library (-lXt) with
-test program. You will have to check and add the proper libraries by hand
-to makefile." >&5
-echo "$as_me: WARNING: Unable to successfully link X Toolkit library (-lXt) with
-test program. You will have to check and add the proper libraries by hand
-to makefile." >&2;}
-fi
-
-for ac_header in \
- X11/DECkeysym.h \
- X11/Sunkeysym.h \
- X11/Xpoll.h \
-
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-echo "$as_me:7601: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-#line 7607 "configure"
-#include "confdefs.h"
-#include <$ac_header>
-_ACEOF
-if { (eval echo "$as_me:7611: \"$ac_cpp conftest.$ac_ext\"") >&5
- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
- ac_status=$?
- egrep -v '^ *\+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:7617: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null; then
- if test -s conftest.err; then
- ac_cpp_err=$ac_c_preproc_warn_flag
- else
- ac_cpp_err=
- fi
-else
- ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
- eval "$as_ac_Header=yes"
-else
- echo "$as_me: failed program was:" >&5
- cat conftest.$ac_ext >&5
- eval "$as_ac_Header=no"
-fi
-rm -f conftest.err conftest.$ac_ext
-fi
-echo "$as_me:7636: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
- cat >>confdefs.h <<EOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
-EOF
-
-fi
-done
-
-cf_x_athena=${cf_x_athena-Xaw}
-
-echo "$as_me:7648: checking if you want to link with Xaw 3d library" >&5
-echo $ECHO_N "checking if you want to link with Xaw 3d library... $ECHO_C" >&6
-withval=
-
-# Check whether --with-Xaw3d or --without-Xaw3d was given.
-if test "${with_Xaw3d+set}" = set; then
- withval="$with_Xaw3d"
-
-fi;
-if test "$withval" = yes ; then
- cf_x_athena=Xaw3d
- echo "$as_me:7659: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-else
- echo "$as_me:7662: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-echo "$as_me:7666: checking if you want to link with neXT Athena library" >&5
-echo $ECHO_N "checking if you want to link with neXT Athena library... $ECHO_C" >&6
-withval=
-
-# Check whether --with-neXtaw or --without-neXtaw was given.
-if test "${with_neXtaw+set}" = set; then
- withval="$with_neXtaw"
-
-fi;
-if test "$withval" = yes ; then
- cf_x_athena=neXtaw
- echo "$as_me:7677: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-else
- echo "$as_me:7680: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-echo "$as_me:7684: checking if you want to link with Athena-Plus library" >&5
-echo $ECHO_N "checking if you want to link with Athena-Plus library... $ECHO_C" >&6
-withval=
-
-# Check whether --with-XawPlus or --without-XawPlus was given.
-if test "${with_XawPlus+set}" = set; then
- withval="$with_XawPlus"
-
-fi;
-if test "$withval" = yes ; then
- cf_x_athena=XawPlus
- echo "$as_me:7695: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-else
- echo "$as_me:7698: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-echo "$as_me:7702: checking for XextCreateExtension in -lXext" >&5
-echo $ECHO_N "checking for XextCreateExtension in -lXext... $ECHO_C" >&6
-if test "${ac_cv_lib_Xext_XextCreateExtension+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lXext $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-#line 7710 "configure"
-#include "confdefs.h"
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char XextCreateExtension ();
-int
-main ()
-{
-XextCreateExtension ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:7729: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:7732: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:7735: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:7738: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_lib_Xext_XextCreateExtension=yes
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_cv_lib_Xext_XextCreateExtension=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:7749: result: $ac_cv_lib_Xext_XextCreateExtension" >&5
-echo "${ECHO_T}$ac_cv_lib_Xext_XextCreateExtension" >&6
-if test $ac_cv_lib_Xext_XextCreateExtension = yes; then
- LIBS="-lXext $LIBS"
-fi
-
-cf_x_athena_lib=""
-
-cf_x_athena_root=$cf_x_athena
-cf_x_athena_include=""
-
-for cf_path in default \
- /usr/contrib/X11R6 \
- /usr/contrib/X11R5 \
- /usr/lib/X11R5 \
- /usr/local
-do
- if test -z "$cf_x_athena_include" ; then
- cf_save="$CPPFLAGS"
- cf_test=X11/$cf_x_athena_root/SimpleMenu.h
- if test $cf_path != default ; then
- CPPFLAGS="-I$cf_path/include $cf_save"
- echo "$as_me:7771: checking for $cf_test in $cf_path" >&5
-echo $ECHO_N "checking for $cf_test in $cf_path... $ECHO_C" >&6
- else
- echo "$as_me:7774: checking for $cf_test" >&5
-echo $ECHO_N "checking for $cf_test... $ECHO_C" >&6
- fi
- cat >conftest.$ac_ext <<_ACEOF
-#line 7778 "configure"
-#include "confdefs.h"
-
-#include <X11/Intrinsic.h>
-#include <$cf_test>
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:7792: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- echo "$as_me:7795: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:7798: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:7801: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cf_result=yes
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cf_result=no
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
- echo "$as_me:7810: result: $cf_result" >&5
-echo "${ECHO_T}$cf_result" >&6
- if test "$cf_result" = yes ; then
- cf_x_athena_include=$cf_path
- break
- else
- CPPFLAGS="$cf_save"
- fi
- fi
-done
-
-if test -z "$cf_x_athena_include" ; then
- { echo "$as_me:7822: WARNING: Unable to successfully find Athena header files with test program" >&5
-echo "$as_me: WARNING: Unable to successfully find Athena header files with test program" >&2;}
-elif test "$cf_x_athena_include" != default ; then
- CPPFLAGS="$CPPFLAGS -I$cf_x_athena_include"
-fi
-
-cf_x_athena_root=$cf_x_athena
-cf_x_athena_lib=""
-
-for cf_path in default \
- /usr/contrib/X11R6 \
- /usr/contrib/X11R5 \
- /usr/lib/X11R5 \
- /usr/local
-do
- for cf_lib in \
- "-l$cf_x_athena_root -lXmu" \
- "-l$cf_x_athena_root -lXpm -lXmu" \
- "-l${cf_x_athena_root}_s -lXmu_s"
- do
- if test -z "$cf_x_athena_lib" ; then
- cf_save="$LIBS"
- cf_test=XawSimpleMenuAddGlobalActions
- if test $cf_path != default ; then
- LIBS="-L$cf_path/lib $cf_lib $LIBS"
- echo "$as_me:7847: checking for $cf_lib in $cf_path" >&5
-echo $ECHO_N "checking for $cf_lib in $cf_path... $ECHO_C" >&6
- else
- LIBS="$cf_lib $LIBS"
- echo "$as_me:7851: checking for $cf_test in $cf_lib" >&5
-echo $ECHO_N "checking for $cf_test in $cf_lib... $ECHO_C" >&6
- fi
- cf_SAVE="$LIBS"
- LIBS="$X_PRE_LIBS $LIBS $X_EXTRA_LIBS"
- cat >conftest.$ac_ext <<_ACEOF
-#line 7857 "configure"
-#include "confdefs.h"
-
-int
-main ()
-{
-$cf_test()
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:7869: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:7872: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:7875: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:7878: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cf_result=yes
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cf_result=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
- echo "$as_me:7887: result: $cf_result" >&5
-echo "${ECHO_T}$cf_result" >&6
- if test "$cf_result" = yes ; then
- cf_x_athena_lib="$cf_lib"
- LIBS="$cf_SAVE"
- break
- else
- LIBS="$cf_save"
- fi
- fi
- done
-done
-
-if test -z "$cf_x_athena_lib" ; then
- { { echo "$as_me:7901: error: Unable to successfully link Athena library (-l$cf_x_athena_root) with test program" >&5
-echo "$as_me: error: Unable to successfully link Athena library (-l$cf_x_athena_root) with test program" >&2;}
- { (exit 1); exit 1; }; }
-fi
-
-cf_x_athena_LIBS=`echo "HAVE_LIB_$cf_x_athena" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%`
-
-cat >>confdefs.h <<EOF
-#define $cf_x_athena_LIBS 1
-EOF
-
-echo "$as_me:7912: checking for declaration of fd_set" >&5
-echo $ECHO_N "checking for declaration of fd_set... $ECHO_C" >&6
-if test "${cf_cv_type_fd_set+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- echo "trying sys/types alone" 1>&5
-cat >conftest.$ac_ext <<_ACEOF
-#line 7919 "configure"
-#include "confdefs.h"
-
-#include <sys/types.h>
-int
-main ()
-{
-fd_set x
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:7932: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- echo "$as_me:7935: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:7938: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:7941: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cf_cv_type_fd_set=sys/types.h
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-echo "trying X11/Xpoll.h" 1>&5
-cat >conftest.$ac_ext <<_ACEOF
-#line 7949 "configure"
-#include "confdefs.h"
-
-#ifdef HAVE_X11_XPOLL_H
-#include <X11/Xpoll.h>
-#endif
-int
-main ()
-{
-fd_set x
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:7964: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- echo "$as_me:7967: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:7970: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:7973: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cf_cv_type_fd_set=X11/Xpoll.h
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-echo "trying sys/select.h" 1>&5
-cat >conftest.$ac_ext <<_ACEOF
-#line 7981 "configure"
-#include "confdefs.h"
-
-#include <sys/types.h>
-#include <sys/select.h>
-int
-main ()
-{
-fd_set x
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:7995: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- echo "$as_me:7998: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:8001: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:8004: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cf_cv_type_fd_set=sys/select.h
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cf_cv_type_fd_set=unknown
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:8018: result: $cf_cv_type_fd_set" >&5
-echo "${ECHO_T}$cf_cv_type_fd_set" >&6
-if test $cf_cv_type_fd_set = sys/select.h ; then
- cat >>confdefs.h <<\EOF
-#define USE_SYS_SELECT_H 1
-EOF
-
-fi
-
-echo "$as_me:8027: checking for IRIX 6.5 baud-rate redefinitions" >&5
-echo $ECHO_N "checking for IRIX 6.5 baud-rate redefinitions... $ECHO_C" >&6
-if test "${cf_cv_termio_c_ispeed+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-cat >conftest.$ac_ext <<_ACEOF
-#line 8034 "configure"
-#include "confdefs.h"
-
-#include <sys/types.h>
-#include <sys/termio.h>
-int
-main ()
-{
-
-struct termio foo;
-foo.c_ispeed = B38400;
-foo.c_ospeed = B9600;
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:8052: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- echo "$as_me:8055: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:8058: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:8061: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cf_cv_termio_c_ispeed=yes
-
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cf_cv_termio_c_ispeed=no
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-
-fi
-echo "$as_me:8073: result: $cf_cv_termio_c_ispeed" >&5
-echo "${ECHO_T}$cf_cv_termio_c_ispeed" >&6
-test "$cf_cv_termio_c_ispeed" = yes && cat >>confdefs.h <<\EOF
-#define HAVE_TERMIO_C_ISPEED 1
-EOF
-
-LIBS="$LIBS $X_EXTRA_LIBS"
-
-# Check for openpty() in -lutil if the UNIX98-style pty functions are not
-# available. E.g. for GNU libc 2.0.
-case $host_os in #(vi
-freebsd*|netbsd*) # 2004/8/15 - revisit this if/when grantpt is known to work.
-
-echo "$as_me:8086: checking for openpty in -lutil" >&5
-echo $ECHO_N "checking for openpty in -lutil... $ECHO_C" >&6
-if test "${ac_cv_lib_util_openpty+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lutil $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-#line 8094 "configure"
-#include "confdefs.h"
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char openpty ();
-int
-main ()
-{
-openpty ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:8113: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:8116: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:8119: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:8122: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_lib_util_openpty=yes
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_cv_lib_util_openpty=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:8133: result: $ac_cv_lib_util_openpty" >&5
-echo "${ECHO_T}$ac_cv_lib_util_openpty" >&6
-if test $ac_cv_lib_util_openpty = yes; then
- cat >>confdefs.h <<EOF
-#define HAVE_LIBUTIL 1
-EOF
-
- LIBS="-lutil $LIBS"
-
-fi
-
- ;;
-*)
-
-for ac_func in grantpt
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:8150: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-#line 8156 "configure"
-#include "confdefs.h"
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below. */
-#include <assert.h>
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-char (*f) ();
-
-int
-main ()
-{
-/* 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_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-f = $ac_func;
-#endif
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:8187: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:8190: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:8193: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:8196: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-eval "$as_ac_var=no"
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:8206: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<EOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-EOF
-
-else
-
-echo "$as_me:8215: checking for openpty in -lutil" >&5
-echo $ECHO_N "checking for openpty in -lutil... $ECHO_C" >&6
-if test "${ac_cv_lib_util_openpty+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lutil $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-#line 8223 "configure"
-#include "confdefs.h"
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char openpty ();
-int
-main ()
-{
-openpty ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:8242: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:8245: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:8248: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:8251: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_lib_util_openpty=yes
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_cv_lib_util_openpty=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:8262: result: $ac_cv_lib_util_openpty" >&5
-echo "${ECHO_T}$ac_cv_lib_util_openpty" >&6
-if test $ac_cv_lib_util_openpty = yes; then
- cat >>confdefs.h <<EOF
-#define HAVE_LIBUTIL 1
-EOF
-
- LIBS="-lutil $LIBS"
-
-fi
-
-fi
-done
-
- ;;
-esac
-
-echo "$as_me:8279: checking for XKB Bell extension" >&5
-echo $ECHO_N "checking for XKB Bell extension... $ECHO_C" >&6
-if test "${cf_cv_xkb_bell_ext+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-cat >conftest.$ac_ext <<_ACEOF
-#line 8286 "configure"
-#include "confdefs.h"
-
-#include <X11/XKBlib.h> /* has the prototype */
-#include <X11/extensions/XKBbells.h> /* has the XkbBI_xxx definitions */
-
-int
-main ()
-{
-
-int x = XkbBI_Info
- |XkbBI_MinorError
- |XkbBI_MajorError
- |XkbBI_TerminalBell
- |XkbBI_MarginBell;
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:8307: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:8310: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:8313: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:8316: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cf_cv_xkb_bell_ext=yes
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cf_cv_xkb_bell_ext=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-
-fi
-echo "$as_me:8327: result: $cf_cv_xkb_bell_ext" >&5
-echo "${ECHO_T}$cf_cv_xkb_bell_ext" >&6
-
-test "$cf_cv_xkb_bell_ext" = yes && cat >>confdefs.h <<\EOF
-#define HAVE_XKB_BELL_EXT 1
-EOF
-
-for ac_func in Xutf8LookupString
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:8337: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-#line 8343 "configure"
-#include "confdefs.h"
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below. */
-#include <assert.h>
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-char (*f) ();
-
-int
-main ()
-{
-/* 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_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-f = $ac_func;
-#endif
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:8374: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:8377: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:8380: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:8383: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-eval "$as_ac_var=no"
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:8393: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<EOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-EOF
-
-else
-
- EXTRAHDRS="$EXTRAHDRS xutf8.h"
- EXTRASRCS="$EXTRASRCS xutf8.c"
- EXTRAOBJS="$EXTRAOBJS xutf8.o"
-
-fi
-done
-
-echo "$as_me:8409: checking if you want narrow prototypes for X libraries" >&5
-echo $ECHO_N "checking if you want narrow prototypes for X libraries... $ECHO_C" >&6
-
-case `$ac_config_guess` in #(vi
-*cygwin*|*freebsd*|*gnu*|*irix5*|*irix6*|*linux-gnu*|*netbsd*|*openbsd*|*qnx*|*sco*|*sgi*) #(vi
- cf_default_narrowproto=yes
- ;;
-*)
- cf_default_narrowproto=no
- ;;
-esac
-
-# Check whether --enable-narrowproto or --disable-narrowproto was given.
-if test "${enable_narrowproto+set}" = set; then
- enableval="$enable_narrowproto"
- test "$enableval" != no && enableval=yes
- if test "$enableval" != "$cf_default_narrowproto" ; then
- enable_narrowproto=$enableval
- else
- enable_narrowproto=$default_narrowproto
- fi
-else
- enableval=$cf_default_narrowproto
- enable_narrowproto=$default_narrowproto
-
-fi;
-echo "$as_me:8435: result: $enable_narrowproto" >&5
-echo "${ECHO_T}$enable_narrowproto" >&6
-
-echo "$as_me:8438: checking if we should use imake to help" >&5
-echo $ECHO_N "checking if we should use imake to help... $ECHO_C" >&6
-
-# Check whether --enable-imake or --disable-imake was given.
-if test "${enable_imake+set}" = set; then
- enableval="$enable_imake"
- test "$enableval" != no && enableval=yes
- if test "$enableval" != "yes" ; then
- enable_imake=no
- else
- enable_imake=yes
- fi
-else
- enableval=yes
- enable_imake=yes
-
-fi;
-echo "$as_me:8455: result: $enable_imake" >&5
-echo "${ECHO_T}$enable_imake" >&6
-
-if test "$enable_imake" = yes ; then
-
-for ac_prog in xmkmf imake
-do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-echo "$as_me:8464: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_path_IMAKE+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- case $IMAKE in
- [\\/]* | ?:[\\/]*)
- ac_cv_path_IMAKE="$IMAKE" # Let the user override the test with a path.
- ;;
- *)
- ac_save_IFS=$IFS; IFS=$ac_path_separator
-ac_dummy="$PATH"
-for ac_dir in $ac_dummy; do
- IFS=$ac_save_IFS
- test -z "$ac_dir" && ac_dir=.
- if $as_executable_p "$ac_dir/$ac_word"; then
- ac_cv_path_IMAKE="$ac_dir/$ac_word"
- echo "$as_me:8481: found $ac_dir/$ac_word" >&5
- break
-fi
-done
-
- ;;
-esac
-fi
-IMAKE=$ac_cv_path_IMAKE
-
-if test -n "$IMAKE"; then
- echo "$as_me:8492: result: $IMAKE" >&5
-echo "${ECHO_T}$IMAKE" >&6
-else
- echo "$as_me:8495: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
- test -n "$IMAKE" && break
-done
-
-if test -n "$IMAKE" ; then
-
-case $IMAKE in # (vi
-*/imake)
- cf_imake_opts="-DUseInstalled=YES" # (vi
- ;;
-*/util/xmkmf)
- # A single parameter tells xmkmf where the config-files are:
- cf_imake_opts="`echo $IMAKE|sed -e s,/config/util/xmkmf,,`" # (vi
- ;;
-*)
- cf_imake_opts=
- ;;
-esac
-
-# If it's installed properly, imake (or its wrapper, xmkmf) will point to the
-# config directory.
-if mkdir conftestdir; then
- CDPATH=; export CDPATH
- cf_makefile=`cd $srcdir;pwd`/Imakefile
- cd conftestdir
-
- cat >fix_cflags.sed <<'CF_EOF'
-s/\\//g
-s/"//g
-s/\(-D[a-zA-Z0-9_][a-zA-Z0-9_]*\)=\([^\\'"0-9 ][^ ]*\([ ][ ]*[^- ][^ ]*\)*\)/\1='\\"\2\\"'/g
-s/\(-D[a-zA-Z0-9_][a-zA-Z0-9_]*\)=\([^\\'"0-9 ][^ ]*\)[ ]/\1='\\"\2\\"' /g
-s/\(-D[a-zA-Z0-9_][a-zA-Z0-9_]*\)=\([^\\'"0-9 ][^ ]*\)$/\1='\\"\2\\"'/g
-s/^IMAKE[ ]*/IMAKE_CFLAGS="/
-s/$/"/
-CF_EOF
-
- cat >fix_lflags.sed <<'CF_EOF'
-s/^IMAKE[ ]*/IMAKE_LOADFLAGS="/
-s/$/"/
-CF_EOF
-
- echo >./Imakefile
- test -f $cf_makefile && cat $cf_makefile >>./Imakefile
-
- cat >> ./Imakefile <<'CF_EOF'
-findstddefs:
- @echo IMAKE $(ALLDEFINES) $(MAIN_DEFINES) $(VENDORMANDEFS) | sed -f fix_cflags.sed
- @echo IMAKE $(EXTRA_LOAD_FLAGS) | sed -f fix_lflags.sed
-CF_EOF
-
- if ( $IMAKE $cf_imake_opts 1>/dev/null 2>&5 && test -f Makefile)
- then
- test -n "$verbose" && echo " Using $IMAKE $cf_imake_opts" 1>&6
-
- else
- # sometimes imake doesn't have the config path compiled in. Find it.
- cf_config=
- for cf_libpath in $X_LIBS $LIBS ; do
- case $cf_libpath in # (vi
- -L*)
- cf_libpath=`echo .$cf_libpath | sed -e 's/^...//'`
- cf_libpath=$cf_libpath/X11/config
- if test -d $cf_libpath ; then
- cf_config=$cf_libpath
- break
- fi
- ;;
- esac
- done
- if test -z "$cf_config" ; then
- { echo "$as_me:8568: WARNING: Could not find imake config-directory" >&5
-echo "$as_me: WARNING: Could not find imake config-directory" >&2;}
- else
- cf_imake_opts="$cf_imake_opts -I$cf_config"
- if ( $IMAKE -v $cf_imake_opts 2>&5)
- then
- test -n "$verbose" && echo " Using $IMAKE $cf_config" 1>&6
-
- else
- { echo "$as_me:8577: WARNING: Cannot run $IMAKE" >&5
-echo "$as_me: WARNING: Cannot run $IMAKE" >&2;}
- fi
- fi
- fi
-
- # GNU make sometimes prints "make[1]: Entering...", which
- # would confuse us.
- eval `make findstddefs 2>/dev/null | grep -v make`
-
- cd ..
- rm -rf conftestdir
-
- # We use $(ALLDEFINES) rather than $(STD_DEFINES) because the former
- # declares XTFUNCPROTO there. However, some vendors (e.g., SGI) have
- # modified it to support site.cf, adding a kludge for the /usr/include
- # directory. Try to filter that out, otherwise gcc won't find its
- # headers.
- if test -n "$GCC" ; then
- if test -n "$IMAKE_CFLAGS" ; then
- cf_nostdinc=""
- cf_std_incl=""
- cf_cpp_opts=""
- for cf_opt in $IMAKE_CFLAGS
- do
- case "$cf_opt" in
- -nostdinc) #(vi
- cf_nostdinc="$cf_opt"
- ;;
- -I/usr/include) #(vi
- cf_std_incl="$cf_opt"
- ;;
- *) #(vi
- cf_cpp_opts="$cf_cpp_opts $cf_opt"
- ;;
- esac
- done
- if test -z "$cf_nostdinc" ; then
- IMAKE_CFLAGS="$cf_cpp_opts $cf_std_incl"
- elif test -z "$cf_std_incl" ; then
- IMAKE_CFLAGS="$cf_cpp_opts $cf_nostdinc"
- else
- test -n "$verbose" && echo " suppressed \"$cf_nostdinc\" and \"$cf_std_incl\"" 1>&6
-
- IMAKE_CFLAGS="$cf_cpp_opts"
- fi
- fi
- fi
-fi
-
-# Some imake configurations define PROJECTROOT with an empty value. Remove
-# the empty definition.
-case $IMAKE_CFLAGS in
-*-DPROJECTROOT=/*)
- ;;
-*)
- IMAKE_CFLAGS=`echo "$IMAKE_CFLAGS" |sed -e "s,-DPROJECTROOT=[ ], ,"`
- ;;
-esac
-
-fi
-
-test -n "$verbose" && echo " IMAKE_CFLAGS $IMAKE_CFLAGS" 1>&6
-
-test -n "$verbose" && echo " IMAKE_LOADFLAGS $IMAKE_LOADFLAGS" 1>&6
-
-fi
-
-if test -n "$IMAKE" && test -n "$IMAKE_CFLAGS" ; then
-
-cf_fix_cppflags=no
-cf_new_cflags=
-cf_new_cppflags=
-cf_new_extra_cppflags=
-
-for cf_add_cflags in $IMAKE_CFLAGS
-do
-case $cf_fix_cppflags in
-no)
- case $cf_add_cflags in #(vi
- -undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) #(vi
- case $cf_add_cflags in
- -D*)
- cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
-
- test "${cf_add_cflags}" != "${cf_tst_cflags}" \
- && test -z "${cf_tst_cflags}" \
- && cf_fix_cppflags=yes
-
- if test $cf_fix_cppflags = yes ; then
- cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
- continue
- elif test "${cf_tst_cflags}" = "\"'" ; then
- cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
- continue
- fi
- ;;
- esac
- case "$CPPFLAGS" in
- *$cf_add_cflags) #(vi
- ;;
- *) #(vi
- cf_new_cppflags="$cf_new_cppflags $cf_add_cflags"
- ;;
- esac
- ;;
- *)
- cf_new_cflags="$cf_new_cflags $cf_add_cflags"
- ;;
- esac
- ;;
-yes)
- cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
-
- cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'`
-
- test "${cf_add_cflags}" != "${cf_tst_cflags}" \
- && test -z "${cf_tst_cflags}" \
- && cf_fix_cppflags=no
- ;;
-esac
-done
-
-if test -n "$cf_new_cflags" ; then
-
- CFLAGS="$CFLAGS $cf_new_cflags"
-fi
-
-if test -n "$cf_new_cppflags" ; then
-
- CPPFLAGS="$cf_new_cppflags $CPPFLAGS"
-fi
-
-if test -n "$cf_new_extra_cppflags" ; then
-
- EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS"
-fi
-
-else
- IMAKE_CFLAGS=
- IMAKE_LOADFLAGS=
- test -n "$verbose" && echo " make fallback definitions" 1>&6
-
- # We prefer config.guess' values when we can get them, to avoid
- # inconsistent results with uname (AIX for instance). However,
- # config.guess is not always consistent either.
- case $host_os in
- *[0-9].[0-9]*)
- UNAME_RELEASE="$host_os"
- ;;
- *)
- UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
- ;;
- esac
-
- case .$UNAME_RELEASE in
- *[0-9].[0-9]*)
- OSMAJORVERSION=`echo "$UNAME_RELEASE" |sed -e 's/^[^0-9]*//' -e 's/\..*//'`
- OSMINORVERSION=`echo "$UNAME_RELEASE" |sed -e 's/^[^0-9]*//' -e 's/^[^.]*\.//' -e 's/\..*//' -e 's/[^0-9].*//' `
- test -z "$OSMAJORVERSION" && OSMAJORVERSION=1
- test -z "$OSMINORVERSION" && OSMINORVERSION=0
- IMAKE_CFLAGS="-DOSMAJORVERSION=$OSMAJORVERSION -DOSMINORVERSION=$OSMINORVERSION $IMAKE_CFLAGS"
- ;;
- esac
-
- # FUNCPROTO is standard with X11R6, but XFree86 drops it, leaving some
- # fallback/fragments for NeedPrototypes, etc.
- IMAKE_CFLAGS="-DFUNCPROTO=15 $IMAKE_CFLAGS"
-
- # If this is not set properly, Xaw's scrollbars will not work
- if test "$enable_narrowproto" = yes ; then
- IMAKE_CFLAGS="-DNARROWPROTO=1 $IMAKE_CFLAGS"
- fi
-
- # Other special definitions:
- case $host_os in
- aix*)
- # imake on AIX 5.1 defines AIXV3. really.
- IMAKE_CFLAGS="-DAIXV3 -DAIXV4 $IMAKE_CFLAGS"
- ;;
- irix[56].*) #(vi
- # these are needed to make SIGWINCH work in xterm
- IMAKE_CFLAGS="-DSYSV -DSVR4 $IMAKE_CFLAGS"
- ;;
- esac
-
-cf_fix_cppflags=no
-cf_new_cflags=
-cf_new_cppflags=
-cf_new_extra_cppflags=
-
-for cf_add_cflags in $IMAKE_CFLAGS
-do
-case $cf_fix_cppflags in
-no)
- case $cf_add_cflags in #(vi
- -undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) #(vi
- case $cf_add_cflags in
- -D*)
- cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
-
- test "${cf_add_cflags}" != "${cf_tst_cflags}" \
- && test -z "${cf_tst_cflags}" \
- && cf_fix_cppflags=yes
-
- if test $cf_fix_cppflags = yes ; then
- cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
- continue
- elif test "${cf_tst_cflags}" = "\"'" ; then
- cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
- continue
- fi
- ;;
- esac
- case "$CPPFLAGS" in
- *$cf_add_cflags) #(vi
- ;;
- *) #(vi
- cf_new_cppflags="$cf_new_cppflags $cf_add_cflags"
- ;;
- esac
- ;;
- *)
- cf_new_cflags="$cf_new_cflags $cf_add_cflags"
- ;;
- esac
- ;;
-yes)
- cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
-
- cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'`
-
- test "${cf_add_cflags}" != "${cf_tst_cflags}" \
- && test -z "${cf_tst_cflags}" \
- && cf_fix_cppflags=no
- ;;
-esac
-done
-
-if test -n "$cf_new_cflags" ; then
-
- CFLAGS="$CFLAGS $cf_new_cflags"
-fi
-
-if test -n "$cf_new_cppflags" ; then
-
- CPPFLAGS="$cf_new_cppflags $CPPFLAGS"
-fi
-
-if test -n "$cf_new_extra_cppflags" ; then
-
- EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS"
-fi
-
-fi
-
-echo "$as_me:8833: checking for default terminal-id" >&5
-echo $ECHO_N "checking for default terminal-id... $ECHO_C" >&6
-
-# Check whether --with-terminal-id or --without-terminal-id was given.
-if test "${with_terminal_id+set}" = set; then
- withval="$with_terminal_id"
- default_termid=$withval
-else
- default_termid=vt100
-fi;
-echo "$as_me:8843: result: $default_termid" >&5
-echo "${ECHO_T}$default_termid" >&6
-case $default_termid in
-vt*) default_termid=`echo $default_termid | sed -e 's/^..//'`
- ;;
-esac
-cat >>confdefs.h <<EOF
-#define DFT_DECID "$default_termid"
-EOF
-
-echo "$as_me:8853: checking for default terminal-type" >&5
-echo $ECHO_N "checking for default terminal-type... $ECHO_C" >&6
-
-# Check whether --with-terminal-type or --without-terminal-type was given.
-if test "${with_terminal_type+set}" = set; then
- withval="$with_terminal_type"
- default_TERM=$withval
-else
- default_TERM=xterm
-fi;
-echo "$as_me:8863: result: $default_TERM" >&5
-echo "${ECHO_T}$default_TERM" >&6
-cat >>confdefs.h <<EOF
-#define DFT_TERMTYPE "$default_TERM"
-EOF
-
-echo "$as_me:8869: checking for private terminfo-directory" >&5
-echo $ECHO_N "checking for private terminfo-directory... $ECHO_C" >&6
-
-# Check whether --with-own-terminfo or --without-own-terminfo was given.
-if test "${with_own_terminfo+set}" = set; then
- withval="$with_own_terminfo"
- TERMINFO_DIR=$withval
-else
- TERMINFO_DIR=${TERMINFO-none}
-fi;
-echo "$as_me:8879: result: $TERMINFO_DIR" >&5
-echo "${ECHO_T}$TERMINFO_DIR" >&6
-if test "$TERMINFO_DIR" = yes ; then
- { echo "$as_me:8882: WARNING: no value given" >&5
-echo "$as_me: WARNING: no value given" >&2;}
-elif test "$TERMINFO_DIR" != none ; then
- if test -d $TERMINFO_DIR ; then
- cat >>confdefs.h <<EOF
-#define OWN_TERMINFO_DIR "$TERMINFO_DIR"
-EOF
-
- else
- { echo "$as_me:8891: WARNING: not a directory" >&5
-echo "$as_me: WARNING: not a directory" >&2;}
- fi
-elif test "$prefix" != NONE ; then
- TERMINFO_DIR='${prefix}/lib/terminfo'
-elif test -d /usr/lib/terminfo ; then
- TERMINFO_DIR=/usr/lib/terminfo
-else
- TERMINFO_DIR=
-fi
-SET_TERMINFO=
-if test -n "$TERMINFO_DIR" ; then
- TERMINFO_DIR='$(DESTDIR)'$TERMINFO_DIR
- SET_TERMINFO='TERMINFO=$(TERMINFO_DIR)'
-fi
-
-###############################################################################
-
-echo "$as_me:8909: checking if you want active-icons" >&5
-echo $ECHO_N "checking if you want active-icons... $ECHO_C" >&6
-
-# Check whether --enable-active-icon or --disable-active-icon was given.
-if test "${enable_active_icon+set}" = set; then
- enableval="$enable_active_icon"
- test "$enableval" != no && enableval=yes
- if test "$enableval" != "yes" ; then
- enable_active_icon=no
- else
- enable_active_icon=yes
- fi
-else
- enableval=yes
- enable_active_icon=yes
-
-fi;
-echo "$as_me:8926: result: $enable_active_icon" >&5
-echo "${ECHO_T}$enable_active_icon" >&6
-if test "$enable_active_icon" = no ; then
- cat >>confdefs.h <<\EOF
-#define NO_ACTIVE_ICON 1
-EOF
-
-fi
-
-echo "$as_me:8935: checking if you want ANSI color" >&5
-echo $ECHO_N "checking if you want ANSI color... $ECHO_C" >&6
-
-# Check whether --enable-ansi-color or --disable-ansi-color was given.
-if test "${enable_ansi_color+set}" = set; then
- enableval="$enable_ansi_color"
- test "$enableval" != no && enableval=yes
- if test "$enableval" != "yes" ; then
- enable_ansi_color=no
- else
- enable_ansi_color=yes
- fi
-else
- enableval=yes
- enable_ansi_color=yes
-
-fi;
-echo "$as_me:8952: result: $enable_ansi_color" >&5
-echo "${ECHO_T}$enable_ansi_color" >&6
-test "$enable_ansi_color" = no && cat >>confdefs.h <<\EOF
-#define OPT_ISO_COLORS 0
-EOF
-
-if test "$enable_ansi_color" = yes ; then
-
- echo "$as_me:8960: checking if you want 16 colors like aixterm" >&5
-echo $ECHO_N "checking if you want 16 colors like aixterm... $ECHO_C" >&6
-
-# Check whether --enable-16-color or --disable-16-color was given.
-if test "${enable_16_color+set}" = set; then
- enableval="$enable_16_color"
- test "$enableval" != no && enableval=yes
- if test "$enableval" != "yes" ; then
- enable_16_color=no
- else
- enable_16_color=yes
- fi
-else
- enableval=yes
- enable_16_color=yes
-
-fi;
- echo "$as_me:8977: result: $enable_16_color" >&5
-echo "${ECHO_T}$enable_16_color" >&6
- test "$enable_16_color" = no && cat >>confdefs.h <<\EOF
-#define OPT_AIX_COLORS 0
-EOF
-
- echo "$as_me:8983: checking if you want 256 colors" >&5
-echo $ECHO_N "checking if you want 256 colors... $ECHO_C" >&6
-
-# Check whether --enable-256-color or --disable-256-color was given.
-if test "${enable_256_color+set}" = set; then
- enableval="$enable_256_color"
- test "$enableval" != yes && enableval=no
- if test "$enableval" != "no" ; then
- enable_256_color=yes
- else
- enable_256_color=no
- fi
-else
- enableval=no
- enable_256_color=no
-
-fi;
- echo "$as_me:9000: result: $enable_256_color" >&5
-echo "${ECHO_T}$enable_256_color" >&6
- if test "$enable_256_color" = yes ; then
- CHARPROC_DEPS="$CHARPROC_DEPS 256colres.h"
- EXTRAHDRS="$EXTRAHDRS 256colres.h"
- cat >>confdefs.h <<\EOF
-#define OPT_256_COLORS 1
-EOF
-
- else
- echo "$as_me:9010: checking if you want 88 colors" >&5
-echo $ECHO_N "checking if you want 88 colors... $ECHO_C" >&6
-
-# Check whether --enable-88-color or --disable-88-color was given.
-if test "${enable_88_color+set}" = set; then
- enableval="$enable_88_color"
- test "$enableval" != yes && enableval=no
- if test "$enableval" != "no" ; then
- enable_88_color=yes
- else
- enable_88_color=no
- fi
-else
- enableval=no
- enable_88_color=no
-
-fi;
- echo "$as_me:9027: result: $enable_88_color" >&5
-echo "${ECHO_T}$enable_88_color" >&6
- if test "$enable_88_color" = yes ; then
- CHARPROC_DEPS="$CHARPROC_DEPS 88colres.h"
- EXTRAHDRS="$EXTRAHDRS 88colres.h"
- cat >>confdefs.h <<\EOF
-#define OPT_88_COLORS 1
-EOF
-
- fi
- fi
-
-fi
-
-echo "$as_me:9041: checking if you want blinking cursor" >&5
-echo $ECHO_N "checking if you want blinking cursor... $ECHO_C" >&6
-
-# Check whether --enable-blink-cursor or --disable-blink-cursor was given.
-if test "${enable_blink_cursor+set}" = set; then
- enableval="$enable_blink_cursor"
- test "$enableval" != no && enableval=yes
- if test "$enableval" != "yes" ; then
- enable_blink_curs=no
- else
- enable_blink_curs=yes
- fi
-else
- enableval=yes
- enable_blink_curs=yes
-
-fi;
-echo "$as_me:9058: result: $enable_blink_curs" >&5
-echo "${ECHO_T}$enable_blink_curs" >&6
-test "$enable_blink_curs" = no && cat >>confdefs.h <<\EOF
-#define OPT_BLINK_CURS 0
-EOF
-
-echo "$as_me:9064: checking if you want to ignore Linux's broken palette-strings" >&5
-echo $ECHO_N "checking if you want to ignore Linux's broken palette-strings... $ECHO_C" >&6
-
-case $host_os in #(vi
-linux*)
- assume_broken_osc=yes ;; #(vi
-*)
- assume_broken_osc=no ;;
-esac
-
-# Check whether --enable-broken-osc or --disable-broken-osc was given.
-if test "${enable_broken_osc+set}" = set; then
- enableval="$enable_broken_osc"
- test "$enableval" != no && enableval=yes
- if test "$enableval" != "$assume_broken_osc" ; then
- enable_broken_osc=$enableval
- else
- enable_broken_osc=$enableval
- fi
-else
- enableval=$assume_broken_osc
- enable_broken_osc=$enableval
-
-fi;
-echo "$as_me:9088: result: $enable_broken_osc" >&5
-echo "${ECHO_T}$enable_broken_osc" >&6
-if test "$enable_broken_osc" = yes ; then
- cat >>confdefs.h <<\EOF
-#define OPT_BROKEN_OSC 1
-EOF
-
-else
- cat >>confdefs.h <<\EOF
-#define OPT_BROKEN_OSC 0
-EOF
-
-fi
-
-echo "$as_me:9102: checking if you want to allow broken string-terminators" >&5
-echo $ECHO_N "checking if you want to allow broken string-terminators... $ECHO_C" >&6
-
-# Check whether --enable-broken-st or --disable-broken-st was given.
-if test "${enable_broken_st+set}" = set; then
- enableval="$enable_broken_st"
- test "$enableval" != yes && enableval=no
- if test "$enableval" != "no" ; then
- enable_broken_st=yes
- else
- enable_broken_st=no
- fi
-else
- enableval=no
- enable_broken_st=no
-
-fi;
-echo "$as_me:9119: result: $enable_broken_st" >&5
-echo "${ECHO_T}$enable_broken_st" >&6
-test "$enable_broken_st" = no && cat >>confdefs.h <<\EOF
-#define OPT_BROKEN_ST 0
-EOF
-
-echo "$as_me:9125: checking if you want printable 128-159" >&5
-echo $ECHO_N "checking if you want printable 128-159... $ECHO_C" >&6
-
-# Check whether --enable-c1-print or --disable-c1-print was given.
-if test "${enable_c1_print+set}" = set; then
- enableval="$enable_c1_print"
- test "$enableval" != no && enableval=yes
- if test "$enableval" != "yes" ; then
- enable_c1_print=no
- else
- enable_c1_print=yes
- fi
-else
- enableval=yes
- enable_c1_print=yes
-
-fi;
-echo "$as_me:9142: result: $enable_c1_print" >&5
-echo "${ECHO_T}$enable_c1_print" >&6
-test "$enable_c1_print" = no && cat >>confdefs.h <<\EOF
-#define OPT_C1_PRINT 0
-EOF
-
-if test "$enable_ansi_color" = yes ; then
-
- echo "$as_me:9150: checking if you want bold colors mapped like IBM PC" >&5
-echo $ECHO_N "checking if you want bold colors mapped like IBM PC... $ECHO_C" >&6
-
-# Check whether --enable-bold-color or --disable-bold-color was given.
-if test "${enable_bold_color+set}" = set; then
- enableval="$enable_bold_color"
- test "$enableval" != no && enableval=yes
- if test "$enableval" != "yes" ; then
- enable_pc_color=no
- else
- enable_pc_color=yes
- fi
-else
- enableval=yes
- enable_pc_color=yes
-
-fi;
- echo "$as_me:9167: result: $enable_pc_color" >&5
-echo "${ECHO_T}$enable_pc_color" >&6
- test "$enable_pc_color" = no && cat >>confdefs.h <<\EOF
-#define OPT_PC_COLORS 0
-EOF
-
- echo "$as_me:9173: checking if you want separate color-classes" >&5
-echo $ECHO_N "checking if you want separate color-classes... $ECHO_C" >&6
-
-# Check whether --enable-color-class or --disable-color-class was given.
-if test "${enable_color_class+set}" = set; then
- enableval="$enable_color_class"
- test "$enableval" != no && enableval=yes
- if test "$enableval" != "yes" ; then
- enable_color_class=no
- else
- enable_color_class=yes
- fi
-else
- enableval=yes
- enable_color_class=yes
-
-fi;
- echo "$as_me:9190: result: $enable_color_class" >&5
-echo "${ECHO_T}$enable_color_class" >&6
- test "$enable_color_class" = no && cat >>confdefs.h <<\EOF
-#define OPT_COLOR_CLASS FALSE
-EOF
-
- echo "$as_me:9196: checking if you want color-mode enabled by default" >&5
-echo $ECHO_N "checking if you want color-mode enabled by default... $ECHO_C" >&6
-
-# Check whether --enable-color-mode or --disable-color-mode was given.
-if test "${enable_color_mode+set}" = set; then
- enableval="$enable_color_mode"
- test "$enableval" != no && enableval=yes
- if test "$enableval" != "yes" ; then
- default_colormode=no
- else
- default_colormode=yes
- fi
-else
- enableval=yes
- default_colormode=yes
-
-fi;
- echo "$as_me:9213: result: $default_colormode" >&5
-echo "${ECHO_T}$default_colormode" >&6
- test "$default_colormode" = no && cat >>confdefs.h <<\EOF
-#define DFT_COLORMODE FALSE
-EOF
-
-fi
-
-echo "$as_me:9221: checking if you want support for color highlighting" >&5
-echo $ECHO_N "checking if you want support for color highlighting... $ECHO_C" >&6
-
-# Check whether --enable-highlighting or --disable-highlighting was given.
-if test "${enable_highlighting+set}" = set; then
- enableval="$enable_highlighting"
- test "$enableval" != no && enableval=yes
- if test "$enableval" != "yes" ; then
- default_highlight=no
- else
- default_highlight=yes
- fi
-else
- enableval=yes
- default_highlight=yes
-
-fi;
-echo "$as_me:9238: result: $default_highlight" >&5
-echo "${ECHO_T}$default_highlight" >&6
-test "$default_highlight" = no && cat >>confdefs.h <<\EOF
-#define OPT_HIGHLIGHT_COLOR 0
-EOF
-
-echo "$as_me:9244: checking if you want support for doublesize characters" >&5
-echo $ECHO_N "checking if you want support for doublesize characters... $ECHO_C" >&6
-
-# Check whether --enable-doublechars or --disable-doublechars was given.
-if test "${enable_doublechars+set}" = set; then
- enableval="$enable_doublechars"
- test "$enableval" != no && enableval=yes
- if test "$enableval" != "yes" ; then
- enable_doublechars=no
- else
- enable_doublechars=yes
- fi
-else
- enableval=yes
- enable_doublechars=yes
-
-fi;
-echo "$as_me:9261: result: $enable_doublechars" >&5
-echo "${ECHO_T}$enable_doublechars" >&6
-test "$enable_doublechars" = no && cat >>confdefs.h <<\EOF
-#define OPT_DEC_CHRSET 0
-EOF
-
-echo "$as_me:9267: checking if you want fallback-support for box characters" >&5
-echo $ECHO_N "checking if you want fallback-support for box characters... $ECHO_C" >&6
-
-# Check whether --enable-boxchars or --disable-boxchars was given.
-if test "${enable_boxchars+set}" = set; then
- enableval="$enable_boxchars"
- test "$enableval" != no && enableval=yes
- if test "$enableval" != "yes" ; then
- enable_boxchars=no
- else
- enable_boxchars=yes
- fi
-else
- enableval=yes
- enable_boxchars=yes
-
-fi;
-echo "$as_me:9284: result: $enable_boxchars" >&5
-echo "${ECHO_T}$enable_boxchars" >&6
-test "$enable_boxchars" = no && cat >>confdefs.h <<\EOF
-#define OPT_BOX_CHARS 0
-EOF
-
-echo "$as_me:9290: checking if you want to use FreeType library" >&5
-echo $ECHO_N "checking if you want to use FreeType library... $ECHO_C" >&6
-
-# Check whether --enable-freetype or --disable-freetype was given.
-if test "${enable_freetype+set}" = set; then
- enableval="$enable_freetype"
- test "$enableval" != no && enableval=yes
- if test "$enableval" != "yes" ; then
- enable_freetype=no
- else
- enable_freetype=yes
- fi
-else
- enableval=yes
- enable_freetype=yes
-
-fi;
-echo "$as_me:9307: result: $enable_freetype" >&5
-echo "${ECHO_T}$enable_freetype" >&6
-if test "$enable_freetype" = yes ; then
-
-cf_extra_freetype_libs=
-# Extract the first word of "xft-config", so it can be a program name with args.
-set dummy xft-config; ac_word=$2
-echo "$as_me:9314: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_path_FREETYPE_CONFIG+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- case $FREETYPE_CONFIG in
- [\\/]* | ?:[\\/]*)
- ac_cv_path_FREETYPE_CONFIG="$FREETYPE_CONFIG" # Let the user override the test with a path.
- ;;
- *)
- ac_save_IFS=$IFS; IFS=$ac_path_separator
-ac_dummy="$PATH"
-for ac_dir in $ac_dummy; do
- IFS=$ac_save_IFS
- test -z "$ac_dir" && ac_dir=.
- if $as_executable_p "$ac_dir/$ac_word"; then
- ac_cv_path_FREETYPE_CONFIG="$ac_dir/$ac_word"
- echo "$as_me:9331: found $ac_dir/$ac_word" >&5
- break
-fi
-done
-
- test -z "$ac_cv_path_FREETYPE_CONFIG" && ac_cv_path_FREETYPE_CONFIG="none"
- ;;
-esac
-fi
-FREETYPE_CONFIG=$ac_cv_path_FREETYPE_CONFIG
-
-if test -n "$FREETYPE_CONFIG"; then
- echo "$as_me:9343: result: $FREETYPE_CONFIG" >&5
-echo "${ECHO_T}$FREETYPE_CONFIG" >&6
-else
- echo "$as_me:9346: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-if test "$FREETYPE_CONFIG" = none; then
- cf_extra_freetype_libs="-lXft"
- # Extract the first word of "freetype-config", so it can be a program name with args.
-set dummy freetype-config; ac_word=$2
-echo "$as_me:9354: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_path_FREETYPE_CONFIG+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- case $FREETYPE_CONFIG in
- [\\/]* | ?:[\\/]*)
- ac_cv_path_FREETYPE_CONFIG="$FREETYPE_CONFIG" # Let the user override the test with a path.
- ;;
- *)
- ac_save_IFS=$IFS; IFS=$ac_path_separator
-ac_dummy="$PATH"
-for ac_dir in $ac_dummy; do
- IFS=$ac_save_IFS
- test -z "$ac_dir" && ac_dir=.
- if $as_executable_p "$ac_dir/$ac_word"; then
- ac_cv_path_FREETYPE_CONFIG="$ac_dir/$ac_word"
- echo "$as_me:9371: found $ac_dir/$ac_word" >&5
- break
-fi
-done
-
- test -z "$ac_cv_path_FREETYPE_CONFIG" && ac_cv_path_FREETYPE_CONFIG="none"
- ;;
-esac
-fi
-FREETYPE_CONFIG=$ac_cv_path_FREETYPE_CONFIG
-
-if test -n "$FREETYPE_CONFIG"; then
- echo "$as_me:9383: result: $FREETYPE_CONFIG" >&5
-echo "${ECHO_T}$FREETYPE_CONFIG" >&6
-else
- echo "$as_me:9386: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-fi
-
-if test "$FREETYPE_CONFIG" != none ; then
-
-# Check whether --with-freetype-cflags or --without-freetype-cflags was given.
-if test "${with_freetype_cflags+set}" = set; then
- withval="$with_freetype_cflags"
- cf_cv_x_freetype_incs="$withval"
- test -n "$verbose" && echo " freetype-cflags $cf_cv_x_freetype_incs" 1>&6
-
-else
-
-echo "$as_me:9402: checking for X FreeType headers" >&5
-echo $ECHO_N "checking for X FreeType headers... $ECHO_C" >&6
-if test "${cf_cv_x_freetype_incs+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
- cf_cv_x_freetype_incs="`$FREETYPE_CONFIG --cflags 2>/dev/null`"
-
-fi
-echo "$as_me:9411: result: $cf_cv_x_freetype_incs" >&5
-echo "${ECHO_T}$cf_cv_x_freetype_incs" >&6
-fi;
-
-# Check whether --with-freetype-libs or --without-freetype-libs was given.
-if test "${with_freetype_libs+set}" = set; then
- withval="$with_freetype_libs"
- cf_cv_x_freetype_libs="$withval"
- test -n "$verbose" && echo " freetype-libs $cf_cv_x_freetype_libs" 1>&6
-
-else
-
-echo "$as_me:9423: checking for X FreeType libraries" >&5
-echo $ECHO_N "checking for X FreeType libraries... $ECHO_C" >&6
-if test "${cf_cv_x_freetype_libs+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-cf_save_LIBS="$LIBS"
-cf_save_INCS="$CPPFLAGS"
-
-cf_cv_x_freetype_libs="$cf_extra_freetype_libs `$FREETYPE_CONFIG --libs 2>/dev/null`"
-
-LIBS="$cf_cv_x_freetype_libs $LIBS"
-CPPFLAGS="$cf_cv_x_freetype_incs $CPPFLAGS"
-
-cat >conftest.$ac_ext <<_ACEOF
-#line 9438 "configure"
-#include "confdefs.h"
-
-#include <X11/Xlib.h>
-#include <X11/extensions/Xrender.h>
-#include <X11/Xft/Xft.h>
-int
-main ()
-{
-
- XftPattern *pat = XftNameParse ("name");
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:9455: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:9458: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:9461: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:9464: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- :
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cf_cv_x_freetype_libs=
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
- LIBS="$cf_save_LIBS"
- CPPFLAGS="$cf_save_INCS"
-
-fi
-echo "$as_me:9477: result: $cf_cv_x_freetype_libs" >&5
-echo "${ECHO_T}$cf_cv_x_freetype_libs" >&6
-fi;
-
-if test -n "$cf_cv_x_freetype_libs" ; then
- LIBS="$cf_cv_x_freetype_libs $LIBS"
-
-cf_fix_cppflags=no
-cf_new_cflags=
-cf_new_cppflags=
-cf_new_extra_cppflags=
-
-for cf_add_cflags in $cf_cv_x_freetype_incs
-do
-case $cf_fix_cppflags in
-no)
- case $cf_add_cflags in #(vi
- -undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) #(vi
- case $cf_add_cflags in
- -D*)
- cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
-
- test "${cf_add_cflags}" != "${cf_tst_cflags}" \
- && test -z "${cf_tst_cflags}" \
- && cf_fix_cppflags=yes
-
- if test $cf_fix_cppflags = yes ; then
- cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
- continue
- elif test "${cf_tst_cflags}" = "\"'" ; then
- cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
- continue
- fi
- ;;
- esac
- case "$CPPFLAGS" in
- *$cf_add_cflags) #(vi
- ;;
- *) #(vi
- cf_new_cppflags="$cf_new_cppflags $cf_add_cflags"
- ;;
- esac
- ;;
- *)
- cf_new_cflags="$cf_new_cflags $cf_add_cflags"
- ;;
- esac
- ;;
-yes)
- cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
-
- cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'`
-
- test "${cf_add_cflags}" != "${cf_tst_cflags}" \
- && test -z "${cf_tst_cflags}" \
- && cf_fix_cppflags=no
- ;;
-esac
-done
-
-if test -n "$cf_new_cflags" ; then
-
- CFLAGS="$CFLAGS $cf_new_cflags"
-fi
-
-if test -n "$cf_new_cppflags" ; then
-
- CPPFLAGS="$cf_new_cppflags $CPPFLAGS"
-fi
-
-if test -n "$cf_new_extra_cppflags" ; then
-
- EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS"
-fi
-
- cat >>confdefs.h <<\EOF
-#define XRENDERFONT 1
-EOF
-
-else
- CPPFLAGS=`echo "$CPPFLAGS" | sed -e s/-DXRENDERFONT//`
-fi
-else
- CPPFLAGS=`echo "$CPPFLAGS" | sed -e s/-DXRENDERFONT//`
-fi
-
-# FIXME: revisit this if needed
-
-else
- CPPFLAGS=`echo "$CPPFLAGS" | sed -e s/-DXRENDERFONT//`
-fi
-
-echo "$as_me:9569: checking if you want support for HP-style function keys" >&5
-echo $ECHO_N "checking if you want support for HP-style function keys... $ECHO_C" >&6
-
-# Check whether --enable-hp-fkeys or --disable-hp-fkeys was given.
-if test "${enable_hp_fkeys+set}" = set; then
- enableval="$enable_hp_fkeys"
- test "$enableval" != yes && enableval=no
- if test "$enableval" != "no" ; then
- enable_hp_fkeys=yes
- else
- enable_hp_fkeys=no
- fi
-else
- enableval=no
- enable_hp_fkeys=no
-
-fi;
-echo "$as_me:9586: result: $enable_hp_fkeys" >&5
-echo "${ECHO_T}$enable_hp_fkeys" >&6
-if test "$enable_hp_fkeys" = yes ; then
- cat >>confdefs.h <<\EOF
-#define OPT_HP_FUNC_KEYS 1
-EOF
-
-fi
-
-echo "$as_me:9595: checking if you want support for SCO-style function keys" >&5
-echo $ECHO_N "checking if you want support for SCO-style function keys... $ECHO_C" >&6
-
-# Check whether --enable-sco-fkeys or --disable-sco-fkeys was given.
-if test "${enable_sco_fkeys+set}" = set; then
- enableval="$enable_sco_fkeys"
- test "$enableval" != yes && enableval=no
- if test "$enableval" != "no" ; then
- enable_sco_fkeys=yes
- else
- enable_sco_fkeys=no
- fi
-else
- enableval=no
- enable_sco_fkeys=no
-
-fi;
-echo "$as_me:9612: result: $enable_sco_fkeys" >&5
-echo "${ECHO_T}$enable_sco_fkeys" >&6
-if test "$enable_sco_fkeys" = yes ; then
- cat >>confdefs.h <<\EOF
-#define OPT_SCO_FUNC_KEYS 1
-EOF
-
-fi
-
-echo "$as_me:9621: checking if you want support for internationalization" >&5
-echo $ECHO_N "checking if you want support for internationalization... $ECHO_C" >&6
-
-# Check whether --enable-i18n or --disable-i18n was given.
-if test "${enable_i18n+set}" = set; then
- enableval="$enable_i18n"
- test "$enableval" != no && enableval=yes
- if test "$enableval" != "yes" ; then
- enable_i18n=no
- else
- enable_i18n=yes
- fi
-else
- enableval=yes
- enable_i18n=yes
-
-fi;
-echo "$as_me:9638: result: $enable_i18n" >&5
-echo "${ECHO_T}$enable_i18n" >&6
-if test "$enable_i18n" = no ; then
- cat >>confdefs.h <<\EOF
-#define OPT_I18N_SUPPORT 0
-EOF
-
-fi
-
-echo "$as_me:9647: checking if you want support for initial-erase setup" >&5
-echo $ECHO_N "checking if you want support for initial-erase setup... $ECHO_C" >&6
-
-# Check whether --enable-initial-erase or --disable-initial-erase was given.
-if test "${enable_initial_erase+set}" = set; then
- enableval="$enable_initial_erase"
- test "$enableval" != no && enableval=yes
- if test "$enableval" != "yes" ; then
- enable_ie=no
- else
- enable_ie=yes
- fi
-else
- enableval=yes
- enable_ie=yes
-
-fi;
-echo "$as_me:9664: result: $enable_ie" >&5
-echo "${ECHO_T}$enable_ie" >&6
-if test "$enable_ie" = no ; then
- cat >>confdefs.h <<\EOF
-#define OPT_INITIAL_ERASE 0
-EOF
-
-fi
-
-echo "$as_me:9673: checking if you want support for input-method" >&5
-echo $ECHO_N "checking if you want support for input-method... $ECHO_C" >&6
-
-# Check whether --enable-input-method or --disable-input-method was given.
-if test "${enable_input_method+set}" = set; then
- enableval="$enable_input_method"
- test "$enableval" != no && enableval=yes
- if test "$enableval" != "yes" ; then
- enable_ximp=no
- else
- enable_ximp=yes
- fi
-else
- enableval=yes
- enable_ximp=yes
-
-fi;
-echo "$as_me:9690: result: $enable_ximp" >&5
-echo "${ECHO_T}$enable_ximp" >&6
-
-echo "$as_me:9693: checking if X libraries support input-method" >&5
-echo $ECHO_N "checking if X libraries support input-method... $ECHO_C" >&6
-if test "${cf_cv_input_method+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-cat >conftest.$ac_ext <<_ACEOF
-#line 9700 "configure"
-#include "confdefs.h"
-
-#include <X11/IntrinsicP.h>
-#include <X11/Xatom.h>
-#include <X11/Xutil.h>
-#include <X11/Xmu/Atoms.h>
-#include <X11/Xmu/Converters.h>
-#include <X11/Xaw/XawImP.h>
-
-int
-main ()
-{
-
-{
- XIM xim;
- XIMStyles *xim_styles = 0;
- XIMStyle input_style;
- Widget w = 0;
-
- XSetLocaleModifiers("@im=none");
- xim = XOpenIM(XtDisplay(w), NULL, NULL, NULL);
- XGetIMValues(xim, XNQueryInputStyle, &xim_styles, NULL);
- XCloseIM(xim);
- input_style = (XIMPreeditNothing | XIMStatusNothing);
-}
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:9732: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:9735: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:9738: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:9741: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cf_cv_input_method=yes
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cf_cv_input_method=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:9751: result: $cf_cv_input_method" >&5
-echo "${ECHO_T}$cf_cv_input_method" >&6
-
-test "$cf_cv_input_method" = no && enable_ximp=no
-if test "$enable_ximp" = no ; then
- cat >>confdefs.h <<\EOF
-#define OPT_INPUT_METHOD 0
-EOF
-
-fi
-
-echo "$as_me:9762: checking if you want support for load-vt-fonts" >&5
-echo $ECHO_N "checking if you want support for load-vt-fonts... $ECHO_C" >&6
-
-# Check whether --enable-load-vt-fonts or --disable-load-vt-fonts was given.
-if test "${enable_load_vt_fonts+set}" = set; then
- enableval="$enable_load_vt_fonts"
- test "$enableval" != yes && enableval=no
- if test "$enableval" != "no" ; then
- enable_load_vt_fonts=yes
- else
- enable_load_vt_fonts=no
- fi
-else
- enableval=no
- enable_load_vt_fonts=no
-
-fi;
-echo "$as_me:9779: result: $enable_load_vt_fonts" >&5
-echo "${ECHO_T}$enable_load_vt_fonts" >&6
-if test "$enable_load_vt_fonts" = yes ; then
- cat >>confdefs.h <<\EOF
-#define OPT_LOAD_VTFONTS 1
-EOF
-
-fi
-
-echo "$as_me:9788: checking if you want support for logging" >&5
-echo $ECHO_N "checking if you want support for logging... $ECHO_C" >&6
-
-# Check whether --enable-logging or --disable-logging was given.
-if test "${enable_logging+set}" = set; then
- enableval="$enable_logging"
- test "$enableval" != yes && enableval=no
- if test "$enableval" != "no" ; then
- enable_logging=yes
- else
- enable_logging=no
- fi
-else
- enableval=no
- enable_logging=no
-
-fi;
-echo "$as_me:9805: result: $enable_logging" >&5
-echo "${ECHO_T}$enable_logging" >&6
-if test "$enable_logging" = yes ; then
- cat >>confdefs.h <<\EOF
-#define ALLOWLOGGING 1
-EOF
-
- echo "$as_me:9812: checking if you want to allow logging via a pipe" >&5
-echo $ECHO_N "checking if you want to allow logging via a pipe... $ECHO_C" >&6
-
-# Check whether --enable-logfile-exec or --disable-logfile-exec was given.
-if test "${enable_logfile_exec+set}" = set; then
- enableval="$enable_logfile_exec"
- test "$enableval" != yes && enableval=no
- if test "$enableval" != "no" ; then
- enable_log_exec=yes
- else
- enable_log_exec=no
- fi
-else
- enableval=no
- enable_log_exec=no
-
-fi;
- echo "$as_me:9829: result: $enable_log_exec" >&5
-echo "${ECHO_T}$enable_log_exec" >&6
- if test "$enable_log_exec" = yes ; then
- cat >>confdefs.h <<\EOF
-#define ALLOWLOGFILEEXEC 1
-EOF
-
- fi
-fi
-
-echo "$as_me:9839: checking if you want support for iconify/maximize translations" >&5
-echo $ECHO_N "checking if you want support for iconify/maximize translations... $ECHO_C" >&6
-
-# Check whether --enable-maximize or --disable-maximize was given.
-if test "${enable_maximize+set}" = set; then
- enableval="$enable_maximize"
- test "$enableval" != no && enableval=yes
- if test "$enableval" != "yes" ; then
- enable_maximize=no
- else
- enable_maximize=yes
- fi
-else
- enableval=yes
- enable_maximize=yes
-
-fi;
-echo "$as_me:9856: result: $enable_maximize" >&5
-echo "${ECHO_T}$enable_maximize" >&6
-test "$enable_maximize" = no && cat >>confdefs.h <<\EOF
-#define OPT_MAXIMIZE 0
-EOF
-
-echo "$as_me:9862: checking if you want NumLock to override keyboard tables" >&5
-echo $ECHO_N "checking if you want NumLock to override keyboard tables... $ECHO_C" >&6
-
-# Check whether --enable-num-lock or --disable-num-lock was given.
-if test "${enable_num_lock+set}" = set; then
- enableval="$enable_num_lock"
- test "$enableval" != no && enableval=yes
- if test "$enableval" != "yes" ; then
- enable_numlock=no
- else
- enable_numlock=yes
- fi
-else
- enableval=yes
- enable_numlock=yes
-
-fi;
-echo "$as_me:9879: result: $enable_numlock" >&5
-echo "${ECHO_T}$enable_numlock" >&6
-test "$enable_numlock" = no && cat >>confdefs.h <<\EOF
-#define OPT_NUM_LOCK 0
-EOF
-
-echo "$as_me:9885: checking if you want support for get/set of base64 selection data" >&5
-echo $ECHO_N "checking if you want support for get/set of base64 selection data... $ECHO_C" >&6
-
-# Check whether --enable-paste64 or --disable-paste64 was given.
-if test "${enable_paste64+set}" = set; then
- enableval="$enable_paste64"
- test "$enableval" != yes && enableval=no
- if test "$enableval" != "no" ; then
- enable_paste64=yes
- else
- enable_paste64=no
- fi
-else
- enableval=no
- enable_paste64=no
-
-fi;
-echo "$as_me:9902: result: $enable_paste64" >&5
-echo "${ECHO_T}$enable_paste64" >&6
-if test "$enable_paste64" = yes ; then
- cat >>confdefs.h <<\EOF
-#define OPT_PASTE64 1
-EOF
-
-else
- cat >>confdefs.h <<\EOF
-#define OPT_PASTE64 0
-EOF
-
-fi
-
-echo "$as_me:9916: checking if you want support for pty-handshaking" >&5
-echo $ECHO_N "checking if you want support for pty-handshaking... $ECHO_C" >&6
-
-# Check whether --enable-pty-handshake or --disable-pty-handshake was given.
-if test "${enable_pty_handshake+set}" = set; then
- enableval="$enable_pty_handshake"
- test "$enableval" != no && enableval=yes
- if test "$enableval" != "yes" ; then
- enable_pty_handshake=no
- else
- enable_pty_handshake=yes
- fi
-else
- enableval=yes
- enable_pty_handshake=yes
-
-fi;
-echo "$as_me:9933: result: $enable_pty_handshake" >&5
-echo "${ECHO_T}$enable_pty_handshake" >&6
-if test "$enable_pty_handshake" = yes ; then
- cat >>confdefs.h <<\EOF
-#define OPT_PTY_HANDSHAKE 1
-EOF
-
-else
- cat >>confdefs.h <<\EOF
-#define OPT_PTY_HANDSHAKE 0
-EOF
-
-fi
-
-echo "$as_me:9947: checking if you want support for mouse in readline applications" >&5
-echo $ECHO_N "checking if you want support for mouse in readline applications... $ECHO_C" >&6
-
-# Check whether --enable-readline-mouse or --disable-readline-mouse was given.
-if test "${enable_readline_mouse+set}" = set; then
- enableval="$enable_readline_mouse"
- test "$enableval" != yes && enableval=no
- if test "$enableval" != "no" ; then
- enable_readline_mouse=yes
- else
- enable_readline_mouse=no
- fi
-else
- enableval=no
- enable_readline_mouse=no
-
-fi;
-echo "$as_me:9964: result: $enable_readline_mouse" >&5
-echo "${ECHO_T}$enable_readline_mouse" >&6
-if test "$enable_readline_mouse" = yes ; then
- cat >>confdefs.h <<\EOF
-#define OPT_READLINE 1
-EOF
-
-fi
-
-echo "$as_me:9973: checking if you want support for right-scrollbar" >&5
-echo $ECHO_N "checking if you want support for right-scrollbar... $ECHO_C" >&6
-
-# Check whether --enable-rightbar or --disable-rightbar was given.
-if test "${enable_rightbar+set}" = set; then
- enableval="$enable_rightbar"
- test "$enableval" != no && enableval=yes
- if test "$enableval" != "yes" ; then
- enable_rightbar=no
- else
- enable_rightbar=yes
- fi
-else
- enableval=yes
- enable_rightbar=yes
-
-fi;
-echo "$as_me:9990: result: $enable_rightbar" >&5
-echo "${ECHO_T}$enable_rightbar" >&6
-if test "$enable_rightbar" = yes ; then
- cat >>confdefs.h <<\EOF
-#define SCROLLBAR_RIGHT 1
-EOF
-
-fi
-
-echo "$as_me:9999: checking if you want check for redundant name-change" >&5
-echo $ECHO_N "checking if you want check for redundant name-change... $ECHO_C" >&6
-
-# Check whether --enable-samename or --disable-samename was given.
-if test "${enable_samename+set}" = set; then
- enableval="$enable_samename"
- test "$enableval" != no && enableval=yes
- if test "$enableval" != "yes" ; then
- enable_samename=no
- else
- enable_samename=yes
- fi
-else
- enableval=yes
- enable_samename=yes
-
-fi;
-echo "$as_me:10016: result: $enable_samename" >&5
-echo "${ECHO_T}$enable_samename" >&6
-test "$enable_samename" = no && cat >>confdefs.h <<\EOF
-#define OPT_SAME_NAME 0
-EOF
-
-echo "$as_me:10022: checking if you want support for session management" >&5
-echo $ECHO_N "checking if you want support for session management... $ECHO_C" >&6
-
-# Check whether --enable-session-mgt or --disable-session-mgt was given.
-if test "${enable_session_mgt+set}" = set; then
- enableval="$enable_session_mgt"
- test "$enableval" != no && enableval=yes
- if test "$enableval" != "yes" ; then
- enable_session_mgt=no
- else
- enable_session_mgt=yes
- fi
-else
- enableval=yes
- enable_session_mgt=yes
-
-fi;
-echo "$as_me:10039: result: $enable_session_mgt" >&5
-echo "${ECHO_T}$enable_session_mgt" >&6
-test "$enable_session_mgt" = no && cat >>confdefs.h <<\EOF
-#define OPT_SESSION_MGT 0
-EOF
-
-echo "$as_me:10045: checking if you want to use termcap-query/report" >&5
-echo $ECHO_N "checking if you want to use termcap-query/report... $ECHO_C" >&6
-
-# Check whether --enable-tcap-query or --disable-tcap-query was given.
-if test "${enable_tcap_query+set}" = set; then
- enableval="$enable_tcap_query"
- test "$enableval" != yes && enableval=no
- if test "$enableval" != "no" ; then
- enable_tcap_query=yes
- else
- enable_tcap_query=no
- fi
-else
- enableval=no
- enable_tcap_query=no
-
-fi;
-echo "$as_me:10062: result: $enable_tcap_query" >&5
-echo "${ECHO_T}$enable_tcap_query" >&6
-test "$enable_tcap_query" = yes && cat >>confdefs.h <<\EOF
-#define OPT_TCAP_QUERY 1
-EOF
-
-echo "$as_me:10068: checking if you want support for tek4014" >&5
-echo $ECHO_N "checking if you want support for tek4014... $ECHO_C" >&6
-
-# Check whether --enable-tek4014 or --disable-tek4014 was given.
-if test "${enable_tek4014+set}" = set; then
- enableval="$enable_tek4014"
- test "$enableval" != no && enableval=yes
- if test "$enableval" != "yes" ; then
- enable_tek4014=no
- else
- enable_tek4014=yes
- fi
-else
- enableval=yes
- enable_tek4014=yes
-
-fi;
-echo "$as_me:10085: result: $enable_tek4014" >&5
-echo "${ECHO_T}$enable_tek4014" >&6
-if test "$enable_tek4014" = no ; then
- cat >>confdefs.h <<\EOF
-#define OPT_TEK4014 0
-EOF
-
-else
- EXTRAHDRS="$EXTRAHDRS Tekparse.h"
- EXTRASRCS="$EXTRASRCS TekPrsTbl.c Tekproc.c"
- EXTRAOBJS="$EXTRAOBJS TekPrsTbl.o Tekproc.o"
-fi
-
-echo "$as_me:10098: checking if you want pulldown menus with a toolbar" >&5
-echo $ECHO_N "checking if you want pulldown menus with a toolbar... $ECHO_C" >&6
-
-# Check whether --enable-toolbar or --disable-toolbar was given.
-if test "${enable_toolbar+set}" = set; then
- enableval="$enable_toolbar"
- test "$enableval" != yes && enableval=no
- if test "$enableval" != "no" ; then
- enable_toolbar=yes
- else
- enable_toolbar=no
- fi
-else
- enableval=no
- enable_toolbar=no
-
-fi;
-echo "$as_me:10115: result: $enable_toolbar" >&5
-echo "${ECHO_T}$enable_toolbar" >&6
-if test "$enable_toolbar" = yes ; then
- cat >>confdefs.h <<\EOF
-#define OPT_TOOLBAR 1
-EOF
-
-fi
-
-echo "$as_me:10124: checking if you want VT52 emulation" >&5
-echo $ECHO_N "checking if you want VT52 emulation... $ECHO_C" >&6
-
-# Check whether --enable-vt52 or --disable-vt52 was given.
-if test "${enable_vt52+set}" = set; then
- enableval="$enable_vt52"
- test "$enableval" != no && enableval=yes
- if test "$enableval" != "yes" ; then
- enable_vt52=no
- else
- enable_vt52=yes
- fi
-else
- enableval=yes
- enable_vt52=yes
-
-fi;
-echo "$as_me:10141: result: $enable_vt52" >&5
-echo "${ECHO_T}$enable_vt52" >&6
-test "$enable_vt52" = no && cat >>confdefs.h <<\EOF
-#define OPT_VT52_MODE 0
-EOF
-
-echo "$as_me:10147: checking if you want to use mini-luit/Latin9 built-in support" >&5
-echo $ECHO_N "checking if you want to use mini-luit/Latin9 built-in support... $ECHO_C" >&6
-
-# Check whether --enable-mini-luit or --disable-mini-luit was given.
-if test "${enable_mini_luit+set}" = set; then
- enableval="$enable_mini_luit"
- test "$enableval" != yes && enableval=no
- if test "$enableval" != "no" ; then
- enable_mini_luit=yes
- else
- enable_mini_luit=no
- fi
-else
- enableval=no
- enable_mini_luit=no
-
-fi;
-echo "$as_me:10164: result: $enable_mini_luit" >&5
-echo "${ECHO_T}$enable_mini_luit" >&6
-if test "$enable_mini_luit" = yes ; then
- cat >>confdefs.h <<\EOF
-#define OPT_MINI_LUIT 1
-EOF
-
-fi
-
-echo "$as_me:10173: checking if you want to use luit" >&5
-echo $ECHO_N "checking if you want to use luit... $ECHO_C" >&6
-
-# Check whether --enable-luit or --disable-luit was given.
-if test "${enable_luit+set}" = set; then
- enableval="$enable_luit"
- test "$enableval" != yes && enableval=no
- if test "$enableval" != "no" ; then
- enable_luit=yes
- else
- enable_luit=$enable_mini_luit
- fi
-else
- enableval=no
- enable_luit=$enable_mini_luit
-
-fi;
-echo "$as_me:10190: result: $enable_luit" >&5
-echo "${ECHO_T}$enable_luit" >&6
-if test "$enable_luit" = yes ; then
- cat >>confdefs.h <<\EOF
-#define OPT_LUIT_PROG 1
-EOF
-
-fi
-
-echo "$as_me:10199: checking if you want wide-character support" >&5
-echo $ECHO_N "checking if you want wide-character support... $ECHO_C" >&6
-
-# Check whether --enable-wide-chars or --disable-wide-chars was given.
-if test "${enable_wide_chars+set}" = set; then
- enableval="$enable_wide_chars"
- test "$enableval" != no && enableval=yes
- if test "$enableval" != "$enable_luit" ; then
- enable_wchar=yes
- else
- enable_wchar=$enable_luit
- fi
-else
- enableval=$enable_luit
- enable_wchar=$enable_luit
-
-fi;
-echo "$as_me:10216: result: $enable_wchar" >&5
-echo "${ECHO_T}$enable_wchar" >&6
-if test "$enable_wchar" = yes ; then
- cat >>confdefs.h <<\EOF
-#define OPT_WIDE_CHARS 1
-EOF
-
- EXTRAHDRS="$EXTRAHDRS charclass.h precompose.h wcwidth.h"
- EXTRASRCS="$EXTRASRCS charclass.c precompose.c wcwidth.c"
- EXTRAOBJS="$EXTRAOBJS charclass.o precompose.o wcwidth.o"
-fi
-
-echo "$as_me:10228: checking if you want dynamic-abbreviation support" >&5
-echo $ECHO_N "checking if you want dynamic-abbreviation support... $ECHO_C" >&6
-
-# Check whether --enable-dabbrev or --disable-dabbrev was given.
-if test "${enable_dabbrev+set}" = set; then
- enableval="$enable_dabbrev"
- test "$enableval" != yes && enableval=no
- if test "$enableval" != "no" ; then
- enable_dabbrev=yes
- else
- enable_dabbrev=no
- fi
-else
- enableval=no
- enable_dabbrev=no
-
-fi;
-echo "$as_me:10245: result: $enable_dabbrev" >&5
-echo "${ECHO_T}$enable_dabbrev" >&6
-if test "$enable_dabbrev" = yes ; then
- cat >>confdefs.h <<\EOF
-#define OPT_DABBREV 1
-EOF
-
-fi
-
-echo "$as_me:10254: checking if you want DECterm Locator support" >&5
-echo $ECHO_N "checking if you want DECterm Locator support... $ECHO_C" >&6
-
-# Check whether --enable-dec-locator or --disable-dec-locator was given.
-if test "${enable_dec_locator+set}" = set; then
- enableval="$enable_dec_locator"
- test "$enableval" != yes && enableval=no
- if test "$enableval" != "no" ; then
- enable_dec_locator=yes
- else
- enable_dec_locator=no
- fi
-else
- enableval=no
- enable_dec_locator=no
-
-fi;
-echo "$as_me:10271: result: $enable_dec_locator" >&5
-echo "${ECHO_T}$enable_dec_locator" >&6
-if test "$enable_dec_locator" = yes ; then
- cat >>confdefs.h <<\EOF
-#define OPT_DEC_LOCATOR 1
-EOF
-
-fi
-
-echo "$as_me:10280: checking if you want -ziconbeep option" >&5
-echo $ECHO_N "checking if you want -ziconbeep option... $ECHO_C" >&6
-
-# Check whether --enable-ziconbeep or --disable-ziconbeep was given.
-if test "${enable_ziconbeep+set}" = set; then
- enableval="$enable_ziconbeep"
- test "$enableval" != no && enableval=yes
- if test "$enableval" != "yes" ; then
- enable_ziconbeep=no
- else
- enable_ziconbeep=yes
- fi
-else
- enableval=yes
- enable_ziconbeep=yes
-
-fi;
-echo "$as_me:10297: result: $enable_ziconbeep" >&5
-echo "${ECHO_T}$enable_ziconbeep" >&6
-test "$enable_ziconbeep" = no && cat >>confdefs.h <<\EOF
-#define OPT_ZICONBEEP 0
-EOF
-
-###############################################################################
-
-echo "$as_me:10305: checking if you want debugging traces" >&5
-echo $ECHO_N "checking if you want debugging traces... $ECHO_C" >&6
-
-# Check whether --enable-trace or --disable-trace was given.
-if test "${enable_trace+set}" = set; then
- enableval="$enable_trace"
- test "$enableval" != yes && enableval=no
- if test "$enableval" != "no" ; then
- enable_trace=yes
- else
- enable_trace=no
- fi
-else
- enableval=no
- enable_trace=no
-
-fi;
-echo "$as_me:10322: result: $enable_trace" >&5
-echo "${ECHO_T}$enable_trace" >&6
-if test "$enable_trace" = yes ; then
- cat >>confdefs.h <<\EOF
-#define OPT_TRACE 1
-EOF
-
- EXTRASRCS="$EXTRASRCS trace.c"
- EXTRAOBJS="$EXTRAOBJS trace.o"
-fi
-
-echo "$as_me:10333: checking if you want to see long compiling messages" >&5
-echo $ECHO_N "checking if you want to see long compiling messages... $ECHO_C" >&6
-
-# Check whether --enable-echo or --disable-echo was given.
-if test "${enable_echo+set}" = set; then
- enableval="$enable_echo"
- test "$enableval" != no && enableval=yes
- if test "$enableval" != "yes" ; then
-
- ECHO_LT='--silent'
- ECHO_LD='@echo linking $@;'
- RULE_CC=' @echo compiling $<'
- SHOW_CC=' @echo compiling $@'
- ECHO_CC='@'
-
- else
-
- ECHO_LT=''
- ECHO_LD=''
- RULE_CC='# compiling'
- SHOW_CC='# compiling'
- ECHO_CC=''
-
- fi
-else
- enableval=yes
-
- ECHO_LT=''
- ECHO_LD=''
- RULE_CC='# compiling'
- SHOW_CC='# compiling'
- ECHO_CC=''
-
-fi;
-echo "$as_me:10367: result: $enableval" >&5
-echo "${ECHO_T}$enableval" >&6
-
-echo "$as_me:10370: checking if you want magic cookie emulation" >&5
-echo $ECHO_N "checking if you want magic cookie emulation... $ECHO_C" >&6
-
-# Check whether --enable-xmc-glitch or --disable-xmc-glitch was given.
-if test "${enable_xmc_glitch+set}" = set; then
- enableval="$enable_xmc_glitch"
- test "$enableval" != yes && enableval=no
- if test "$enableval" != "no" ; then
- enable_xmc=yes
- else
- enable_xmc=no
- fi
-else
- enableval=no
- enable_xmc=no
-
-fi;
-echo "$as_me:10387: result: $enable_xmc" >&5
-echo "${ECHO_T}$enable_xmc" >&6
-if test "$enable_xmc" = yes ; then
- cat >>confdefs.h <<\EOF
-#define OPT_XMC_GLITCH 1
-EOF
-
- EXTRASRCS="$EXTRASRCS testxmc.c"
- EXTRAOBJS="$EXTRAOBJS testxmc.o"
-fi
-
-if test -n "$GCC" ; then
-echo "$as_me:10399: checking if you want to turn on gcc warnings" >&5
-echo $ECHO_N "checking if you want to turn on gcc warnings... $ECHO_C" >&6
-
-# Check whether --enable-warnings or --disable-warnings was given.
-if test "${enable_warnings+set}" = set; then
- enableval="$enable_warnings"
- test "$enableval" != yes && enableval=no
- if test "$enableval" != "no" ; then
- with_warnings=yes
- else
- with_warnings=no
- fi
-else
- enableval=no
- with_warnings=no
-
-fi;
-echo "$as_me:10416: result: $with_warnings" >&5
-echo "${ECHO_T}$with_warnings" >&6
-if test "$with_warnings" = yes
-then
-
-if test "$GCC" = yes
-then
-cat > conftest.i <<EOF
-#ifndef GCC_PRINTF
-#define GCC_PRINTF 0
-#endif
-#ifndef GCC_SCANF
-#define GCC_SCANF 0
-#endif
-#ifndef GCC_NORETURN
-#define GCC_NORETURN /* nothing */
-#endif
-#ifndef GCC_UNUSED
-#define GCC_UNUSED /* nothing */
-#endif
-EOF
-if test "$GCC" = yes
-then
- { echo "$as_me:10439: checking for $CC __attribute__ directives..." >&5
-echo "$as_me: checking for $CC __attribute__ directives..." >&6;}
-cat > conftest.$ac_ext <<EOF
-#line 10442 "configure"
-#include "confdefs.h"
-#include "conftest.h"
-#include "conftest.i"
-#if GCC_PRINTF
-#define GCC_PRINTFLIKE(fmt,var) __attribute__((format(printf,fmt,var)))
-#else
-#define GCC_PRINTFLIKE(fmt,var) /*nothing*/
-#endif
-#if GCC_SCANF
-#define GCC_SCANFLIKE(fmt,var) __attribute__((format(scanf,fmt,var)))
-#else
-#define GCC_SCANFLIKE(fmt,var) /*nothing*/
-#endif
-extern void wow(char *,...) GCC_SCANFLIKE(1,2);
-extern void oops(char *,...) GCC_PRINTFLIKE(1,2) GCC_NORETURN;
-extern void foo(void) GCC_NORETURN;
-int main(int argc GCC_UNUSED, char *argv[] GCC_UNUSED) { return 0; }
-EOF
- for cf_attribute in scanf printf unused noreturn
- do
-
-cf_ATTRIBUTE=`echo "$cf_attribute" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%`
-
- cf_directive="__attribute__(($cf_attribute))"
- echo "checking for $CC $cf_directive" 1>&5
- case $cf_attribute in
- scanf|printf)
- cat >conftest.h <<EOF
-#define GCC_$cf_ATTRIBUTE 1
-EOF
- ;;
- *)
- cat >conftest.h <<EOF
-#define GCC_$cf_ATTRIBUTE $cf_directive
-EOF
- ;;
- esac
- if { (eval echo "$as_me:10480: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- echo "$as_me:10483: \$? = $ac_status" >&5
- (exit $ac_status); }; then
- test -n "$verbose" && echo "$as_me:10485: result: ... $cf_attribute" >&5
-echo "${ECHO_T}... $cf_attribute" >&6
- cat conftest.h >>confdefs.h
- fi
- done
-else
- fgrep define conftest.i >>confdefs.h
-fi
-rm -rf conftest*
-fi
-
-GCC_VERSION=none
-if test "$GCC" = yes ; then
- echo "$as_me:10498: checking version of $CC" >&5
-echo $ECHO_N "checking version of $CC... $ECHO_C" >&6
- GCC_VERSION="`${CC} --version| sed -e '2,$d' -e 's/^.*(GCC) //' -e 's/^[^0-9.]*//' -e 's/[^0-9.].*//'`"
- test -z "$GCC_VERSION" && GCC_VERSION=unknown
- echo "$as_me:10502: result: $GCC_VERSION" >&5
-echo "${ECHO_T}$GCC_VERSION" >&6
-fi
-
-INTEL_COMPILER=no
-
-if test "$GCC" = yes ; then
- case $host_os in
- linux*|gnu*)
- echo "$as_me:10511: checking if this is really Intel C compiler" >&5
-echo $ECHO_N "checking if this is really Intel C compiler... $ECHO_C" >&6
- cf_save_CFLAGS="$CFLAGS"
- CFLAGS="$CFLAGS -no-gcc"
- cat >conftest.$ac_ext <<_ACEOF
-#line 10516 "configure"
-#include "confdefs.h"
-
-int
-main ()
-{
-
-#ifdef __INTEL_COMPILER
-#else
-make an error
-#endif
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:10533: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- echo "$as_me:10536: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:10539: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:10542: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- INTEL_COMPILER=yes
-cf_save_CFLAGS="$cf_save_CFLAGS -we147 -no-gcc"
-
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
- CFLAGS="$cf_save_CFLAGS"
- echo "$as_me:10553: result: $INTEL_COMPILER" >&5
-echo "${ECHO_T}$INTEL_COMPILER" >&6
- ;;
- esac
-fi
-
-cat > conftest.$ac_ext <<EOF
-#line 10560 "configure"
-int main(int argc, char *argv[]) { return (argv[argc-1] == 0) ; }
-EOF
-
-if test "$INTEL_COMPILER" = yes
-then
-# The "-wdXXX" options suppress warnings:
-# remark #1419: external declaration in primary source file
-# remark #1682: implicit conversion of a 64-bit integral type to a smaller integral type (potential portability problem)
-# remark #1683: explicit conversion of a 64-bit integral type to a smaller integral type (potential portability problem)
-# remark #1684: conversion from pointer to same-sized integral type (potential portability problem)
-# remark #193: zero used for undefined preprocessing identifier
-# remark #593: variable "curs_sb_left_arrow" was set but never used
-# remark #810: conversion from "int" to "Dimension={unsigned short}" may lose significant bits
-# remark #869: parameter "tw" was never referenced
-# remark #981: operands are evaluated in unspecified order
-# warning #269: invalid format string conversion
-
- { echo "$as_me:10578: checking for $CC warning options..." >&5
-echo "$as_me: checking for $CC warning options..." >&6;}
- cf_save_CFLAGS="$CFLAGS"
- EXTRA_CFLAGS="-Wall"
- for cf_opt in \
- wd1419 \
- wd1682 \
- wd1683 \
- wd1684 \
- wd193 \
- wd279 \
- wd593 \
- wd810 \
- wd869 \
- wd981
- do
- CFLAGS="$cf_save_CFLAGS $EXTRA_CFLAGS -$cf_opt"
- if { (eval echo "$as_me:10595: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- echo "$as_me:10598: \$? = $ac_status" >&5
- (exit $ac_status); }; then
- test -n "$verbose" && echo "$as_me:10600: result: ... -$cf_opt" >&5
-echo "${ECHO_T}... -$cf_opt" >&6
- EXTRA_CFLAGS="$EXTRA_CFLAGS -$cf_opt"
- fi
- done
- CFLAGS="$cf_save_CFLAGS"
-
-elif test "$GCC" = yes
-then
- { echo "$as_me:10609: checking for $CC warning options..." >&5
-echo "$as_me: checking for $CC warning options..." >&6;}
- cf_save_CFLAGS="$CFLAGS"
- EXTRA_CFLAGS="-W -Wall"
- cf_warn_CONST=""
- test "$with_ext_const" = yes && cf_warn_CONST="Wwrite-strings"
- for cf_opt in \
- Wbad-function-cast \
- Wcast-align \
- Wcast-qual \
- Winline \
- Wmissing-declarations \
- Wmissing-prototypes \
- Wnested-externs \
- Wpointer-arith \
- Wshadow \
- Wstrict-prototypes \
- Wundef $cf_warn_CONST
- do
- CFLAGS="$cf_save_CFLAGS $EXTRA_CFLAGS -$cf_opt"
- if { (eval echo "$as_me:10629: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- echo "$as_me:10632: \$? = $ac_status" >&5
- (exit $ac_status); }; then
- test -n "$verbose" && echo "$as_me:10634: result: ... -$cf_opt" >&5
-echo "${ECHO_T}... -$cf_opt" >&6
- case $cf_opt in #(vi
- Wcast-qual) #(vi
- CPPFLAGS="$CPPFLAGS -DXTSTRINGDEFINES"
- ;;
- Winline) #(vi
- case $GCC_VERSION in
- 3.3*)
- test -n "$verbose" && echo " feature is broken in gcc $GCC_VERSION" 1>&6
-
- continue;;
- esac
- ;;
- esac
- EXTRA_CFLAGS="$EXTRA_CFLAGS -$cf_opt"
- fi
- done
- CFLAGS="$cf_save_CFLAGS"
-fi
-rm -f conftest*
-
-fi
-fi
-
-if test $disable_setuid = yes ; then
- MAY_SETUID="#"
- NOT_SETUID=
- cat >>confdefs.h <<\EOF
-#define DISABLE_SETUID 1
-EOF
-
-else
- MAY_SETUID=
- NOT_SETUID="#"
-fi
-
-### remove from CPPFLAGS the optional features we define in xtermcfg.h
-### or other conflicting symbols that may be defined via imake:
-for cf_def in \
- __STDC__ \
- ALLOWLOGGING \
- ALLOWLOGFILEEXEC \
- OPT_LUIT_PROG \
- OPT_WIDE_CHARS \
- SCROLLBAR_RIGHT \
- USE_TTY_GROUP \
- USE_UTEMPTER \
- XRENDERFONT
-do
- CPPFLAGS=`echo "$CPPFLAGS" | sed -e s/-D$cf_def//`
-done
-
-### output Makefile and xtermcfg.h
-ac_config_files="$ac_config_files Makefile"
-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 overriden 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, don't put newlines in cache variables' values.
-# 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.
-{
- (set) 2>&1 |
- case `(ac_space=' '; set | grep ac_space) 2>&1` in
- *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 \
- "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
- ;;
- esac;
-} |
- sed '
- t clear
- : clear
- s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
- t end
- /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
- : end' >>confcache
-if cmp -s $cache_file confcache; then :; else
- if test -w $cache_file; then
- test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file"
- cat confcache >$cache_file
- else
- echo "not updating unwritable cache $cache_file"
- 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}'
-
-# VPATH may cause trouble with some makes, so we remove $(srcdir),
-# ${srcdir} and @srcdir@ 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[ ]*=/{
-s/:*\$(srcdir):*/:/;
-s/:*\${srcdir}:*/:/;
-s/:*@srcdir@:*/:/;
-s/^\([^=]*=[ ]*\):*/\1/;
-s/:*$//;
-s/^[^=]*=[ ]*$//;
-}'
-fi
-
-DEFS=-DHAVE_CONFIG_H
-
-: ${CONFIG_STATUS=./config.status}
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files $CONFIG_STATUS"
-{ echo "$as_me:10768: creating $CONFIG_STATUS" >&5
-echo "$as_me: creating $CONFIG_STATUS" >&6;}
-cat >$CONFIG_STATUS <<_ACEOF
-#! $SHELL
-# Generated automatically by configure.
-# 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
-SHELL=\${CONFIG_SHELL-$SHELL}
-ac_cs_invocation="\$0 \$@"
-
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF
-# Be Bourne compatible
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
- emulate sh
- NULLCMD=:
-elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
- set -o posix
-fi
-
-# Name of the executable.
-as_me=`echo "$0" |sed 's,.*[\\/],,'`
-
-if expr a : '\(a\)' >/dev/null 2>&1; then
- as_expr=expr
-else
- as_expr=false
-fi
-
-rm -f conf$$ conf$$.exe conf$$.file
-echo >conf$$.file
-if ln -s conf$$.file conf$$ 2>/dev/null; then
- # We could just check for DJGPP; but this test a) works b) is more generic
- # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
- if test -f conf$$.exe; then
- # Don't use ln at all; we don't have any links
- as_ln_s='cp -p'
- else
- as_ln_s='ln -s'
- fi
-elif ln conf$$.file conf$$ 2>/dev/null; then
- as_ln_s=ln
-else
- as_ln_s='cp -p'
-fi
-rm -f conf$$ conf$$.exe conf$$.file
-
-as_executable_p="test -f"
-
-# Support unset when possible.
-if (FOO=FOO; unset FOO) >/dev/null 2>&1; then
- as_unset=unset
-else
- as_unset=false
-fi
-
-# NLS nuisances.
-$as_unset LANG || test "${LANG+set}" != set || { LANG=C; export LANG; }
-$as_unset LC_ALL || test "${LC_ALL+set}" != set || { LC_ALL=C; export LC_ALL; }
-$as_unset LC_TIME || test "${LC_TIME+set}" != set || { LC_TIME=C; export LC_TIME; }
-$as_unset LC_CTYPE || test "${LC_CTYPE+set}" != set || { LC_CTYPE=C; export LC_CTYPE; }
-$as_unset LANGUAGE || test "${LANGUAGE+set}" != set || { LANGUAGE=C; export LANGUAGE; }
-$as_unset LC_COLLATE || test "${LC_COLLATE+set}" != set || { LC_COLLATE=C; export LC_COLLATE; }
-$as_unset LC_NUMERIC || test "${LC_NUMERIC+set}" != set || { LC_NUMERIC=C; export LC_NUMERIC; }
-$as_unset LC_MESSAGES || test "${LC_MESSAGES+set}" != set || { LC_MESSAGES=C; export LC_MESSAGES; }
-
-# IFS
-# We need space, tab and new line, in precisely that order.
-as_nl='
-'
-IFS=" $as_nl"
-
-# CDPATH.
-$as_unset CDPATH || test "${CDPATH+set}" != set || { CDPATH=:; export CDPATH; }
-
-exec 6>&1
-
-_ACEOF
-
-# Files that config.status was made for.
-if test -n "$ac_config_files"; then
- echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS
-fi
-
-if test -n "$ac_config_headers"; then
- echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS
-fi
-
-if test -n "$ac_config_links"; then
- echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS
-fi
-
-if test -n "$ac_config_commands"; then
- echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS
-fi
-
-cat >>$CONFIG_STATUS <<\EOF
-
-ac_cs_usage="\
-\`$as_me' instantiates files from templates according to the
-current configuration.
-
-Usage: $0 [OPTIONS] [FILE]...
-
- -h, --help print this help, then exit
- -V, --version print version number, then exit
- -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
-
-Report bugs to <bug-autoconf@gnu.org>."
-EOF
-
-cat >>$CONFIG_STATUS <<EOF
-ac_cs_version="\\
-config.status
-configured by $0, generated by GNU Autoconf 2.52.20030208,
- with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
-
-Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001
-Free Software Foundation, Inc.
-This config.status script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it."
-srcdir=$srcdir
-INSTALL="$INSTALL"
-EOF
-
-cat >>$CONFIG_STATUS <<\EOF
-# If no file are specified by the user, then we need to provide default
-# value. By we need to know if files were specified by the user.
-ac_need_defaults=:
-while test $# != 0
-do
- case $1 in
- --*=*)
- ac_option=`expr "x$1" : 'x\([^=]*\)='`
- ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'`
- shift
- set dummy "$ac_option" "$ac_optarg" ${1+"$@"}
- shift
- ;;
- -*);;
- *) # This is not an option, so the user has probably given explicit
- # arguments.
- ac_need_defaults=false;;
- esac
-
- case $1 in
- # Handling of the options.
-EOF
-cat >>$CONFIG_STATUS <<EOF
- -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
- echo "running $SHELL $0 " $ac_configure_args " --no-create --no-recursion"
- exec $SHELL $0 $ac_configure_args --no-create --no-recursion ;;
-EOF
-cat >>$CONFIG_STATUS <<\EOF
- --version | --vers* | -V )
- echo "$ac_cs_version"; exit 0 ;;
- --he | --h)
- # Conflict between --help and --header
- { { echo "$as_me:10941: error: ambiguous option: $1
-Try \`$0 --help' for more information." >&5
-echo "$as_me: error: ambiguous option: $1
-Try \`$0 --help' for more information." >&2;}
- { (exit 1); exit 1; }; };;
- --help | --hel | -h )
- echo "$ac_cs_usage"; exit 0 ;;
- --debug | --d* | -d )
- debug=: ;;
- --file | --fil | --fi | --f )
- shift
- CONFIG_FILES="$CONFIG_FILES $1"
- ac_need_defaults=false;;
- --header | --heade | --head | --hea )
- shift
- CONFIG_HEADERS="$CONFIG_HEADERS $1"
- ac_need_defaults=false;;
-
- # This is an error.
- -*) { { echo "$as_me:10960: error: unrecognized option: $1
-Try \`$0 --help' for more information." >&5
-echo "$as_me: error: unrecognized option: $1
-Try \`$0 --help' for more information." >&2;}
- { (exit 1); exit 1; }; } ;;
-
- *) ac_config_targets="$ac_config_targets $1" ;;
-
- esac
- shift
-done
-
-exec 5>>config.log
-cat >&5 << _ACEOF
-
-## ----------------------- ##
-## Running config.status. ##
-## ----------------------- ##
-
-This file was extended by $as_me 2.52.20030208, executed with
- CONFIG_FILES = $CONFIG_FILES
- CONFIG_HEADERS = $CONFIG_HEADERS
- CONFIG_LINKS = $CONFIG_LINKS
- CONFIG_COMMANDS = $CONFIG_COMMANDS
- > $ac_cs_invocation
-on `(hostname || uname -n) 2>/dev/null | sed 1q`
-
-_ACEOF
-EOF
-
-cat >>$CONFIG_STATUS <<\EOF
-for ac_config_target in $ac_config_targets
-do
- case "$ac_config_target" in
- # Handling of arguments.
- "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;;
- "xtermcfg.h" ) CONFIG_HEADERS="$CONFIG_HEADERS xtermcfg.h:xtermcfg.hin" ;;
- *) { { echo "$as_me:10997: error: invalid argument: $ac_config_target" >&5
-echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
- { (exit 1); exit 1; }; };;
- 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+set}" = set || CONFIG_FILES=$config_files
- test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
-fi
-
-# Create a temporary directory, and hook for its removal unless debugging.
-$debug ||
-{
- trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0
- trap '{ (exit 1); exit 1; }' 1 2 13 15
-}
-
-# Create a (secure) tmp directory for tmp files.
-: ${TMPDIR=/tmp}
-{
- tmp=`(umask 077 && mktemp -d -q "$TMPDIR/csXXXXXX") 2>/dev/null` &&
- test -n "$tmp" && test -d "$tmp"
-} ||
-{
- tmp=$TMPDIR/cs$$-$RANDOM
- (umask 077 && mkdir $tmp)
-} ||
-{
- echo "$me: cannot create a temporary directory in $TMPDIR" >&2
- { (exit 1); exit 1; }
-}
-
-EOF
-
-cat >>$CONFIG_STATUS <<EOF
-
-#
-# CONFIG_FILES section.
-#
-
-# No need to generate the scripts if there are no CONFIG_FILES.
-# This happens for instance when ./config.status config.h
-if test -n "\$CONFIG_FILES"; then
- # Protect against being on the right side of a sed subst in config.status.
- sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g;
- s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF
-s,@SHELL@,$SHELL,;t t
-s,@exec_prefix@,$exec_prefix,;t t
-s,@prefix@,$prefix,;t t
-s,@program_transform_name@,$program_transform_name,;t t
-s,@bindir@,$bindir,;t t
-s,@sbindir@,$sbindir,;t t
-s,@libexecdir@,$libexecdir,;t t
-s,@datadir@,$datadir,;t t
-s,@sysconfdir@,$sysconfdir,;t t
-s,@sharedstatedir@,$sharedstatedir,;t t
-s,@localstatedir@,$localstatedir,;t t
-s,@libdir@,$libdir,;t t
-s,@includedir@,$includedir,;t t
-s,@oldincludedir@,$oldincludedir,;t t
-s,@infodir@,$infodir,;t t
-s,@mandir@,$mandir,;t t
-s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t
-s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t
-s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t
-s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t
-s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t
-s,@build_alias@,$build_alias,;t t
-s,@host_alias@,$host_alias,;t t
-s,@target_alias@,$target_alias,;t t
-s,@ECHO_C@,$ECHO_C,;t t
-s,@ECHO_N@,$ECHO_N,;t t
-s,@ECHO_T@,$ECHO_T,;t t
-s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t
-s,@DEFS@,$DEFS,;t t
-s,@LIBS@,$LIBS,;t t
-s,@build@,$build,;t t
-s,@build_cpu@,$build_cpu,;t t
-s,@build_vendor@,$build_vendor,;t t
-s,@build_os@,$build_os,;t t
-s,@host@,$host,;t t
-s,@host_cpu@,$host_cpu,;t t
-s,@host_vendor@,$host_vendor,;t t
-s,@host_os@,$host_os,;t t
-s,@CC@,$CC,;t t
-s,@CFLAGS@,$CFLAGS,;t t
-s,@LDFLAGS@,$LDFLAGS,;t t
-s,@CPPFLAGS@,$CPPFLAGS,;t t
-s,@ac_ct_CC@,$ac_ct_CC,;t t
-s,@EXEEXT@,$EXEEXT,;t t
-s,@OBJEXT@,$OBJEXT,;t t
-s,@CPP@,$CPP,;t t
-s,@AWK@,$AWK,;t t
-s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t
-s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t
-s,@INSTALL_DATA@,$INSTALL_DATA,;t t
-s,@LINT@,$LINT,;t t
-s,@EXTRA_CPPFLAGS@,$EXTRA_CPPFLAGS,;t t
-s,@PROG_EXT@,$PROG_EXT,;t t
-s,@appsdir@,$appsdir,;t t
-s,@XTERM_PATH@,$XTERM_PATH,;t t
-s,@SINSTALL_OPTS@,$SINSTALL_OPTS,;t t
-s,@X_CFLAGS@,$X_CFLAGS,;t t
-s,@X_PRE_LIBS@,$X_PRE_LIBS,;t t
-s,@X_LIBS@,$X_LIBS,;t t
-s,@X_EXTRA_LIBS@,$X_EXTRA_LIBS,;t t
-s,@IMAKE@,$IMAKE,;t t
-s,@IMAKE_CFLAGS@,$IMAKE_CFLAGS,;t t
-s,@IMAKE_LOADFLAGS@,$IMAKE_LOADFLAGS,;t t
-s,@TERMINFO_DIR@,$TERMINFO_DIR,;t t
-s,@SET_TERMINFO@,$SET_TERMINFO,;t t
-s,@FREETYPE_CONFIG@,$FREETYPE_CONFIG,;t t
-s,@XRENDERFONT@,$XRENDERFONT,;t t
-s,@HAVE_TYPE_FCCHAR32@,$HAVE_TYPE_FCCHAR32,;t t
-s,@HAVE_TYPE_XFTCHARSPEC@,$HAVE_TYPE_XFTCHARSPEC,;t t
-s,@ECHO_LT@,$ECHO_LT,;t t
-s,@ECHO_LD@,$ECHO_LD,;t t
-s,@RULE_CC@,$RULE_CC,;t t
-s,@SHOW_CC@,$SHOW_CC,;t t
-s,@ECHO_CC@,$ECHO_CC,;t t
-s,@EXTRA_CFLAGS@,$EXTRA_CFLAGS,;t t
-s,@CHARPROC_DEPS@,$CHARPROC_DEPS,;t t
-s,@EXTRAHDRS@,$EXTRAHDRS,;t t
-s,@EXTRASRCS@,$EXTRASRCS,;t t
-s,@EXTRAOBJS@,$EXTRAOBJS,;t t
-s,@MAY_SETUID@,$MAY_SETUID,;t t
-s,@NOT_SETUID@,$NOT_SETUID,;t t
-CEOF
-
-EOF
-
- cat >>$CONFIG_STATUS <<\EOF
- # Split the substitutions into bite-sized pieces for seds with
- # small command number limits, like on Digital OSF/1 and HP-UX.
- ac_max_sed_lines=48
- ac_sed_frag=1 # Number of current file.
- ac_beg=1 # First line for current file.
- ac_end=$ac_max_sed_lines # Line after last line for current file.
- ac_more_lines=:
- ac_sed_cmds=
- while $ac_more_lines; do
- if test $ac_beg -gt 1; then
- sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
- else
- sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
- fi
- if test ! -s $tmp/subs.frag; then
- ac_more_lines=false
- else
- # The purpose of the label and of the branching condition is to
- # speed up the sed processing (if there are no `@' at all, there
- # is no need to browse any of the substitutions).
- # These are the two extra sed commands mentioned above.
- (echo ':t
- /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed
- if test -z "$ac_sed_cmds"; then
- ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed"
- else
- ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed"
- fi
- ac_sed_frag=`expr $ac_sed_frag + 1`
- ac_beg=$ac_end
- ac_end=`expr $ac_end + $ac_max_sed_lines`
- fi
- done
- if test -z "$ac_sed_cmds"; then
- ac_sed_cmds=cat
- fi
-fi # test -n "$CONFIG_FILES"
-
-EOF
-cat >>$CONFIG_STATUS <<\EOF
-for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue
- # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
- case $ac_file in
- - | *:- | *:-:* ) # input from stdin
- cat >$tmp/stdin
- ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
- ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
- *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
- ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
- * ) ac_file_in=$ac_file.in ;;
- esac
-
- # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories.
- ac_dir=`$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$ac_file" : 'X\(//\)[^/]' \| \
- X"$ac_file" : 'X\(//\)$' \| \
- X"$ac_file" : 'X\(/\)' \| \
- . : '\(.\)' 2>/dev/null ||
-echo X"$ac_file" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
- /^X\(\/\/\)[^/].*/{ s//\1/; q; }
- /^X\(\/\/\)$/{ s//\1/; q; }
- /^X\(\/\).*/{ s//\1/; q; }
- s/.*/./; q'`
- if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
- { case "$ac_dir" in
- [\\/]* | ?:[\\/]* ) as_incr_dir=;;
- *) as_incr_dir=.;;
-esac
-as_dummy="$ac_dir"
-for as_mkdir_dir in `IFS='/\\'; set X $as_dummy; shift; echo "$@"`; do
- case $as_mkdir_dir in
- # Skip DOS drivespec
- ?:) as_incr_dir=$as_mkdir_dir ;;
- *)
- as_incr_dir=$as_incr_dir/$as_mkdir_dir
- test -d "$as_incr_dir" || mkdir "$as_incr_dir"
- ;;
- esac
-done; }
-
- ac_dir_suffix="/`echo $ac_dir|sed 's,^\./,,'`"
- # A "../" for each directory in $ac_dir_suffix.
- ac_dots=`echo "$ac_dir_suffix" | sed 's,/[^/]*,../,g'`
- else
- ac_dir_suffix= ac_dots=
- fi
-
- case $srcdir in
- .) ac_srcdir=.
- if test -z "$ac_dots"; then
- ac_top_srcdir=.
- else
- ac_top_srcdir=`echo $ac_dots | sed 's,/$,,'`
- fi ;;
- [\\/]* | ?:[\\/]* )
- ac_srcdir=$srcdir$ac_dir_suffix;
- ac_top_srcdir=$srcdir ;;
- *) # Relative path.
- ac_srcdir=$ac_dots$srcdir$ac_dir_suffix
- ac_top_srcdir=$ac_dots$srcdir ;;
- esac
-
- case $INSTALL in
- [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
- *) ac_INSTALL=$ac_dots$INSTALL ;;
- esac
-
- if test x"$ac_file" != x-; then
- { echo "$as_me:11243: creating $ac_file" >&5
-echo "$as_me: creating $ac_file" >&6;}
- rm -f "$ac_file"
- fi
- # 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 automatically by config.status. */
- configure_input="Generated automatically from `echo $ac_file_in |
- sed 's,.*/,,'` by configure."
-
- # First look for the input files in the build tree, otherwise in the
- # src tree.
- ac_file_inputs=`IFS=:
- for f in $ac_file_in; do
- case $f in
- -) echo $tmp/stdin ;;
- [\\/$]*)
- # Absolute (can't be DOS-style, as IFS=:)
- test -f "$f" || { { echo "$as_me:11261: error: cannot find input file: $f" >&5
-echo "$as_me: error: cannot find input file: $f" >&2;}
- { (exit 1); exit 1; }; }
- echo $f;;
- *) # Relative
- if test -f "$f"; then
- # Build tree
- echo $f
- elif test -f "$srcdir/$f"; then
- # Source tree
- echo $srcdir/$f
- else
- # /dev/null tree
- { { echo "$as_me:11274: error: cannot find input file: $f" >&5
-echo "$as_me: error: cannot find input file: $f" >&2;}
- { (exit 1); exit 1; }; }
- fi;;
- esac
- done` || { (exit 1); exit 1; }
-EOF
-cat >>$CONFIG_STATUS <<EOF
- sed "$ac_vpsub
-$extrasub
-EOF
-cat >>$CONFIG_STATUS <<\EOF
-:t
-/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
-s,@configure_input@,$configure_input,;t t
-s,@srcdir@,$ac_srcdir,;t t
-s,@top_srcdir@,$ac_top_srcdir,;t t
-s,@INSTALL@,$ac_INSTALL,;t t
-" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out
- rm -f $tmp/stdin
- if test x"$ac_file" != x-; then
- mv $tmp/out $ac_file
- else
- cat $tmp/out
- rm -f $tmp/out
- fi
-
-done
-EOF
-cat >>$CONFIG_STATUS <<\EOF
-
-#
-# CONFIG_HEADER section.
-#
-
-# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
-# NAME is the cpp macro being defined and VALUE is the value it is being given.
-#
-# ac_d sets the value in "#define NAME VALUE" lines.
-ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)'
-ac_dB='[ ].*$,\1#\2'
-ac_dC=' '
-ac_dD=',;t'
-# ac_i turns "#undef NAME" with trailing blanks into "#define NAME VALUE".
-ac_iA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
-ac_iB='\([ ]\),\1#\2define\3'
-ac_iC=' '
-ac_iD='\4,;t'
-# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
-ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
-ac_uB='$,\1#\2define\3'
-ac_uC=' '
-ac_uD=',;t'
-
-for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue
- # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
- case $ac_file in
- - | *:- | *:-:* ) # input from stdin
- cat >$tmp/stdin
- ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
- ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
- *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
- ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
- * ) ac_file_in=$ac_file.in ;;
- esac
-
- test x"$ac_file" != x- && { echo "$as_me:11340: creating $ac_file" >&5
-echo "$as_me: creating $ac_file" >&6;}
-
- # First look for the input files in the build tree, otherwise in the
- # src tree.
- ac_file_inputs=`IFS=:
- for f in $ac_file_in; do
- case $f in
- -) echo $tmp/stdin ;;
- [\\/$]*)
- # Absolute (can't be DOS-style, as IFS=:)
- test -f "$f" || { { echo "$as_me:11351: error: cannot find input file: $f" >&5
-echo "$as_me: error: cannot find input file: $f" >&2;}
- { (exit 1); exit 1; }; }
- echo $f;;
- *) # Relative
- if test -f "$f"; then
- # Build tree
- echo $f
- elif test -f "$srcdir/$f"; then
- # Source tree
- echo $srcdir/$f
- else
- # /dev/null tree
- { { echo "$as_me:11364: error: cannot find input file: $f" >&5
-echo "$as_me: error: cannot find input file: $f" >&2;}
- { (exit 1); exit 1; }; }
- fi;;
- esac
- done` || { (exit 1); exit 1; }
- # Remove the trailing spaces.
- sed 's/[ ]*$//' $ac_file_inputs >$tmp/in
-
-EOF
-
-# Transform confdefs.h into two sed scripts, `conftest.defines' and
-# `conftest.undefs', that substitutes the proper values into
-# config.h.in to produce config.h. The first handles `#define'
-# templates, and the second `#undef' templates.
-# And first: Protect against being on the right side of a sed subst in
-# config.status. Protect against being in an unquoted here document
-# in config.status.
-rm -f conftest.defines conftest.undefs
-# Using a here document instead of a string reduces the quoting nightmare.
-# Putting comments in sed scripts is not portable.
-#
-# `end' is used to avoid that the second main sed command (meant for
-# 0-ary CPP macros) applies to n-ary macro definitions.
-# See the Autoconf documentation for `clear'.
-cat >confdef2sed.sed <<\EOF
-s/[\\&,]/\\&/g
-s,[\\$`],\\&,g
-t clear
-: clear
-s,^[ ]*#[ ]*define[ ][ ]*\(\([^ (][^ (]*\)([^)]*)\)[ ]*\(.*\)$,${ac_dA}\2${ac_dB}\1${ac_dC}\3${ac_dD},gp
-t end
-s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp
-: end
-EOF
-# If some macros were called several times there might be several times
-# the same #defines, which is useless. Nevertheless, we may not want to
-# sort them, since we want the *last* AC-DEFINE to be honored.
-uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines
-sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs
-sed 's/ac_d/ac_i/g' conftest.defines >>conftest.undefs
-rm -f confdef2sed.sed
-
-# This sed command replaces #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.
-cat >>conftest.undefs <<\EOF
-s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */,
-EOF
-
-# Break up conftest.defines because some shells have a limit on the size
-# of here documents, and old seds have small limits too (100 cmds).
-echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS
-echo ' if egrep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS
-echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS
-echo ' :' >>$CONFIG_STATUS
-rm -f conftest.tail
-while grep . conftest.defines >/dev/null
-do
- # Write a limited-size here document to $tmp/defines.sed.
- echo ' cat >$tmp/defines.sed <<CEOF' >>$CONFIG_STATUS
- # Speed up: don't consider the non `#define' lines.
- echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS
- # Work around the forget-to-reset-the-flag bug.
- echo 't clr' >>$CONFIG_STATUS
- echo ': clr' >>$CONFIG_STATUS
- sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS
- echo 'CEOF
- sed -f $tmp/defines.sed $tmp/in >$tmp/out
- rm -f $tmp/in
- mv $tmp/out $tmp/in
-' >>$CONFIG_STATUS
- sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail
- rm -f conftest.defines
- mv conftest.tail conftest.defines
-done
-rm -f conftest.defines
-echo ' fi # egrep' >>$CONFIG_STATUS
-echo >>$CONFIG_STATUS
-
-# Break up conftest.undefs because some shells have a limit on the size
-# of here documents, and old seds have small limits too (100 cmds).
-echo ' # Handle all the #undef templates' >>$CONFIG_STATUS
-rm -f conftest.tail
-while grep . conftest.undefs >/dev/null
-do
- # Write a limited-size here document to $tmp/undefs.sed.
- echo ' cat >$tmp/undefs.sed <<CEOF' >>$CONFIG_STATUS
- # Speed up: don't consider the non `#undef'
- echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS
- # Work around the forget-to-reset-the-flag bug.
- echo 't clr' >>$CONFIG_STATUS
- echo ': clr' >>$CONFIG_STATUS
- sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS
- echo 'CEOF
- sed -f $tmp/undefs.sed $tmp/in >$tmp/out
- rm -f $tmp/in
- mv $tmp/out $tmp/in
-' >>$CONFIG_STATUS
- sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail
- rm -f conftest.undefs
- mv conftest.tail conftest.undefs
-done
-rm -f conftest.undefs
-
-cat >>$CONFIG_STATUS <<\EOF
- # 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 automatically by config.status. */
- if test x"$ac_file" = x-; then
- echo "/* Generated automatically by configure. */" >$tmp/config.h
- else
- echo "/* $ac_file. Generated automatically by configure. */" >$tmp/config.h
- fi
- cat $tmp/in >>$tmp/config.h
- rm -f $tmp/in
- if test x"$ac_file" != x-; then
- if cmp -s $ac_file $tmp/config.h 2>/dev/null; then
- { echo "$as_me:11482: $ac_file is unchanged" >&5
-echo "$as_me: $ac_file is unchanged" >&6;}
- else
- ac_dir=`$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$ac_file" : 'X\(//\)[^/]' \| \
- X"$ac_file" : 'X\(//\)$' \| \
- X"$ac_file" : 'X\(/\)' \| \
- . : '\(.\)' 2>/dev/null ||
-echo X"$ac_file" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
- /^X\(\/\/\)[^/].*/{ s//\1/; q; }
- /^X\(\/\/\)$/{ s//\1/; q; }
- /^X\(\/\).*/{ s//\1/; q; }
- s/.*/./; q'`
- if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
- { case "$ac_dir" in
- [\\/]* | ?:[\\/]* ) as_incr_dir=;;
- *) as_incr_dir=.;;
-esac
-as_dummy="$ac_dir"
-for as_mkdir_dir in `IFS='/\\'; set X $as_dummy; shift; echo "$@"`; do
- case $as_mkdir_dir in
- # Skip DOS drivespec
- ?:) as_incr_dir=$as_mkdir_dir ;;
- *)
- as_incr_dir=$as_incr_dir/$as_mkdir_dir
- test -d "$as_incr_dir" || mkdir "$as_incr_dir"
- ;;
- esac
-done; }
-
- fi
- rm -f $ac_file
- mv $tmp/config.h $ac_file
- fi
- else
- cat $tmp/config.h
- rm -f $tmp/config.h
- fi
-done
-EOF
-
-cat >>$CONFIG_STATUS <<\EOF
-
-{ (exit 0); exit 0; }
-EOF
-chmod +x $CONFIG_STATUS
-ac_clean_files=$ac_clean_files_save
-
-# 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=:
- exec 5>/dev/null
- $SHELL $CONFIG_STATUS || 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 || { (exit 1); exit 1; }
-fi
-
diff --git a/nx-X11/programs/xterm/configure.in b/nx-X11/programs/xterm/configure.in
deleted file mode 100644
index 6ec395318..000000000
--- a/nx-X11/programs/xterm/configure.in
+++ /dev/null
@@ -1,779 +0,0 @@
-dnl $XTermId: configure.in,v 1.197 2005/11/03 13:17:27 tom Exp $
-dnl
-dnl $XFree86: xc/programs/xterm/configure.in,v 3.72 2005/11/03 13:17:27 dickey Exp $
-dnl
-dnl ---------------------------------------------------------------------------
-dnl
-dnl Copyright 1997-2004,2005 by Thomas E. Dickey
-dnl
-dnl All Rights Reserved
-dnl
-dnl Permission to use, copy, modify, and distribute this software and its
-dnl documentation for any purpose and without fee is hereby granted,
-dnl provided that the above copyright notice appear in all copies and that
-dnl both that copyright notice and this permission notice appear in
-dnl supporting documentation, and that the name of the above listed
-dnl copyright holder(s) not be used in advertising or publicity pertaining
-dnl to distribution of the software without specific, written prior
-dnl permission.
-dnl
-dnl THE ABOVE LISTED COPYRIGHT HOLDER(S) DISCLAIM ALL WARRANTIES WITH REGARD
-dnl TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
-dnl AND FITNESS, IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE
-dnl LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-dnl WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
-dnl ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
-dnl OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-dnl
-dnl ---------------------------------------------------------------------------
-dnl Process this file with autoconf to produce a configure script.
-dnl
-AC_PREREQ(2.13.20020210)
-AC_INIT(charproc.c)
-AC_CONFIG_HEADER(xtermcfg.h:xtermcfg.hin)
-CF_CHECK_CACHE
-
-### checks for alternative programs
-
-dnl Only add to this case statement when a system has a compiler that is not
-dnl detected by AC_PROG_CC.
-case "$host_os" in
-openedition) : ${CFLAGS="-O2 -Wc,dll -Wl,EDIT=NO"}
- : ${CPPFLAGS="-D_ALL_SOURCE"}
- : ${LIBS="/usr/lib/Xaw.x /usr/lib/SM.x /usr/lib/ICE.x /usr/lib/X11.x"}
- : ${CC=c89};;
-darwin*)
- : ${LDFLAGS}="${LDFLAGS} -Wl,-bind_at_load";;
-esac
-
-AC_PROG_CC
-AC_PROG_CPP
-AC_GCC_TRADITIONAL
-AC_PROG_AWK
-AC_PROG_INSTALL
-AC_ARG_PROGRAM
-AC_CHECK_PROGS(LINT, tdlint lint alint)
-
-### checks for UNIX variants that set C preprocessor variables
-AC_AIX
-AC_ISC_POSIX
-
-### checks for compiler characteristics
-CF_ANSI_CC_CHECK
-AC_CONST
-CF_PROG_EXT
-CF_XOPEN_SOURCE
-
-### checks for header files
-AC_CHECK_HEADERS( \
-ncurses/term.h \
-stdlib.h \
-termios.h \
-unistd.h \
-wchar.h \
-)
-AC_HEADER_TIME
-AM_LANGINFO_CODESET
-
-### checks for typedefs
-CF_SIG_ATOMIC_T
-CF_SIZE_T
-AC_CHECK_TYPE(time_t, long)
-AC_TYPE_MODE_T
-AC_TYPE_PID_T
-AC_TYPE_UID_T
-
-### checks for library functions
-AC_CHECK_FUNCS( \
- bcopy \
- gethostname \
- getlogin \
- memmove \
- putenv \
- sched_yield \
- strerror \
- strftime \
- tcgetattr \
- waitpid \
- wcswidth \
- wcwidth )
-CF_FUNC_MEMMOVE
-CF_UTMP
-
-CF_HELP_MESSAGE(Compile/Install Options:)
-CF_FUNC_TGETENT
-
-AC_MSG_CHECKING(for directory to install resource files)
-CF_WITH_PATH(app-defaults,
- [ --with-app-defaults=DIR directory in which to install resource files],
- [appsdir],[EPREFIX/lib/X11/app-defaults],
- ['\$(exec_prefix)/lib/X11/app-defaults'])
-AC_MSG_RESULT($appsdir)
-AC_SUBST(appsdir)
-
-# inherit SINSTALL_OPTS from environment to allow packager to customize it.
-
-AC_MSG_CHECKING(for install-permissions reference)
-AC_ARG_WITH(reference,
- [ --with-reference=XXX program to use as permissions-reference],
- [with_reference=$withval],
- [with_reference=xterm])
-AC_MSG_RESULT($with_reference)
-
-CF_PATH_PROG(XTERM_PATH,$with_reference)
-
-AC_MSG_CHECKING(if you want to disable setuid)
-CF_ARG_DISABLE(setuid,
- [ --disable-setuid disable setuid in xterm, do not install setuid],
- [disable_setuid=yes],
- [disable_setuid=no],
- no)
-AC_MSG_RESULT($disable_setuid)
-
-AC_MSG_CHECKING(if you want to run xterm setuid to a given user)
-AC_ARG_WITH(setuid,
- [ --with-setuid=XXX use the given setuid user],
- [use_given_setuid=$withval],
- [use_given_setuid=no])
-AC_MSG_RESULT($use_given_setuid)
-
-if test "$use_given_setuid" != no ; then
- if test "$use_given_setuid" = yes ; then
- cf_cv_given_setuid=root
- else
- cf_cv_given_setuid=$use_given_setuid
- fi
- SINSTALL_OPTS="$SINSTALL_OPTS u+s -u $cf_cv_given_setuid"
-fi
-
-AC_MSG_CHECKING(if you want to run xterm setgid to match utmp/utmpx file)
-AC_ARG_WITH(utmp-setgid,
- [ --with-utmp-setgid=XXX use setgid to match utmp/utmpx file],
- [use_utmp_setgid=$withval],
- [use_utmp_setgid=no])
-AC_MSG_RESULT($use_utmp_setgid)
-
-if test "$use_utmp_setgid" != no ; then
- if test "$use_utmp_setgid" = yes ; then
- CF_UTMP_GROUP
- else
- cf_cv_utmp_group=$use_utmp_setgid
- fi
- AC_DEFINE(USE_UTMP_SETGID)
- SINSTALL_OPTS="$SINSTALL_OPTS g+s -g $cf_cv_utmp_group"
-fi
-
-AC_SUBST(SINSTALL_OPTS)
-
-AC_MSG_CHECKING(if you want to link with utempter)
-AC_ARG_WITH(utempter,
- [ --with-utempter use utempter library for access to utmp],
- [use_utempter=$withval],
- [use_utempter=no])
-AC_MSG_RESULT($use_utempter)
-
-if test "$use_utempter" = yes ; then
- CF_UTEMPTER
- test "$cf_cv_have_utempter" = yes && disable_setuid=yes
-fi
-
-### checks for external data
-CF_ERRNO
-CF_TTY_GROUP
-
-### checks for system services and user specified options
-
-CF_POSIX_WAIT
-CF_SYSV
-CF_SVR4
-CF_X_TOOLKIT
-
-AC_CHECK_HEADERS( \
- X11/DECkeysym.h \
- X11/Sunkeysym.h \
- X11/Xpoll.h \
- )
-
-CF_X_ATHENA
-CF_TYPE_FD_SET
-CF_TERMIO_C_ISPEED
-
-LIBS="$LIBS $X_EXTRA_LIBS"
-
-# Check for openpty() in -lutil if the UNIX98-style pty functions are not
-# available. E.g. for GNU libc 2.0.
-case $host_os in #(vi
-freebsd*|netbsd*) # 2004/8/15 - revisit this if/when grantpt is known to work.
- AC_CHECK_LIB(util,openpty)
- ;;
-*)
- AC_CHECK_FUNCS(grantpt, [], AC_CHECK_LIB(util,openpty))
- ;;
-esac
-
-CF_XKB_BELL_EXT
-AC_CHECK_FUNCS(Xutf8LookupString, [],[
- EXTRAHDRS="$EXTRAHDRS xutf8.h"
- EXTRASRCS="$EXTRASRCS xutf8.c"
- EXTRAOBJS="$EXTRAOBJS xutf8.o"
-])
-
-CF_WITH_IMAKE_CFLAGS($(MAIN_DEFINES) $(VENDORMANDEFS))
-
-CF_HELP_MESSAGE(Terminal Configuration:)
-
-AC_MSG_CHECKING(for default terminal-id)
-AC_ARG_WITH(terminal-id,
- [ --with-terminal-id=V set default decTerminalID (default: vt100)],
- [default_termid=$withval],
- [default_termid=vt100])
-AC_MSG_RESULT($default_termid)
-case $default_termid in
-vt*) default_termid=`echo $default_termid | sed -e 's/^..//'`
- ;;
-esac
-AC_DEFINE_UNQUOTED(DFT_DECID,"$default_termid")
-
-AC_MSG_CHECKING(for default terminal-type)
-AC_ARG_WITH(terminal-type,
- [ --with-terminal-type=T set default $TERM (default: xterm)],
- [default_TERM=$withval],
- [default_TERM=xterm])
-AC_MSG_RESULT($default_TERM)
-AC_DEFINE_UNQUOTED(DFT_TERMTYPE,"$default_TERM")
-
-AC_MSG_CHECKING(for private terminfo-directory)
-AC_ARG_WITH(own-terminfo,
- [ --with-own-terminfo=P set default $TERMINFO (default: from environment)],
- [TERMINFO_DIR=$withval],
- [TERMINFO_DIR=${TERMINFO-none}])
-AC_MSG_RESULT($TERMINFO_DIR)
-if test "$TERMINFO_DIR" = yes ; then
- AC_MSG_WARN(no value given)
-elif test "$TERMINFO_DIR" != none ; then
- if test -d $TERMINFO_DIR ; then
- AC_DEFINE_UNQUOTED(OWN_TERMINFO_DIR,"$TERMINFO_DIR")
- else
- AC_MSG_WARN(not a directory)
- fi
-elif test "$prefix" != NONE ; then
- TERMINFO_DIR='${prefix}/lib/terminfo'
-elif test -d /usr/lib/terminfo ; then
- TERMINFO_DIR=/usr/lib/terminfo
-else
- TERMINFO_DIR=
-fi
-SET_TERMINFO=
-if test -n "$TERMINFO_DIR" ; then
- TERMINFO_DIR='$(DESTDIR)'$TERMINFO_DIR
- SET_TERMINFO='TERMINFO=$(TERMINFO_DIR)'
-fi
-AC_SUBST(TERMINFO_DIR)
-AC_SUBST(SET_TERMINFO)
-
-###############################################################################
-CF_HELP_MESSAGE(Optional Features:)
-
-AC_MSG_CHECKING(if you want active-icons)
-CF_ARG_DISABLE(active-icon,
- [ --disable-active-icon disable X11R6.3 active-icon feature],
- [enable_active_icon=no],
- [enable_active_icon=yes])
-AC_MSG_RESULT($enable_active_icon)
-if test "$enable_active_icon" = no ; then
- AC_DEFINE(NO_ACTIVE_ICON)
-fi
-
-AC_MSG_CHECKING(if you want ANSI color)
-CF_ARG_DISABLE(ansi-color,
- [ --disable-ansi-color disable ANSI color],
- [enable_ansi_color=no],
- [enable_ansi_color=yes])
-AC_MSG_RESULT($enable_ansi_color)
-test "$enable_ansi_color" = no && AC_DEFINE(OPT_ISO_COLORS,0)
-
-if test "$enable_ansi_color" = yes ; then
-
- AC_MSG_CHECKING(if you want 16 colors like aixterm)
- CF_ARG_DISABLE(16-color,
- [ --disable-16-color disable 16-color support],
- [enable_16_color=no],
- [enable_16_color=yes])
- AC_MSG_RESULT($enable_16_color)
- test "$enable_16_color" = no && AC_DEFINE(OPT_AIX_COLORS,0)
-
- AC_MSG_CHECKING(if you want 256 colors)
- CF_ARG_ENABLE(256-color,
- [ --enable-256-color enable 256-color support],
- [enable_256_color=yes],
- [enable_256_color=no])
- AC_MSG_RESULT($enable_256_color)
- if test "$enable_256_color" = yes ; then
- CHARPROC_DEPS="$CHARPROC_DEPS 256colres.h"
- EXTRAHDRS="$EXTRAHDRS 256colres.h"
- AC_DEFINE(OPT_256_COLORS,1)
- else
- AC_MSG_CHECKING(if you want 88 colors)
- CF_ARG_ENABLE(88-color,
- [ --enable-88-color enable 88-color support],
- [enable_88_color=yes],
- [enable_88_color=no])
- AC_MSG_RESULT($enable_88_color)
- if test "$enable_88_color" = yes ; then
- CHARPROC_DEPS="$CHARPROC_DEPS 88colres.h"
- EXTRAHDRS="$EXTRAHDRS 88colres.h"
- AC_DEFINE(OPT_88_COLORS,1)
- fi
- fi
-
-fi
-
-AC_MSG_CHECKING(if you want blinking cursor)
-CF_ARG_DISABLE(blink-cursor,
- [ --disable-blink-cursor disable support for blinking cursor],
- [enable_blink_curs=no],
- [enable_blink_curs=yes])
-AC_MSG_RESULT($enable_blink_curs)
-test "$enable_blink_curs" = no && AC_DEFINE(OPT_BLINK_CURS,0)
-
-AC_MSG_CHECKING(if you want to ignore Linux's broken palette-strings)
-
-case $host_os in #(vi
-linux*)
- assume_broken_osc=yes ;; #(vi
-*)
- assume_broken_osc=no ;;
-esac
-
-CF_ARG_OPTION(broken-osc,
- [ --enable-broken-osc allow broken Linux OSC-strings],
- [enable_broken_osc=$enableval],
- [enable_broken_osc=$enableval],
- [$assume_broken_osc])
-AC_MSG_RESULT($enable_broken_osc)
-if test "$enable_broken_osc" = yes ; then
- AC_DEFINE(OPT_BROKEN_OSC,1)
-else
- AC_DEFINE(OPT_BROKEN_OSC,0)
-fi
-
-AC_MSG_CHECKING(if you want to allow broken string-terminators)
-CF_ARG_ENABLE(broken-st,
- [ --enable-broken-st allow broken string-terminators],
- [enable_broken_st=yes],
- [enable_broken_st=no])
-AC_MSG_RESULT($enable_broken_st)
-test "$enable_broken_st" = no && AC_DEFINE(OPT_BROKEN_ST,0)
-
-AC_MSG_CHECKING(if you want printable 128-159)
-CF_ARG_DISABLE(c1-print,
- [ --disable-c1-print disallow -k8 option for printable 128-159],
- [enable_c1_print=no],
- [enable_c1_print=yes])
-AC_MSG_RESULT($enable_c1_print)
-test "$enable_c1_print" = no && AC_DEFINE(OPT_C1_PRINT,0)
-
-if test "$enable_ansi_color" = yes ; then
-
- AC_MSG_CHECKING(if you want bold colors mapped like IBM PC)
- CF_ARG_DISABLE(bold-color,
- [ --disable-bold-color disable PC-style mapping of bold colors],
- [enable_pc_color=no],
- [enable_pc_color=yes])
- AC_MSG_RESULT($enable_pc_color)
- test "$enable_pc_color" = no && AC_DEFINE(OPT_PC_COLORS,0)
-
- AC_MSG_CHECKING(if you want separate color-classes)
- CF_ARG_DISABLE(color-class,
- [ --disable-color-class disable separate color class resources],
- [enable_color_class=no],
- [enable_color_class=yes])
- AC_MSG_RESULT($enable_color_class)
- test "$enable_color_class" = no && AC_DEFINE(OPT_COLOR_CLASS,FALSE)
-
- AC_MSG_CHECKING(if you want color-mode enabled by default)
- CF_ARG_DISABLE(color-mode,
- [ --disable-color-mode disable default colorMode resource],
- [default_colormode=no],
- [default_colormode=yes])
- AC_MSG_RESULT($default_colormode)
- test "$default_colormode" = no && AC_DEFINE(DFT_COLORMODE,FALSE)
-
-fi
-
-AC_MSG_CHECKING(if you want support for color highlighting)
-CF_ARG_DISABLE(highlighting,
- [ --disable-highlighting disable support for color highlighting],
- [default_highlight=no],
- [default_highlight=yes])
-AC_MSG_RESULT($default_highlight)
-test "$default_highlight" = no && AC_DEFINE(OPT_HIGHLIGHT_COLOR,0)
-
-AC_MSG_CHECKING(if you want support for doublesize characters)
-CF_ARG_DISABLE(doublechars,
- [ --disable-doublechars disable support for double-size chars],
- [enable_doublechars=no],
- [enable_doublechars=yes])
-AC_MSG_RESULT($enable_doublechars)
-test "$enable_doublechars" = no && AC_DEFINE(OPT_DEC_CHRSET,0)
-
-AC_MSG_CHECKING(if you want fallback-support for box characters)
-CF_ARG_DISABLE(boxchars,
- [ --disable-boxchars disable fallback-support for box chars],
- [enable_boxchars=no],
- [enable_boxchars=yes])
-AC_MSG_RESULT($enable_boxchars)
-test "$enable_boxchars" = no && AC_DEFINE(OPT_BOX_CHARS,0)
-
-AC_MSG_CHECKING(if you want to use FreeType library)
-CF_ARG_DISABLE(freetype,
- [ --disable-freetype disable freetype library-support],
- [enable_freetype=no],
- [enable_freetype=yes])
-AC_MSG_RESULT($enable_freetype)
-if test "$enable_freetype" = yes ; then
- CF_X_FREETYPE
-else
- CPPFLAGS=`echo "$CPPFLAGS" | sed -e s/-DXRENDERFONT//`
-fi
-
-AC_MSG_CHECKING(if you want support for HP-style function keys)
-CF_ARG_ENABLE(hp-fkeys,
- [ --enable-hp-fkeys enable support for HP-style function keys],
- [enable_hp_fkeys=yes],
- [enable_hp_fkeys=no])
-AC_MSG_RESULT($enable_hp_fkeys)
-if test "$enable_hp_fkeys" = yes ; then
- AC_DEFINE(OPT_HP_FUNC_KEYS,1)
-fi
-
-AC_MSG_CHECKING(if you want support for SCO-style function keys)
-CF_ARG_ENABLE(sco-fkeys,
- [ --enable-sco-fkeys enable support for SCO-style function keys],
- [enable_sco_fkeys=yes],
- [enable_sco_fkeys=no])
-AC_MSG_RESULT($enable_sco_fkeys)
-if test "$enable_sco_fkeys" = yes ; then
- AC_DEFINE(OPT_SCO_FUNC_KEYS,1)
-fi
-
-AC_MSG_CHECKING(if you want support for internationalization)
-CF_ARG_DISABLE(i18n,
- [ --disable-i18n disable internationalization],
- [enable_i18n=no],
- [enable_i18n=yes])
-AC_MSG_RESULT($enable_i18n)
-if test "$enable_i18n" = no ; then
- AC_DEFINE(OPT_I18N_SUPPORT,0)
-fi
-
-AC_MSG_CHECKING(if you want support for initial-erase setup)
-CF_ARG_DISABLE(initial-erase,
- [ --disable-initial-erase disable setup for stty erase],
- [enable_ie=no],
- [enable_ie=yes])
-AC_MSG_RESULT($enable_ie)
-if test "$enable_ie" = no ; then
- AC_DEFINE(OPT_INITIAL_ERASE,0)
-fi
-
-AC_MSG_CHECKING(if you want support for input-method)
-CF_ARG_DISABLE(input-method,
- [ --disable-input-method disable input-method],
- [enable_ximp=no],
- [enable_ximp=yes])
-AC_MSG_RESULT($enable_ximp)
-CF_INPUT_METHOD
-test "$cf_cv_input_method" = no && enable_ximp=no
-if test "$enable_ximp" = no ; then
- AC_DEFINE(OPT_INPUT_METHOD,0)
-fi
-
-AC_MSG_CHECKING(if you want support for load-vt-fonts)
-CF_ARG_ENABLE(load-vt-fonts,
- [ --enable-load-vt-fonts enable load-vt-fonts() action],
- [enable_load_vt_fonts=yes],
- [enable_load_vt_fonts=no])
-AC_MSG_RESULT($enable_load_vt_fonts)
-if test "$enable_load_vt_fonts" = yes ; then
- AC_DEFINE(OPT_LOAD_VTFONTS,1)
-fi
-
-AC_MSG_CHECKING(if you want support for logging)
-CF_ARG_ENABLE(logging,
- [ --enable-logging enable logging],
- [enable_logging=yes],
- [enable_logging=no])
-AC_MSG_RESULT($enable_logging)
-if test "$enable_logging" = yes ; then
- AC_DEFINE(ALLOWLOGGING)
- AC_MSG_CHECKING(if you want to allow logging via a pipe)
- CF_ARG_ENABLE(logfile-exec,
- [ --enable-logfile-exec enable exec'd logfile filter],
- [enable_log_exec=yes],
- [enable_log_exec=no])
- AC_MSG_RESULT($enable_log_exec)
- if test "$enable_log_exec" = yes ; then
- AC_DEFINE(ALLOWLOGFILEEXEC)
- fi
-fi
-
-AC_MSG_CHECKING(if you want support for iconify/maximize translations)
-CF_ARG_DISABLE(maximize,
- [ --disable-maximize disable actions for iconify/deiconify/maximize/restore],
- [enable_maximize=no],
- [enable_maximize=yes])
-AC_MSG_RESULT($enable_maximize)
-test "$enable_maximize" = no && AC_DEFINE(OPT_MAXIMIZE,0)
-
-AC_MSG_CHECKING(if you want NumLock to override keyboard tables)
-CF_ARG_DISABLE(num-lock,
- [ --disable-num-lock disable NumLock keypad support],
- [enable_numlock=no],
- [enable_numlock=yes])
-AC_MSG_RESULT($enable_numlock)
-test "$enable_numlock" = no && AC_DEFINE(OPT_NUM_LOCK,0)
-
-AC_MSG_CHECKING(if you want support for get/set of base64 selection data)
-
-CF_ARG_ENABLE(paste64,
- [ --enable-paste64 enable get/set base64 selection data],
- [enable_paste64=yes],
- [enable_paste64=no])
-AC_MSG_RESULT($enable_paste64)
-if test "$enable_paste64" = yes ; then
- AC_DEFINE(OPT_PASTE64,1)
-else
- AC_DEFINE(OPT_PASTE64,0)
-fi
-
-AC_MSG_CHECKING(if you want support for pty-handshaking)
-
-CF_ARG_DISABLE(pty-handshake,
- [ --disable-pty-handshake disable pty-handshake support],
- [enable_pty_handshake=no],
- [enable_pty_handshake=yes])
-AC_MSG_RESULT($enable_pty_handshake)
-if test "$enable_pty_handshake" = yes ; then
- AC_DEFINE(OPT_PTY_HANDSHAKE,1)
-else
- AC_DEFINE(OPT_PTY_HANDSHAKE,0)
-fi
-
-AC_MSG_CHECKING(if you want support for mouse in readline applications)
-CF_ARG_ENABLE(readline-mouse,
- [ --enable-readline-mouse enable support for mouse in readline applications],
- [enable_readline_mouse=yes],
- [enable_readline_mouse=no])
-AC_MSG_RESULT($enable_readline_mouse)
-if test "$enable_readline_mouse" = yes ; then
- AC_DEFINE(OPT_READLINE,1)
-fi
-
-AC_MSG_CHECKING(if you want support for right-scrollbar)
-CF_ARG_DISABLE(rightbar,
- [ --disable-rightbar disable right-scrollbar support],
- [enable_rightbar=no],
- [enable_rightbar=yes])
-AC_MSG_RESULT($enable_rightbar)
-if test "$enable_rightbar" = yes ; then
- AC_DEFINE(SCROLLBAR_RIGHT)
-fi
-
-AC_MSG_CHECKING(if you want check for redundant name-change)
-CF_ARG_DISABLE(samename,
- [ --disable-samename disable check for redundant name-change],
- [enable_samename=no],
- [enable_samename=yes])
-AC_MSG_RESULT($enable_samename)
-test "$enable_samename" = no && AC_DEFINE(OPT_SAME_NAME,0)
-
-AC_MSG_CHECKING(if you want support for session management)
-CF_ARG_DISABLE(session-mgt,
- [ --disable-session-mgt disable support for session management],
- [enable_session_mgt=no],
- [enable_session_mgt=yes])
-AC_MSG_RESULT($enable_session_mgt)
-test "$enable_session_mgt" = no && AC_DEFINE(OPT_SESSION_MGT,0)
-
-AC_MSG_CHECKING(if you want to use termcap-query/report)
-CF_ARG_ENABLE(tcap-query,
- [ --enable-tcap-query compile-in termcap-query support],
- [enable_tcap_query=yes],
- [enable_tcap_query=no])
-AC_MSG_RESULT($enable_tcap_query)
-test "$enable_tcap_query" = yes && AC_DEFINE(OPT_TCAP_QUERY,1)
-
-AC_MSG_CHECKING(if you want support for tek4014)
-CF_ARG_DISABLE(tek4014,
- [ --disable-tek4014 disable tek4014 emulation],
- [enable_tek4014=no],
- [enable_tek4014=yes])
-AC_MSG_RESULT($enable_tek4014)
-if test "$enable_tek4014" = no ; then
- AC_DEFINE(OPT_TEK4014,0)
-else
- EXTRAHDRS="$EXTRAHDRS Tekparse.h"
- EXTRASRCS="$EXTRASRCS TekPrsTbl.c Tekproc.c"
- EXTRAOBJS="$EXTRAOBJS TekPrsTbl.o Tekproc.o"
-fi
-
-AC_MSG_CHECKING(if you want pulldown menus with a toolbar)
-CF_ARG_ENABLE(toolbar,
- [ --enable-toolbar compile-in toolbar for pulldown menus],
- [enable_toolbar=yes],
- [enable_toolbar=no])
-AC_MSG_RESULT($enable_toolbar)
-if test "$enable_toolbar" = yes ; then
- AC_DEFINE(OPT_TOOLBAR,1)
-fi
-
-AC_MSG_CHECKING(if you want VT52 emulation)
-CF_ARG_DISABLE(vt52,
- [ --disable-vt52 disable VT52 emulation],
- [enable_vt52=no],
- [enable_vt52=yes])
-AC_MSG_RESULT($enable_vt52)
-test "$enable_vt52" = no && AC_DEFINE(OPT_VT52_MODE,0)
-
-AC_MSG_CHECKING(if you want to use mini-luit/Latin9 built-in support)
-CF_ARG_ENABLE(mini-luit,
- [ --enable-mini-luit enable mini-luit (built-in Latin9 support)],
- [enable_mini_luit=yes],
- [enable_mini_luit=no])
-AC_MSG_RESULT($enable_mini_luit)
-if test "$enable_mini_luit" = yes ; then
- AC_DEFINE(OPT_MINI_LUIT,1)
-fi
-
-AC_MSG_CHECKING(if you want to use luit)
-CF_ARG_ENABLE(luit,
- [ --enable-luit enable luit filter (Unicode translation)],
- [enable_luit=yes],
- [enable_luit=$enable_mini_luit])
-AC_MSG_RESULT($enable_luit)
-if test "$enable_luit" = yes ; then
- AC_DEFINE(OPT_LUIT_PROG,1)
-fi
-
-AC_MSG_CHECKING(if you want wide-character support)
-CF_ARG_OPTION(wide-chars,
- [ --enable-wide-chars enable wide-character support],
- [enable_wchar=yes],
- [enable_wchar=$enable_luit],
- [$enable_luit])
-AC_MSG_RESULT($enable_wchar)
-if test "$enable_wchar" = yes ; then
- AC_DEFINE(OPT_WIDE_CHARS,1)
- EXTRAHDRS="$EXTRAHDRS charclass.h precompose.h wcwidth.h"
- EXTRASRCS="$EXTRASRCS charclass.c precompose.c wcwidth.c"
- EXTRAOBJS="$EXTRAOBJS charclass.o precompose.o wcwidth.o"
-fi
-
-AC_MSG_CHECKING(if you want dynamic-abbreviation support)
-CF_ARG_ENABLE(dabbrev,
- [ --enable-dabbrev enable dynamic-abbreviation support],
- [enable_dabbrev=yes],
- [enable_dabbrev=no])
-AC_MSG_RESULT($enable_dabbrev)
-if test "$enable_dabbrev" = yes ; then
- AC_DEFINE(OPT_DABBREV,1)
-fi
-
-AC_MSG_CHECKING(if you want DECterm Locator support)
-CF_ARG_ENABLE(dec-locator,
- [ --enable-dec-locator enable DECterm Locator support],
- [enable_dec_locator=yes],
- [enable_dec_locator=no])
-AC_MSG_RESULT($enable_dec_locator)
-if test "$enable_dec_locator" = yes ; then
- AC_DEFINE(OPT_DEC_LOCATOR,1)
-fi
-
-AC_MSG_CHECKING(if you want -ziconbeep option)
-CF_ARG_DISABLE(ziconbeep,
- [ --disable-ziconbeep disable -ziconbeep option],
- [enable_ziconbeep=no],
- [enable_ziconbeep=yes])
-AC_MSG_RESULT($enable_ziconbeep)
-test "$enable_ziconbeep" = no && AC_DEFINE(OPT_ZICONBEEP,0)
-
-###############################################################################
-CF_HELP_MESSAGE(Testing/development Options:)
-
-AC_MSG_CHECKING(if you want debugging traces)
-CF_ARG_ENABLE(trace,
- [ --enable-trace test: set to enable debugging traces],
- [enable_trace=yes],
- [enable_trace=no])
-AC_MSG_RESULT($enable_trace)
-if test "$enable_trace" = yes ; then
- AC_DEFINE(OPT_TRACE)
- EXTRASRCS="$EXTRASRCS trace.c"
- EXTRAOBJS="$EXTRAOBJS trace.o"
-fi
-
-CF_DISABLE_ECHO
-
-AC_MSG_CHECKING(if you want magic cookie emulation)
-CF_ARG_ENABLE(xmc-glitch,
- [ --enable-xmc-glitch test: enable xmc magic-cookie emulation],
- [enable_xmc=yes],
- [enable_xmc=no])
-AC_MSG_RESULT($enable_xmc)
-if test "$enable_xmc" = yes ; then
- AC_DEFINE(OPT_XMC_GLITCH,1)
- EXTRASRCS="$EXTRASRCS testxmc.c"
- EXTRAOBJS="$EXTRAOBJS testxmc.o"
-fi
-
-if test -n "$GCC" ; then
-AC_MSG_CHECKING(if you want to turn on gcc warnings)
-CF_ARG_ENABLE(warnings,
- [ --enable-warnings test: turn on GCC compiler warnings],
- [with_warnings=yes],
- [with_warnings=no])
-AC_MSG_RESULT($with_warnings)
-if test "$with_warnings" = yes
-then
- CF_GCC_ATTRIBUTES
- CF_GCC_WARNINGS
-fi
-fi
-
-AC_SUBST(EXTRA_CFLAGS)
-AC_SUBST(CHARPROC_DEPS)
-AC_SUBST(EXTRAHDRS)
-AC_SUBST(EXTRASRCS)
-AC_SUBST(EXTRAOBJS)
-
-if test $disable_setuid = yes ; then
- MAY_SETUID="#"
- NOT_SETUID=
- AC_DEFINE(DISABLE_SETUID)
-else
- MAY_SETUID=
- NOT_SETUID="#"
-fi
-
-AC_SUBST(MAY_SETUID)
-AC_SUBST(NOT_SETUID)
-
-### remove from CPPFLAGS the optional features we define in xtermcfg.h
-### or other conflicting symbols that may be defined via imake:
-for cf_def in \
- __STDC__ \
- ALLOWLOGGING \
- ALLOWLOGFILEEXEC \
- OPT_LUIT_PROG \
- OPT_WIDE_CHARS \
- SCROLLBAR_RIGHT \
- USE_TTY_GROUP \
- USE_UTEMPTER \
- XRENDERFONT
-do
- CPPFLAGS=`echo "$CPPFLAGS" | sed -e s/-D$cf_def//`
-done
-
-### output Makefile and xtermcfg.h
-AC_OUTPUT(Makefile)
diff --git a/nx-X11/programs/xterm/ctlseqs.ms b/nx-X11/programs/xterm/ctlseqs.ms
deleted file mode 100644
index bbf8960ee..000000000
--- a/nx-X11/programs/xterm/ctlseqs.ms
+++ /dev/null
@@ -1,1876 +0,0 @@
-.\"#! troff -ms $1 -*- Nroff -*-
-.\" "Xterm Control Sequences" document
-.\" $XTermId: ctlseqs.ms,v 1.158 2005/09/18 23:48:10 tom Exp $
-.\"
-.\"
-.\" $Xorg: ctlseqs.ms,v 1.3 2000/08/17 19:42:51 cpqbld Exp $
-.\"
-.\"
-.\"
-.\" $XFree86: xc/doc/specs/xterm/ctlseqs.ms,v 3.57 2005/09/18 23:48:10 dickey Exp $
-.\"
-.\"
-.\" Copyright 1996-2004,2005 by Thomas E. Dickey
-.\"
-.\" All Rights Reserved
-.\"
-.\" Permission is hereby granted, free of charge, to any person obtaining a
-.\" copy of this software and associated documentation files (the
-.\" "Software"), to deal in the Software without restriction, including
-.\" without limitation the rights to use, copy, modify, merge, publish,
-.\" distribute, sublicense, and/or sell copies of the Software, and to
-.\" permit persons to whom the Software is furnished to do so, subject to
-.\" the following conditions:
-.\"
-.\" The above copyright notice and this permission notice shall be included
-.\" in all copies or substantial portions of the Software.
-.\"
-.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-.\" IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY
-.\" CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-.\" TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-.\" SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-.\"
-.\" Except as contained in this notice, the name(s) of the above copyright
-.\" holders shall not be used in advertising or otherwise to promote the
-.\" sale, use or other dealings in this Software without prior written
-.\" authorization.
-.\"
-.\"
-.\" Copyright 1991, 1994 X Consortium
-.\"
-.\" Permission is hereby granted, free of charge, to any person obtaining
-.\" a copy of this software and associated documentation files (the
-.\" "Software"), to deal in the Software without restriction, including
-.\" without limitation the rights to use, copy, modify, merge, publish,
-.\" distribute, sublicense, and/or sell copies of the Software, and to
-.\" permit persons to whom the Software is furnished to do so, subject to
-.\" the following conditions:
-.\"
-.\" The above copyright notice and this permission notice shall be
-.\" included in all copies or substantial portions of the Software.
-.\"
-.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-.\" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-.\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR
-.\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-.\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-.\" OTHER DEALINGS IN THE SOFTWARE.
-.\"
-.\" Except as contained in this notice, the name of the X Consortium shall
-.\" not be used in advertising or otherwise to promote the sale, use or
-.\" other dealings in this Software without prior written authorization
-.\" from the X Consortium.
-.\"
-.\" X Window System is a trademark of X Consortium, Inc.
-.\"
-.\" Originally written by Edward Moy, University of California,
-.\" Berkeley, edmoy@violet.berkeley.edu, for the X.V10R4 xterm.
-.\" The X Consortium staff has since updated it for X11.
-.\" Updated by Thomas E. Dickey for XFree86 3.2 - XFree86 4.3
-.\"
-.\" Run this file through troff and use the -ms macro package.
-.\"
-.if n .pl 9999v \" no page breaks in nroff
-.ND
-.de St
-.sp
-.nr PD 0
-.nr PI 1.5i
-.nr VS 16
-..
-.de Ed
-.nr PD .3v
-.nr VS 12
-..
-.ds CH \" as nothing
-.ds LH Xterm Control Sequences
-.nr s 6*\n(PS/10
-.ds L \s\nsBEL\s0
-.ds E \s\nsESC\s0
-.ds T \s\nsTAB\s0
-.ds X \s\nsETX\s0
-.ds N \s\nsENQ\s0
-.ds e \s\nsETB\s0
-.ds C \s\nsCAN\s0
-.ds S \s\nsSUB\s0
-.\" space between chars
-.ie t .ds s \|
-.el .ds s " \"
-.nr [W \w'\*L'u
-.nr w \w'\*E'u
-.if \nw>\n([W .nr [W \nw
-.nr w \w'\*T'u
-.if \nw>\n([W .nr [W \nw
-.nr w \w'\*X'u
-.if \nw>\n([W .nr [W \nw
-.nr w \w'\*N'u
-.if \nw>\n([W .nr [W \nw
-.nr w \w'\*e'u
-.if \nw>\n([W .nr [W \nw
-.nr w \w'\*C'u
-.if \nw>\n([W .nr [W \nw
-.nr w \w'\*S'u
-.if \nw>\n([W .nr [W \nw
-.nr [W +\w'\|\|'u
-.de []
-.nr w \w'\\$2'
-.nr H \\n([Wu-\\nwu
-.nr h \\nHu/2u
-.\" do fancy box in troff
-.ie t .ds \\$1 \(br\v'-1p'\(br\v'1p'\h'\\nhu'\\$2\h'\\nHu-\\nhu'\(br\l'-\\n([Wu\(ul'\v'-1p'\(br\l'-\\n([Wu\(rn'\v'1p'\*s
-.el .ds \\$1 \\$2\*s
-..
-.[] Et \v'-1p'\*X\v'1p'
-.[] En \v'-1p'\*N\v'1p'
-.[] Be \v'-1p'\*L\v'1p'
-.[] AP \v'-1p'\s\nsAPC\s0\v'1p'
-.[] Bs \v'-1p'\s\nsBS\s0\v'1p'
-.[] Cs \v'-1p'\s\nsCSI\s0\v'1p'
-.[] S2 \v'-1p'\s\nsSS2\s0\v'1p'
-.[] S3 \v'-1p'\s\nsSS3\s0\v'1p'
-.[] SS \v'-1p'\s\nsSOS\s0\v'1p'
-.[] Eg \v'-1p'\s\nsEPA\s0\v'1p'
-.[] Sg \v'-1p'\s\nsSPA\s0\v'1p'
-.[] Dc \v'-1p'\s\nsDCS\s0\v'1p'
-.[] Ht \v'-1p'\s\nsHTS\s0\v'1p'
-.[] ID \v'-1p'\s\nsIND\s0\v'1p'
-.[] Nl \v'-1p'\s\nsNEL\s0\v'1p'
-.[] Os \v'-1p'\s\nsOSC\s0\v'1p'
-.[] RI \v'-1p'\s\nsRI\s0\v'1p'
-.[] PM \v'-1p'\s\nsPM\s0\v'1p'
-.[] ST \v'-1p'\s\nsST\s0\v'1p'
-.[] Ta \v'-1p'\*T\v'1p'
-.[] Lf \v'-1p'\s\nsLF\s0\v'1p'
-.[] Vt \v'-1p'\s\nsVT\s0\v'1p'
-.[] Ff \v'-1p'\s\nsFF\s0\v'1p'
-.[] Cr \v'-1p'\s\nsCR\s0\v'1p'
-.[] So \v'-1p'\s\nsSO\s0\v'1p'
-.[] Sp \v'-1p'\s\nsSP\s0\v'1p'
-.[] Si \v'-1p'\s\nsSI\s0\v'1p'
-.[] Eb \v'-1p'\*e\v'1p'
-.[] Ca \v'-1p'\*C\v'1p'
-.[] Su \v'-1p'\*S\v'1p'
-.[] Es \v'-1p'\*E\v'1p'
-.[] Fs \v'-1p'\s\nsFS\s0\v'1p'
-.[] Gs \v'-1p'\s\nsGS\s0\v'1p'
-.[] Rs \v'-1p'\s\nsRS\s0\v'1p'
-.[] Us \v'-1p'\s\nsUS\s0\v'1p'
-.[] XX \v'-1p'\s\nsXX\s0\v'1p'
-.[] $ $
-.[] # #
-.[] % %
-.[] (( (
-.[] ) )
-.[] * *
-.[] + +
-.[] , ,
-.[] - -
-.[] . .
-.[] 0 0
-.[] 1 1
-.[] 2 2
-.[] 3 3
-.[] 4 4
-.[] 5 5
-.[] 6 6
-.[] 7 7
-.[] 8 8
-.[] 9 9
-.[] : :
-.[] ; ;
-.[] = =
-.[] / /
-.[] < <
-.[] > >
-.[] ? ?
-.[] @ @
-.[] A A
-.[] cB 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
-.[] V V
-.[] W W
-.[] XX X
-.[] Y Y
-.[] Z Z
-.[] [[ [
-.[] ]] ]
-.[] bS \\e
-.[] { {
-.[] ] ]
-.[] & &
-.[] ^ ^
-.[] _ _
-.[] qu \&'
-.[] ` \`
-.[] a a
-.[] b b
-.[] c c
-.[] d d
-.[] 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
-.[] cs s
-.[] t t
-.[] u u
-.[] v v
-.[] w w
-.[] x x
-.[] y y
-.[] z z
-.[] | |
-.[] } }
-.[] ! !
-.[] c" \(lq
-.[] c~ ~
-.[] Sc \fIc\fP
-.ds Cc \fIC\fP
-.ds Cb \fIC\v'.3m'\h'-.2m'\s-2b\s0\v'-.3m'\fP
-.ds Cx \fIC\v'.3m'\h'-.2m'\s-2x\s0\v'-.3m'\fP
-.ds Cy \fIC\v'.3m'\h'-.2m'\s-2y\s0\v'-.3m'\fP
-.ds Pb \fIP\v'.3m'\h'-.2m'\s-2b\s0\v'-.3m'\fP
-.ds Pc \fIP\v'.3m'\h'-.2m'\s-2c\s0\v'-.3m'\fP
-.ds Pd \fIP\v'.3m'\h'-.2m'\s-2d\s0\v'-.3m'\fP
-.ds Pe \fIP\v'.3m'\h'-.2m'\s-2e\s0\v'-.3m'\fP
-.ds Pl \fIP\v'.3m'\h'-.2m'\s-2l\s0\v'-.3m'\fP
-.ds Pm \fIP\v'.3m'\h'-.2m'\s-2m\s0\v'-.3m'\fP
-.ds Pp \fIP\v'.3m'\h'-.2m'\s-2p\s0\v'-.3m'\fP
-.ds Pr \fIP\v'.3m'\h'-.2m'\s-2r\s0\v'-.3m'\fP
-.ds Ps \fIP\v'.3m'\h'-.2m'\s-2s\s0\v'-.3m'\fP
-.ds Pt \fIP\v'.3m'\h'-.2m'\s-2t\s0\v'-.3m'\fP
-.ds Pu \fIP\v'.3m'\h'-.2m'\s-2u\s0\v'-.3m'\fP
-.ds Pv \fIP\v'.3m'\h'-.2m'\s-2v\s0\v'-.3m'\fP
-.ds Ix \fIx\fP
-.ds Iy \fIy\fP
-.ds Iw \fIw\fP
-.ds Ih \fIh\fP
-.ds Ir \fIr\fP
-.ds Ic \fIc\fP
-.ie t .nr LL 6.5i
-.el .nr LL 72m
-.if n .na
-.TL
-Xterm Control Sequences
-.AU
-Edward Moy
-.AI
-University of California, Berkeley
-.sp
-Revised by
-.AU
-Stephen Gildea
-.AI
-X Consortium (1994)
-.AU
-Thomas Dickey
-.AI
-XFree86 Project (1996-2005)
-.AU
-.
-.am BT \" add page numbers after first page
-.ds CF %
-..
-.SH
-Definitions
-.IP \*(Sc
-The literal character \fIc\fP.
-.IP \*(Cc
-A single (required) character.
-.IP \*(Ps
-A single (usually optional) numeric parameter, composed of one of more digits.
-.IP \*(Pm
-A multiple numeric parameter composed of any number of single numeric
-parameters, separated by \*; character(s).
-Individual values for the parameters are listed with \*(Ps .
-.IP \*(Pt
-A text parameter composed of printable characters.
-.
-.SH
-C1 (8-Bit) Control Characters
-.ds RH C1 (8-Bit) Control Characters
-.LP
-The \fIxterm\fP program recognizes both 8-bit and 7-bit control characters.
-It generates 7-bit controls (by default) or 8-bit if S8C1T is enabled.
-The following pairs of 7-bit and 8-bit control characters are equivalent:
-.St
-.IP \\*(Es\\*D
-Index (\*(ID is 0x84)
-.IP \\*(Es\\*E
-Next Line (\*(Nl is 0x85)
-.IP \\*(Es\\*H
-Tab Set (\*(Ht is 0x88)
-.IP \\*(Es\\*M
-Reverse Index (\*(RI is 0x8d)
-.IP \\*(Es\\*N
-Single Shift Select of G2 Character Set (\*(S2 is 0x8e): affects next character only
-.IP \\*(Es\\*O
-Single Shift Select of G3 Character Set (\*(S3 is 0x8f): affects next character only
-.IP \\*(Es\\*P
-Device Control String (\*(Dc is 0x90)
-.IP \\*(Es\\*V
-Start of Guarded Area (\*(Sg is 0x96)
-.IP \\*(Es\\*W
-End of Guarded Area (\*(Eg is 0x97)
-.IP \\*(Es\\*(XX
-Start of String (\*(SS is 0x98)
-.IP \\*(Es\\*Z
-Return Terminal ID (DECID is 0x9a). Obsolete form of \*(Cs\*c (DA).
-.IP \\*(Es\\*([[
-Control Sequence Introducer (\*(Cs is 0x9b)
-.IP \\*(Es\\*(bS
-String Terminator (\*(ST is 0x9c)
-.IP \\*(Es\\*(]]
-Operating System Command (\*(Os is 0x9d)
-.IP \\*(Es\\*^
-Privacy Message (\*(PM is 0x9e)
-.IP \\*(Es\\*_
-Application Program Command (\*(AP is 0x9f)
-.Ed
-.sp
-.LP
-These control characters are used in the vtXXX emulation.
-.
-.SH
-VT100 Mode
-.ds RH VT100 Mode
-.LP
-Most of these control sequences are standard VT102 control sequences,
-but there is support for later DEC VT terminals (i.e., VT220, VT320, VT420),
-as well as ISO 6429 and \fIaixterm\fP color controls.
-The only VT102 features not supported is auto-repeat,
-since the only way X provides for this will affect all windows.
-There are additional control sequences to provide
-\fIxterm-\fPdependent functions, such as the scrollbar or window size.
-Where the function is specified by DEC or ISO 6429, the code assigned
-to it is given in parentheses. The escape codes to designate and invoke
-character sets are specified by ISO 2022; see that document for a
-discussion of character sets.
-.
-.St
-.\"
-.LP
-.B
-Single-character functions
-.\"
-.IP \\*(Be
-Bell (Ctrl-G)
-.
-.IP \\*(Bs
-Backspace (Ctrl-H)
-.
-.IP \\*(Cr
-Carriage Return (Ctrl-M)
-.
-.IP \\*(En
-Return Terminal Status (Ctrl-E).
-Default response is an empty string, but may be overridden
-by a resource \fBanswerbackString\fP.
-.
-.IP \\*(Ff
-Form Feed or New Page (NP) (Ctrl-L) same as LF
-.
-.IP \\*(Lf
-Line Feed or New Line (NL) (Ctrl-J)
-.
-.IP \\*(So
-Shift Out (Ctrl-N) \(-> Switch to Alternate Character Set: invokes the
-G1 character set.
-.
-.IP \\*(Sp
-Space.
-.
-.IP \\*(Ta
-Horizontal Tab (HT) (Ctrl-I)
-.
-.IP \\*(Vt
-Vertical Tab (Ctrl-K) same as LF
-.
-.IP \\*(Si
-Shift In (Ctrl-O) \(-> Switch to Standard Character Set: invokes the
-G0 character set (the default).
-.Ed
-.\"
-.\"
-.\"
-.St
-.LP
-.B
-Controls beginning with ESC (other than those where ESC is part of a 7-bit equivalent to 8-bit C1 controls), ordered by the final character(s).
-.\"
-.IP \\*(Es\\*(Sp\\*F
-7-bit controls (S7C1T).
-.
-.IP \\*(Es\\*(Sp\\*G
-8-bit controls (S8C1T).
-.
-.IP \\*(Es\\*(Sp\\*L
-Set ANSI conformance level 1 (dpANS X3.134.1).
-.
-.IP \\*(Es\\*(Sp\\*M
-Set ANSI conformance level 2 (dpANS X3.134.1).
-.
-.IP \\*(Es\\*(Sp\\*N
-Set ANSI conformance level 3 (dpANS X3.134.1).
-.
-.IP \\*(Es\\*#\\*3
-DEC double-height line, top half (DECDHL)
-.
-.IP \\*(Es\\*#\\*4
-DEC double-height line, bottom half (DECDHL)
-.
-.IP \\*(Es\\*#\\*5
-DEC single-width line (DECSWL)
-.
-.IP \\*(Es\\*#\\*6
-DEC double-width line (DECDWL)
-.
-.IP \\*(Es\\*#\\*8
-DEC Screen Alignment Test (DECALN)
-.
-.IP \\*(Es\\*%\\*@
-Select default character set, ISO 8859-1 (ISO 2022)
-.
-.IP \\*(Es\\*%\\*G
-Select UTF-8 character set (ISO 2022)
-.
-.IP \\*(Es\\*(((\\*(Cc
-Designate G0 Character Set (ISO 2022)
-.IP \\*(Es\\*)\\*(Cc
-Designate G1 Character Set (ISO 2022)
-.
-.IP \\*(Es\\**\\*(Cc
-Designate G2 Character Set (ISO 2022)
-.
-.IP \\*(Es\\*+\\*(Cc
-Designate G3 Character Set (ISO 2022)
-.br
-Final character \*(Cc for designating character sets
-(\*0, \*A and \*(cB apply to VT100 and up, the remainder to VT220 and up):
- \*(Cc = \*0 \(-> DEC Special Character and Line Drawing Set
- \*(Cc = \*A \(-> United Kingdom (UK)
- \*(Cc = \*(cB \(-> United States (USASCII)
- \*(Cc = \*4 \(-> Dutch
- \*(Cc = \*C or \*5 \(-> Finnish
- \*(Cc = \*R \(-> French
- \*(Cc = \*Q \(-> French Canadian
- \*(Cc = \*K \(-> German
- \*(Cc = \*Y \(-> Italian
- \*(Cc = \*E or \*6 \(-> Norwegian/Danish
- \*(Cc = \*Z \(-> Spanish
- \*(Cc = \*H or \*7 \(-> Swedish
- \*(Cc = \*= \(-> Swiss
-.
-.IP \\*(Es\\*7
-Save Cursor (DECSC)
-.
-.IP \\*(Es\\*8
-Restore Cursor (DECRC)
-.
-.IP \\*(Es\\*=
-Application Keypad (DECPAM)
-.
-.IP \\*(Es\\*>
-Normal Keypad (DECPNM)
-.
-.IP \\*(Es\\*F
-Cursor to lower left corner of screen (if
-enabled by the \fBhpLowerleftBugCompat\fP resource).
-.
-.IP \\*(Es\\*c
-Full Reset (RIS)
-.
-.IP \\*(Es\\*l
-Memory Lock (per HP terminals). Locks memory above the cursor.
-.
-.IP \\*(Es\\*m
-Memory Unlock (per HP terminals)
-.
-.IP \\*(Es\\*n
-Invoke the G2 Character Set as GL (LS2).
-.
-.IP \\*(Es\\*o
-Invoke the G3 Character Set as GL (LS3).
-.
-.IP \\*(Es\\*|
-Invoke the G3 Character Set as GR (LS3R).
-.
-.IP \\*(Es\\*}
-Invoke the G2 Character Set as GR (LS2R).
-.
-.IP \\*(Es\\*(c~
-Invoke the G1 Character Set as GR (LS1R).
-.Ed
-.
-.St
-.LP
-.B
-Application Program-Control functions
-.IP \\*(AP\\*(Pt\\*s\\*(ST
-\fIxterm\fP implements no \*(AP functions; \*(Pt is ignored.
-\*(Pt need not be printable characters.
-.Ed
-.
-.St
-.LP
-.B
-Device-Control functions
-.IP \\*(Dc\\*(Ps\\*;\\*(Ps\\*|\\*(Pt\\*s\\*(ST
-User-Defined Keys (DECUDK).
-The first parameter:
- \*(Ps = \*0 \(-> Clear all UDK definitions before starting (default)
- \*(Ps = \*1 \(-> Erase Below (default)
-.br
-The second parameter:
- \*(Ps = \*0 \(-> Lock the keys (default)
- \*(Ps = \*1 \(-> Do not lock.
-.br
-The third parameter is a ';'-separated list of strings denoting
-the key-code separated by a '/' from the hex-encoded key value.
-The key codes correspond to the DEC function-key codes (e.g., F6=17).
-.
-.IP \\*(Dc\\*$\\*q\\*(Pt\\*s\\*(ST
-Request Status String (DECRQSS).
-The string following the "q" is one of the following:
- \*(c"\*q \(-> DECSCA
- \*(c"\*p \(-> DECSCL
- \*r \(-> DECSTBM
- \*m \(-> SGR
-.br
-\fIxterm\fP responds with
-\*(Dc\*1\*$\*r\*(Pt\*s\*(ST
-for valid requests, replacing the \*(Pt with the corresponding \*(Cs
-string,
-or
-\*(Dc\*0\*$\*r\*(Pt\*s\*(ST
-for invalid requests.
-.
-.IP \\*(Dc\\*+\\*q\\*(Pt\\*s\\*(ST
-Request Termcap/Terminfo String (xterm, experimental).
-The string following the "q" is a list of names
-encoded in hexadecimal (2 digits per character)
-separated by \*;
-which correspond to termcap or terminfo key names.
-.br
-\fIxterm\fP responds with
-\*(Dc\*1\*+\*r\*(Pt\*s\*(ST
-for valid requests, adding to \*(Pt an \*=,
-and the value of the corresponding string that xterm would send,
-or
-\*(Dc\*0\*+\*r\*(Pt\*s\*(ST
-for invalid requests.
-The strings are encoded in hexadecimal (2 digits per character).
-.Ed
-.\"
-.St
-.LP
-.B
-Functions using \*(Cs, ordered by the final character(s)
-.IP \\*(Cs\\*(Ps\\*s\\*@
-Insert \*(Ps (Blank) Character(s) (default = 1) (ICH)
-.
-.IP \\*(Cs\\*(Ps\\*s\\*A
-Cursor Up \*(Ps Times (default = 1) (CUU)
-.
-.IP \\*(Cs\\*(Ps\\*s\\*(cB
-Cursor Down \*(Ps Times (default = 1) (CUD)
-.
-.IP \\*(Cs\\*(Ps\\*s\\*C
-Cursor Forward \*(Ps Times (default = 1) (CUF)
-.
-.IP \\*(Cs\\*(Ps\\*s\\*D
-Cursor Backward \*(Ps Times (default = 1) (CUB)
-.
-.IP \\*(Cs\\*(Ps\\*s\\*E
-Cursor Next Line \*(Ps Times (default = 1) (CNL)
-.
-.IP \\*(Cs\\*(Ps\\*s\\*F
-Cursor Preceding Line \*(Ps Times (default = 1) (CPL)
-.
-.IP \\*(Cs\\*(Ps\\*s\\*G
-Cursor Character Absolute [column] (default = [row,1]) (CHA)
-.
-.IP \\*(Cs\\*(Ps\\*s\\*;\\*(Ps\\*s\\*H
-Cursor Position [row;column] (default = [1,1]) (CUP)
-.
-.IP \\*(Cs\\*(Ps\\*s\\*I
-Cursor Forward Tabulation \*(Ps tab stops (default = 1) (CHT)
-.
-.IP \\*(Cs\\*(Ps\\*s\\*J
-Erase in Display (ED)
- \*(Ps = \*0 \(-> Erase Below (default)
- \*(Ps = \*1 \(-> Erase Above
- \*(Ps = \*2 \(-> Erase All
- \*(Ps = \*3 \(-> Erase Saved Lines (xterm)
-.
-.IP \\*(Cs\\*?\\*(Ps\\*s\\*J
-Erase in Display (DECSED)
- \*(Ps = \*0 \(-> Selective Erase Below (default)
- \*(Ps = \*1 \(-> Selective Erase Above
- \*(Ps = \*2 \(-> Selective Erase All
-.
-.IP \\*(Cs\\*(Ps\\*s\\*K
-Erase in Line (EL)
- \*(Ps = \*0 \(-> Erase to Right (default)
- \*(Ps = \*1 \(-> Erase to Left
- \*(Ps = \*2 \(-> Erase All
-.
-.IP \\*(Cs\\*?\\*(Ps\\*s\\*K
-Erase in Line (DECSEL)
- \*(Ps = \*0 \(-> Selective Erase to Right (default)
- \*(Ps = \*1 \(-> Selective Erase to Left
- \*(Ps = \*2 \(-> Selective Erase All
-.
-.IP \\*(Cs\\*(Ps\\*s\\*L
-Insert \*(Ps Line(s) (default = 1) (IL)
-.
-.IP \\*(Cs\\*(Ps\\*s\\*M
-Delete \*(Ps Line(s) (default = 1) (DL)
-.
-.IP \\*(Cs\\*(Ps\\*s\\*P
-Delete \*(Ps Character(s) (default = 1) (DCH)
-.
-.IP \\*(Cs\\*(Ps\\*s\\*S
-Scroll up \*(Ps lines (default = 1) (SU)
-.
-.IP \\*(Cs\\*(Ps\\*s\\*T
-Scroll down \*(Ps lines (default = 1) (SD)
-.
-.IP \\*(Cs\\*(Ps\\*s\\*;\\*(Ps\\*s\\*;\\*(Ps\\*s\\*;\\*(Ps\\*s\\*;\\*(Ps\\*s\\*T
-Initiate highlight mouse tracking.
-Parameters are [func;startx;starty;firstrow;lastrow].
-See the section \fBMouse Tracking\fP.
-.
-.IP \\*(Cs\\*(Ps\\*s\\*(XX
-Erase \*(Ps Character(s) (default = 1) (ECH)
-.
-.IP \\*(Cs\\*(Ps\\*s\\*Z
-Cursor Backward Tabulation \*(Ps tab stops (default = 1) (CBT)
-.
-.IP \\*(Cs\\*(Pm\\*s\\*`
-Character Position Absolute [column] (default = [row,1]) (HPA)
-.
-.IP \\*(Cs\\*(Ps\\*s\\*b
-Repeat the preceding graphic character \*(Ps times (REP)
-.
-.IP \\*(Cs\\*(Ps\\*s\\*c
-Send Device Attributes (Primary DA)
- \*(Ps = \*0 or omitted \(-> request attributes from terminal.
-The response depends on the \fBdecTerminalID\fP resource setting.
- \(-> \*(Cs\*?\*1\*;\*2\*c (``VT100 with Advanced Video Option'')
- \(-> \*(Cs\*?\*1\*;\*0\*c (``VT101 with No Options'')
- \(-> \*(Cs\*?\*6\*c (``VT102'')
- \(-> \*(Cs\*?\*6\*0\*;\*1\*;\*2\*;\*6\*;\*8\*;\*9\*;\*1\*5\*;\*c (``VT220'')
-.br
-The VT100-style response parameters do not mean anything by themselves.
-VT220 parameters do, telling the host what features the terminal supports:
- \(-> \*1 132-columns
- \(-> \*2 Printer
- \(-> \*6 Selective erase
- \(-> \*8 User-defined keys
- \(-> \*9 National replacement character sets
- \(-> \*1\*5 Technical characters
- \(-> \*2\*2 ANSI color, e.g., VT525
- \(-> \*2\*9 ANSI text locator (i.e., DEC Locator mode)
-.
-.IP \\*(Cs\\*>\\*(Ps\\*s\\*c
-Send Device Attributes (Secondary DA)
- \*(Ps = \*0 or omitted \(-> request the terminal's identification code.
-The response depends on the \fBdecTerminalID\fP resource setting.
-It should apply only to VT220 and up, but \fIxterm\fP extends this to VT100.
- \(-> \*(Cs\*s\*>\*(Pp\*s\*;\*(Pv\*s\*;\*(Pc\*s\*c
-.br
-where \*(Pp denotes the terminal type
- \(-> \*0 (``VT100'')
- \(-> \*1 (``VT220'')
-.br
-and \*(Pv is the firmware version (for \fIxterm\fP, this is the XFree86
-patch number, starting with 95).
-In a DEC terminal, \*(Pc indicates the ROM cartridge
-registration number and is always zero.
-.
-.IP \\*(Cs\\*(Pm\\*s\\*d
-Line Position Absolute [row] (default = [1,column]) (VPA)
-.
-.IP \\*(Cs\\*(Ps\\*s\\*;\\*(Ps\\*s\\*f
-Horizontal and Vertical Position [row;column] (default = [1,1]) (HVP)
-.
-.IP \\*(Cs\\*(Ps\\*s\\*g
-Tab Clear (TBC)
- \*(Ps = \*0 \(-> Clear Current Column (default)
- \*(Ps = \*3 \(-> Clear All
-.
-.IP \\*(Cs\\*(Pm\\*s\\*h
-Set Mode (SM)
- \*(Ps = \*2 \(-> Keyboard Action Mode (AM)
- \*(Ps = \*4 \(-> Insert Mode (IRM)
- \*(Ps = \*1\*2 \(-> Send/receive (SRM)
- \*(Ps = \*2\*0 \(-> Automatic Newline (LNM)
-.
-.IP \\*(Cs\\*?\\*(Pm\\*s\\*h
-DEC Private Mode Set (DECSET)
- \*(Ps = \*1 \(-> Application Cursor Keys (DECCKM)
- \*(Ps = \*2 \(-> Designate USASCII for character sets G0-G3 (DECANM),
-and set VT100 mode.
- \*(Ps = \*3 \(-> 132 Column Mode (DECCOLM)
- \*(Ps = \*4 \(-> Smooth (Slow) Scroll (DECSCLM)
- \*(Ps = \*5 \(-> Reverse Video (DECSCNM)
- \*(Ps = \*6 \(-> Origin Mode (DECOM)
- \*(Ps = \*7 \(-> Wraparound Mode (DECAWM)
- \*(Ps = \*8 \(-> Auto-repeat Keys (DECARM)
- \*(Ps = \*9 \(-> Send Mouse X & Y on button press.
-See the section \fBMouse Tracking\fP.
- \*(Ps = \*1\*0 \(-> Show toolbar (rxvt)
- \*(Ps = \*1\*2 \(-> Start Blinking Cursor (att610)
- \*(Ps = \*1\*8 \(-> Print form feed (DECPFF)
- \*(Ps = \*1\*9 \(-> Set print extent to full screen (DECPEX)
- \*(Ps = \*2\*5 \(-> Show Cursor (DECTCEM)
- \*(Ps = \*3\*0 \(-> Show scrollbar (rxvt).
- \*(Ps = \*3\*5 \(-> Enable font-shifting functions (rxvt).
- \*(Ps = \*3\*8 \(-> Enter Tektronix Mode (DECTEK)
- \*(Ps = \*4\*0 \(-> Allow 80 \z\(<-\(-> 132 Mode
- \*(Ps = \*4\*1 \(-> \fImore\fP(1) fix (see \fBcurses\fP resource)
- \*(Ps = \*4\*2 \(-> Enable Nation Replacement Character sets (DECNRCM)
- \*(Ps = \*4\*4 \(-> Turn On Margin Bell
- \*(Ps = \*4\*5 \(-> Reverse-wraparound Mode
- \*(Ps = \*4\*6 \(-> Start Logging
-(normally disabled by a compile-time option)
- \*(Ps = \*4\*7 \(-> Use Alternate Screen Buffer (unless
-disabled by the \fBtiteInhibit\fP resource)
- \*(Ps = \*6\*6 \(-> Application keypad (DECNKM)
- \*(Ps = \*6\*7 \(-> Backarrow key sends backspace (DECBKM)
- \*(Ps = \*1\*0\*0\*0 \(-> Send Mouse X & Y on button press and release.
-See the section \fBMouse Tracking\fP.
- \*(Ps = \*1\*0\*0\*1 \(-> Use Hilite Mouse Tracking.
- \*(Ps = \*1\*0\*0\*2 \(-> Use Cell Motion Mouse Tracking.
- \*(Ps = \*1\*0\*0\*3 \(-> Use All Motion Mouse Tracking.
- \*(Ps = \*1\*0\*1\*0 \(-> Scroll to bottom on tty output (rxvt).
- \*(Ps = \*1\*0\*1\*1 \(-> Scroll to bottom on key press (rxvt).
- \*(Ps = \*1\*0\*3\*5 \(-> Enable special modifiers for Alt and NumLock keys.
- \*(Ps = \*1\*0\*3\*6 \(-> Send ESC when Meta modifies a key
-(enables the \fBmetaSendsEscape\fP resource).
- \*(Ps = \*1\*0\*3\*7 \(-> Send DEL from the editing-keypad Delete key
- \*(Ps = \*1\*0\*4\*7 \(-> Use Alternate Screen Buffer (unless
-disabled by the \fBtiteInhibit\fP resource)
- \*(Ps = \*1\*0\*4\*8 \(-> Save cursor as in DECSC (unless
-disabled by the \fBtiteInhibit\fP resource)
- \*(Ps = \*1\*0\*4\*9 \(-> Save cursor as in DECSC
-and use Alternate Screen Buffer, clearing it first (unless
-disabled by the \fBtiteInhibit\fP resource).
-This combines the effects of the \*1\*0\*4\*7 and \*1\*0\*4\*8 modes.
-Use this with terminfo-based applications rather than the \*4\*7 mode.
- \*(Ps = \*1\*0\*5\*1 \(-> Set Sun function-key mode.
- \*(Ps = \*1\*0\*5\*2 \(-> Set HP function-key mode.
- \*(Ps = \*1\*0\*5\*3 \(-> Set SCO function-key mode.
- \*(Ps = \*1\*0\*6\*0 \(-> Set legacy keyboard emulation (X11R6).
- \*(Ps = \*1\*0\*6\*1 \(-> Set Sun/PC keyboard emulation of VT220 keyboard.
- \*(Ps = \*2\*0\*0\*4 \(-> Set bracketed paste mode.
-.
-.IP \\*(Cs\\*(Pm\\*s\\*i
-Media Copy (MC)
- \*(Ps = \*0 \(-> Print screen (default)
- \*(Ps = \*4 \(-> Turn off printer controller mode
- \*(Ps = \*5 \(-> Turn on printer controller mode
-.
-.IP \\*(Cs\\*?\\*(Pm\\*s\\*i
-Media Copy (MC, DEC-specific)
- \*(Ps = \*1 \(-> Print line containing cursor
- \*(Ps = \*4 \(-> Turn off autoprint mode
- \*(Ps = \*5 \(-> Turn on autoprint mode
- \*(Ps = \*1 \*0 \(-> Print composed display, ignores DECPEX
- \*(Ps = \*1 \*1 \(-> Print all pages
-.
-.IP \\*(Cs\\*(Pm\\*s\\*l
-Reset Mode (RM)
- \*(Ps = \*2 \(-> Keyboard Action Mode (AM)
- \*(Ps = \*4 \(-> Replace Mode (IRM)
- \*(Ps = \*1\*2 \(-> Send/receive (SRM)
- \*(Ps = \*2\*0 \(-> Normal Linefeed (LNM)
-.
-.IP \\*(Cs\\*?\\*(Pm\\*s\\*l
-DEC Private Mode Reset (DECRST)
- \*(Ps = \*1 \(-> Normal Cursor Keys (DECCKM)
- \*(Ps = \*2 \(-> Designate VT52 mode (DECANM).
- \*(Ps = \*3 \(-> 80 Column Mode (DECCOLM)
- \*(Ps = \*4 \(-> Jump (Fast) Scroll (DECSCLM)
- \*(Ps = \*5 \(-> Normal Video (DECSCNM)
- \*(Ps = \*6 \(-> Normal Cursor Mode (DECOM)
- \*(Ps = \*7 \(-> No Wraparound Mode (DECAWM)
- \*(Ps = \*8 \(-> No Auto-repeat Keys (DECARM)
- \*(Ps = \*9 \(-> Don't Send Mouse X & Y on button press
- \*(Ps = \*1\*0 \(-> Hide toolbar (rxvt)
- \*(Ps = \*1\*2 \(-> Stop Blinking Cursor (att610)
- \*(Ps = \*1\*8 \(-> Don't print form feed (DECPFF)
- \*(Ps = \*1\*9 \(-> Limit print to scrolling region (DECPEX)
- \*(Ps = \*2\*5 \(-> Hide Cursor (DECTCEM)
- \*(Ps = \*3\*0 \(-> Don't show scrollbar (rxvt).
- \*(Ps = \*3\*5 \(-> Disable font-shifting functions (rxvt).
- \*(Ps = \*4\*0 \(-> Disallow 80 \z\(<-\(-> 132 Mode
- \*(Ps = \*4\*1 \(-> No \fImore\fP(1) fix (see \fBcurses\fP resource)
- \*(Ps = \*4\*2 \(-> Disable Nation Replacement Character sets (DECNRCM)
- \*(Ps = \*4\*4 \(-> Turn Off Margin Bell
- \*(Ps = \*4\*5 \(-> No Reverse-wraparound Mode
- \*(Ps = \*4\*6 \(-> Stop Logging
-(normally disabled by a compile-time option)
- \*(Ps = \*4\*7 \(-> Use Normal Screen Buffer
- \*(Ps = \*6\*6 \(-> Numeric keypad (DECNKM)
- \*(Ps = \*6\*7 \(-> Backarrow key sends delete (DECBKM)
- \*(Ps = \*1\*0\*0\*0 \(-> Don't Send Mouse X & Y on button press and
-release.
-See the section \fBMouse Tracking\fP.
- \*(Ps = \*1\*0\*0\*1 \(-> Don't Use Hilite Mouse Tracking
- \*(Ps = \*1\*0\*0\*2 \(-> Don't Use Cell Motion Mouse Tracking
- \*(Ps = \*1\*0\*0\*3 \(-> Don't Use All Motion Mouse Tracking
- \*(Ps = \*1\*0\*1\*0 \(-> Don't scroll to bottom on tty output (rxvt).
- \*(Ps = \*1\*0\*1\*1 \(-> Don't scroll to bottom on key press (rxvt).
- \*(Ps = \*1\*0\*3\*5 \(-> Disable special modifiers for Alt and NumLock keys.
- \*(Ps = \*1\*0\*3\*6 \(-> Don't send ESC when Meta modifies a key
-(disables the \fBmetaSendsEscape\fP resource).
- \*(Ps = \*1\*0\*3\*7 \(-> Send VT220 Remove from the editing-keypad Delete key
- \*(Ps = \*1\*0\*4\*7 \(-> Use Normal Screen Buffer, clearing screen
-first if in the Alternate Screen (unless
-disabled by the \fBtiteInhibit\fP resource)
- \*(Ps = \*1\*0\*4\*8 \(-> Restore cursor as in DECRC (unless
-disabled by the \fBtiteInhibit\fP resource)
- \*(Ps = \*1\*0\*4\*9 \(-> Use Normal Screen Buffer and restore cursor
-as in DECRC (unless
-disabled by the \fBtiteInhibit\fP resource).
-This combines the effects of the \*1\*0\*4\*7 and \*1\*0\*4\*8 modes.
-Use this with terminfo-based applications rather than the \*4\*7 mode.
- \*(Ps = \*1\*0\*5\*1 \(-> Reset Sun function-key mode.
- \*(Ps = \*1\*0\*5\*2 \(-> Reset HP function-key mode.
- \*(Ps = \*1\*0\*5\*3 \(-> Reset SCO function-key mode.
- \*(Ps = \*1\*0\*6\*0 \(-> Reset legacy keyboard emulation (X11R6).
- \*(Ps = \*1\*0\*6\*1 \(-> Reset Sun/PC keyboard emulation of VT220 keyboard.
- \*(Ps = \*2\*0\*0\*4 \(-> Reset bracketed paste mode.
-.
-.IP \\*(Cs\\*(Pm\\*s\\*m
-Character Attributes (SGR)
- \*(Ps = \*0 \(-> Normal (default)
- \*(Ps = \*1 \(-> Bold
- \*(Ps = \*4 \(-> Underlined
- \*(Ps = \*5 \(-> Blink (appears as Bold)
- \*(Ps = \*7 \(-> Inverse
- \*(Ps = \*8 \(-> Invisible, i.e., hidden (VT300)
- \*(Ps = \*2\*2 \(-> Normal (neither bold nor faint)
- \*(Ps = \*2\*4 \(-> Not underlined
- \*(Ps = \*2\*5 \(-> Steady (not blinking)
- \*(Ps = \*2\*7 \(-> Positive (not inverse)
- \*(Ps = \*2\*8 \(-> Visible, i.e., not hidden (VT300)
- \*(Ps = \*3\*0 \(-> Set foreground color to Black
- \*(Ps = \*3\*1 \(-> Set foreground color to Red
- \*(Ps = \*3\*2 \(-> Set foreground color to Green
- \*(Ps = \*3\*3 \(-> Set foreground color to Yellow
- \*(Ps = \*3\*4 \(-> Set foreground color to Blue
- \*(Ps = \*3\*5 \(-> Set foreground color to Magenta
- \*(Ps = \*3\*6 \(-> Set foreground color to Cyan
- \*(Ps = \*3\*7 \(-> Set foreground color to White
- \*(Ps = \*3\*9 \(-> Set foreground color to default (original)
- \*(Ps = \*4\*0 \(-> Set background color to Black
- \*(Ps = \*4\*1 \(-> Set background color to Red
- \*(Ps = \*4\*2 \(-> Set background color to Green
- \*(Ps = \*4\*3 \(-> Set background color to Yellow
- \*(Ps = \*4\*4 \(-> Set background color to Blue
- \*(Ps = \*4\*5 \(-> Set background color to Magenta
- \*(Ps = \*4\*6 \(-> Set background color to Cyan
- \*(Ps = \*4\*7 \(-> Set background color to White
- \*(Ps = \*4\*9 \(-> Set background color to default (original).
-.sp
-If 16-color support is compiled, the following apply.
-Assume that \fIxterm\fP's resources
-are set so that the ISO color codes are the first 8 of a set of 16.
-Then the \fIaixterm\fP colors are the bright versions of the ISO colors:
- \*(Ps = \*9\*0 \(-> Set foreground color to Black
- \*(Ps = \*9\*1 \(-> Set foreground color to Red
- \*(Ps = \*9\*2 \(-> Set foreground color to Green
- \*(Ps = \*9\*3 \(-> Set foreground color to Yellow
- \*(Ps = \*9\*4 \(-> Set foreground color to Blue
- \*(Ps = \*9\*5 \(-> Set foreground color to Magenta
- \*(Ps = \*9\*6 \(-> Set foreground color to Cyan
- \*(Ps = \*9\*7 \(-> Set foreground color to White
- \*(Ps = \*1\*0\*0 \(-> Set background color to Black
- \*(Ps = \*1\*0\*1 \(-> Set background color to Red
- \*(Ps = \*1\*0\*2 \(-> Set background color to Green
- \*(Ps = \*1\*0\*3 \(-> Set background color to Yellow
- \*(Ps = \*1\*0\*4 \(-> Set background color to Blue
- \*(Ps = \*1\*0\*5 \(-> Set background color to Magenta
- \*(Ps = \*1\*0\*6 \(-> Set background color to Cyan
- \*(Ps = \*1\*0\*7 \(-> Set background color to White
-.sp
-If \fIxterm\fP is compiled with the 16-color support disabled, it supports
-the following, from \fIrxvt\fP:
- \*(Ps = \*1\*0\*0 \(-> Set foreground and background color to default
-.sp
-If 88- or 256-color support is compiled, the following apply.
- \*(Ps = \*3\*8 ; \*5 ; \*(Ps \(-> Set foreground color to the second \*(Ps
- \*(Ps = \*4\*8 ; \*5 ; \*(Ps \(-> Set background color to the second \*(Ps
-.sp
-.
-.IP \\*(Cs\\*(Ps\\*s\\*n
-Device Status Report (DSR)
- \*(Ps = \*5 \(-> Status Report \*(Cs\*0\*n (``OK'')
- \*(Ps = \*6 \(-> Report Cursor Position (CPR) [row;column] as
-.br
-\*(Cs\*(Ir\*s\*;\*(Ic\*s\*R
-.
-.IP \\*(Cs\\*?\\*(Ps\\*s\\*n
-Device Status Report (DSR, DEC-specific)
- \*(Ps = \*6 \(-> Report Cursor Position (CPR) [row;column] as
-\*(Cs\*?\*(Ir\*s\*;\*(Ic\*s\*R
-(assumes page is zero).
- \*(Ps = \*1\*5 \(-> Report Printer status as
-\*(Cs\*?\*1\*0\*s\*n (ready)
-or
-\*(Cs\*?\*1\*1\*s\*n (not ready)
- \*(Ps = \*2\*5 \(-> Report UDK status as
-\*(Cs\*?\*2\*0\*s\*n (unlocked)
-or
-\*(Cs\*?\*2\*1\*s\*n (locked)
- \*(Ps = \*2\*6 \(-> Report Keyboard status as
-.br
-\*(Cs\*?\*2\*7\*s\*;\*s\*1\*s\*;\*s\*0\*s\*;\*s\*0\*s\*n (North American)
-.br
-The last two parameters apply to VT400 & up, and denote keyboard ready and LK01 respectively.
- \*(Ps = \*5\*3 \(-> Report Locator status as
-.br
-\*(Cs\*?\*5\*3\*s\*n Locator available, if compiled-in, or
-.br
-\*(Cs\*?\*5\*0\*s\*n No Locator, if not.
-.
-.IP \\*(Cs\\*!\\*p
-Soft terminal reset (DECSTR)
-.
-.IP \\*(Cs\\*(Ps\\*s\\*;\\*(Ps\\*s\\*(c"\\*p
-Set conformance level (DECSCL)
-Valid values for the first parameter:
- \*(Ps = \*6\*1 \(-> VT100
- \*(Ps = \*6\*2 \(-> VT200
- \*(Ps = \*6\*3 \(-> VT300
-.br
-Valid values for the second parameter:
- \*(Ps = \*0 \(-> 8-bit controls
- \*(Ps = \*1 \(-> 7-bit controls (always set for VT100)
- \*(Ps = \*2 \(-> 8-bit controls
-.
-.IP \\*(Cs\\*(Ps\\*s\\*(c"\\*q
-Select character protection attribute (DECSCA).
-Valid values for the parameter:
- \*(Ps = \*0 \(-> DECSED and DECSEL can erase (default)
- \*(Ps = \*1 \(-> DECSED and DECSEL cannot erase
- \*(Ps = \*2 \(-> DECSED and DECSEL can erase
-.
-.IP \\*(Cs\\*(Ps\\*s\\*;\\*(Ps\\*s\\*r
-Set Scrolling Region [top;bottom] (default = full size of window) (DECSTBM)
-.
-.IP \\*(Cs\\*?\\*(Pm\\*s\\*r
-Restore DEC Private Mode Values. The value of \*(Ps previously saved is
-restored. \*(Ps values are the same as for DECSET.
-.
-.IP \\*(Cs\\*(Pt\\*;\\*(Pl\\*;\\*(Pb\\*;\\*(Pr\\*;\\*(Ps\\*$\\*r
-Change Attributes in Rectangular Area (DECCARA).
- \*(Pt\*;\*(Pl\*;\*(Pb\*;\*(Pr denotes the rectangle.
- \*(Ps denotes the SGR attributes to change: 0, 1, 4, 5, 7
-.
-.IP \\*(Cs\\*(cs
-Save cursor (ANSI.SYS)
-.
-.IP \\*(Cs\\*?\\*(Pm\\*s\\*(cs
-Save DEC Private Mode Values. \*(Ps values are the same as for DECSET.
-.
-.IP \\*(Cs\\*(Ps\\*s\\*;\\*(Ps\\*s\\*;\\*(Ps\\*s\\*t
-Window manipulation (from \fIdtterm\fP, as well as extensions).
-These controls may be disabled using the \fIallowWindowOps\fP resource.
-Valid values for the first (and any additional parameters) are:
- \*(Ps = \*1 \(-> De-iconify window.
- \*(Ps = \*2 \(-> Iconify window.
- \*(Ps = \*3 ; \fIx ; y\fP \(-> Move window to [x, y].
- \*(Ps = \*4 ; \fIheight ; width\fP \(-> Resize the \fIxterm\fP window to height and width in pixels.
- \*(Ps = \*5 \(-> Raise the \fIxterm\fP window to the front of the stacking order.
- \*(Ps = \*6 \(-> Lower the \fIxterm\fP window to the bottom of the stacking order.
- \*(Ps = \*7 \(-> Refresh the \fIxterm\fP window.
- \*(Ps = \*8 ; \fIheight ; width\fP \(-> Resize the text area to [height;width] in characters.
- \*(Ps = \*9 ; \*0 \(-> Restore maximized window.
- \*(Ps = \*9 ; \*1 \(-> Maximize window (i.e., resize to screen size).
- \*(Ps = \*1\*1 \(-> Report \fIxterm\fP window state.
-If the \fIxterm\fP window is open (non-iconified), it returns \*(Cs\*1\*t.
-If the \fIxterm\fP window is iconified, it returns \*(Cs\*2\*t.
- \*(Ps = \*1\*3 \(-> Report \fIxterm\fP window position as
-\*(Cs\*3\*;\*(Ix\*;\*(Iy\*t
- \*(Ps = \*1\*4 \(-> Report \fIxterm\fP window in pixels as
-\*(Cs\*s\*4\*s\*;\*s\fIheight\fP\*s\*;\*s\fIwidth\fP\*s\*t
- \*(Ps = \*1\*8 \(-> Report the size of the text area in characters as
-\*(Cs\*s\*8\*s\*;\*s\fIheight\fP\*s\*;\*s\fIwidth\fP\*s\*t
- \*(Ps = \*1\*9 \(-> Report the size of the screen in characters as
-\*(Cs\*s\*9\*s\*;\*s\fIheight\fP\*s\*;\*s\fIwidth\fP\*s\*t
- \*(Ps = \*2\*0 \(-> Report \fIxterm\fP window's icon label as
-\*(Os\*s\*L\*s\fIlabel\fP\*s\*(ST
- \*(Ps = \*2\*1 \(-> Report \fIxterm\fP window's title as
-\*(Os\*s\*l\*s\fItitle\fP\*s\*(ST
- \*(Ps >= \*2\*4 \(-> Resize to \*(Ps lines (DECSLPP)
-.
-.IP \\*(Cs\\*(Pt\\*;\\*(Pl\\*;\\*(Pb\\*;\\*(Pr\\*;\\*(Ps\\*$\\*t
-Reverse Attributes in Rectangular Area (DECRARA).
- \*(Pt\*;\*(Pl\*;\*(Pb\*;\*(Pr denotes the rectangle.
- \*(Ps denotes the attributes to reverse. 1, 4, 5, 7
-.
-.IP \\*(Cs\\*u
-Save cursor (ANSI.SYS)
-.
-.IP \\*(Cs\\*(Pt\\*;\\*(Pl\\*;\\*(Pb\\*;\\*(Pr\\*;\\*(Pp\\*;\\*(Pt\\*;\\*(Pl\\*;\\*(Pp\\*$\\*v
-Copy Rectangular Area (DECCRA)
- \*(Pt\*;\*(Pl\*;\*(Pb\*;\*(Pr denotes the rectangle.
- \*(Pp denotes the source page.
- \*(Pt\*;\*(Pl denotes the target location.
- \*(Pp denotes the target page.
-.
-.IP \\*(Cs\\*(Pt\\*s\\*;\\*(Pl\\*s\\*;\\*(Pb\\*s\\*;\\*(Pr\\*s\\*(qu\\*w
-Enable Filter Rectangle (DECEFR)
-.br
-Parameters are [top;left;bottom;right].
-.br
-Defines the coordinates of a filter rectangle and activates it.
-Anytime the locator is detected outside of the filter rectangle,
-an outside rectangle event is generated and the rectangle is disabled.
-Filter rectangles are always treated as "one-shot" events.
-Any parameters that are omitted default to the current locator position.
-If all parameters are omitted, any locator motion will be reported.
-DECELR always cancels any prevous rectangle definition.
-.
-.IP \\*(Cs\\*(Ps\\*s\\*x
-Request Terminal Parameters (DECREQTPARM)
-.br
-if \*(Ps is a "0" (default) or "1", and \fBxterm\fR is emulating VT100,
-the control sequence elicits a response of the same form
-whose parameters describe the terminal:
- \*(Ps \(-> the given \*(Ps incremented by 2.
- \*1 \(-> no parity
- \*1 \(-> eight bits
- \*1 \*2 \*8 \(-> transmit 38.4k baud
- \*1 \*2 \*8 \(-> receive 38.4k baud
- \*1 \(-> clock multiplier
- \*0 \(-> STP flags
-.
-.IP \\*(Cs\\*(Ps\\*s\\*x
-Select Attribute Change Extent (DECSACE).
- \*(Ps = \*0 \(-> from start to end position, wrapped
- \*(Ps = \*1 \(-> from start to end position, wrapped
- \*(Ps = \*2 \(-> rectangle (exact).
-.
-.IP \\*(Cs\\*(Pc\\*;\\*(Pt\\*;\\*(Pl\\*;\\*(Pb\\*;\\*(Pr\\*$\\*x
-Fill Rectangular Area (DECFRA).
- \*(Pc is the character to use.
- \*(Pt\*;\*(Pl\*;\*(Pb\*;\*(Pr denotes the rectangle.
-.
-.IP \\*(Cs\\*(Ps\\*s\\*;\\*(Pu\\*s\\*(qu\\*z
-Enable Locator Reporting (DECELR)
-.br
-Valid values for the first parameter:
- \*(Ps = \*0 \(-> Locator disabled (default)
- \*(Ps = \*1 \(-> Locator enabled
- \*(Ps = \*2 \(-> Locator enabled for one report, then disabled
-.br
-The second parameter specifies the coordinate unit for locator reports.
-.br
-Valid values for the second parameter:
- \*(Pu = \*0 or omitted \(-> default to character cells
- \*(Pu = \*1 \(-> device physical pixels
- \*(Pu = \*2 \(-> character cells
-.
-.IP \\*(Cs\\*(Pt\\*;\\*(Pl\\*;\\*(Pb\\*;\\*(Pr\\*$\\*z
-Erase Rectangular Area (DECERA).
- \*(Pt\*;\*(Pl\*;\*(Pb\*;\*(Pr denotes the rectangle.
-.
-.IP \\*(Cs\\*(Pm\\*s\\*(qu\\*{
-Select Locator Events (DECSLE)
-.br
-Valid values for the first (and any additional parameters) are:
- \*(Ps = \*0 \(-> only respond to explicit host requests (DECRQLP)
- (default) also cancels any filter rectangle
- \*(Ps = \*1 \(-> report button down transitions
- \*(Ps = \*2 \(-> do not report button down transitions
- \*(Ps = \*3 \(-> report button up transitions
- \*(Ps = \*4 \(-> do not report button up transitions
-.
-.IP \\*(Cs\\*(Pt\\*;\\*(Pl\\*;\\*(Pb\\*;\\*(Pr\\*$\\*{
-Selective Erase Rectangular Area (DECSERA).
- \*(Pt\*;\*(Pl\*;\*(Pb\*;\*(Pr denotes the rectangle.
-.
-.IP \\*(Cs\\*(Ps\\*s\\*(qu\\*|
-Request Locator Position (DECRQLP)
-.br
-Valid values for the parameter are:
- \*(Ps = \*0, 1 or omitted \(-> transmit a single DECLRP locator report
-.sp
-If Locator Reporting has been enabled by a DECELR, xterm will respond
-with a DECLRP Locator Report. This report is also generated on button
-up and down events if they have been enabled with a DECSLE, or when
-the locator is detected outside of a filter rectangle, if filter rectangles
-have been enabled with a DECEFR.
-.sp
- \(-> \*(Cs\*(Pe\*s\*;\*(Pb\*s\*;\*(Pr\*s\*;\*(Pc\*s\*;\*(Pp\*s\*&\*s\*w
-.sp
-Parameters are [event;button;row;column;page].
-.br
-Valid values for the event:
- \*(Pe = \*0 \(-> locator unavailable - no other parameters sent
- \*(Pe = \*1 \(-> request - xterm received a DECRQLP
- \*(Pe = \*2 \(-> left button down
- \*(Pe = \*3 \(-> left button up
- \*(Pe = \*4 \(-> middle button down
- \*(Pe = \*5 \(-> middle button up
- \*(Pe = \*6 \(-> right button down
- \*(Pe = \*7 \(-> right button up
- \*(Pe = \*8 \(-> M4 button down
- \*(Pe = \*9 \(-> M4 button up
- \*(Pe = \*1\*0 \(-> locator outside filter rectangle
-.br
-``button'' parameter is a bitmask indicating which buttons are pressed:
- \*(Pb = \*0 \(-> no buttons down
- \*(Pb & \*1 \(-> right button down
- \*(Pb & \*2 \(-> middle button down
- \*(Pb & \*4 \(-> left button down
- \*(Pb & \*8 \(-> M4 button down
-.br
-``row'' and ``column'' parameters are the coordinates of the locator
-position in the xterm window, encoded as ASCII decimal.
-.br
-The ``page'' parameter is not used by xterm, and will be omitted.
-.
-.Ed
-.
-.St
-.LP
-.B
-Operating System Controls
-.
-.IP \\*(Os\\*(Ps\\*s\\*;\\*(Pt\\*s\\*(ST
-.IP \\*(Os\\*(Ps\\*s\\*;\\*(Pt\\*s\\*(Be
-Set Text Parameters.
-For colors and font,
-if \*(Pt is a "?", the control sequence elicits a response which consists
-of the control sequence which would set the corresponding value.
-The \fIdtterm\fP control sequences allow you to determine the icon name
-and window title.
- \*(Ps = \*0 \(-> Change Icon Name and Window Title to \*(Pt
- \*(Ps = \*1 \(-> Change Icon Name to \*(Pt
- \*(Ps = \*2 \(-> Change Window Title to \*(Pt
- \*(Ps = \*3 \(-> Set X property on top-level window. \*(Pt should be in the form
-"\fIprop=value\fP", or just "\fIprop\fP" to delete the property
- \*(Ps = \*4 ; \fIc ; spec\fP \(-> Change Color Number \fIc\fP to
-the color specified by \fIspec\fP,
-i.e., a name or RGB specification as per \fIXParseColor\fP.
-Any number of \fIc name\fP pairs may be given.
-The color numbers correspond to the ANSI colors 0-7,
-their bright versions 8-15,
-and if supported, the remainder of the 88-color or 256-color table.
-.sp
-If a "?" is given rather than a name or RGB specification,
-xterm replies with a control sequence of the same form which can be used
-to set the corresponding color.
-Because more than one pair of color number and specification can
-be given in one control sequence, \fBxterm\fR can make more than one reply.
-.sp
-The 8 colors which may be set using \*1\*0 through \*1\*7 are
-denoted \fIdynamic colors\fR, since the corresponding control sequences
-were the first means for setting \fBxterm\fR's colors dynamically,
-i.e., after it was started.
-They are not the same as the ANSI colors.
-One or more parameters is expected for \*(Pt.
-Each successive parameter changes the next color in the list.
-The value of \*(Ps tells the starting point in the list.
-The colors are specified by name or RGB specification as per \fIXParseColor\fP.
-.sp
-If a "?" is given rather than a name or RGB specification,
-xterm replies with a control sequence of the same form which can be used
-to set the corresponding dynamic color.
-Because more than one pair of color number and specification can
-be given in one control sequence, \fBxterm\fR can make more than one reply.
-.sp
- \*(Ps = \*1\*0 \(-> Change VT100 text foreground color to \*(Pt
- \*(Ps = \*1\*1 \(-> Change VT100 text background color to \*(Pt
- \*(Ps = \*1\*2 \(-> Change text cursor color to \*(Pt
- \*(Ps = \*1\*3 \(-> Change mouse foreground color to \*(Pt
- \*(Ps = \*1\*4 \(-> Change mouse background color to \*(Pt
- \*(Ps = \*1\*5 \(-> Change Tektronix foreground color to \*(Pt
- \*(Ps = \*1\*6 \(-> Change Tektronix background color to \*(Pt
- \*(Ps = \*1\*7 \(-> Change highlight color to \*(Pt
- \*(Ps = \*1\*8 \(-> Change Tektronix cursor color to \*(Pt
-.sp
- \*(Ps = \*4\*6 \(-> Change Log File to \*(Pt (normally disabled by a
-compile-time option)
-.sp
- \*(Ps = \*5\*0 \(-> Set Font to \*(Pt
-If \*(Pt begins with a "#", index in the font menu, relative (if the
-next character is a plus or minus sign) or absolute. A number is
-expected but not required after the sign (the default is the current
-entry for relative, zero for absolute indexing).
-.sp
- \*(Ps = \*5\*1 (reserved for Emacs shell)
-.sp
- \*(Ps = \*5\*2 \(-> Manipulate Selection Data.
-These controls may be disabled using the \fIallowWindowOps\fP resource.
-The parameter \*(Pt is parsed as
-.br
- \*(Pc\*;\*(Pd
-.br
-The first, \*(Pc, may contain any character from the
-set \*c \*p \*0 \*1 \*2 \*3 \*4 \*5 \*6 \*7.
-It is used to construct a list of selection parameters for
-clipboard,
-primary,
-or cut buffers 0 through 8 respectively,
-in the order given.
-If the parameter is empty, \fIxterm\fP uses \*p\*0,
-to specify the primary selection and cut buffer 0.
-.br
-The second parameter, \*(Pd, gives the selection data.
-Normally this is a string encoded in base64.
-The data becomes the new selection,
-which is then available for pasting by other applications.
-.br
-If the second parameter is a \*?,
-\fIxterm\fP replies to the host with the selection
-data encoded using the same protocol.
-.Ed
-.
-.St
-.LP
-.B
-Privacy Message
-.IP \\*(PM\\*(Pt\\*s\\*(ST
-\fIxterm\fP implements no \*(PM functions; \*(Pt is ignored.
-\*(Pt need not be printable characters.
-.Ed
-.
-.SH
-PC-Style Function Keys
-.ds RH Function Keys
-.LP
-If \fIxterm\fP does minimal translation of the function keys, it usually does this
-with a PC-style keyboard, so PC-style function keys result.
-Sun keyboards are similar to PC keyboards.
-Both have cursor and scrolling operations printed on the keypad,
-which duplicate the smaller cursor and scrolling keypads.
-.LP
-X does not predefine NumLock (used for VT220 keyboards) or Alt (used as
-an extension for the Sun/PC keyboards) as modifiers.
-These keys are recognized as modifiers when enabled
-by the \fBnumLock\fP resource,
-or by the DECSET \*1\*0\*3\*5 control sequence.
-.LP
-The cursor keys transmit the following escape sequences depending on the
-mode specified via the \fBDECCKM\fP escape sequence.
-.TS
-center;
-cf3 cf3 cf3
-lf3w(2c) lf3w(2c) lf3w(2c) .
-Key Normal Application
-_
-Cursor Up \*(Cs\*A \*(S3\*A
-Cursor Down \*(Cs\*(cB \*(S3\*(cB
-Cursor Right \*(Cs\*C \*(S3\*C
-Cursor Left \*(Cs\*D \*(S3\*D
-_
-.TE
-The home- and end-keys
-(unlike PageUp and other keys also on the 6-key editing keypad)
-are considered "cursor keys" by \fIxterm\fP.
-Their mode is also controlled by the \fBDECCKM\fP escape sequence:
-.TS
-center;
-cf3 cf3 cf3
-lf3w(2c) lf3w(2c) lf3w(2c) .
-Key Normal Application
-_
-Home \*(Cs\*H \*(S3\*H
-End \*(Cs\*F \*(S3\*F
-_
-.TE
-.LP
-The application keypad transmits the following escape sequences depending on the
-mode specified via the \fBDECPNM\fP and \fBDECPAM\fP escape sequences.
-Use the NumLock key to override the application mode.
-.LP
-Not all keys are present on the Sun/PC keypad (e.g., PF1, Tab), but are supported by
-the program.
-.TS
-center;
-cf3 cf3 cf3 cf3 cf3
-lf3w(2c) lf3w(2c) lf3w(2c) lf3w(2c) lf3w(2c) .
-Key Numeric Application Terminfo Termcap
-_
-Space \*(Sp \*(S3\*(Sp - -
-Tab \*(Ta \*(S3\*I - -
-Enter \*(Cr \*(S3\*M kent @8
-PF1 \*(S3\*P \*(S3\*P kf1 k1
-PF2 \*(S3\*Q \*(S3\*Q kf2 k2
-PF3 \*(S3\*R \*(S3\*R kf3 k3
-PF4 \*(S3\*S \*(S3\*S kf4 k4
-* \f1(multiply)\fP \** \*(S3\*j - -
-+ \f1(add)\fP \*+ \*(S3\*k - -
-, \f1(comma)\fP \*, \*(S3\*l - -
-- \f1(minus)\fP \*- \*(S3\*m - -
-\&. \f1(Delete)\fP \*. \*(Cs\*3\*(c~ - -
-/ \f1(divide)\fP \*/ \*(S3\*o - -
-0 \f1(Insert)\fP \*0 \*(Cs\*2\*(c~ - -
-1 \f1(End)\fP \*1 \*(S3\*F kc1 K4
-2 \f1(DownArrow)\fP \*2 \*(Cs\*(cB - -
-3 \f1(PageDown)\fP \*3 \*(Cs\*6\*(c~ kc3 K5
-4 \f1(LeftArrow)\fP \*4 \*(Cs\*D - -
-5 \f1(Begin)\fP \*5 \*(Cs\*E kb2 K2
-6 \f1(RightArrow)\fP \*6 \*(Cs\*C - -
-7 \f1(Home)\fP \*7 \*(S3\*H ka1 K1
-8 \f1(UpArrow)\fP \*8 \*(Cs\*A - -
-9 \f1(PageUp)\fP \*9 \*(Cs\*5\*(c~ ka3 K3
-= (equal) \*= \*(S3\*(XX - -
-_
-.TE
-They also provide 12 function keys, as well as a few other special-purpose keys.
-.TS
-center;
-cf3 cf3
-lf3w(2c) lf3w(2c) .
-Key Escape Sequence
-_
-F1 \*(S3\*P
-F2 \*(S3\*Q
-F3 \*(S3\*R
-F4 \*(S3\*S
-F5 \*(Cs\*1\*5\*(c~
-F6 \*(Cs\*1\*7\*(c~
-F7 \*(Cs\*1\*8\*(c~
-F8 \*(Cs\*1\*9\*(c~
-F9 \*(Cs\*2\*0\*(c~
-F10 \*(Cs\*2\*1\*(c~
-F11 \*(Cs\*2\*3\*(c~
-F12 \*(Cs\*2\*4\*(c~
-_
-.TE
-.LP
-Older versions of \fIxterm\fP implement different escape sequences for F1 through F4.
-These can be activated by setting the \fBoldXtermFKeys\fP resource.
-However, since they do not correspond to any hardware terminal, they have been deprecated.
-(The DEC VT220 reserves F1 through F5 for local functions such as \fBSetup\fP).
-.TS
-center;
-cf3 cf3
-lf3w(2c) lf3w(2c) .
-Key Escape Sequence
-_
-F1 \*(Cs\*1\*1\*(c~
-F2 \*(Cs\*1\*2\*(c~
-F3 \*(Cs\*1\*3\*(c~
-F4 \*(Cs\*1\*4\*(c~
-_
-.TE
-In normal mode, i.e., a Sun/PC keyboard
-when the \fBsunKeyboard\fP resource is false,
-\fIxterm\fP recognizes function key modifiers
-which are parameters appended before the final character
-of the control sequence.
-.TS
-center;
-cf3 lf3
-cf3w(2c) lf3w(2c) .
-Code Modifiers
-_
-2 Shift
-3 Alt
-4 Shift + Alt
-5 Control
-6 Shift + Control
-7 Alt + Control
-8 Shift + Alt + Control
-_
-.TE
-For example, shift-F5 would be sent as
-\*(Cs\*1\*5\*;\*2\*(c~
-
-If the \fBalwaysUseMods\fP resource is set, the Meta modifier also is
-recognized, making parameters 9 through 16.
-.SH
-VT220-Style Function Keys
-.LP
-However, \fIxterm\fP is most useful as a DEC VT102 or VT220 emulator.
-Set the \fBsunKeyboard\fP resource to true to force a Sun/PC keyboard
-to act like a VT220 keyboard.
-.LP
-The VT102/VT220 application keypad transmits unique escape sequences in
-application mode, which are distinct from the cursor and scrolling keypad:
-.TS
-center;
-cf3 cf3 cf3
-lf3w(2c) lf3w(2c) lf3w(2c) .
-Key Numeric Application
-_
-Space \*(Sp \*(S3\*(Sp
-Tab \*(Ta \*(S3\*I
-Enter \*(Cr \*(S3\*M
-PF1 \*(S3\*P \*(S3\*P
-PF2 \*(S3\*Q \*(S3\*Q
-PF3 \*(S3\*R \*(S3\*R
-PF4 \*(S3\*S \*(S3\*S
-* \f1(multiply)\fP \** \*(S3\*j
-+ \f1(add)\fP \*+ \*(S3\*k
-, \f1(comma)\fP \*, \*(S3\*l
-- \f1(minus)\fP \*- \*(S3\*m
-\&. \f1(period)\fP \*. \*(S3\*n
-/ \f1(divide)\fP \*/ \*(S3\*o
-0 \*0 \*(S3\*p
-1 \*1 \*(S3\*q
-2 \*2 \*(S3\*r
-3 \*3 \*(S3\*(cs
-4 \*4 \*(S3\*t
-5 \*5 \*(S3\*u
-6 \*6 \*(S3\*v
-7 \*7 \*(S3\*w
-8 \*8 \*(S3\*x
-9 \*9 \*(S3\*y
-= (equal) \*= \*(S3\*(XX
-_
-.TE
-The VT220 provides a 6-key editing keypad,
-which is analogous to that on the PC keyboard.
-It is not affected by \fBDECCKM\fP or \fBDECPNM\fP/\fBDECPAM\fP:
-.TS
-center;
-cf3 cf3 cf3
-lf3w(2c) lf3w(2c) lf3w(2c) .
-Key Normal Application
-_
-\f1Insert\fP \*(Cs\*2\*(c~ \*(Cs\*2\*(c~
-\f1Delete\fP \*(Cs\*3\*(c~ \*(Cs\*3\*(c~
-\f1Home\fP \*(Cs\*1\*(c~ \*(Cs\*1\*(c~
-\f1End\fP \*(Cs\*4\*(c~ \*(Cs\*4\*(c~
-\f1PageUp\fP \*(Cs\*5\*(c~ \*(Cs\*5\*(c~
-\f1PageDown\fP \*(Cs\*6\*(c~ \*(Cs\*6\*(c~
-_
-.TE
-.LP
-The VT220 provides 8 additional function keys.
-With a Sun/PC keyboard, access these keys by Control/F1 for F13, etc.
-.TS
-center;
-cf3 cf3
-lf3w(2c) lf3w(2c) .
-Key Escape Sequence
-_
-F13 \*(Cs\*2\*5\*(c~
-F14 \*(Cs\*2\*6\*(c~
-F15 \*(Cs\*2\*8\*(c~
-F16 \*(Cs\*2\*9\*(c~
-F17 \*(Cs\*3\*1\*(c~
-F18 \*(Cs\*3\*2\*(c~
-F19 \*(Cs\*3\*3\*(c~
-F20 \*(Cs\*3\*4\*(c~
-_
-.TE
-.SH
-VT52-Style Function Keys
-.LP
-A VT52 does not have function keys, but it does have a numeric keypad and cursor keys.
-They differ from the other emulations by the prefix.
-Also, the cursor keys do not change:
-.TS
-center;
-cf3 cf3
-lf3w(2c) lf3w(2c) .
-Key Normal/Application
-_
-Cursor Up \*(Es\*A
-Cursor Down \*(Es\*(cB
-Cursor Right \*(Es\*C
-Cursor Left \*(Es\*D
-_
-.TE
-The keypad is similar:
-.TS
-center;
-cf3 cf3 cf3
-lf3w(2c) lf3w(2c) lf3w(2c) .
-Key Numeric Application
-_
-Space \*(Sp \*(Es\*?\*(Sp
-Tab \*(Ta \*(Es\*?\*I
-Enter \*(Cr \*(Es\*?\*M
-PF1 \*(Es\*P \*(Es\*P
-PF2 \*(Es\*Q \*(Es\*Q
-PF3 \*(Es\*R \*(Es\*R
-PF4 \*(Es\*S \*(Es\*S
-* \f1(multiply)\fP \** \*(Es\*?\*j
-+ \f1(add)\fP \*+ \*(Es\*?\*k
-, \f1(comma)\fP \*, \*(Es\*?\*l
-- \f1(minus)\fP \*- \*(Es\*?\*m
-\&. \f1(period)\fP \*. \*(Es\*?\*n
-/ \f1(divide)\fP \*/ \*(Es\*?\*o
-0 \*0 \*(Es\*?\*p
-1 \*1 \*(Es\*?\*q
-2 \*2 \*(Es\*?\*r
-3 \*3 \*(Es\*?\*(cs
-4 \*4 \*(Es\*?\*t
-5 \*5 \*(Es\*?\*u
-6 \*6 \*(Es\*?\*v
-7 \*7 \*(Es\*?\*w
-8 \*8 \*(Es\*?\*x
-9 \*9 \*(Es\*?\*y
-= (equal) \*= \*(Es\*?\*(XX
-_
-.TE
-.SH
-Sun-Style Function Keys
-.LP
-The \fIxterm\fP program provides support for Sun keyboards more directly, by
-a menu toggle that causes it to send Sun-style function key codes rather than VT220.
-Note, however, that the \fIsun\fP and \fIVT100\fP emulations are not really
-compatible. For example, their wrap-margin behavior differs.
-.LP
-Only function keys are altered; keypad and cursor keys are the same.
-The emulation responds identically.
-See the xterm-sun terminfo entry for details.
-.SH
-HP-Style Function Keys
-.LP
-Similarly, \fIxterm\fP can be compiled to support HP keyboards.
-See the xterm-hp terminfo entry for details.
-.SH
-The Alternate Screen Buffer
-.LP
-\fBXterm\fP maintains two screen buffers.
-The normal screen buffer allows you to scroll back to view saved lines
-of output up to the maximum set by the \fBsaveLines\fP resource.
-The alternate screen buffer is exactly as large as the display,
-contains no additional saved lines.
-When the alternate screen buffer is active,
-you cannot scroll back to view saved lines.
-\fBXterm\fP provides control sequences and menu entries
-for switching between the two.
-.LP
-Most full-screen applications use terminfo or termcap to obtain
-strings used to start/stop full-screen mode,
-i.e., \fIsmcup\fP and \fIrmcup\fP for terminfo,
-or the corresponding \fIti\fP and \fIte\fP for termcap.
-The \fBtiteInhibit\fP resource removes the \fIti\fP and \fIte\fP strings
-from the TERMCAP string which is set in the environment for some platforms.
-That is not done when \fBxterm\fP is built with terminfo libraries because
-terminfo does not provide the whole text of the termcap data in one piece.
-It would not work for terminfo anyway, since terminfo data is not passed
-in environment variables;
-setting an environment variable in this manner would have no effect on
-the application's ability to switch between normal and alternate screen
-buffers.
-Instead, the newer private mode controls
-(such as \*1\*0\*4\*9)
-for switching between normal
-and alternate screen buffers simply disable the switching.
-They add other features such as clearing the display for the same reason:
-to make the details of switching independent of the application that
-requests the switch.
-.SH
-Bracketed Paste Mode
-.ds RH Bracketed Paste Mode
-.LP
-When bracketed paste mode is set,
-pasted text is bracketed with control sequences
-so that the program can differentiate pasted text from typed-in text.
-When bracketed paste mode is set,
-the program will receive: ESC [ 200 ~,
-followed by the pasted text, followed by ESC [ 201 ~.
-.SH
-Mouse Tracking
-.ds RH Mouse Tracking
-.LP
-The VT widget can be set to send the mouse position and other
-information on button presses. These modes are typically used by
-editors and other full-screen applications that want to make use of
-the mouse.
-
-There are six mutually exclusive modes.
-One is DEC Locator mode, enabled by the
-DECELR \*(Cs\*(Ps\*s\*;\*(Ps\*s\*s\*'\*s\*z
-control sequence, and is not described here
-(control sequences are summarized above).
-The remaining five
-modes are each enabled (or disabled) by a different parameter in
-DECSET \*(Cs\*?\*(Pm\*s\*h
-or
-DECRST \*(Cs\*?\*(Pm\*s\*l
-control sequence.
-
-Manifest constants for the parameter values
-are defined in \fBxcharmouse.h\fP as follows:
-.
-.DS B
-#define SET_X10_MOUSE 9
-#define SET_VT200_MOUSE 1000
-#define SET_VT200_HIGHLIGHT_MOUSE 1001
-#define SET_BTN_EVENT_MOUSE 1002
-#define SET_ANY_EVENT_MOUSE 1003
-.DE
-.LP
-The motion reporting modes are strictly \fIxterm\fP extensions, and are not
-part of any standard, though they are analogous to the DEC VT200 DECELR
-locator reports.
-
-Parameters (such as pointer position and button number) for all mouse
-tracking escape sequences generated by \fIxterm\fP
-encode numeric parameters in a single character as
-\fIvalue\fP+32.
-For example, \*! specifies the value 1.
-The upper left character position on the terminal is denoted as 1,1.
-
-X10 compatibility mode sends an escape sequence only on button press,
-encoding the location and the mouse button pressed.
-It is enabled by specifying parameter 9 to DECSET.
-On button press, \fIxterm\fP sends
-\*(Cs\*M\*(Cb\*(Cx\*(Cy (6 characters).
-\*(Cb is button\-1.
-\*(Cx and \*(Cy are the x and y coordinates of the mouse when the
-button was pressed.
-
-Normal tracking mode sends an escape sequence on both button press and
-release. Modifier key (shift, ctrl, meta) information is also sent.
-It is enabled by specifying parameter 1000 to DECSET.
-On button press or release, \fIxterm\fP sends
-\*(Cs\*M\*(Cb\*(Cx\*(Cy.
-The low two bits of \*(Cb encode button information:
-0=MB1 pressed, 1=MB2 pressed, 2=MB3 pressed, 3=release.
-The next three bits encode the modifiers which were down when the button was
-pressed and are added together: 4=Shift, 8=Meta, 16=Control.
-Note however that the shift and control bits are normally unavailable
-because \fIxterm\fP uses the control modifier with mouse for popup menus,
-and the shift modifier is used in the default translations for button events.
-The \fIMeta\fP modifier recognized by \fIxterm\fP is the \fImod1\fP mask,
-and is not necessarily the "Meta" key (see \fIxmodmap\fP).
-\*(Cx and \*(Cy are the x and y coordinates of the mouse event, encoded as
-in X10 mode.
-
-Wheel mice may return buttons 4 and 5.
-Those buttons are represented by the same event codes
-as buttons 1 and 2 respectively,
-except that 64 is added to the event code.
-Release events for the wheel buttons are not reported.
-
-Mouse highlight tracking notifies a program of a button press, receives a
-range of lines from the program, highlights the region covered by
-the mouse within that range until button release, and then sends the
-program the release coordinates.
-It is enabled by specifying parameter 1001 to DECSET.
-Highlighting is performed only for button 1, though other button events
-can be received.
-\fBWarning:\fP use of this mode requires a cooperating program or it will
-hang \fIxterm.\fP
-On button press, the same information as for normal tracking is
-generated; \fIxterm\fP then waits for the program to send mouse
-tracking information.
-\fIAll X events are ignored until the proper escape sequence is
-received from the pty:\fP
-\*(Cs\*(Ps\*s\*;\*(Ps\*s\*;\*(Ps\*s\*;\*(Ps\*s\*;\*(Ps\*s\*T.
-The parameters are \fIfunc, startx, starty, firstrow,\fP and \fIlastrow.\fP
-\fIfunc\fP is non-zero to initiate highlight tracking and zero to abort.
-\fIstartx\fP and \fIstarty\fP give the starting x and y location for
-the highlighted region. The ending location tracks the mouse, but
-will never be above row \fIfirstrow\fP and will always be above row
-\fIlastrow.\fP (The top of the screen is row 1.)
-When the button is released, \fIxterm\fP reports the ending position
-one of two ways: if the start and end coordinates are valid text
-locations: \*(Cs\*t\*(Cx\*(Cy. If either coordinate is past
-the end of the line:
-\*(Cs\*T\*(Cx\*(Cy\*(Cx\*(Cy\*(Cx\*(Cy.
-The parameters are \fIstartx, starty, endx, endy, mousex,\fP and \fImousey.\fP
-\fIstartx, starty, endx, \fPand\fI endy\fP give the starting and
-ending character positions of the region. \fImousex\fP and \fImousey\fP
-give the location of the mouse at button up, which may not be over a
-character.
-
-Button-event tracking is essentially the same as normal tracking, but
-\fIxterm\fP also reports button-motion events. Motion events
-are reported only if the mouse pointer has moved to a different character
-cell. It is enabled by specifying parameter 1002 to DECSET.
-On button press or release, \fIxterm\fP sends the same codes used by normal
-tracking mode. On button-motion events, \fIxterm\fP adds 32 to the event code
-(the third character, \*(Cb).
-The other bits of the event code specify button and modifier keys as in normal mode.
-For example, motion into cell x,y with button 1
-down is reported as \*(Cs\*M\*@\*(Cx\*(Cy.
-( \*@ = 32 + 0 (button 1) + 32 (motion indicator) ).
-Similarly, motion with button 3
-down is reported as \*(Cs\*M\*(cB\*(Cx\*(Cy.
-( \*(cB = 32 + 2 (button 3) + 32 (motion indicator) ).
-
-Any-event mode is the same as button-event mode, except that all motion
-events are reported, even if no mouse button is down.
-It is enabled by specifying 1003 to DECSET.
-.
-.br
-.ds RH Tektronix 4014 Mode
-.SH
-Tektronix 4014 Mode
-.LP
-Most of these sequences are standard Tektronix 4014 control sequences.
-Graph mode supports the 12-bit addressing of the Tektronix 4014.
-The major features missing are
-the write-through and defocused modes.
-This document does not describe the commands used in the various
-Tektronix plotting modes but does describe the commands to switch modes.
-.St
-.IP \\*(Be
-Bell (Ctrl-G)
-.IP \\*(Bs
-Backspace (Ctrl-H)
-.IP \\*(Ta
-Horizontal Tab (Ctrl-I)
-.IP \\*(Lf
-Line Feed or New Line (Ctrl-J)
-.IP \\*(Vt
-Cursor up (Ctrl-K)
-.IP \\*(Ff
-Form Feed or New Page (Ctrl-L)
-.IP \\*(Cr
-Carriage Return (Ctrl-M)
-.IP \\*(Es\\*(Et
-Switch to VT100 Mode (ESC Ctrl-C)
-.IP \\*(Es\\*(En
-Return Terminal Status (ESC Ctrl-E)
-.IP \\*(Es\\*(Ff
-PAGE (Clear Screen) (ESC Ctrl-L)
-.IP \\*(Es\\*(So
-Begin 4015 APL mode (ignored by \fIxterm\fP) (ESC Ctrl-N)
-.IP \\*(Es\\*(Si
-End 4015 APL mode (ignored by \fIxterm\fP) (ESC Ctrl-O)
-.IP \\*(Es\\*(Eb
-COPY (Save Tektronix Codes to file COPYyyyy-mm-dd.hh:mm:ss) (ESC Ctrl-W)
-.IP \\*(Es\\*(Ca
-Bypass Condition (ESC Ctrl-X)
-.IP \\*(Es\\*(Su
-GIN mode (ESC Ctrl-Z)
-.IP \\*(Es\\*(Fs
-Special Point Plot Mode (ESC Ctrl-\e)
-.IP \\*(Es\\*8
-Select Large Character Set
-.IP \\*(Es\\*9
-Select #2 Character Set
-.IP \\*(Es\\*:
-Select #3 Character Set
-.IP \\*(Es\\*;
-Select Small Character Set
-.IP \\*(Os\\*(Ps\\*s\\*;\\*(Pt\\*s\\*(Be
-Set Text Parameters of VT window
- \*(Ps = \*0 \(-> Change Icon Name and Window Title to \*(Pt
- \*(Ps = \*1 \(-> Change Icon Name to \*(Pt
- \*(Ps = \*2 \(-> Change Window Title to \*(Pt
- \*(Ps = \*4\*6 \(-> Change Log File to \*(Pt (normally disabled by a
-compile-time option)
-.IP \\*(Es\\*`
-Normal Z Axis and Normal (solid) Vectors
-.IP \\*(Es\\*a
-Normal Z Axis and Dotted Line Vectors
-.IP \\*(Es\\*b
-Normal Z Axis and Dot-Dashed Vectors
-.IP \\*(Es\\*c
-Normal Z Axis and Short-Dashed Vectors
-.IP \\*(Es\\*d
-Normal Z Axis and Long-Dashed Vectors
-.IP \\*(Es\\*h
-Defocused Z Axis and Normal (solid) Vectors
-.IP \\*(Es\\*i
-Defocused Z Axis and Dotted Line Vectors
-.IP \\*(Es\\*j
-Defocused Z Axis and Dot-Dashed Vectors
-.IP \\*(Es\\*k
-Defocused Z Axis and Short-Dashed Vectors
-.IP \\*(Es\\*l
-Defocused Z Axis and Long-Dashed Vectors
-.IP \\*(Es\\*p
-Write-Thru Mode and Normal (solid) Vectors
-.IP \\*(Es\\*q
-Write-Thru Mode and Dotted Line Vectors
-.IP \\*(Es\\*r
-Write-Thru Mode and Dot-Dashed Vectors
-.IP \\*(Es\\*(cs
-Write-Thru Mode and Short-Dashed Vectors
-.IP \\*(Es\\*t
-Write-Thru Mode and Long-Dashed Vectors
-.IP \\*(Fs
-Point Plot Mode (Ctrl-\e)
-.IP \\*(Gs
-Graph Mode (Ctrl-])
-.IP \\*(Rs
-Incremental Plot Mode (Ctrl-^)
-.IP \\*(Us
-Alpha Mode (Ctrl-_)
-.Ed
-.
-.
-.br
-.ds RH VT52 Mode
-.SH
-VT52 Mode
-.LP
-Parameters for cursor movement are at the end of the \*(Es\*Y escape sequence.
-Each ordinate is encoded in a single character as \fIvalue\fP+32.
-For example, \*! is 1.
-The screen coordinate system is 0-based.
-.St
-.IP \\*(Es\\*A
-Cursor up.
-.IP \\*(Es\\*(cB
-Cursor down.
-.IP \\*(Es\\*C
-Cursor right.
-.IP \\*(Es\\*D
-Cursor left.
-.IP \\*(Es\\*F
-Enter graphics mode.
-.IP \\*(Es\\*G
-Exit graphics mode.
-.IP \\*(Es\\*H
-Move the cursor to the home position.
-.IP \\*(Es\\*I
-Reverse line feed.
-.IP \\*(Es\\*J
-Erase from the cursor to the end of the screen.
-.IP \\*(Es\\*K
-Erase from the cursor to the end of the line.
-.IP \\*(Es\\*Y\\*(Ps\\*s\\*(Ps
-Move the cursor to given row and column.
-.IP \\*(Es\\*Z
-Identify
- \(-> \*(Es\*s\*/\*s\*Z (``I am a VT52.'')
-.IP \\*(Es\\*=
-Enter alternate keypad mode.
-.IP \\*(Es\\*>
-Exit alternate keypad mode.
-.IP \\*(Es\\*<
-Exit VT52 mode (Enter VT100 mode).
-.Ed
-.
-.if n .pl \n(nlu+1v
diff --git a/nx-X11/programs/xterm/cursor.c b/nx-X11/programs/xterm/cursor.c
deleted file mode 100644
index d77645acd..000000000
--- a/nx-X11/programs/xterm/cursor.c
+++ /dev/null
@@ -1,345 +0,0 @@
-/* $XTermId: cursor.c,v 1.36 2005/08/05 01:25:39 tom Exp $ */
-
-/*
- * $Xorg: cursor.c,v 1.3 2000/08/17 19:55:08 cpqbld Exp $
- */
-
-/* $XFree86: xc/programs/xterm/cursor.c,v 3.18 2005/08/05 01:25:39 dickey Exp $ */
-
-/*
- * Copyright 2002-2004,2005 by Thomas E. Dickey
- *
- * All Rights Reserved
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sublicense, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- * IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY
- * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- * Except as contained in this notice, the name(s) of the above copyright
- * holders shall not be used in advertising or otherwise to promote the
- * sale, use or other dealings in this Software without prior written
- * authorization.
- *
- * Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
- *
- * All Rights Reserved
- *
- * Permission to use, copy, modify, and distribute this software and its
- * documentation for any purpose and without fee is hereby granted,
- * provided that the above copyright notice appear in all copies and that
- * both that copyright notice and this permission notice appear in
- * supporting documentation, and that the name of Digital Equipment
- * Corporation not be used in advertising or publicity pertaining to
- * distribution of the software without specific, written prior permission.
- *
- *
- * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
- * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
- * DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
- * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
- * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
- * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- * SOFTWARE.
- */
-
-/* cursor.c */
-
-#include <xterm.h>
-#include <data.h>
-
-#include <assert.h>
-
-/*
- * Moves the cursor to the specified position, checking for bounds.
- * (this includes scrolling regions)
- * The origin is considered to be 0, 0 for this procedure.
- */
-void
-CursorSet(TScreen * screen, int row, int col, unsigned flags)
-{
- int use_row = row;
- int max_row;
-
- col = (col < 0 ? 0 : col);
- set_cur_col(screen, (col <= screen->max_col ? col : screen->max_col));
- max_row = screen->max_row;
- if (flags & ORIGIN) {
- use_row += screen->top_marg;
- max_row = screen->bot_marg;
- }
- use_row = (use_row < 0 ? 0 : use_row);
- set_cur_row(screen, (use_row <= max_row ? use_row : max_row));
- screen->do_wrap = 0;
-
- TRACE(("CursorSet(%d,%d) margins [%d..%d] -> %d,%d %s\n",
- row, col,
- screen->top_marg,
- screen->bot_marg,
- screen->cur_row,
- screen->cur_col,
- (flags & ORIGIN ? "origin" : "normal")));
-}
-
-/*
- * moves the cursor left n, no wrap around
- */
-void
-CursorBack(TScreen * screen, int n)
-{
- int i, j, k, rev;
-
- if ((rev = (term->flags & (REVERSEWRAP | WRAPAROUND)) ==
- (REVERSEWRAP | WRAPAROUND)) != 0
- && screen->do_wrap)
- n--;
- if ((screen->cur_col -= n) < 0) {
- if (rev) {
- if ((i = ((j = MaxCols(screen))
- * screen->cur_row) + screen->cur_col) < 0) {
- k = j * MaxRows(screen);
- i += ((-i) / k + 1) * k;
- }
- set_cur_row(screen, i / j);
- set_cur_col(screen, i % j);
- } else
- set_cur_col(screen, 0);
- }
- screen->do_wrap = 0;
-}
-
-/*
- * moves the cursor forward n, no wraparound
- */
-void
-CursorForward(TScreen * screen, int n)
-{
- int next = screen->cur_col + n;
- int max = CurMaxCol(screen, screen->cur_row);
-
- if (next > max)
- next = max;
-
- set_cur_col(screen, next);
- screen->do_wrap = 0;
-}
-
-/*
- * moves the cursor down n, no scrolling.
- * Won't pass bottom margin or bottom of screen.
- */
-void
-CursorDown(TScreen * screen, int n)
-{
- int max;
- int next = screen->cur_row + n;
-
- max = (screen->cur_row > screen->bot_marg ?
- screen->max_row : screen->bot_marg);
- if (next > max)
- next = max;
- if (next > screen->max_row)
- next = screen->max_row;
-
- set_cur_row(screen, next);
- screen->do_wrap = 0;
-}
-
-/*
- * moves the cursor up n, no linestarving.
- * Won't pass top margin or top of screen.
- */
-void
-CursorUp(TScreen * screen, int n)
-{
- int min;
- int next = screen->cur_row - n;
-
- min = ((screen->cur_row < screen->top_marg)
- ? 0
- : screen->top_marg);
- if (next < min)
- next = min;
- if (next < 0)
- next = 0;
-
- set_cur_row(screen, next);
- screen->do_wrap = 0;
-}
-
-/*
- * Moves cursor down amount lines, scrolls if necessary.
- * Won't leave scrolling region. No carriage return.
- */
-void
-xtermIndex(TScreen * screen, int amount)
-{
- int j;
-
- /*
- * indexing when below scrolling region is cursor down.
- * if cursor high enough, no scrolling necessary.
- */
- if (screen->cur_row > screen->bot_marg
- || screen->cur_row + amount <= screen->bot_marg) {
- CursorDown(screen, amount);
- return;
- }
-
- CursorDown(screen, j = screen->bot_marg - screen->cur_row);
- xtermScroll(screen, amount - j);
-}
-
-/*
- * Moves cursor up amount lines, reverse scrolls if necessary.
- * Won't leave scrolling region. No carriage return.
- */
-void
-RevIndex(TScreen * screen, int amount)
-{
- /*
- * reverse indexing when above scrolling region is cursor up.
- * if cursor low enough, no reverse indexing needed
- */
- if (screen->cur_row < screen->top_marg
- || screen->cur_row - amount >= screen->top_marg) {
- CursorUp(screen, amount);
- return;
- }
-
- RevScroll(screen, amount - (screen->cur_row - screen->top_marg));
- CursorUp(screen, screen->cur_row - screen->top_marg);
-}
-
-/*
- * Moves Cursor To First Column In Line
- * (Note: xterm doesn't implement SLH, SLL which would affect use of this)
- */
-void
-CarriageReturn(TScreen * screen)
-{
- set_cur_col(screen, 0);
- screen->do_wrap = 0;
-}
-
-/*
- * Save Cursor and Attributes
- */
-void
-CursorSave(XtermWidget tw)
-{
- TScreen *screen = &tw->screen;
- SavedCursor *sc = &screen->sc[screen->alternate != False];
-
- sc->saved = True;
- sc->row = screen->cur_row;
- sc->col = screen->cur_col;
- sc->flags = tw->flags;
- sc->curgl = screen->curgl;
- sc->curgr = screen->curgr;
-#if OPT_ISO_COLORS
- sc->cur_foreground = tw->cur_foreground;
- sc->cur_background = tw->cur_background;
- sc->sgr_foreground = tw->sgr_foreground;
-#endif
- memmove(sc->gsets, screen->gsets, sizeof(screen->gsets));
-}
-
-/*
- * We save/restore all visible attributes, plus wrapping, origin mode, and the
- * selective erase attribute.
- */
-#define DECSC_FLAGS (ATTRIBUTES|ORIGIN|WRAPAROUND|PROTECTED)
-
-/*
- * Restore Cursor and Attributes
- */
-void
-CursorRestore(XtermWidget tw)
-{
- TScreen *screen = &tw->screen;
- SavedCursor *sc = &screen->sc[screen->alternate != False];
-
- /* Restore the character sets, unless we never did a save-cursor op.
- * In that case, we'll reset the character sets.
- */
- if (sc->saved) {
- memmove(screen->gsets, sc->gsets, sizeof(screen->gsets));
- screen->curgl = sc->curgl;
- screen->curgr = sc->curgr;
- } else {
- resetCharsets(screen);
- }
-
- tw->flags &= ~DECSC_FLAGS;
- tw->flags |= sc->flags & DECSC_FLAGS;
- CursorSet(screen,
- ((tw->flags & ORIGIN)
- ? sc->row - screen->top_marg
- : sc->row),
- sc->col, tw->flags);
-
-#if OPT_ISO_COLORS
- tw->sgr_foreground = sc->sgr_foreground;
- SGR_Foreground(tw->flags & FG_COLOR ? sc->cur_foreground : -1);
- SGR_Background(tw->flags & BG_COLOR ? sc->cur_background : -1);
-#endif
-}
-
-/*
- * Move the cursor to the first column of the n-th next line.
- */
-void
-CursorNextLine(TScreen * screen, int count)
-{
- CursorDown(screen, count < 1 ? 1 : count);
- CarriageReturn(screen);
- do_xevents();
-}
-
-/*
- * Move the cursor to the first column of the n-th previous line.
- */
-void
-CursorPrevLine(TScreen * screen, int count)
-{
- CursorUp(screen, count < 1 ? 1 : count);
- CarriageReturn(screen);
- do_xevents();
-}
-
-#if OPT_TRACE
-int
-set_cur_row(TScreen * screen, int value)
-{
- assert(screen != 0);
- assert(value >= 0);
- assert(value <= screen->max_row);
- screen->cur_row = value;
- return value;
-}
-
-int
-set_cur_col(TScreen * screen, int value)
-{
- assert(screen != 0);
- assert(value >= 0);
- assert(value <= screen->max_col);
- screen->cur_col = value;
- return value;
-}
-#endif /* OPT_TRACE */
diff --git a/nx-X11/programs/xterm/data.c b/nx-X11/programs/xterm/data.c
deleted file mode 100644
index 6fbf85cd5..000000000
--- a/nx-X11/programs/xterm/data.c
+++ /dev/null
@@ -1,127 +0,0 @@
-/* $XTermId: data.c,v 1.77 2005/09/18 23:48:12 tom Exp $ */
-
-/*
- * $Xorg: data.c,v 1.3 2000/08/17 19:55:08 cpqbld Exp $
- */
-
-/* $XFree86: xc/programs/xterm/data.c,v 3.32 2005/09/18 23:48:12 dickey Exp $ */
-
-/*
- * Copyright 2002-2004,2005 by Thomas E. Dickey
- *
- * All Rights Reserved
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sublicense, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- * IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY
- * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- * Except as contained in this notice, the name(s) of the above copyright
- * holders shall not be used in advertising or otherwise to promote the
- * sale, use or other dealings in this Software without prior written
- * authorization.
- *
- * Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
- *
- * All Rights Reserved
- *
- * Permission to use, copy, modify, and distribute this software and its
- * documentation for any purpose and without fee is hereby granted,
- * provided that the above copyright notice appear in all copies and that
- * both that copyright notice and this permission notice appear in
- * supporting documentation, and that the name of Digital Equipment
- * Corporation not be used in advertising or publicity pertaining to
- * distribution of the software without specific, written prior permission.
- *
- *
- * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
- * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
- * DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
- * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
- * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
- * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- * SOFTWARE.
- */
-
-#include <data.h>
-
-Widget toplevel; /* top-most widget in xterm */
-
-#if OPT_TEK4014
-Char *Tpushb;
-Char *Tpushback;
-TekLink *TekRefresh;
-TekWidget tekWidget;
-Widget tekshellwidget;
-int T_lastx = -1;
-int T_lasty = -1;
-int Ttoggled = 0;
-jmp_buf Tekend;
-#endif
-
-char *ProgramName;
-
-Arg ourTopLevelShellArgs[] =
-{
- {XtNallowShellResize, (XtArgVal) TRUE},
- {XtNinput, (XtArgVal) TRUE},
-};
-Cardinal number_ourTopLevelShellArgs = 2;
-
-Bool waiting_for_initial_map;
-
-Atom wm_delete_window; /* for ICCCM delete window */
-
-XTERM_RESOURCE resource;
-
-PtyData *VTbuffer;
-
-jmp_buf VTend;
-
-#ifdef DEBUG
-int debug = 0; /* true causes error messages to be displayed */
-#endif /* DEBUG */
-
-XtAppContext app_con;
-XtermWidget term; /* master data structure for client */
-char *xterm_name; /* argv[0] */
-
-int hold_screen;
-SIG_ATOMIC_T need_cleanup = FALSE;
-
-#if OPT_ZICONBEEP
-int zIconBeep; /* non-zero means beep; see charproc.c for details -IAN! */
-Boolean zIconBeep_flagged; /* True if the icon name has been changed */
-#endif /* OPT_ZICONBEEP */
-
-#if OPT_SAME_NAME
-Boolean sameName; /* Don't change the title or icon name if it
- is the same. This prevents flicker on the
- screen at the cost of an extra request to
- the server */
-#endif
-
-int am_slave = -1; /* set to file-descriptor if we're a slave process */
-int max_plus1;
-PtySelect Select_mask;
-PtySelect X_mask;
-PtySelect pty_mask;
-char *ptydev;
-char *ttydev;
-
-Boolean waitingForTrackInfo = False;
-EventMode eventMode = NORMAL;
diff --git a/nx-X11/programs/xterm/data.h b/nx-X11/programs/xterm/data.h
deleted file mode 100644
index 04e36786e..000000000
--- a/nx-X11/programs/xterm/data.h
+++ /dev/null
@@ -1,207 +0,0 @@
-/* $XTermId: data.h,v 1.92 2005/09/18 23:48:12 tom Exp $ */
-
-/*
- * $Xorg: data.h,v 1.3 2000/08/17 19:55:08 cpqbld Exp $
- */
-
-/* $XFree86: xc/programs/xterm/data.h,v 3.37 2005/09/18 23:48:12 dickey Exp $ */
-
-/*
- * Copyright 2002-2004,2005 by Thomas E. Dickey
- *
- * All Rights Reserved
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sublicense, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- * IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY
- * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- * Except as contained in this notice, the name(s) of the above copyright
- * holders shall not be used in advertising or otherwise to promote the
- * sale, use or other dealings in this Software without prior written
- * authorization.
- *
- * Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
- *
- * All Rights Reserved
- *
- * Permission to use, copy, modify, and distribute this software and its
- * documentation for any purpose and without fee is hereby granted,
- * provided that the above copyright notice appear in all copies and that
- * both that copyright notice and this permission notice appear in
- * supporting documentation, and that the name of Digital Equipment
- * Corporation not be used in advertising or publicity pertaining to
- * distribution of the software without specific, written prior permission.
- *
- *
- * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
- * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
- * DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
- * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
- * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
- * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- * SOFTWARE.
- */
-
-#ifndef included_data_h
-#define included_data_h 1
-
-#include <xterm.h>
-
-extern Widget toplevel;
-
-extern XtAppContext app_con;
-
-#ifdef VMS
-/* actually in vms.c */
-extern int tt_width;
-extern int tt_length;
-extern int tt_changed;
-extern int tt_pasting;
-extern int tt_new_output;
-#define VMS_TERM_BUFFER_SIZE 500
-struct q_head {
- int flink;
- int blink;
-};
-extern struct q_head read_queue;
-#endif
-
-#if OPT_TEK4014
-extern Char *Tpushb;
-extern Char *Tpushback;
-extern TekLink *TekRefresh;
-extern TekWidget tekWidget;
-extern Widget tekshellwidget;
-extern int T_lastx;
-extern int T_lasty;
-extern int Ttoggled;
-extern jmp_buf Tekend;
-#endif
-
-extern char *ptydev;
-extern char *ttydev;
-extern char *xterm_name;
-extern int hold_screen;
-
-#if OPT_ZICONBEEP
-extern int zIconBeep;
-extern Boolean zIconBeep_flagged;
-#endif
-
-#if OPT_SAME_NAME
-extern Boolean sameName;
-#endif
-
-extern PtyData *VTbuffer;
-extern int am_slave;
-extern int max_plus1;
-extern jmp_buf VTend;
-
-#ifdef DEBUG
-extern int debug;
-#endif /* DEBUG */
-
-extern PtySelect Select_mask;
-extern PtySelect X_mask;
-extern PtySelect pty_mask;
-
-extern Boolean waitingForTrackInfo;
-
-extern EventMode eventMode;
-
-extern XtermWidget term;
-
-extern SIG_ATOMIC_T need_cleanup;
-
-#if defined(HAVE_XKB_BELL_EXT)
-#include <X11/XKBlib.h> /* has the prototype */
-#include <X11/extensions/XKBbells.h> /* has the XkbBI_xxx definitions */
-#endif
-
-#ifndef XkbBI_Info
-#define XkbBI_Info 0
-#define XkbBI_MinorError 1
-#define XkbBI_MajorError 2
-#define XkbBI_TerminalBell 9
-#define XkbBI_MarginBell 10
-#endif
-
-extern char *ProgramName;
-extern Arg ourTopLevelShellArgs[];
-extern Cardinal number_ourTopLevelShellArgs;
-extern Bool waiting_for_initial_map;
-extern Atom wm_delete_window;
-
-typedef struct XTERM_RESOURCE {
- char *xterm_name;
- char *icon_geometry;
- char *title;
- char *icon_name;
- char *term_name;
- char *tty_modes;
-
- int minBufSize;
- int maxBufSize;
-
- Boolean hold_screen; /* true if we keep window open */
- Boolean utmpInhibit;
- Boolean utmpDisplayId;
- Boolean messages;
-
- String keyboardType;
- Boolean sunFunctionKeys; /* %%% should be widget resource? */
-#if OPT_SUNPC_KBD
- Boolean sunKeyboard;
-#endif
-#if OPT_HP_FUNC_KEYS
- Boolean hpFunctionKeys;
-#endif
-#if OPT_SCO_FUNC_KEYS
- Boolean scoFunctionKeys;
-#endif
-
-#if OPT_INITIAL_ERASE
- Boolean ptyInitialErase; /* if true, use pty's sense of erase char */
- Boolean backarrow_is_erase; /* override backspace/delete */
-#endif
- Boolean wait_for_map;
- Boolean useInsertMode;
-#if OPT_ZICONBEEP
- int zIconBeep; /* beep level when output while iconified */
-#endif
-#if OPT_PTY_HANDSHAKE
- Boolean ptyHandshake; /* use pty-handshaking */
-#endif
-#if OPT_SAME_NAME
- Boolean sameName; /* Don't change the title or icon name if it is
- * the same. This prevents flicker on the
- * screen at the cost of an extra request to
- * the server.
- */
-#endif
-#if OPT_SESSION_MGT
- Boolean sessionMgt;
-#endif
-#if OPT_TOOLBAR
- Boolean toolBar;
-#endif
-} XTERM_RESOURCE;
-
-extern XTERM_RESOURCE resource;
-
-#endif /* included_data_h */
diff --git a/nx-X11/programs/xterm/doublechr.c b/nx-X11/programs/xterm/doublechr.c
deleted file mode 100644
index b768b2ed7..000000000
--- a/nx-X11/programs/xterm/doublechr.c
+++ /dev/null
@@ -1,267 +0,0 @@
-/* $XTermId: doublechr.c,v 1.43 2005/08/05 01:25:39 tom Exp $ */
-
-/*
- * $XFree86: xc/programs/xterm/doublechr.c,v 3.17 2005/08/05 01:25:39 dickey Exp $
- */
-
-/************************************************************
-
-Copyright 1997-2004,2005 by Thomas E. Dickey
-
- All Rights Reserved
-
-Permission is hereby granted, free of charge, to any person obtaining a
-copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name(s) of the above copyright
-holders shall not be used in advertising or otherwise to promote the
-sale, use or other dealings in this Software without prior written
-authorization.
-
-********************************************************/
-
-#include <xterm.h>
-#include <data.h>
-#include <fontutils.h>
-
-#include <assert.h>
-
-/*
- * The first column is all that matters for double-size characters (since the
- * controls apply to a whole line). However, it's easier to maintain the
- * information for special fonts by writing to all cells.
- */
-#define curChrSet SCRN_BUF_CSETS(screen, screen->cur_row)[0]
-
-#if OPT_DEC_CHRSET
-static void
-repaint_line(unsigned newChrSet)
-{
- register TScreen *screen = &term->screen;
- int curcol = screen->cur_col;
- int currow = screen->cur_row;
- unsigned len = MaxCols(screen);
- int width = len;
- unsigned oldChrSet = SCRN_BUF_CSETS(screen, currow)[0];
-
- assert(width > 0);
-
- /*
- * Ignore repetition.
- */
- if (oldChrSet == newChrSet)
- return;
-
- TRACE(("repaint_line(%2d,%2d) (%d)\n", currow, screen->cur_col, newChrSet));
- HideCursor();
-
- /* If switching from single-width, keep the cursor in the visible part
- * of the line.
- */
- if (CSET_DOUBLE(newChrSet)) {
- width /= 2;
- if (curcol > width)
- curcol = width;
- }
-
- /*
- * ScrnRefresh won't paint blanks for us if we're switching between a
- * single-size and double-size font. So we paint our own.
- */
- if (CSET_DOUBLE(oldChrSet) != CSET_DOUBLE(newChrSet)) {
- ClearCurBackground(screen,
- CursorY(screen, currow),
- CurCursorX(screen, currow, 0),
- (unsigned) FontHeight(screen),
- len * CurFontWidth(screen, currow));
- }
-
- /* FIXME: do VT220 softchars allow double-sizes? */
- memset(SCRN_BUF_CSETS(screen, currow), (Char) newChrSet, len);
-
- set_cur_col(screen, 0);
- ScrnUpdate(screen, currow, 0, 1, (int) len, True);
- set_cur_col(screen, curcol);
-}
-#endif
-
-/*
- * Set the line to double-height characters. The 'top' flag denotes whether
- * we'll be using it for the top (true) or bottom (false) of the line.
- */
-void
-xterm_DECDHL(Bool top)
-{
-#if OPT_DEC_CHRSET
- repaint_line((unsigned) (top ? CSET_DHL_TOP : CSET_DHL_BOT));
-#endif
-}
-
-/*
- * Set the line to single-width characters (the normal state).
- */
-void
-xterm_DECSWL(void)
-{
-#if OPT_DEC_CHRSET
- repaint_line(CSET_SWL);
-#endif
-}
-
-/*
- * Set the line to double-width characters
- */
-void
-xterm_DECDWL(void)
-{
-#if OPT_DEC_CHRSET
- repaint_line(CSET_DWL);
-#endif
-}
-
-#if OPT_DEC_CHRSET
-static void
-discard_font(TScreen * screen, XTermFonts * data)
-{
- TRACE(("discard_font chrset=%d %s\n", data->chrset,
- (data->fn != 0) ? data->fn : "<no-name>"));
-
- data->chrset = 0;
- data->flags = 0;
- if (data->gc != 0) {
- XFreeGC(screen->display, data->gc);
- data->gc = 0;
- }
- if (data->fn != 0) {
- free(data->fn);
- data->fn = 0;
- }
- if (data->fs != 0) {
- XFreeFont(screen->display, data->fs);
- data->fs = 0;
- }
-}
-
-int
-xterm_Double_index(unsigned chrset, unsigned flags)
-{
- int n;
- TScreen *screen = &term->screen;
- XTermFonts *data = screen->double_fonts;
-
- flags &= BOLD;
- TRACE(("xterm_Double_index chrset=%#x, flags=%#x\n", chrset, flags));
-
- for (n = 0; n < screen->fonts_used; n++) {
- if (data[n].chrset == chrset
- && data[n].flags == flags) {
- if (n != 0) {
- XTermFonts save;
- TRACE(("...xterm_Double_index -> %d (OLD:%d)\n", n, screen->fonts_used));
- save = data[n];
- while (n > 0) {
- data[n] = data[n - 1];
- n--;
- }
- data[n] = save;
- }
- return n;
- }
- }
-
- /* Not, found, push back existing fonts and create a new entry */
- if (screen->fonts_used >= screen->cache_doublesize) {
- TRACE(("...xterm_Double_index: discard oldest\n"));
- discard_font(screen, &(data[screen->fonts_used - 1]));
- } else {
- screen->fonts_used += 1;
- }
- for (n = screen->fonts_used; n > 0; n--)
- data[n] = data[n - 1];
-
- TRACE(("...xterm_Double_index -> (NEW:%d)\n", screen->fonts_used));
-
- data[0].chrset = chrset;
- data[0].flags = flags;
- data[0].fn = 0;
- data[0].fs = 0;
- data[0].gc = 0;
- return 0;
-}
-
-/*
- * Lookup/cache a GC for the double-size character display. We save up to
- * NUM_CHRSET values.
- */
-GC
-xterm_DoubleGC(unsigned chrset, unsigned flags, GC old_gc)
-{
- XGCValues gcv;
- register TScreen *screen = &term->screen;
- unsigned long mask = (GCForeground | GCBackground | GCFont);
- int n;
- char *name;
- XTermFonts *data;
-
- if ((name = xtermSpecialFont(screen, flags, chrset)) == 0)
- return 0;
-
- n = xterm_Double_index(chrset, flags);
- data = &(screen->double_fonts[n]);
- if (data->fn != 0) {
- if (!strcmp(data->fn, name)) {
- if (data->fs != 0) {
- XCopyGC(screen->display, old_gc, (unsigned long) (~GCFont), data->gc);
- return data->gc;
- }
- }
- discard_font(screen, data);
- data->chrset = chrset;
- data->flags = flags & BOLD;
- }
- data->fn = name;
-
- TRACE(("xterm_DoubleGC %s %d: %s\n", flags & BOLD ? "BOLD" : "NORM", n, name));
-
- if ((data->fs = XLoadQueryFont(screen->display, name)) == 0) {
- /* Retry with * in resolutions */
- char *nname = xtermSpecialFont(screen, flags | NORESOLUTION, chrset);
-
- if (!nname)
- return 0;
- if ((data->fs = XLoadQueryFont(screen->display, nname)) == 0) {
- XtFree(nname);
- return 0;
- }
- XtFree(name);
- data->fn = nname;
- }
-
- TRACE(("-> OK\n"));
-
- gcv.graphics_exposures = TRUE; /* default */
- gcv.font = data->fs->fid;
- gcv.foreground = T_COLOR(screen, TEXT_FG);
- gcv.background = T_COLOR(screen, TEXT_BG);
-
- data->gc = XCreateGC(screen->display, VWindow(screen), mask, &gcv);
- XCopyGC(screen->display, old_gc, (unsigned long) (~GCFont), data->gc);
- return data->gc;
-}
-#endif
diff --git a/nx-X11/programs/xterm/error.h b/nx-X11/programs/xterm/error.h
deleted file mode 100644
index 11e777f63..000000000
--- a/nx-X11/programs/xterm/error.h
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * $Xorg: error.h,v 1.3 2000/08/17 19:55:08 cpqbld Exp $
- */
-
-
-/* $XFree86: xc/programs/xterm/error.h,v 1.8 2002/12/27 21:05:22 dickey Exp $ */
-/*
- * Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
- *
- * All Rights Reserved
- *
- * Permission to use, copy, modify, and distribute this software and its
- * documentation for any purpose and without fee is hereby granted,
- * provided that the above copyright notice appear in all copies and that
- * both that copyright notice and this permission notice appear in
- * supporting documentation, and that the name of Digital Equipment
- * Corporation not be used in advertising or publicity pertaining to
- * distribution of the software without specific, written prior permission.
- *
- *
- * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
- * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
- * DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
- * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
- * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
- * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- * SOFTWARE.
- */
-
-/* @(#)error.h X10/6.6 11/6/86 */
-
-/* main.c */
-#define ERROR_FIONBIO 11 /* main: ioctl() failed on FIONBIO */
-#define ERROR_F_GETFL 12 /* main: ioctl() failed on F_GETFL */
-#define ERROR_F_SETFL 13 /* main: ioctl() failed on F_SETFL */
-#define ERROR_OPDEVTTY 14 /* spawn: open() failed on /dev/tty */
-#define ERROR_TIOCGETP 15 /* spawn: ioctl() failed on TIOCGETP */
-#define ERROR_PTSNAME 17 /* spawn: ptsname() failed */
-#define ERROR_OPPTSNAME 18 /* spawn: open() failed on ptsname */
-#define ERROR_PTEM 19 /* spawn: ioctl() failed on I_PUSH/"ptem" */
-#define ERROR_CONSEM 20 /* spawn: ioctl() failed on I_PUSH/"consem" */
-#define ERROR_LDTERM 21 /* spawn: ioctl() failed on I_PUSH/"ldterm" */
-#define ERROR_TTCOMPAT 22 /* spawn: ioctl() failed on I_PUSH/"ttcompat" */
-#define ERROR_TIOCSETP 23 /* spawn: ioctl() failed on TIOCSETP */
-#define ERROR_TIOCSETC 24 /* spawn: ioctl() failed on TIOCSETC */
-#define ERROR_TIOCSETD 25 /* spawn: ioctl() failed on TIOCSETD */
-#define ERROR_TIOCSLTC 26 /* spawn: ioctl() failed on TIOCSLTC */
-#define ERROR_TIOCLSET 27 /* spawn: ioctl() failed on TIOCLSET */
-#define ERROR_INIGROUPS 28 /* spawn: initgroups() failed */
-#define ERROR_FORK 29 /* spawn: fork() failed */
-#define ERROR_EXEC 30 /* spawn: exec() failed */
-#define ERROR_PTYS 32 /* get_pty: not enough ptys */
-#define ERROR_PTY_EXEC 34 /* waiting for initial map */
-#define ERROR_SETUID 35 /* spawn: setuid() failed */
-#define ERROR_INIT 36 /* spawn: can't initialize window */
-#define ERROR_TIOCKSET 46 /* spawn: ioctl() failed on TIOCKSET */
-#define ERROR_TIOCKSETC 47 /* spawn: ioctl() failed on TIOCKSETC */
-#define ERROR_SPREALLOC 48 /* spawn: realloc of ttydev failed */
-#define ERROR_LUMALLOC 49 /* luit: command-line malloc failed */
-
-/* charproc.c */
-#define ERROR_SELECT 50 /* in_put: select() failed */
-#define ERROR_VINIT 54 /* VTInit: can't initialize window */
-#define ERROR_KMMALLOC1 57 /* HandleKeymapChange: malloc failed */
-
-/* Tekproc.c */
-#define ERROR_TSELECT 60 /* Tinput: select() failed */
-#define ERROR_TINIT 64 /* TekInit: can't initialize window */
-
-/* button.c */
-#define ERROR_BMALLOC2 71 /* SaltTextAway: malloc() failed */
-
-/* misc.c */
-#define ERROR_LOGEXEC 80 /* StartLog: exec() failed */
-#define ERROR_XERROR 83 /* xerror: XError event */
-#define ERROR_XIOERROR 84 /* xioerror: X I/O error */
-
-/* screen.c */
-#define ERROR_SCALLOC 90 /* Alloc: calloc() failed on base */
-#define ERROR_SCALLOC2 91 /* Alloc: calloc() failed on rows */
-#define ERROR_SREALLOC 92 /* ScreenResize: realloc() failed on alt base */
-#define ERROR_RESIZE 96 /* ScreenResize: malloc() or realloc() failed */
-#define ERROR_SAVE_PTR 102 /* ScrnPointers: malloc/realloc() failed */
-
-/* scrollbar.c */
-#define ERROR_SBRALLOC 110 /* ScrollBarOn: realloc() failed on base */
-#define ERROR_SBRALLOC2 111 /* ScrollBarOn: realloc() failed on rows */
-
-/* util.c */
-#define ERROR_MMALLOC 121 /* my_memmove: malloc/realloc failed */
diff --git a/nx-X11/programs/xterm/fontutils.c b/nx-X11/programs/xterm/fontutils.c
deleted file mode 100644
index fb4c6373c..000000000
--- a/nx-X11/programs/xterm/fontutils.c
+++ /dev/null
@@ -1,2371 +0,0 @@
-/* $XTermId: fontutils.c,v 1.184 2005/11/03 13:17:27 tom Exp $ */
-
-/*
- * $XFree86: xc/programs/xterm/fontutils.c,v 1.55 2005/11/03 13:17:27 dickey Exp $
- */
-
-/************************************************************
-
-Copyright 1998-2004,2005 by Thomas E. Dickey
-
- All Rights Reserved
-
-Permission is hereby granted, free of charge, to any person obtaining a
-copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name(s) of the above copyright
-holders shall not be used in advertising or otherwise to promote the
-sale, use or other dealings in this Software without prior written
-authorization.
-
-********************************************************/
-
-/*
- * A portion of this module (for FontNameProperties) was adapted from EMU 1.3;
- * it constructs font names with specific properties changed, e.g., for bold
- * and double-size characters.
- */
-
-#define RES_OFFSET(field) XtOffsetOf(SubResourceRec, field)
-
-#include <fontutils.h>
-#include <X11/Xmu/Drawing.h>
-
-#include <main.h>
-#include <data.h>
-#include <menu.h>
-#include <xstrings.h>
-#include <xterm.h>
-
-#include <stdio.h>
-#include <ctype.h>
-
-/* from X11/Xlibint.h - not all vendors install this file */
-#define CI_NONEXISTCHAR(cs) (((cs)->width == 0) && \
- (((cs)->rbearing|(cs)->lbearing| \
- (cs)->ascent|(cs)->descent) == 0))
-
-#define CI_GET_CHAR_INFO_1D(fs,col,def,cs) \
-{ \
- cs = def; \
- if (col >= fs->min_char_or_byte2 && col <= fs->max_char_or_byte2) { \
- if (fs->per_char == NULL) { \
- cs = &fs->min_bounds; \
- } else { \
- cs = &fs->per_char[(col - fs->min_char_or_byte2)]; \
- if (CI_NONEXISTCHAR(cs)) cs = def; \
- } \
- } \
-}
-
-#define CI_GET_CHAR_INFO_2D(fs,row,col,def,cs) \
-{ \
- cs = def; \
- if (row >= fs->min_byte1 && row <= fs->max_byte1 && \
- col >= fs->min_char_or_byte2 && col <= fs->max_char_or_byte2) { \
- if (fs->per_char == NULL) { \
- cs = &fs->min_bounds; \
- } else { \
- cs = &fs->per_char[((row - fs->min_byte1) * \
- (fs->max_char_or_byte2 - \
- fs->min_char_or_byte2 + 1)) + \
- (col - fs->min_char_or_byte2)]; \
- if (CI_NONEXISTCHAR(cs)) cs = def; \
- } \
- } \
-}
-
-#define MAX_FONTNAME 200
-
-/*
- * A structure to hold the relevant properties from a font
- * we need to make a well formed font name for it.
- */
-typedef struct {
- /* registry, foundry, family */
- char *beginning;
- /* weight */
- char *weight;
- /* slant */
- char *slant;
- /* wideness */
- char *wideness;
- /* add style */
- char *add_style;
- int pixel_size;
- char *point_size;
- int res_x;
- int res_y;
- char *spacing;
- int average_width;
- /* charset registry, charset encoding */
- char *end;
-} FontNameProperties;
-
-#if OPT_SHIFT_FONTS
-static void lookupOneFontSize(TScreen *, int);
-#endif
-
-/*
- * Returns the fields from start to stop in a dash- separated string. This
- * function will modify the source, putting '\0's in the appropiate place and
- * moving the beginning forward to after the '\0'
- *
- * This will NOT work for the last field (but we won't need it).
- */
-static char *
-n_fields(char **source, int start, int stop)
-{
- int i;
- char *str, *str1;
-
- /*
- * find the start-1th dash
- */
- for (i = start - 1, str = *source; i; i--, str++)
- if ((str = strchr(str, '-')) == 0)
- return 0;
-
- /*
- * find the stopth dash
- */
- for (i = stop - start + 1, str1 = str; i; i--, str1++)
- if ((str1 = strchr(str1, '-')) == 0)
- return 0;
-
- /*
- * put a \0 at the end of the fields
- */
- *(str1 - 1) = '\0';
-
- /*
- * move source forward
- */
- *source = str1;
-
- return str;
-}
-
-/*
- * Gets the font properties from a given font structure. We use the FONT name
- * to find them out, since that seems easier.
- *
- * Returns a pointer to a static FontNameProperties structure
- * or NULL on error.
- */
-static FontNameProperties *
-get_font_name_props(Display * dpy, XFontStruct * fs, char *result)
-{
- static FontNameProperties props;
- static char *last_name;
-
- XFontProp *fp;
- int i;
- Atom fontatom = XInternAtom(dpy, "FONT", False);
- char *name;
- char *str;
-
- /*
- * first get the full font name
- */
- for (name = 0, i = 0, fp = fs->properties;
- i < fs->n_properties;
- i++, fp++)
- if (fp->name == fontatom)
- name = XGetAtomName(dpy, fp->card32);
-
- if (name == 0)
- return 0;
-
- /*
- * XGetAtomName allocates memory - don't leak
- */
- if (last_name != 0)
- XFree(last_name);
- last_name = name;
-
- if (result != 0) {
- if (strlen(name) < MAX_FONTNAME - 1) {
- strcpy(result, name);
- } else {
- TRACE(("fontname too large: %s\n", name));
- return 0;
- }
- }
-
- /*
- * Now split it up into parts and put them in
- * their places. Since we are using parts of
- * the original string, we must not free the Atom Name
- */
-
- /* registry, foundry, family */
- if ((props.beginning = n_fields(&name, 1, 3)) == 0)
- return 0;
-
- /* weight is the next */
- if ((props.weight = n_fields(&name, 1, 1)) == 0)
- return 0;
-
- /* slant */
- if ((props.slant = n_fields(&name, 1, 1)) == 0)
- return 0;
-
- /* width */
- if ((props.wideness = n_fields(&name, 1, 1)) == 0)
- return 0;
-
- /* add style */
- if ((props.add_style = n_fields(&name, 1, 1)) == 0)
- return 0;
-
- /* pixel size */
- if ((str = n_fields(&name, 1, 1)) == 0)
- return 0;
- if ((props.pixel_size = atoi(str)) == 0)
- return 0;
-
- /* point size */
- if ((props.point_size = n_fields(&name, 1, 1)) == 0)
- return 0;
-
- /* res_x */
- if ((str = n_fields(&name, 1, 1)) == 0)
- return 0;
- if ((props.res_x = atoi(str)) == 0)
- return 0;
-
- /* res_y */
- if ((str = n_fields(&name, 1, 1)) == 0)
- return 0;
- if ((props.res_y = atoi(str)) == 0)
- return 0;
-
- /* spacing */
- if ((props.spacing = n_fields(&name, 1, 1)) == 0)
- return 0;
-
- /* average width */
- if ((str = n_fields(&name, 1, 1)) == 0)
- return 0;
- if ((props.average_width = atoi(str)) == 0)
- return 0;
-
- /* the rest: charset registry and charset encoding */
- props.end = name;
-
- return &props;
-}
-
-#define ALLOCHUNK(n) ((n | 127) + 1)
-
-static void
-alloca_fontname(char **result, unsigned next)
-{
- unsigned last = (*result != 0) ? strlen(*result) : 0;
- unsigned have = (*result != 0) ? ALLOCHUNK(last) : 0;
- unsigned want = last + next + 2;
-
- if (want >= have) {
- want = ALLOCHUNK(want);
- if (last != 0) {
- *result = TypeRealloc(char, want, *result);
- } else {
- if ((*result = TypeMallocN(char, want)) != 0)
- **result = '\0';
- }
- }
-}
-
-static void
-append_fontname_str(char **result, char *value)
-{
- if (value == 0)
- value = "*";
- alloca_fontname(result, strlen(value));
- if (*result != 0) {
- if (**result != '\0')
- strcat(*result, "-");
- strcat(*result, value);
- }
-}
-
-static void
-append_fontname_num(char **result, int value)
-{
- if (value < 0) {
- append_fontname_str(result, "*");
- } else {
- char temp[100];
- sprintf(temp, "%d", value);
- append_fontname_str(result, temp);
- }
-}
-
-/*
- * Take the given font props and try to make a well formed font name specifying
- * the same base font and size and everything, but with different weight/width
- * according to the parameters. The return value is allocated, should be freed
- * by the caller.
- */
-static char *
-derive_font_name(FontNameProperties * props,
- char *use_weight,
- int use_average_width,
- char *use_encoding)
-{
- char *result = 0;
-
- append_fontname_str(&result, props->beginning);
- append_fontname_str(&result, use_weight);
- append_fontname_str(&result, props->slant);
- append_fontname_str(&result, 0);
- append_fontname_str(&result, 0);
- append_fontname_num(&result, props->pixel_size);
- append_fontname_str(&result, props->point_size);
- append_fontname_num(&result, props->res_x);
- append_fontname_num(&result, props->res_y);
- append_fontname_str(&result, props->spacing);
- append_fontname_num(&result, use_average_width);
- append_fontname_str(&result, use_encoding);
-
- return result;
-}
-
-static char *
-bold_font_name(FontNameProperties * props, int use_average_width)
-{
- return derive_font_name(props, "bold", use_average_width, props->end);
-}
-
-#if OPT_WIDE_CHARS
-#define derive_wide_font(props, weight) \
- derive_font_name(props, weight, props->average_width * 2, "ISO10646-1")
-
-static char *
-wide_font_name(FontNameProperties * props)
-{
- return derive_wide_font(props, "medium");
-}
-
-static char *
-widebold_font_name(FontNameProperties * props)
-{
- return derive_wide_font(props, "bold");
-}
-#endif /* OPT_WIDE_CHARS */
-
-#if OPT_DEC_CHRSET
-/*
- * Take the given font props and try to make a well formed font name specifying
- * the same base font but changed depending on the given attributes and chrset.
- *
- * For double width fonts, we just double the X-resolution, for double height
- * fonts we double the pixel-size and Y-resolution
- */
-char *
-xtermSpecialFont(TScreen * screen, unsigned atts, unsigned chrset)
-{
-#if OPT_TRACE
- static char old_spacing[80];
- static FontNameProperties old_props;
-#endif
- FontNameProperties *props;
- char *result = 0;
- char *weight;
- int pixel_size;
- int res_x;
- int res_y;
-
- props = get_font_name_props(screen->display, screen->fnt_norm, (char *) 0);
- if (props == 0)
- return result;
-
- pixel_size = props->pixel_size;
- res_x = props->res_x;
- res_y = props->res_y;
- if (atts & BOLD)
- weight = "bold";
- else
- weight = props->weight;
-
- if (CSET_DOUBLE(chrset))
- res_x *= 2;
-
- if (chrset == CSET_DHL_TOP
- || chrset == CSET_DHL_BOT) {
- res_y *= 2;
- pixel_size *= 2;
- }
-#if OPT_TRACE
- if (old_props.res_x != res_x
- || old_props.res_x != res_y
- || old_props.pixel_size != pixel_size
- || strcmp(old_props.spacing, props->spacing)) {
- TRACE(("xtermSpecialFont(atts = %#x, chrset = %#x)\n", atts, chrset));
- TRACE(("res_x = %d\n", res_x));
- TRACE(("res_y = %d\n", res_y));
- TRACE(("point_size = %s\n", props->point_size));
- TRACE(("pixel_size = %d\n", pixel_size));
- TRACE(("spacing = %s\n", props->spacing));
- old_props.res_x = res_x;
- old_props.res_x = res_y;
- old_props.pixel_size = pixel_size;
- old_props.spacing = strcpy(old_spacing, props->spacing);
- }
-#endif
-
- append_fontname_str(&result, props->beginning);
- append_fontname_str(&result, weight);
- append_fontname_str(&result, props->slant);
- append_fontname_str(&result, props->wideness);
- append_fontname_str(&result, props->add_style);
- append_fontname_num(&result, pixel_size);
- append_fontname_str(&result, props->point_size);
- append_fontname_num(&result, (atts & NORESOLUTION) ? -1 : res_x);
- append_fontname_num(&result, (atts & NORESOLUTION) ? -1 : res_y);
- append_fontname_str(&result, props->spacing);
- append_fontname_str(&result, 0);
- append_fontname_str(&result, props->end);
-
- return result;
-}
-#endif /* OPT_DEC_CHRSET */
-
-/*
- * Case-independent comparison for font-names, including wildcards.
- * XLFD allows '?' as a wildcard, but we do not handle that (no one seems
- * to use it).
- */
-static Bool
-same_font_name(char *pattern, char *match)
-{
- while (*pattern && *match) {
- if (*pattern == *match) {
- pattern++;
- match++;
- } else if (*pattern == '*' || *match == '*') {
- if (same_font_name(pattern + 1, match)) {
- return True;
- } else if (same_font_name(pattern, match + 1)) {
- return True;
- } else {
- return False;
- }
- } else {
- int p = char2lower(*pattern++);
- int m = char2lower(*match++);
- if (p != m)
- return False;
- }
- }
- return (*pattern == *match); /* both should be NUL */
-}
-
-/*
- * Double-check the fontname that we asked for versus what the font server
- * actually gave us. The larger fixed fonts do not always have a matching bold
- * font, and the font server may try to scale another font or otherwise
- * substitute a mismatched font.
- *
- * If we cannot get what we requested, we will fallback to the original
- * behavior, which simulates bold by overstriking each character at one pixel
- * offset.
- */
-static int
-got_bold_font(Display * dpy, XFontStruct * fs, char *requested)
-{
- char actual[MAX_FONTNAME];
- int got;
-
- if (get_font_name_props(dpy, fs, actual) == 0)
- got = 0;
- else
- got = same_font_name(requested, actual);
- return got;
-}
-
-/*
- * If the font server tries to adjust another font, it may not adjust it
- * properly. Check that the bounding boxes are compatible. Otherwise we'll
- * leave trash on the display when we mix normal and bold fonts.
- */
-static int
-same_font_size(XtermWidget xw, XFontStruct * nfs, XFontStruct * bfs)
-{
- TRACE(("same_font_size height %d/%d, min %d/%d max %d/%d\n",
- nfs->ascent + nfs->descent,
- bfs->ascent + bfs->descent,
- nfs->min_bounds.width, bfs->min_bounds.width,
- nfs->max_bounds.width, bfs->max_bounds.width));
- return xw->screen.free_bold_box
- || ((nfs->ascent + nfs->descent) == (bfs->ascent + bfs->descent)
- && (nfs->min_bounds.width == bfs->min_bounds.width
- || nfs->min_bounds.width == bfs->min_bounds.width + 1)
- && (nfs->max_bounds.width == bfs->max_bounds.width
- || nfs->max_bounds.width == bfs->max_bounds.width + 1));
-}
-
-/*
- * Check if the font looks like it has fixed width
- */
-static int
-is_fixed_font(XFontStruct * fs)
-{
- if (fs)
- return (fs->min_bounds.width == fs->max_bounds.width);
- return 1;
-}
-
-/*
- * Check if the font looks like a double width font (i.e. contains
- * characters of width X and 2X
- */
-#if OPT_WIDE_CHARS
-static int
-is_double_width_font(XFontStruct * fs)
-{
- return ((2 * fs->min_bounds.width) == fs->max_bounds.width);
-}
-#else
-#define is_double_width_font(fs) 0
-#endif
-
-#if OPT_WIDE_CHARS && OPT_RENDERFONT && defined(HAVE_TYPE_FCCHAR32)
-#define HALF_WIDTH_TEST_STRING "1234567890"
-
-/* '1234567890' in Chinese characters in UTF-8 */
-#define FULL_WIDTH_TEST_STRING "\xe4\xb8\x80\xe4\xba\x8c\xe4\xb8\x89" \
- "\xe5\x9b\x9b\xe4\xba\x94" \
- "\xef\xa7\x91\xe4\xb8\x83\xe5\x85\xab" \
- "\xe4\xb9\x9d\xef\xa6\xb2"
-
-/* '1234567890' in Korean script in UTF-8 */
-#define FULL_WIDTH_TEST_STRING2 "\xec\x9d\xbc\xec\x9d\xb4\xec\x82\xbc" \
- "\xec\x82\xac\xec\x98\xa4" \
- "\xec\x9c\xa1\xec\xb9\xa0\xed\x8c\x94" \
- "\xea\xb5\xac\xec\x98\x81"
-
-#define HALF_WIDTH_CHAR1 0x0031 /* 'l' */
-#define HALF_WIDTH_CHAR2 0x0057 /* 'W' */
-#define FULL_WIDTH_CHAR1 0x4E00 /* CJK Ideograph 'number one' */
-#define FULL_WIDTH_CHAR2 0xAC00 /* Korean script syllable 'Ka' */
-
-static int
-is_double_width_font_xft(Display * dpy, XftFont * font)
-{
- XGlyphInfo gi1, gi2;
- FcChar32 c1 = HALF_WIDTH_CHAR1, c2 = HALF_WIDTH_CHAR2;
- char *fwstr = FULL_WIDTH_TEST_STRING;
- char *hwstr = HALF_WIDTH_TEST_STRING;
-
- /* Some Korean fonts don't have Chinese characters at all. */
- if (!XftCharExists(dpy, font, FULL_WIDTH_CHAR1)) {
- if (!XftCharExists(dpy, font, FULL_WIDTH_CHAR2))
- return 0; /* Not a CJK font */
- else /* a Korean font without CJK Ideographs */
- fwstr = FULL_WIDTH_TEST_STRING2;
- }
-
- XftTextExtents32(dpy, font, &c1, 1, &gi1);
- XftTextExtents32(dpy, font, &c2, 1, &gi2);
- if (gi1.xOff != gi2.xOff) /* Not a fixed-width font */
- return 0;
-
- XftTextExtentsUtf8(dpy, font, (FcChar8 *) hwstr, (int) strlen(hwstr), &gi1);
- XftTextExtentsUtf8(dpy, font, (FcChar8 *) fwstr, (int) strlen(fwstr), &gi2);
-
- /*
- * fontconfig and Xft prior to 2.2(?) set the width of half-width
- * characters identical to that of full-width character in CJK double-width
- * (bi-width / monospace) font even though the former is half as wide as
- * the latter. This was fixed sometime before the release of fontconfig
- * 2.2 in early 2003. See
- * http://bugzilla.mozilla.org/show_bug.cgi?id=196312
- * In the meantime, we have to check both possibilities.
- */
- return ((2 * gi1.xOff == gi2.xOff) || (gi1.xOff == gi2.xOff));
-}
-#else
-#define is_double_width_font_xft(dpy, xftfont) 0
-#endif
-
-#define EmptyFont(fs) (fs != 0 \
- && ((fs)->ascent + (fs)->descent == 0 \
- || (fs)->max_bounds.width == 0))
-
-#define FontSize(fs) (((fs)->ascent + (fs)->descent) \
- * (fs)->max_bounds.width)
-
-const VTFontNames *
-xtermFontName(char *normal)
-{
- static VTFontNames data;
- memset(&data, 0, sizeof(data));
- data.f_n = normal;
- return &data;
-}
-
-static void
-cache_menu_font_name(TScreen * screen, int fontnum, int which, const char *name)
-{
- if (name != 0) {
- char *last = screen->menu_font_names[fontnum][which];
- if (last != 0) {
- if (strcmp(last, name)) {
- free(last);
- TRACE(("caching menu fontname %d.%d %s\n", fontnum, which, name));
- screen->menu_font_names[fontnum][which] = x_strdup(name);
- }
- } else {
- TRACE(("caching menu fontname %d.%d %s\n", fontnum, which, name));
- screen->menu_font_names[fontnum][which] = x_strdup(name);
- }
- }
-}
-
-int
-xtermLoadFont(XtermWidget xw,
- const VTFontNames * fonts,
- Bool doresize,
- int fontnum)
-{
- TScreen *screen = &(xw->screen);
-
- VTFontNames myfonts;
- /* FIXME: use XFreeFontInfo */
- FontNameProperties *fp;
- XFontStruct *nfs = NULL;
- XFontStruct *bfs = NULL;
-#if OPT_WIDE_CHARS
- XFontStruct *wfs = NULL;
- XFontStruct *wbfs = NULL;
-#endif
- XGCValues xgcv;
- unsigned long mask;
- GC new_normalGC = NULL;
- GC new_normalboldGC = NULL;
- GC new_reverseGC = NULL;
- GC new_reverseboldGC = NULL;
- Pixel new_normal;
- Pixel new_revers;
- char *tmpname = NULL;
- char normal[MAX_FONTNAME];
- Bool proportional = False;
-
- memset(&myfonts, 0, sizeof(myfonts));
- if (fonts != 0)
- myfonts = *fonts;
- if (myfonts.f_n == 0)
- return 0;
-
- if (fontnum == fontMenu_fontescape
- && myfonts.f_n != screen->MenuFontName(fontnum)) {
- if ((tmpname = x_strdup(myfonts.f_n)) == 0)
- return 0;
- }
-
- TRACE(("xtermLoadFont #%d normal %s\n", fontnum, NonNull(myfonts.f_n)));
- TRACE(("xtermLoadFont #%d bold %s\n", fontnum, NonNull(myfonts.f_b)));
-#if OPT_WIDE_CHARS
- TRACE(("xtermLoadFont #%d wide %s\n", fontnum, NonNull(myfonts.f_w)));
- TRACE(("xtermLoadFont #%d w/bold %s\n", fontnum, NonNull(myfonts.f_wb)));
-#endif
-
- if (!(nfs = XLoadQueryFont(screen->display, myfonts.f_n)))
- goto bad;
- if (EmptyFont(nfs))
- goto bad; /* can't use a 0-sized font */
-
- strcpy(normal, myfonts.f_n);
- if (myfonts.f_b == 0) {
- fp = get_font_name_props(screen->display, nfs, normal);
- if (fp != 0) {
- myfonts.f_b = bold_font_name(fp, fp->average_width);
- if ((bfs = XLoadQueryFont(screen->display, myfonts.f_b)) == 0) {
- myfonts.f_b = bold_font_name(fp, -1);
- bfs = XLoadQueryFont(screen->display, myfonts.f_b);
- }
- TRACE(("...derived bold %s\n", myfonts.f_b));
- }
- if (fp == 0 || bfs == 0) {
- bfs = nfs;
- TRACE(("...cannot load a matching bold font\n"));
- } else if (same_font_size(xw, nfs, bfs)
- && got_bold_font(screen->display, bfs, myfonts.f_b)) {
- TRACE(("...got a matching bold font\n"));
- cache_menu_font_name(screen, fontnum, fBold, myfonts.f_b);
- } else {
- XFreeFont(screen->display, bfs);
- bfs = nfs;
- TRACE(("...did not get a matching bold font\n"));
- }
- } else if ((bfs = XLoadQueryFont(screen->display, myfonts.f_b)) == 0) {
- bfs = nfs;
- TRACE(("...cannot load bold font %s\n", myfonts.f_b));
- } else {
- cache_menu_font_name(screen, fontnum, fBold, myfonts.f_b);
- }
-
- /*
- * If there is no widefont specified, fake it by doubling AVERAGE_WIDTH
- * of normal fonts XLFD, and asking for it. This plucks out 18x18ja
- * and 12x13ja as the corresponding fonts for 9x18 and 6x13.
- */
- if_OPT_WIDE_CHARS(screen, {
- char bold[MAX_FONTNAME];
-
- if (myfonts.f_w != 0) {
- cache_menu_font_name(screen, fontnum, fWide, myfonts.f_w);
- } else if (!is_double_width_font(nfs)) {
- fp = get_font_name_props(screen->display, nfs, normal);
- if (fp != 0) {
- myfonts.f_w = wide_font_name(fp);
- TRACE(("...derived wide %s\n", myfonts.f_w));
- cache_menu_font_name(screen, fontnum, fWide, myfonts.f_w);
- }
- }
-
- if (myfonts.f_w) {
- wfs = XLoadQueryFont(screen->display, myfonts.f_w);
- } else {
- wfs = nfs;
- }
-
- if (myfonts.f_wb != 0) {
- cache_menu_font_name(screen, fontnum, fWBold, myfonts.f_wb);
- } else if (!is_double_width_font(bfs)) {
- fp = get_font_name_props(screen->display, bfs, bold);
- if (fp != 0) {
- myfonts.f_wb = widebold_font_name(fp);
- TRACE(("...derived wide/bold %s\n", myfonts.f_wb));
- cache_menu_font_name(screen, fontnum, fWBold, myfonts.f_wb);
- }
- }
-
- if (myfonts.f_wb) {
- wbfs = XLoadQueryFont(screen->display, myfonts.f_wb);
- } else if (is_double_width_font(bfs)) {
- wbfs = bfs;
- } else {
- wbfs = wfs;
- TRACE(("...cannot load wide bold font %s\n", myfonts.f_wb));
- }
-
- if (EmptyFont(wbfs))
- goto bad; /* can't use a 0-sized font */
- });
-
- /*
- * Most of the time this call to load the font will succeed, even if
- * there is no wide font : the X server doubles the width of the
- * normal font, or similar.
- *
- * But if it did fail for some reason, then nevermind.
- */
- if (EmptyFont(bfs))
- goto bad; /* can't use a 0-sized font */
-
- if (!same_font_size(xw, nfs, bfs)
- && (is_fixed_font(nfs) && is_fixed_font(bfs))) {
- TRACE(("...ignoring mismatched normal/bold fonts\n"));
- XFreeFont(screen->display, bfs);
- bfs = nfs;
- }
-
- if_OPT_WIDE_CHARS(screen, {
- if (wfs != 0
- && wbfs != 0
- && !same_font_size(xw, wfs, wbfs)
- && (is_fixed_font(wfs) && is_fixed_font(wbfs))) {
- TRACE(("...ignoring mismatched normal/bold wide fonts\n"));
- XFreeFont(screen->display, wbfs);
- wbfs = wfs;
- }
- });
-
- /*
- * Normal/bold fonts should be the same width. Also, the min/max
- * values should be the same.
- */
- if (!is_fixed_font(nfs)
- || !is_fixed_font(bfs)
- || nfs->max_bounds.width != bfs->max_bounds.width) {
- TRACE(("Proportional font! normal %d/%d, bold %d/%d\n",
- nfs->min_bounds.width,
- nfs->max_bounds.width,
- bfs->min_bounds.width,
- bfs->max_bounds.width));
- proportional = True;
- }
-
- if_OPT_WIDE_CHARS(screen, {
- if (wfs != 0
- && wbfs != 0
- && (!is_fixed_font(wfs)
- || !is_fixed_font(wbfs)
- || wfs->max_bounds.width != wbfs->max_bounds.width)) {
- TRACE(("Proportional font! wide %d/%d, wide bold %d/%d\n",
- wfs->min_bounds.width,
- wfs->max_bounds.width,
- wbfs->min_bounds.width,
- wbfs->max_bounds.width));
- proportional = True;
- }
- });
-
- /* TODO : enforce that the width of the wide font is 2* the width
- of the narrow font */
-
- mask = (GCFont | GCForeground | GCBackground | GCGraphicsExposures |
- GCFunction);
-
- new_normal = getXtermForeground(xw->flags, xw->cur_foreground);
- new_revers = getXtermBackground(xw->flags, xw->cur_background);
-
- xgcv.font = nfs->fid;
- xgcv.foreground = new_normal;
- xgcv.background = new_revers;
- xgcv.graphics_exposures = True; /* default */
- xgcv.function = GXcopy;
-
- new_normalGC = XtGetGC((Widget) xw, mask, &xgcv);
- if (!new_normalGC)
- goto bad;
-
- if (nfs == bfs) { /* there is no bold font */
- new_normalboldGC = new_normalGC;
- } else {
- xgcv.font = bfs->fid;
- new_normalboldGC = XtGetGC((Widget) xw, mask, &xgcv);
- if (!new_normalboldGC)
- goto bad;
- }
-
- xgcv.font = nfs->fid;
- xgcv.foreground = new_revers;
- xgcv.background = new_normal;
- new_reverseGC = XtGetGC((Widget) xw, mask, &xgcv);
- if (!new_reverseGC)
- goto bad;
-
- if (nfs == bfs) { /* there is no bold font */
- new_reverseboldGC = new_reverseGC;
- } else {
- xgcv.font = bfs->fid;
- new_reverseboldGC = XtGetGC((Widget) xw, mask, &xgcv);
- if (!new_reverseboldGC)
- goto bad;
- }
-
- if (NormalGC(screen) != NormalBoldGC(screen))
- XtReleaseGC((Widget) xw, NormalBoldGC(screen));
- XtReleaseGC((Widget) xw, NormalGC(screen));
-
- if (ReverseGC(screen) != ReverseBoldGC(screen))
- XtReleaseGC((Widget) xw, ReverseBoldGC(screen));
- XtReleaseGC((Widget) xw, ReverseGC(screen));
-
- NormalGC(screen) = new_normalGC;
- NormalBoldGC(screen) = new_normalboldGC;
- ReverseGC(screen) = new_reverseGC;
- ReverseBoldGC(screen) = new_reverseboldGC;
-
- /*
- * If we're switching fonts, free the old ones. Otherwise we'll leak
- * the memory that is associated with the old fonts. The
- * XLoadQueryFont call allocates a new XFontStruct.
- */
- if (screen->fnt_bold != 0
- && screen->fnt_bold != screen->fnt_norm)
- XFreeFont(screen->display, screen->fnt_bold);
- if (screen->fnt_norm != 0)
- XFreeFont(screen->display, screen->fnt_norm);
-
- screen->fnt_norm = nfs;
- screen->fnt_bold = bfs;
-#if OPT_WIDE_CHARS
- screen->fnt_dwd = wfs;
- if (wbfs == NULL)
- wbfs = wfs;
- screen->fnt_dwdb = wbfs;
-#endif
- screen->fnt_prop = proportional;
- screen->fnt_boxes = True;
-
-#if OPT_BOX_CHARS
- /*
- * Xterm uses character positions 1-31 of a font for the line-drawing
- * characters. Check that they are all present. The null character
- * (0) is special, and is not used.
- */
-#if OPT_RENDERFONT
- if (UsingRenderFont(xw)) {
- /*
- * FIXME: we shouldn't even be here if we're using Xft.
- */
- screen->fnt_boxes = False;
- TRACE(("assume Xft missing line-drawing chars\n"));
- } else
-#endif
- {
- unsigned ch;
-
- for (ch = 1; ch < 32; ch++) {
- unsigned n = ch;
-#if OPT_WIDE_CHARS
- if (screen->utf8_mode || screen->unicode_font) {
- n = dec2ucs(ch);
- if (n == UCS_REPL)
- continue;
- }
-#endif
- if (xtermMissingChar(xw, n, nfs)) {
- TRACE(("missing normal char #%d\n", n));
- screen->fnt_boxes = False;
- break;
- }
- if (xtermMissingChar(xw, n, bfs)) {
- TRACE(("missing bold char #%d\n", n));
- screen->fnt_boxes = False;
- break;
- }
- }
- }
- TRACE(("Will %suse internal line-drawing characters\n",
- screen->fnt_boxes ? "not " : ""));
-#endif
-
- screen->enbolden = screen->bold_mode
- && ((nfs == bfs) || same_font_name(normal, myfonts.f_b));
- TRACE(("Will %suse 1-pixel offset/overstrike to simulate bold\n",
- screen->enbolden ? "" : "not "));
-
- set_menu_font(False);
- screen->menu_font_number = fontnum;
- set_menu_font(True);
- if (tmpname) { /* if setting escape or sel */
- if (screen->MenuFontName(fontnum))
- free(screen->MenuFontName(fontnum));
- screen->MenuFontName(fontnum) = tmpname;
- if (fontnum == fontMenu_fontescape) {
- set_sensitivity(xw->screen.fontMenu,
- fontMenuEntries[fontMenu_fontescape].widget,
- True);
- }
-#if OPT_SHIFT_FONTS
- screen->menu_font_sizes[fontnum] = FontSize(nfs);
-#endif
- }
- set_cursor_gcs(screen);
- xtermUpdateFontInfo(xw, doresize);
- return 1;
-
- bad:
- if (tmpname)
- free(tmpname);
- if (new_normalGC)
- XtReleaseGC((Widget) xw, new_normalGC);
- if (new_normalboldGC && new_normalGC != new_normalboldGC)
- XtReleaseGC((Widget) xw, new_normalboldGC);
- if (new_reverseGC)
- XtReleaseGC((Widget) xw, new_reverseGC);
- if (new_reverseboldGC && new_reverseGC != new_reverseboldGC)
- XtReleaseGC((Widget) xw, new_reverseboldGC);
- if (nfs)
- XFreeFont(screen->display, nfs);
- if (bfs && nfs != bfs)
- XFreeFont(screen->display, bfs);
-#if OPT_WIDE_CHARS
- if (wfs)
- XFreeFont(screen->display, wfs);
- if (wbfs && wbfs != wfs)
- XFreeFont(screen->display, wbfs);
-#endif
- return 0;
-}
-
-#if OPT_LOAD_VTFONTS || OPT_WIDE_CHARS
-/*
- * Collect font-names that we can modify with the load-vt-fonts() action.
- */
-typedef struct {
- VTFontNames default_font;
- char *menu_font_names[fontMenu_lastBuiltin + 1][fMAX];
-} SubResourceRec;
-
-#define MERGE_SUBFONT(src,dst,name) \
- if (dst.name == 0) { \
- TRACE(("MERGE_SUBFONT " #dst "." #name " merge %s\n", NonNull(src.name))); \
- dst.name = src.name; \
- } else { \
- TRACE(("MERGE_SUBFONT " #dst "." #name " found %s\n", NonNull(dst.name))); \
- }
-
-#define COPY_MENU_FONTS(src,dst) \
- TRACE(("COPY_MENU_FONTS " #src " to " #dst "\n")); \
- for (n = fontMenu_fontdefault; n <= fontMenu_lastBuiltin; ++n) { \
- for (m = 0; m < fMAX; ++m) { \
- dst.menu_font_names[n][m] = src.menu_font_names[n][m]; \
- } \
- }
-
-/*
- * Load the "VT" font names from the given subresource name/class. These
- * correspond to the VT100 resources.
- */
-static Bool
-xtermLoadVTFonts(XtermWidget w, char *myName, char *myClass)
-{
- static Bool initialized = False;
- static SubResourceRec original, referenceRec, subresourceRec;
-
- /*
- * These are duplicates of the VT100 font resources, but with a special
- * application/classname passed in to distinguish them.
- */
- static XtResource font_resources[] =
- {
- Sres(XtNfont, XtCFont, default_font.f_n, DEFFONT),
- Sres(XtNboldFont, XtCBoldFont, default_font.f_b, DEFBOLDFONT),
-#if OPT_WIDE_CHARS
- Sres(XtNwideFont, XtCWideFont, default_font.f_w, DEFWIDEFONT),
- Sres(XtNwideBoldFont, XtCWideBoldFont, default_font.f_wb, DEFWIDEBOLDFONT),
-#endif
- Sres(XtNfont1, XtCFont1, MenuFontName(fontMenu_font1), NULL),
- Sres(XtNfont2, XtCFont2, MenuFontName(fontMenu_font2), NULL),
- Sres(XtNfont3, XtCFont3, MenuFontName(fontMenu_font3), NULL),
- Sres(XtNfont4, XtCFont4, MenuFontName(fontMenu_font4), NULL),
- Sres(XtNfont5, XtCFont5, MenuFontName(fontMenu_font5), NULL),
- Sres(XtNfont6, XtCFont6, MenuFontName(fontMenu_font6), NULL),
- };
- Cardinal n, m;
- Bool status = True;
-
- if (!initialized) {
-
- initialized = True;
- TRACE(("xtermLoadVTFonts saving original\n"));
- original.default_font = w->misc.default_font;
- COPY_MENU_FONTS(w->screen, original);
- }
-
- if (myName == 0 || *myName == 0) {
- TRACE(("xtermLoadVTFonts restoring original\n"));
- w->misc.default_font = original.default_font;
- COPY_MENU_FONTS(original, w->screen);
- for (n = 0; n < XtNumber(original.menu_font_names); ++n)
- w->screen.MenuFontName(n) = original.MenuFontName(n);
- } else {
- TRACE(("xtermLoadVTFonts(%s, %s)\n", myName, myClass));
-
- memset(&subresourceRec, 0, sizeof(subresourceRec));
- XtGetSubresources((Widget) w, (XtPointer) &subresourceRec,
- myName, myClass,
- font_resources,
- (Cardinal) XtNumber(font_resources),
- NULL, (Cardinal) 0);
-
- if (memcmp(&referenceRec, &subresourceRec, sizeof(referenceRec))) {
-
- /*
- * If a particular resource value was not found, use the original.
- */
- MERGE_SUBFONT(w->misc, subresourceRec, default_font.f_n);
- MERGE_SUBFONT(w->misc, subresourceRec, default_font.f_b);
-#if OPT_WIDE_CHARS
- MERGE_SUBFONT(w->misc, subresourceRec, default_font.f_w);
- MERGE_SUBFONT(w->misc, subresourceRec, default_font.f_wb);
-#endif
- for (n = fontMenu_font1; n <= fontMenu_lastBuiltin; ++n)
- MERGE_SUBFONT(w->screen, subresourceRec, MenuFontName(n));
-
- /*
- * Finally, copy the subresource data to the widget.
- */
- w->misc.default_font = subresourceRec.default_font;
- COPY_MENU_FONTS(subresourceRec, w->screen);
- w->screen.MenuFontName(fontMenu_fontdefault) = w->misc.default_font.f_n;
- } else {
- TRACE(("...no resources found\n"));
- status = False;
- }
- }
- return status;
-}
-
-#if OPT_WIDE_CHARS
-static Bool
-isWideFont(XFontStruct * fp, char *tag, Bool nullOk)
-{
- Bool result = False;
-
- (void) tag;
- if (fp != 0) {
- unsigned count = 0;
- if (fp->min_byte1 == 0 && fp->max_byte1 == 0) {
- count = fp->max_char_or_byte2 - fp->min_char_or_byte2;
- } else if (fp->min_char_or_byte2 < 256
- && fp->max_char_or_byte2 < 256) {
- unsigned first = (fp->min_byte1 << 8) + fp->min_char_or_byte2;
- unsigned last = (fp->max_byte1 << 8) + fp->max_char_or_byte2;
- count = last + 1 - first;
- }
- TRACE(("isWideFont(%s) found %d cells\n", tag, count));
- result = (count > 256) ? True : False;
- } else {
- result = nullOk;
- }
- return result;
-}
-
-static Bool
-currentFontsAreWide(XtermWidget w, Bool nullOk)
-{
- Bool result = True;
- TScreen *screen = &(w->screen);
-
- result = (isWideFont(screen->fnt_norm, "normal", nullOk)
- && isWideFont(screen->fnt_bold, "bold", nullOk)
- && isWideFont(screen->fnt_dwd, "wide", nullOk)
- && isWideFont(screen->fnt_dwdb, "wide-bold", nullOk));
-
- TRACE(("currentFontsAreWide returns %d\n", result));
- return result;
-}
-
-/*
- * If the current fonts are not wide, load the UTF8 fonts.
- *
- * Called during initialization (for wide-character mode), the fonts have not
- * been setup, so we pass nullOk=True to currentFontsAreWide().
- *
- * Called after initialization, e.g., in response to the UTF-8 menu entry
- * (starting from narrow character mode), it checks if the fonts are not wide.
- */
-Bool
-xtermLoadWideFonts(XtermWidget w, Bool nullOk)
-{
- Bool result = currentFontsAreWide(w, nullOk);
-
- /* FIXME: add a test for wide-font */
- if (!result) {
- result = xtermLoadVTFonts(w, "utf8Fonts", "Utf8Fonts");
- }
- TRACE(("xtermLoadWideFonts:%d\n", result));
- return result;
-}
-#endif /* OPT_WIDE_CHARS */
-
-/*
- * Restore the default fonts, i.e., if we had switched to wide-fonts.
- */
-Bool
-xtermLoadDefaultFonts(XtermWidget w)
-{
- Bool result;
- result = xtermLoadVTFonts(w, NULL, NULL);
- TRACE(("xtermLoadDefaultFonts:%d\n", result));
- return result;
-}
-#endif /* OPT_LOAD_VTFONTS || OPT_WIDE_CHARS */
-
-#if OPT_LOAD_VTFONTS
-void
-HandleLoadVTFonts(Widget w GCC_UNUSED,
- XEvent * event GCC_UNUSED,
- String * params GCC_UNUSED,
- Cardinal *param_count GCC_UNUSED)
-{
- static char empty[] = ""; /* appease strict compilers */
-
- char buf[80];
- char *myName = (*param_count > 0) ? params[0] : empty;
- char *convert = (*param_count > 1) ? params[1] : myName;
- char *myClass = (char *) MyStackAlloc(strlen(convert), buf);
- int n;
-
- TRACE(("HandleLoadVTFonts(%d)\n", *param_count));
- strcpy(myClass, convert);
- if (*param_count == 1
- && islower(CharOf(myClass[0])))
- myClass[0] = toupper(CharOf(myClass[0]));
-
- if (xtermLoadVTFonts(term, myName, myClass)) {
- /*
- * When switching fonts, try to preserve the font-menu selection, since
- * it is less surprising to do that (if the font-switching can be
- * undone) than to switch to "Default".
- */
- int font_number = term->screen.menu_font_number;
- if (font_number > fontMenu_lastBuiltin)
- font_number = fontMenu_lastBuiltin;
- for (n = 0; n < NMENUFONTS; ++n)
- term->screen.menu_font_sizes[n] = 0;
- SetVTFont(term, font_number, True,
- ((font_number == fontMenu_fontdefault)
- ? &(term->misc.default_font)
- : NULL));
- }
-
- MyStackFree(myClass, buf);
-}
-#endif /* OPT_LOAD_VTFONTS */
-
-/*
- * Set the limits for the box that outlines the cursor.
- */
-void
-xtermSetCursorBox(TScreen * screen)
-{
- static XPoint VTbox[NBOX];
- XPoint *vp;
-
- vp = &VTbox[1];
- (vp++)->x = FontWidth(screen) - 1;
- (vp++)->y = FontHeight(screen) - 1;
- (vp++)->x = -(FontWidth(screen) - 1);
- vp->y = -(FontHeight(screen) - 1);
- screen->box = VTbox;
-}
-
-#define CACHE_XFT(dst,src) if (src != 0) {\
- dst[fontnum] = src;\
- TRACE(("%s[%d] = %d (%d,%d) by %d\n",\
- #dst,\
- fontnum,\
- src->height,\
- src->ascent,\
- src->descent,\
- src->max_advance_width));\
- }
-
-#if OPT_RENDERFONT
-static XftFont *
-xtermOpenXft(Display * dpy, XftPattern * pat, const char *tag GCC_UNUSED)
-{
- XftPattern *match;
- XftResult status;
- XftFont *result = 0;
-
- if (pat != 0) {
- match = XftFontMatch(dpy, DefaultScreen(dpy), pat, &status);
- result = XftFontOpenPattern(dpy, match);
- if ((result == 0) && match) {
- TRACE(("...did not match %s font\n", tag));
- XftPatternDestroy(match);
- } else {
- TRACE(("...matched %s font\n", tag));
- }
- }
- return result;
-}
-#endif
-
-/*
- * Compute useful values for the font/window sizes
- */
-void
-xtermComputeFontInfo(XtermWidget xw,
- struct _vtwin *win,
- XFontStruct * font,
- int sbwidth)
-{
- TScreen *screen = &(xw->screen);
-
- int i, j, width, height;
-
-#if OPT_RENDERFONT
- /*
- * xterm contains a lot of references to fonts, assuming they are fixed
- * size. This chunk of code overrides the actual font-selection (see
- * drawXtermText()), if the user has selected render-font. All of the
- * font-loading for fixed-fonts still goes on whether or not this chunk
- * overrides it.
- */
- if (xw->misc.render_font && !IsIconWin(screen, win)) {
- Display *dpy = screen->display;
- int fontnum = screen->menu_font_number;
- XftFont *norm = screen->renderFontNorm[fontnum];
- XftFont *bold = screen->renderFontBold[fontnum];
- XftFont *ital = screen->renderFontItal[fontnum];
-#if OPT_RENDERWIDE
- XftFont *wnorm = screen->renderWideNorm[fontnum];
- XftFont *wbold = screen->renderWideBold[fontnum];
- XftFont *wital = screen->renderWideItal[fontnum];
-#endif
-
- if (norm == 0 && xw->misc.face_name) {
- XftPattern *pat;
- double face_size = xw->misc.face_size;
-
- TRACE(("xtermComputeFontInfo norm(face %s, size %f)\n",
- xw->misc.face_name,
- xw->misc.face_size));
-
-#if OPT_SHIFT_FONTS
- /*
- * If the user is switching font-sizes, make it follow the same
- * ratios to the default as the fixed fonts would, for easy
- * comparison. There will be some differences since the fixed
- * fonts have a variety of height/width ratios, but this is simpler
- * than adding another resource value - and as noted above, the
- * data for the fixed fonts are available.
- */
- lookupOneFontSize(screen, fontnum);
- if (fontnum != fontMenu_fontdefault) {
- int num = screen->menu_font_sizes[fontnum];
- int den = screen->menu_font_sizes[0];
- face_size = (1.0 * face_size * num) / den;
- TRACE(("scaled using %d/%d -> %f\n", num, den, face_size));
- }
-#endif
-
- pat = XftNameParse(xw->misc.face_name);
- XftPatternBuild(pat,
- XFT_FAMILY, XftTypeString, "mono",
- XFT_SIZE, XftTypeDouble, face_size,
- XFT_SPACING, XftTypeInteger, XFT_MONO,
- (void *) 0);
- norm = xtermOpenXft(dpy, pat, "normal");
-
- if (norm != 0) {
- XftPatternBuild(pat,
- XFT_WEIGHT, XftTypeInteger, XFT_WEIGHT_BOLD,
- XFT_CHAR_WIDTH, XftTypeInteger, norm->max_advance_width,
- (void *) 0);
- bold = xtermOpenXft(dpy, pat, "bold");
-
-#if OPT_ISO_COLORS
- if (screen->italicULMode) {
- XftPatternBuild(pat,
- XFT_SLANT, XftTypeInteger, XFT_SLANT_ITALIC,
- XFT_CHAR_WIDTH, XftTypeInteger, norm->max_advance_width,
- (void *) 0);
- ital = xtermOpenXft(dpy, pat, "italic");
- }
-#endif /* OPT_ISO_COLORS */
-
- /*
- * FIXME: just assume that the corresponding font has no
- * graphics characters.
- */
- if (screen->fnt_boxes) {
- screen->fnt_boxes = False;
- TRACE(("Xft opened - will %suse internal line-drawing characters\n",
- screen->fnt_boxes ? "not " : ""));
- }
- }
-
- if (pat)
- XftPatternDestroy(pat);
-
- CACHE_XFT(screen->renderFontNorm, norm);
- CACHE_XFT(screen->renderFontBold, bold);
- CACHE_XFT(screen->renderFontItal, ital);
-
- /*
- * See xtermXftDrawString().
- */
-#if OPT_RENDERWIDE
- if (norm != 0 && screen->wide_chars) {
- char *face_name = (xw->misc.face_wide_name
- ? xw->misc.face_wide_name
- : xw->misc.face_name);
- int char_width = norm->max_advance_width * 2;
-
- TRACE(("xtermComputeFontInfo wide(face %s, char_width %d)\n",
- face_name,
- char_width));
-
- pat = XftNameParse(xw->misc.face_name);
- XftPatternBuild(pat,
- XFT_FAMILY, XftTypeString, face_name,
- XFT_SIZE, XftTypeDouble, face_size,
- XFT_SPACING, XftTypeInteger, XFT_MONO,
- XFT_CHAR_WIDTH, XftTypeInteger, char_width,
- (void *) 0);
- wnorm = xtermOpenXft(dpy, pat, "wide");
-
- if (wnorm != 0) {
- XftPatternBuild(pat,
- XFT_FAMILY, XftTypeString, face_name,
- XFT_SIZE, XftTypeDouble, face_size,
- XFT_SPACING, XftTypeInteger, XFT_MONO,
- XFT_CHAR_WIDTH, XftTypeInteger, char_width,
- XFT_WEIGHT, XftTypeInteger, XFT_WEIGHT_BOLD,
- (void *) 0);
- wbold = xtermOpenXft(dpy, pat, "wide-bold");
-
- if (screen->italicULMode) {
- XftPatternBuild(pat,
- XFT_FAMILY, XftTypeString, face_name,
- XFT_SIZE, XftTypeDouble, face_size,
- XFT_SPACING, XftTypeInteger, XFT_MONO,
- XFT_CHAR_WIDTH, XftTypeInteger, char_width,
- XFT_SLANT, XftTypeInteger, XFT_SLANT_ITALIC,
- (void *) 0);
- wital = xtermOpenXft(dpy, pat, "wide-italic");
- }
- }
-
- if (pat)
- XftPatternDestroy(pat);
-
- CACHE_XFT(screen->renderWideNorm, wnorm);
- CACHE_XFT(screen->renderWideBold, wbold);
- CACHE_XFT(screen->renderWideItal, wital);
- }
-#endif
- }
- if (norm == 0) {
- xw->misc.render_font = False;
- update_font_renderfont();
- } else {
- win->f_width = norm->max_advance_width;
- win->f_height = norm->height;
- win->f_ascent = norm->ascent;
- win->f_descent = norm->descent;
- if (win->f_height < win->f_ascent + win->f_descent)
- win->f_height = win->f_ascent + win->f_descent;
- if (is_double_width_font_xft(screen->display, norm))
- win->f_width >>= 1;
- }
- }
- if (!xw->misc.render_font || IsIconWin(screen, win))
-#endif
- {
- if (is_double_width_font(font)) {
- win->f_width = (font->min_bounds.width);
- } else {
- win->f_width = (font->max_bounds.width);
- }
- win->f_height = (font->ascent + font->descent);
- win->f_ascent = font->ascent;
- win->f_descent = font->descent;
- }
- i = 2 * screen->border + sbwidth;
- j = 2 * screen->border;
- width = MaxCols(screen) * win->f_width + i;
- height = MaxRows(screen) * win->f_height + j;
- win->fullwidth = width;
- win->fullheight = height;
- win->width = width - i;
- win->height = height - j;
-
- TRACE(("xtermComputeFontInfo window %dx%d (full %dx%d), fontsize %dx%d (asc %d, dsc %d)\n",
- win->height,
- win->width,
- win->fullheight,
- win->fullwidth,
- win->f_height,
- win->f_width,
- win->f_ascent,
- win->f_descent));
-}
-
-/* save this information as a side-effect for double-sized characters */
-void
-xtermSaveFontInfo(TScreen * screen, XFontStruct * font)
-{
- screen->fnt_wide = (font->max_bounds.width);
- screen->fnt_high = (font->ascent + font->descent);
- TRACE(("xtermSaveFontInfo %dx%d\n", screen->fnt_high, screen->fnt_wide));
-}
-
-/*
- * After loading a new font, update the structures that use its size.
- */
-void
-xtermUpdateFontInfo(XtermWidget xw, Bool doresize)
-{
- TScreen *screen = &(xw->screen);
-
- int scrollbar_width;
- struct _vtwin *win = &(screen->fullVwin);
-
- scrollbar_width = (xw->misc.scrollbar
- ? (screen->scrollWidget->core.width +
- screen->scrollWidget->core.border_width)
- : 0);
- xtermComputeFontInfo(xw, win, screen->fnt_norm, scrollbar_width);
- xtermSaveFontInfo(screen, screen->fnt_norm);
-
- if (doresize) {
- if (VWindow(screen)) {
- XClearWindow(screen->display, VWindow(screen));
- }
- TRACE(("xtermUpdateFontInfo {{\n"));
- DoResizeScreen(xw); /* set to the new natural size */
- if (screen->scrollWidget)
- ResizeScrollBar(xw);
- Redraw();
- TRACE(("... }} xtermUpdateFontInfo\n"));
-#ifdef SCROLLBAR_RIGHT
- updateRightScrollbar(term);
-#endif
- }
- xtermSetCursorBox(screen);
-}
-
-#if OPT_BOX_CHARS
-
-/*
- * Returns true if the given character is missing from the specified font.
- */
-Bool
-xtermMissingChar(XtermWidget xw, unsigned ch, XFontStruct * font)
-{
- if (font != 0
- && font->per_char != 0
- && !font->all_chars_exist) {
- static XCharStruct dft, *tmp = &dft, *pc = 0;
-
- if (font->max_byte1 == 0) {
-#if OPT_WIDE_CHARS
- if (ch > 255) {
- TRACE(("xtermMissingChar %#04x (row)\n", ch));
- return True;
- }
-#endif
- CI_GET_CHAR_INFO_1D(font, E2A(ch), tmp, pc);
- }
-#if OPT_WIDE_CHARS
- else {
- CI_GET_CHAR_INFO_2D(font, (ch >> 8), (ch & 0xff), tmp, pc);
- }
-#else
-
- if (!pc)
- return False; /* Urgh! */
-#endif
-
- if (CI_NONEXISTCHAR(pc)) {
- TRACE(("xtermMissingChar %#04x (!exists)\n", ch));
- return True;
- }
- }
- if (ch < 32
- && xw->screen.force_box_chars) {
- TRACE(("xtermMissingChar %#04x (forced off)\n", ch));
- return True;
- }
- return False;
-}
-
-/*
- * The grid is arbitrary, enough resolution that nothing's lost in
- * initialization.
- */
-#define BOX_HIGH 60
-#define BOX_WIDE 60
-
-#define MID_HIGH (BOX_HIGH/2)
-#define MID_WIDE (BOX_WIDE/2)
-
-#define CHR_WIDE ((9*BOX_WIDE)/10)
-#define CHR_HIGH ((9*BOX_HIGH)/10)
-
-/*
- * ...since we'll scale the values anyway.
- */
-#define SCALE_X(n) n = (n * (font_width-1)) / (BOX_WIDE-1)
-#define SCALE_Y(n) n = (n * (font_height-1)) / (BOX_HIGH-1)
-
-#define SEG(x0,y0,x1,y1) x0,y0, x1,y1
-
-/*
- * Draw the given graphic character, if it is simple enough (i.e., a
- * line-drawing character).
- */
-void
-xtermDrawBoxChar(XtermWidget xw,
- unsigned ch,
- unsigned flags,
- GC gc,
- int x,
- int y)
-{
- TScreen *screen = &(xw->screen);
- /* *INDENT-OFF* */
- static const short glyph_ht[] = {
- SEG( 0, 0, 0, 5*MID_HIGH/6), /* H */
- SEG(6*BOX_WIDE/10, 0, 6*BOX_WIDE/10,5*MID_HIGH/6),
- SEG( 0, 5*MID_HIGH/12,6*BOX_WIDE/10,5*MID_HIGH/12),
- SEG(2*BOX_WIDE/10, MID_HIGH, CHR_WIDE, MID_HIGH), /* T */
- SEG(6*BOX_WIDE/10, MID_HIGH, 6*BOX_WIDE/10, CHR_HIGH),
- -1
- }, glyph_ff[] = {
- SEG( 0, 0, 6*BOX_WIDE/10, 0), /* F */
- SEG( 0, 5*MID_HIGH/12,6*CHR_WIDE/12,5*MID_HIGH/12),
- SEG( 0, 0, 0*BOX_WIDE/3, 5*MID_HIGH/6),
- SEG(1*BOX_WIDE/3, MID_HIGH, CHR_WIDE, MID_HIGH), /* F */
- SEG(1*BOX_WIDE/3, 8*MID_HIGH/6,10*CHR_WIDE/12,8*MID_HIGH/6),
- SEG(1*BOX_WIDE/3, MID_HIGH, 1*BOX_WIDE/3, CHR_HIGH),
- -1
- }, glyph_lf[] = {
- SEG( 0, 0, 0, 5*MID_HIGH/6), /* L */
- SEG( 0, 5*MID_HIGH/6, 6*BOX_WIDE/10,5*MID_HIGH/6),
- SEG(1*BOX_WIDE/3, MID_HIGH, CHR_WIDE, MID_HIGH), /* F */
- SEG(1*BOX_WIDE/3, 8*MID_HIGH/6,10*CHR_WIDE/12,8*MID_HIGH/6),
- SEG(1*BOX_WIDE/3, MID_HIGH, 1*BOX_WIDE/3, CHR_HIGH),
- -1
- }, glyph_nl[] = {
- SEG( 0, 5*MID_HIGH/6, 0, 0), /* N */
- SEG( 0, 0, 5*BOX_WIDE/6, 5*MID_HIGH/6),
- SEG(5*BOX_WIDE/6, 5*MID_HIGH/6, 5*BOX_WIDE/6, 0),
- SEG(1*BOX_WIDE/3, MID_HIGH, 1*BOX_WIDE/3, CHR_HIGH), /* L */
- SEG(1*BOX_WIDE/3, CHR_HIGH, CHR_WIDE, CHR_HIGH),
- -1
- }, glyph_vt[] = {
- SEG( 0, 0, 5*BOX_WIDE/12,5*MID_HIGH/6), /* V */
- SEG(5*BOX_WIDE/12,5*MID_HIGH/6, 5*BOX_WIDE/6, 0),
- SEG(2*BOX_WIDE/10, MID_HIGH, CHR_WIDE, MID_HIGH), /* T */
- SEG(6*BOX_WIDE/10, MID_HIGH, 6*BOX_WIDE/10, CHR_HIGH),
- -1
- }, plus_or_minus[] =
- {
- SEG( 0, 5*BOX_HIGH/6, CHR_WIDE, 5*BOX_HIGH/6),
- SEG( MID_WIDE, 2*BOX_HIGH/6, MID_WIDE, 4*BOX_HIGH/6),
- SEG( 0, 3*BOX_HIGH/6, CHR_WIDE, 3*BOX_HIGH/6),
- -1
- }, lower_right_corner[] =
- {
- SEG( 0, MID_HIGH, MID_WIDE, MID_HIGH),
- SEG( MID_WIDE, MID_HIGH, MID_WIDE, 0),
- -1
- }, upper_right_corner[] =
- {
- SEG( 0, MID_HIGH, MID_WIDE, MID_HIGH),
- SEG( MID_WIDE, MID_HIGH, MID_WIDE, BOX_HIGH),
- -1
- }, upper_left_corner[] =
- {
- SEG( MID_WIDE, MID_HIGH, BOX_WIDE, MID_HIGH),
- SEG( MID_WIDE, MID_HIGH, MID_WIDE, BOX_HIGH),
- -1
- }, lower_left_corner[] =
- {
- SEG( MID_WIDE, 0, MID_WIDE, MID_HIGH),
- SEG( MID_WIDE, MID_WIDE, BOX_WIDE, MID_HIGH),
- -1
- }, cross[] =
- {
- SEG( 0, MID_HIGH, BOX_WIDE, MID_HIGH),
- SEG( MID_WIDE, 0, MID_WIDE, BOX_HIGH),
- -1
- }, scan_line_1[] =
- {
- SEG( 0, 0, BOX_WIDE, 0),
- -1
- }, scan_line_3[] =
- {
- SEG( 0, BOX_HIGH/4, BOX_WIDE, BOX_HIGH/4),
- -1
- }, scan_line_7[] =
- {
- SEG( 0, MID_HIGH, BOX_WIDE, MID_HIGH),
- -1
- }, scan_line_9[] =
- {
- SEG( 0, 3*BOX_HIGH/4, BOX_WIDE, 3*BOX_HIGH/4),
- -1
- }, horizontal_line[] =
- {
- SEG( 0, BOX_HIGH, BOX_WIDE, BOX_HIGH),
- -1
- }, left_tee[] =
- {
- SEG( MID_WIDE, 0, MID_WIDE, BOX_HIGH),
- SEG( MID_WIDE, MID_HIGH, BOX_WIDE, MID_HIGH),
- -1
- }, right_tee[] =
- {
- SEG( MID_WIDE, 0, MID_WIDE, BOX_HIGH),
- SEG( MID_WIDE, MID_HIGH, 0, MID_HIGH),
- -1
- }, bottom_tee[] =
- {
- SEG( 0, MID_HIGH, BOX_WIDE, MID_HIGH),
- SEG( MID_WIDE, 0, MID_WIDE, MID_HIGH),
- -1
- }, top_tee[] =
- {
- SEG( 0, MID_HIGH, BOX_WIDE, MID_HIGH),
- SEG( MID_WIDE, MID_HIGH, MID_WIDE, BOX_HIGH),
- -1
- }, vertical_line[] =
- {
- SEG( MID_WIDE, 0, MID_WIDE, BOX_HIGH),
- -1
- }, less_than_or_equal[] =
- {
- SEG( CHR_WIDE, BOX_HIGH/3, 0, MID_HIGH),
- SEG( CHR_WIDE, 2*BOX_HIGH/3, 0, MID_HIGH),
- SEG( 0, 3*BOX_HIGH/4, CHR_WIDE, 3*BOX_HIGH/4),
- -1
- }, greater_than_or_equal[] =
- {
- SEG( 0, BOX_HIGH/3, CHR_WIDE, MID_HIGH),
- SEG( 0, 2*BOX_HIGH/3, CHR_WIDE, MID_HIGH),
- SEG( 0, 3*BOX_HIGH/4, CHR_WIDE, 3*BOX_HIGH/4),
- -1
- }, greek_pi[] =
- {
- SEG( 0, MID_HIGH, CHR_WIDE, MID_HIGH),
- SEG(5*CHR_WIDE/6, MID_HIGH, 5*CHR_WIDE/6, CHR_HIGH),
- SEG(2*CHR_WIDE/6, MID_HIGH, 2*CHR_WIDE/6, CHR_HIGH),
- -1
- }, not_equal_to[] =
- {
- SEG(2*BOX_WIDE/3, 1*BOX_HIGH/3, 1*BOX_WIDE/3, CHR_HIGH),
- SEG( 0, 2*BOX_HIGH/3, CHR_WIDE, 2*BOX_HIGH/3),
- SEG( 0, MID_HIGH, CHR_WIDE, MID_HIGH),
- -1
- };
- /* *INDENT-ON* */
-
- static const short *lines[] =
- {
- 0, /* 00 (unused) */
- 0, /* 01 diamond */
- 0, /* 02 box */
- glyph_ht, /* 03 HT */
- glyph_ff, /* 04 FF */
- 0, /* 05 CR */
- glyph_lf, /* 06 LF */
- 0, /* 07 degrees (small circle) */
- plus_or_minus, /* 08 */
- glyph_nl, /* 09 */
- glyph_vt, /* 0A */
- lower_right_corner, /* 0B */
- upper_right_corner, /* 0C */
- upper_left_corner, /* 0D */
- lower_left_corner, /* 0E */
- cross, /* 0F */
- scan_line_1, /* 10 */
- scan_line_3, /* 11 */
- scan_line_7, /* 12 */
- scan_line_9, /* 13 */
- horizontal_line, /* 14 */
- left_tee, /* 15 */
- right_tee, /* 16 */
- bottom_tee, /* 17 */
- top_tee, /* 18 */
- vertical_line, /* 19 */
- less_than_or_equal, /* 1A */
- greater_than_or_equal, /* 1B */
- greek_pi, /* 1C */
- not_equal_to, /* 1D */
- 0, /* 1E LB */
- 0, /* 1F bullet */
- };
-
- XGCValues values;
- unsigned long mask;
- GC gc2;
- const short *p;
- unsigned font_width = ((flags & DOUBLEWFONT) ? 2 : 1) * screen->fnt_wide;
- unsigned font_height = ((flags & DOUBLEHFONT) ? 2 : 1) * screen->fnt_high;
-
-#if OPT_WIDE_CHARS
- /*
- * Try to show line-drawing characters if we happen to be in UTF-8
- * mode, but have gotten an old-style font.
- */
- if (screen->utf8_mode
-#if OPT_RENDERFONT
- && !UsingRenderFont(xw)
-#endif
- && (ch > 127)
- && (ch != UCS_REPL)) {
- unsigned n;
- for (n = 1; n < 32; n++) {
- if (dec2ucs(n) == ch
- && !xtermMissingChar(xw, n, (flags & BOLD)
- ? screen->fnt_bold
- : screen->fnt_norm)) {
- TRACE(("...use xterm-style linedrawing\n"));
- ch = n;
- break;
- }
- }
- }
-#endif
-
- TRACE(("DRAW_BOX(%d) cell %dx%d at %d,%d%s\n",
- ch, font_height, font_width, y, x,
- (ch >= (sizeof(lines) / sizeof(lines[0]))
- ? "-BAD"
- : "")));
-
- if (!XGetGCValues(screen->display, gc, GCBackground, &values))
- return;
-
- mask = GCForeground;
- if (ch == 2) {
- values.tile =
- XmuCreateStippledPixmap(XtScreen((Widget) xw),
- getXtermForeground(xw->flags, xw->cur_foreground),
- getXtermBackground(xw->flags, xw->cur_background),
- xw->core.depth);
- if (values.stipple != XtUnspecifiedPixmap) {
- mask |= GCBackground | GCTile | GCFillStyle;
- values.fill_style = FillTiled;
- } else {
- ch = (unsigned) (~0); /* make this not match anything */
- }
- } else {
- values.foreground = values.background;
- }
- gc2 = XCreateGC(screen->display,
- VWindow(screen),
- mask,
- &values);
-
- if (!(flags & NOBACKGROUND)) {
- XFillRectangle(screen->display, VWindow(screen), gc2, x, y,
- font_width,
- font_height);
- }
-
- XCopyGC(screen->display, gc, (1 << GCLastBit) - 1, gc2);
- XSetLineAttributes(screen->display, gc2,
- (flags & BOLD)
- ? ((font_height > 12)
- ? font_height / 12
- : 1)
- : ((font_height > 16)
- ? font_height / 16
- : 1),
- LineSolid,
- CapProjecting,
- JoinMiter);
-
- if (ch == 1) { /* diamond */
- XPoint points[5];
- int npoints = 5, n;
-
- points[0].x = MID_WIDE;
- points[0].y = BOX_HIGH / 4;
-
- points[1].x = 3 * BOX_WIDE / 4;
- points[1].y = MID_HIGH;
-
- points[2].x = points[0].x;
- points[2].y = 3 * BOX_HIGH / 4;
-
- points[3].x = BOX_WIDE / 4;
- points[3].y = points[1].y;
-
- points[4].x = points[0].x;
- points[4].y = points[0].y;
-
- for (n = 0; n < npoints; ++n) {
- SCALE_X(points[n].x);
- SCALE_Y(points[n].y);
- points[n].x += x;
- points[n].y += y;
- }
-
- XFillPolygon(screen->display,
- VWindow(screen), gc2,
- points, npoints,
- Convex, CoordModeOrigin);
- } else if (ch == 2) { /* box */
- XmuReleaseStippledPixmap(XtScreen((Widget) xw), values.tile);
- } else if (ch == 7) { /* degrees */
- unsigned width = (BOX_WIDE / 3);
- int x_coord = MID_WIDE - (width / 2);
- int y_coord = MID_HIGH - width;
-
- SCALE_X(x_coord);
- SCALE_Y(y_coord);
- SCALE_X(width);
-
- XDrawArc(screen->display,
- VWindow(screen), gc2,
- x + x_coord, y + y_coord, width, width,
- 0,
- 360 * 64);
- } else if (ch == 0x1f) { /* bullet */
- unsigned width = 7 * BOX_WIDE / 10;
- int x_coord = MID_WIDE - (width / 3);
- int y_coord = MID_HIGH - (width / 3);
-
- SCALE_X(x_coord);
- SCALE_Y(y_coord);
- SCALE_X(width);
-
- XFillArc(screen->display,
- VWindow(screen), gc2,
- x + x_coord, y + y_coord, width, width,
- 0,
- 360 * 64);
- } else if (ch < (sizeof(lines) / sizeof(lines[0]))
- && (p = lines[ch]) != 0) {
- int coord[4];
- int n = 0;
- while (*p >= 0) {
- coord[n++] = *p++;
- if (n == 4) {
- SCALE_X(coord[0]);
- SCALE_Y(coord[1]);
- SCALE_X(coord[2]);
- SCALE_Y(coord[3]);
- XDrawLine(screen->display,
- VWindow(screen), gc2,
- x + coord[0], y + coord[1],
- x + coord[2], y + coord[3]);
- n = 0;
- }
- }
- } else if (screen->force_all_chars) {
- /* bounding rectangle, for debugging */
- XDrawRectangle(screen->display, VWindow(screen), gc2, x, y,
- font_width - 1,
- font_height - 1);
- }
-
- XFreeGC(screen->display, gc2);
-}
-
-#if OPT_RENDERFONT && OPT_WIDE_CHARS
-
-/*
- * Check if the given character has a glyph known to Xft.
- *
- * see xc/lib/Xft/xftglyphs.c
- */
-Bool
-xtermXftMissing(XtermWidget xw, XftFont * font, unsigned wc)
-{
- unsigned check = XftCharIndex(xw->screen.display, font, wc);
- Bool result = False;
-
- if (check == 0) {
- TRACE(("missingXft %d (%d)\n", wc, ucs2dec(wc)));
- result = True;
- }
- return result;
-}
-
-/*
- * Check if the character corresponds to one of xterm's internal codes for
- * line-drawing characters. That is only a subset of the 1-31 codes used for
- * graphic characters. We want to know specifically about the line-drawing
- * characters because the fonts used by Xft do not always give useful glyphs
- * for line-drawing, and there is no reliable way to detect this.
- */
-Bool
-xtermIsLineDrawing(unsigned wc)
-{
- Bool result;
- switch (wc) {
- case 0x0B: /* lower_right_corner */
- case 0x0C: /* upper_right_corner */
- case 0x0D: /* upper_left_corner */
- case 0x0E: /* lower_left_corner */
- case 0x0F: /* cross */
- case 0x10: /* scan_line_1 */
- case 0x11: /* scan_line_3 */
- case 0x12: /* scan_line_7 */
- case 0x13: /* scan_line_9 */
- case 0x14: /* horizontal_line */
- case 0x15: /* left_tee */
- case 0x16: /* right_tee */
- case 0x17: /* bottom_tee */
- case 0x18: /* top_tee */
- case 0x19: /* vertical_line */
- result = True;
- TRACE(("xtermIsLineDrawing %d\n", wc));
- break;
- default:
- result = False;
- break;
- }
- return result;
-}
-#endif /* OPT_RENDERFONT && OPT_WIDE_CHARS */
-
-#endif /* OPT_BOX_CHARS */
-
-#if OPT_WIDE_CHARS
-#define MY_UCS(ucs,dec) case ucs: result = dec; break
-unsigned
-ucs2dec(unsigned ch)
-{
- unsigned result = ch;
- if ((ch > 127)
- && (ch != UCS_REPL)) {
- switch (ch) {
- MY_UCS(0x25ae, 0); /* black vertical rectangle */
- MY_UCS(0x25c6, 1); /* black diamond */
- MY_UCS(0x2592, 2); /* medium shade */
- MY_UCS(0x2409, 3); /* symbol for horizontal tabulation */
- MY_UCS(0x240c, 4); /* symbol for form feed */
- MY_UCS(0x240d, 5); /* symbol for carriage return */
- MY_UCS(0x240a, 6); /* symbol for line feed */
- MY_UCS(0x00b0, 7); /* degree sign */
- MY_UCS(0x00b1, 8); /* plus-minus sign */
- MY_UCS(0x2424, 9); /* symbol for newline */
- MY_UCS(0x240b, 10); /* symbol for vertical tabulation */
- MY_UCS(0x2518, 11); /* box drawings light up and left */
- MY_UCS(0x2510, 12); /* box drawings light down and left */
- MY_UCS(0x250c, 13); /* box drawings light down and right */
- MY_UCS(0x2514, 14); /* box drawings light up and right */
- MY_UCS(0x253c, 15); /* box drawings light vertical and horizontal */
- MY_UCS(0x23ba, 16); /* box drawings scan 1 */
- MY_UCS(0x23bb, 17); /* box drawings scan 3 */
- MY_UCS(0x2500, 18); /* box drawings light horizontal */
- MY_UCS(0x23bc, 19); /* box drawings scan 7 */
- MY_UCS(0x23bd, 20); /* box drawings scan 9 */
- MY_UCS(0x251c, 21); /* box drawings light vertical and right */
- MY_UCS(0x2524, 22); /* box drawings light vertical and left */
- MY_UCS(0x2534, 23); /* box drawings light up and horizontal */
- MY_UCS(0x252c, 24); /* box drawings light down and horizontal */
- MY_UCS(0x2502, 25); /* box drawings light vertical */
- MY_UCS(0x2264, 26); /* less-than or equal to */
- MY_UCS(0x2265, 27); /* greater-than or equal to */
- MY_UCS(0x03c0, 28); /* greek small letter pi */
- MY_UCS(0x2260, 29); /* not equal to */
- MY_UCS(0x00a3, 30); /* pound sign */
- MY_UCS(0x00b7, 31); /* middle dot */
- }
- }
- return result;
-}
-
-#undef MY_UCS
-#define MY_UCS(ucs,dec) case dec: result = ucs; break
-
-unsigned
-dec2ucs(unsigned ch)
-{
- unsigned result = ch;
- if (ch < 32) {
- switch (ch) {
- MY_UCS(0x25ae, 0); /* black vertical rectangle */
- MY_UCS(0x25c6, 1); /* black diamond */
- MY_UCS(0x2592, 2); /* medium shade */
- MY_UCS(0x2409, 3); /* symbol for horizontal tabulation */
- MY_UCS(0x240c, 4); /* symbol for form feed */
- MY_UCS(0x240d, 5); /* symbol for carriage return */
- MY_UCS(0x240a, 6); /* symbol for line feed */
- MY_UCS(0x00b0, 7); /* degree sign */
- MY_UCS(0x00b1, 8); /* plus-minus sign */
- MY_UCS(0x2424, 9); /* symbol for newline */
- MY_UCS(0x240b, 10); /* symbol for vertical tabulation */
- MY_UCS(0x2518, 11); /* box drawings light up and left */
- MY_UCS(0x2510, 12); /* box drawings light down and left */
- MY_UCS(0x250c, 13); /* box drawings light down and right */
- MY_UCS(0x2514, 14); /* box drawings light up and right */
- MY_UCS(0x253c, 15); /* box drawings light vertical and horizontal */
- MY_UCS(0x23ba, 16); /* box drawings scan 1 */
- MY_UCS(0x23bb, 17); /* box drawings scan 3 */
- MY_UCS(0x2500, 18); /* box drawings light horizontal */
- MY_UCS(0x23bc, 19); /* box drawings scan 7 */
- MY_UCS(0x23bd, 20); /* box drawings scan 9 */
- MY_UCS(0x251c, 21); /* box drawings light vertical and right */
- MY_UCS(0x2524, 22); /* box drawings light vertical and left */
- MY_UCS(0x2534, 23); /* box drawings light up and horizontal */
- MY_UCS(0x252c, 24); /* box drawings light down and horizontal */
- MY_UCS(0x2502, 25); /* box drawings light vertical */
- MY_UCS(0x2264, 26); /* less-than or equal to */
- MY_UCS(0x2265, 27); /* greater-than or equal to */
- MY_UCS(0x03c0, 28); /* greek small letter pi */
- MY_UCS(0x2260, 29); /* not equal to */
- MY_UCS(0x00a3, 30); /* pound sign */
- MY_UCS(0x00b7, 31); /* middle dot */
- }
- }
- return result;
-}
-
-#endif /* OPT_WIDE_CHARS */
-
-#if OPT_SHIFT_FONTS
-static XFontStruct *
-xtermFindFont(TScreen * screen, int fontnum)
-{
- XFontStruct *nfs = 0;
- char *name;
-
- if ((name = screen->MenuFontName(fontnum)) != 0
- && (nfs = XLoadQueryFont(screen->display, name)) != 0) {
- if (EmptyFont(nfs)) {
- XFreeFont(screen->display, nfs);
- nfs = 0;
- }
- }
- return nfs;
-}
-
-static void
-lookupOneFontSize(TScreen * screen, int fontnum)
-{
- if (screen->menu_font_sizes[fontnum] == 0) {
- XFontStruct *fs = xtermFindFont(screen, fontnum);
- screen->menu_font_sizes[fontnum] = -1;
- if (fs != 0) {
- screen->menu_font_sizes[fontnum] = FontSize(fs);
- TRACE(("menu_font_sizes[%d] = %ld\n", fontnum,
- screen->menu_font_sizes[fontnum]));
- XFreeFont(screen->display, fs);
- }
- }
-}
-
-/*
- * Cache the font-sizes so subsequent larger/smaller font actions will go fast.
- */
-static void
-lookupFontSizes(TScreen * screen)
-{
- int n;
-
- for (n = 0; n < NMENUFONTS; n++) {
- lookupOneFontSize(screen, n);
- }
-}
-
-/*
- * Find the index of a larger/smaller font (according to the sign of 'relative'
- * and its magnitude), starting from the 'old' index.
- */
-int
-lookupRelativeFontSize(TScreen * screen, int old, int relative)
-{
- int n, m = -1;
-
- if (!IsIcon(screen)) {
- lookupFontSizes(screen);
- if (relative != 0) {
- for (n = 0; n < NMENUFONTS; ++n) {
- if (screen->menu_font_sizes[n] > 0 &&
- screen->menu_font_sizes[n] != screen->menu_font_sizes[old]) {
- int cmp_0 = ((screen->menu_font_sizes[n] >
- screen->menu_font_sizes[old])
- ? relative
- : -relative);
- int cmp_m = ((m < 0)
- ? 1
- : ((screen->menu_font_sizes[n] <
- screen->menu_font_sizes[m])
- ? relative
- : -relative));
- if (cmp_0 > 0 && cmp_m > 0) {
- m = n;
- }
- }
- }
- if (m >= 0) {
- if (relative > 1)
- m = lookupRelativeFontSize(screen, m, relative - 1);
- else if (relative < -1)
- m = lookupRelativeFontSize(screen, m, relative + 1);
- }
- }
- }
- return m;
-}
-
-/* ARGSUSED */
-void
-HandleLargerFont(Widget w GCC_UNUSED,
- XEvent * event GCC_UNUSED,
- String * params GCC_UNUSED,
- Cardinal *param_count GCC_UNUSED)
-{
- if (term->misc.shift_fonts) {
- TScreen *screen = &term->screen;
- int m;
-
- m = lookupRelativeFontSize(screen, screen->menu_font_number, 1);
- if (m >= 0) {
- SetVTFont(term, m, True, NULL);
- } else {
- Bell(XkbBI_MinorError, 0);
- }
- }
-}
-
-/* ARGSUSED */
-void
-HandleSmallerFont(Widget w GCC_UNUSED,
- XEvent * event GCC_UNUSED,
- String * params GCC_UNUSED,
- Cardinal *param_count GCC_UNUSED)
-{
- if (term->misc.shift_fonts) {
- TScreen *screen = &term->screen;
- int m;
-
- m = lookupRelativeFontSize(screen, screen->menu_font_number, -1);
- if (m >= 0) {
- SetVTFont(term, m, True, NULL);
- } else {
- Bell(XkbBI_MinorError, 0);
- }
- }
-}
-#endif
-
-/* ARGSUSED */
-void
-HandleSetFont(Widget w GCC_UNUSED,
- XEvent * event GCC_UNUSED,
- String * params,
- Cardinal *param_count)
-{
- int fontnum;
- VTFontNames fonts;
-
- memset(&fonts, 0, sizeof(fonts));
-
- if (*param_count == 0) {
- fontnum = fontMenu_fontdefault;
- } else {
- Cardinal maxparams = 1; /* total number of params allowed */
-
- switch (params[0][0]) {
- case 'd':
- case 'D':
- case '0':
- fontnum = fontMenu_fontdefault;
- break;
- case '1':
- fontnum = fontMenu_font1;
- break;
- case '2':
- fontnum = fontMenu_font2;
- break;
- case '3':
- fontnum = fontMenu_font3;
- break;
- case '4':
- fontnum = fontMenu_font4;
- break;
- case '5':
- fontnum = fontMenu_font5;
- break;
- case '6':
- fontnum = fontMenu_font6;
- break;
- case 'e':
- case 'E':
- fontnum = fontMenu_fontescape;
-#if OPT_WIDE_CHARS
- maxparams = 5;
-#else
- maxparams = 3;
-#endif
- break;
- case 's':
- case 'S':
- fontnum = fontMenu_fontsel;
- maxparams = 2;
- break;
- default:
- Bell(XkbBI_MinorError, 0);
- return;
- }
- if (*param_count > maxparams) { /* see if extra args given */
- Bell(XkbBI_MinorError, 0);
- return;
- }
- switch (*param_count) { /* assign 'em */
-#if OPT_WIDE_CHARS
- case 5:
- fonts.f_wb = params[4];
- /* FALLTHRU */
- case 4:
- fonts.f_w = params[3];
- /* FALLTHRU */
-#endif
- case 3:
- fonts.f_b = params[2];
- /* FALLTHRU */
- case 2:
- fonts.f_n = params[1];
- break;
- }
- }
-
- SetVTFont(term, fontnum, True, &fonts);
-}
-
-void
-SetVTFont(XtermWidget xw,
- int which,
- Bool doresize,
- const VTFontNames * fonts)
-{
- TScreen *screen = &xw->screen;
-
- TRACE(("SetVTFont(which=%d, f_n=%s, f_b=%s)\n", which,
- (fonts && fonts->f_n) ? fonts->f_n : "<null>",
- (fonts && fonts->f_b) ? fonts->f_b : "<null>"));
-
- if (IsIcon(screen)) {
- Bell(XkbBI_MinorError, 0);
- } else if (which >= 0 && which < NMENUFONTS) {
- VTFontNames myfonts;
-
- memset(&myfonts, 0, sizeof(myfonts));
- if (fonts != 0)
- myfonts = *fonts;
-
- if (which == fontMenu_fontsel) { /* go get the selection */
- FindFontSelection(myfonts.f_n, False);
- return;
- } else {
- if (myfonts.f_n == 0) {
- myfonts.f_n = screen->MenuFontName(which);
- TRACE(("set myfonts.f_n from menu_font_names[%d][fNorm] %s\n",
- which, NonNull(myfonts.f_n)));
- }
- if (myfonts.f_b == 0) {
- myfonts.f_b = screen->menu_font_names[which][fBold];
- TRACE(("set myfonts.f_b from menu_font_names[%d][fBold] %s\n",
- which, NonNull(myfonts.f_b)));
- }
-#if OPT_WIDE_CHARS
- if (myfonts.f_w == 0) {
- myfonts.f_w = screen->menu_font_names[which][fWide];
- TRACE(("set myfonts.f_w from menu_font_names[%d][fWide] %s\n",
- which, NonNull(myfonts.f_w)));
- }
- if (myfonts.f_wb == 0) {
- myfonts.f_wb = screen->menu_font_names[which][fWBold];
- TRACE(("set myfonts.f_wb from menu_font_names[%d][fWBold] %s\n",
- which, NonNull(myfonts.f_wb)));
- }
-#endif
- if (xtermLoadFont(xw,
- &myfonts,
- doresize, which)) {
- return;
- }
- }
- }
-
- Bell(XkbBI_MinorError, 0);
- return;
-}
diff --git a/nx-X11/programs/xterm/fontutils.h b/nx-X11/programs/xterm/fontutils.h
deleted file mode 100644
index 536e707b0..000000000
--- a/nx-X11/programs/xterm/fontutils.h
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * $XFree86: xc/programs/xterm/fontutils.h,v 1.16 2005/08/05 01:25:39 dickey Exp $
- */
-
-/************************************************************
-
-Copyright 1998-2004,2005 by Thomas E. Dickey
-
- All Rights Reserved
-
-Permission is hereby granted, free of charge, to any person obtaining a
-copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name(s) of the above copyright
-holders shall not be used in advertising or otherwise to promote the
-sale, use or other dealings in this Software without prior written
-authorization.
-
-********************************************************/
-
-#ifndef included_fontutils_h
-#define included_fontutils_h 1
-
-#include <xterm.h>
-
-extern Bool xtermLoadDefaultFonts (XtermWidget w);
-extern const VTFontNames * xtermFontName(char *normal);
-extern int lookupRelativeFontSize(TScreen * screen, int old, int relative);
-extern int xtermLoadFont (XtermWidget xw,
- const VTFontNames *fonts,
- Bool doresize, int fontnum);
-extern void HandleSetFont PROTO_XT_ACTIONS_ARGS;
-extern void SetVTFont (XtermWidget xw, int i, Bool doresize, const VTFontNames *fonts);
-extern void xtermComputeFontInfo (XtermWidget xw, struct _vtwin *win, XFontStruct *font, int sbwidth);
-extern void xtermSaveFontInfo (TScreen *screen, XFontStruct *font);
-extern void xtermSetCursorBox (TScreen *screen);
-extern void xtermUpdateFontInfo (XtermWidget xw, Bool doresize);
-
-#if OPT_DEC_CHRSET
-extern char *xtermSpecialFont(TScreen *screen, unsigned atts, unsigned chrset);
-#endif
-
-#if OPT_BOX_CHARS
-extern Bool xtermMissingChar(XtermWidget xw, unsigned ch, XFontStruct *font);
-extern void xtermDrawBoxChar(XtermWidget xw, unsigned ch, unsigned flags, GC gc, int x, int y);
-#endif
-
-#if OPT_LOAD_VTFONTS
-extern void HandleLoadVTFonts PROTO_XT_ACTIONS_ARGS;
-#endif
-
-#if OPT_LOAD_VTFONTS || OPT_WIDE_CHARS
-extern Bool xtermLoadWideFonts(XtermWidget w, Bool nullOk);
-#endif
-
-#define xtermIsDecGraphic(ch) ((ch) > 0 && (ch) < 32)
-
-#if OPT_RENDERFONT && OPT_WIDE_CHARS
-extern Bool xtermIsLineDrawing(unsigned /* wc */);
-extern Bool xtermXftMissing(XtermWidget /* xw */, XftFont * /* font */, unsigned /* wc */);
-#endif
-
-#if OPT_SHIFT_FONTS
-extern void HandleSmallerFont PROTO_XT_ACTIONS_ARGS;
-extern void HandleLargerFont PROTO_XT_ACTIONS_ARGS;
-#endif
-
-#if OPT_WIDE_CHARS
-extern unsigned ucs2dec(unsigned);
-extern unsigned dec2ucs(unsigned);
-#endif
-
-#endif /* included_fontutils_h */
diff --git a/nx-X11/programs/xterm/gen-pc-fkeys.pl b/nx-X11/programs/xterm/gen-pc-fkeys.pl
deleted file mode 100755
index c7ba80268..000000000
--- a/nx-X11/programs/xterm/gen-pc-fkeys.pl
+++ /dev/null
@@ -1,98 +0,0 @@
-#! /usr/bin/perl -w
-# Author: Thomas E. Dickey
-# $XTermId: gen-pc-fkeys.pl,v 1.5 2005/04/03 16:58:29 tom Exp $
-# $XFree86: xc/programs/xterm/gen-pc-fkeys.pl,v 1.2 2005/03/29 04:00:32 tsi Exp $
-#
-# Construct a list of function-key definitions corresponding to xterm's
-# Sun/PC keyboard. This uses infocmp to obtain the strings to modify (and
-# verify).
-use strict;
-
-my(@old_keys);
-my($min_fkeys,$max_fkeys,$max_modifier,$modify_opt,$terminfo);
-
-$min_fkeys=12; # the number of "real" function keys on your keyboard
-$max_fkeys=64; # the number of function-keys terminfo can support
-$max_modifier=8; # modifier 1 + (1=shift, 2=alt, 4=control 8=meta)
-$modify_opt=2; # xterm's modifyCursorKeys resource
-$terminfo="xterm-new"; # the terminfo entry to use
-
-my($cur_modifier, $cur_fkey);
-
-# apply the given modifier to the terminfo string, return the result
-sub modify_it {
- my $code = $_[0];
- my $text = $_[1];
- if ($code != 1) {
- my $piece = substr $text, 0, length ($text) - 1;
- my $final = substr $text, length ($text) - 1;
- my $check = substr $piece, length ($piece) - 1;
- if ($check =~ /[0-9]/) {
- $code = ";" . $code;
- }
- $text = $piece . $code . $final;
- }
- return $text;
-}
-
-# compute the next modifier value
-sub next_modifier {
- my $code = $_[0];
- my $mask = $code - 1;
- if ($mask == 0) {
- $mask = 1;
- } elsif ($mask == 1) {
- $mask = 4;
- } elsif ($mask == 2) {
- $mask = 3; # FIXME
- } elsif ($mask == 4) {
- $mask = 5;
- } elsif ($mask == 5) {
- $mask = 2;
- }
- # printf ("# next_modifier(%d) = %d\n", $code, $mask + 1);
- return $mask + 1;
-}
-
-# Read the terminfo entry's list of function keys $old_keys[].
-# We could handle $old_keys[0], but choose to start numbering from 1.
-sub readterm() {
- my($key,$n,$str);
- my(@list) = `infocmp -1 $terminfo`;
- for $n (0..$#list) {
- chop $list[$n];
- $list[$n] =~ s/^[[:space:]]//;
- if ( $list[$n] =~ /^kf[[:digit:]]+=/ ) {
- $key = $list[$n];
- $key =~ s/^kf//;
- $key =~ s/=.*//;
- $str = $list[$n];
- $str =~ s/^kf[[:digit:]]+=//;
- $str =~ s/,[[:space:]]*$//;
- # printf "$n:%s(%d)(%s)\n", $list[$n], $key, $str;
- $old_keys[$key] = $str;
- }
- }
- # printf ("last index:%d\n", $#old_keys);
-}
-
-readterm();
-
-# Cycling through the modifiers is not just like counting. Users prefer
-# pressing one modifier (even if using Emacs). So first we cycle through
-# the individual modifiers, then for completeness two, three, etc.
-printf "xterm+pcfkeys|fragment for PC-style keys, \n";
-for ($cur_fkey = 1, $cur_modifier = 1; $cur_fkey < $max_fkeys; ++$cur_fkey) {
- my $index = (($cur_fkey - 1) % $min_fkeys);
- if ($index == 0 && $cur_fkey != 1) {
- $cur_modifier = next_modifier($cur_modifier);
- }
- my $input = $old_keys[$index + 1];
- my $result = modify_it($cur_modifier,$input);
- printf "\tkf%d=%s, \n", $cur_fkey, $result;
- if (defined $old_keys[$cur_fkey]) {
- if ($old_keys[$cur_fkey] ne $result) {
- printf "# diff %s\n", $old_keys[$cur_fkey];
- }
- }
-}
diff --git a/nx-X11/programs/xterm/input.c b/nx-X11/programs/xterm/input.c
deleted file mode 100644
index 2e93686a9..000000000
--- a/nx-X11/programs/xterm/input.c
+++ /dev/null
@@ -1,1259 +0,0 @@
-/* $XTermId: input.c,v 1.174 2005/09/18 23:48:12 tom Exp $ */
-
-/*
- * $Xorg: input.c,v 1.3 2000/08/17 19:55:08 cpqbld Exp $
- */
-
-/* $XFree86: xc/programs/xterm/input.c,v 3.73 2005/09/18 23:48:12 dickey Exp $ */
-
-/*
- * Copyright 1999-2004,2005 by Thomas E. Dickey
- *
- * All Rights Reserved
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sublicense, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- * IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY
- * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- * Except as contained in this notice, the name(s) of the above copyright
- * holders shall not be used in advertising or otherwise to promote the
- * sale, use or other dealings in this Software without prior written
- * authorization.
- *
- *
- * Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
- *
- * All Rights Reserved
- *
- * Permission to use, copy, modify, and distribute this software and its
- * documentation for any purpose and without fee is hereby granted,
- * provided that the above copyright notice appear in all copies and that
- * both that copyright notice and this permission notice appear in
- * supporting documentation, and that the name of Digital Equipment
- * Corporation not be used in advertising or publicity pertaining to
- * distribution of the software without specific, written prior permission.
- *
- *
- * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
- * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
- * DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
- * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
- * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
- * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- * SOFTWARE.
- */
-
-/* input.c */
-
-#include <xterm.h>
-
-#include <X11/keysym.h>
-
-#ifdef VMS
-#include <X11/keysymdef.h>
-#endif
-
-#if HAVE_X11_DECKEYSYM_H
-#include <X11/DECkeysym.h>
-#endif
-
-#if HAVE_X11_SUNKEYSYM_H
-#include <X11/Sunkeysym.h>
-#endif
-
-#include <X11/Xutil.h>
-#include <ctype.h>
-
-#include <xutf8.h>
-
-#include <data.h>
-#include <fontutils.h>
-
-#define MAP(from, to) case from: return(to)
-
-#define KEYSYM_FMT "0x%04lX" /* simplify matching <X11/keysymdef.h> */
-
-/* 0123456789 abc def0123456789abcdef0123456789abcdef0123456789abcd */
-static char *kypd_num = " XXXXXXXX\tXXX\rXXXxxxxXXXXXXXXXXXXXXXXXXXXX*+,-./0123456789XXX=";
-
-/* 0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcd */
-static char *kypd_apl = " ABCDEFGHIJKLMNOPQRSTUVWXYZ??????abcdefghijklmnopqrstuvwxyzXXX";
-
-static char *curfinal = "HDACB FE";
-
-static int decfuncvalue(KeySym keycode);
-static int sunfuncvalue(KeySym keycode);
-#if OPT_HP_FUNC_KEYS
-static int hpfuncvalue(KeySym keycode);
-#endif
-#if OPT_SCO_FUNC_KEYS
-static int scofuncvalue(KeySym keycode);
-#endif
-
-#if OPT_TRACE
-static char *
-ModifierName(unsigned modifier)
-{
- char *s = "";
- if (modifier & ShiftMask)
- s = " Shift";
- else if (modifier & LockMask)
- s = " Lock";
- else if (modifier & ControlMask)
- s = " Control";
- else if (modifier & Mod1Mask)
- s = " Mod1";
- else if (modifier & Mod2Mask)
- s = " Mod2";
- else if (modifier & Mod3Mask)
- s = " Mod3";
- else if (modifier & Mod4Mask)
- s = " Mod4";
- else if (modifier & Mod5Mask)
- s = " Mod5";
- return s;
-}
-#endif
-
-static void
-AdjustAfterInput(TScreen * screen)
-{
- if (screen->scrollkey && screen->topline != 0)
- WindowScroll(screen, 0);
- if (screen->marginbell) {
- int col = screen->max_col - screen->nmarginbell;
- if (screen->bellarmed >= 0) {
- if (screen->bellarmed == screen->cur_row) {
- if (screen->cur_col >= col) {
- Bell(XkbBI_MarginBell, 0);
- screen->bellarmed = -1;
- }
- } else
- screen->bellarmed =
- screen->cur_col < col ? screen->cur_row : -1;
- } else if (screen->cur_col < col)
- screen->bellarmed = screen->cur_row;
- }
-}
-
-/* returns true if the key is on the editing keypad */
-static Bool
-IsEditFunctionKey(KeySym keysym)
-{
- switch (keysym) {
- case XK_Prior:
- case XK_Next:
- case XK_Insert:
- case XK_Find:
- case XK_Select:
-#ifdef DXK_Remove
- case DXK_Remove:
-#endif
-#ifdef XK_KP_Delete
- case XK_KP_Delete:
- case XK_KP_Insert:
-#endif
-#ifdef XK_ISO_Left_Tab
- case XK_ISO_Left_Tab:
-#endif
- return True;
- default:
- return False;
- }
-}
-
-#if OPT_SUNPC_KBD
-/*
- * If we have told xterm that our keyboard is really a Sun/PC keyboard, this is
- * enough to make a reasonable approximation to DEC vt220 numeric and editing
- * keypads.
- */
-static KeySym
-TranslateFromSUNPC(KeySym keysym)
-{
- /* *INDENT-OFF* */
- static struct {
- KeySym before, after;
- } table[] = {
-#ifdef DXK_Remove
- { XK_Delete, DXK_Remove },
-#endif
- { XK_Home, XK_Find },
- { XK_End, XK_Select },
-#ifdef XK_KP_Home
- { XK_Delete, XK_KP_Decimal },
- { XK_KP_Delete, XK_KP_Decimal },
- { XK_KP_Insert, XK_KP_0 },
- { XK_KP_End, XK_KP_1 },
- { XK_KP_Down, XK_KP_2 },
- { XK_KP_Next, XK_KP_3 },
- { XK_KP_Left, XK_KP_4 },
- { XK_KP_Begin, XK_KP_5 },
- { XK_KP_Right, XK_KP_6 },
- { XK_KP_Home, XK_KP_7 },
- { XK_KP_Up, XK_KP_8 },
- { XK_KP_Prior, XK_KP_9 },
-#endif
- };
- /* *INDENT-ON* */
-
- unsigned n;
-
- for (n = 0; n < sizeof(table) / sizeof(table[0]); n++) {
- if (table[n].before == keysym) {
- TRACE(("...Input keypad before was " KEYSYM_FMT "\n", keysym));
- keysym = table[n].after;
- TRACE(("...Input keypad changed to " KEYSYM_FMT "\n", keysym));
- break;
- }
- }
- return keysym;
-}
-#endif
-
-/*
- * Modifiers other than shift, control and numlock should be reserved for the
- * user. We use the first two explicitly to support VT220 keyboard, and the
- * third is used implicitly in keyboard configuration to make the keypad work.
- */
-#define isModified(event) \
- (event->state & \
- (Mod1Mask | Mod2Mask | Mod3Mask | Mod4Mask | Mod5Mask ))
-
-#define VT52_KEYPAD \
- if_OPT_VT52_MODE(screen,{ \
- reply.a_type = ESC; \
- reply.a_pintro = '?'; \
- })
-
-#define VT52_CURSOR_KEYS \
- if_OPT_VT52_MODE(screen,{ \
- reply.a_type = ESC; \
- })
-
-#define APPEND_PARM(number) \
- reply.a_param[(int) reply.a_nparam] = number, \
- reply.a_nparam += 1
-
-#if OPT_MOD_FKEYS
-#define MODIFIER_PARM \
- if (modify_parm > 1) APPEND_PARM(modify_parm)
-#else
-#define MODIFIER_PARM /*nothing */
-#endif
-
-/*
- * Determine if we use the \E[3~ sequence for Delete, or the legacy ^?. We
- * maintain the delete_is_del value as 3 states: unspecified(2), true and
- * false. If unspecified, it is handled differently according to whether the
- * legacy keyboard support is enabled, or if xterm emulates a VT220.
- *
- * Once the user (or application) has specified delete_is_del via resource
- * setting, popup menu or escape sequence, it overrides the keyboard type
- * rather than the reverse.
- */
-Bool
-xtermDeleteIsDEL(void)
-{
- TScreen *screen = &term->screen;
- Bool result = True;
-
- if (term->keyboard.type == keyboardIsDefault
- || term->keyboard.type == keyboardIsVT220)
- result = (screen->delete_is_del == True);
-
- if (term->keyboard.type == keyboardIsLegacy)
- result = (screen->delete_is_del != False);
-
- TRACE(("xtermDeleteIsDEL(%d/%d) = %d\n",
- term->keyboard.type,
- screen->delete_is_del,
- result));
-
- return result;
-}
-
-void
-Input(TKeyboard * keyboard,
- TScreen * screen,
- XKeyEvent * event,
- Bool eightbit)
-{
-
-#define STRBUFSIZE 500
-
- char strbuf[STRBUFSIZE];
- Char *string;
- int key = False;
- int pty = screen->respond;
- int nbytes;
- KeySym keysym = 0;
- ANSI reply;
- int dec_code;
- short modify_parm = 0;
- int keypad_mode = ((keyboard->flags & MODE_DECKPAM) != 0);
-
- /* Ignore characters typed at the keyboard */
- if (keyboard->flags & MODE_KAM)
- return;
-
-#if OPT_TCAP_QUERY
- if (screen->tc_query >= 0) {
- keysym = screen->tc_query;
- if (keysym != XK_BackSpace) {
- nbytes = 0;
- strbuf[0] = 0;
- } else {
- nbytes = 1;
- strbuf[0] = 8;
- }
- } else
-#endif
-#if OPT_I18N_SUPPORT
- if (screen->xic) {
- Status status_return;
-#if OPT_WIDE_CHARS
- if (screen->utf8_mode)
- nbytes = Xutf8LookupString(screen->xic, event,
- strbuf, sizeof(strbuf),
- &keysym, &status_return);
- else
-#endif
- nbytes = XmbLookupString(screen->xic, event,
- strbuf, sizeof(strbuf),
- &keysym, &status_return);
- } else
-#endif
- {
- static XComposeStatus compose_status =
- {NULL, 0};
- nbytes = XLookupString(event, strbuf, sizeof(strbuf),
- &keysym, &compose_status);
- }
-
- string = (Char *) & strbuf[0];
- reply.a_pintro = 0;
- reply.a_final = 0;
- reply.a_nparam = 0;
- reply.a_inters = 0;
-
- TRACE(("Input keysym "
- KEYSYM_FMT
- ", %d:'%.*s'%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s\n",
- keysym,
- nbytes,
- nbytes > 0 ? nbytes : 1,
- nbytes > 0 ? strbuf : "",
- ModifierName(event->state & ShiftMask),
- ModifierName(event->state & LockMask),
- ModifierName(event->state & ControlMask),
- ModifierName(event->state & Mod1Mask),
- ModifierName(event->state & Mod2Mask),
- ModifierName(event->state & Mod3Mask),
- ModifierName(event->state & Mod4Mask),
- ModifierName(event->state & Mod5Mask),
- eightbit ? " 8bit" : " 7bit",
- IsKeypadKey(keysym) ? " KeypadKey" : "",
- IsCursorKey(keysym) ? " CursorKey" : "",
- IsPFKey(keysym) ? " PFKey" : "",
- IsFunctionKey(keysym) ? " FKey" : "",
- IsMiscFunctionKey(keysym) ? " MiscFKey" : "",
- IsEditFunctionKey(keysym) ? " EditFkey" : ""));
-
-#if OPT_SUNPC_KBD
- /*
- * DEC keyboards don't have keypad(+), but do have keypad(,) instead.
- * Other (Sun, PC) keyboards commonly have keypad(+), but no keypad(,)
- * - it's a pain for users to work around.
- */
- if (keyboard->type == keyboardIsVT220
- && (event->state & ShiftMask) == 0) {
- if (keysym == XK_KP_Add) {
- keysym = XK_KP_Separator;
- TRACE(("...Input keypad(+), change keysym to "
- KEYSYM_FMT
- "\n",
- keysym));
- }
- if ((event->state & ControlMask) != 0
- && keysym == XK_KP_Separator) {
- keysym = XK_KP_Subtract;
- TRACE(("...Input control/keypad(,), change keysym to "
- KEYSYM_FMT
- "\n",
- keysym));
- }
- }
-#endif
-
- /*
- * The keyboard tables may give us different keypad codes according to
- * whether NumLock is pressed. Use this check to simplify the process
- * of determining whether we generate an escape sequence for a keypad
- * key, or force it to the value kypd_num[]. There is no fixed
- * modifier for this feature, so we assume that it is the one assigned
- * to the NumLock key.
- *
- * This check used to try to return the contents of strbuf, but that
- * does not work properly when a control modifier is given (trash is
- * returned in the buffer in some cases -- perhaps an X bug).
- */
-#if OPT_NUM_LOCK
- if (nbytes == 1
- && IsKeypadKey(keysym)
- && term->misc.real_NumLock
- && (term->misc.num_lock & event->state) != 0) {
- keypad_mode = 0;
- TRACE(("...Input num_lock, force keypad_mode off\n"));
- }
-#endif
-
-#if OPT_MOD_FKEYS
- /*
- * If we are in the normal (possibly Sun/PC) keyboard state, allow
- * modifiers to add a parameter to the function-key control sequences.
- */
- if (event->state != 0
- && !(IsKeypadKey(keysym) && keypad_mode)
-#if OPT_SUNPC_KBD
- && keyboard->type != keyboardIsVT220
-#endif
-#if OPT_VT52_MODE
- && screen->vtXX_level != 0
-#endif
- ) {
-/*
-* Modifier codes:
-* None 1
-* Shift 2 = 1(None)+1(Shift)
-* Alt 3 = 1(None)+2(Alt)
-* Alt+Shift 4 = 1(None)+1(Shift)+2(Alt)
-* Ctrl 5 = 1(None)+4(Ctrl)
-* Ctrl+Shift 6 = 1(None)+1(Shift)+4(Ctrl)
-* Ctrl+Alt 7 = 1(None)+2(Alt)+4(Ctrl)
-* Ctrl+Alt+Shift 8 = 1(None)+1(Shift)+2(Alt)+4(Ctrl)
-* Meta 9 = 1(None)+8(Meta)
-* Meta+Shift 10 = 1(None)+8(Meta)+1(Shift)
-* Meta+Alt 11 = 1(None)+8(Meta)+2(Alt)
-* Meta+Alt+Shift 12 = 1(None)+8(Meta)+1(Shift)+2(Alt)
-* Meta+Ctrl 13 = 1(None)+8(Meta)+4(Ctrl)
-* Meta+Ctrl+Shift 14 = 1(None)+8(Meta)+1(Shift)+4(Ctrl)
-* Meta+Ctrl+Alt 15 = 1(None)+8(Meta)+2(Alt)+4(Ctrl)
-* Meta+Ctrl+Alt+Shift 16 = 1(None)+8(Meta)+1(Shift)+2(Alt)+4(Ctrl)
-*/
-#define UNMOD 1
-#define SHIFT 1
-#define ALT 2
-#define CTRL 4
-#define META 8
- modify_parm = UNMOD;
- if (event->state & ShiftMask) {
- modify_parm += SHIFT;
- }
- if (event->state & ControlMask) {
- modify_parm += CTRL;
- }
-#if OPT_NUM_LOCK
- if ((term->misc.alwaysUseMods
- || term->misc.real_NumLock)
- && ((event->state & term->misc.alt_left) != 0
- || (event->state & term->misc.alt_right)) != 0) {
- modify_parm += ALT;
- }
- if (term->misc.alwaysUseMods
- && ((event->state & term->misc.meta_left) != 0
- || (event->state & term->misc.meta_right)) != 0) {
- modify_parm += META;
- }
-#endif
- TRACE(("...ModifierParm %d\n", modify_parm));
- }
-#endif /* OPT_MOD_FKEYS */
-
- /* VT300 & up: backarrow toggle */
- if ((nbytes == 1)
- && (((keyboard->flags & MODE_DECBKM) == 0)
- ^ ((event->state & ControlMask) != 0))
- && (keysym == XK_BackSpace)) {
- strbuf[0] = '\177';
- TRACE(("...Input backarrow changed to %d\n", *strbuf));
- }
-#if OPT_SUNPC_KBD
- /* make an DEC editing-keypad from a Sun or PC editing-keypad */
- if (keyboard->type == keyboardIsVT220
- && (keysym != XK_Delete || !xtermDeleteIsDEL()))
- keysym = TranslateFromSUNPC(keysym);
- else
-#endif
- {
-#ifdef XK_KP_Home
- if (keysym >= XK_KP_Home && keysym <= XK_KP_Begin) {
- TRACE(("...Input keypad before was " KEYSYM_FMT "\n", keysym));
- keysym += XK_Home - XK_KP_Home;
- TRACE(("...Input keypad changed to " KEYSYM_FMT "\n", keysym));
- }
-#endif
- }
-
-#if OPT_HP_FUNC_KEYS
- if (keyboard->type == keyboardIsHP
- && (reply.a_final = hpfuncvalue(keysym)) != 0) {
- reply.a_type = ESC;
- MODIFIER_PARM;
- unparseseq(&reply, pty);
- } else
-#endif
-#if OPT_SCO_FUNC_KEYS
- if (keyboard->type == keyboardIsSCO
- && (reply.a_final = scofuncvalue(keysym)) != 0) {
- reply.a_type = CSI;
- MODIFIER_PARM;
- unparseseq(&reply, pty);
- } else
-#endif
- if (IsPFKey(keysym)) {
- reply.a_type = SS3;
- reply.a_final = keysym - XK_KP_F1 + 'P';
- VT52_CURSOR_KEYS;
- MODIFIER_PARM;
- unparseseq(&reply, pty);
- key = True;
-#if 0 /* OPT_SUNPC_KBD should suppress - but only for vt220 compatibility */
- } else if (keyboard->type == keyboardIsVT220
- && screen->vtXX_level <= 1
- && IsEditFunctionKey(keysym)) {
- key = False; /* ignore editing-keypad in vt100 mode */
-#endif
- } else if (IsCursorKey(keysym) &&
- keysym != XK_Prior && keysym != XK_Next) {
- if (keyboard->flags & MODE_DECCKM) {
- reply.a_type = SS3;
- } else {
- reply.a_type = CSI;
- }
-#if OPT_MOD_FKEYS
- if (modify_parm > 1) {
- if (keyboard->modify_cursor_keys)
- reply.a_type = CSI; /* SS3 should not have params */
- if (keyboard->modify_cursor_keys > 1)
- APPEND_PARM(1); /* force modifier to 2nd param */
- if (keyboard->modify_cursor_keys > 2)
- reply.a_pintro = '>'; /* mark this as "private" */
- }
-#endif
- reply.a_final = curfinal[keysym - XK_Home];
- VT52_CURSOR_KEYS;
- MODIFIER_PARM;
- unparseseq(&reply, pty);
- key = True;
- } else if (IsFunctionKey(keysym)
- || IsMiscFunctionKey(keysym)
- || IsEditFunctionKey(keysym)
-#ifdef SunXK_F36
- || keysym == SunXK_F36
- || keysym == SunXK_F37
-#endif
- || (keysym == XK_Delete
- && ((modify_parm > 1)
- || !xtermDeleteIsDEL()))) {
-#if OPT_SUNPC_KBD
- if (keyboard->type == keyboardIsVT220) {
- if ((event->state & ControlMask)
- && (keysym >= XK_F1 && keysym <= XK_F12))
- keysym += term->misc.ctrl_fkeys;
- }
-#endif
-
- dec_code = decfuncvalue(keysym);
- if ((event->state & ShiftMask)
-#if OPT_SUNPC_KBD
- && keyboard->type == keyboardIsVT220
-#endif
- && ((string = (Char *) udk_lookup(dec_code, &nbytes)) != 0)) {
- while (nbytes-- > 0)
- unparseputc(*string++, pty);
- }
-#if OPT_VT52_MODE
- /*
- * Interpret F1-F4 as PF1-PF4 for VT52, VT100
- */
- else if (keyboard->type != keyboardIsSun
- && keyboard->type != keyboardIsLegacy
- && (dec_code >= 11 && dec_code <= 14)) {
- reply.a_type = SS3;
- VT52_CURSOR_KEYS;
- reply.a_final = A2E(dec_code - 11 + E2A('P'));
- MODIFIER_PARM;
- unparseseq(&reply, pty);
- }
-#endif
- else {
- reply.a_type = CSI;
- reply.a_nparam = 1;
- reply.a_final = 0;
- MODIFIER_PARM;
- if (keyboard->type == keyboardIsSun) {
- reply.a_param[0] = sunfuncvalue(keysym);
- reply.a_final = 'z';
-#ifdef XK_ISO_Left_Tab
- } else if (keysym == XK_ISO_Left_Tab) {
- reply.a_nparam = 0;
- reply.a_final = 'Z';
-#endif
- } else {
- reply.a_param[0] = dec_code;
- reply.a_final = '~';
- }
- if (reply.a_final != 0
- && (reply.a_nparam == 0 || reply.a_param[0] >= 0))
- unparseseq(&reply, pty);
- }
- key = True;
- } else if (IsKeypadKey(keysym)) {
- if (keypad_mode) {
- reply.a_type = SS3;
- reply.a_final = kypd_apl[keysym - XK_KP_Space];
- VT52_KEYPAD;
- MODIFIER_PARM;
- unparseseq(&reply, pty);
- } else {
- unparseputc(kypd_num[keysym - XK_KP_Space], pty);
- }
- key = True;
- } else if (nbytes > 0) {
-#if OPT_TEK4014
- if (screen->TekGIN) {
- TekEnqMouse(*string++);
- TekGINoff();
- nbytes--;
- }
-#endif
- if (nbytes == 1) {
-#if OPT_NUM_LOCK
- /*
- * Send ESC if we have a META modifier and
- * metaSendsEcape is true. Like eightBitInput, except
- * that it is not associated with terminal settings.
- */
- if (screen->meta_sends_esc
- && ((event->state & term->misc.meta_left) != 0
- || (event->state & term->misc.meta_right) != 0)) {
- TRACE(("...input-char is modified by META\n"));
- eightbit = False;
- unparseputc(ESC, pty); /* escape */
- }
-#endif
- if (eightbit && screen->input_eight_bits) {
- IChar ch = CharOf(*string);
- if (ch < 128) {
- *string |= 0x80;
- TRACE(("...input shift from %d to %d (%#x to %#x)\n",
- ch, CharOf(*string),
- ch, CharOf(*string)));
-#if OPT_WIDE_CHARS
- if (screen->utf8_mode) {
- /*
- * We could interpret the incoming code as "in the
- * current locale", but it's simpler to treat it as
- * a Unicode value to translate to UTF-8.
- */
- ch = CharOf(*string);
- nbytes = 2;
- string[0] = 0xc0 | ((ch >> 6) & 0x3);
- string[1] = 0x80 | (ch & 0x3f);
- TRACE(("...encoded %#x in UTF-8 as %#x,%#x\n",
- ch, string[0], string[1]));
- }
-#endif
- }
- eightbit = False;
- }
- /* VT220 & up: National Replacement Characters */
- if ((term->flags & NATIONAL) != 0) {
- int cmp = xtermCharSetIn(CharOf(*string),
- screen->keyboard_dialect[0]);
- TRACE(("...input NRC %d, %s %d\n",
- CharOf(*string),
- (CharOf(*string) == cmp)
- ? "unchanged"
- : "changed to",
- CharOf(cmp)));
- *string = cmp;
- } else if (eightbit) {
- unparseputc(ESC, pty); /* escape */
- } else if (*string == '?'
- && (event->state & ControlMask) != 0) {
- *string = 127;
- }
- }
- while (nbytes-- > 0)
- unparseputc(*string++, pty);
- key = True;
- }
- if (key && !TEK4014_ACTIVE(screen))
- AdjustAfterInput(screen);
-#ifdef ENABLE_PRINT
- if (keysym == XK_F2)
- TekPrint();
-#endif
- return;
-}
-
-void
-StringInput(TScreen * screen, Char * string, size_t nbytes)
-{
- int pty = screen->respond;
-
- TRACE(("InputString (%s,%d)\n",
- visibleChars(PAIRED_CHARS(string, 0), nbytes),
- nbytes));
-#if OPT_TEK4014
- if (nbytes && screen->TekGIN) {
- TekEnqMouse(*string++);
- TekGINoff();
- nbytes--;
- }
-#endif
- while (nbytes-- != 0)
- unparseputc(*string++, pty);
- if (!TEK4014_ACTIVE(screen))
- AdjustAfterInput(screen);
-}
-
-/* These definitions are DEC-style (e.g., vt320) */
-static int
-decfuncvalue(KeySym keycode)
-{
- switch (keycode) {
- MAP(XK_F1, 11);
- MAP(XK_F2, 12);
- MAP(XK_F3, 13);
- MAP(XK_F4, 14);
- MAP(XK_F5, 15);
- MAP(XK_F6, 17);
- MAP(XK_F7, 18);
- MAP(XK_F8, 19);
- MAP(XK_F9, 20);
- MAP(XK_F10, 21);
- MAP(XK_F11, 23);
- MAP(XK_F12, 24);
- MAP(XK_F13, 25);
- MAP(XK_F14, 26);
- MAP(XK_F15, 28);
- MAP(XK_Help, 28);
- MAP(XK_F16, 29);
- MAP(XK_Menu, 29);
- MAP(XK_F17, 31);
- MAP(XK_F18, 32);
- MAP(XK_F19, 33);
- MAP(XK_F20, 34);
-#if defined(XK_F21)
- MAP(XK_F21, 42);
- MAP(XK_F22, 43);
- MAP(XK_F23, 44);
- MAP(XK_F24, 45);
- MAP(XK_F25, 46);
- MAP(XK_F26, 47);
- MAP(XK_F27, 48);
- MAP(XK_F28, 49);
- MAP(XK_F29, 50);
- MAP(XK_F30, 51);
- MAP(XK_F31, 52);
- MAP(XK_F32, 53);
- MAP(XK_F33, 54);
- MAP(XK_F34, 55);
- MAP(XK_F35, 56);
-#endif
-#ifdef SunXK_F36
- MAP(SunXK_F36, 57);
- MAP(SunXK_F37, 58);
-#endif
- MAP(XK_Find, 1);
- MAP(XK_Insert, 2);
- MAP(XK_Delete, 3);
-#ifdef XK_KP_Insert
- MAP(XK_KP_Insert, 2);
- MAP(XK_KP_Delete, 3);
-#endif
-#ifdef DXK_Remove
- MAP(DXK_Remove, 3);
-#endif
- MAP(XK_Select, 4);
- MAP(XK_Prior, 5);
- MAP(XK_Next, 6);
-#ifdef XK_ISO_Left_Tab
- MAP(XK_ISO_Left_Tab, 'Z');
-#endif
- default:
- return (-1);
- }
-}
-
-#if OPT_HP_FUNC_KEYS
-static int
-hpfuncvalue(KeySym keycode)
-{
- switch (keycode) {
- MAP(XK_Up, 'A');
- MAP(XK_Down, 'B');
- MAP(XK_Right, 'C');
- MAP(XK_Left, 'D');
- MAP(XK_End, 'F');
- MAP(XK_Clear, 'J');
- MAP(XK_Delete, 'P');
- MAP(XK_Insert, 'Q');
- MAP(XK_Next, 'S');
- MAP(XK_Prior, 'T');
- MAP(XK_Home, 'h');
- MAP(XK_F1, 'p');
- MAP(XK_F2, 'q');
- MAP(XK_F3, 'r');
- MAP(XK_F4, 's');
- MAP(XK_F5, 't');
- MAP(XK_F6, 'u');
- MAP(XK_F7, 'v');
- MAP(XK_F8, 'w');
-#ifdef XK_KP_Insert
- MAP(XK_KP_Delete, 'P');
- MAP(XK_KP_Insert, 'Q');
-#endif
-#ifdef DXK_Remove
- MAP(DXK_Remove, 'P');
-#endif
- MAP(XK_Select, 'F');
- MAP(XK_Find, 'h');
- default:
- return 0;
- }
-}
-#endif
-
-#if OPT_SCO_FUNC_KEYS
-static int
-scofuncvalue(KeySym keycode)
-{
- switch (keycode) {
- MAP(XK_Up, 'A');
- MAP(XK_Down, 'B');
- MAP(XK_Right, 'C');
- MAP(XK_Left, 'D');
- MAP(XK_End, 'F');
- MAP(XK_Insert, 'L');
- MAP(XK_Next, 'G');
- MAP(XK_Prior, 'I');
- MAP(XK_Home, 'H');
- MAP(XK_F1, 'M');
- MAP(XK_F2, 'N');
- MAP(XK_F3, 'O');
- MAP(XK_F4, 'P');
- MAP(XK_F5, 'Q');
- MAP(XK_F6, 'R');
- MAP(XK_F7, 'S');
- MAP(XK_F8, 'T');
- MAP(XK_F9, 'U');
- MAP(XK_F10, 'V');
- MAP(XK_F11, 'W');
- MAP(XK_F12, 'X');
- MAP(XK_F13, 'Y');
- MAP(XK_F15, 'a');
- MAP(XK_F16, 'b');
- MAP(XK_F17, 'c');
- MAP(XK_F18, 'd');
- MAP(XK_F19, 'e');
- MAP(XK_F20, 'f');
-#if defined(XK_F21)
- MAP(XK_F21, 'g');
- MAP(XK_F22, 'h');
- MAP(XK_F23, 'i');
- MAP(XK_F24, 'j');
- MAP(XK_F25, 'k');
- MAP(XK_F26, 'l');
- MAP(XK_F27, 'm');
- MAP(XK_F28, 'n');
- MAP(XK_F29, 'o');
- MAP(XK_F30, 'p');
- MAP(XK_F31, 'q');
- MAP(XK_F32, 'r');
- MAP(XK_F33, 's');
- MAP(XK_F34, 't');
- MAP(XK_F35, 'u');
-#endif
-#ifdef XK_KP_Insert
- MAP(XK_KP_Insert, 'L');
-#endif
- default:
- return 0;
- }
-}
-#endif
-
-static int
-sunfuncvalue(KeySym keycode)
-{
- switch (keycode) {
- MAP(XK_F1, 224);
- MAP(XK_F2, 225);
- MAP(XK_F3, 226);
- MAP(XK_F4, 227);
- MAP(XK_F5, 228);
- MAP(XK_F6, 229);
- MAP(XK_F7, 230);
- MAP(XK_F8, 231);
- MAP(XK_F9, 232);
- MAP(XK_F10, 233);
- MAP(XK_F11, 192);
- MAP(XK_F12, 193);
- MAP(XK_F13, 194);
- MAP(XK_F14, 195); /* kund */
- MAP(XK_F15, 196);
- MAP(XK_Help, 196); /* khlp */
- MAP(XK_F16, 197); /* kcpy */
- MAP(XK_Menu, 197);
- MAP(XK_F17, 198);
- MAP(XK_F18, 199);
- MAP(XK_F19, 200); /* kfnd */
- MAP(XK_F20, 201);
-
- MAP(XK_R1, 208); /* kf31 */
- MAP(XK_R2, 209); /* kf32 */
- MAP(XK_R3, 210); /* kf33 */
- MAP(XK_R4, 211); /* kf34 */
- MAP(XK_R5, 212); /* kf35 */
- MAP(XK_R6, 213); /* kf36 */
- MAP(XK_R7, 214); /* kf37 */
- MAP(XK_R8, 215); /* kf38 */
- MAP(XK_R9, 216); /* kf39=kpp */
- MAP(XK_R10, 217); /* kf40 */
- MAP(XK_R11, 218); /* kf41=kb2 */
- MAP(XK_R12, 219); /* kf42 */
- MAP(XK_R13, 220); /* kf43=kend */
- MAP(XK_R14, 221); /* kf44 */
- MAP(XK_R15, 222); /* kf45 */
-#ifdef SunXK_F36
- MAP(SunXK_F36, 234);
- MAP(SunXK_F37, 235);
-#endif
-
- MAP(XK_Find, 1);
- MAP(XK_Insert, 2); /* kich1 */
- MAP(XK_Delete, 3);
-#ifdef XK_KP_Insert
- MAP(XK_KP_Insert, 2);
- MAP(XK_KP_Delete, 3);
-#endif
-#ifdef DXK_Remove
- MAP(DXK_Remove, 3);
-#endif
- MAP(XK_Select, 4);
- MAP(XK_Prior, 5);
- MAP(XK_Next, 6);
- default:
- return (-1);
- }
-}
-
-#if OPT_NUM_LOCK
-/*
- * Note that this can only retrieve translations that are given as resource
- * values; the default translations in charproc.c for example are not
- * retrievable by any interface to X.
- *
- * Also: We can retrieve only the most-specified translation resource. For
- * example, if the resource file specifies both "*translations" and
- * "XTerm*translations", we see only the latter.
- */
-static Bool
-TranslationsUseKeyword(Widget w, const char *keyword)
-{
- static String data;
- static XtResource key_resources[] =
- {
- {XtNtranslations, XtCTranslations, XtRString,
- sizeof(data), 0, XtRString, (XtPointer) NULL}
- };
- Bool result = False;
-
- XtGetSubresources(w,
- (XtPointer) &data,
- "vt100",
- "VT100",
- key_resources,
- XtNumber(key_resources),
- NULL,
- (Cardinal) 0);
-
- if (data != 0) {
- char *p = data;
- int state = 0;
- int now = ' ', prv;
- TRACE(("TranslationsUseKeyword(%p):%s\n", w, p));
- while (*p != 0) {
- prv = now;
- now = char2lower(*p++);
- if (now == ':'
- || now == '!') {
- state = -1;
- } else if (now == '\n') {
- state = 0;
- } else if (state >= 0) {
- if (isgraph(now)
- && now == keyword[state]) {
- if ((state != 0
- || !isalnum(prv))
- && ((keyword[++state] == 0)
- && !isalnum(CharOf(*p)))) {
- result = True;
- break;
- }
- } else {
- state = 0;
- }
- }
- }
- }
- TRACE(("TranslationsUseKeyword(%p, %s) = %d\n", w, keyword, result));
- return result;
-}
-
-#define SaveMask(name) term->misc.name |= mask;\
- TRACE(("%s mask %#lx is%s modifier\n", \
- #name, \
- term->misc.name, \
- ModifierName(term->misc.name)));
-/*
- * Determine which modifier mask (if any) applies to the Num_Lock keysym.
- *
- * Also, determine which modifiers are associated with the ALT keys, so we can
- * send that information as a parameter for special keys in Sun/PC keyboard
- * mode. However, if the ALT modifier is used in translations, we do not want
- * to confuse things by sending the parameter.
- */
-void
-VTInitModifiers(void)
-{
- int i, j, k;
- Display *dpy = XtDisplay(term);
- XModifierKeymap *keymap = XGetModifierMapping(dpy);
- unsigned long mask;
- int min_keycode, max_keycode, keysyms_per_keycode = 0;
-
- if (keymap != 0) {
- KeySym *theMap;
-
- TRACE(("VTInitModifiers\n"));
-
- XDisplayKeycodes(dpy, &min_keycode, &max_keycode);
- theMap = XGetKeyboardMapping(dpy,
- min_keycode,
- (max_keycode - min_keycode + 1),
- &keysyms_per_keycode);
-
- if (theMap != 0) {
- for (i = k = 0, mask = 1; i < 8; i++, mask <<= 1) {
- for (j = 0; j < keymap->max_keypermod; j++) {
- KeyCode code = keymap->modifiermap[k];
- if (code != 0) {
- KeySym keysym;
- int l = 0;
- do {
- keysym = XKeycodeToKeysym(dpy, code, l);
- l++;
- } while (!keysym && l < keysyms_per_keycode);
- if (keysym == XK_Num_Lock) {
- SaveMask(num_lock);
- } else if (keysym == XK_Alt_L) {
- SaveMask(alt_left);
- } else if (keysym == XK_Alt_R) {
- SaveMask(alt_right);
- } else if (keysym == XK_Meta_L) {
- SaveMask(meta_left);
- } else if (keysym == XK_Meta_R) {
- SaveMask(meta_right);
- }
- }
- k++;
- }
- }
- XFree(theMap);
- }
-
- /* Don't disable any mods if "alwaysUseMods" is true. */
- if (!term->misc.alwaysUseMods) {
- /*
- * If the Alt modifier is used in translations, we would rather not
- * use it to modify function-keys when NumLock is active.
- */
- if ((term->misc.alt_left != 0
- || term->misc.alt_right != 0)
- && (TranslationsUseKeyword(toplevel, "alt")
- || TranslationsUseKeyword((Widget) term, "alt"))) {
- TRACE(("ALT is used as a modifier in translations (ignore mask)\n"));
- term->misc.alt_left = 0;
- term->misc.alt_right = 0;
- }
-
- /*
- * If the Meta modifier is used in translations, we would rather not
- * use it to modify function-keys.
- */
- if ((term->misc.meta_left != 0
- || term->misc.meta_right != 0)
- && (TranslationsUseKeyword(toplevel, "meta")
- || TranslationsUseKeyword((Widget) term, "meta"))) {
- TRACE(("META is used as a modifier in translations\n"));
- term->misc.meta_trans = True;
- }
- }
-
- XFreeModifiermap(keymap);
- }
-}
-#endif /* OPT_NUM_LOCK */
-
-#if OPT_TCAP_QUERY
-static int
-hex2int(int c)
-{
- if (c >= '0' && c <= '9')
- return c - '0';
- if (c >= 'a' && c <= 'f')
- return c - 'a' + 10;
- if (c >= 'A' && c <= 'F')
- return c - 'A' + 10;
- return -1;
-}
-
-/*
- * Parse the termcap/terminfo name from the string, returning a positive number
- * (the keysym) if found, otherwise -1. Update the string pointer.
- * Returns the (shift, control) state in *state.
- */
-int
-xtermcapKeycode(char **params, unsigned *state)
-{
- /* *INDENT-OFF* */
-#define DATA(tc,ti,x,y) { tc, ti, x, y }
- static struct {
- char *tc;
- char *ti;
- int code;
- unsigned state;
- } table[] = {
- /* tcap terminfo keycode masks */
- DATA( "#2", "kHOM", XK_Home, ShiftMask ),
- DATA( "#4", "kLFT", XK_Left, ShiftMask ),
- DATA( "%1", "khlp", XK_Help, 0 ),
- DATA( "%i", "kRIT", XK_Right, ShiftMask ),
- DATA( "*6", "kslt", XK_Select, 0 ),
- DATA( "*7", "kEND", XK_End, ShiftMask ),
- DATA( "@0", "kfnd", XK_Find, 0 ),
- DATA( "@7", "kend", XK_End, 0 ),
- DATA( "F1", "kf11", XK_F11, 0 ),
- DATA( "F2", "kf12", XK_F12, 0 ),
- DATA( "F3", "kf13", XK_F13, 0 ),
- DATA( "F4", "kf14", XK_F14, 0 ),
- DATA( "F5", "kf15", XK_F15, 0 ),
- DATA( "F6", "kf16", XK_F16, 0 ),
- DATA( "F7", "kf17", XK_F17, 0 ),
- DATA( "F8", "kf18", XK_F18, 0 ),
- DATA( "F9", "kf19", XK_F19, 0 ),
- DATA( "FA", "kf20", XK_F20, 0 ),
- DATA( "FB", "kf21", XK_F21, 0 ),
- DATA( "FC", "kf22", XK_F22, 0 ),
- DATA( "FD", "kf23", XK_F23, 0 ),
- DATA( "FE", "kf24", XK_F24, 0 ),
- DATA( "FF", "kf25", XK_F25, 0 ),
- DATA( "FG", "kf26", XK_F26, 0 ),
- DATA( "FH", "kf27", XK_F27, 0 ),
- DATA( "FI", "kf28", XK_F28, 0 ),
- DATA( "FJ", "kf29", XK_F29, 0 ),
- DATA( "FK", "kf30", XK_F30, 0 ),
- DATA( "FL", "kf31", XK_F31, 0 ),
- DATA( "FM", "kf32", XK_F32, 0 ),
- DATA( "FN", "kf33", XK_F33, 0 ),
- DATA( "FO", "kf34", XK_F34, 0 ),
- DATA( "FP", "kf35", XK_F35, 0 ),
-#ifdef SunXK_F36
- DATA( "FQ", "kf36", SunXK_F36, 0 ),
- DATA( "FR", "kf37", SunXK_F37, 0 ),
-#endif
- DATA( "K1", "ka1", XK_KP_Home, 0 ),
- DATA( "K4", "kc1", XK_KP_End, 0 ),
- DATA( "k1", "kf1", XK_F1, 0 ),
- DATA( "k2", "kf2", XK_F2, 0 ),
- DATA( "k3", "kf3", XK_F3, 0 ),
- DATA( "k4", "kf4", XK_F4, 0 ),
- DATA( "k5", "kf5", XK_F5, 0 ),
- DATA( "k6", "kf6", XK_F6, 0 ),
- DATA( "k7", "kf7", XK_F7, 0 ),
- DATA( "k8", "kf8", XK_F8, 0 ),
- DATA( "k9", "kf9", XK_F9, 0 ),
- DATA( "k;", "kf10", XK_F10, 0 ),
-#ifdef XK_ISO_Left_Tab
- DATA( "kB", "kcbt", XK_ISO_Left_Tab, 0 ),
-#endif
- DATA( "kC", "kclr", XK_Clear, 0 ),
- DATA( "kD", "kdch1", XK_Delete, 0 ),
- DATA( "kI", "kich1", XK_Insert, 0 ),
- DATA( "kN", "knp", XK_Next, 0 ),
- DATA( "kP", "kpp", XK_Prior, 0 ),
- DATA( "kb", "kbs", XK_BackSpace, 0 ),
- DATA( "kd", "kcud1", XK_Down, 0 ),
- DATA( "kh", "khome", XK_Home, 0 ),
- DATA( "kl", "kcub1", XK_Left, 0 ),
- DATA( "kr", "kcuf1", XK_Right, 0 ),
- DATA( "ku", "kcuu1", XK_Up, 0 ),
-# if OPT_ISO_COLORS
- /* XK_COLORS is a fake code. */
- DATA( "Co", "colors", XK_COLORS, 0 ),
-# endif
- };
- /* *INDENT-ON* */
-
- Cardinal n;
- unsigned len = 0;
- int code = -1;
-#define MAX_TNAME_LEN 6
- char name[MAX_TNAME_LEN + 1];
- char *p;
-
- TRACE(("xtermcapKeycode(%s)\n", *params));
-
- /* Convert hex encoded name to ascii */
- for (p = *params; hex2int(p[0]) >= 0 && hex2int(p[1]) >= 0; p += 2) {
- if (len >= MAX_TNAME_LEN)
- break;
- name[len++] = (hex2int(p[0]) << 4) + hex2int(p[1]);
- }
- name[len] = 0;
- *params = p;
-
- if (*p == 0 || *p == ';') {
- for (n = 0; n < XtNumber(table); n++) {
- if (!strcmp(table[n].ti, name) || !strcmp(table[n].tc, name)) {
- code = table[n].code;
- *state = table[n].state;
- break;
- }
- }
- }
-
- TRACE(("... xtermcapKeycode(%s, %u) -> %#06x\n", name, *state, code));
- return code;
-}
-#endif
diff --git a/nx-X11/programs/xterm/install.sh b/nx-X11/programs/xterm/install.sh
deleted file mode 100644
index 462fa9c3d..000000000
--- a/nx-X11/programs/xterm/install.sh
+++ /dev/null
@@ -1,294 +0,0 @@
-#! /bin/sh
-#
-# install - install a program, script, or datafile
-#
-# This originates from X11R5 (mit/util/scripts/install.sh), which was
-# later released in X11R6 (xc/config/util/install.sh) with the
-# following copyright and license.
-#
-# Copyright (C) 1994 X Consortium
-#
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to
-# deal in the Software without restriction, including without limitation the
-# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-# sell copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
-# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-# Except as contained in this notice, the name of the X Consortium shall not
-# be used in advertising or otherwise to promote the sale, use or other deal-
-# ings in this Software without prior written authorization from the X Consor-
-# tium.
-#
-#
-# FSF changes to this file are in the public domain.
-#
-# Calling this script install-sh is preferred over install.sh, to prevent
-# `make' implicit rules from creating a file called install from it
-# when there is no Makefile.
-#
-# This script is compatible with the BSD install script, but was written
-# from scratch. It can only install one file at a time, a restriction
-# shared with many OS's install programs.
-
-
-# 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}"
-mkdirprog="${MKDIRPROG-mkdir}"
-
-transformbasename=""
-transform_arg=""
-instcmd="$mvprog"
-chmodcmd="$chmodprog 0755"
-chowncmd=""
-chgrpcmd=""
-stripcmd=""
-rmcmd="$rmprog -f"
-mvcmd="$mvprog"
-src=""
-dst=""
-dir_arg=""
-
-while [ x"$1" != x ]; do
- case $1 in
- -c) instcmd=$cpprog
- shift
- continue;;
-
- -d) dir_arg=true
- 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;;
-
- -t=*) transformarg=`echo $1 | sed 's/-t=//'`
- shift
- continue;;
-
- -b=*) transformbasename=`echo $1 | sed 's/-b=//'`
- shift
- continue;;
-
- *) if [ x"$src" = x ]
- then
- src=$1
- else
- # this colon is to work around a 386BSD /bin/sh bug
- :
- dst=$1
- fi
- shift
- continue;;
- esac
-done
-
-if [ x"$src" = x ]
-then
- echo "$0: no input file specified" >&2
- exit 1
-else
- :
-fi
-
-if [ x"$dir_arg" != x ]; then
- dst=$src
- src=""
-
- if [ -d "$dst" ]; then
- instcmd=:
- chmodcmd=""
- else
- instcmd=$mkdirprog
- fi
-else
-
-# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
-# might cause directories to be created, which would be especially bad
-# if $src (and thus $dsttmp) contains '*'.
-
- if [ -f "$src" ] || [ -d "$src" ]
- then
- :
- else
- echo "$0: $src does not exist" >&2
- exit 1
- fi
-
- if [ x"$dst" = x ]
- then
- echo "$0: no destination specified" >&2
- exit 1
- else
- :
- 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"`
- else
- :
- fi
-fi
-
-## this sed command emulates the dirname command
-dstdir=`echo "$dst" | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
-
-# Make sure that the destination directory exists.
-# this part is taken from Noah Friedman's mkinstalldirs script
-
-# Skip lots of stat calls in the usual case.
-if [ ! -d "$dstdir" ]; then
-defaultIFS='
- '
-IFS="${IFS-$defaultIFS}"
-
-oIFS=$IFS
-# Some sh's can't handle IFS=/ for some reason.
-IFS='%'
-set - `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'`
-IFS=$oIFS
-
-pathcomp=''
-
-while [ $# -ne 0 ] ; do
- pathcomp=$pathcomp$1
- shift
-
- if [ ! -d "$pathcomp" ] ;
- then
- $mkdirprog "$pathcomp"
- else
- :
- fi
-
- pathcomp=$pathcomp/
-done
-fi
-
-if [ x"$dir_arg" != x ]
-then
- $doit $instcmd "$dst" &&
-
- if [ x"$chowncmd" != x ]; then $doit $chowncmd "$dst"; else : ; fi &&
- if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd "$dst"; else : ; fi &&
- if [ x"$stripcmd" != x ]; then $doit $stripcmd "$dst"; else : ; fi &&
- if [ x"$chmodcmd" != x ]; then $doit $chmodcmd "$dst"; else : ; fi
-else
-
-# If we're going to rename the final executable, determine the name now.
-
- if [ x"$transformarg" = x ]
- then
- dstfile=`basename "$dst"`
- else
- dstfile=`basename "$dst" $transformbasename |
- sed $transformarg`$transformbasename
- fi
-
-# don't allow the sed command to completely eliminate the filename
-
- if [ x"$dstfile" = x ]
- then
- dstfile=`basename "$dst"`
- else
- :
- fi
-
-# Make a couple of temp file names in the proper directory.
-
- dsttmp=$dstdir/#inst.$$#
- rmtmp=$dstdir/#rm.$$#
-
-# Trap to clean up temp files at exit.
-
- trap 'status=$?; rm -f "$dsttmp" "$rmtmp" && exit $status' 0
- trap '(exit $?); exit' 1 2 13 15
-
-# 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 any of these fail, we abort the whole thing. If we want to
-# ignore errors from any of these, just make sure not to ignore
-# errors from the above "$doit $instcmd $src $dsttmp" command.
-
- if [ x"$chowncmd" != x ]; then $doit $chowncmd "$dsttmp"; else :;fi &&
- if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd "$dsttmp"; else :;fi &&
- if [ x"$stripcmd" != x ]; then $doit $stripcmd "$dsttmp"; else :;fi &&
- if [ x"$chmodcmd" != x ]; then $doit $chmodcmd "$dsttmp"; else :;fi &&
-
-# Now remove or move aside any old file at destination location. We try this
-# two ways since rm can't unlink itself on some systems and the destination
-# file might be busy for other reasons. In this case, the final cleanup
-# might fail but the new file should still install successfully.
-
-{
- if [ -f "$dstdir/$dstfile" ]
- then
- $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null ||
- $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null ||
- {
- echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2
- (exit 1); exit
- }
- else
- :
- fi
-} &&
-
-# Now rename the file to the real destination.
-
- $doit $mvcmd "$dsttmp" "$dstdir/$dstfile"
-
-fi &&
-
-# The final little trick to "correctly" pass the exit status to the exit trap.
-
-{
- (exit 0); exit
-}
diff --git a/nx-X11/programs/xterm/keysym2ucs.c b/nx-X11/programs/xterm/keysym2ucs.c
deleted file mode 100644
index b96d9624b..000000000
--- a/nx-X11/programs/xterm/keysym2ucs.c
+++ /dev/null
@@ -1,857 +0,0 @@
-/* $XFree86: xc/programs/xterm/keysym2ucs.c,v 1.5 2001/06/18 19:09:26 dickey Exp $
- * This module converts keysym values into the corresponding ISO 10646
- * (UCS, Unicode) values.
- *
- * The array keysymtab[] contains pairs of X11 keysym values for graphical
- * characters and the corresponding Unicode value. The function
- * keysym2ucs() maps a keysym onto a Unicode value using a binary search,
- * therefore keysymtab[] must remain SORTED by keysym value.
- *
- * The keysym -> UTF-8 conversion will hopefully one day be provided
- * by Xlib via XmbLookupString() and should ideally not have to be
- * done in X applications. But we are not there yet.
- *
- * We allow to represent any UCS character in the range U-00000000 to
- * U-00FFFFFF by a keysym value in the range 0x01000000 to 0x01ffffff.
- * This admittedly does not cover the entire 31-bit space of UCS, but
- * it does cover all of the characters up to U-10FFFF, which can be
- * represented by UTF-16, and more, and it is very unlikely that higher
- * UCS codes will ever be assigned by ISO. So to get Unicode character
- * U+ABCD you can directly use keysym 0x0100abcd.
- *
- * NOTE: The comments in the table below contain the actual character
- * encoded in UTF-8, so for viewing and editing best use an editor in
- * UTF-8 mode.
- *
- * Author: Markus G. Kuhn <mkuhn@acm.org>, University of Cambridge, April 2001
- *
- * Special thanks to Richard Verhoeven <river@win.tue.nl> for preparing
- * an initial draft of the mapping table.
- *
- * This software is in the public domain. Share and enjoy!
- *
- * AUTOMATICALLY GENERATED FILE, DO NOT EDIT !!! (unicode/convmap.pl)
- */
-
-#ifndef KEYSYM2UCS_INCLUDED
-
-#include "keysym2ucs.h"
-#define VISIBLE /* */
-
-#else
-
-#define VISIBLE static
-
-#endif
-
-static struct codepair {
- unsigned short keysym;
- unsigned short ucs;
-} keysymtab[] = {
- { 0x01a1, 0x0104 }, /* Aogonek Ą LATIN CAPITAL LETTER A WITH OGONEK */
- { 0x01a2, 0x02d8 }, /* breve ˘ BREVE */
- { 0x01a3, 0x0141 }, /* Lstroke Ł LATIN CAPITAL LETTER L WITH STROKE */
- { 0x01a5, 0x013d }, /* Lcaron Ľ LATIN CAPITAL LETTER L WITH CARON */
- { 0x01a6, 0x015a }, /* Sacute Ś LATIN CAPITAL LETTER S WITH ACUTE */
- { 0x01a9, 0x0160 }, /* Scaron Š LATIN CAPITAL LETTER S WITH CARON */
- { 0x01aa, 0x015e }, /* Scedilla Ş LATIN CAPITAL LETTER S WITH CEDILLA */
- { 0x01ab, 0x0164 }, /* Tcaron Ť LATIN CAPITAL LETTER T WITH CARON */
- { 0x01ac, 0x0179 }, /* Zacute Ź LATIN CAPITAL LETTER Z WITH ACUTE */
- { 0x01ae, 0x017d }, /* Zcaron Ž LATIN CAPITAL LETTER Z WITH CARON */
- { 0x01af, 0x017b }, /* Zabovedot Ż LATIN CAPITAL LETTER Z WITH DOT ABOVE */
- { 0x01b1, 0x0105 }, /* aogonek ą LATIN SMALL LETTER A WITH OGONEK */
- { 0x01b2, 0x02db }, /* ogonek ˛ OGONEK */
- { 0x01b3, 0x0142 }, /* lstroke ł LATIN SMALL LETTER L WITH STROKE */
- { 0x01b5, 0x013e }, /* lcaron ľ LATIN SMALL LETTER L WITH CARON */
- { 0x01b6, 0x015b }, /* sacute ś LATIN SMALL LETTER S WITH ACUTE */
- { 0x01b7, 0x02c7 }, /* caron ˇ CARON */
- { 0x01b9, 0x0161 }, /* scaron š LATIN SMALL LETTER S WITH CARON */
- { 0x01ba, 0x015f }, /* scedilla ş LATIN SMALL LETTER S WITH CEDILLA */
- { 0x01bb, 0x0165 }, /* tcaron ť LATIN SMALL LETTER T WITH CARON */
- { 0x01bc, 0x017a }, /* zacute ź LATIN SMALL LETTER Z WITH ACUTE */
- { 0x01bd, 0x02dd }, /* doubleacute ˝ DOUBLE ACUTE ACCENT */
- { 0x01be, 0x017e }, /* zcaron ž LATIN SMALL LETTER Z WITH CARON */
- { 0x01bf, 0x017c }, /* zabovedot ż LATIN SMALL LETTER Z WITH DOT ABOVE */
- { 0x01c0, 0x0154 }, /* Racute Ŕ LATIN CAPITAL LETTER R WITH ACUTE */
- { 0x01c3, 0x0102 }, /* Abreve Ă LATIN CAPITAL LETTER A WITH BREVE */
- { 0x01c5, 0x0139 }, /* Lacute Ĺ LATIN CAPITAL LETTER L WITH ACUTE */
- { 0x01c6, 0x0106 }, /* Cacute Ć LATIN CAPITAL LETTER C WITH ACUTE */
- { 0x01c8, 0x010c }, /* Ccaron Č LATIN CAPITAL LETTER C WITH CARON */
- { 0x01ca, 0x0118 }, /* Eogonek Ę LATIN CAPITAL LETTER E WITH OGONEK */
- { 0x01cc, 0x011a }, /* Ecaron Ě LATIN CAPITAL LETTER E WITH CARON */
- { 0x01cf, 0x010e }, /* Dcaron Ď LATIN CAPITAL LETTER D WITH CARON */
- { 0x01d0, 0x0110 }, /* Dstroke Đ LATIN CAPITAL LETTER D WITH STROKE */
- { 0x01d1, 0x0143 }, /* Nacute Ń LATIN CAPITAL LETTER N WITH ACUTE */
- { 0x01d2, 0x0147 }, /* Ncaron Ň LATIN CAPITAL LETTER N WITH CARON */
- { 0x01d5, 0x0150 }, /* Odoubleacute Ő LATIN CAPITAL LETTER O WITH DOUBLE ACUTE */
- { 0x01d8, 0x0158 }, /* Rcaron Ř LATIN CAPITAL LETTER R WITH CARON */
- { 0x01d9, 0x016e }, /* Uring Ů LATIN CAPITAL LETTER U WITH RING ABOVE */
- { 0x01db, 0x0170 }, /* Udoubleacute Ű LATIN CAPITAL LETTER U WITH DOUBLE ACUTE */
- { 0x01de, 0x0162 }, /* Tcedilla Ţ LATIN CAPITAL LETTER T WITH CEDILLA */
- { 0x01e0, 0x0155 }, /* racute ŕ LATIN SMALL LETTER R WITH ACUTE */
- { 0x01e3, 0x0103 }, /* abreve ă LATIN SMALL LETTER A WITH BREVE */
- { 0x01e5, 0x013a }, /* lacute ĺ LATIN SMALL LETTER L WITH ACUTE */
- { 0x01e6, 0x0107 }, /* cacute ć LATIN SMALL LETTER C WITH ACUTE */
- { 0x01e8, 0x010d }, /* ccaron č LATIN SMALL LETTER C WITH CARON */
- { 0x01ea, 0x0119 }, /* eogonek ę LATIN SMALL LETTER E WITH OGONEK */
- { 0x01ec, 0x011b }, /* ecaron ě LATIN SMALL LETTER E WITH CARON */
- { 0x01ef, 0x010f }, /* dcaron ď LATIN SMALL LETTER D WITH CARON */
- { 0x01f0, 0x0111 }, /* dstroke đ LATIN SMALL LETTER D WITH STROKE */
- { 0x01f1, 0x0144 }, /* nacute ń LATIN SMALL LETTER N WITH ACUTE */
- { 0x01f2, 0x0148 }, /* ncaron ň LATIN SMALL LETTER N WITH CARON */
- { 0x01f5, 0x0151 }, /* odoubleacute ő LATIN SMALL LETTER O WITH DOUBLE ACUTE */
- { 0x01f8, 0x0159 }, /* rcaron ř LATIN SMALL LETTER R WITH CARON */
- { 0x01f9, 0x016f }, /* uring ů LATIN SMALL LETTER U WITH RING ABOVE */
- { 0x01fb, 0x0171 }, /* udoubleacute ű LATIN SMALL LETTER U WITH DOUBLE ACUTE */
- { 0x01fe, 0x0163 }, /* tcedilla ţ LATIN SMALL LETTER T WITH CEDILLA */
- { 0x01ff, 0x02d9 }, /* abovedot ˙ DOT ABOVE */
- { 0x02a1, 0x0126 }, /* Hstroke Ħ LATIN CAPITAL LETTER H WITH STROKE */
- { 0x02a6, 0x0124 }, /* Hcircumflex Ĥ LATIN CAPITAL LETTER H WITH CIRCUMFLEX */
- { 0x02a9, 0x0130 }, /* Iabovedot İ LATIN CAPITAL LETTER I WITH DOT ABOVE */
- { 0x02ab, 0x011e }, /* Gbreve Ğ LATIN CAPITAL LETTER G WITH BREVE */
- { 0x02ac, 0x0134 }, /* Jcircumflex Ĵ LATIN CAPITAL LETTER J WITH CIRCUMFLEX */
- { 0x02b1, 0x0127 }, /* hstroke ħ LATIN SMALL LETTER H WITH STROKE */
- { 0x02b6, 0x0125 }, /* hcircumflex ĥ LATIN SMALL LETTER H WITH CIRCUMFLEX */
- { 0x02b9, 0x0131 }, /* idotless ı LATIN SMALL LETTER DOTLESS I */
- { 0x02bb, 0x011f }, /* gbreve ğ LATIN SMALL LETTER G WITH BREVE */
- { 0x02bc, 0x0135 }, /* jcircumflex ĵ LATIN SMALL LETTER J WITH CIRCUMFLEX */
- { 0x02c5, 0x010a }, /* Cabovedot Ċ LATIN CAPITAL LETTER C WITH DOT ABOVE */
- { 0x02c6, 0x0108 }, /* Ccircumflex Ĉ LATIN CAPITAL LETTER C WITH CIRCUMFLEX */
- { 0x02d5, 0x0120 }, /* Gabovedot Ġ LATIN CAPITAL LETTER G WITH DOT ABOVE */
- { 0x02d8, 0x011c }, /* Gcircumflex Ĝ LATIN CAPITAL LETTER G WITH CIRCUMFLEX */
- { 0x02dd, 0x016c }, /* Ubreve Ŭ LATIN CAPITAL LETTER U WITH BREVE */
- { 0x02de, 0x015c }, /* Scircumflex Ŝ LATIN CAPITAL LETTER S WITH CIRCUMFLEX */
- { 0x02e5, 0x010b }, /* cabovedot ċ LATIN SMALL LETTER C WITH DOT ABOVE */
- { 0x02e6, 0x0109 }, /* ccircumflex ĉ LATIN SMALL LETTER C WITH CIRCUMFLEX */
- { 0x02f5, 0x0121 }, /* gabovedot ġ LATIN SMALL LETTER G WITH DOT ABOVE */
- { 0x02f8, 0x011d }, /* gcircumflex ĝ LATIN SMALL LETTER G WITH CIRCUMFLEX */
- { 0x02fd, 0x016d }, /* ubreve ŭ LATIN SMALL LETTER U WITH BREVE */
- { 0x02fe, 0x015d }, /* scircumflex ŝ LATIN SMALL LETTER S WITH CIRCUMFLEX */
- { 0x03a2, 0x0138 }, /* kra ĸ LATIN SMALL LETTER KRA */
- { 0x03a3, 0x0156 }, /* Rcedilla Ŗ LATIN CAPITAL LETTER R WITH CEDILLA */
- { 0x03a5, 0x0128 }, /* Itilde Ĩ LATIN CAPITAL LETTER I WITH TILDE */
- { 0x03a6, 0x013b }, /* Lcedilla Ļ LATIN CAPITAL LETTER L WITH CEDILLA */
- { 0x03aa, 0x0112 }, /* Emacron Ē LATIN CAPITAL LETTER E WITH MACRON */
- { 0x03ab, 0x0122 }, /* Gcedilla Ģ LATIN CAPITAL LETTER G WITH CEDILLA */
- { 0x03ac, 0x0166 }, /* Tslash Ŧ LATIN CAPITAL LETTER T WITH STROKE */
- { 0x03b3, 0x0157 }, /* rcedilla ŗ LATIN SMALL LETTER R WITH CEDILLA */
- { 0x03b5, 0x0129 }, /* itilde ĩ LATIN SMALL LETTER I WITH TILDE */
- { 0x03b6, 0x013c }, /* lcedilla ļ LATIN SMALL LETTER L WITH CEDILLA */
- { 0x03ba, 0x0113 }, /* emacron ē LATIN SMALL LETTER E WITH MACRON */
- { 0x03bb, 0x0123 }, /* gcedilla ģ LATIN SMALL LETTER G WITH CEDILLA */
- { 0x03bc, 0x0167 }, /* tslash ŧ LATIN SMALL LETTER T WITH STROKE */
- { 0x03bd, 0x014a }, /* ENG Ŋ LATIN CAPITAL LETTER ENG */
- { 0x03bf, 0x014b }, /* eng ŋ LATIN SMALL LETTER ENG */
- { 0x03c0, 0x0100 }, /* Amacron Ā LATIN CAPITAL LETTER A WITH MACRON */
- { 0x03c7, 0x012e }, /* Iogonek Į LATIN CAPITAL LETTER I WITH OGONEK */
- { 0x03cc, 0x0116 }, /* Eabovedot Ė LATIN CAPITAL LETTER E WITH DOT ABOVE */
- { 0x03cf, 0x012a }, /* Imacron Ī LATIN CAPITAL LETTER I WITH MACRON */
- { 0x03d1, 0x0145 }, /* Ncedilla Ņ LATIN CAPITAL LETTER N WITH CEDILLA */
- { 0x03d2, 0x014c }, /* Omacron Ō LATIN CAPITAL LETTER O WITH MACRON */
- { 0x03d3, 0x0136 }, /* Kcedilla Ķ LATIN CAPITAL LETTER K WITH CEDILLA */
- { 0x03d9, 0x0172 }, /* Uogonek Ų LATIN CAPITAL LETTER U WITH OGONEK */
- { 0x03dd, 0x0168 }, /* Utilde Ũ LATIN CAPITAL LETTER U WITH TILDE */
- { 0x03de, 0x016a }, /* Umacron Ū LATIN CAPITAL LETTER U WITH MACRON */
- { 0x03e0, 0x0101 }, /* amacron ā LATIN SMALL LETTER A WITH MACRON */
- { 0x03e7, 0x012f }, /* iogonek į LATIN SMALL LETTER I WITH OGONEK */
- { 0x03ec, 0x0117 }, /* eabovedot ė LATIN SMALL LETTER E WITH DOT ABOVE */
- { 0x03ef, 0x012b }, /* imacron ī LATIN SMALL LETTER I WITH MACRON */
- { 0x03f1, 0x0146 }, /* ncedilla ņ LATIN SMALL LETTER N WITH CEDILLA */
- { 0x03f2, 0x014d }, /* omacron ō LATIN SMALL LETTER O WITH MACRON */
- { 0x03f3, 0x0137 }, /* kcedilla ķ LATIN SMALL LETTER K WITH CEDILLA */
- { 0x03f9, 0x0173 }, /* uogonek ų LATIN SMALL LETTER U WITH OGONEK */
- { 0x03fd, 0x0169 }, /* utilde ũ LATIN SMALL LETTER U WITH TILDE */
- { 0x03fe, 0x016b }, /* umacron ū LATIN SMALL LETTER U WITH MACRON */
- { 0x047e, 0x203e }, /* overline ‾ OVERLINE */
- { 0x04a1, 0x3002 }, /* kana_fullstop 。 IDEOGRAPHIC FULL STOP */
- { 0x04a2, 0x300c }, /* kana_openingbracket 「 LEFT CORNER BRACKET */
- { 0x04a3, 0x300d }, /* kana_closingbracket 」 RIGHT CORNER BRACKET */
- { 0x04a4, 0x3001 }, /* kana_comma 、 IDEOGRAPHIC COMMA */
- { 0x04a5, 0x30fb }, /* kana_conjunctive ・ KATAKANA MIDDLE DOT */
- { 0x04a6, 0x30f2 }, /* kana_WO ヲ KATAKANA LETTER WO */
- { 0x04a7, 0x30a1 }, /* kana_a ァ KATAKANA LETTER SMALL A */
- { 0x04a8, 0x30a3 }, /* kana_i ィ KATAKANA LETTER SMALL I */
- { 0x04a9, 0x30a5 }, /* kana_u ゥ KATAKANA LETTER SMALL U */
- { 0x04aa, 0x30a7 }, /* kana_e ェ KATAKANA LETTER SMALL E */
- { 0x04ab, 0x30a9 }, /* kana_o ォ KATAKANA LETTER SMALL O */
- { 0x04ac, 0x30e3 }, /* kana_ya ャ KATAKANA LETTER SMALL YA */
- { 0x04ad, 0x30e5 }, /* kana_yu ュ KATAKANA LETTER SMALL YU */
- { 0x04ae, 0x30e7 }, /* kana_yo ョ KATAKANA LETTER SMALL YO */
- { 0x04af, 0x30c3 }, /* kana_tsu ッ KATAKANA LETTER SMALL TU */
- { 0x04b0, 0x30fc }, /* prolongedsound ー KATAKANA-HIRAGANA PROLONGED SOUND MARK */
- { 0x04b1, 0x30a2 }, /* kana_A ア KATAKANA LETTER A */
- { 0x04b2, 0x30a4 }, /* kana_I イ KATAKANA LETTER I */
- { 0x04b3, 0x30a6 }, /* kana_U ウ KATAKANA LETTER U */
- { 0x04b4, 0x30a8 }, /* kana_E エ KATAKANA LETTER E */
- { 0x04b5, 0x30aa }, /* kana_O オ KATAKANA LETTER O */
- { 0x04b6, 0x30ab }, /* kana_KA カ KATAKANA LETTER KA */
- { 0x04b7, 0x30ad }, /* kana_KI キ KATAKANA LETTER KI */
- { 0x04b8, 0x30af }, /* kana_KU ク KATAKANA LETTER KU */
- { 0x04b9, 0x30b1 }, /* kana_KE ケ KATAKANA LETTER KE */
- { 0x04ba, 0x30b3 }, /* kana_KO コ KATAKANA LETTER KO */
- { 0x04bb, 0x30b5 }, /* kana_SA サ KATAKANA LETTER SA */
- { 0x04bc, 0x30b7 }, /* kana_SHI シ KATAKANA LETTER SI */
- { 0x04bd, 0x30b9 }, /* kana_SU ス KATAKANA LETTER SU */
- { 0x04be, 0x30bb }, /* kana_SE セ KATAKANA LETTER SE */
- { 0x04bf, 0x30bd }, /* kana_SO ソ KATAKANA LETTER SO */
- { 0x04c0, 0x30bf }, /* kana_TA タ KATAKANA LETTER TA */
- { 0x04c1, 0x30c1 }, /* kana_CHI チ KATAKANA LETTER TI */
- { 0x04c2, 0x30c4 }, /* kana_TSU ツ KATAKANA LETTER TU */
- { 0x04c3, 0x30c6 }, /* kana_TE テ KATAKANA LETTER TE */
- { 0x04c4, 0x30c8 }, /* kana_TO ト KATAKANA LETTER TO */
- { 0x04c5, 0x30ca }, /* kana_NA ナ KATAKANA LETTER NA */
- { 0x04c6, 0x30cb }, /* kana_NI ニ KATAKANA LETTER NI */
- { 0x04c7, 0x30cc }, /* kana_NU ヌ KATAKANA LETTER NU */
- { 0x04c8, 0x30cd }, /* kana_NE ネ KATAKANA LETTER NE */
- { 0x04c9, 0x30ce }, /* kana_NO ノ KATAKANA LETTER NO */
- { 0x04ca, 0x30cf }, /* kana_HA ハ KATAKANA LETTER HA */
- { 0x04cb, 0x30d2 }, /* kana_HI ヒ KATAKANA LETTER HI */
- { 0x04cc, 0x30d5 }, /* kana_FU フ KATAKANA LETTER HU */
- { 0x04cd, 0x30d8 }, /* kana_HE ヘ KATAKANA LETTER HE */
- { 0x04ce, 0x30db }, /* kana_HO ホ KATAKANA LETTER HO */
- { 0x04cf, 0x30de }, /* kana_MA マ KATAKANA LETTER MA */
- { 0x04d0, 0x30df }, /* kana_MI ミ KATAKANA LETTER MI */
- { 0x04d1, 0x30e0 }, /* kana_MU ム KATAKANA LETTER MU */
- { 0x04d2, 0x30e1 }, /* kana_ME メ KATAKANA LETTER ME */
- { 0x04d3, 0x30e2 }, /* kana_MO モ KATAKANA LETTER MO */
- { 0x04d4, 0x30e4 }, /* kana_YA ヤ KATAKANA LETTER YA */
- { 0x04d5, 0x30e6 }, /* kana_YU ユ KATAKANA LETTER YU */
- { 0x04d6, 0x30e8 }, /* kana_YO ヨ KATAKANA LETTER YO */
- { 0x04d7, 0x30e9 }, /* kana_RA ラ KATAKANA LETTER RA */
- { 0x04d8, 0x30ea }, /* kana_RI リ KATAKANA LETTER RI */
- { 0x04d9, 0x30eb }, /* kana_RU ル KATAKANA LETTER RU */
- { 0x04da, 0x30ec }, /* kana_RE レ KATAKANA LETTER RE */
- { 0x04db, 0x30ed }, /* kana_RO ロ KATAKANA LETTER RO */
- { 0x04dc, 0x30ef }, /* kana_WA ワ KATAKANA LETTER WA */
- { 0x04dd, 0x30f3 }, /* kana_N ン KATAKANA LETTER N */
- { 0x04de, 0x309b }, /* voicedsound ゛ KATAKANA-HIRAGANA VOICED SOUND MARK */
- { 0x04df, 0x309c }, /* semivoicedsound ゜ KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK */
- { 0x05ac, 0x060c }, /* Arabic_comma ، ARABIC COMMA */
- { 0x05bb, 0x061b }, /* Arabic_semicolon ؛ ARABIC SEMICOLON */
- { 0x05bf, 0x061f }, /* Arabic_question_mark ؟ ARABIC QUESTION MARK */
- { 0x05c1, 0x0621 }, /* Arabic_hamza ء ARABIC LETTER HAMZA */
- { 0x05c2, 0x0622 }, /* Arabic_maddaonalef آ ARABIC LETTER ALEF WITH MADDA ABOVE */
- { 0x05c3, 0x0623 }, /* Arabic_hamzaonalef أ ARABIC LETTER ALEF WITH HAMZA ABOVE */
- { 0x05c4, 0x0624 }, /* Arabic_hamzaonwaw ؤ ARABIC LETTER WAW WITH HAMZA ABOVE */
- { 0x05c5, 0x0625 }, /* Arabic_hamzaunderalef إ ARABIC LETTER ALEF WITH HAMZA BELOW */
- { 0x05c6, 0x0626 }, /* Arabic_hamzaonyeh ئ ARABIC LETTER YEH WITH HAMZA ABOVE */
- { 0x05c7, 0x0627 }, /* Arabic_alef ا ARABIC LETTER ALEF */
- { 0x05c8, 0x0628 }, /* Arabic_beh ب ARABIC LETTER BEH */
- { 0x05c9, 0x0629 }, /* Arabic_tehmarbuta ة ARABIC LETTER TEH MARBUTA */
- { 0x05ca, 0x062a }, /* Arabic_teh ت ARABIC LETTER TEH */
- { 0x05cb, 0x062b }, /* Arabic_theh ث ARABIC LETTER THEH */
- { 0x05cc, 0x062c }, /* Arabic_jeem ج ARABIC LETTER JEEM */
- { 0x05cd, 0x062d }, /* Arabic_hah ح ARABIC LETTER HAH */
- { 0x05ce, 0x062e }, /* Arabic_khah خ ARABIC LETTER KHAH */
- { 0x05cf, 0x062f }, /* Arabic_dal د ARABIC LETTER DAL */
- { 0x05d0, 0x0630 }, /* Arabic_thal ذ ARABIC LETTER THAL */
- { 0x05d1, 0x0631 }, /* Arabic_ra ر ARABIC LETTER REH */
- { 0x05d2, 0x0632 }, /* Arabic_zain ز ARABIC LETTER ZAIN */
- { 0x05d3, 0x0633 }, /* Arabic_seen س ARABIC LETTER SEEN */
- { 0x05d4, 0x0634 }, /* Arabic_sheen ش ARABIC LETTER SHEEN */
- { 0x05d5, 0x0635 }, /* Arabic_sad ص ARABIC LETTER SAD */
- { 0x05d6, 0x0636 }, /* Arabic_dad ض ARABIC LETTER DAD */
- { 0x05d7, 0x0637 }, /* Arabic_tah ط ARABIC LETTER TAH */
- { 0x05d8, 0x0638 }, /* Arabic_zah ظ ARABIC LETTER ZAH */
- { 0x05d9, 0x0639 }, /* Arabic_ain ع ARABIC LETTER AIN */
- { 0x05da, 0x063a }, /* Arabic_ghain غ ARABIC LETTER GHAIN */
- { 0x05e0, 0x0640 }, /* Arabic_tatweel ـ ARABIC TATWEEL */
- { 0x05e1, 0x0641 }, /* Arabic_feh ف ARABIC LETTER FEH */
- { 0x05e2, 0x0642 }, /* Arabic_qaf ق ARABIC LETTER QAF */
- { 0x05e3, 0x0643 }, /* Arabic_kaf ك ARABIC LETTER KAF */
- { 0x05e4, 0x0644 }, /* Arabic_lam ل ARABIC LETTER LAM */
- { 0x05e5, 0x0645 }, /* Arabic_meem م ARABIC LETTER MEEM */
- { 0x05e6, 0x0646 }, /* Arabic_noon ن ARABIC LETTER NOON */
- { 0x05e7, 0x0647 }, /* Arabic_ha ه ARABIC LETTER HEH */
- { 0x05e8, 0x0648 }, /* Arabic_waw و ARABIC LETTER WAW */
- { 0x05e9, 0x0649 }, /* Arabic_alefmaksura ى ARABIC LETTER ALEF MAKSURA */
- { 0x05ea, 0x064a }, /* Arabic_yeh ي ARABIC LETTER YEH */
- { 0x05eb, 0x064b }, /* Arabic_fathatan ً ARABIC FATHATAN */
- { 0x05ec, 0x064c }, /* Arabic_dammatan ٌ ARABIC DAMMATAN */
- { 0x05ed, 0x064d }, /* Arabic_kasratan ٍ ARABIC KASRATAN */
- { 0x05ee, 0x064e }, /* Arabic_fatha َ ARABIC FATHA */
- { 0x05ef, 0x064f }, /* Arabic_damma ُ ARABIC DAMMA */
- { 0x05f0, 0x0650 }, /* Arabic_kasra ِ ARABIC KASRA */
- { 0x05f1, 0x0651 }, /* Arabic_shadda ّ ARABIC SHADDA */
- { 0x05f2, 0x0652 }, /* Arabic_sukun ْ ARABIC SUKUN */
- { 0x06a1, 0x0452 }, /* Serbian_dje ђ CYRILLIC SMALL LETTER DJE */
- { 0x06a2, 0x0453 }, /* Macedonia_gje ѓ CYRILLIC SMALL LETTER GJE */
- { 0x06a3, 0x0451 }, /* Cyrillic_io ё CYRILLIC SMALL LETTER IO */
- { 0x06a4, 0x0454 }, /* Ukrainian_ie є CYRILLIC SMALL LETTER UKRAINIAN IE */
- { 0x06a5, 0x0455 }, /* Macedonia_dse ѕ CYRILLIC SMALL LETTER DZE */
- { 0x06a6, 0x0456 }, /* Ukrainian_i і CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I */
- { 0x06a7, 0x0457 }, /* Ukrainian_yi ї CYRILLIC SMALL LETTER YI */
- { 0x06a8, 0x0458 }, /* Cyrillic_je ј CYRILLIC SMALL LETTER JE */
- { 0x06a9, 0x0459 }, /* Cyrillic_lje љ CYRILLIC SMALL LETTER LJE */
- { 0x06aa, 0x045a }, /* Cyrillic_nje њ CYRILLIC SMALL LETTER NJE */
- { 0x06ab, 0x045b }, /* Serbian_tshe ћ CYRILLIC SMALL LETTER TSHE */
- { 0x06ac, 0x045c }, /* Macedonia_kje ќ CYRILLIC SMALL LETTER KJE */
- { 0x06ae, 0x045e }, /* Byelorussian_shortu ў CYRILLIC SMALL LETTER SHORT U */
- { 0x06af, 0x045f }, /* Cyrillic_dzhe џ CYRILLIC SMALL LETTER DZHE */
- { 0x06b0, 0x2116 }, /* numerosign № NUMERO SIGN */
- { 0x06b1, 0x0402 }, /* Serbian_DJE Ђ CYRILLIC CAPITAL LETTER DJE */
- { 0x06b2, 0x0403 }, /* Macedonia_GJE Ѓ CYRILLIC CAPITAL LETTER GJE */
- { 0x06b3, 0x0401 }, /* Cyrillic_IO Ё CYRILLIC CAPITAL LETTER IO */
- { 0x06b4, 0x0404 }, /* Ukrainian_IE Є CYRILLIC CAPITAL LETTER UKRAINIAN IE */
- { 0x06b5, 0x0405 }, /* Macedonia_DSE Ѕ CYRILLIC CAPITAL LETTER DZE */
- { 0x06b6, 0x0406 }, /* Ukrainian_I І CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I */
- { 0x06b7, 0x0407 }, /* Ukrainian_YI Ї CYRILLIC CAPITAL LETTER YI */
- { 0x06b8, 0x0408 }, /* Cyrillic_JE Ј CYRILLIC CAPITAL LETTER JE */
- { 0x06b9, 0x0409 }, /* Cyrillic_LJE Љ CYRILLIC CAPITAL LETTER LJE */
- { 0x06ba, 0x040a }, /* Cyrillic_NJE Њ CYRILLIC CAPITAL LETTER NJE */
- { 0x06bb, 0x040b }, /* Serbian_TSHE Ћ CYRILLIC CAPITAL LETTER TSHE */
- { 0x06bc, 0x040c }, /* Macedonia_KJE Ќ CYRILLIC CAPITAL LETTER KJE */
- { 0x06be, 0x040e }, /* Byelorussian_SHORTU Ў CYRILLIC CAPITAL LETTER SHORT U */
- { 0x06bf, 0x040f }, /* Cyrillic_DZHE Џ CYRILLIC CAPITAL LETTER DZHE */
- { 0x06c0, 0x044e }, /* Cyrillic_yu ю CYRILLIC SMALL LETTER YU */
- { 0x06c1, 0x0430 }, /* Cyrillic_a а CYRILLIC SMALL LETTER A */
- { 0x06c2, 0x0431 }, /* Cyrillic_be б CYRILLIC SMALL LETTER BE */
- { 0x06c3, 0x0446 }, /* Cyrillic_tse ц CYRILLIC SMALL LETTER TSE */
- { 0x06c4, 0x0434 }, /* Cyrillic_de д CYRILLIC SMALL LETTER DE */
- { 0x06c5, 0x0435 }, /* Cyrillic_ie е CYRILLIC SMALL LETTER IE */
- { 0x06c6, 0x0444 }, /* Cyrillic_ef ф CYRILLIC SMALL LETTER EF */
- { 0x06c7, 0x0433 }, /* Cyrillic_ghe г CYRILLIC SMALL LETTER GHE */
- { 0x06c8, 0x0445 }, /* Cyrillic_ha х CYRILLIC SMALL LETTER HA */
- { 0x06c9, 0x0438 }, /* Cyrillic_i и CYRILLIC SMALL LETTER I */
- { 0x06ca, 0x0439 }, /* Cyrillic_shorti й CYRILLIC SMALL LETTER SHORT I */
- { 0x06cb, 0x043a }, /* Cyrillic_ka к CYRILLIC SMALL LETTER KA */
- { 0x06cc, 0x043b }, /* Cyrillic_el л CYRILLIC SMALL LETTER EL */
- { 0x06cd, 0x043c }, /* Cyrillic_em м CYRILLIC SMALL LETTER EM */
- { 0x06ce, 0x043d }, /* Cyrillic_en н CYRILLIC SMALL LETTER EN */
- { 0x06cf, 0x043e }, /* Cyrillic_o о CYRILLIC SMALL LETTER O */
- { 0x06d0, 0x043f }, /* Cyrillic_pe п CYRILLIC SMALL LETTER PE */
- { 0x06d1, 0x044f }, /* Cyrillic_ya я CYRILLIC SMALL LETTER YA */
- { 0x06d2, 0x0440 }, /* Cyrillic_er р CYRILLIC SMALL LETTER ER */
- { 0x06d3, 0x0441 }, /* Cyrillic_es с CYRILLIC SMALL LETTER ES */
- { 0x06d4, 0x0442 }, /* Cyrillic_te т CYRILLIC SMALL LETTER TE */
- { 0x06d5, 0x0443 }, /* Cyrillic_u у CYRILLIC SMALL LETTER U */
- { 0x06d6, 0x0436 }, /* Cyrillic_zhe ж CYRILLIC SMALL LETTER ZHE */
- { 0x06d7, 0x0432 }, /* Cyrillic_ve в CYRILLIC SMALL LETTER VE */
- { 0x06d8, 0x044c }, /* Cyrillic_softsign ь CYRILLIC SMALL LETTER SOFT SIGN */
- { 0x06d9, 0x044b }, /* Cyrillic_yeru ы CYRILLIC SMALL LETTER YERU */
- { 0x06da, 0x0437 }, /* Cyrillic_ze з CYRILLIC SMALL LETTER ZE */
- { 0x06db, 0x0448 }, /* Cyrillic_sha ш CYRILLIC SMALL LETTER SHA */
- { 0x06dc, 0x044d }, /* Cyrillic_e э CYRILLIC SMALL LETTER E */
- { 0x06dd, 0x0449 }, /* Cyrillic_shcha щ CYRILLIC SMALL LETTER SHCHA */
- { 0x06de, 0x0447 }, /* Cyrillic_che ч CYRILLIC SMALL LETTER CHE */
- { 0x06df, 0x044a }, /* Cyrillic_hardsign ъ CYRILLIC SMALL LETTER HARD SIGN */
- { 0x06e0, 0x042e }, /* Cyrillic_YU Ю CYRILLIC CAPITAL LETTER YU */
- { 0x06e1, 0x0410 }, /* Cyrillic_A А CYRILLIC CAPITAL LETTER A */
- { 0x06e2, 0x0411 }, /* Cyrillic_BE Б CYRILLIC CAPITAL LETTER BE */
- { 0x06e3, 0x0426 }, /* Cyrillic_TSE Ц CYRILLIC CAPITAL LETTER TSE */
- { 0x06e4, 0x0414 }, /* Cyrillic_DE Д CYRILLIC CAPITAL LETTER DE */
- { 0x06e5, 0x0415 }, /* Cyrillic_IE Е CYRILLIC CAPITAL LETTER IE */
- { 0x06e6, 0x0424 }, /* Cyrillic_EF Ф CYRILLIC CAPITAL LETTER EF */
- { 0x06e7, 0x0413 }, /* Cyrillic_GHE Г CYRILLIC CAPITAL LETTER GHE */
- { 0x06e8, 0x0425 }, /* Cyrillic_HA Х CYRILLIC CAPITAL LETTER HA */
- { 0x06e9, 0x0418 }, /* Cyrillic_I И CYRILLIC CAPITAL LETTER I */
- { 0x06ea, 0x0419 }, /* Cyrillic_SHORTI Й CYRILLIC CAPITAL LETTER SHORT I */
- { 0x06eb, 0x041a }, /* Cyrillic_KA К CYRILLIC CAPITAL LETTER KA */
- { 0x06ec, 0x041b }, /* Cyrillic_EL Л CYRILLIC CAPITAL LETTER EL */
- { 0x06ed, 0x041c }, /* Cyrillic_EM М CYRILLIC CAPITAL LETTER EM */
- { 0x06ee, 0x041d }, /* Cyrillic_EN Н CYRILLIC CAPITAL LETTER EN */
- { 0x06ef, 0x041e }, /* Cyrillic_O О CYRILLIC CAPITAL LETTER O */
- { 0x06f0, 0x041f }, /* Cyrillic_PE П CYRILLIC CAPITAL LETTER PE */
- { 0x06f1, 0x042f }, /* Cyrillic_YA Я CYRILLIC CAPITAL LETTER YA */
- { 0x06f2, 0x0420 }, /* Cyrillic_ER Р CYRILLIC CAPITAL LETTER ER */
- { 0x06f3, 0x0421 }, /* Cyrillic_ES С CYRILLIC CAPITAL LETTER ES */
- { 0x06f4, 0x0422 }, /* Cyrillic_TE Т CYRILLIC CAPITAL LETTER TE */
- { 0x06f5, 0x0423 }, /* Cyrillic_U У CYRILLIC CAPITAL LETTER U */
- { 0x06f6, 0x0416 }, /* Cyrillic_ZHE Ж CYRILLIC CAPITAL LETTER ZHE */
- { 0x06f7, 0x0412 }, /* Cyrillic_VE В CYRILLIC CAPITAL LETTER VE */
- { 0x06f8, 0x042c }, /* Cyrillic_SOFTSIGN Ь CYRILLIC CAPITAL LETTER SOFT SIGN */
- { 0x06f9, 0x042b }, /* Cyrillic_YERU Ы CYRILLIC CAPITAL LETTER YERU */
- { 0x06fa, 0x0417 }, /* Cyrillic_ZE З CYRILLIC CAPITAL LETTER ZE */
- { 0x06fb, 0x0428 }, /* Cyrillic_SHA Ш CYRILLIC CAPITAL LETTER SHA */
- { 0x06fc, 0x042d }, /* Cyrillic_E Э CYRILLIC CAPITAL LETTER E */
- { 0x06fd, 0x0429 }, /* Cyrillic_SHCHA Щ CYRILLIC CAPITAL LETTER SHCHA */
- { 0x06fe, 0x0427 }, /* Cyrillic_CHE Ч CYRILLIC CAPITAL LETTER CHE */
- { 0x06ff, 0x042a }, /* Cyrillic_HARDSIGN Ъ CYRILLIC CAPITAL LETTER HARD SIGN */
- { 0x07a1, 0x0386 }, /* Greek_ALPHAaccent Ά GREEK CAPITAL LETTER ALPHA WITH TONOS */
- { 0x07a2, 0x0388 }, /* Greek_EPSILONaccent Έ GREEK CAPITAL LETTER EPSILON WITH TONOS */
- { 0x07a3, 0x0389 }, /* Greek_ETAaccent Ή GREEK CAPITAL LETTER ETA WITH TONOS */
- { 0x07a4, 0x038a }, /* Greek_IOTAaccent Ί GREEK CAPITAL LETTER IOTA WITH TONOS */
- { 0x07a5, 0x03aa }, /* Greek_IOTAdiaeresis Ϊ GREEK CAPITAL LETTER IOTA WITH DIALYTIKA */
- { 0x07a7, 0x038c }, /* Greek_OMICRONaccent Ό GREEK CAPITAL LETTER OMICRON WITH TONOS */
- { 0x07a8, 0x038e }, /* Greek_UPSILONaccent Ύ GREEK CAPITAL LETTER UPSILON WITH TONOS */
- { 0x07a9, 0x03ab }, /* Greek_UPSILONdieresis Ϋ GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA */
- { 0x07ab, 0x038f }, /* Greek_OMEGAaccent Ώ GREEK CAPITAL LETTER OMEGA WITH TONOS */
- { 0x07ae, 0x0385 }, /* Greek_accentdieresis ΅ GREEK DIALYTIKA TONOS */
- { 0x07af, 0x2015 }, /* Greek_horizbar ― HORIZONTAL BAR */
- { 0x07b1, 0x03ac }, /* Greek_alphaaccent ά GREEK SMALL LETTER ALPHA WITH TONOS */
- { 0x07b2, 0x03ad }, /* Greek_epsilonaccent έ GREEK SMALL LETTER EPSILON WITH TONOS */
- { 0x07b3, 0x03ae }, /* Greek_etaaccent ή GREEK SMALL LETTER ETA WITH TONOS */
- { 0x07b4, 0x03af }, /* Greek_iotaaccent ί GREEK SMALL LETTER IOTA WITH TONOS */
- { 0x07b5, 0x03ca }, /* Greek_iotadieresis ϊ GREEK SMALL LETTER IOTA WITH DIALYTIKA */
- { 0x07b6, 0x0390 }, /* Greek_iotaaccentdieresis ΐ GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS */
- { 0x07b7, 0x03cc }, /* Greek_omicronaccent ό GREEK SMALL LETTER OMICRON WITH TONOS */
- { 0x07b8, 0x03cd }, /* Greek_upsilonaccent ύ GREEK SMALL LETTER UPSILON WITH TONOS */
- { 0x07b9, 0x03cb }, /* Greek_upsilondieresis ϋ GREEK SMALL LETTER UPSILON WITH DIALYTIKA */
- { 0x07ba, 0x03b0 }, /* Greek_upsilonaccentdieresis ΰ GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS */
- { 0x07bb, 0x03ce }, /* Greek_omegaaccent ώ GREEK SMALL LETTER OMEGA WITH TONOS */
- { 0x07c1, 0x0391 }, /* Greek_ALPHA Α GREEK CAPITAL LETTER ALPHA */
- { 0x07c2, 0x0392 }, /* Greek_BETA Β GREEK CAPITAL LETTER BETA */
- { 0x07c3, 0x0393 }, /* Greek_GAMMA Γ GREEK CAPITAL LETTER GAMMA */
- { 0x07c4, 0x0394 }, /* Greek_DELTA Δ GREEK CAPITAL LETTER DELTA */
- { 0x07c5, 0x0395 }, /* Greek_EPSILON Ε GREEK CAPITAL LETTER EPSILON */
- { 0x07c6, 0x0396 }, /* Greek_ZETA Ζ GREEK CAPITAL LETTER ZETA */
- { 0x07c7, 0x0397 }, /* Greek_ETA Η GREEK CAPITAL LETTER ETA */
- { 0x07c8, 0x0398 }, /* Greek_THETA Θ GREEK CAPITAL LETTER THETA */
- { 0x07c9, 0x0399 }, /* Greek_IOTA Ι GREEK CAPITAL LETTER IOTA */
- { 0x07ca, 0x039a }, /* Greek_KAPPA Κ GREEK CAPITAL LETTER KAPPA */
- { 0x07cb, 0x039b }, /* Greek_LAMBDA Λ GREEK CAPITAL LETTER LAMDA */
- { 0x07cc, 0x039c }, /* Greek_MU Μ GREEK CAPITAL LETTER MU */
- { 0x07cd, 0x039d }, /* Greek_NU Ν GREEK CAPITAL LETTER NU */
- { 0x07ce, 0x039e }, /* Greek_XI Ξ GREEK CAPITAL LETTER XI */
- { 0x07cf, 0x039f }, /* Greek_OMICRON Ο GREEK CAPITAL LETTER OMICRON */
- { 0x07d0, 0x03a0 }, /* Greek_PI Π GREEK CAPITAL LETTER PI */
- { 0x07d1, 0x03a1 }, /* Greek_RHO Ρ GREEK CAPITAL LETTER RHO */
- { 0x07d2, 0x03a3 }, /* Greek_SIGMA Σ GREEK CAPITAL LETTER SIGMA */
- { 0x07d4, 0x03a4 }, /* Greek_TAU Τ GREEK CAPITAL LETTER TAU */
- { 0x07d5, 0x03a5 }, /* Greek_UPSILON Υ GREEK CAPITAL LETTER UPSILON */
- { 0x07d6, 0x03a6 }, /* Greek_PHI Φ GREEK CAPITAL LETTER PHI */
- { 0x07d7, 0x03a7 }, /* Greek_CHI Χ GREEK CAPITAL LETTER CHI */
- { 0x07d8, 0x03a8 }, /* Greek_PSI Ψ GREEK CAPITAL LETTER PSI */
- { 0x07d9, 0x03a9 }, /* Greek_OMEGA Ω GREEK CAPITAL LETTER OMEGA */
- { 0x07e1, 0x03b1 }, /* Greek_alpha α GREEK SMALL LETTER ALPHA */
- { 0x07e2, 0x03b2 }, /* Greek_beta β GREEK SMALL LETTER BETA */
- { 0x07e3, 0x03b3 }, /* Greek_gamma γ GREEK SMALL LETTER GAMMA */
- { 0x07e4, 0x03b4 }, /* Greek_delta δ GREEK SMALL LETTER DELTA */
- { 0x07e5, 0x03b5 }, /* Greek_epsilon ε GREEK SMALL LETTER EPSILON */
- { 0x07e6, 0x03b6 }, /* Greek_zeta ζ GREEK SMALL LETTER ZETA */
- { 0x07e7, 0x03b7 }, /* Greek_eta η GREEK SMALL LETTER ETA */
- { 0x07e8, 0x03b8 }, /* Greek_theta θ GREEK SMALL LETTER THETA */
- { 0x07e9, 0x03b9 }, /* Greek_iota ι GREEK SMALL LETTER IOTA */
- { 0x07ea, 0x03ba }, /* Greek_kappa κ GREEK SMALL LETTER KAPPA */
- { 0x07eb, 0x03bb }, /* Greek_lambda λ GREEK SMALL LETTER LAMDA */
- { 0x07ec, 0x03bc }, /* Greek_mu μ GREEK SMALL LETTER MU */
- { 0x07ed, 0x03bd }, /* Greek_nu ν GREEK SMALL LETTER NU */
- { 0x07ee, 0x03be }, /* Greek_xi ξ GREEK SMALL LETTER XI */
- { 0x07ef, 0x03bf }, /* Greek_omicron ο GREEK SMALL LETTER OMICRON */
- { 0x07f0, 0x03c0 }, /* Greek_pi π GREEK SMALL LETTER PI */
- { 0x07f1, 0x03c1 }, /* Greek_rho ρ GREEK SMALL LETTER RHO */
- { 0x07f2, 0x03c3 }, /* Greek_sigma σ GREEK SMALL LETTER SIGMA */
- { 0x07f3, 0x03c2 }, /* Greek_finalsmallsigma ς GREEK SMALL LETTER FINAL SIGMA */
- { 0x07f4, 0x03c4 }, /* Greek_tau τ GREEK SMALL LETTER TAU */
- { 0x07f5, 0x03c5 }, /* Greek_upsilon υ GREEK SMALL LETTER UPSILON */
- { 0x07f6, 0x03c6 }, /* Greek_phi φ GREEK SMALL LETTER PHI */
- { 0x07f7, 0x03c7 }, /* Greek_chi χ GREEK SMALL LETTER CHI */
- { 0x07f8, 0x03c8 }, /* Greek_psi ψ GREEK SMALL LETTER PSI */
- { 0x07f9, 0x03c9 }, /* Greek_omega ω GREEK SMALL LETTER OMEGA */
- { 0x08a1, 0x23b7 }, /* leftradical ⎷ ??? */
- { 0x08a2, 0x250c }, /* topleftradical ┌ BOX DRAWINGS LIGHT DOWN AND RIGHT */
- { 0x08a3, 0x2500 }, /* horizconnector ─ BOX DRAWINGS LIGHT HORIZONTAL */
- { 0x08a4, 0x2320 }, /* topintegral ⌠ TOP HALF INTEGRAL */
- { 0x08a5, 0x2321 }, /* botintegral ⌡ BOTTOM HALF INTEGRAL */
- { 0x08a6, 0x2502 }, /* vertconnector │ BOX DRAWINGS LIGHT VERTICAL */
- { 0x08a7, 0x23a1 }, /* topleftsqbracket ⎡ ??? */
- { 0x08a8, 0x23a3 }, /* botleftsqbracket ⎣ ??? */
- { 0x08a9, 0x23a4 }, /* toprightsqbracket ⎤ ??? */
- { 0x08aa, 0x23a6 }, /* botrightsqbracket ⎦ ??? */
- { 0x08ab, 0x239b }, /* topleftparens ⎛ ??? */
- { 0x08ac, 0x239d }, /* botleftparens ⎝ ??? */
- { 0x08ad, 0x239e }, /* toprightparens ⎞ ??? */
- { 0x08ae, 0x23a0 }, /* botrightparens ⎠ ??? */
- { 0x08af, 0x23a8 }, /* leftmiddlecurlybrace ⎨ ??? */
- { 0x08b0, 0x23ac }, /* rightmiddlecurlybrace ⎬ ??? */
-/* 0x08b1 topleftsummation ? ??? */
-/* 0x08b2 botleftsummation ? ??? */
-/* 0x08b3 topvertsummationconnector ? ??? */
-/* 0x08b4 botvertsummationconnector ? ??? */
-/* 0x08b5 toprightsummation ? ??? */
-/* 0x08b6 botrightsummation ? ??? */
-/* 0x08b7 rightmiddlesummation ? ??? */
- { 0x08bc, 0x2264 }, /* lessthanequal ≤ LESS-THAN OR EQUAL TO */
- { 0x08bd, 0x2260 }, /* notequal ≠ NOT EQUAL TO */
- { 0x08be, 0x2265 }, /* greaterthanequal ≥ GREATER-THAN OR EQUAL TO */
- { 0x08bf, 0x222b }, /* integral ∫ INTEGRAL */
- { 0x08c0, 0x2234 }, /* therefore ∴ THEREFORE */
- { 0x08c1, 0x221d }, /* variation ∝ PROPORTIONAL TO */
- { 0x08c2, 0x221e }, /* infinity ∞ INFINITY */
- { 0x08c5, 0x2207 }, /* nabla ∇ NABLA */
- { 0x08c8, 0x223c }, /* approximate ∼ TILDE OPERATOR */
- { 0x08c9, 0x2243 }, /* similarequal ≃ ASYMPTOTICALLY EQUAL TO */
- { 0x08cd, 0x21d4 }, /* ifonlyif ⇔ LEFT RIGHT DOUBLE ARROW */
- { 0x08ce, 0x21d2 }, /* implies ⇒ RIGHTWARDS DOUBLE ARROW */
- { 0x08cf, 0x2261 }, /* identical ≡ IDENTICAL TO */
- { 0x08d6, 0x221a }, /* radical √ SQUARE ROOT */
- { 0x08da, 0x2282 }, /* includedin ⊂ SUBSET OF */
- { 0x08db, 0x2283 }, /* includes ⊃ SUPERSET OF */
- { 0x08dc, 0x2229 }, /* intersection ∩ INTERSECTION */
- { 0x08dd, 0x222a }, /* union ∪ UNION */
- { 0x08de, 0x2227 }, /* logicaland ∧ LOGICAL AND */
- { 0x08df, 0x2228 }, /* logicalor ∨ LOGICAL OR */
- { 0x08ef, 0x2202 }, /* partialderivative ∂ PARTIAL DIFFERENTIAL */
- { 0x08f6, 0x0192 }, /* function ƒ LATIN SMALL LETTER F WITH HOOK */
- { 0x08fb, 0x2190 }, /* leftarrow ← LEFTWARDS ARROW */
- { 0x08fc, 0x2191 }, /* uparrow ↑ UPWARDS ARROW */
- { 0x08fd, 0x2192 }, /* rightarrow → RIGHTWARDS ARROW */
- { 0x08fe, 0x2193 }, /* downarrow ↓ DOWNWARDS ARROW */
-/* 0x09df blank ? ??? */
- { 0x09e0, 0x25c6 }, /* soliddiamond ◆ BLACK DIAMOND */
- { 0x09e1, 0x2592 }, /* checkerboard ▒ MEDIUM SHADE */
- { 0x09e2, 0x2409 }, /* ht ␉ SYMBOL FOR HORIZONTAL TABULATION */
- { 0x09e3, 0x240c }, /* ff ␌ SYMBOL FOR FORM FEED */
- { 0x09e4, 0x240d }, /* cr ␍ SYMBOL FOR CARRIAGE RETURN */
- { 0x09e5, 0x240a }, /* lf ␊ SYMBOL FOR LINE FEED */
- { 0x09e8, 0x2424 }, /* nl ␤ SYMBOL FOR NEWLINE */
- { 0x09e9, 0x240b }, /* vt ␋ SYMBOL FOR VERTICAL TABULATION */
- { 0x09ea, 0x2518 }, /* lowrightcorner ┘ BOX DRAWINGS LIGHT UP AND LEFT */
- { 0x09eb, 0x2510 }, /* uprightcorner ┐ BOX DRAWINGS LIGHT DOWN AND LEFT */
- { 0x09ec, 0x250c }, /* upleftcorner ┌ BOX DRAWINGS LIGHT DOWN AND RIGHT */
- { 0x09ed, 0x2514 }, /* lowleftcorner └ BOX DRAWINGS LIGHT UP AND RIGHT */
- { 0x09ee, 0x253c }, /* crossinglines ┼ BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL */
- { 0x09ef, 0x23ba }, /* horizlinescan1 ⎺ HORIZONTAL SCAN LINE-1 (Unicode 3.2 draft) */
- { 0x09f0, 0x23bb }, /* horizlinescan3 ⎻ HORIZONTAL SCAN LINE-3 (Unicode 3.2 draft) */
- { 0x09f1, 0x2500 }, /* horizlinescan5 ─ BOX DRAWINGS LIGHT HORIZONTAL */
- { 0x09f2, 0x23bc }, /* horizlinescan7 ⎼ HORIZONTAL SCAN LINE-7 (Unicode 3.2 draft) */
- { 0x09f3, 0x23bd }, /* horizlinescan9 ⎽ HORIZONTAL SCAN LINE-9 (Unicode 3.2 draft) */
- { 0x09f4, 0x251c }, /* leftt ├ BOX DRAWINGS LIGHT VERTICAL AND RIGHT */
- { 0x09f5, 0x2524 }, /* rightt ┤ BOX DRAWINGS LIGHT VERTICAL AND LEFT */
- { 0x09f6, 0x2534 }, /* bott ┴ BOX DRAWINGS LIGHT UP AND HORIZONTAL */
- { 0x09f7, 0x252c }, /* topt ┬ BOX DRAWINGS LIGHT DOWN AND HORIZONTAL */
- { 0x09f8, 0x2502 }, /* vertbar │ BOX DRAWINGS LIGHT VERTICAL */
- { 0x0aa1, 0x2003 }, /* emspace   EM SPACE */
- { 0x0aa2, 0x2002 }, /* enspace   EN SPACE */
- { 0x0aa3, 0x2004 }, /* em3space   THREE-PER-EM SPACE */
- { 0x0aa4, 0x2005 }, /* em4space   FOUR-PER-EM SPACE */
- { 0x0aa5, 0x2007 }, /* digitspace   FIGURE SPACE */
- { 0x0aa6, 0x2008 }, /* punctspace   PUNCTUATION SPACE */
- { 0x0aa7, 0x2009 }, /* thinspace   THIN SPACE */
- { 0x0aa8, 0x200a }, /* hairspace   HAIR SPACE */
- { 0x0aa9, 0x2014 }, /* emdash — EM DASH */
- { 0x0aaa, 0x2013 }, /* endash – EN DASH */
-/* 0x0aac signifblank ? ??? */
- { 0x0aae, 0x2026 }, /* ellipsis … HORIZONTAL ELLIPSIS */
- { 0x0aaf, 0x2025 }, /* doubbaselinedot ‥ TWO DOT LEADER */
- { 0x0ab0, 0x2153 }, /* onethird ⅓ VULGAR FRACTION ONE THIRD */
- { 0x0ab1, 0x2154 }, /* twothirds ⅔ VULGAR FRACTION TWO THIRDS */
- { 0x0ab2, 0x2155 }, /* onefifth ⅕ VULGAR FRACTION ONE FIFTH */
- { 0x0ab3, 0x2156 }, /* twofifths ⅖ VULGAR FRACTION TWO FIFTHS */
- { 0x0ab4, 0x2157 }, /* threefifths ⅗ VULGAR FRACTION THREE FIFTHS */
- { 0x0ab5, 0x2158 }, /* fourfifths ⅘ VULGAR FRACTION FOUR FIFTHS */
- { 0x0ab6, 0x2159 }, /* onesixth ⅙ VULGAR FRACTION ONE SIXTH */
- { 0x0ab7, 0x215a }, /* fivesixths ⅚ VULGAR FRACTION FIVE SIXTHS */
- { 0x0ab8, 0x2105 }, /* careof ℅ CARE OF */
- { 0x0abb, 0x2012 }, /* figdash ‒ FIGURE DASH */
- { 0x0abc, 0x2329 }, /* leftanglebracket 〈 LEFT-POINTING ANGLE BRACKET */
-/* 0x0abd decimalpoint ? ??? */
- { 0x0abe, 0x232a }, /* rightanglebracket 〉 RIGHT-POINTING ANGLE BRACKET */
-/* 0x0abf marker ? ??? */
- { 0x0ac3, 0x215b }, /* oneeighth ⅛ VULGAR FRACTION ONE EIGHTH */
- { 0x0ac4, 0x215c }, /* threeeighths ⅜ VULGAR FRACTION THREE EIGHTHS */
- { 0x0ac5, 0x215d }, /* fiveeighths ⅝ VULGAR FRACTION FIVE EIGHTHS */
- { 0x0ac6, 0x215e }, /* seveneighths ⅞ VULGAR FRACTION SEVEN EIGHTHS */
- { 0x0ac9, 0x2122 }, /* trademark ™ TRADE MARK SIGN */
- { 0x0aca, 0x2613 }, /* signaturemark ☓ SALTIRE */
-/* 0x0acb trademarkincircle ? ??? */
- { 0x0acc, 0x25c1 }, /* leftopentriangle ◁ WHITE LEFT-POINTING TRIANGLE */
- { 0x0acd, 0x25b7 }, /* rightopentriangle ▷ WHITE RIGHT-POINTING TRIANGLE */
- { 0x0ace, 0x25cb }, /* emopencircle ○ WHITE CIRCLE */
- { 0x0acf, 0x25af }, /* emopenrectangle ▯ WHITE VERTICAL RECTANGLE */
- { 0x0ad0, 0x2018 }, /* leftsinglequotemark ‘ LEFT SINGLE QUOTATION MARK */
- { 0x0ad1, 0x2019 }, /* rightsinglequotemark ’ RIGHT SINGLE QUOTATION MARK */
- { 0x0ad2, 0x201c }, /* leftdoublequotemark “ LEFT DOUBLE QUOTATION MARK */
- { 0x0ad3, 0x201d }, /* rightdoublequotemark ” RIGHT DOUBLE QUOTATION MARK */
- { 0x0ad4, 0x211e }, /* prescription ℞ PRESCRIPTION TAKE */
- { 0x0ad6, 0x2032 }, /* minutes ′ PRIME */
- { 0x0ad7, 0x2033 }, /* seconds ″ DOUBLE PRIME */
- { 0x0ad9, 0x271d }, /* latincross ✝ LATIN CROSS */
-/* 0x0ada hexagram ? ??? */
- { 0x0adb, 0x25ac }, /* filledrectbullet ▬ BLACK RECTANGLE */
- { 0x0adc, 0x25c0 }, /* filledlefttribullet ◀ BLACK LEFT-POINTING TRIANGLE */
- { 0x0add, 0x25b6 }, /* filledrighttribullet ▶ BLACK RIGHT-POINTING TRIANGLE */
- { 0x0ade, 0x25cf }, /* emfilledcircle ● BLACK CIRCLE */
- { 0x0adf, 0x25ae }, /* emfilledrect ▮ BLACK VERTICAL RECTANGLE */
- { 0x0ae0, 0x25e6 }, /* enopencircbullet ◦ WHITE BULLET */
- { 0x0ae1, 0x25ab }, /* enopensquarebullet ▫ WHITE SMALL SQUARE */
- { 0x0ae2, 0x25ad }, /* openrectbullet ▭ WHITE RECTANGLE */
- { 0x0ae3, 0x25b3 }, /* opentribulletup △ WHITE UP-POINTING TRIANGLE */
- { 0x0ae4, 0x25bd }, /* opentribulletdown ▽ WHITE DOWN-POINTING TRIANGLE */
- { 0x0ae5, 0x2606 }, /* openstar ☆ WHITE STAR */
- { 0x0ae6, 0x2022 }, /* enfilledcircbullet • BULLET */
- { 0x0ae7, 0x25aa }, /* enfilledsqbullet ▪ BLACK SMALL SQUARE */
- { 0x0ae8, 0x25b2 }, /* filledtribulletup ▲ BLACK UP-POINTING TRIANGLE */
- { 0x0ae9, 0x25bc }, /* filledtribulletdown ▼ BLACK DOWN-POINTING TRIANGLE */
- { 0x0aea, 0x261c }, /* leftpointer ☜ WHITE LEFT POINTING INDEX */
- { 0x0aeb, 0x261e }, /* rightpointer ☞ WHITE RIGHT POINTING INDEX */
- { 0x0aec, 0x2663 }, /* club ♣ BLACK CLUB SUIT */
- { 0x0aed, 0x2666 }, /* diamond ♦ BLACK DIAMOND SUIT */
- { 0x0aee, 0x2665 }, /* heart ♥ BLACK HEART SUIT */
- { 0x0af0, 0x2720 }, /* maltesecross ✠ MALTESE CROSS */
- { 0x0af1, 0x2020 }, /* dagger † DAGGER */
- { 0x0af2, 0x2021 }, /* doubledagger ‡ DOUBLE DAGGER */
- { 0x0af3, 0x2713 }, /* checkmark ✓ CHECK MARK */
- { 0x0af4, 0x2717 }, /* ballotcross ✗ BALLOT X */
- { 0x0af5, 0x266f }, /* musicalsharp ♯ MUSIC SHARP SIGN */
- { 0x0af6, 0x266d }, /* musicalflat ♭ MUSIC FLAT SIGN */
- { 0x0af7, 0x2642 }, /* malesymbol ♂ MALE SIGN */
- { 0x0af8, 0x2640 }, /* femalesymbol ♀ FEMALE SIGN */
- { 0x0af9, 0x260e }, /* telephone ☎ BLACK TELEPHONE */
- { 0x0afa, 0x2315 }, /* telephonerecorder ⌕ TELEPHONE RECORDER */
- { 0x0afb, 0x2117 }, /* phonographcopyright ℗ SOUND RECORDING COPYRIGHT */
- { 0x0afc, 0x2038 }, /* caret ‸ CARET */
- { 0x0afd, 0x201a }, /* singlelowquotemark ‚ SINGLE LOW-9 QUOTATION MARK */
- { 0x0afe, 0x201e }, /* doublelowquotemark „ DOUBLE LOW-9 QUOTATION MARK */
-/* 0x0aff cursor ? ??? */
- { 0x0ba3, 0x003c }, /* leftcaret < LESS-THAN SIGN */
- { 0x0ba6, 0x003e }, /* rightcaret > GREATER-THAN SIGN */
- { 0x0ba8, 0x2228 }, /* downcaret ∨ LOGICAL OR */
- { 0x0ba9, 0x2227 }, /* upcaret ∧ LOGICAL AND */
- { 0x0bc0, 0x00af }, /* overbar ¯ MACRON */
- { 0x0bc2, 0x22a5 }, /* downtack ⊥ UP TACK */
- { 0x0bc3, 0x2229 }, /* upshoe ∩ INTERSECTION */
- { 0x0bc4, 0x230a }, /* downstile ⌊ LEFT FLOOR */
- { 0x0bc6, 0x005f }, /* underbar _ LOW LINE */
- { 0x0bca, 0x2218 }, /* jot ∘ RING OPERATOR */
- { 0x0bcc, 0x2395 }, /* quad ⎕ APL FUNCTIONAL SYMBOL QUAD */
- { 0x0bce, 0x22a4 }, /* uptack ⊤ DOWN TACK */
- { 0x0bcf, 0x25cb }, /* circle ○ WHITE CIRCLE */
- { 0x0bd3, 0x2308 }, /* upstile ⌈ LEFT CEILING */
- { 0x0bd6, 0x222a }, /* downshoe ∪ UNION */
- { 0x0bd8, 0x2283 }, /* rightshoe ⊃ SUPERSET OF */
- { 0x0bda, 0x2282 }, /* leftshoe ⊂ SUBSET OF */
- { 0x0bdc, 0x22a2 }, /* lefttack ⊢ RIGHT TACK */
- { 0x0bfc, 0x22a3 }, /* righttack ⊣ LEFT TACK */
- { 0x0cdf, 0x2017 }, /* hebrew_doublelowline ‗ DOUBLE LOW LINE */
- { 0x0ce0, 0x05d0 }, /* hebrew_aleph א HEBREW LETTER ALEF */
- { 0x0ce1, 0x05d1 }, /* hebrew_bet ב HEBREW LETTER BET */
- { 0x0ce2, 0x05d2 }, /* hebrew_gimel ג HEBREW LETTER GIMEL */
- { 0x0ce3, 0x05d3 }, /* hebrew_dalet ד HEBREW LETTER DALET */
- { 0x0ce4, 0x05d4 }, /* hebrew_he ה HEBREW LETTER HE */
- { 0x0ce5, 0x05d5 }, /* hebrew_waw ו HEBREW LETTER VAV */
- { 0x0ce6, 0x05d6 }, /* hebrew_zain ז HEBREW LETTER ZAYIN */
- { 0x0ce7, 0x05d7 }, /* hebrew_chet ח HEBREW LETTER HET */
- { 0x0ce8, 0x05d8 }, /* hebrew_tet ט HEBREW LETTER TET */
- { 0x0ce9, 0x05d9 }, /* hebrew_yod י HEBREW LETTER YOD */
- { 0x0cea, 0x05da }, /* hebrew_finalkaph ך HEBREW LETTER FINAL KAF */
- { 0x0ceb, 0x05db }, /* hebrew_kaph כ HEBREW LETTER KAF */
- { 0x0cec, 0x05dc }, /* hebrew_lamed ל HEBREW LETTER LAMED */
- { 0x0ced, 0x05dd }, /* hebrew_finalmem ם HEBREW LETTER FINAL MEM */
- { 0x0cee, 0x05de }, /* hebrew_mem מ HEBREW LETTER MEM */
- { 0x0cef, 0x05df }, /* hebrew_finalnun ן HEBREW LETTER FINAL NUN */
- { 0x0cf0, 0x05e0 }, /* hebrew_nun נ HEBREW LETTER NUN */
- { 0x0cf1, 0x05e1 }, /* hebrew_samech ס HEBREW LETTER SAMEKH */
- { 0x0cf2, 0x05e2 }, /* hebrew_ayin ע HEBREW LETTER AYIN */
- { 0x0cf3, 0x05e3 }, /* hebrew_finalpe ף HEBREW LETTER FINAL PE */
- { 0x0cf4, 0x05e4 }, /* hebrew_pe פ HEBREW LETTER PE */
- { 0x0cf5, 0x05e5 }, /* hebrew_finalzade ץ HEBREW LETTER FINAL TSADI */
- { 0x0cf6, 0x05e6 }, /* hebrew_zade צ HEBREW LETTER TSADI */
- { 0x0cf7, 0x05e7 }, /* hebrew_qoph ק HEBREW LETTER QOF */
- { 0x0cf8, 0x05e8 }, /* hebrew_resh ר HEBREW LETTER RESH */
- { 0x0cf9, 0x05e9 }, /* hebrew_shin ש HEBREW LETTER SHIN */
- { 0x0cfa, 0x05ea }, /* hebrew_taw ת HEBREW LETTER TAV */
- { 0x0da1, 0x0e01 }, /* Thai_kokai ก THAI CHARACTER KO KAI */
- { 0x0da2, 0x0e02 }, /* Thai_khokhai ข THAI CHARACTER KHO KHAI */
- { 0x0da3, 0x0e03 }, /* Thai_khokhuat ฃ THAI CHARACTER KHO KHUAT */
- { 0x0da4, 0x0e04 }, /* Thai_khokhwai ค THAI CHARACTER KHO KHWAI */
- { 0x0da5, 0x0e05 }, /* Thai_khokhon ฅ THAI CHARACTER KHO KHON */
- { 0x0da6, 0x0e06 }, /* Thai_khorakhang ฆ THAI CHARACTER KHO RAKHANG */
- { 0x0da7, 0x0e07 }, /* Thai_ngongu ง THAI CHARACTER NGO NGU */
- { 0x0da8, 0x0e08 }, /* Thai_chochan จ THAI CHARACTER CHO CHAN */
- { 0x0da9, 0x0e09 }, /* Thai_choching ฉ THAI CHARACTER CHO CHING */
- { 0x0daa, 0x0e0a }, /* Thai_chochang ช THAI CHARACTER CHO CHANG */
- { 0x0dab, 0x0e0b }, /* Thai_soso ซ THAI CHARACTER SO SO */
- { 0x0dac, 0x0e0c }, /* Thai_chochoe ฌ THAI CHARACTER CHO CHOE */
- { 0x0dad, 0x0e0d }, /* Thai_yoying ญ THAI CHARACTER YO YING */
- { 0x0dae, 0x0e0e }, /* Thai_dochada ฎ THAI CHARACTER DO CHADA */
- { 0x0daf, 0x0e0f }, /* Thai_topatak ฏ THAI CHARACTER TO PATAK */
- { 0x0db0, 0x0e10 }, /* Thai_thothan ฐ THAI CHARACTER THO THAN */
- { 0x0db1, 0x0e11 }, /* Thai_thonangmontho ฑ THAI CHARACTER THO NANGMONTHO */
- { 0x0db2, 0x0e12 }, /* Thai_thophuthao ฒ THAI CHARACTER THO PHUTHAO */
- { 0x0db3, 0x0e13 }, /* Thai_nonen ณ THAI CHARACTER NO NEN */
- { 0x0db4, 0x0e14 }, /* Thai_dodek ด THAI CHARACTER DO DEK */
- { 0x0db5, 0x0e15 }, /* Thai_totao ต THAI CHARACTER TO TAO */
- { 0x0db6, 0x0e16 }, /* Thai_thothung ถ THAI CHARACTER THO THUNG */
- { 0x0db7, 0x0e17 }, /* Thai_thothahan ท THAI CHARACTER THO THAHAN */
- { 0x0db8, 0x0e18 }, /* Thai_thothong ธ THAI CHARACTER THO THONG */
- { 0x0db9, 0x0e19 }, /* Thai_nonu น THAI CHARACTER NO NU */
- { 0x0dba, 0x0e1a }, /* Thai_bobaimai บ THAI CHARACTER BO BAIMAI */
- { 0x0dbb, 0x0e1b }, /* Thai_popla ป THAI CHARACTER PO PLA */
- { 0x0dbc, 0x0e1c }, /* Thai_phophung ผ THAI CHARACTER PHO PHUNG */
- { 0x0dbd, 0x0e1d }, /* Thai_fofa ฝ THAI CHARACTER FO FA */
- { 0x0dbe, 0x0e1e }, /* Thai_phophan พ THAI CHARACTER PHO PHAN */
- { 0x0dbf, 0x0e1f }, /* Thai_fofan ฟ THAI CHARACTER FO FAN */
- { 0x0dc0, 0x0e20 }, /* Thai_phosamphao ภ THAI CHARACTER PHO SAMPHAO */
- { 0x0dc1, 0x0e21 }, /* Thai_moma ม THAI CHARACTER MO MA */
- { 0x0dc2, 0x0e22 }, /* Thai_yoyak ย THAI CHARACTER YO YAK */
- { 0x0dc3, 0x0e23 }, /* Thai_rorua ร THAI CHARACTER RO RUA */
- { 0x0dc4, 0x0e24 }, /* Thai_ru ฤ THAI CHARACTER RU */
- { 0x0dc5, 0x0e25 }, /* Thai_loling ล THAI CHARACTER LO LING */
- { 0x0dc6, 0x0e26 }, /* Thai_lu ฦ THAI CHARACTER LU */
- { 0x0dc7, 0x0e27 }, /* Thai_wowaen ว THAI CHARACTER WO WAEN */
- { 0x0dc8, 0x0e28 }, /* Thai_sosala ศ THAI CHARACTER SO SALA */
- { 0x0dc9, 0x0e29 }, /* Thai_sorusi ษ THAI CHARACTER SO RUSI */
- { 0x0dca, 0x0e2a }, /* Thai_sosua ส THAI CHARACTER SO SUA */
- { 0x0dcb, 0x0e2b }, /* Thai_hohip ห THAI CHARACTER HO HIP */
- { 0x0dcc, 0x0e2c }, /* Thai_lochula ฬ THAI CHARACTER LO CHULA */
- { 0x0dcd, 0x0e2d }, /* Thai_oang อ THAI CHARACTER O ANG */
- { 0x0dce, 0x0e2e }, /* Thai_honokhuk ฮ THAI CHARACTER HO NOKHUK */
- { 0x0dcf, 0x0e2f }, /* Thai_paiyannoi ฯ THAI CHARACTER PAIYANNOI */
- { 0x0dd0, 0x0e30 }, /* Thai_saraa ะ THAI CHARACTER SARA A */
- { 0x0dd1, 0x0e31 }, /* Thai_maihanakat ั THAI CHARACTER MAI HAN-AKAT */
- { 0x0dd2, 0x0e32 }, /* Thai_saraaa า THAI CHARACTER SARA AA */
- { 0x0dd3, 0x0e33 }, /* Thai_saraam ำ THAI CHARACTER SARA AM */
- { 0x0dd4, 0x0e34 }, /* Thai_sarai ิ THAI CHARACTER SARA I */
- { 0x0dd5, 0x0e35 }, /* Thai_saraii ี THAI CHARACTER SARA II */
- { 0x0dd6, 0x0e36 }, /* Thai_saraue ึ THAI CHARACTER SARA UE */
- { 0x0dd7, 0x0e37 }, /* Thai_sarauee ื THAI CHARACTER SARA UEE */
- { 0x0dd8, 0x0e38 }, /* Thai_sarau ุ THAI CHARACTER SARA U */
- { 0x0dd9, 0x0e39 }, /* Thai_sarauu ู THAI CHARACTER SARA UU */
- { 0x0dda, 0x0e3a }, /* Thai_phinthu ฺ THAI CHARACTER PHINTHU */
-/* 0x0dde Thai_maihanakat_maitho ? ??? */
- { 0x0ddf, 0x0e3f }, /* Thai_baht ฿ THAI CURRENCY SYMBOL BAHT */
- { 0x0de0, 0x0e40 }, /* Thai_sarae เ THAI CHARACTER SARA E */
- { 0x0de1, 0x0e41 }, /* Thai_saraae แ THAI CHARACTER SARA AE */
- { 0x0de2, 0x0e42 }, /* Thai_sarao โ THAI CHARACTER SARA O */
- { 0x0de3, 0x0e43 }, /* Thai_saraaimaimuan ใ THAI CHARACTER SARA AI MAIMUAN */
- { 0x0de4, 0x0e44 }, /* Thai_saraaimaimalai ไ THAI CHARACTER SARA AI MAIMALAI */
- { 0x0de5, 0x0e45 }, /* Thai_lakkhangyao ๅ THAI CHARACTER LAKKHANGYAO */
- { 0x0de6, 0x0e46 }, /* Thai_maiyamok ๆ THAI CHARACTER MAIYAMOK */
- { 0x0de7, 0x0e47 }, /* Thai_maitaikhu ็ THAI CHARACTER MAITAIKHU */
- { 0x0de8, 0x0e48 }, /* Thai_maiek ่ THAI CHARACTER MAI EK */
- { 0x0de9, 0x0e49 }, /* Thai_maitho ้ THAI CHARACTER MAI THO */
- { 0x0dea, 0x0e4a }, /* Thai_maitri ๊ THAI CHARACTER MAI TRI */
- { 0x0deb, 0x0e4b }, /* Thai_maichattawa ๋ THAI CHARACTER MAI CHATTAWA */
- { 0x0dec, 0x0e4c }, /* Thai_thanthakhat ์ THAI CHARACTER THANTHAKHAT */
- { 0x0ded, 0x0e4d }, /* Thai_nikhahit ํ THAI CHARACTER NIKHAHIT */
- { 0x0df0, 0x0e50 }, /* Thai_leksun ๐ THAI DIGIT ZERO */
- { 0x0df1, 0x0e51 }, /* Thai_leknung ๑ THAI DIGIT ONE */
- { 0x0df2, 0x0e52 }, /* Thai_leksong ๒ THAI DIGIT TWO */
- { 0x0df3, 0x0e53 }, /* Thai_leksam ๓ THAI DIGIT THREE */
- { 0x0df4, 0x0e54 }, /* Thai_leksi ๔ THAI DIGIT FOUR */
- { 0x0df5, 0x0e55 }, /* Thai_lekha ๕ THAI DIGIT FIVE */
- { 0x0df6, 0x0e56 }, /* Thai_lekhok ๖ THAI DIGIT SIX */
- { 0x0df7, 0x0e57 }, /* Thai_lekchet ๗ THAI DIGIT SEVEN */
- { 0x0df8, 0x0e58 }, /* Thai_lekpaet ๘ THAI DIGIT EIGHT */
- { 0x0df9, 0x0e59 }, /* Thai_lekkao ๙ THAI DIGIT NINE */
- { 0x0ea1, 0x3131 }, /* Hangul_Kiyeog ㄱ HANGUL LETTER KIYEOK */
- { 0x0ea2, 0x3132 }, /* Hangul_SsangKiyeog ㄲ HANGUL LETTER SSANGKIYEOK */
- { 0x0ea3, 0x3133 }, /* Hangul_KiyeogSios ㄳ HANGUL LETTER KIYEOK-SIOS */
- { 0x0ea4, 0x3134 }, /* Hangul_Nieun ㄴ HANGUL LETTER NIEUN */
- { 0x0ea5, 0x3135 }, /* Hangul_NieunJieuj ㄵ HANGUL LETTER NIEUN-CIEUC */
- { 0x0ea6, 0x3136 }, /* Hangul_NieunHieuh ㄶ HANGUL LETTER NIEUN-HIEUH */
- { 0x0ea7, 0x3137 }, /* Hangul_Dikeud ㄷ HANGUL LETTER TIKEUT */
- { 0x0ea8, 0x3138 }, /* Hangul_SsangDikeud ㄸ HANGUL LETTER SSANGTIKEUT */
- { 0x0ea9, 0x3139 }, /* Hangul_Rieul ㄹ HANGUL LETTER RIEUL */
- { 0x0eaa, 0x313a }, /* Hangul_RieulKiyeog ㄺ HANGUL LETTER RIEUL-KIYEOK */
- { 0x0eab, 0x313b }, /* Hangul_RieulMieum ㄻ HANGUL LETTER RIEUL-MIEUM */
- { 0x0eac, 0x313c }, /* Hangul_RieulPieub ㄼ HANGUL LETTER RIEUL-PIEUP */
- { 0x0ead, 0x313d }, /* Hangul_RieulSios ㄽ HANGUL LETTER RIEUL-SIOS */
- { 0x0eae, 0x313e }, /* Hangul_RieulTieut ㄾ HANGUL LETTER RIEUL-THIEUTH */
- { 0x0eaf, 0x313f }, /* Hangul_RieulPhieuf ㄿ HANGUL LETTER RIEUL-PHIEUPH */
- { 0x0eb0, 0x3140 }, /* Hangul_RieulHieuh ㅀ HANGUL LETTER RIEUL-HIEUH */
- { 0x0eb1, 0x3141 }, /* Hangul_Mieum ㅁ HANGUL LETTER MIEUM */
- { 0x0eb2, 0x3142 }, /* Hangul_Pieub ㅂ HANGUL LETTER PIEUP */
- { 0x0eb3, 0x3143 }, /* Hangul_SsangPieub ㅃ HANGUL LETTER SSANGPIEUP */
- { 0x0eb4, 0x3144 }, /* Hangul_PieubSios ㅄ HANGUL LETTER PIEUP-SIOS */
- { 0x0eb5, 0x3145 }, /* Hangul_Sios ㅅ HANGUL LETTER SIOS */
- { 0x0eb6, 0x3146 }, /* Hangul_SsangSios ㅆ HANGUL LETTER SSANGSIOS */
- { 0x0eb7, 0x3147 }, /* Hangul_Ieung ㅇ HANGUL LETTER IEUNG */
- { 0x0eb8, 0x3148 }, /* Hangul_Jieuj ㅈ HANGUL LETTER CIEUC */
- { 0x0eb9, 0x3149 }, /* Hangul_SsangJieuj ㅉ HANGUL LETTER SSANGCIEUC */
- { 0x0eba, 0x314a }, /* Hangul_Cieuc ㅊ HANGUL LETTER CHIEUCH */
- { 0x0ebb, 0x314b }, /* Hangul_Khieuq ㅋ HANGUL LETTER KHIEUKH */
- { 0x0ebc, 0x314c }, /* Hangul_Tieut ㅌ HANGUL LETTER THIEUTH */
- { 0x0ebd, 0x314d }, /* Hangul_Phieuf ㅍ HANGUL LETTER PHIEUPH */
- { 0x0ebe, 0x314e }, /* Hangul_Hieuh ㅎ HANGUL LETTER HIEUH */
- { 0x0ebf, 0x314f }, /* Hangul_A ㅏ HANGUL LETTER A */
- { 0x0ec0, 0x3150 }, /* Hangul_AE ㅐ HANGUL LETTER AE */
- { 0x0ec1, 0x3151 }, /* Hangul_YA ㅑ HANGUL LETTER YA */
- { 0x0ec2, 0x3152 }, /* Hangul_YAE ㅒ HANGUL LETTER YAE */
- { 0x0ec3, 0x3153 }, /* Hangul_EO ㅓ HANGUL LETTER EO */
- { 0x0ec4, 0x3154 }, /* Hangul_E ㅔ HANGUL LETTER E */
- { 0x0ec5, 0x3155 }, /* Hangul_YEO ㅕ HANGUL LETTER YEO */
- { 0x0ec6, 0x3156 }, /* Hangul_YE ㅖ HANGUL LETTER YE */
- { 0x0ec7, 0x3157 }, /* Hangul_O ㅗ HANGUL LETTER O */
- { 0x0ec8, 0x3158 }, /* Hangul_WA ㅘ HANGUL LETTER WA */
- { 0x0ec9, 0x3159 }, /* Hangul_WAE ㅙ HANGUL LETTER WAE */
- { 0x0eca, 0x315a }, /* Hangul_OE ㅚ HANGUL LETTER OE */
- { 0x0ecb, 0x315b }, /* Hangul_YO ㅛ HANGUL LETTER YO */
- { 0x0ecc, 0x315c }, /* Hangul_U ㅜ HANGUL LETTER U */
- { 0x0ecd, 0x315d }, /* Hangul_WEO ㅝ HANGUL LETTER WEO */
- { 0x0ece, 0x315e }, /* Hangul_WE ㅞ HANGUL LETTER WE */
- { 0x0ecf, 0x315f }, /* Hangul_WI ㅟ HANGUL LETTER WI */
- { 0x0ed0, 0x3160 }, /* Hangul_YU ㅠ HANGUL LETTER YU */
- { 0x0ed1, 0x3161 }, /* Hangul_EU ㅡ HANGUL LETTER EU */
- { 0x0ed2, 0x3162 }, /* Hangul_YI ㅢ HANGUL LETTER YI */
- { 0x0ed3, 0x3163 }, /* Hangul_I ㅣ HANGUL LETTER I */
- { 0x0ed4, 0x11a8 }, /* Hangul_J_Kiyeog ᆨ HANGUL JONGSEONG KIYEOK */
- { 0x0ed5, 0x11a9 }, /* Hangul_J_SsangKiyeog ᆩ HANGUL JONGSEONG SSANGKIYEOK */
- { 0x0ed6, 0x11aa }, /* Hangul_J_KiyeogSios ᆪ HANGUL JONGSEONG KIYEOK-SIOS */
- { 0x0ed7, 0x11ab }, /* Hangul_J_Nieun ᆫ HANGUL JONGSEONG NIEUN */
- { 0x0ed8, 0x11ac }, /* Hangul_J_NieunJieuj ᆬ HANGUL JONGSEONG NIEUN-CIEUC */
- { 0x0ed9, 0x11ad }, /* Hangul_J_NieunHieuh ᆭ HANGUL JONGSEONG NIEUN-HIEUH */
- { 0x0eda, 0x11ae }, /* Hangul_J_Dikeud ᆮ HANGUL JONGSEONG TIKEUT */
- { 0x0edb, 0x11af }, /* Hangul_J_Rieul ᆯ HANGUL JONGSEONG RIEUL */
- { 0x0edc, 0x11b0 }, /* Hangul_J_RieulKiyeog ᆰ HANGUL JONGSEONG RIEUL-KIYEOK */
- { 0x0edd, 0x11b1 }, /* Hangul_J_RieulMieum ᆱ HANGUL JONGSEONG RIEUL-MIEUM */
- { 0x0ede, 0x11b2 }, /* Hangul_J_RieulPieub ᆲ HANGUL JONGSEONG RIEUL-PIEUP */
- { 0x0edf, 0x11b3 }, /* Hangul_J_RieulSios ᆳ HANGUL JONGSEONG RIEUL-SIOS */
- { 0x0ee0, 0x11b4 }, /* Hangul_J_RieulTieut ᆴ HANGUL JONGSEONG RIEUL-THIEUTH */
- { 0x0ee1, 0x11b5 }, /* Hangul_J_RieulPhieuf ᆵ HANGUL JONGSEONG RIEUL-PHIEUPH */
- { 0x0ee2, 0x11b6 }, /* Hangul_J_RieulHieuh ᆶ HANGUL JONGSEONG RIEUL-HIEUH */
- { 0x0ee3, 0x11b7 }, /* Hangul_J_Mieum ᆷ HANGUL JONGSEONG MIEUM */
- { 0x0ee4, 0x11b8 }, /* Hangul_J_Pieub ᆸ HANGUL JONGSEONG PIEUP */
- { 0x0ee5, 0x11b9 }, /* Hangul_J_PieubSios ᆹ HANGUL JONGSEONG PIEUP-SIOS */
- { 0x0ee6, 0x11ba }, /* Hangul_J_Sios ᆺ HANGUL JONGSEONG SIOS */
- { 0x0ee7, 0x11bb }, /* Hangul_J_SsangSios ᆻ HANGUL JONGSEONG SSANGSIOS */
- { 0x0ee8, 0x11bc }, /* Hangul_J_Ieung ᆼ HANGUL JONGSEONG IEUNG */
- { 0x0ee9, 0x11bd }, /* Hangul_J_Jieuj ᆽ HANGUL JONGSEONG CIEUC */
- { 0x0eea, 0x11be }, /* Hangul_J_Cieuc ᆾ HANGUL JONGSEONG CHIEUCH */
- { 0x0eeb, 0x11bf }, /* Hangul_J_Khieuq ᆿ HANGUL JONGSEONG KHIEUKH */
- { 0x0eec, 0x11c0 }, /* Hangul_J_Tieut ᇀ HANGUL JONGSEONG THIEUTH */
- { 0x0eed, 0x11c1 }, /* Hangul_J_Phieuf ᇁ HANGUL JONGSEONG PHIEUPH */
- { 0x0eee, 0x11c2 }, /* Hangul_J_Hieuh ᇂ HANGUL JONGSEONG HIEUH */
- { 0x0eef, 0x316d }, /* Hangul_RieulYeorinHieuh ㅭ HANGUL LETTER RIEUL-YEORINHIEUH */
- { 0x0ef0, 0x3171 }, /* Hangul_SunkyeongeumMieum ㅱ HANGUL LETTER KAPYEOUNMIEUM */
- { 0x0ef1, 0x3178 }, /* Hangul_SunkyeongeumPieub ㅸ HANGUL LETTER KAPYEOUNPIEUP */
- { 0x0ef2, 0x317f }, /* Hangul_PanSios ㅿ HANGUL LETTER PANSIOS */
- { 0x0ef3, 0x3181 }, /* Hangul_KkogjiDalrinIeung ㆁ HANGUL LETTER YESIEUNG */
- { 0x0ef4, 0x3184 }, /* Hangul_SunkyeongeumPhieuf ㆄ HANGUL LETTER KAPYEOUNPHIEUPH */
- { 0x0ef5, 0x3186 }, /* Hangul_YeorinHieuh ㆆ HANGUL LETTER YEORINHIEUH */
- { 0x0ef6, 0x318d }, /* Hangul_AraeA ㆍ HANGUL LETTER ARAEA */
- { 0x0ef7, 0x318e }, /* Hangul_AraeAE ㆎ HANGUL LETTER ARAEAE */
- { 0x0ef8, 0x11eb }, /* Hangul_J_PanSios ᇫ HANGUL JONGSEONG PANSIOS */
- { 0x0ef9, 0x11f0 }, /* Hangul_J_KkogjiDalrinIeung ᇰ HANGUL JONGSEONG YESIEUNG */
- { 0x0efa, 0x11f9 }, /* Hangul_J_YeorinHieuh ᇹ HANGUL JONGSEONG YEORINHIEUH */
- { 0x0eff, 0x20a9 }, /* Korean_Won ₩ WON SIGN */
- { 0x13a4, 0x20ac }, /* Euro € EURO SIGN */
- { 0x13bc, 0x0152 }, /* OE ΠLATIN CAPITAL LIGATURE OE */
- { 0x13bd, 0x0153 }, /* oe œ LATIN SMALL LIGATURE OE */
- { 0x13be, 0x0178 }, /* Ydiaeresis Ÿ LATIN CAPITAL LETTER Y WITH DIAERESIS */
- { 0x20ac, 0x20ac }, /* EuroSign € EURO SIGN */
-};
-
-VISIBLE
-long keysym2ucs(KeySym keysym)
-{
- int min = 0;
- int max = sizeof(keysymtab) / sizeof(struct codepair) - 1;
- int mid;
-
- /* first check for Latin-1 characters (1:1 mapping) */
- if ((keysym >= 0x0020 && keysym <= 0x007e) ||
- (keysym >= 0x00a0 && keysym <= 0x00ff))
- return keysym;
-
- /* also check for directly encoded 24-bit UCS characters */
- if ((keysym & 0xff000000) == 0x01000000)
- return keysym & 0x00ffffff;
-
- /* binary search in table */
- while (max >= min) {
- mid = (min + max) / 2;
- if (keysymtab[mid].keysym < keysym)
- min = mid + 1;
- else if (keysymtab[mid].keysym > keysym)
- max = mid - 1;
- else {
- /* found it */
- return keysymtab[mid].ucs;
- }
- }
-
- /* no matching Unicode value found */
- return -1;
-}
diff --git a/nx-X11/programs/xterm/keysym2ucs.h b/nx-X11/programs/xterm/keysym2ucs.h
deleted file mode 100644
index 1f23ac662..000000000
--- a/nx-X11/programs/xterm/keysym2ucs.h
+++ /dev/null
@@ -1,9 +0,0 @@
-/* $XFree86: xc/programs/xterm/keysym2ucs.h,v 1.1 1999/06/12 15:37:18 dawes Exp $ */
-/*
- * This module converts keysym values into the corresponding ISO 10646-1
- * (UCS, Unicode) values.
- */
-
-#include <X11/X.h>
-
-long keysym2ucs(KeySym keysym);
diff --git a/nx-X11/programs/xterm/link_axp.com b/nx-X11/programs/xterm/link_axp.com
deleted file mode 100644
index 1f493a933..000000000
--- a/nx-X11/programs/xterm/link_axp.com
+++ /dev/null
@@ -1,107 +0,0 @@
-$! $XFree86: xc/programs/xterm/link_axp.com,v 1.1 2000/02/08 17:19:35 dawes Exp $
-$ SAVE_VERIFY='F$VERIFY(0)
-$ if p1 .Eqs. "CLEAN" then goto clean
-$ if p1 .Eqs. "CLOBBER" then goto clobber
-$ if p1 .Eqs. "INSTALL" then goto install
-$!
-$! Compile the X11R4 Xterm application
-$!
-$ Set Symbol/Scope=NoGlobal
-$!
-$! Define logicals pointing to the needed directories
-$!
-$ x11lib_device = f$parse("[.lib]",,,"DEVICE")
-$ x11lib_directory = f$parse("[.lib]",,,"DIRECTORY")
-$ define/nolog x11lib 'x11lib_device''x11lib_directory'
-$!
-$ x11inc_device = f$parse("[]",,,"DEVICE")
-$ x11inc_directory = f$parse("[]",,,"DIRECTORY")
-$ define/nolog x11inc 'x11inc_device''x11inc_directory'
-$!
-$ xmu_device = f$parse("[.lib.xmu]",,,"DEVICE")
-$ xmu_directory = f$parse("[.lib.xmu]",,,"DIRECTORY")
-$ define/nolog x11xmu 'xmu_device''xmu_directory'
-$!
-$ xbm_device = f$parse("[.lib.x11]",,,"DEVICE")
-$ xbm_directory = f$parse("[.lib.x11]",,,"DIRECTORY")
-$ define/nolog x11xbm 'xbm_device''xbm_directory'
-$!
-$ xaw_device = f$parse("[.lib.xaw]",,,"DEVICE")
-$ xaw_directory = f$parse("[.lib.xaw]",,,"DIRECTORY")
-$ define/nolog x11xaw 'xaw_device''xaw_directory'
-$!
-$ x11vms_device = f$parse("[.lib.misc]",,,"DEVICE")
-$ x11vms_directory = f$parse("[.lib.misc]",,,"DIRECTORY")
-$ define/nolog x11vms 'x11vms_device''x11vms_directory'
-$!
-$! Get the compiler options via the logical name COPTS
-$!
-$ cc_options = f$trnlnm("COPTS")
-$!
-$! Get the linker options via the logical name LOPTS
-$!
-$ link_options = f$trnlnm("LOPTS")
-$!
-$ write sys$output "Building XTERM Image"
-$ CALL MAKE XTERM.EXE "LINK ''link_options' /EXE=XTERM.EXE_AXP/CROSS/FULL/MAP=XTERM.MAP XTERM_AXP/OPT" *.OBJ
-$!
-$ deassign x11lib
-$ deassign x11vms
-$ deassign x11xmu
-$ deassign x11xbm
-$ deassign x11xaw
-$!
-$ exit
-$!
-$ Clobber: ! Delete executables, Purge directory and clean up object files and listings
-$ Delete/noconfirm/log *.exe;*
-$!
-$ Clean: ! Purge directory, clean up object files and listings
-$ Purge
-$ Delete/noconfirm/log *.lis;*
-$ Delete/noconfirm/log *.obj;*
-$!
-$ exit
-$!
-$ Install:
-$ Copy/log *.exe x11bin:
-$ exit
-$!
-$MAKE: SUBROUTINE !SUBROUTINE TO CHECK DEPENDENCIES
-$ V = 'F$Verify(0)
-$! P1 = What we are trying to make
-$! P2 = Command to make it
-$! P3 - P8 What it depends on
-$
-$ If F$Search(P1) .Eqs. "" Then Goto Makeit
-$ Time = F$CvTime(F$File(P1,"RDT"))
-$arg=3
-$Loop:
-$ Argument = P'arg
-$ If Argument .Eqs. "" Then Goto Exit
-$ El=0
-$Loop2:
-$ File = F$Element(El," ",Argument)
-$ If File .Eqs. " " Then Goto Endl
-$ AFile = ""
-$Loop3:
-$ OFile = AFile
-$ AFile = F$Search(File)
-$ If AFile .Eqs. "" .Or. AFile .Eqs. OFile Then Goto NextEl
-$ If F$CvTime(F$File(AFile,"RDT")) .Ges. Time Then Goto Makeit
-$ Goto Loop3
-$NextEL:
-$ El = El + 1
-$ Goto Loop2
-$EndL:
-$ arg=arg+1
-$ If arg .Le. 8 Then Goto Loop
-$ Goto Exit
-$
-$Makeit:
-$ Set Verify
-$ 'P2
-$ VV='F$Verify(0)
-$Exit:
-$ If V Then Set Verify
-$ENDSUBROUTINE
diff --git a/nx-X11/programs/xterm/main.c b/nx-X11/programs/xterm/main.c
deleted file mode 100644
index 36068a474..000000000
--- a/nx-X11/programs/xterm/main.c
+++ /dev/null
@@ -1,4943 +0,0 @@
-/* $XTermId: main.c,v 1.477 2005/11/13 23:10:36 tom Exp $ */
-
-#if !defined(lint) && 0
-static char *rid = "$Xorg: main.c,v 1.7 2001/02/09 02:06:02 xorgcvs Exp $";
-#endif /* lint */
-
-/*
- * W A R N I N G
- *
- * If you think you know what all of this code is doing, you are
- * probably very mistaken. There be serious and nasty dragons here.
- *
- * This client is *not* to be taken as an example of how to write X
- * Toolkit applications. It is in need of a substantial rewrite,
- * ideally to create a generic tty widget with several different parsing
- * widgets so that you can plug 'em together any way you want. Don't
- * hold your breath, though....
- */
-
-/***********************************************************
-
-Copyright 2002-2004,2005 by Thomas E. Dickey
-
- All Rights Reserved
-
-Permission is hereby granted, free of charge, to any person obtaining a
-copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name(s) of the above copyright
-holders shall not be used in advertising or otherwise to promote the
-sale, use or other dealings in this Software without prior written
-authorization.
-
-Copyright 1987, 1988 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-
-Copyright 1987, 1988 by Digital Equipment Corporation, Maynard.
-
- All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and its
-documentation for any purpose and without fee is hereby granted,
-provided that the above copyright notice appear in all copies and that
-both that copyright notice and this permission notice appear in
-supporting documentation, and that the name of Digital not be used in
-advertising or publicity pertaining to distribution of the software
-without specific, written prior permission.
-
-DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
-ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
-DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
-ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
-WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
-SOFTWARE.
-
-******************************************************************/
-
-/**************************************************************************/
-/* */
-/* Copyright (c) 2001, 2011 NoMachine, http://www.nomachine.com/. */
-/* */
-/* NX-X11, NX protocol compression and NX extensions to this software */
-/* are copyright of NoMachine. Redistribution and use of the present */
-/* software is allowed according to terms specified in the file LICENSE */
-/* which comes in the source distribution. */
-/* */
-/* Check http://www.nomachine.com/licensing.html for applicability. */
-/* */
-/* NX and NoMachine are trademarks of Medialogic S.p.A. */
-/* */
-/* All rights reserved. */
-/* */
-/**************************************************************************/
-
-/* $XFree86: xc/programs/xterm/main.c,v 3.199 2005/11/13 23:10:36 dickey Exp $ */
-
-#ifdef NX_TRANS_EXIT
-
-/*
- * Redefine the libc exit() function to be
- * sure we get rid of proxy and detect any
- * abnormal termination.
- */
-
-extern void NXTransExit(int code) __attribute__((noreturn));
-
-#define exit(code) NXTransExit(code)
-
-#endif /* #ifdef NX_TRANS_EXIT */
-
-/* main.c */
-
-#define RES_OFFSET(field) XtOffsetOf(XTERM_RESOURCE, field)
-
-#include <xterm.h>
-
-#include <X11/cursorfont.h>
-#include <X11/Xlocale.h>
-
-#if OPT_TOOLBAR
-
-#if defined(HAVE_LIB_XAW)
-#include <X11/Xaw/Form.h>
-#elif defined(HAVE_LIB_XAW3D)
-#include <X11/Xaw3d/Form.h>
-#elif defined(HAVE_LIB_NEXTAW)
-#include <X11/neXtaw/Form.h>
-#elif defined(HAVE_LIB_XAWPLUS)
-#include <X11/XawPlus/Form.h>
-#endif
-
-#endif /* OPT_TOOLBAR */
-
-#include <pwd.h>
-#include <ctype.h>
-
-#include <data.h>
-#include <error.h>
-#include <menu.h>
-#include <main.h>
-#include <xstrings.h>
-#include <xterm_io.h>
-
-#if OPT_WIDE_CHARS
-#include <charclass.h>
-#endif
-
-#ifdef __osf__
-#define USE_SYSV_SIGNALS
-#define WTMP
-#include <pty.h> /* openpty() */
-#endif
-
-#ifdef __sgi
-#include <grp.h> /* initgroups() */
-#endif
-
-#ifdef USE_ISPTS_FLAG
-static Bool IsPts = False;
-#endif
-
-#if defined(__SCO__) || defined(SVR4) || defined(_POSIX_SOURCE)
-#define USE_POSIX_SIGNALS
-#endif
-
-#if defined(SYSV) && !defined(SVR4) && !defined(ISC22) && !defined(ISC30)
-/* older SYSV systems cannot ignore SIGHUP.
- Shell hangs, or you get extra shells, or something like that */
-#define USE_SYSV_SIGHUP
-#endif
-
-#if defined(sony) && defined(bsd43) && !defined(KANJI)
-#define KANJI
-#endif
-
-#ifdef linux
-#define USE_SYSV_PGRP
-#define USE_SYSV_SIGNALS
-#define WTMP
-#ifdef __GLIBC__
-#if (__GLIBC__ > 2) || ((__GLIBC__ == 2) && (__GLIBC_MINOR__ >= 1))
-#include <pty.h>
-#endif
-#endif
-#endif
-
-#ifdef __MVS__
-#define USE_SYSV_PGRP
-#define USE_SYSV_SIGNALS
-#endif
-
-#ifdef __CYGWIN__
-#define LASTLOG
-#define WTMP
-#endif
-
-#ifdef __SCO__
-#ifndef _SVID3
-#define _SVID3
-#endif
-#endif
-
-#if defined(__GLIBC__) && !defined(linux)
-#define USE_SYSV_PGRP
-#define WTMP
-#define HAS_BSD_GROUPS
-#endif
-
-#if defined(USE_TTY_GROUP) || defined(USE_UTMP_SETGID)
-#include <grp.h>
-#endif
-
-#ifndef TTY_GROUP_NAME
-#define TTY_GROUP_NAME "tty"
-#endif
-
-#include <sys/stat.h>
-
-#ifdef Lynx
-#ifndef BSDLY
-#define BSDLY 0
-#endif
-#ifndef VTDLY
-#define VTDLY 0
-#endif
-#ifndef FFDLY
-#define FFDLY 0
-#endif
-#endif
-
-#ifdef SYSV /* { */
-
-#ifdef USE_USG_PTYS /* AT&T SYSV has no ptyio.h */
-#include <sys/stropts.h> /* for I_PUSH */
-#include <poll.h> /* for POLLIN */
-#endif /* USE_USG_PTYS */
-
-#define USE_SYSV_SIGNALS
-#define USE_SYSV_PGRP
-
-#if !defined(TIOCSWINSZ) || defined(__SCO__) || defined(__UNIXWARE__)
-#define USE_SYSV_ENVVARS /* COLUMNS/LINES vs. TERMCAP */
-#endif
-
-/*
- * now get system-specific includes
- */
-#ifdef CRAY
-#define HAS_BSD_GROUPS
-#endif
-
-#ifdef macII
-#define HAS_BSD_GROUPS
-#include <sys/ttychars.h>
-#undef USE_SYSV_ENVVARS
-#undef FIOCLEX
-#undef FIONCLEX
-#define setpgrp2 setpgrp
-#include <sgtty.h>
-#include <sys/resource.h>
-#endif
-
-#ifdef __hpux
-#define HAS_BSD_GROUPS
-#include <sys/ptyio.h>
-#endif /* __hpux */
-
-#ifdef __osf__
-#define HAS_BSD_GROUPS
-#undef USE_SYSV_PGRP
-#define setpgrp setpgid
-#endif
-
-#ifdef __sgi
-#define HAS_BSD_GROUPS
-#include <sys/sysmacros.h>
-#endif /* __sgi */
-
-#ifdef sun
-#include <sys/strredir.h>
-#endif
-
-#else /* } !SYSV { */ /* BSD systems */
-
-#ifdef __QNX__
-
-#ifndef __QNXNTO__
-#define ttyslot() 1
-#else
-#define USE_SYSV_PGRP
-extern __inline__
-ttyslot()
-{
- return 1; /* yuk */
-}
-#endif
-
-#else
-
-#if defined(__INTERIX) || defined(__APPLE__)
-#define setpgrp setpgid
-#endif
-
-#ifndef linux
-#ifndef VMS
-#ifndef USE_POSIX_TERMIOS
-#ifndef USE_ANY_SYSV_TERMIO
-#include <sgtty.h>
-#endif
-#endif /* USE_POSIX_TERMIOS */
-#ifdef Lynx
-#include <resource.h>
-#else
-#include <sys/resource.h>
-#endif
-#ifndef __INTERIX
-#define HAS_BSD_GROUPS
-#endif
-#endif /* !VMS */
-#endif /* !linux */
-
-#endif /* __QNX__ */
-
-#endif /* } !SYSV */
-
-#if defined(SVR4) && !defined(__CYGWIN__)
-#define HAS_SAVED_IDS_AND_SETEUID
-#endif
-
-#ifdef linux
-#define HAS_SAVED_IDS_AND_SETEUID
-#endif
-
-/* Xpoll.h and <sys/param.h> on glibc 2.1 systems have colliding NBBY's */
-#if defined(__GLIBC__) && ((__GLIBC__ > 2) || ((__GLIBC__ == 2) && (__GLIBC_MINOR__ >= 1)))
-#ifndef NOFILE
-#define NOFILE OPEN_MAX
-#endif
-#elif !(defined(VMS) || defined(WIN32) || defined(Lynx) || defined(__GNU__) || defined(__MVS__))
-#include <sys/param.h> /* for NOFILE */
-#endif
-
-#if defined(BSD) && (BSD >= 199103)
-#define WTMP
-#define HAS_SAVED_IDS_AND_SETEUID
-#endif
-
-#include <stdio.h>
-
-#ifdef __hpux
-#include <sys/utsname.h>
-#endif /* __hpux */
-
-#if defined(apollo) && (OSMAJORVERSION == 10) && (OSMINORVERSION < 4)
-#define ttyslot() 1
-#endif /* apollo */
-
-#if defined(UTMPX_FOR_UTMP)
-#define UTMP_STR utmpx
-#else
-#define UTMP_STR utmp
-#endif
-
-#if defined(USE_UTEMPTER)
-#include <utempter.h>
-#endif
-
-#if defined(UTMPX_FOR_UTMP)
-
-#include <utmpx.h>
-
-#define call_endutent endutxent
-#define call_getutid getutxid
-#define call_pututline pututxline
-#define call_setutent setutxent
-#define call_updwtmp updwtmpx
-
-#elif defined(HAVE_UTMP)
-
-#include <utmp.h>
-
-#if defined(_CRAY) && (OSMAJORVERSION < 8)
-extern struct utmp *getutid __((struct utmp * _Id));
-#endif
-
-#define call_endutent endutent
-#define call_getutid getutid
-#define call_pututline pututline
-#define call_setutent setutent
-#define call_updwtmp updwtmp
-
-#endif
-
-#if defined(USE_LASTLOG) && defined(HAVE_LASTLOG_H)
-#include <lastlog.h> /* caution: glibc 2.3.5 includes utmp.h here */
-#endif
-
-#ifndef USE_LASTLOGX
-#if defined(_NETBSD_SOURCE) && defined(_PATH_LASTLOGX)
-#define USE_LASTLOGX 1
-#endif
-#endif
-
-#ifdef PUCC_PTYD
-#include <local/openpty.h>
-#endif /* PUCC_PTYD */
-
-#if defined(__OpenBSD__) || defined(__NetBSD__) || defined(__APPLE__)
-#include <util.h> /* openpty() */
-#endif
-
-#ifdef __FreeBSD__
-#include <libutil.h> /* openpty() */
-#endif
-
-#if !defined(UTMP_FILENAME)
-#if defined(UTMP_FILE)
-#define UTMP_FILENAME UTMP_FILE
-#elif defined(_PATH_UTMP)
-#define UTMP_FILENAME _PATH_UTMP
-#else
-#define UTMP_FILENAME "/etc/utmp"
-#endif
-#endif
-
-#ifndef LASTLOG_FILENAME
-#ifdef _PATH_LASTLOG
-#define LASTLOG_FILENAME _PATH_LASTLOG
-#else
-#define LASTLOG_FILENAME "/usr/adm/lastlog" /* only on BSD systems */
-#endif
-#endif
-
-#if !defined(WTMP_FILENAME)
-#if defined(WTMP_FILE)
-#define WTMP_FILENAME WTMP_FILE
-#elif defined(_PATH_WTMP)
-#define WTMP_FILENAME _PATH_WTMP
-#elif defined(SYSV)
-#define WTMP_FILENAME "/etc/wtmp"
-#else
-#define WTMP_FILENAME "/usr/adm/wtmp"
-#endif
-#endif
-
-#include <signal.h>
-
-#if defined(__SCO__) || (defined(ISC) && !defined(_POSIX_SOURCE))
-#undef SIGTSTP /* defined, but not the BSD way */
-#endif
-
-#ifdef SIGTSTP
-#include <sys/wait.h>
-#endif
-
-#if defined(__SCO__) || defined(__UNIXWARE__)
-#undef ECHOKE
-#undef ECHOCTL
-#endif
-
-#ifdef X_NOT_POSIX
-extern long lseek();
-#if defined(USG) || defined(SVR4)
-extern unsigned sleep();
-#else
-extern void sleep();
-#endif
-extern char *ttyname();
-#endif
-
-#ifdef SYSV
-extern char *ptsname(int);
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
- extern int tgetent(char *ptr, char *name);
- extern char *tgetstr(char *name, char **ptr);
-
-#ifdef __cplusplus
-}
-#endif
-#ifndef VMS
-static SIGNAL_T reapchild(int n);
-static int spawn(void);
-static void remove_termcap_entry(char *buf, char *str);
-#ifdef USE_PTY_SEARCH
-static int pty_search(int *pty);
-#endif
-#endif /* ! VMS */
-
-static int get_pty(int *pty, char *from);
-static void get_terminal(void);
-static void resize(TScreen * s, char *oldtc, char *newtc);
-static void set_owner(char *device, uid_t uid, gid_t gid, mode_t mode);
-
-static Bool added_utmp_entry = False;
-
-#if defined(USE_UTMP_SETGID)
-static int utmpGid = -1;
-static int really_get_pty(int *pty, char *from);
-#endif
-
-#if defined(USE_SYSV_UTMP) && !defined(USE_UTEMPTER)
-static Bool xterm_exiting = False;
-#endif
-
-static char *explicit_shname = NULL;
-
-/*
-** Ordinarily it should be okay to omit the assignment in the following
-** statement. Apparently the c89 compiler on AIX 4.1.3 has a bug, or does
-** it? Without the assignment though the compiler will init command_to_exec
-** to 0xffffffff instead of NULL; and subsequent usage, e.g. in spawn() to
-** SEGV.
-*/
-static char **command_to_exec = NULL;
-
-#if OPT_LUIT_PROG
-static char **command_to_exec_with_luit = NULL;
-#endif
-
-#define TERMCAP_ERASE "kb"
-#define VAL_INITIAL_ERASE A2E(8)
-
-/* choose a nice default value for speed - if we make it too low, users who
- * mistakenly use $TERM set to vt100 will get padding delays. Setting it to a
- * higher value is not useful since legacy applications (termcap) that care
- * about padding generally store the code in a short, which does not have
- * enough bits for the extended values.
- */
-#ifdef B38400 /* everyone should define this */
-#define VAL_LINE_SPEED B38400
-#else /* ...but xterm's used this for a long time */
-#define VAL_LINE_SPEED B9600
-#endif
-
-/* allow use of system default characters if defined and reasonable */
-#ifndef CBRK
-#define CBRK 0
-#endif
-#ifndef CDSUSP
-#define CDSUSP CONTROL('Y')
-#endif
-#ifndef CEOF
-#define CEOF CONTROL('D')
-#endif
-#ifndef CEOL
-#define CEOL 0
-#endif
-#ifndef CFLUSH
-#define CFLUSH CONTROL('O')
-#endif
-#ifndef CINTR
-#define CINTR 0177
-#endif
-#ifndef CKILL
-#define CKILL '@'
-#endif
-#ifndef CLNEXT
-#define CLNEXT CONTROL('V')
-#endif
-#ifndef CNUL
-#define CNUL 0
-#endif
-#ifndef CQUIT
-#define CQUIT CONTROL('\\')
-#endif
-#ifndef CRPRNT
-#define CRPRNT CONTROL('R')
-#endif
-#ifndef CSTART
-#define CSTART CONTROL('Q')
-#endif
-#ifndef CSTOP
-#define CSTOP CONTROL('S')
-#endif
-#ifndef CSUSP
-#define CSUSP CONTROL('Z')
-#endif
-#ifndef CSWTCH
-#define CSWTCH 0
-#endif
-#ifndef CWERASE
-#define CWERASE CONTROL('W')
-#endif
-
-#ifdef USE_ANY_SYSV_TERMIO
-#define TERMIO_STRUCT struct termio
-#define ttySetAttr(fd, datap) ioctl(fd, TCSETA, datap)
-#define ttyGetAttr(fd, datap) ioctl(fd, TCGETA, datap)
-#elif defined(USE_POSIX_TERMIOS)
-#define TERMIO_STRUCT struct termios
-#define ttySetAttr(fd, datap) tcsetattr(fd, TCSANOW, datap)
-#define ttyGetAttr(fd, datap) tcgetattr(fd, datap)
-#endif /* USE_ANY_SYSV_TERMIO */
-
-#ifndef VMS
-#ifdef TERMIO_STRUCT
-/* The following structures are initialized in main() in order
-** to eliminate any assumptions about the internal order of their
-** contents.
-*/
-static TERMIO_STRUCT d_tio;
-
-#ifdef HAS_LTCHARS
-static struct ltchars d_ltc;
-#endif /* HAS_LTCHARS */
-
-#ifdef TIOCLSET
-static unsigned int d_lmode;
-#endif /* TIOCLSET */
-
-#else /* !TERMIO_STRUCT */
-static struct sgttyb d_sg =
-{
- 0, 0, 0177, CKILL, (EVENP | ODDP | ECHO | XTABS | CRMOD)
-};
-static struct tchars d_tc =
-{
- CINTR, CQUIT, CSTART,
- CSTOP, CEOF, CBRK
-};
-static struct ltchars d_ltc =
-{
- CSUSP, CDSUSP, CRPRNT,
- CFLUSH, CWERASE, CLNEXT
-};
-static int d_disipline = NTTYDISC;
-static long int d_lmode = LCRTBS | LCRTERA | LCRTKIL | LCTLECH;
-#ifdef sony
-static long int d_jmode = KM_SYSSJIS | KM_ASCII;
-static struct jtchars d_jtc =
-{
- 'J', 'B'
-};
-#endif /* sony */
-#endif /* TERMIO_STRUCT */
-#endif /* ! VMS */
-
-/*
- * SYSV has the termio.c_cc[V] and ltchars; BSD has tchars and ltchars;
- * SVR4 has only termio.c_cc, but it includes everything from ltchars.
- * POSIX termios has termios.c_cc, which is similar to SVR4.
- */
-#define TTYMODE(name) { name, sizeof(name)-1, 0, 0 }
-static int override_tty_modes = 0;
-/* *INDENT-OFF* */
-static struct _xttymodes {
- char *name;
- size_t len;
- int set;
- Char value;
-} ttymodelist[] = {
- TTYMODE("intr"), /* tchars.t_intrc ; VINTR */
-#define XTTYMODE_intr 0
- TTYMODE("quit"), /* tchars.t_quitc ; VQUIT */
-#define XTTYMODE_quit 1
- TTYMODE("erase"), /* sgttyb.sg_erase ; VERASE */
-#define XTTYMODE_erase 2
- TTYMODE("kill"), /* sgttyb.sg_kill ; VKILL */
-#define XTTYMODE_kill 3
- TTYMODE("eof"), /* tchars.t_eofc ; VEOF */
-#define XTTYMODE_eof 4
- TTYMODE("eol"), /* VEOL */
-#define XTTYMODE_eol 5
- TTYMODE("swtch"), /* VSWTCH */
-#define XTTYMODE_swtch 6
- TTYMODE("start"), /* tchars.t_startc ; VSTART */
-#define XTTYMODE_start 7
- TTYMODE("stop"), /* tchars.t_stopc ; VSTOP */
-#define XTTYMODE_stop 8
- TTYMODE("brk"), /* tchars.t_brkc */
-#define XTTYMODE_brk 9
- TTYMODE("susp"), /* ltchars.t_suspc ; VSUSP */
-#define XTTYMODE_susp 10
- TTYMODE("dsusp"), /* ltchars.t_dsuspc ; VDSUSP */
-#define XTTYMODE_dsusp 11
- TTYMODE("rprnt"), /* ltchars.t_rprntc ; VREPRINT */
-#define XTTYMODE_rprnt 12
- TTYMODE("flush"), /* ltchars.t_flushc ; VDISCARD */
-#define XTTYMODE_flush 13
- TTYMODE("weras"), /* ltchars.t_werasc ; VWERASE */
-#define XTTYMODE_weras 14
- TTYMODE("lnext"), /* ltchars.t_lnextc ; VLNEXT */
-#define XTTYMODE_lnext 15
- TTYMODE("status"), /* VSTATUS */
-#define XTTYMODE_status 16
- TTYMODE("erase2"), /* VERASE2 */
-#define XTTYMODE_erase2 17
- TTYMODE("eol2"), /* VEOL2 */
-#define XTTYMODE_eol2 18
- { NULL, 0, 0, '\0' }, /* end of data */
-};
-/* *INDENT-ON* */
-
-#define TMODE(ind,var) if (ttymodelist[ind].set) var = ttymodelist[ind].value
-
-static int parse_tty_modes(char *s, struct _xttymodes *modelist);
-
-#ifdef USE_SYSV_UTMP
-#if (defined(AIXV3) && (OSMAJORVERSION < 4)) && !(defined(getutid))
-extern struct utmp *getutid();
-#endif /* AIXV3 */
-
-#else /* not USE_SYSV_UTMP */
-static char etc_utmp[] = UTMP_FILENAME;
-#endif /* USE_SYSV_UTMP */
-
-#ifndef USE_UTEMPTER
-#ifdef USE_LASTLOG
-static char etc_lastlog[] = LASTLOG_FILENAME;
-#endif
-
-#ifdef WTMP
-static char etc_wtmp[] = WTMP_FILENAME;
-#endif
-#endif /* !USE_UTEMPTER */
-
-/*
- * Some people with 4.3bsd /bin/login seem to like to use login -p -f user
- * to implement xterm -ls. They can turn on USE_LOGIN_DASH_P and turn off
- * WTMP and USE_LASTLOG.
- */
-#ifdef USE_LOGIN_DASH_P
-#ifndef LOGIN_FILENAME
-#define LOGIN_FILENAME "/bin/login"
-#endif
-static char bin_login[] = LOGIN_FILENAME;
-#endif
-
-static char passedPty[PTYCHARLEN + 1]; /* name if pty if slave */
-
-#if defined(TIOCCONS) || defined(SRIOCSREDIR)
-static int Console;
-#include <X11/Xmu/SysUtil.h> /* XmuGetHostname */
-#define MIT_CONSOLE_LEN 12
-#define MIT_CONSOLE "MIT_CONSOLE_"
-static char mit_console_name[255 + MIT_CONSOLE_LEN + 1] = MIT_CONSOLE;
-static Atom mit_console;
-#endif /* TIOCCONS */
-
-#ifndef USE_SYSV_UTMP
-static int tslot;
-#endif /* USE_SYSV_UTMP */
-static sigjmp_buf env;
-
-#define SetUtmpHost(dst, screen) \
- { \
- char host[sizeof(dst) + 1]; \
- strncpy(host, DisplayString(screen->display), sizeof(host)); \
- TRACE(("DisplayString(%s)\n", host)); \
- if (!resource.utmpDisplayId) { \
- char *endptr = strrchr(host, ':'); \
- if (endptr) { \
- TRACE(("trimming display-id '%s'\n", host)); \
- *endptr = '\0'; \
- } \
- } \
- strncpy(dst, host, sizeof(dst)); \
- }
-
-/* used by VT (charproc.c) */
-
-static XtResource application_resources[] =
-{
- Sres("name", "Name", xterm_name, DFT_TERMTYPE),
- Sres("iconGeometry", "IconGeometry", icon_geometry, NULL),
- Sres(XtNtitle, XtCTitle, title, NULL),
- Sres(XtNiconName, XtCIconName, icon_name, NULL),
- Sres("termName", "TermName", term_name, NULL),
- Sres("ttyModes", "TtyModes", tty_modes, NULL),
- Bres("hold", "Hold", hold_screen, False),
- Bres("utmpInhibit", "UtmpInhibit", utmpInhibit, False),
- Bres("utmpDisplayId", "UtmpDisplayId", utmpDisplayId, True),
- Bres("messages", "Messages", messages, True),
- Ires("minBufSize", "MinBufSize", minBufSize, 4096),
- Ires("maxBufSize", "MaxBufSize", maxBufSize, 32768),
- Sres("keyboardType", "KeyboardType", keyboardType, "unknown"),
- Bres("sunFunctionKeys", "SunFunctionKeys", sunFunctionKeys, False),
-#if OPT_SUNPC_KBD
- Bres("sunKeyboard", "SunKeyboard", sunKeyboard, False),
-#endif
-#if OPT_HP_FUNC_KEYS
- Bres("hpFunctionKeys", "HpFunctionKeys", hpFunctionKeys, False),
-#endif
-#if OPT_SCO_FUNC_KEYS
- Bres("scoFunctionKeys", "ScoFunctionKeys", scoFunctionKeys, False),
-#endif
-#if OPT_INITIAL_ERASE
- Bres("ptyInitialErase", "PtyInitialErase", ptyInitialErase, DEF_INITIAL_ERASE),
- Bres("backarrowKeyIsErase", "BackarrowKeyIsErase", backarrow_is_erase, DEF_BACKARO_ERASE),
-#endif
- Bres("waitForMap", "WaitForMap", wait_for_map, False),
- Bres("useInsertMode", "UseInsertMode", useInsertMode, False),
-#if OPT_ZICONBEEP
- Ires("zIconBeep", "ZIconBeep", zIconBeep, 0),
-#endif
-#if OPT_PTY_HANDSHAKE
- Bres("ptyHandshake", "PtyHandshake", ptyHandshake, True),
-#endif
-#if OPT_SAME_NAME
- Bres("sameName", "SameName", sameName, True),
-#endif
-#if OPT_SESSION_MGT
- Bres("sessionMgt", "SessionMgt", sessionMgt, True),
-#endif
-#if OPT_TOOLBAR
- Bres(XtNtoolBar, XtCToolBar, toolBar, True),
-#endif
-};
-
-static char *fallback_resources[] =
-{
- "*SimpleMenu*menuLabel.vertSpace: 100",
- "*SimpleMenu*HorizontalMargins: 16",
- "*SimpleMenu*Sme.height: 16",
- "*SimpleMenu*Cursor: left_ptr",
- "*mainMenu.Label: Main Options (no app-defaults)",
- "*vtMenu.Label: VT Options (no app-defaults)",
- "*fontMenu.Label: VT Fonts (no app-defaults)",
-#if OPT_TEK4014
- "*tekMenu.Label: Tek Options (no app-defaults)",
-#endif
- NULL
-};
-
-/* Command line options table. Only resources are entered here...there is a
- pass over the remaining options after XrmParseCommand is let loose. */
-/* *INDENT-OFF* */
-static XrmOptionDescRec optionDescList[] = {
-{"-geometry", "*vt100.geometry",XrmoptionSepArg, (caddr_t) NULL},
-{"-132", "*c132", XrmoptionNoArg, (caddr_t) "on"},
-{"+132", "*c132", XrmoptionNoArg, (caddr_t) "off"},
-{"-ah", "*alwaysHighlight", XrmoptionNoArg, (caddr_t) "on"},
-{"+ah", "*alwaysHighlight", XrmoptionNoArg, (caddr_t) "off"},
-{"-aw", "*autoWrap", XrmoptionNoArg, (caddr_t) "on"},
-{"+aw", "*autoWrap", XrmoptionNoArg, (caddr_t) "off"},
-#ifndef NO_ACTIVE_ICON
-{"-ai", "*activeIcon", XrmoptionNoArg, (caddr_t) "off"},
-{"+ai", "*activeIcon", XrmoptionNoArg, (caddr_t) "on"},
-#endif /* NO_ACTIVE_ICON */
-{"-b", "*internalBorder",XrmoptionSepArg, (caddr_t) NULL},
-{"-bc", "*cursorBlink", XrmoptionNoArg, (caddr_t) "on"},
-{"+bc", "*cursorBlink", XrmoptionNoArg, (caddr_t) "off"},
-{"-bcf", "*cursorOffTime",XrmoptionSepArg, (caddr_t) NULL},
-{"-bcn", "*cursorOnTime",XrmoptionSepArg, (caddr_t) NULL},
-{"-bdc", "*colorBDMode", XrmoptionNoArg, (caddr_t) "off"},
-{"+bdc", "*colorBDMode", XrmoptionNoArg, (caddr_t) "on"},
-{"-cb", "*cutToBeginningOfLine", XrmoptionNoArg, (caddr_t) "off"},
-{"+cb", "*cutToBeginningOfLine", XrmoptionNoArg, (caddr_t) "on"},
-{"-cc", "*charClass", XrmoptionSepArg, (caddr_t) NULL},
-{"-cm", "*colorMode", XrmoptionNoArg, (caddr_t) "off"},
-{"+cm", "*colorMode", XrmoptionNoArg, (caddr_t) "on"},
-{"-cn", "*cutNewline", XrmoptionNoArg, (caddr_t) "off"},
-{"+cn", "*cutNewline", XrmoptionNoArg, (caddr_t) "on"},
-{"-cr", "*cursorColor", XrmoptionSepArg, (caddr_t) NULL},
-{"-cu", "*curses", XrmoptionNoArg, (caddr_t) "on"},
-{"+cu", "*curses", XrmoptionNoArg, (caddr_t) "off"},
-{"-dc", "*dynamicColors",XrmoptionNoArg, (caddr_t) "off"},
-{"+dc", "*dynamicColors",XrmoptionNoArg, (caddr_t) "on"},
-{"-fb", "*boldFont", XrmoptionSepArg, (caddr_t) NULL},
-{"-fbb", "*freeBoldBox", XrmoptionNoArg, (caddr_t)"off"},
-{"+fbb", "*freeBoldBox", XrmoptionNoArg, (caddr_t)"on"},
-{"-fbx", "*forceBoxChars", XrmoptionNoArg, (caddr_t)"off"},
-{"+fbx", "*forceBoxChars", XrmoptionNoArg, (caddr_t)"on"},
-#ifndef NO_ACTIVE_ICON
-{"-fi", "*iconFont", XrmoptionSepArg, (caddr_t) NULL},
-#endif /* NO_ACTIVE_ICON */
-#if OPT_RENDERFONT
-{"-fa", "*faceName", XrmoptionSepArg, (caddr_t) NULL},
-{"-fd", "*faceNameDoublesize", XrmoptionSepArg, (caddr_t) NULL},
-{"-fs", "*faceSize", XrmoptionSepArg, (caddr_t) NULL},
-#endif
-#if OPT_WIDE_CHARS
-{"-fw", "*wideFont", XrmoptionSepArg, (caddr_t) NULL},
-{"-fwb", "*wideBoldFont", XrmoptionSepArg, (caddr_t) NULL},
-#endif
-#if OPT_INPUT_METHOD
-{"-fx", "*ximFont", XrmoptionSepArg, (caddr_t) NULL},
-#endif
-#if OPT_HIGHLIGHT_COLOR
-{"-hc", "*highlightColor", XrmoptionSepArg, (caddr_t) NULL},
-#endif
-#if OPT_HP_FUNC_KEYS
-{"-hf", "*hpFunctionKeys",XrmoptionNoArg, (caddr_t) "on"},
-{"+hf", "*hpFunctionKeys",XrmoptionNoArg, (caddr_t) "off"},
-#endif
-{"-hold", "*hold", XrmoptionNoArg, (caddr_t) "on"},
-{"+hold", "*hold", XrmoptionNoArg, (caddr_t) "off"},
-#if OPT_INITIAL_ERASE
-{"-ie", "*ptyInitialErase", XrmoptionNoArg, (caddr_t) "on"},
-{"+ie", "*ptyInitialErase", XrmoptionNoArg, (caddr_t) "off"},
-#endif
-{"-j", "*jumpScroll", XrmoptionNoArg, (caddr_t) "on"},
-{"+j", "*jumpScroll", XrmoptionNoArg, (caddr_t) "off"},
-#if OPT_C1_PRINT
-{"-k8", "*allowC1Printable", XrmoptionNoArg, (caddr_t) "on"},
-{"+k8", "*allowC1Printable", XrmoptionNoArg, (caddr_t) "off"},
-#endif
-{"-kt", "*keyboardType", XrmoptionSepArg, (caddr_t) NULL},
-{"+kt", "*keyboardType", XrmoptionSepArg, (caddr_t) NULL},
-/* parse logging options anyway for compatibility */
-{"-l", "*logging", XrmoptionNoArg, (caddr_t) "on"},
-{"+l", "*logging", XrmoptionNoArg, (caddr_t) "off"},
-{"-lf", "*logFile", XrmoptionSepArg, (caddr_t) NULL},
-{"-ls", "*loginShell", XrmoptionNoArg, (caddr_t) "on"},
-{"+ls", "*loginShell", XrmoptionNoArg, (caddr_t) "off"},
-{"-mb", "*marginBell", XrmoptionNoArg, (caddr_t) "on"},
-{"+mb", "*marginBell", XrmoptionNoArg, (caddr_t) "off"},
-{"-mc", "*multiClickTime", XrmoptionSepArg, (caddr_t) NULL},
-{"-mesg", "*messages", XrmoptionNoArg, (caddr_t) "off"},
-{"+mesg", "*messages", XrmoptionNoArg, (caddr_t) "on"},
-{"-ms", "*pointerColor",XrmoptionSepArg, (caddr_t) NULL},
-{"-nb", "*nMarginBell", XrmoptionSepArg, (caddr_t) NULL},
-{"-nul", "*underLine", XrmoptionNoArg, (caddr_t) "off"},
-{"+nul", "*underLine", XrmoptionNoArg, (caddr_t) "on"},
-{"-pc", "*boldColors", XrmoptionNoArg, (caddr_t) "on"},
-{"+pc", "*boldColors", XrmoptionNoArg, (caddr_t) "off"},
-{"-rw", "*reverseWrap", XrmoptionNoArg, (caddr_t) "on"},
-{"+rw", "*reverseWrap", XrmoptionNoArg, (caddr_t) "off"},
-{"-s", "*multiScroll", XrmoptionNoArg, (caddr_t) "on"},
-{"+s", "*multiScroll", XrmoptionNoArg, (caddr_t) "off"},
-{"-sb", "*scrollBar", XrmoptionNoArg, (caddr_t) "on"},
-{"+sb", "*scrollBar", XrmoptionNoArg, (caddr_t) "off"},
-#ifdef SCROLLBAR_RIGHT
-{"-leftbar", "*rightScrollBar", XrmoptionNoArg, (caddr_t) "off"},
-{"-rightbar", "*rightScrollBar", XrmoptionNoArg, (caddr_t) "on"},
-#endif
-{"-rvc", "*colorRVMode", XrmoptionNoArg, (caddr_t) "off"},
-{"+rvc", "*colorRVMode", XrmoptionNoArg, (caddr_t) "on"},
-{"-sf", "*sunFunctionKeys", XrmoptionNoArg, (caddr_t) "on"},
-{"+sf", "*sunFunctionKeys", XrmoptionNoArg, (caddr_t) "off"},
-{"-si", "*scrollTtyOutput", XrmoptionNoArg, (caddr_t) "off"},
-{"+si", "*scrollTtyOutput", XrmoptionNoArg, (caddr_t) "on"},
-{"-sk", "*scrollKey", XrmoptionNoArg, (caddr_t) "on"},
-{"+sk", "*scrollKey", XrmoptionNoArg, (caddr_t) "off"},
-{"-sl", "*saveLines", XrmoptionSepArg, (caddr_t) NULL},
-#if OPT_SUNPC_KBD
-{"-sp", "*sunKeyboard", XrmoptionNoArg, (caddr_t) "on"},
-{"+sp", "*sunKeyboard", XrmoptionNoArg, (caddr_t) "off"},
-#endif
-#if OPT_TEK4014
-{"-t", "*tekStartup", XrmoptionNoArg, (caddr_t) "on"},
-{"+t", "*tekStartup", XrmoptionNoArg, (caddr_t) "off"},
-#endif
-{"-ti", "*decTerminalID",XrmoptionSepArg, (caddr_t) NULL},
-{"-tm", "*ttyModes", XrmoptionSepArg, (caddr_t) NULL},
-{"-tn", "*termName", XrmoptionSepArg, (caddr_t) NULL},
-#if OPT_WIDE_CHARS
-{"-u8", "*utf8", XrmoptionNoArg, (caddr_t) "2"},
-{"+u8", "*utf8", XrmoptionNoArg, (caddr_t) "0"},
-#endif
-#if OPT_LUIT_PROG
-{"-lc", "*locale", XrmoptionNoArg, (caddr_t) "on"},
-{"+lc", "*locale", XrmoptionNoArg, (caddr_t) "off"},
-{"-lcc", "*localeFilter",XrmoptionSepArg, (caddr_t) NULL},
-{"-en", "*locale", XrmoptionSepArg, (caddr_t) NULL},
-#endif
-{"-ulc", "*colorULMode", XrmoptionNoArg, (caddr_t) "off"},
-{"+ulc", "*colorULMode", XrmoptionNoArg, (caddr_t) "on"},
-{"-ulit", "*italicULMode", XrmoptionNoArg, (caddr_t) "off"},
-{"+ulit", "*italicULMode", XrmoptionNoArg, (caddr_t) "on"},
-{"-ut", "*utmpInhibit", XrmoptionNoArg, (caddr_t) "on"},
-{"+ut", "*utmpInhibit", XrmoptionNoArg, (caddr_t) "off"},
-{"-im", "*useInsertMode", XrmoptionNoArg, (caddr_t) "on"},
-{"+im", "*useInsertMode", XrmoptionNoArg, (caddr_t) "off"},
-{"-vb", "*visualBell", XrmoptionNoArg, (caddr_t) "on"},
-{"+vb", "*visualBell", XrmoptionNoArg, (caddr_t) "off"},
-{"-pob", "*popOnBell", XrmoptionNoArg, (caddr_t) "on"},
-{"+pob", "*popOnBell", XrmoptionNoArg, (caddr_t) "off"},
-#if OPT_WIDE_CHARS
-{"-wc", "*wideChars", XrmoptionNoArg, (caddr_t) "on"},
-{"+wc", "*wideChars", XrmoptionNoArg, (caddr_t) "off"},
-{"-mk_width", "*mkWidth", XrmoptionNoArg, (caddr_t) "on"},
-{"+mk_width", "*mkWidth", XrmoptionNoArg, (caddr_t) "off"},
-{"-cjk_width", "*cjkWidth", XrmoptionNoArg, (caddr_t) "on"},
-{"+cjk_width", "*cjkWidth", XrmoptionNoArg, (caddr_t) "off"},
-#endif
-{"-wf", "*waitForMap", XrmoptionNoArg, (caddr_t) "on"},
-{"+wf", "*waitForMap", XrmoptionNoArg, (caddr_t) "off"},
-#if OPT_ZICONBEEP
-{"-ziconbeep", "*zIconBeep", XrmoptionSepArg, (caddr_t) NULL},
-#endif
-#if OPT_SAME_NAME
-{"-samename", "*sameName", XrmoptionNoArg, (caddr_t) "on"},
-{"+samename", "*sameName", XrmoptionNoArg, (caddr_t) "off"},
-#endif
-#if OPT_SESSION_MGT
-{"-sm", "*sessionMgt", XrmoptionNoArg, (caddr_t) "on"},
-{"+sm", "*sessionMgt", XrmoptionNoArg, (caddr_t) "off"},
-#endif
-#if OPT_TOOLBAR
-{"-tb", "*"XtNtoolBar, XrmoptionNoArg, (caddr_t) "on"},
-{"+tb", "*"XtNtoolBar, XrmoptionNoArg, (caddr_t) "off"},
-#endif
-/* options that we process ourselves */
-{"-help", NULL, XrmoptionSkipNArgs, (caddr_t) NULL},
-{"-version", NULL, XrmoptionSkipNArgs, (caddr_t) NULL},
-{"-class", NULL, XrmoptionSkipArg, (caddr_t) NULL},
-{"-e", NULL, XrmoptionSkipLine, (caddr_t) NULL},
-{"-into", NULL, XrmoptionSkipArg, (caddr_t) NULL},
-/* bogus old compatibility stuff for which there are
- standard XtOpenApplication options now */
-{"%", "*tekGeometry", XrmoptionStickyArg, (caddr_t) NULL},
-{"#", ".iconGeometry",XrmoptionStickyArg, (caddr_t) NULL},
-{"-T", ".title", XrmoptionSepArg, (caddr_t) NULL},
-{"-n", "*iconName", XrmoptionSepArg, (caddr_t) NULL},
-{"-r", "*reverseVideo",XrmoptionNoArg, (caddr_t) "on"},
-{"+r", "*reverseVideo",XrmoptionNoArg, (caddr_t) "off"},
-{"-rv", "*reverseVideo",XrmoptionNoArg, (caddr_t) "on"},
-{"+rv", "*reverseVideo",XrmoptionNoArg, (caddr_t) "off"},
-{"-w", ".borderWidth", XrmoptionSepArg, (caddr_t) NULL},
-};
-
-static OptionHelp xtermOptions[] = {
-{ "-version", "print the version number" },
-{ "-help", "print out this message" },
-{ "-display displayname", "X server to contact" },
-{ "-geometry geom", "size (in characters) and position" },
-{ "-/+rv", "turn on/off reverse video" },
-{ "-bg color", "background color" },
-{ "-fg color", "foreground color" },
-{ "-bd color", "border color" },
-{ "-bw number", "border width in pixels" },
-{ "-fn fontname", "normal text font" },
-{ "-fb fontname", "bold text font" },
-{ "-/+fbb", "turn on/off normal/bold font comparison inhibit"},
-{ "-/+fbx", "turn off/on linedrawing characters"},
-#if OPT_RENDERFONT
-{ "-fa pattern", "FreeType font-selection pattern" },
-{ "-fd pattern", "FreeType Doublesize font-selection pattern" },
-{ "-fs size", "FreeType font-size" },
-#endif
-#if OPT_WIDE_CHARS
-{ "-fw fontname", "doublewidth text font" },
-{ "-fwb fontname", "doublewidth bold text font" },
-#endif
-#if OPT_INPUT_METHOD
-{ "-fx fontname", "XIM fontset" },
-#endif
-{ "-iconic", "start iconic" },
-{ "-name string", "client instance, icon, and title strings" },
-{ "-class string", "class string (XTerm)" },
-{ "-title string", "title string" },
-{ "-xrm resourcestring", "additional resource specifications" },
-{ "-/+132", "turn on/off 80/132 column switching" },
-{ "-/+ah", "turn on/off always highlight" },
-#ifndef NO_ACTIVE_ICON
-{ "-/+ai", "turn off/on active icon" },
-{ "-fi fontname", "icon font for active icon" },
-#endif /* NO_ACTIVE_ICON */
-{ "-b number", "internal border in pixels" },
-{ "-/+bc", "turn on/off text cursor blinking" },
-{ "-bcf milliseconds", "time text cursor is off when blinking"},
-{ "-bcn milliseconds", "time text cursor is on when blinking"},
-{ "-/+bdc", "turn off/on display of bold as color"},
-{ "-/+cb", "turn on/off cut-to-beginning-of-line inhibit" },
-{ "-cc classrange", "specify additional character classes" },
-{ "-/+cm", "turn off/on ANSI color mode" },
-{ "-/+cn", "turn on/off cut newline inhibit" },
-{ "-cr color", "text cursor color" },
-{ "-/+cu", "turn on/off curses emulation" },
-{ "-/+dc", "turn off/on dynamic color selection" },
-#if OPT_HIGHLIGHT_COLOR
-{ "-hc color", "selection background color" },
-#endif
-#if OPT_HP_FUNC_KEYS
-{ "-/+hf", "turn on/off HP Function Key escape codes" },
-#endif
-{ "-/+hold", "turn on/off logic that retains window after exit" },
-#if OPT_INITIAL_ERASE
-{ "-/+ie", "turn on/off initialization of 'erase' from pty" },
-#endif
-{ "-/+im", "use insert mode for TERMCAP" },
-{ "-/+j", "turn on/off jump scroll" },
-#if OPT_C1_PRINT
-{ "-/+k8", "turn on/off C1-printable classification"},
-#endif
-{ "-kt keyboardtype", "set keyboard type:" KEYBOARD_TYPES },
-#ifdef ALLOWLOGGING
-{ "-/+l", "turn on/off logging" },
-{ "-lf filename", "logging filename" },
-#else
-{ "-/+l", "turn on/off logging (not supported)" },
-{ "-lf filename", "logging filename (not supported)" },
-#endif
-{ "-/+ls", "turn on/off login shell" },
-{ "-/+mb", "turn on/off margin bell" },
-{ "-mc milliseconds", "multiclick time in milliseconds" },
-{ "-/+mesg", "forbid/allow messages" },
-{ "-ms color", "pointer color" },
-{ "-nb number", "margin bell in characters from right end" },
-{ "-/+nul", "turn off/on display of underlining" },
-{ "-/+aw", "turn on/off auto wraparound" },
-{ "-/+pc", "turn on/off PC-style bold colors" },
-{ "-/+rw", "turn on/off reverse wraparound" },
-{ "-/+s", "turn on/off multiscroll" },
-{ "-/+sb", "turn on/off scrollbar" },
-#ifdef SCROLLBAR_RIGHT
-{ "-rightbar", "force scrollbar right (default left)" },
-{ "-leftbar", "force scrollbar left" },
-#endif
-{ "-/+rvc", "turn off/on display of reverse as color" },
-{ "-/+sf", "turn on/off Sun Function Key escape codes" },
-{ "-/+si", "turn on/off scroll-on-tty-output inhibit" },
-{ "-/+sk", "turn on/off scroll-on-keypress" },
-{ "-sl number", "number of scrolled lines to save" },
-#if OPT_SUNPC_KBD
-{ "-/+sp", "turn on/off Sun/PC Function/Keypad mapping" },
-#endif
-#if OPT_TEK4014
-{ "-/+t", "turn on/off Tek emulation window" },
-#endif
-#if OPT_TOOLBAR
-{ "-/+tb", "turn on/off toolbar" },
-#endif
-{ "-ti termid", "terminal identifier" },
-{ "-tm string", "terminal mode keywords and characters" },
-{ "-tn name", "TERM environment variable name" },
-#if OPT_WIDE_CHARS
-{ "-/+u8", "turn on/off UTF-8 mode (implies wide-characters)" },
-#endif
-#if OPT_LUIT_PROG
-{ "-/+lc", "turn on/off locale mode using luit" },
-{ "-lcc path", "filename of locale converter (" DEFLOCALEFILTER ")" },
-#endif
-{ "-/+ulc", "turn off/on display of underline as color" },
-{ "-/+ulit", "turn off/on display of underline as italics" },
-#ifdef HAVE_UTMP
-{ "-/+ut", "turn on/off utmp support" },
-#else
-{ "-/+ut", "turn on/off utmp support (not available)" },
-#endif
-{ "-/+vb", "turn on/off visual bell" },
-{ "-/+pob", "turn on/off pop on bell" },
-#if OPT_WIDE_CHARS
-{ "-/+wc", "turn on/off wide-character mode" },
-{ "-/+mk_width", "turn on/off simple width convention" },
-{ "-/+cjk_width", "turn on/off legacy CJK width convention" },
-#endif
-{ "-/+wf", "turn on/off wait for map before command exec" },
-{ "-e command args ...", "command to execute" },
-#if OPT_TEK4014
-{ "%geom", "Tek window geometry" },
-#endif
-{ "#geom", "icon window geometry" },
-{ "-T string", "title name for window" },
-{ "-n string", "icon name for window" },
-#if defined(TIOCCONS) || defined(SRIOCSREDIR)
-{ "-C", "intercept console messages" },
-#else
-{ "-C", "intercept console messages (not supported)" },
-#endif
-{ "-Sccn", "slave mode on \"ttycc\", file descriptor \"n\"" },
-{ "-into windowId", "use the window id given to -into as the parent window rather than the default root window" },
-#if OPT_ZICONBEEP
-{ "-ziconbeep percent", "beep and flag icon of window having hidden output" },
-#endif
-#if OPT_SAME_NAME
-{ "-/+samename", "turn on/off the no-flicker option for title and icon name" },
-#endif
-#if OPT_SESSION_MGT
-{ "-/+sm", "turn on/off the session-management support" },
-#endif
-{ NULL, NULL }};
-/* *INDENT-ON* */
-
-static char *message[] =
-{
- "Fonts should be fixed width and, if both normal and bold are specified, should",
- "have the same size. If only a normal font is specified, it will be used for",
- "both normal and bold text (by doing overstriking). The -e option, if given,",
- "must appear at the end of the command line, otherwise the user's default shell",
- "will be started. Options that start with a plus sign (+) restore the default.",
- NULL};
-
-/*
- * Decode a key-definition. This combines the termcap and ttyModes, for
- * comparison. Note that octal escapes in ttyModes are done by the normal
- * resource translation. Also, ttyModes allows '^-' as a synonym for disabled.
- */
-static int
-decode_keyvalue(char **ptr, int termcap)
-{
- char *string = *ptr;
- int value = -1;
-
- TRACE(("...decode '%s'\n", string));
- if (*string == '^') {
- switch (*++string) {
- case '?':
- value = A2E(127);
- break;
- case '-':
- if (!termcap) {
- errno = 0;
-#if defined(_POSIX_VDISABLE) && defined(HAVE_UNISTD_H)
- value = _POSIX_VDISABLE;
-#endif
-#if defined(_PC_VDISABLE)
- if (value == -1) {
- value = fpathconf(0, _PC_VDISABLE);
- if (value == -1) {
- if (errno != 0)
- break; /* skip this (error) */
- value = 0377;
- }
- }
-#elif defined(VDISABLE)
- if (value == -1)
- value = VDISABLE;
-#endif
- break;
- }
- /* FALLTHRU */
- default:
- value = CONTROL(*string);
- break;
- }
- ++string;
- } else if (termcap && (*string == '\\')) {
- char *d;
- int temp = strtol(string + 1, &d, 8);
- if (temp > 0 && d != string) {
- value = temp;
- string = d;
- }
- } else {
- value = CharOf(*string);
- ++string;
- }
- *ptr = string;
- return value;
-}
-
-/*
- * If we're linked to terminfo, tgetent() will return an empty buffer. We
- * cannot use that to adjust the $TERMCAP variable.
- */
-static Bool
-get_termcap(char *name, char *buffer, char *resized)
-{
- TScreen *screen = &term->screen;
-
- *buffer = 0; /* initialize, in case we're using terminfo's tgetent */
-
- if (name != 0) {
- if (tgetent(buffer, name) == 1) {
- TRACE(("get_termcap(%s) succeeded (%s)\n", name,
- (*buffer
- ? "ok:termcap, we can update $TERMCAP"
- : "assuming this is terminfo")));
- if (*buffer) {
- if (!TEK4014_ACTIVE(screen)) {
- resize(screen, buffer, resized);
- }
- }
- return True;
- } else {
- *buffer = 0; /* just in case */
- }
- }
- return False;
-}
-
-static int
-abbrev(char *tst, char *cmp, size_t need)
-{
- size_t len = strlen(tst);
- return ((len >= need) && (!strncmp(tst, cmp, len)));
-}
-
-static void
-Syntax(char *badOption)
-{
- OptionHelp *opt;
- OptionHelp *list = sortedOpts(xtermOptions, optionDescList, XtNumber(optionDescList));
- int col;
-
- fprintf(stderr, "%s: bad command line option \"%s\"\r\n\n",
- ProgramName, badOption);
-
- fprintf(stderr, "usage: %s", ProgramName);
- col = 8 + strlen(ProgramName);
- for (opt = list; opt->opt; opt++) {
- int len = 3 + strlen(opt->opt); /* space [ string ] */
- if (col + len > 79) {
- fprintf(stderr, "\r\n "); /* 3 spaces */
- col = 3;
- }
- fprintf(stderr, " [%s]", opt->opt);
- col += len;
- }
-
- fprintf(stderr, "\r\n\nType %s -help for a full description.\r\n\n",
- ProgramName);
- exit(1);
-}
-
-static void
-Version(void)
-{
- printf("%s\n", xtermVersion());
- fflush(stdout);
-}
-
-static void
-Help(void)
-{
- OptionHelp *opt;
- OptionHelp *list = sortedOpts(xtermOptions, optionDescList, XtNumber(optionDescList));
- char **cpp;
-
- printf("%s usage:\n %s [-options ...] [-e command args]\n\n",
- xtermVersion(), ProgramName);
- printf("where options include:\n");
- for (opt = list; opt->opt; opt++) {
- printf(" %-28s %s\n", opt->opt, opt->desc);
- }
-
- putchar('\n');
- for (cpp = message; *cpp; cpp++)
- puts(*cpp);
- putchar('\n');
- fflush(stdout);
-}
-
-#if defined(TIOCCONS) || defined(SRIOCSREDIR)
-/* ARGSUSED */
-static Boolean
-ConvertConsoleSelection(Widget w GCC_UNUSED,
- Atom * selection GCC_UNUSED,
- Atom * target GCC_UNUSED,
- Atom * type GCC_UNUSED,
- XtPointer *value GCC_UNUSED,
- unsigned long *length GCC_UNUSED,
- int *format GCC_UNUSED)
-{
- /* we don't save console output, so can't offer it */
- return False;
-}
-#endif /* TIOCCONS */
-
-#if OPT_SESSION_MGT
-static void
-die_callback(Widget w GCC_UNUSED,
- XtPointer client_data GCC_UNUSED,
- XtPointer call_data GCC_UNUSED)
-{
- Cleanup(0);
-}
-
-static void
-save_callback(Widget w GCC_UNUSED,
- XtPointer client_data GCC_UNUSED,
- XtPointer call_data)
-{
- XtCheckpointToken token = (XtCheckpointToken) call_data;
- /* we have nothing to save */
- token->save_success = True;
-}
-#endif /* OPT_SESSION_MGT */
-
-/*
- * DeleteWindow(): Action proc to implement ICCCM delete_window.
- */
-/* ARGSUSED */
-static void
-DeleteWindow(Widget w,
- XEvent * event GCC_UNUSED,
- String * params GCC_UNUSED,
- Cardinal *num_params GCC_UNUSED)
-{
-#if OPT_TEK4014
- if (w == toplevel) {
- if (term->screen.Tshow)
- hide_vt_window();
- else
- do_hangup(w, (XtPointer) 0, (XtPointer) 0);
- } else if (term->screen.Vshow)
- hide_tek_window();
- else
-#endif
- do_hangup(w, (XtPointer) 0, (XtPointer) 0);
-}
-
-/* ARGSUSED */
-static void
-KeyboardMapping(Widget w GCC_UNUSED,
- XEvent * event,
- String * params GCC_UNUSED,
- Cardinal *num_params GCC_UNUSED)
-{
- switch (event->type) {
- case MappingNotify:
- XRefreshKeyboardMapping(&event->xmapping);
- break;
- }
-}
-
-static XtActionsRec actionProcs[] =
-{
- {"DeleteWindow", DeleteWindow},
- {"KeyboardMapping", KeyboardMapping},
-};
-
-/*
- * Some platforms use names such as /dev/tty01, others /dev/pts/1. Parse off
- * the "tty01" or "pts/1" portion, and return that for use as an identifier for
- * utmp.
- */
-static char *
-my_pty_name(char *device)
-{
- size_t len = strlen(device);
- Bool name = False;
-
- while (len != 0) {
- int ch = device[len - 1];
- if (isdigit(ch)) {
- len--;
- } else if (ch == '/') {
- if (name)
- break;
- len--;
- } else if (isalpha(ch)) {
- name = True;
- len--;
- } else {
- break;
- }
- }
- TRACE(("my_pty_name(%s) -> '%s'\n", device, device + len));
- return device + len;
-}
-
-/*
- * If the name contains a '/', it is a "pts/1" case. Otherwise, return the
- * last few characters for a utmp identifier.
- */
-static char *
-my_pty_id(char *device)
-{
- char *name = my_pty_name(device);
- char *leaf = x_basename(name);
-
- if (name == leaf) { /* no '/' in the name */
- int len = strlen(leaf);
- if (PTYCHARLEN < len)
- leaf = leaf + (len - PTYCHARLEN);
- }
- TRACE(("my_pty_id (%s) -> '%s'\n", device, leaf));
- return leaf;
-}
-
-/*
- * Set the tty/pty identifier
- */
-static void
-set_pty_id(char *device, char *id)
-{
- char *name = my_pty_name(device);
- char *leaf = x_basename(name);
-
- if (name == leaf) {
- strcpy(my_pty_id(device), id);
- } else {
- strcpy(leaf, id);
- }
- TRACE(("set_pty_id(%s) -> '%s'\n", id, device));
-}
-
-/*
- * The original -S option accepts two characters to identify the pty, and a
- * file-descriptor (assumed to be nonzero). That is not general enough, so we
- * check first if the option contains a '/' to delimit the two fields, and if
- * not, fall-thru to the original logic.
- */
-static Bool
-ParseSccn(char *option)
-{
- char *leaf = x_basename(option);
- Bool code = False;
-
- if (leaf != option) {
- if (leaf - option > 0
- && isdigit(CharOf(*leaf))
- && sscanf(leaf, "%d", &am_slave) == 1) {
- size_t len = leaf - option - 1;
- /*
- * If we have a slash, we only care about the part after the slash,
- * which is a file-descriptor. The part before the slash can be
- * the /dev/pts/XXX value, but since we do not need to reopen it,
- * it is useful mainly for display in a "ps -ef".
- */
- strncpy(passedPty, option, len);
- passedPty[len] = 0;
- code = True;
- }
- } else {
- code = (sscanf(option, "%c%c%d",
- passedPty, passedPty + 1, &am_slave) == 3);
- }
- TRACE(("ParseSccn(%s) = '%s' %d (%s)\n", option,
- passedPty, am_slave, code ? "OK" : "ERR"));
- return code;
-}
-
-#if defined(USE_SYSV_UTMP) && !defined(USE_UTEMPTER)
-/*
- * From "man utmp":
- * xterm and other terminal emulators directly create a USER_PROCESS record
- * and generate the ut_id by using the last two letters of /dev/ttyp%c or by
- * using p%d for /dev/pts/%d. If they find a DEAD_PROCESS for this id, they
- * recycle it, otherwise they create a new entry. If they can, they will mark
- * it as DEAD_PROCESS on exiting and it is advised that they null ut_line,
- * ut_time, ut_user and ut_host as well.
- *
- * Generally ut_id allows no more than 3 characters (plus null), even if the
- * pty implementation allows more than 3 digits.
- */
-static char *
-my_utmp_id(char *device)
-{
- typedef struct UTMP_STR UTMP_STRUCT;
-#define UTIDSIZE (sizeof(((UTMP_STRUCT *)NULL)->ut_id))
- static char result[UTIDSIZE + 1];
-
-#if defined(__SCO__) || defined(__UNIXWARE__)
- /*
- * Legend does not support old-style pty's, has no related compatibility
- * issues, and can use the available space in ut_id differently from the
- * default convention.
- *
- * This scheme is intended to avoid conflicts both with other users of
- * utmpx as well as between multiple xterms. First, Legend uses all of the
- * characters of ut_id, and adds no terminating NUL is required (the
- * default scheme may add a trailing NUL). Second, all xterm entries will
- * start with the letter 'x' followed by three digits, which will be the
- * last three digits of the device name, regardless of the format of the
- * device name, with leading 0's added where necessary. For instance, an
- * xterm on /dev/pts/3 will have a ut_id of x003; an xterm on /dev/pts123
- * will have a ut_id of x123. Under the other convention, /dev/pts/3 would
- * have a ut_id of p3 and /dev/pts123 would have a ut_id of p123.
- */
- int len, n;
-
- len = strlen(device);
- n = UTIDSIZE;
- result[n] = '\0';
- while ((n > 0) && (len > 0) && isdigit(device[len - 1]))
- result[--n] = device[--len];
- while (n > 0)
- result[--n] = '0';
- result[0] = 'x';
-#else
- char *name = my_pty_name(device);
- char *leaf = x_basename(name);
- size_t len = strlen(leaf);
-
- if ((UTIDSIZE - 1) < len)
- leaf = leaf + (len - (UTIDSIZE - 1));
- sprintf(result, "p%s", leaf);
-#endif
-
- TRACE(("my_utmp_id (%s) -> '%s'\n", device, result));
- return result;
-}
-#endif /* USE_SYSV_UTMP */
-
-#ifdef USE_POSIX_SIGNALS
-
-typedef void (*sigfunc) (int);
-
-/* make sure we sure we ignore SIGCHLD for the cases parent
- has just been stopped and not actually killed */
-
-static sigfunc
-posix_signal(int signo, sigfunc func)
-{
- struct sigaction act, oact;
-
- act.sa_handler = func;
- sigemptyset(&act.sa_mask);
-#ifdef SA_RESTART
- act.sa_flags = SA_NOCLDSTOP | SA_RESTART;
-#else
- act.sa_flags = SA_NOCLDSTOP;
-#endif
- if (sigaction(signo, &act, &oact) < 0)
- return (SIG_ERR);
- return (oact.sa_handler);
-}
-
-#endif /* linux && _POSIX_SOURCE */
-
-int
-main(int argc, char *argv[]ENVP_ARG)
-{
- Widget form_top, menu_top;
- TScreen *screen;
- int mode;
- char *my_class = DEFCLASS;
- Window winToEmbedInto = None;
-
-#ifdef DISABLE_SETUID
- if (seteuid(getuid()) == -1)
- exit(2);
- if (setuid(getuid()) == -1)
- exit(2);
-#endif
-
- ProgramName = argv[0];
-
- /* extra length in case longer tty name like /dev/ttyq255 */
- ttydev = TypeMallocN(char, sizeof(TTYDEV) + 80);
-#ifdef USE_PTY_DEVICE
- ptydev = TypeMallocN(char, sizeof(PTYDEV) + 80);
- if (!ttydev || !ptydev)
-#else
- if (!ttydev)
-#endif
- {
- fprintf(stderr,
- "%s: unable to allocate memory for ttydev or ptydev\n",
- ProgramName);
- exit(1);
- }
- strcpy(ttydev, TTYDEV);
-#ifdef USE_PTY_DEVICE
- strcpy(ptydev, PTYDEV);
-#endif
-
-#if defined(USE_UTMP_SETGID)
- get_pty(NULL, NULL);
- if (seteuid(getuid()) == -1) {
- fprintf(stderr,
- "%s: unable to change back euid\n", ProgramName);
- exit(1);
- }
- if (setuid(getuid()) == -1) {
- fprintf(stderr,
- "%s: unable to change back uid\n", ProgramName);
- exit(1);
- }
-#define get_pty(pty, from) really_get_pty(pty, from)
-#endif
-
- /* Do these first, since we may not be able to open the display */
- TRACE_OPTS(xtermOptions, optionDescList, XtNumber(optionDescList));
- TRACE_ARGV("Before XtOpenApplication", argv);
- if (argc > 1) {
- int n;
- unsigned unique = 2;
- Bool quit = True;
-
- for (n = 1; n < argc; n++) {
- TRACE(("parsing %s\n", argv[n]));
- if (abbrev(argv[n], "-version", unique)) {
- Version();
- } else if (abbrev(argv[n], "-help", unique)) {
- Help();
- } else if (abbrev(argv[n], "-class", 3)) {
- if ((my_class = argv[++n]) == 0) {
- Help();
- } else {
- quit = False;
- }
- unique = 3;
- } else {
- quit = False;
- unique = 3;
- }
- }
- if (quit)
- exit(0);
- }
-
- /* This dumps core on HP-UX 9.05 with X11R5 */
-#if OPT_I18N_SUPPORT
- XtSetLanguageProc(NULL, NULL, NULL);
-#endif
-
-#ifdef TERMIO_STRUCT /* { */
- /* Initialization is done here rather than above in order
- * to prevent any assumptions about the order of the contents
- * of the various terminal structures (which may change from
- * implementation to implementation).
- */
- d_tio.c_iflag = ICRNL | IXON;
-#ifdef TAB3
- d_tio.c_oflag = OPOST | ONLCR | TAB3;
-#else
-#ifdef ONLCR
- d_tio.c_oflag = OPOST | ONLCR;
-#else
- d_tio.c_oflag = OPOST;
-#endif
-#endif
-#if defined(macII) || defined(ATT) || defined(CRAY) /* { */
- d_tio.c_cflag = VAL_LINE_SPEED | CS8 | CREAD | PARENB | HUPCL;
- d_tio.c_lflag = ISIG | ICANON | ECHO | ECHOE | ECHOK;
-#ifdef ECHOKE
- d_tio.c_lflag |= ECHOKE | IEXTEN;
-#endif
-#ifdef ECHOCTL
- d_tio.c_lflag |= ECHOCTL | IEXTEN;
-#endif
-
-#ifndef USE_TERMIOS /* { */
- d_tio.c_line = 0;
-#endif /* } */
-
- d_tio.c_cc[VINTR] = CINTR;
- d_tio.c_cc[VQUIT] = CQUIT;
- d_tio.c_cc[VERASE] = CERASE;
- d_tio.c_cc[VKILL] = CKILL;
- d_tio.c_cc[VEOF] = CEOF;
- d_tio.c_cc[VEOL] = CNUL;
- d_tio.c_cc[VEOL2] = CNUL;
-#ifdef VSWTCH
- d_tio.c_cc[VSWTCH] = CNUL;
-#endif
-
-#if defined(USE_TERMIOS) || defined(USE_POSIX_TERMIOS) /* { */
- d_tio.c_cc[VSUSP] = CSUSP;
-#ifdef VDSUSP
- d_tio.c_cc[VDSUSP] = CDSUSP;
-#endif
- d_tio.c_cc[VREPRINT] = CRPRNT;
- d_tio.c_cc[VDISCARD] = CFLUSH;
- d_tio.c_cc[VWERASE] = CWERASE;
- d_tio.c_cc[VLNEXT] = CLNEXT;
- d_tio.c_cc[VMIN] = 1;
- d_tio.c_cc[VTIME] = 0;
-#endif /* } */
-#ifdef HAS_LTCHARS /* { */
- d_ltc.t_suspc = CSUSP; /* t_suspc */
- d_ltc.t_dsuspc = CDSUSP; /* t_dsuspc */
- d_ltc.t_rprntc = CRPRNT;
- d_ltc.t_flushc = CFLUSH;
- d_ltc.t_werasc = CWERASE;
- d_ltc.t_lnextc = CLNEXT;
-#endif /* } HAS_LTCHARS */
-#ifdef TIOCLSET /* { */
- d_lmode = 0;
-#endif /* } TIOCLSET */
-#else /* }{ else !macII, ATT, CRAY */
-#ifndef USE_POSIX_TERMIOS
-#ifdef BAUD_0 /* { */
- d_tio.c_cflag = CS8 | CREAD | PARENB | HUPCL;
-#else /* }{ !BAUD_0 */
- d_tio.c_cflag = VAL_LINE_SPEED | CS8 | CREAD | PARENB | HUPCL;
-#endif /* } !BAUD_0 */
-#else /* USE_POSIX_TERMIOS */
- d_tio.c_cflag = CS8 | CREAD | PARENB | HUPCL;
- cfsetispeed(&d_tio, VAL_LINE_SPEED);
- cfsetospeed(&d_tio, VAL_LINE_SPEED);
-#endif
- d_tio.c_lflag = ISIG | ICANON | ECHO | ECHOE | ECHOK;
-#ifdef ECHOKE
- d_tio.c_lflag |= ECHOKE | IEXTEN;
-#endif
-#ifdef ECHOCTL
- d_tio.c_lflag |= ECHOCTL | IEXTEN;
-#endif
-#ifndef USE_POSIX_TERMIOS
-#ifdef NTTYDISC
- d_tio.c_line = NTTYDISC;
-#else
- d_tio.c_line = 0;
-#endif
-#endif /* USE_POSIX_TERMIOS */
-#ifdef __sgi
- d_tio.c_cflag &= ~(HUPCL | PARENB);
- d_tio.c_iflag |= BRKINT | ISTRIP | IGNPAR;
-#endif
-#ifdef __MVS__
- d_tio.c_cflag &= ~(HUPCL | PARENB);
-#endif
- d_tio.c_cc[VINTR] = CONTROL('C'); /* '^C' */
- d_tio.c_cc[VERASE] = 0x7f; /* DEL */
- d_tio.c_cc[VKILL] = CONTROL('U'); /* '^U' */
- d_tio.c_cc[VQUIT] = CQUIT; /* '^\' */
- d_tio.c_cc[VEOF] = CEOF; /* '^D' */
- d_tio.c_cc[VEOL] = CEOL; /* '^@' */
- d_tio.c_cc[VMIN] = 1;
- d_tio.c_cc[VTIME] = 0;
-#ifdef VSWTCH
- d_tio.c_cc[VSWTCH] = CSWTCH; /* usually '^Z' */
-#endif
-#ifdef VLNEXT
- d_tio.c_cc[VLNEXT] = CLNEXT;
-#endif
-#ifdef VWERASE
- d_tio.c_cc[VWERASE] = CWERASE;
-#endif
-#ifdef VREPRINT
- d_tio.c_cc[VREPRINT] = CRPRNT;
-#endif
-#ifdef VRPRNT
- d_tio.c_cc[VRPRNT] = CRPRNT;
-#endif
-#ifdef VDISCARD
- d_tio.c_cc[VDISCARD] = CFLUSH;
-#endif
-#ifdef VFLUSHO
- d_tio.c_cc[VFLUSHO] = CFLUSH;
-#endif
-#ifdef VSTOP
- d_tio.c_cc[VSTOP] = CSTOP;
-#endif
-#ifdef VSTART
- d_tio.c_cc[VSTART] = CSTART;
-#endif
-#ifdef VSUSP
- d_tio.c_cc[VSUSP] = CSUSP;
-#endif
-#ifdef VDSUSP
- d_tio.c_cc[VDSUSP] = CDSUSP;
-#endif
-#ifdef VSTATUS
- d_tio.c_cc[VSTATUS] = CSTATUS;
-#endif
- /* now, try to inherit tty settings */
- {
- int i;
-
- for (i = 0; i <= 2; i++) {
- TERMIO_STRUCT deftio;
- if (ttyGetAttr(i, &deftio) == 0) {
- d_tio.c_cc[VINTR] = deftio.c_cc[VINTR];
- d_tio.c_cc[VQUIT] = deftio.c_cc[VQUIT];
- d_tio.c_cc[VERASE] = deftio.c_cc[VERASE];
- d_tio.c_cc[VKILL] = deftio.c_cc[VKILL];
- d_tio.c_cc[VEOF] = deftio.c_cc[VEOF];
- d_tio.c_cc[VEOL] = deftio.c_cc[VEOL];
-#ifdef VSWTCH
- d_tio.c_cc[VSWTCH] = deftio.c_cc[VSWTCH];
-#endif
-#ifdef VEOL2
- d_tio.c_cc[VEOL2] = deftio.c_cc[VEOL2];
-#endif
-#ifdef VLNEXT
- d_tio.c_cc[VLNEXT] = deftio.c_cc[VLNEXT];
-#endif
-#ifdef VWERASE
- d_tio.c_cc[VWERASE] = deftio.c_cc[VWERASE];
-#endif
-#ifdef VREPRINT
- d_tio.c_cc[VREPRINT] = deftio.c_cc[VREPRINT];
-#endif
-#ifdef VRPRNT
- d_tio.c_cc[VRPRNT] = deftio.c_cc[VRPRNT];
-#endif
-#ifdef VDISCARD
- d_tio.c_cc[VDISCARD] = deftio.c_cc[VDISCARD];
-#endif
-#ifdef VFLUSHO
- d_tio.c_cc[VFLUSHO] = deftio.c_cc[VFLUSHO];
-#endif
-#ifdef VSTOP
- d_tio.c_cc[VSTOP] = deftio.c_cc[VSTOP];
-#endif
-#ifdef VSTART
- d_tio.c_cc[VSTART] = deftio.c_cc[VSTART];
-#endif
-#ifdef VSUSP
- d_tio.c_cc[VSUSP] = deftio.c_cc[VSUSP];
-#endif
-#ifdef VDSUSP
- d_tio.c_cc[VDSUSP] = deftio.c_cc[VDSUSP];
-#endif
-#ifdef VSTATUS
- d_tio.c_cc[VSTATUS] = deftio.c_cc[VSTATUS];
-#endif
- break;
- }
- }
- }
-#ifdef HAS_LTCHARS /* { */
- d_ltc.t_suspc = CharOf('\000'); /* t_suspc */
- d_ltc.t_dsuspc = CharOf('\000'); /* t_dsuspc */
- d_ltc.t_rprntc = CharOf('\377'); /* reserved... */
- d_ltc.t_flushc = CharOf('\377');
- d_ltc.t_werasc = CharOf('\377');
- d_ltc.t_lnextc = CharOf('\377');
-#endif /* } HAS_LTCHARS */
-#if defined(USE_TERMIOS) || defined(USE_POSIX_TERMIOS) /* { */
- d_tio.c_cc[VSUSP] = CSUSP;
-#ifdef VDSUSP
- d_tio.c_cc[VDSUSP] = CharOf('\000');
-#endif
-#ifdef VSTATUS
- d_tio.c_cc[VSTATUS] = CharOf('\377');
-#endif
-#ifdef VREPRINT
- d_tio.c_cc[VREPRINT] = CharOf('\377');
-#endif
-#ifdef VDISCARD
- d_tio.c_cc[VDISCARD] = CharOf('\377');
-#endif
-#ifdef VWERASE
- d_tio.c_cc[VWERASE] = CharOf('\377');
-#endif
-#ifdef VLNEXT
- d_tio.c_cc[VLNEXT] = CharOf('\377');
-#endif
-#endif /* } USE_TERMIOS */
-#ifdef TIOCLSET /* { */
- d_lmode = 0;
-#endif /* } TIOCLSET */
-#endif /* } macII, ATT, CRAY */
-#endif /* } TERMIO_STRUCT */
-
- /* Init the Toolkit. */
- {
-#ifdef HAS_SAVED_IDS_AND_SETEUID
- uid_t euid = geteuid();
- gid_t egid = getegid();
- uid_t ruid = getuid();
- gid_t rgid = getgid();
-
- if (setegid(rgid) == -1) {
-#ifdef __MVS__
- if (!(errno == EMVSERR)) /* could happen if _BPX_SHAREAS=REUSE */
-#endif
- (void) fprintf(stderr, "setegid(%d): %s\n",
- (int) rgid, strerror(errno));
- }
-
- if (seteuid(ruid) == -1) {
-#ifdef __MVS__
- if (!(errno == EMVSERR))
-#endif
- (void) fprintf(stderr, "seteuid(%d): %s\n",
- (int) ruid, strerror(errno));
- }
-#endif
-
- XtSetErrorHandler(xt_error);
-#if OPT_SESSION_MGT
- toplevel = XtOpenApplication(&app_con, my_class,
- optionDescList,
- XtNumber(optionDescList),
- &argc, argv, fallback_resources,
- sessionShellWidgetClass,
- NULL, 0);
-#else
- toplevel = XtAppInitialize(&app_con, my_class,
- optionDescList,
- XtNumber(optionDescList),
- &argc, argv, fallback_resources,
- NULL, 0);
-#endif /* OPT_SESSION_MGT */
- XtSetErrorHandler((XtErrorHandler) 0);
-
- XtGetApplicationResources(toplevel, (XtPointer) &resource,
- application_resources,
- XtNumber(application_resources), NULL, 0);
- TRACE_XRES();
-
-#ifdef HAS_SAVED_IDS_AND_SETEUID
- if (seteuid(euid) == -1) {
-#ifdef __MVS__
- if (!(errno == EMVSERR))
-#endif
- (void) fprintf(stderr, "seteuid(%d): %s\n",
- (int) euid, strerror(errno));
- }
-
- if (setegid(egid) == -1) {
-#ifdef __MVS__
- if (!(errno == EMVSERR))
-#endif
- (void) fprintf(stderr, "setegid(%d): %s\n",
- (int) egid, strerror(errno));
- }
-#endif
-
-#if defined(USE_UTMP_SETGID)
- if (resource.utmpInhibit) {
- /* Can totally revoke group privs */
- setegid(getgid());
- setgid(getgid());
- }
-#endif
- }
-
- waiting_for_initial_map = resource.wait_for_map;
-
- /*
- * ICCCM delete_window.
- */
- XtAppAddActions(app_con, actionProcs, XtNumber(actionProcs));
-
- /*
- * fill in terminal modes
- */
- if (resource.tty_modes) {
- int n = parse_tty_modes(resource.tty_modes, ttymodelist);
- if (n < 0) {
- fprintf(stderr, "%s: bad tty modes \"%s\"\n",
- ProgramName, resource.tty_modes);
- } else if (n > 0) {
- override_tty_modes = 1;
- }
- }
-#if OPT_ZICONBEEP
- zIconBeep = resource.zIconBeep;
- zIconBeep_flagged = False;
- if (zIconBeep > 100 || zIconBeep < -100) {
- zIconBeep = 0; /* was 100, but I prefer to defaulting off. */
- fprintf(stderr,
- "a number between -100 and 100 is required for zIconBeep. 0 used by default\n");
- }
-#endif /* OPT_ZICONBEEP */
-#if OPT_SAME_NAME
- sameName = resource.sameName;
-#endif
- hold_screen = resource.hold_screen ? 1 : 0;
- xterm_name = resource.xterm_name;
- if (strcmp(xterm_name, "-") == 0)
- xterm_name = DFT_TERMTYPE;
- if (resource.icon_geometry != NULL) {
- int scr, junk;
- int ix, iy;
- Arg args[2];
-
- for (scr = 0; /* yyuucchh */
- XtScreen(toplevel) != ScreenOfDisplay(XtDisplay(toplevel), scr);
- scr++) ;
-
- args[0].name = XtNiconX;
- args[1].name = XtNiconY;
- XGeometry(XtDisplay(toplevel), scr, resource.icon_geometry, "",
- 0, 0, 0, 0, 0, &ix, &iy, &junk, &junk);
- args[0].value = (XtArgVal) ix;
- args[1].value = (XtArgVal) iy;
- XtSetValues(toplevel, args, 2);
- }
-
- XtSetValues(toplevel, ourTopLevelShellArgs,
- number_ourTopLevelShellArgs);
-
-#if OPT_WIDE_CHARS
- /* seems as good a place as any */
- init_classtab();
-#endif
-
- /* Parse the rest of the command line */
- TRACE_ARGV("After XtOpenApplication", argv);
- for (argc--, argv++; argc > 0; argc--, argv++) {
-#ifdef VMS
- if (**argv != '-')
- Syntax(*argv);
-#else
- if (**argv != '-') {
- if (argc > 1)
- Syntax(*argv);
- if (command_to_exec == 0) /* if no "-e" option */
- explicit_shname = xtermFindShell(*argv, True);
- continue;
- }
-#endif
-
- TRACE(("parsing %s\n", argv[0]));
- switch (argv[0][1]) {
- case 'h': /* -help */
- Help();
- continue;
- case 'v': /* -version */
- Version();
- continue;
- case 'C':
-#if defined(TIOCCONS) || defined(SRIOCSREDIR)
-#ifndef __sgi
- {
- struct stat sbuf;
-
- /* Must be owner and have read/write permission.
- xdm cooperates to give the console the right user. */
- if (!stat("/dev/console", &sbuf) &&
- (sbuf.st_uid == getuid()) &&
- !access("/dev/console", R_OK | W_OK)) {
- Console = True;
- } else
- Console = False;
- }
-#else /* __sgi */
- Console = True;
-#endif /* __sgi */
-#endif /* TIOCCONS */
- continue;
- case 'S':
- if (!ParseSccn(*argv + 2))
- Syntax(*argv);
- continue;
-#ifdef DEBUG
- case 'D':
- debug = True;
- continue;
-#endif /* DEBUG */
- case 'c': /* -class param */
- if (strcmp(argv[0] + 1, "class") == 0)
- argc--, argv++;
- else
- Syntax(*argv);
- continue;
- case 'e':
- if (argc <= 1)
- Syntax(*argv);
- command_to_exec = ++argv;
- break;
- case 'i':
- if (argc <= 1) {
- Syntax(*argv);
- } else {
- char *endPtr;
- --argc;
- ++argv;
- winToEmbedInto = (Window) strtol(argv[0], &endPtr, 10);
- }
- continue;
-
- default:
- Syntax(*argv);
- }
- break;
- }
-
- SetupMenus(toplevel, &form_top, &menu_top);
-
- term = (XtermWidget) XtVaCreateManagedWidget("vt100", xtermWidgetClass,
- form_top,
-#if OPT_TOOLBAR
- XtNmenuBar, menu_top,
- XtNresizable, True,
- XtNfromVert, menu_top,
- XtNleft, XawChainLeft,
- XtNright, XawChainRight,
- XtNtop, XawChainTop,
- XtNbottom, XawChainBottom,
-#endif
- (XtPointer) 0);
- decode_keyboard_type(&resource);
-
- screen = &term->screen;
- screen->inhibit = 0;
-
-#ifdef ALLOWLOGGING
- if (term->misc.logInhibit)
- screen->inhibit |= I_LOG;
-#endif
- if (term->misc.signalInhibit)
- screen->inhibit |= I_SIGNAL;
-#if OPT_TEK4014
- if (term->misc.tekInhibit)
- screen->inhibit |= I_TEK;
-#endif
-
- /*
- * We might start by showing the tek4014 window.
- */
-#if OPT_TEK4014
- if (screen->inhibit & I_TEK)
- screen->TekEmu = False;
-
- if (screen->TekEmu && !TekInit())
- SysError(ERROR_INIT);
-#endif
-
- /*
- * Start the toolbar at this point, after the first window has been setup.
- */
-#if OPT_TOOLBAR
- ShowToolbar(resource.toolBar);
-#endif
-
-#if OPT_SESSION_MGT
- if (resource.sessionMgt) {
- TRACE(("Enabling session-management callbacks\n"));
- XtAddCallback(toplevel, XtNdieCallback, die_callback, NULL);
- XtAddCallback(toplevel, XtNsaveCallback, save_callback, NULL);
- }
-#endif
-
- /*
- * Set title and icon name if not specified
- */
- if (command_to_exec) {
- Arg args[2];
-
- if (!resource.title) {
- if (command_to_exec) {
- resource.title = x_basename(command_to_exec[0]);
- } /* else not reached */
- }
-
- if (!resource.icon_name)
- resource.icon_name = resource.title;
- XtSetArg(args[0], XtNtitle, resource.title);
- XtSetArg(args[1], XtNiconName, resource.icon_name);
-
- TRACE(("setting:\n\ttitle \"%s\"\n\ticon \"%s\"\n\tbased on command \"%s\"\n",
- resource.title,
- resource.icon_name,
- *command_to_exec));
-
- XtSetValues(toplevel, args, 2);
- }
-#if OPT_LUIT_PROG
- if (term->misc.callfilter) {
- int u = (term->misc.use_encoding ? 2 : 0);
- if (command_to_exec) {
- int n;
- char **c;
- for (n = 0, c = command_to_exec; *c; n++, c++) ;
- c = TypeMallocN(char *, n + 3 + u);
- if (c == NULL)
- SysError(ERROR_LUMALLOC);
- memcpy(c + 2 + u, command_to_exec, (n + 1) * sizeof(char *));
- c[0] = term->misc.localefilter;
- if (u) {
- c[1] = "-encoding";
- c[2] = term->misc.locale_str;
- }
- c[1 + u] = "--";
- command_to_exec_with_luit = c;
- } else {
- static char *luit[4];
- luit[0] = term->misc.localefilter;
- if (u) {
- luit[1] = "-encoding";
- luit[2] = term->misc.locale_str;
- luit[3] = NULL;
- } else
- luit[1] = NULL;
- command_to_exec_with_luit = luit;
- }
- }
-#endif
-
-#ifdef DEBUG
- {
- /* Set up stderr properly. Opening this log file cannot be
- done securely by a privileged xterm process (although we try),
- so the debug feature is disabled by default. */
- char dbglogfile[45];
- int i = -1;
- if (debug) {
- timestamp_filename(dbglogfile, "xterm.debug.log.");
- if (creat_as(getuid(), getgid(), False, dbglogfile, 0666)) {
- i = open(dbglogfile, O_WRONLY | O_TRUNC);
- }
- }
- if (i >= 0) {
- dup2(i, 2);
-
- /* mark this file as close on exec */
- (void) fcntl(i, F_SETFD, 1);
- }
- }
-#endif /* DEBUG */
-
- /* open a terminal for client */
- get_terminal();
-
- spawn();
-
-#ifndef VMS
- /* Child process is out there, let's catch its termination */
-
-#ifdef USE_POSIX_SIGNALS
- (void) posix_signal(SIGCHLD, reapchild);
-#else
- (void) signal(SIGCHLD, reapchild);
-#endif
- /* Realize procs have now been executed */
-
- if (am_slave >= 0) { /* Write window id so master end can read and use */
- char buf[80];
-
- buf[0] = '\0';
- sprintf(buf, "%lx\n", XtWindow(SHELL_OF(CURRENT_EMU(screen))));
- write(screen->respond, buf, strlen(buf));
- }
-#ifdef AIXV3
-#if (OSMAJORVERSION < 4)
- /* In AIXV3, xterms started from /dev/console have CLOCAL set.
- * This means we need to clear CLOCAL so that SIGHUP gets sent
- * to the slave-pty process when xterm exits.
- */
-
- {
- TERMIO_STRUCT tio;
-
- if (ttyGetAttr(screen->respond, &tio) == -1)
- SysError(ERROR_TIOCGETP);
-
- tio.c_cflag &= ~(CLOCAL);
-
- if (ttySetAttr(screen->respond, &tio) == -1)
- SysError(ERROR_TIOCSETP);
- }
-#endif
-#endif
-#if defined(USE_ANY_SYSV_TERMIO) || defined(__MVS__)
- if (0 > (mode = fcntl(screen->respond, F_GETFL, 0)))
- SysError(ERROR_F_GETFL);
-#ifdef O_NDELAY
- mode |= O_NDELAY;
-#else
- mode |= O_NONBLOCK;
-#endif /* O_NDELAY */
- if (fcntl(screen->respond, F_SETFL, mode))
- SysError(ERROR_F_SETFL);
-#else /* !USE_ANY_SYSV_TERMIO */
- mode = 1;
- if (ioctl(screen->respond, FIONBIO, (char *) &mode) == -1)
- SysError(ERROR_FIONBIO);
-#endif /* USE_ANY_SYSV_TERMIO, etc */
-
- /* The erase character is used to delete the current completion */
-#if OPT_DABBREV
-#ifdef TERMIO_STRUCT
- screen->dabbrev_erase_char = d_tio.c_cc[VERASE];
-#else
- screen->dabbrev_erase_char = d_sg.sg_erase;
-#endif
-#endif
-
- FD_ZERO(&pty_mask);
- FD_ZERO(&X_mask);
- FD_ZERO(&Select_mask);
- FD_SET(screen->respond, &pty_mask);
- FD_SET(ConnectionNumber(screen->display), &X_mask);
- FD_SET(screen->respond, &Select_mask);
- FD_SET(ConnectionNumber(screen->display), &Select_mask);
- max_plus1 = ((screen->respond < ConnectionNumber(screen->display))
- ? (1 + ConnectionNumber(screen->display))
- : (1 + screen->respond));
-
-#endif /* !VMS */
-#ifdef DEBUG
- if (debug)
- printf("debugging on\n");
-#endif /* DEBUG */
- XSetErrorHandler(xerror);
- XSetIOErrorHandler(xioerror);
-
- initPtyData(&VTbuffer);
-#ifdef ALLOWLOGGING
- if (term->misc.log_on) {
- StartLog(screen);
- }
-#endif
-
- if (winToEmbedInto != None) {
- XtRealizeWidget(toplevel);
- /*
- * This should probably query the tree or check the attributes of
- * winToEmbedInto in order to verify that it exists, but I'm still not
- * certain what is the best way to do it -GPS
- */
- XReparentWindow(XtDisplay(toplevel),
- XtWindow(toplevel),
- winToEmbedInto, 0, 0);
- }
-
- for (;;) {
-#if OPT_TEK4014
- if (screen->TekEmu)
- TekRun();
- else
-#endif
- VTRun();
- }
-}
-
-#if defined(__osf__) || (defined(__GLIBC__) && !defined(USE_USG_PTYS)) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__APPLE__)
-#define USE_OPENPTY 1
-static int opened_tty = -1;
-#endif
-
-/*
- * This function opens up a pty master and stuffs its value into pty.
- *
- * If it finds one, it returns a value of 0. If it does not find one,
- * it returns a value of !0. This routine is designed to be re-entrant,
- * so that if a pty master is found and later, we find that the slave
- * has problems, we can re-enter this function and get another one.
- */
-static int
-get_pty(int *pty, char *from GCC_UNUSED)
-{
- int result = 1;
-
-#if defined(PUCC_PTYD)
-
- result = ((*pty = openrpty(ttydev, ptydev,
- (resource.utmpInhibit ? OPTY_NOP : OPTY_LOGIN),
- getuid(), from)) < 0);
-
-#elif defined(USE_OPENPTY)
-
- result = openpty(pty, &opened_tty, ttydev, NULL, NULL);
-
-#elif defined(__QNXNTO__)
-
- result = pty_search(pty);
-
-#else
-#if defined(USE_ISPTS_FLAG)
-
- /*
- The order of this code is *important*. On SYSV/386 we want to open
- a /dev/ttyp? first if at all possible. If none are available, then
- we'll try to open a /dev/pts??? device.
-
- The reason for this is because /dev/ttyp? works correctly, where
- as /dev/pts??? devices have a number of bugs, (won't update
- screen correcly, will hang -- it more or less works, but you
- really don't want to use it).
-
- Most importantly, for boxes of this nature, one of the major
- "features" is that you can emulate a 8086 by spawning off a UNIX
- program on 80386/80486 in v86 mode. In other words, you can spawn
- off multiple MS-DOS environments. On ISC the program that does
- this is named "vpix." The catcher is that "vpix" will *not* work
- with a /dev/pts??? device, will only work with a /dev/ttyp? device.
-
- Since we can open either a /dev/ttyp? or a /dev/pts??? device,
- the flag "IsPts" is set here so that we know which type of
- device we're dealing with in routine spawn(). That's the reason
- for the "if (IsPts)" statement in spawn(); we have two different
- device types which need to be handled differently.
- */
- result = pty_search(pty);
- if (!result)
- IsPts = 0;
-
-#endif
-#if defined(USE_USG_PTYS) || defined(__CYGWIN__)
-#ifdef __GLIBC__ /* if __GLIBC__ and USE_USG_PTYS, we know glibc >= 2.1 */
- /* GNU libc 2 allows us to abstract away from having to know the
- master pty device name. */
- if ((*pty = getpt()) >= 0) {
- char *name = ptsname(*pty);
- if (name != 0) { /* if filesystem is trashed, this may be null */
- strcpy(ttydev, name);
- result = 0;
- }
- }
-#elif defined(__MVS__)
- result = pty_search(pty);
-#else
-#if defined(USE_ISPTS_FLAG)
- if (result) {
-#endif
- result = ((*pty = open("/dev/ptmx", O_RDWR)) < 0);
-#endif
-#if defined(SVR4) || defined(__SCO__) || defined(USE_ISPTS_FLAG)
- if (!result)
- strcpy(ttydev, ptsname(*pty));
-#ifdef USE_ISPTS_FLAG
- IsPts = !result; /* true if we're successful */
- }
-#endif
-#endif
-
-#elif defined(AIXV3)
-
- if ((*pty = open("/dev/ptc", O_RDWR)) >= 0) {
- strcpy(ttydev, ttyname(*pty));
- result = 0;
- }
-#elif defined(__convex__)
-
- char *pty_name;
- extern char *getpty(void);
-
- while ((pty_name = getpty()) != NULL) {
- if ((*pty = open(pty_name, O_RDWR)) >= 0) {
- strcpy(ptydev, pty_name);
- strcpy(ttydev, pty_name);
- *x_basename(ttydev) = 't';
- result = 0;
- break;
- }
- }
-
-#elif defined(sequent)
-
- result = ((*pty = getpseudotty(&ttydev, &ptydev)) < 0);
-
-#elif defined(__sgi) && (OSMAJORVERSION >= 4)
-
- char *tty_name;
-
- tty_name = _getpty(pty, O_RDWR, 0622, 0);
- if (tty_name != 0) {
- strcpy(ttydev, tty_name);
- result = 0;
- }
-#elif (defined(__sgi) && (OSMAJORVERSION < 4)) || (defined(umips) && defined (SYSTYPE_SYSV))
-
- struct stat fstat_buf;
-
- *pty = open("/dev/ptc", O_RDWR);
- if (*pty >= 0 && (fstat(*pty, &fstat_buf)) >= 0) {
- result = 0;
- sprintf(ttydev, "/dev/ttyq%d", minor(fstat_buf.st_rdev));
- }
-#elif defined(__hpux)
-
- /*
- * Use the clone device if it works, otherwise use pty_search logic.
- */
- if ((*pty = open("/dev/ptym/clone", O_RDWR)) >= 0) {
- char *name = ptsname(*pty);
- if (name != 0) {
- strcpy(ttydev, name);
- result = 0;
- } else { /* permissions, or other unexpected problem */
- close(*pty);
- *pty = -1;
- result = pty_search(pty);
- }
- } else {
- result = pty_search(pty);
- }
-
-#else
-
- result = pty_search(pty);
-
-#endif
-#endif
-
- TRACE(("get_pty(ttydev=%s, ptydev=%s) %s fd=%d\n",
- ttydev != 0 ? ttydev : "?",
- ptydev != 0 ? ptydev : "?",
- result ? "FAIL" : "OK",
- pty != 0 ? *pty : -1));
- return result;
-}
-
-static void
-set_pty_permissions(uid_t uid, gid_t gid, mode_t mode)
-{
-#ifdef USE_TTY_GROUP
- struct group *ttygrp;
-
- if ((ttygrp = getgrnam(TTY_GROUP_NAME)) != 0) {
- gid = ttygrp->gr_gid;
- mode &= 0660U;
- }
- endgrent();
-#endif /* USE_TTY_GROUP */
-
- set_owner(ttydev, uid, gid, mode);
-}
-
-#ifdef get_pty /* USE_UTMP_SETGID */
-#undef get_pty
-/*
- * Call the real get_pty() before relinquishing root-setuid, caching the
- * result.
- */
-static int
-get_pty(int *pty, char *from)
-{
- static int m_pty = -1;
- int result = -1;
-
- if (pty == NULL) {
- result = really_get_pty(&m_pty, from);
-
- seteuid(0);
- set_pty_permissions(getuid(), getgid(), 0600U);
- seteuid(getuid());
-
-#ifdef USE_OPENPTY
- if (opened_tty >= 0) {
- close(opened_tty);
- opened_tty = -1;
- }
-#endif
- } else if (m_pty != -1) {
- *pty = m_pty;
- result = 0;
- } else {
- result = -1;
- }
- return result;
-}
-#endif
-
-/*
- * Called from get_pty to iterate over likely pseudo terminals
- * we might allocate. Used on those systems that do not have
- * a functional interface for allocating a pty.
- * Returns 0 if found a pty, 1 if fails.
- */
-#ifdef USE_PTY_SEARCH
-static int
-pty_search(int *pty)
-{
- static int devindex = 0, letter = 0;
-
-#if defined(CRAY) || defined(__MVS__)
- while (devindex < MAXPTTYS) {
- sprintf(ttydev, TTYFORMAT, devindex);
- sprintf(ptydev, PTYFORMAT, devindex);
- devindex++;
-
- TRACE(("pty_search(ttydev=%s, ptydev=%s)\n", ttydev, ptydev));
- if ((*pty = open(ptydev, O_RDWR)) >= 0) {
- return 0;
- }
- }
-#else /* CRAY || __MVS__ */
- while (PTYCHAR1[letter]) {
- ttydev[strlen(ttydev) - 2] =
- ptydev[strlen(ptydev) - 2] = PTYCHAR1[letter];
-
- while (PTYCHAR2[devindex]) {
- ttydev[strlen(ttydev) - 1] =
- ptydev[strlen(ptydev) - 1] = PTYCHAR2[devindex];
- devindex++;
-
- TRACE(("pty_search(ttydev=%s, ptydev=%s)\n", ttydev, ptydev));
- if ((*pty = open(ptydev, O_RDWR)) >= 0) {
-#ifdef sun
- /* Need to check the process group of the pty.
- * If it exists, then the slave pty is in use,
- * and we need to get another one.
- */
- int pgrp_rtn;
- if (ioctl(*pty, TIOCGPGRP, &pgrp_rtn) == 0 || errno != EIO) {
- close(*pty);
- continue;
- }
-#endif /* sun */
- return 0;
- }
- }
- devindex = 0;
- letter++;
- }
-#endif /* CRAY else */
- /*
- * We were unable to allocate a pty master! Return an error
- * condition and let our caller terminate cleanly.
- */
- return 1;
-}
-#endif /* USE_PTY_SEARCH */
-
-/*
- * sets up X and initializes the terminal structure except for term.buf.fildes.
- */
-static void
-get_terminal(void)
-{
- TScreen *screen = &term->screen;
-
- screen->arrow = make_colored_cursor(XC_left_ptr,
- T_COLOR(screen, MOUSE_FG),
- T_COLOR(screen, MOUSE_BG));
-}
-
-/*
- * The only difference in /etc/termcap between 4014 and 4015 is that
- * the latter has support for switching character sets. We support the
- * 4015 protocol, but ignore the character switches. Therefore, we
- * choose 4014 over 4015.
- *
- * Features of the 4014 over the 4012: larger (19") screen, 12-bit
- * graphics addressing (compatible with 4012 10-bit addressing),
- * special point plot mode, incremental plot mode (not implemented in
- * later Tektronix terminals), and 4 character sizes.
- * All of these are supported by xterm.
- */
-
-#if OPT_TEK4014
-static char *tekterm[] =
-{
- "tek4014",
- "tek4015", /* 4014 with APL character set support */
- "tek4012", /* 4010 with lower case */
- "tek4013", /* 4012 with APL character set support */
- "tek4010", /* small screen, upper-case only */
- "dumb",
- 0
-};
-#endif
-
-/* The VT102 is a VT100 with the Advanced Video Option included standard.
- * It also adds Escape sequences for insert/delete character/line.
- * The VT220 adds 8-bit character sets, selective erase.
- * The VT320 adds a 25th status line, terminal state interrogation.
- * The VT420 has up to 48 lines on the screen.
- */
-
-static char *vtterm[] =
-{
-#ifdef USE_X11TERM
- "x11term", /* for people who want special term name */
-#endif
- DFT_TERMTYPE, /* for people who want special term name */
- "xterm", /* the prefered name, should be fastest */
- "vt102",
- "vt100",
- "ansi",
- "dumb",
- 0
-};
-
-/* ARGSUSED */
-static SIGNAL_T
-hungtty(int i GCC_UNUSED)
-{
- siglongjmp(env, 1);
- SIGNAL_RETURN;
-}
-
-/*
- * declared outside OPT_PTY_HANDSHAKE so HsSysError() callers can use
- */
-static int cp_pipe[2]; /* this pipe is used for child to parent transfer */
-
-#if OPT_PTY_HANDSHAKE
-static int pc_pipe[2]; /* this pipe is used for parent to child transfer */
-typedef enum { /* c == child, p == parent */
- PTY_BAD, /* c->p: can't open pty slave for some reason */
- PTY_FATALERROR, /* c->p: we had a fatal error with the pty */
- PTY_GOOD, /* c->p: we have a good pty, let's go on */
- PTY_NEW, /* p->c: here is a new pty slave, try this */
- PTY_NOMORE, /* p->c; no more pty's, terminate */
- UTMP_ADDED, /* c->p: utmp entry has been added */
- UTMP_TTYSLOT, /* c->p: here is my ttyslot */
- PTY_EXEC /* p->c: window has been mapped the first time */
-} status_t;
-
-typedef struct {
- status_t status;
- int error;
- int fatal_error;
- int tty_slot;
- int rows;
- int cols;
- char buffer[1024];
-} handshake_t;
-
-/* HsSysError()
- *
- * This routine does the equivalent of a SysError but it handshakes
- * over the errno and error exit to the master process so that it can
- * display our error message and exit with our exit code so that the
- * user can see it.
- */
-
-static void
-HsSysError(int pf, int error)
-{
- handshake_t handshake;
-
- handshake.status = PTY_FATALERROR;
- handshake.error = errno;
- handshake.fatal_error = error;
- strcpy(handshake.buffer, ttydev);
- write(pf, (char *) &handshake, sizeof(handshake));
- exit(error);
-}
-
-void
-first_map_occurred(void)
-{
- handshake_t handshake;
- TScreen *screen = &term->screen;
-
- handshake.status = PTY_EXEC;
- handshake.rows = screen->max_row;
- handshake.cols = screen->max_col;
- write(pc_pipe[1], (char *) &handshake, sizeof(handshake));
- close(cp_pipe[0]);
- close(pc_pipe[1]);
- waiting_for_initial_map = False;
-}
-#else
-/*
- * temporary hack to get xterm working on att ptys
- */
-static void
-HsSysError(int pf GCC_UNUSED, int error)
-{
- fprintf(stderr, "%s: fatal pty error %d (errno=%d) on tty %s\n",
- xterm_name, error, errno, ttydev);
- exit(error);
-}
-
-void
-first_map_occurred(void)
-{
- return;
-}
-#endif /* OPT_PTY_HANDSHAKE else !OPT_PTY_HANDSHAKE */
-
-#ifndef VMS
-static void
-set_owner(char *device, uid_t uid, gid_t gid, mode_t mode)
-{
- int why;
-
- TRACE(("set_owner(%s, uid=%d, gid=%d, mode=%#o\n", device, uid, gid, mode));
-
- if (chown(device, uid, gid) < 0) {
- why = errno;
- if (why != ENOENT
- && getuid() == 0) {
- fprintf(stderr, "Cannot chown %s to %ld,%ld: %s\n",
- device, (long) uid, (long) gid,
- strerror(why));
- }
- TRACE(("...chown failed: %s\n", strerror(why)));
- }
- if (chmod(device, mode) < 0) {
- why = errno;
- if (why != ENOENT) {
- struct stat sb;
- if (stat(device, &sb) < 0) {
- fprintf(stderr, "Cannot chmod %s to %03o: %s\n",
- device, (unsigned) mode,
- strerror(why));
- } else if (mode != (sb.st_mode & 0777U)) {
- fprintf(stderr,
- "Cannot chmod %s to %03o currently %03o: %s\n",
- device, (unsigned) mode, (sb.st_mode & 0777U),
- strerror(why));
- TRACE(("...stat uid=%d, gid=%d, mode=%#o\n",
- sb.st_uid, sb.st_gid, sb.st_mode));
- }
- }
- TRACE(("...chmod failed: %s\n", strerror(why)));
- }
-}
-
-#if defined(HAVE_UTMP) && defined(USE_SYSV_UTMP) && !defined(USE_UTEMPTER)
-/*
- * getutid() only looks at ut_type and ut_id.
- * But we'll also check ut_line in find_utmp().
- */
-static void
-init_utmp(int type, struct UTMP_STR *tofind)
-{
- memset(tofind, 0, sizeof(*tofind));
- tofind->ut_type = type;
- (void) strncpy(tofind->ut_id, my_utmp_id(ttydev), sizeof(tofind->ut_id));
- (void) strncpy(tofind->ut_line, my_pty_name(ttydev), sizeof(tofind->ut_line));
-}
-
-/*
- * We could use getutline() if we didn't support old systems.
- */
-static struct UTMP_STR *
-find_utmp(struct UTMP_STR *tofind)
-{
- struct UTMP_STR *result;
- struct UTMP_STR working;
-
- for (;;) {
- memset(&working, 0, sizeof(working));
- working.ut_type = tofind->ut_type;
- memcpy(working.ut_id, tofind->ut_id, sizeof(tofind->ut_id));
-#if defined(__digital__) && defined(__unix__) && (defined(OSMAJORVERSION) && OSMAJORVERSION < 5)
- working.ut_type = 0;
-#endif
- if ((result = call_getutid(&working)) == 0)
- break;
- if (!strcmp(result->ut_line, tofind->ut_line))
- break;
- /*
- * Solaris, IRIX64 and HPUX manpages say to fill the static area
- * pointed to by the return-value to zeros if searching for multiple
- * occurrences. Otherwise it will continue to return the same value.
- */
- memset(result, 0, sizeof(*result));
- }
- return result;
-}
-#endif /* HAVE_UTMP... */
-
-#define close_fd(fd) close(fd), fd = -1
-
-/*
- * Inits pty and tty and forks a login process.
- * Does not close fd Xsocket.
- * If slave, the pty named in passedPty is already open for use
- */
-static int
-spawn(void)
-{
- TScreen *screen = &term->screen;
-#if OPT_PTY_HANDSHAKE
- handshake_t handshake;
- int done;
-#endif
-#if OPT_INITIAL_ERASE
- int initial_erase = VAL_INITIAL_ERASE;
-#endif
- int rc = 0;
- int ttyfd = -1;
-
-#ifdef TERMIO_STRUCT
- TERMIO_STRUCT tio;
-#ifdef __MVS__
- TERMIO_STRUCT gio;
-#endif /* __MVS__ */
-#ifdef TIOCLSET
- unsigned lmode;
-#endif /* TIOCLSET */
-#ifdef HAS_LTCHARS
- struct ltchars ltc;
-#endif /* HAS_LTCHARS */
-#else /* !TERMIO_STRUCT */
- int ldisc = 0;
- int discipline;
- unsigned lmode;
- struct tchars tc;
- struct ltchars ltc;
- struct sgttyb sg;
-#ifdef sony
- int jmode;
- struct jtchars jtc;
-#endif /* sony */
-#endif /* TERMIO_STRUCT */
-
- char termcap[TERMCAP_SIZE];
- char newtc[TERMCAP_SIZE];
- char *ptr, *shname, *shname_minus;
- int i, no_dev_tty = False;
- char **envnew; /* new environment */
- int envsize; /* elements in new environment */
- char buf[64];
- char *TermName = NULL;
-#ifdef TTYSIZE_STRUCT
- TTYSIZE_STRUCT ts;
-#endif
- struct passwd *pw = NULL;
- char *login_name = NULL;
-#ifndef USE_UTEMPTER
-#ifdef HAVE_UTMP
- struct UTMP_STR utmp;
-#ifdef USE_SYSV_UTMP
- struct UTMP_STR *utret = NULL;
-#endif
-#ifdef USE_LASTLOG
- struct lastlog lastlog;
-#endif
-#ifdef USE_LASTLOGX
- struct lastlogx lastlog;
-#endif /* USE_LASTLOG */
-#endif /* HAVE_UTMP */
-#endif /* !USE_UTEMPTER */
-
- /* Noisy compilers (suppress some unused-variable warnings) */
- (void) rc;
-#if defined(HAVE_UTMP) && defined(USE_SYSV_UTMP) && !defined(USE_UTEMPTER)
- (void) utret;
-#endif
-
- screen->uid = getuid();
- screen->gid = getgid();
-
- termcap[0] = '\0';
- newtc[0] = '\0';
-
-#ifdef SIGTTOU
- /* so that TIOCSWINSZ || TIOCSIZE doesn't block */
- signal(SIGTTOU, SIG_IGN);
-#endif
-
- if (am_slave >= 0) {
- screen->respond = am_slave;
- set_pty_id(ttydev, passedPty);
-#ifdef USE_PTY_DEVICE
- set_pty_id(ptydev, passedPty);
-#endif
- setgid(screen->gid);
- setuid(screen->uid);
- } else {
- Bool tty_got_hung;
-
- /*
- * Sometimes /dev/tty hangs on open (as in the case of a pty
- * that has gone away). Simply make up some reasonable
- * defaults.
- */
-
- signal(SIGALRM, hungtty);
- alarm(2); /* alarm(1) might return too soon */
- if (!sigsetjmp(env, 1)) {
- ttyfd = open("/dev/tty", O_RDWR);
- alarm(0);
- tty_got_hung = False;
- } else {
- tty_got_hung = True;
- ttyfd = -1;
- errno = ENXIO;
- }
-#if OPT_INITIAL_ERASE
- initial_erase = VAL_INITIAL_ERASE;
-#endif
- signal(SIGALRM, SIG_DFL);
-
- /*
- * Check results and ignore current control terminal if
- * necessary. ENXIO is what is normally returned if there is
- * no controlling terminal, but some systems (e.g. SunOS 4.0)
- * seem to return EIO. Solaris 2.3 is said to return EINVAL.
- * Cygwin returns ENOENT.
- */
- no_dev_tty = False;
- if (ttyfd < 0) {
- if (tty_got_hung || errno == ENXIO || errno == EIO ||
-#ifdef ENODEV
- errno == ENODEV ||
-#endif
-#ifdef __CYGWIN__
- errno == ENOENT ||
-#endif
- errno == EINVAL || errno == ENOTTY || errno == EACCES) {
- no_dev_tty = True;
-#ifdef HAS_LTCHARS
- ltc = d_ltc;
-#endif /* HAS_LTCHARS */
-#ifdef TIOCLSET
- lmode = d_lmode;
-#endif /* TIOCLSET */
-#ifdef TERMIO_STRUCT
- tio = d_tio;
-#else /* !TERMIO_STRUCT */
- sg = d_sg;
- tc = d_tc;
- discipline = d_disipline;
-#ifdef sony
- jmode = d_jmode;
- jtc = d_jtc;
-#endif /* sony */
-#endif /* TERMIO_STRUCT */
- } else {
- SysError(ERROR_OPDEVTTY);
- }
- } else {
-
- /* Get a copy of the current terminal's state,
- * if we can. Some systems (e.g., SVR4 and MacII)
- * may not have a controlling terminal at this point
- * if started directly from xdm or xinit,
- * in which case we just use the defaults as above.
- */
-#ifdef HAS_LTCHARS
- if (ioctl(ttyfd, TIOCGLTC, &ltc) == -1)
- ltc = d_ltc;
-#endif /* HAS_LTCHARS */
-#ifdef TIOCLSET
- if (ioctl(ttyfd, TIOCLGET, &lmode) == -1)
- lmode = d_lmode;
-#endif /* TIOCLSET */
-#ifdef TERMIO_STRUCT
- if ((rc = ttyGetAttr(ttyfd, &tio)) == -1)
- tio = d_tio;
-#else /* !TERMIO_STRUCT */
- if ((rc = ioctl(ttyfd, TIOCGETP, (char *) &sg)) == -1)
- sg = d_sg;
- if (ioctl(ttyfd, TIOCGETC, (char *) &tc) == -1)
- tc = d_tc;
- if (ioctl(ttyfd, TIOCGETD, (char *) &discipline) == -1)
- discipline = d_disipline;
-#ifdef sony
- if (ioctl(ttyfd, TIOCKGET, (char *) &jmode) == -1)
- jmode = d_jmode;
- if (ioctl(ttyfd, TIOCKGETC, (char *) &jtc) == -1)
- jtc = d_jtc;
-#endif /* sony */
-#endif /* TERMIO_STRUCT */
-
- /*
- * If ptyInitialErase is set, we want to get the pty's
- * erase value. Just in case that will fail, first get
- * the value from /dev/tty, so we will have something
- * at least.
- */
-#if OPT_INITIAL_ERASE
- if (resource.ptyInitialErase) {
-#ifdef TERMIO_STRUCT
- initial_erase = tio.c_cc[VERASE];
-#else /* !TERMIO_STRUCT */
- initial_erase = sg.sg_erase;
-#endif /* TERMIO_STRUCT */
- TRACE(("%s initial_erase:%d (from /dev/tty)\n",
- rc == 0 ? "OK" : "FAIL",
- initial_erase));
- }
-#endif
-#ifdef __MVS__
- if (ttyGetAttr(ttyfd, &gio) == 0) {
- gio.c_cflag &= ~(HUPCL | PARENB);
- ttySetAttr(ttyfd, &gio);
- }
-#endif /* __MVS__ */
-
- close_fd(ttyfd);
- }
-
- if (get_pty(&screen->respond, XDisplayString(screen->display))) {
- SysError(ERROR_PTYS);
- }
-#if OPT_INITIAL_ERASE
- if (resource.ptyInitialErase) {
-#ifdef TERMIO_STRUCT
- TERMIO_STRUCT my_tio;
- if ((rc = ttyGetAttr(screen->respond, &my_tio)) == 0)
- initial_erase = my_tio.c_cc[VERASE];
-#else /* !TERMIO_STRUCT */
- struct sgttyb my_sg;
- if ((rc = ioctl(screen->respond, TIOCGETP, (char *) &my_sg)) == 0)
- initial_erase = my_sg.sg_erase;
-#endif /* TERMIO_STRUCT */
- TRACE(("%s initial_erase:%d (from pty)\n",
- (rc == 0) ? "OK" : "FAIL",
- initial_erase));
- }
-#endif /* OPT_INITIAL_ERASE */
- }
-
- /* avoid double MapWindow requests */
- XtSetMappedWhenManaged(XtParent(CURRENT_EMU(screen)), False);
-
- wm_delete_window = XInternAtom(XtDisplay(toplevel), "WM_DELETE_WINDOW",
- False);
-
- if (!TEK4014_ACTIVE(screen))
- VTInit(); /* realize now so know window size for tty driver */
-#if defined(TIOCCONS) || defined(SRIOCSREDIR)
- if (Console) {
- /*
- * Inform any running xconsole program
- * that we are going to steal the console.
- */
- XmuGetHostname(mit_console_name + MIT_CONSOLE_LEN, 255);
- mit_console = XInternAtom(screen->display, mit_console_name, False);
- /* the user told us to be the console, so we can use CurrentTime */
- XtOwnSelection(XtParent(CURRENT_EMU(screen)),
- mit_console, CurrentTime,
- ConvertConsoleSelection, NULL, NULL);
- }
-#endif
-#if OPT_TEK4014
- if (screen->TekEmu) {
- envnew = tekterm;
- ptr = newtc;
- } else
-#endif
- {
- envnew = vtterm;
- ptr = termcap;
- }
-
- /*
- * This used to exit if no termcap entry was found for the specified
- * terminal name. That's a little unfriendly, so instead we'll allow
- * the program to proceed (but not to set $TERMCAP) if the termcap
- * entry is not found.
- */
- if (!get_termcap(TermName = resource.term_name, ptr, newtc)) {
- char *last = NULL;
- TermName = *envnew;
- while (*envnew != NULL) {
- if ((last == NULL || strcmp(last, *envnew))
- && get_termcap(*envnew, ptr, newtc)) {
- TermName = *envnew;
- break;
- }
- last = *envnew;
- envnew++;
- }
- }
-
- /*
- * Check if ptyInitialErase is not set. If so, we rely on the termcap
- * (or terminfo) to tell us what the erase mode should be set to.
- */
-#if OPT_INITIAL_ERASE
- TRACE(("resource ptyInitialErase is %sset\n",
- resource.ptyInitialErase ? "" : "not "));
- if (!resource.ptyInitialErase) {
- char temp[1024], *p = temp;
- char *s = tgetstr(TERMCAP_ERASE, &p);
- TRACE(("...extracting initial_erase value from termcap\n"));
- if (s != 0) {
- initial_erase = decode_keyvalue(&s, True);
- }
- }
- TRACE(("...initial_erase:%d\n", initial_erase));
-
- TRACE(("resource backarrowKeyIsErase is %sset\n",
- resource.backarrow_is_erase ? "" : "not "));
- if (resource.backarrow_is_erase) { /* see input.c */
- if (initial_erase == 127) {
- term->keyboard.flags &= ~MODE_DECBKM;
- } else {
- term->keyboard.flags |= MODE_DECBKM;
- term->keyboard.reset_DECBKM = 1;
- }
- TRACE(("...sets DECBKM %s\n",
- (term->keyboard.flags & MODE_DECBKM) ? "on" : "off"));
- } else {
- term->keyboard.reset_DECBKM = 2;
- }
-#endif /* OPT_INITIAL_ERASE */
-
-#ifdef TTYSIZE_STRUCT
- /* tell tty how big window is */
-#if OPT_TEK4014
- if (TEK4014_ACTIVE(screen)) {
- TTYSIZE_ROWS(ts) = 38;
- TTYSIZE_COLS(ts) = 81;
-#if defined(USE_STRUCT_WINSIZE)
- ts.ws_xpixel = TFullWidth(screen);
- ts.ws_ypixel = TFullHeight(screen);
-#endif
- } else
-#endif
- {
- TTYSIZE_ROWS(ts) = MaxRows(screen);
- TTYSIZE_COLS(ts) = MaxCols(screen);
-#if defined(USE_STRUCT_WINSIZE)
- ts.ws_xpixel = FullWidth(screen);
- ts.ws_ypixel = FullHeight(screen);
-#endif
- }
- i = SET_TTYSIZE(screen->respond, ts);
- TRACE(("spawn SET_TTYSIZE %dx%d return %d\n",
- TTYSIZE_ROWS(ts),
- TTYSIZE_COLS(ts), i));
-#endif /* TTYSIZE_STRUCT */
-
- added_utmp_entry = False;
-#if defined(USE_UTEMPTER)
-#undef UTMP
- if (!resource.utmpInhibit) {
- struct UTMP_STR dummy;
-
- /* Note: utempter may trim it anyway */
- SetUtmpHost(dummy.ut_host, screen);
- addToUtmp(ttydev, dummy.ut_host, screen->respond);
- added_utmp_entry = True;
- }
-#endif
-
- if (am_slave < 0) {
-#if OPT_PTY_HANDSHAKE
- if (resource.ptyHandshake && (pipe(pc_pipe) || pipe(cp_pipe)))
- SysError(ERROR_FORK);
-#endif
- TRACE(("Forking...\n"));
- if ((screen->pid = fork()) == -1)
- SysError(ERROR_FORK);
-
- if (screen->pid == 0) {
- /*
- * now in child process
- */
- TRACE_CHILD
-#if defined(_POSIX_SOURCE) || defined(SVR4) || defined(__convex__) || defined(__SCO__) || defined(__QNX__)
- int pgrp = setsid(); /* variable may not be used... */
-#else
- int pgrp = getpid();
-#endif
-
-#ifdef USE_USG_PTYS
-#ifdef USE_ISPTS_FLAG
- if (IsPts) { /* SYSV386 supports both, which did we open? */
-#endif
- int ptyfd = 0;
- char *pty_name = 0;
-
- setpgrp();
- grantpt(screen->respond);
- unlockpt(screen->respond);
- if ((pty_name = ptsname(screen->respond)) == 0) {
- SysError(ERROR_PTSNAME);
- }
- if ((ptyfd = open(pty_name, O_RDWR)) < 0) {
- SysError(ERROR_OPPTSNAME);
- }
-#ifdef I_PUSH
- if (ioctl(ptyfd, I_PUSH, "ptem") < 0) {
- SysError(ERROR_PTEM);
- }
-#if !defined(SVR4) && !(defined(SYSV) && defined(i386))
- if (!getenv("CONSEM") && ioctl(ptyfd, I_PUSH, "consem") < 0) {
- SysError(ERROR_CONSEM);
- }
-#endif /* !SVR4 */
- if (ioctl(ptyfd, I_PUSH, "ldterm") < 0) {
- SysError(ERROR_LDTERM);
- }
-#ifdef SVR4 /* from Sony */
- if (ioctl(ptyfd, I_PUSH, "ttcompat") < 0) {
- SysError(ERROR_TTCOMPAT);
- }
-#endif /* SVR4 */
-#endif /* I_PUSH */
- ttyfd = ptyfd;
-#ifndef __MVS__
- close_fd(screen->respond);
-#endif /* __MVS__ */
-
-#ifdef TTYSIZE_STRUCT
- /* tell tty how big window is */
-#if OPT_TEK4014
- if (TEK4014_ACTIVE(screen)) {
- TTYSIZE_ROWS(ts) = 24;
- TTYSIZE_COLS(ts) = 80;
-#ifdef USE_STRUCT_WINSIZE
- ts.ws_xpixel = TFullWidth(screen);
- ts.ws_ypixel = TFullHeight(screen);
-#endif
- } else
-#endif /* OPT_TEK4014 */
- {
- TTYSIZE_ROWS(ts) = MaxRows(screen);
- TTYSIZE_COLS(ts) = MaxCols(screen);
-#ifdef USE_STRUCT_WINSIZE
- ts.ws_xpixel = FullWidth(screen);
- ts.ws_ypixel = FullHeight(screen);
-#endif
- }
-#endif /* TTYSIZE_STRUCT */
-
-#ifdef USE_ISPTS_FLAG
- } else { /* else pty, not pts */
-#endif
-#endif /* USE_USG_PTYS */
-
- (void) pgrp; /* not all branches use this variable */
-
-#if OPT_PTY_HANDSHAKE /* warning, goes for a long ways */
- if (resource.ptyHandshake) {
- /* close parent's sides of the pipes */
- close(cp_pipe[0]);
- close(pc_pipe[1]);
-
- /* Make sure that our sides of the pipes are not in the
- * 0, 1, 2 range so that we don't fight with stdin, out
- * or err.
- */
- if (cp_pipe[1] <= 2) {
- if ((i = fcntl(cp_pipe[1], F_DUPFD, 3)) >= 0) {
- (void) close(cp_pipe[1]);
- cp_pipe[1] = i;
- }
- }
- if (pc_pipe[0] <= 2) {
- if ((i = fcntl(pc_pipe[0], F_DUPFD, 3)) >= 0) {
- (void) close(pc_pipe[0]);
- pc_pipe[0] = i;
- }
- }
-
- /* we don't need the socket, or the pty master anymore */
- close(ConnectionNumber(screen->display));
-#ifndef __MVS__
- close(screen->respond);
-#endif /* __MVS__ */
-
- /* Now is the time to set up our process group and
- * open up the pty slave.
- */
-#ifdef USE_SYSV_PGRP
-#if defined(CRAY) && (OSMAJORVERSION > 5)
- (void) setsid();
-#else
- (void) setpgrp();
-#endif
-#endif /* USE_SYSV_PGRP */
-
-#if defined(__QNX__) && !defined(__QNXNTO__)
- qsetlogin(getlogin(), ttydev);
-#endif
- if (ttyfd >= 0) {
-#ifdef __MVS__
- if (ttyGetAttr(ttyfd, &gio) == 0) {
- gio.c_cflag &= ~(HUPCL | PARENB);
- ttySetAttr(ttyfd, &gio);
- }
-#else /* !__MVS__ */
- close_fd(ttyfd);
-#endif /* __MVS__ */
- }
-
- while (1) {
-#if defined(TIOCNOTTY) && (!defined(__GLIBC__) || (__GLIBC__ < 2) || ((__GLIBC__ == 2) && (__GLIBC_MINOR__ < 1)))
- if (!no_dev_tty
- && (ttyfd = open("/dev/tty", O_RDWR)) >= 0) {
- ioctl(ttyfd, TIOCNOTTY, (char *) NULL);
- close_fd(ttyfd);
- }
-#endif /* TIOCNOTTY && !glibc >= 2.1 */
-#ifdef CSRG_BASED
- (void) revoke(ttydev);
-#endif
- if ((ttyfd = open(ttydev, O_RDWR)) >= 0) {
-#if defined(CRAY) && defined(TCSETCTTY)
- /* make /dev/tty work */
- ioctl(ttyfd, TCSETCTTY, 0);
-#endif
-#ifdef USE_SYSV_PGRP
- /* We need to make sure that we are actually
- * the process group leader for the pty. If
- * we are, then we should now be able to open
- * /dev/tty.
- */
- if ((i = open("/dev/tty", O_RDWR)) >= 0) {
- /* success! */
- close(i);
- break;
- }
-#else /* USE_SYSV_PGRP */
- break;
-#endif /* USE_SYSV_PGRP */
- }
- perror("open ttydev");
-#ifdef TIOCSCTTY
- ioctl(ttyfd, TIOCSCTTY, 0);
-#endif
- /* let our master know that the open failed */
- handshake.status = PTY_BAD;
- handshake.error = errno;
- strcpy(handshake.buffer, ttydev);
- write(cp_pipe[1], (char *) &handshake,
- sizeof(handshake));
-
- /* get reply from parent */
- i = read(pc_pipe[0], (char *) &handshake,
- sizeof(handshake));
- if (i <= 0) {
- /* parent terminated */
- exit(1);
- }
-
- if (handshake.status == PTY_NOMORE) {
- /* No more ptys, let's shutdown. */
- exit(1);
- }
-
- /* We have a new pty to try */
- free(ttydev);
- ttydev = CastMallocN(char, strlen(handshake.buffer));
- if (ttydev == NULL) {
- SysError(ERROR_SPREALLOC);
- }
- strcpy(ttydev, handshake.buffer);
- }
-
- /* use the same tty name that everyone else will use
- * (from ttyname)
- */
- if ((ptr = ttyname(ttyfd)) != 0) {
- /* it may be bigger */
- ttydev = TypeRealloc(char, strlen(ptr) + 1, ttydev);
- if (ttydev == NULL) {
- SysError(ERROR_SPREALLOC);
- }
- (void) strcpy(ttydev, ptr);
- }
- }
-#endif /* OPT_PTY_HANDSHAKE -- from near fork */
-
-#ifdef USE_ISPTS_FLAG
- } /* end of IsPts else clause */
-#endif
-
- set_pty_permissions(screen->uid,
- screen->gid,
- (resource.messages
- ? 0622U
- : 0600U));
-
- /*
- * set up the tty modes
- */
- {
-#ifdef TERMIO_STRUCT
-#if defined(umips) || defined(CRAY) || defined(linux)
- /* If the control tty had its modes screwed around with,
- eg. by lineedit in the shell, or emacs, etc. then tio
- will have bad values. Let's just get termio from the
- new tty and tailor it. */
- if (ttyGetAttr(ttyfd, &tio) == -1)
- SysError(ERROR_TIOCGETP);
- tio.c_lflag |= ECHOE;
-#endif /* umips */
- /* Now is also the time to change the modes of the
- * child pty.
- */
- /* input: nl->nl, don't ignore cr, cr->nl */
- tio.c_iflag &= ~(INLCR | IGNCR);
- tio.c_iflag |= ICRNL;
-#if OPT_WIDE_CHARS && defined(linux) && defined(IUTF8)
-#if OPT_LUIT_PROG
- if (command_to_exec_with_luit == 0)
-#endif
- if (screen->utf8_mode)
- tio.c_iflag |= IUTF8;
-#endif
- /* ouput: cr->cr, nl is not return, no delays, ln->cr/nl */
-#ifndef USE_POSIX_TERMIOS
- tio.c_oflag &=
- ~(OCRNL
- | ONLRET
- | NLDLY
- | CRDLY
- | TABDLY
- | BSDLY
- | VTDLY
- | FFDLY);
-#endif /* USE_POSIX_TERMIOS */
-#ifdef ONLCR
- tio.c_oflag |= ONLCR;
-#endif /* ONLCR */
-#ifdef OPOST
- tio.c_oflag |= OPOST;
-#endif /* OPOST */
-#ifndef USE_POSIX_TERMIOS
-# if defined(Lynx) && !defined(CBAUD)
-# define CBAUD V_CBAUD
-# endif
- tio.c_cflag &= ~(CBAUD);
-#ifdef BAUD_0
- /* baud rate is 0 (don't care) */
-#elif defined(HAVE_TERMIO_C_ISPEED)
- tio.c_ispeed = tio.c_ospeed = VAL_LINE_SPEED;
-#else /* !BAUD_0 */
- tio.c_cflag |= VAL_LINE_SPEED;
-#endif /* !BAUD_0 */
-#else /* USE_POSIX_TERMIOS */
- cfsetispeed(&tio, VAL_LINE_SPEED);
- cfsetospeed(&tio, VAL_LINE_SPEED);
-#ifdef __MVS__
- /* turn off bits that can't be set from the slave side */
- tio.c_cflag &= ~(PACKET | PKT3270 | PTU3270 | PKTXTND);
-#endif /* __MVS__ */
- /* Clear CLOCAL so that SIGHUP is sent to us
- when the xterm ends */
- tio.c_cflag &= ~CLOCAL;
-#endif /* USE_POSIX_TERMIOS */
- /* enable signals, canonical processing (erase, kill, etc),
- * echo
- */
- tio.c_lflag |= ISIG | ICANON | ECHO | ECHOE | ECHOK;
-#ifdef ECHOKE
- tio.c_lflag |= ECHOKE | IEXTEN;
-#endif
-#ifdef ECHOCTL
- tio.c_lflag |= ECHOCTL | IEXTEN;
-#endif
-#ifndef __MVS__
- /* reset EOL to default value */
- tio.c_cc[VEOL] = CEOL; /* '^@' */
- /* certain shells (ksh & csh) change EOF as well */
- tio.c_cc[VEOF] = CEOF; /* '^D' */
-#else
- if (tio.c_cc[VEOL] == 0)
- tio.c_cc[VEOL] = CEOL; /* '^@' */
- if (tio.c_cc[VEOF] == 0)
- tio.c_cc[VEOF] = CEOF; /* '^D' */
-#endif
-#ifdef VLNEXT
- tio.c_cc[VLNEXT] = CLNEXT;
-#endif
-#ifdef VWERASE
- tio.c_cc[VWERASE] = CWERASE;
-#endif
-#ifdef VREPRINT
- tio.c_cc[VREPRINT] = CRPRNT;
-#endif
-#ifdef VRPRNT
- tio.c_cc[VRPRNT] = CRPRNT;
-#endif
-#ifdef VDISCARD
- tio.c_cc[VDISCARD] = CFLUSH;
-#endif
-#ifdef VFLUSHO
- tio.c_cc[VFLUSHO] = CFLUSH;
-#endif
-#ifdef VSTOP
- tio.c_cc[VSTOP] = CSTOP;
-#endif
-#ifdef VSTART
- tio.c_cc[VSTART] = CSTART;
-#endif
-#ifdef VSUSP
- tio.c_cc[VSUSP] = CSUSP;
-#endif
-#ifdef VDSUSP
- tio.c_cc[VDSUSP] = CDSUSP;
-#endif
- if (override_tty_modes) {
- /* sysv-specific */
- TMODE(XTTYMODE_intr, tio.c_cc[VINTR]);
- TMODE(XTTYMODE_quit, tio.c_cc[VQUIT]);
- TMODE(XTTYMODE_erase, tio.c_cc[VERASE]);
- TMODE(XTTYMODE_kill, tio.c_cc[VKILL]);
- TMODE(XTTYMODE_eof, tio.c_cc[VEOF]);
- TMODE(XTTYMODE_eol, tio.c_cc[VEOL]);
-#ifdef VSWTCH
- TMODE(XTTYMODE_swtch, tio.c_cc[VSWTCH]);
-#endif
-#ifdef VSUSP
- TMODE(XTTYMODE_susp, tio.c_cc[VSUSP]);
-#endif
-#ifdef VDSUSP
- TMODE(XTTYMODE_dsusp, tio.c_cc[VDSUSP]);
-#endif
-#ifdef VREPRINT
- TMODE(XTTYMODE_rprnt, tio.c_cc[VREPRINT]);
-#endif
-#ifdef VRPRNT
- TMODE(XTTYMODE_rprnt, tio.c_cc[VRPRNT]);
-#endif
-#ifdef VDISCARD
- TMODE(XTTYMODE_flush, tio.c_cc[VDISCARD]);
-#endif
-#ifdef VFLUSHO
- TMODE(XTTYMODE_flush, tio.c_cc[VFLUSHO]);
-#endif
-#ifdef VWERASE
- TMODE(XTTYMODE_weras, tio.c_cc[VWERASE]);
-#endif
-#ifdef VLNEXT
- TMODE(XTTYMODE_lnext, tio.c_cc[VLNEXT]);
-#endif
-#ifdef VSTART
- TMODE(XTTYMODE_start, tio.c_cc[VSTART]);
-#endif
-#ifdef VSTOP
- TMODE(XTTYMODE_stop, tio.c_cc[VSTOP]);
-#endif
-#ifdef VSTATUS
- TMODE(XTTYMODE_status, tio.c_cc[VSTATUS]);
-#endif
-#ifdef VERASE2
- TMODE(XTTYMODE_erase2, tio.c_cc[VERASE2]);
-#endif
-#ifdef VEOL2
- TMODE(XTTYMODE_eol2, tio.c_cc[VEOL2]);
-#endif
-#ifdef HAS_LTCHARS
- /* both SYSV and BSD have ltchars */
- TMODE(XTTYMODE_susp, ltc.t_suspc);
- TMODE(XTTYMODE_dsusp, ltc.t_dsuspc);
- TMODE(XTTYMODE_rprnt, ltc.t_rprntc);
- TMODE(XTTYMODE_flush, ltc.t_flushc);
- TMODE(XTTYMODE_weras, ltc.t_werasc);
- TMODE(XTTYMODE_lnext, ltc.t_lnextc);
-#endif
- }
-#ifdef HAS_LTCHARS
-#ifdef __hpux
- /* ioctl chokes when the "reserved" process group controls
- * are not set to _POSIX_VDISABLE */
- ltc.t_rprntc = ltc.t_rprntc = ltc.t_flushc =
- ltc.t_werasc = ltc.t_lnextc = _POSIX_VDISABLE;
-#endif /* __hpux */
- if (ioctl(ttyfd, TIOCSLTC, &ltc) == -1)
- HsSysError(cp_pipe[1], ERROR_TIOCSETC);
-#endif /* HAS_LTCHARS */
-#ifdef TIOCLSET
- if (ioctl(ttyfd, TIOCLSET, (char *) &lmode) == -1)
- HsSysError(cp_pipe[1], ERROR_TIOCLSET);
-#endif /* TIOCLSET */
- if (ttySetAttr(ttyfd, &tio) == -1)
- HsSysError(cp_pipe[1], ERROR_TIOCSETP);
-
- /* ignore errors here - some platforms don't work */
- tio.c_cflag &= ~CSIZE;
- if (screen->input_eight_bits)
- tio.c_cflag |= CS8;
- else
- tio.c_cflag |= CS7;
- (void) ttySetAttr(ttyfd, &tio);
-
-#else /* !TERMIO_STRUCT */
- sg.sg_flags &= ~(ALLDELAY | XTABS | CBREAK | RAW);
- sg.sg_flags |= ECHO | CRMOD;
- /* make sure speed is set on pty so that editors work right */
- sg.sg_ispeed = VAL_LINE_SPEED;
- sg.sg_ospeed = VAL_LINE_SPEED;
- /* reset t_brkc to default value */
- tc.t_brkc = -1;
-#ifdef LPASS8
- if (screen->input_eight_bits)
- lmode |= LPASS8;
- else
- lmode &= ~(LPASS8);
-#endif
-#ifdef sony
- jmode &= ~KM_KANJI;
-#endif /* sony */
-
- ltc = d_ltc;
-
- if (override_tty_modes) {
- TMODE(XTTYMODE_intr, tc.t_intrc);
- TMODE(XTTYMODE_quit, tc.t_quitc);
- TMODE(XTTYMODE_erase, sg.sg_erase);
- TMODE(XTTYMODE_kill, sg.sg_kill);
- TMODE(XTTYMODE_eof, tc.t_eofc);
- TMODE(XTTYMODE_start, tc.t_startc);
- TMODE(XTTYMODE_stop, tc.t_stopc);
- TMODE(XTTYMODE_brk, tc.t_brkc);
- /* both SYSV and BSD have ltchars */
- TMODE(XTTYMODE_susp, ltc.t_suspc);
- TMODE(XTTYMODE_dsusp, ltc.t_dsuspc);
- TMODE(XTTYMODE_rprnt, ltc.t_rprntc);
- TMODE(XTTYMODE_flush, ltc.t_flushc);
- TMODE(XTTYMODE_weras, ltc.t_werasc);
- TMODE(XTTYMODE_lnext, ltc.t_lnextc);
- }
-
- if (ioctl(ttyfd, TIOCSETP, (char *) &sg) == -1)
- HsSysError(cp_pipe[1], ERROR_TIOCSETP);
- if (ioctl(ttyfd, TIOCSETC, (char *) &tc) == -1)
- HsSysError(cp_pipe[1], ERROR_TIOCSETC);
- if (ioctl(ttyfd, TIOCSETD, (char *) &discipline) == -1)
- HsSysError(cp_pipe[1], ERROR_TIOCSETD);
- if (ioctl(ttyfd, TIOCSLTC, (char *) &ltc) == -1)
- HsSysError(cp_pipe[1], ERROR_TIOCSLTC);
- if (ioctl(ttyfd, TIOCLSET, (char *) &lmode) == -1)
- HsSysError(cp_pipe[1], ERROR_TIOCLSET);
-#ifdef sony
- if (ioctl(ttyfd, TIOCKSET, (char *) &jmode) == -1)
- HsSysError(cp_pipe[1], ERROR_TIOCKSET);
- if (ioctl(ttyfd, TIOCKSETC, (char *) &jtc) == -1)
- HsSysError(cp_pipe[1], ERROR_TIOCKSETC);
-#endif /* sony */
-#endif /* TERMIO_STRUCT */
-#if defined(TIOCCONS) || defined(SRIOCSREDIR)
- if (Console) {
-#ifdef TIOCCONS
- int on = 1;
- if (ioctl(ttyfd, TIOCCONS, (char *) &on) == -1)
- fprintf(stderr, "%s: cannot open console: %s\n",
- xterm_name, strerror(errno));
-#endif
-#ifdef SRIOCSREDIR
- int fd = open("/dev/console", O_RDWR);
- if (fd == -1 || ioctl(fd, SRIOCSREDIR, ttyfd) == -1)
- fprintf(stderr, "%s: cannot open console: %s\n",
- xterm_name, strerror(errno));
- (void) close(fd);
-#endif
- }
-#endif /* TIOCCONS */
- }
-
- signal(SIGCHLD, SIG_DFL);
-#ifdef USE_SYSV_SIGHUP
- /* watch out for extra shells (I don't understand either) */
- signal(SIGHUP, SIG_DFL);
-#else
- signal(SIGHUP, SIG_IGN);
-#endif
- /* restore various signals to their defaults */
- signal(SIGINT, SIG_DFL);
- signal(SIGQUIT, SIG_DFL);
- signal(SIGTERM, SIG_DFL);
-
- /*
- * If we're not asked to make the parent process set the
- * terminal's erase mode, and if we had no ttyModes resource,
- * then set the terminal's erase mode from our best guess.
- */
-#if OPT_INITIAL_ERASE
- TRACE(("check if we should set erase to %d:%s\n\tptyInitialErase:%d,\n\toveride_tty_modes:%d,\n\tXTTYMODE_erase:%d\n",
- initial_erase,
- (!resource.ptyInitialErase
- && !override_tty_modes
- && !ttymodelist[XTTYMODE_erase].set)
- ? "YES" : "NO",
- resource.ptyInitialErase,
- override_tty_modes,
- ttymodelist[XTTYMODE_erase].set));
- if (!resource.ptyInitialErase
- && !override_tty_modes
- && !ttymodelist[XTTYMODE_erase].set) {
-#if OPT_TRACE
- int old_erase;
-#endif
-#ifdef TERMIO_STRUCT
- if (ttyGetAttr(ttyfd, &tio) == -1)
- tio = d_tio;
-#if OPT_TRACE
- old_erase = tio.c_cc[VERASE];
-#endif
- tio.c_cc[VERASE] = initial_erase;
- rc = ttySetAttr(ttyfd, &tio);
-#else /* !TERMIO_STRUCT */
- if (ioctl(ttyfd, TIOCGETP, (char *) &sg) == -1)
- sg = d_sg;
-#if OPT_TRACE
- old_erase = sg.sg_erase;
-#endif
- sg.sg_erase = initial_erase;
- rc = ioctl(ttyfd, TIOCSETP, (char *) &sg);
-#endif /* TERMIO_STRUCT */
- TRACE(("%s setting erase to %d (was %d)\n",
- rc ? "FAIL" : "OK", initial_erase, old_erase));
- }
-#endif
-
- /* copy the environment before Setenv'ing */
- for (i = 0; environ[i] != NULL; i++) ;
- /* compute number of xtermSetenv() calls below */
- envsize = 1; /* (NULL terminating entry) */
- envsize += 5; /* TERM, WINDOWID, DISPLAY, _SHELL, _VERSION */
-#ifdef HAVE_UTMP
- envsize += 1; /* LOGNAME */
-#endif /* HAVE_UTMP */
-#ifdef USE_SYSV_ENVVARS
- envsize += 2; /* COLUMNS, LINES */
-#ifdef HAVE_UTMP
- envsize += 2; /* HOME, SHELL */
-#endif /* HAVE_UTMP */
-#ifdef OWN_TERMINFO_DIR
- envsize += 1; /* TERMINFO */
-#endif
-#else /* USE_SYSV_ENVVARS */
- envsize += 1; /* TERMCAP */
-#endif /* USE_SYSV_ENVVARS */
- envnew = TypeCallocN(char *, (unsigned) i + envsize);
- memmove((char *) envnew, (char *) environ, i * sizeof(char *));
- environ = envnew;
- xtermSetenv("TERM=", TermName);
- if (!TermName)
- *newtc = 0;
-
- sprintf(buf, "%lu",
- ((unsigned long) XtWindow(SHELL_OF(CURRENT_EMU(screen)))));
- xtermSetenv("WINDOWID=", buf);
-
- /* put the display into the environment of the shell */
- xtermSetenv("DISPLAY=", XDisplayString(screen->display));
-
- xtermSetenv("XTERM_VERSION=", xtermVersion());
-
- signal(SIGTERM, SIG_DFL);
-
- /* this is the time to go and set up stdin, out, and err
- */
- {
-#if defined(CRAY) && (OSMAJORVERSION >= 6)
- close_fd(ttyfd);
-
- (void) close(0);
-
- if (open("/dev/tty", O_RDWR)) {
- SysError(ERROR_OPDEVTTY);
- }
- (void) close(1);
- (void) close(2);
- dup(0);
- dup(0);
-#else
- /* dup the tty */
- for (i = 0; i <= 2; i++)
- if (i != ttyfd) {
- (void) close(i);
- (void) dup(ttyfd);
- }
-#ifndef ATT
- /* and close the tty */
- if (ttyfd > 2)
- close_fd(ttyfd);
-#endif
-#endif /* CRAY */
- }
-
-#if !defined(USE_SYSV_PGRP)
-#ifdef TIOCSCTTY
- setsid();
- ioctl(0, TIOCSCTTY, 0);
-#endif
- ioctl(0, TIOCSPGRP, (char *) &pgrp);
- setpgrp(0, 0);
- close(open(ttydev, O_WRONLY));
- setpgrp(0, pgrp);
-#if defined(__QNX__)
- tcsetpgrp(0, pgrp /*setsid() */ );
-#endif
-#endif /* !USE_SYSV_PGRP */
-
-#ifdef Lynx
- {
- TERMIO_STRUCT t;
- if (ttyGetAttr(0, &t) >= 0) {
- /* this gets lost somewhere on our way... */
- t.c_oflag |= OPOST;
- ttySetAttr(0, &t);
- }
- }
-#endif
-
-#ifdef HAVE_UTMP
- pw = getpwuid(screen->uid);
- login_name = NULL;
- if (pw && pw->pw_name) {
-#ifdef HAVE_GETLOGIN
- /*
- * If the value from getlogin() differs from the value we
- * get by looking in the password file, check if it does
- * correspond to the same uid. If so, allow that as an
- * alias for the uid.
- *
- * Of course getlogin() will fail if we're started from
- * a window-manager, since there's no controlling terminal
- * to fuss with. In that case, try to get something useful
- * from the user's $LOGNAME or $USER environment variables.
- */
- if (((login_name = getlogin()) != NULL
- || (login_name = getenv("LOGNAME")) != NULL
- || (login_name = getenv("USER")) != NULL)
- && strcmp(login_name, pw->pw_name)) {
- struct passwd *pw2 = getpwnam(login_name);
- if (pw2 != 0) {
- uid_t uid2 = pw2->pw_uid;
- pw = getpwuid(screen->uid);
- if ((uid_t) pw->pw_uid != uid2)
- login_name = NULL;
- } else {
- pw = getpwuid(screen->uid);
- }
- }
-#endif
- if (login_name == NULL)
- login_name = pw->pw_name;
- if (login_name != NULL)
- login_name = x_strdup(login_name);
- }
- if (login_name != NULL) {
- xtermSetenv("LOGNAME=", login_name); /* for POSIX */
- }
-#ifndef USE_UTEMPTER
-#ifdef USE_SYSV_UTMP
- /* Set up our utmp entry now. We need to do it here
- * for the following reasons:
- * - It needs to have our correct process id (for
- * login).
- * - If our parent was to set it after the fork(),
- * it might make it out before we need it.
- * - We need to do it before we go and change our
- * user and group id's.
- */
- (void) call_setutent();
- init_utmp(DEAD_PROCESS, &utmp);
-
- /* position to entry in utmp file */
- /* Test return value: beware of entries left behind: PSz 9 Mar 00 */
- if (!(utret = find_utmp(&utmp))) {
- (void) call_setutent();
- init_utmp(USER_PROCESS, &utmp);
- if (!(utret = find_utmp(&utmp))) {
- (void) call_setutent();
- }
- }
-#if OPT_TRACE
- if (!utret)
- TRACE(("getutid: NULL\n"));
- else
- TRACE(("getutid: pid=%d type=%d user=%s line=%s id=%s\n",
- utret->ut_pid, utret->ut_type, utret->ut_user,
- utret->ut_line, utret->ut_id));
-#endif
-
- /* set up the new entry */
- utmp.ut_type = USER_PROCESS;
-#ifdef HAVE_UTMP_UT_XSTATUS
- utmp.ut_xstatus = 2;
-#endif
- (void) strncpy(utmp.ut_user,
- (login_name != NULL) ? login_name : "????",
- sizeof(utmp.ut_user));
- /* why are we copying this string again? (see above) */
- (void) strncpy(utmp.ut_id, my_utmp_id(ttydev), sizeof(utmp.ut_id));
- (void) strncpy(utmp.ut_line,
- my_pty_name(ttydev), sizeof(utmp.ut_line));
-
-#ifdef HAVE_UTMP_UT_HOST
- SetUtmpHost(utmp.ut_host, screen);
-#endif
- (void) strncpy(utmp.ut_name,
- (login_name) ? login_name : "????",
- sizeof(utmp.ut_name));
-
- utmp.ut_pid = getpid();
-#if defined(HAVE_UTMP_UT_XTIME)
-#if defined(HAVE_UTMP_UT_SESSION)
- utmp.ut_session = getsid(0);
-#endif
- utmp.ut_xtime = time((time_t *) 0);
- utmp.ut_tv.tv_usec = 0;
-#else
- utmp.ut_time = time((time_t *) 0);
-#endif
-
- /* write out the entry */
- if (!resource.utmpInhibit) {
- errno = 0;
- call_pututline(&utmp);
- TRACE(("pututline: id %s, line %s, pid %ld, errno %d %s\n",
- utmp.ut_id,
- utmp.ut_line,
- (long) utmp.ut_pid,
- errno, (errno != 0) ? strerror(errno) : ""));
- }
-#ifdef WTMP
-#if defined(WTMPX_FILE) && (defined(SVR4) || defined(__SCO__))
- if (term->misc.login_shell)
- updwtmpx(WTMPX_FILE, &utmp);
-#elif defined(linux) && defined(__GLIBC__) && (__GLIBC__ >= 2) && !(defined(__powerpc__) && (__GLIBC__ == 2) && (__GLIBC_MINOR__ == 0))
- if (term->misc.login_shell)
- call_updwtmp(etc_wtmp, &utmp);
-#else
- if (term->misc.login_shell &&
- (i = open(etc_wtmp, O_WRONLY | O_APPEND)) >= 0) {
- write(i, (char *) &utmp, sizeof(utmp));
- close(i);
- }
-#endif
-#endif
- /* close the file */
- (void) call_endutent();
-
-#else /* USE_SYSV_UTMP */
- /* We can now get our ttyslot! We can also set the initial
- * utmp entry.
- */
- tslot = ttyslot();
- added_utmp_entry = False;
- {
- if (tslot > 0 && pw && !resource.utmpInhibit &&
- (i = open(etc_utmp, O_WRONLY)) >= 0) {
- bzero((char *) &utmp, sizeof(utmp));
- (void) strncpy(utmp.ut_line,
- my_pty_name(ttydev),
- sizeof(utmp.ut_line));
- (void) strncpy(utmp.ut_name, login_name,
- sizeof(utmp.ut_name));
-#ifdef HAVE_UTMP_UT_HOST
- SetUtmpHost(utmp.ut_host, screen);
-#endif
- /* cast needed on Ultrix 4.4 */
- time((time_t *) & utmp.ut_time);
- lseek(i, (long) (tslot * sizeof(utmp)), 0);
- write(i, (char *) &utmp, sizeof(utmp));
- close(i);
- added_utmp_entry = True;
-#if defined(WTMP)
- if (term->misc.login_shell &&
- (i = open(etc_wtmp, O_WRONLY | O_APPEND)) >= 0) {
- int status;
- status = write(i, (char *) &utmp, sizeof(utmp));
- status = close(i);
- }
-#elif defined(MNX_LASTLOG)
- if (term->misc.login_shell &&
- (i = open(_U_LASTLOG, O_WRONLY)) >= 0) {
- lseek(i, (long) (screen->uid *
- sizeof(utmp)), 0);
- write(i, (char *) &utmp, sizeof(utmp));
- close(i);
- }
-#endif /* WTMP or MNX_LASTLOG */
- } else
- tslot = -tslot;
- }
-
- /* Let's pass our ttyslot to our parent so that it can
- * clean up after us.
- */
-#if OPT_PTY_HANDSHAKE
- if (resource.ptyHandshake) {
- handshake.tty_slot = tslot;
- }
-#endif /* OPT_PTY_HANDSHAKE */
-#endif /* USE_SYSV_UTMP */
-
-#ifdef USE_LASTLOGX
- if (term->misc.login_shell) {
- bzero((char *) &lastlog, sizeof(lastlog));
- (void) strncpy(lastlog.ll_line,
- my_pty_name(ttydev),
- sizeof(lastlog.ll_line));
- X_GETTIMEOFDAY(&lastlog.ll_tv);
- SetUtmpHost(lastlog.ll_host, screen);
- updlastlogx(_PATH_LASTLOGX, screen->uid, &lastlog);
- }
-#endif
-
-#ifdef USE_LASTLOG
- if (term->misc.login_shell &&
- (i = open(etc_lastlog, O_WRONLY)) >= 0) {
- bzero((char *) &lastlog, sizeof(struct lastlog));
- (void) strncpy(lastlog.ll_line,
- my_pty_name(ttydev),
- sizeof(lastlog.ll_line));
- SetUtmpHost(lastlog.ll_host, screen);
- time(&lastlog.ll_time);
- lseek(i, (long) (screen->uid * sizeof(struct lastlog)), 0);
- write(i, (char *) &lastlog, sizeof(struct lastlog));
- close(i);
- }
-#endif /* USE_LASTLOG */
-
-#if defined(USE_UTMP_SETGID)
- /* Switch to real gid after writing utmp entry */
- utmpGid = getegid();
- if (getgid() != getegid()) {
- utmpGid = getegid();
- setegid(getgid());
- TRACE(("switch to real gid %d after writing utmp\n", getgid()));
- }
-#endif
-
-#if OPT_PTY_HANDSHAKE
- /* Let our parent know that we set up our utmp entry
- * so that it can clean up after us.
- */
- if (resource.ptyHandshake) {
- handshake.status = UTMP_ADDED;
- handshake.error = 0;
- strcpy(handshake.buffer, ttydev);
- (void) write(cp_pipe[1], (char *) &handshake, sizeof(handshake));
- }
-#endif /* OPT_PTY_HANDSHAKE */
-#endif /* USE_UTEMPTER */
-#endif /* HAVE_UTMP */
-
- (void) setgid(screen->gid);
-#ifdef HAS_BSD_GROUPS
- if (geteuid() == 0 && pw) {
- if (initgroups(login_name, pw->pw_gid)) {
- perror("initgroups failed");
- SysError(ERROR_INIGROUPS);
- }
- }
-#endif
- if (setuid(screen->uid)) {
- SysError(ERROR_SETUID);
- }
-#if OPT_PTY_HANDSHAKE
- if (resource.ptyHandshake) {
- /* mark the pipes as close on exec */
- fcntl(cp_pipe[1], F_SETFD, 1);
- fcntl(pc_pipe[0], F_SETFD, 1);
-
- /* We are at the point where we are going to
- * exec our shell (or whatever). Let our parent
- * know we arrived safely.
- */
- handshake.status = PTY_GOOD;
- handshake.error = 0;
- (void) strcpy(handshake.buffer, ttydev);
- (void) write(cp_pipe[1], (char *) &handshake, sizeof(handshake));
-
- if (waiting_for_initial_map) {
- i = read(pc_pipe[0], (char *) &handshake,
- sizeof(handshake));
- if (i != sizeof(handshake) ||
- handshake.status != PTY_EXEC) {
- /* some very bad problem occurred */
- exit(ERROR_PTY_EXEC);
- }
- if (handshake.rows > 0 && handshake.cols > 0) {
- set_max_row(screen, handshake.rows);
- set_max_col(screen, handshake.cols);
-#ifdef TTYSIZE_STRUCT
- TTYSIZE_ROWS(ts) = MaxRows(screen);
- TTYSIZE_COLS(ts) = MaxCols(screen);
-#if defined(USE_STRUCT_WINSIZE)
- ts.ws_xpixel = FullWidth(screen);
- ts.ws_ypixel = FullHeight(screen);
-#endif
-#endif /* TTYSIZE_STRUCT */
- }
- }
- }
-#endif /* OPT_PTY_HANDSHAKE */
-
-#ifdef USE_SYSV_ENVVARS
- {
- char numbuf[12];
- sprintf(numbuf, "%d", MaxCols(screen));
- xtermSetenv("COLUMNS=", numbuf);
- sprintf(numbuf, "%d", MaxRows(screen));
- xtermSetenv("LINES=", numbuf);
- }
-#ifdef HAVE_UTMP
- if (pw) { /* SVR4 doesn't provide these */
- if (!getenv("HOME"))
- xtermSetenv("HOME=", pw->pw_dir);
- if (!getenv("SHELL"))
- xtermSetenv("SHELL=", pw->pw_shell);
- }
-#endif /* HAVE_UTMP */
-#ifdef OWN_TERMINFO_DIR
- xtermSetenv("TERMINFO=", OWN_TERMINFO_DIR);
-#endif
-#else /* USE_SYSV_ENVVARS */
- if (!TEK4014_ACTIVE(screen) && *newtc) {
- strcpy(termcap, newtc);
- resize(screen, termcap, newtc);
- }
- if (term->misc.titeInhibit && !term->misc.tiXtraScroll) {
- remove_termcap_entry(newtc, "ti=");
- remove_termcap_entry(newtc, "te=");
- }
- /*
- * work around broken termcap entries */
- if (resource.useInsertMode) {
- remove_termcap_entry(newtc, "ic=");
- /* don't get duplicates */
- remove_termcap_entry(newtc, "im=");
- remove_termcap_entry(newtc, "ei=");
- remove_termcap_entry(newtc, "mi");
- if (*newtc)
- strcat(newtc, ":im=\\E[4h:ei=\\E[4l:mi:");
- }
- if (*newtc) {
-#if OPT_INITIAL_ERASE
- unsigned len;
- remove_termcap_entry(newtc, TERMCAP_ERASE "=");
- len = strlen(newtc);
- if (len != 0 && newtc[len - 1] == ':')
- len--;
- sprintf(newtc + len, ":%s=\\%03o:",
- TERMCAP_ERASE,
- CharOf(initial_erase));
-#endif
- xtermSetenv("TERMCAP=", newtc);
- }
-#endif /* USE_SYSV_ENVVARS */
-
- /* need to reset after all the ioctl bashing we did above */
-#if OPT_PTY_HANDSHAKE
- if (resource.ptyHandshake) {
-#ifdef TTYSIZE_STRUCT
- i = SET_TTYSIZE(0, ts);
- TRACE(("spawn SET_TTYSIZE %dx%d return %d\n",
- TTYSIZE_ROWS(ts),
- TTYSIZE_COLS(ts), i));
-#endif /* TTYSIZE_STRUCT */
- }
-#endif /* OPT_PTY_HANDSHAKE */
- signal(SIGHUP, SIG_DFL);
-
- if ((ptr = explicit_shname) == NULL) {
- if (((ptr = getenv("SHELL")) == NULL || *ptr == 0) &&
- ((pw == NULL && (pw = getpwuid(screen->uid)) == NULL) ||
- *(ptr = pw->pw_shell) == 0)) {
- ptr = "/bin/sh";
- }
- } else {
- xtermSetenv("SHELL=", explicit_shname);
- }
- xtermSetenv("XTERM_SHELL=", ptr);
-
- shname = x_basename(ptr);
- TRACE(("shell path '%s' leaf '%s'\n", ptr, shname));
-
-#if OPT_LUIT_PROG
- /*
- * Use two copies of command_to_exec, in case luit is not actually
- * there, or refuses to run. In that case we will fall-through to
- * to command that the user gave anyway.
- */
- if (command_to_exec_with_luit) {
- xtermSetenv("XTERM_SHELL=",
- xtermFindShell(*command_to_exec_with_luit, False));
- TRACE(("spawning command \"%s\"\n", *command_to_exec_with_luit));
- execvp(*command_to_exec_with_luit, command_to_exec_with_luit);
- /* print error message on screen */
- fprintf(stderr, "%s: Can't execvp %s: %s\n",
- xterm_name, *command_to_exec_with_luit, strerror(errno));
- fprintf(stderr, "%s: cannot support your locale.\n",
- xterm_name);
- }
-#endif
- if (command_to_exec) {
- xtermSetenv("XTERM_SHELL=",
- xtermFindShell(*command_to_exec, False));
- TRACE(("spawning command \"%s\"\n", *command_to_exec));
- execvp(*command_to_exec, command_to_exec);
- if (command_to_exec[1] == 0)
- execlp(ptr, shname, "-c", command_to_exec[0], (void *) 0);
- /* print error message on screen */
- fprintf(stderr, "%s: Can't execvp %s: %s\n",
- xterm_name, *command_to_exec, strerror(errno));
- }
-#ifdef USE_SYSV_SIGHUP
- /* fix pts sh hanging around */
- signal(SIGHUP, SIG_DFL);
-#endif
-
- shname_minus = CastMallocN(char, strlen(shname) + 2);
- (void) strcpy(shname_minus, "-");
- (void) strcat(shname_minus, shname);
-#ifndef TERMIO_STRUCT
- ldisc = XStrCmp("csh", shname + strlen(shname) - 3) == 0 ?
- NTTYDISC : 0;
- ioctl(0, TIOCSETD, (char *) &ldisc);
-#endif /* !TERMIO_STRUCT */
-
-#ifdef USE_LOGIN_DASH_P
- if (term->misc.login_shell && pw && added_utmp_entry)
- execl(bin_login, "login", "-p", "-f", login_name, (void *) 0);
-#endif
- execlp(ptr,
- (term->misc.login_shell ? shname_minus : shname),
- (void *) 0);
-
- /* Exec failed. */
- fprintf(stderr, "%s: Could not exec %s: %s\n", xterm_name,
- ptr, strerror(errno));
- (void) sleep(5);
- exit(ERROR_EXEC);
- }
- /* end if in child after fork */
-#if OPT_PTY_HANDSHAKE
- if (resource.ptyHandshake) {
- /* Parent process. Let's handle handshaked requests to our
- * child process.
- */
-
- /* close childs's sides of the pipes */
- close(cp_pipe[1]);
- close(pc_pipe[0]);
-
- for (done = 0; !done;) {
- if (read(cp_pipe[0],
- (char *) &handshake,
- sizeof(handshake)) <= 0) {
- /* Our child is done talking to us. If it terminated
- * due to an error, we will catch the death of child
- * and clean up.
- */
- break;
- }
-
- switch (handshake.status) {
- case PTY_GOOD:
- /* Success! Let's free up resources and
- * continue.
- */
- done = 1;
- break;
-
- case PTY_BAD:
- /* The open of the pty failed! Let's get
- * another one.
- */
- (void) close(screen->respond);
- if (get_pty(&screen->respond, XDisplayString(screen->display))) {
- /* no more ptys! */
- fprintf(stderr,
- "%s: child process can find no available ptys: %s\n",
- xterm_name, strerror(errno));
- handshake.status = PTY_NOMORE;
- write(pc_pipe[1], (char *) &handshake, sizeof(handshake));
- exit(ERROR_PTYS);
- }
- handshake.status = PTY_NEW;
- (void) strcpy(handshake.buffer, ttydev);
- write(pc_pipe[1], (char *) &handshake, sizeof(handshake));
- break;
-
- case PTY_FATALERROR:
- errno = handshake.error;
- close(cp_pipe[0]);
- close(pc_pipe[1]);
- SysError(handshake.fatal_error);
- /*NOTREACHED */
-
- case UTMP_ADDED:
- /* The utmp entry was set by our slave. Remember
- * this so that we can reset it later.
- */
- added_utmp_entry = True;
-#ifndef USE_SYSV_UTMP
- tslot = handshake.tty_slot;
-#endif /* USE_SYSV_UTMP */
- free(ttydev);
- ttydev = x_strdup(handshake.buffer);
- break;
- default:
- fprintf(stderr, "%s: unexpected handshake status %d\n",
- xterm_name,
- (int) handshake.status);
- }
- }
- /* close our sides of the pipes */
- if (!waiting_for_initial_map) {
- close(cp_pipe[0]);
- close(pc_pipe[1]);
- }
- }
-#endif /* OPT_PTY_HANDSHAKE */
- }
-
- /* end if no slave */
- /*
- * still in parent (xterm process)
- */
-#ifdef USE_SYSV_SIGHUP
- /* hung sh problem? */
- signal(SIGHUP, SIG_DFL);
-#else
- signal(SIGHUP, SIG_IGN);
-#endif
-
-/*
- * Unfortunately, System V seems to have trouble divorcing the child process
- * from the process group of xterm. This is a problem because hitting the
- * INTR or QUIT characters on the keyboard will cause xterm to go away if we
- * don't ignore the signals. This is annoying.
- */
-
-#if defined(USE_SYSV_SIGNALS) && !defined(SIGTSTP)
- signal(SIGINT, SIG_IGN);
-
-#ifndef SYSV
- /* hung shell problem */
- signal(SIGQUIT, SIG_IGN);
-#endif
- signal(SIGTERM, SIG_IGN);
-#elif defined(SYSV) || defined(__osf__)
- /* if we were spawned by a jobcontrol smart shell (like ksh or csh),
- * then our pgrp and pid will be the same. If we were spawned by
- * a jobcontrol dumb shell (like /bin/sh), then we will be in our
- * parent's pgrp, and we must ignore keyboard signals, or we will
- * tank on everything.
- */
- if (getpid() == getpgrp()) {
- (void) signal(SIGINT, Exit);
- (void) signal(SIGQUIT, Exit);
- (void) signal(SIGTERM, Exit);
- } else {
- (void) signal(SIGINT, SIG_IGN);
- (void) signal(SIGQUIT, SIG_IGN);
- (void) signal(SIGTERM, SIG_IGN);
- }
- (void) signal(SIGPIPE, Exit);
-#else /* SYSV */
- signal(SIGINT, Exit);
- signal(SIGQUIT, Exit);
- signal(SIGTERM, Exit);
- signal(SIGPIPE, Exit);
-#endif /* USE_SYSV_SIGNALS and not SIGTSTP */
-
- return 0;
-} /* end spawn */
-
-SIGNAL_T
-Exit(int n)
-{
- TScreen *screen = &term->screen;
-
-#ifdef USE_UTEMPTER
- if (!resource.utmpInhibit && added_utmp_entry)
- removeFromUtmp();
-#elif defined(HAVE_UTMP)
-#ifdef USE_SYSV_UTMP
- struct UTMP_STR utmp;
- struct UTMP_STR *utptr;
-
- /* don't do this more than once */
- if (xterm_exiting)
- SIGNAL_RETURN;
- xterm_exiting = True;
-
-#ifdef PUCC_PTYD
- closepty(ttydev, ptydev, (resource.utmpInhibit ? OPTY_NOP : OPTY_LOGIN), screen->respond);
-#endif /* PUCC_PTYD */
-
- /* cleanup the utmp entry we forged earlier */
- if (!resource.utmpInhibit
-#if OPT_PTY_HANDSHAKE /* without handshake, no way to know */
- && (resource.ptyHandshake && added_utmp_entry)
-#endif /* OPT_PTY_HANDSHAKE */
- ) {
-#if defined(USE_UTMP_SETGID)
- if (utmpGid != -1) {
- /* Switch back to group utmp */
- setegid(utmpGid);
- TRACE(("switched back to group %d (check: %d)\n",
- utmpGid, (int) getgid()));
- }
-#endif
- init_utmp(USER_PROCESS, &utmp);
- (void) call_setutent();
-
- /*
- * We could use getutline() if we didn't support old systems.
- */
- while ((utptr = find_utmp(&utmp)) != 0) {
- if (utptr->ut_pid == screen->pid) {
- utptr->ut_type = DEAD_PROCESS;
-#if defined(HAVE_UTMP_UT_XTIME)
-#if defined(HAVE_UTMP_UT_SESSION)
- utptr->ut_session = getsid(0);
-#endif
- utptr->ut_xtime = time((time_t *) 0);
- utptr->ut_tv.tv_usec = 0;
-#else
- *utptr->ut_user = 0;
- utptr->ut_time = time((time_t *) 0);
-#endif
- (void) call_pututline(utptr);
-#ifdef WTMP
-#if defined(WTMPX_FILE) && (defined(SVR4) || defined(__SCO__))
- if (term->misc.login_shell)
- updwtmpx(WTMPX_FILE, utptr);
-#elif defined(linux) && defined(__GLIBC__) && (__GLIBC__ >= 2) && !(defined(__powerpc__) && (__GLIBC__ == 2) && (__GLIBC_MINOR__ == 0))
- strncpy(utmp.ut_line, utptr->ut_line, sizeof(utmp.ut_line));
- if (term->misc.login_shell)
- call_updwtmp(etc_wtmp, utptr);
-#else
- /* set wtmp entry if wtmp file exists */
- if (term->misc.login_shell) {
- int fd;
- if ((fd = open(etc_wtmp, O_WRONLY | O_APPEND)) >= 0) {
- write(fd, utptr, sizeof(*utptr));
- close(fd);
- }
- }
-#endif
-#endif
- break;
- }
- memset(utptr, 0, sizeof(*utptr)); /* keep searching */
- }
- (void) call_endutent();
- }
-#else /* not USE_SYSV_UTMP */
- int wfd;
- struct utmp utmp;
-
- if (!resource.utmpInhibit && added_utmp_entry &&
- (am_slave < 0 && tslot > 0 && (wfd = open(etc_utmp, O_WRONLY)) >= 0)) {
- bzero((char *) &utmp, sizeof(utmp));
- lseek(wfd, (long) (tslot * sizeof(utmp)), 0);
- write(wfd, (char *) &utmp, sizeof(utmp));
- close(wfd);
-#ifdef WTMP
- if (term->misc.login_shell &&
- (wfd = open(etc_wtmp, O_WRONLY | O_APPEND)) >= 0) {
- (void) strncpy(utmp.ut_line,
- my_pty_name(ttydev),
- sizeof(utmp.ut_line));
- time(&utmp.ut_time);
- write(wfd, (char *) &utmp, sizeof(utmp));
- close(wfd);
- }
-#endif /* WTMP */
- }
-#endif /* USE_SYSV_UTMP */
-#endif /* HAVE_UTMP */
- close(screen->respond); /* close explicitly to avoid race with slave side */
-#ifdef ALLOWLOGGING
- if (screen->logging)
- CloseLog(screen);
-#endif
-
- if (am_slave < 0) {
- /* restore ownership of tty and pty */
- set_owner(ttydev, 0, 0, 0666U);
-#if (defined(USE_PTY_DEVICE) && !defined(__sgi) && !defined(__hpux))
- set_owner(ptydev, 0, 0, 0666U);
-#endif
- }
-#if OPT_TRACE || defined(NO_LEAKS)
- if (n == 0) {
- TRACE(("Freeing memory leaks\n"));
- if (term != 0) {
- Display *dpy = term->screen.display;
-
- if (term->screen.sbuf_address) {
- free(term->screen.sbuf_address);
- TRACE(("freed screen.sbuf_address\n"));
- }
- if (term->screen.allbuf) {
- free(term->screen.allbuf);
- TRACE(("freed screen.allbuf\n"));
- }
- if (term->screen.xim) {
- XCloseIM(term->screen.xim);
- TRACE(("freed screen.xim\n"));
- }
- if (toplevel) {
- XtDestroyWidget(toplevel);
- TRACE(("destroyed top-level widget\n"));
- }
- XtCloseDisplay(dpy);
- TRACE(("closed display\n"));
- }
- TRACE((0));
- }
-#endif
-
- exit(n);
- SIGNAL_RETURN;
-}
-
-/* ARGSUSED */
-static void
-resize(TScreen * screen, char *oldtc, char *newtc)
-{
-#ifndef USE_SYSV_ENVVARS
- char *ptr1, *ptr2;
- size_t i;
- int li_first = 0;
- char *temp;
-
- TRACE(("resize %s\n", oldtc));
- if ((ptr1 = x_strindex(oldtc, "co#")) == NULL) {
- strcat(oldtc, "co#80:");
- ptr1 = x_strindex(oldtc, "co#");
- }
- if ((ptr2 = x_strindex(oldtc, "li#")) == NULL) {
- strcat(oldtc, "li#24:");
- ptr2 = x_strindex(oldtc, "li#");
- }
- if (ptr1 > ptr2) {
- li_first++;
- temp = ptr1;
- ptr1 = ptr2;
- ptr2 = temp;
- }
- ptr1 += 3;
- ptr2 += 3;
- strncpy(newtc, oldtc, i = ptr1 - oldtc);
- temp = newtc + i;
- sprintf(temp, "%d", (li_first
- ? MaxRows(screen)
- : MaxCols(screen)));
- temp += strlen(temp);
- ptr1 = strchr(ptr1, ':');
- strncpy(temp, ptr1, i = ptr2 - ptr1);
- temp += i;
- sprintf(temp, "%d", (li_first
- ? MaxCols(screen)
- : MaxRows(screen)));
- ptr2 = strchr(ptr2, ':');
- strcat(temp, ptr2);
- TRACE((" ==> %s\n", newtc));
-#endif /* USE_SYSV_ENVVARS */
-}
-
-#endif /* ! VMS */
-
-/*
- * Does a non-blocking wait for a child process. If the system
- * doesn't support non-blocking wait, do nothing.
- * Returns the pid of the child, or 0 or -1 if none or error.
- */
-int
-nonblocking_wait(void)
-{
-#ifdef USE_POSIX_WAIT
- pid_t pid;
-
- pid = waitpid(-1, NULL, WNOHANG);
-#elif defined(USE_SYSV_SIGNALS) && (defined(CRAY) || !defined(SIGTSTP))
- /* cannot do non-blocking wait */
- int pid = 0;
-#else /* defined(USE_SYSV_SIGNALS) && (defined(CRAY) || !defined(SIGTSTP)) */
-#if defined(Lynx)
- int status;
-#else
- union wait status;
-#endif
- int pid;
-
- pid = wait3(&status, WNOHANG, (struct rusage *) NULL);
-#endif /* USE_POSIX_WAIT else */
- return pid;
-}
-
-#ifndef VMS
-
-/* ARGSUSED */
-static SIGNAL_T
-reapchild(int n GCC_UNUSED)
-{
- int olderrno = errno;
- int pid;
-
- pid = wait(NULL);
-
-#ifdef USE_SYSV_SIGNALS
- /* cannot re-enable signal before waiting for child
- * because then SVR4 loops. Sigh. HP-UX 9.01 too.
- */
- (void) signal(SIGCHLD, reapchild);
-#endif
-
- do {
- if (pid == term->screen.pid) {
-#ifdef DEBUG
- if (debug)
- fputs("Exiting\n", stderr);
-#endif
- if (!hold_screen)
- need_cleanup = TRUE;
- }
- } while ((pid = nonblocking_wait()) > 0);
-
- errno = olderrno;
- SIGNAL_RETURN;
-}
-#endif /* !VMS */
-
-static void
-remove_termcap_entry(char *buf, char *str)
-{
- char *base = buf;
- char *first = base;
- int count = 0;
- size_t len = strlen(str);
-
- TRACE(("*** remove_termcap_entry('%s', '%s')\n", str, buf));
-
- while (*buf != 0) {
- if (!count && !strncmp(buf, str, len)) {
- while (*buf != 0) {
- if (*buf == '\\')
- buf++;
- else if (*buf == ':')
- break;
- if (*buf != 0)
- buf++;
- }
- while ((*first++ = *buf++) != 0) ;
- TRACE(("...removed_termcap_entry('%s', '%s')\n", str, base));
- return;
- } else if (*buf == '\\') {
- buf++;
- } else if (*buf == ':') {
- first = buf;
- count = 0;
- } else if (!isspace(CharOf(*buf))) {
- count++;
- }
- if (*buf != 0)
- buf++;
- }
- TRACE(("...cannot remove\n"));
-}
-
-/*
- * parse_tty_modes accepts lines of the following form:
- *
- * [SETTING] ...
- *
- * where setting consists of the words in the modelist followed by a character
- * or ^char.
- */
-static int
-parse_tty_modes(char *s, struct _xttymodes *modelist)
-{
- struct _xttymodes *mp;
- int c;
- int count = 0;
-
- TRACE(("parse_tty_modes\n"));
- while (1) {
- size_t len;
-
- while (*s && isascii(CharOf(*s)) && isspace(CharOf(*s)))
- s++;
- if (!*s)
- return count;
-
- for (len = 0; isalnum(CharOf(s[len])); ++len) ;
- for (mp = modelist; mp->name; mp++) {
- if (len == mp->len
- && strncmp(s, mp->name, mp->len) == 0)
- break;
- }
- if (!mp->name)
- return -1;
-
- s += mp->len;
- while (*s && isascii(CharOf(*s)) && isspace(CharOf(*s)))
- s++;
- if (!*s)
- return -1;
-
- if ((c = decode_keyvalue(&s, False)) != -1) {
- mp->value = c;
- mp->set = 1;
- count++;
- TRACE(("...parsed #%d: %s=%#x\n", count, mp->name, c));
- }
- }
-}
-
-#ifndef VMS /* don't use pipes on OpenVMS */
-int
-GetBytesAvailable(int fd)
-{
-#if defined(FIONREAD)
- int arg;
- ioctl(fd, FIONREAD, (char *) &arg);
- return (int) arg;
-#elif defined(__CYGWIN__)
- fd_set set;
- struct timeval timeout =
- {0, 0};
-
- FD_ZERO(&set);
- FD_SET(fd, &set);
- if (Select(fd + 1, &set, NULL, NULL, &timeout) > 0)
- return 1;
- else
- return 0;
-#elif defined(FIORDCK)
- return (ioctl(fd, FIORDCHK, NULL));
-#else /* !FIORDCK */
- struct pollfd pollfds[1];
-
- pollfds[0].fd = fd;
- pollfds[0].events = POLLIN;
- return poll(pollfds, 1, 0);
-#endif
-}
-#endif /* !VMS */
-
-/* Utility function to try to hide system differences from
- everybody who used to call killpg() */
-
-int
-kill_process_group(int pid, int sig)
-{
- TRACE(("kill_process_group(pid=%d, sig=%d)\n", pid, sig));
-#if defined(SVR4) || defined(SYSV) || !defined(X_NOT_POSIX)
- return kill(-pid, sig);
-#else
- return killpg(pid, sig);
-#endif
-}
-
-#if OPT_EBCDIC
-int
-A2E(int x)
-{
- char c;
- c = x;
- __atoe_l(&c, 1);
- return c;
-}
-
-int
-E2A(int x)
-{
- char c;
- c = x;
- __etoa_l(&c, 1);
- return c;
-}
-#endif
-
-#if defined(__QNX__) && !defined(__QNXNTO__)
-#include <sys/types.h>
-#include <sys/proc_msg.h>
-#include <sys/kernel.h>
-#include <string.h>
-#include <errno.h>
-
-struct _proc_session ps;
-struct _proc_session_reply rps;
-
-int
-qsetlogin(char *login, char *ttyname)
-{
- int v = getsid(getpid());
-
- memset(&ps, 0, sizeof(ps));
- memset(&rps, 0, sizeof(rps));
-
- ps.type = _PROC_SESSION;
- ps.subtype = _PROC_SUB_ACTION1;
- ps.sid = v;
- strcpy(ps.name, login);
-
- Send(1, &ps, &rps, sizeof(ps), sizeof(rps));
-
- if (rps.status < 0)
- return (rps.status);
-
- ps.type = _PROC_SESSION;
- ps.subtype = _PROC_SUB_ACTION2;
- ps.sid = v;
- sprintf(ps.name, "//%d%s", getnid(), ttyname);
- Send(1, &ps, &rps, sizeof(ps), sizeof(rps));
-
- return (rps.status);
-}
-#endif
diff --git a/nx-X11/programs/xterm/main.c.NX.original b/nx-X11/programs/xterm/main.c.NX.original
deleted file mode 100644
index 36068a474..000000000
--- a/nx-X11/programs/xterm/main.c.NX.original
+++ /dev/null
@@ -1,4943 +0,0 @@
-/* $XTermId: main.c,v 1.477 2005/11/13 23:10:36 tom Exp $ */
-
-#if !defined(lint) && 0
-static char *rid = "$Xorg: main.c,v 1.7 2001/02/09 02:06:02 xorgcvs Exp $";
-#endif /* lint */
-
-/*
- * W A R N I N G
- *
- * If you think you know what all of this code is doing, you are
- * probably very mistaken. There be serious and nasty dragons here.
- *
- * This client is *not* to be taken as an example of how to write X
- * Toolkit applications. It is in need of a substantial rewrite,
- * ideally to create a generic tty widget with several different parsing
- * widgets so that you can plug 'em together any way you want. Don't
- * hold your breath, though....
- */
-
-/***********************************************************
-
-Copyright 2002-2004,2005 by Thomas E. Dickey
-
- All Rights Reserved
-
-Permission is hereby granted, free of charge, to any person obtaining a
-copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name(s) of the above copyright
-holders shall not be used in advertising or otherwise to promote the
-sale, use or other dealings in this Software without prior written
-authorization.
-
-Copyright 1987, 1988 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-
-Copyright 1987, 1988 by Digital Equipment Corporation, Maynard.
-
- All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and its
-documentation for any purpose and without fee is hereby granted,
-provided that the above copyright notice appear in all copies and that
-both that copyright notice and this permission notice appear in
-supporting documentation, and that the name of Digital not be used in
-advertising or publicity pertaining to distribution of the software
-without specific, written prior permission.
-
-DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
-ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
-DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
-ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
-WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
-SOFTWARE.
-
-******************************************************************/
-
-/**************************************************************************/
-/* */
-/* Copyright (c) 2001, 2011 NoMachine, http://www.nomachine.com/. */
-/* */
-/* NX-X11, NX protocol compression and NX extensions to this software */
-/* are copyright of NoMachine. Redistribution and use of the present */
-/* software is allowed according to terms specified in the file LICENSE */
-/* which comes in the source distribution. */
-/* */
-/* Check http://www.nomachine.com/licensing.html for applicability. */
-/* */
-/* NX and NoMachine are trademarks of Medialogic S.p.A. */
-/* */
-/* All rights reserved. */
-/* */
-/**************************************************************************/
-
-/* $XFree86: xc/programs/xterm/main.c,v 3.199 2005/11/13 23:10:36 dickey Exp $ */
-
-#ifdef NX_TRANS_EXIT
-
-/*
- * Redefine the libc exit() function to be
- * sure we get rid of proxy and detect any
- * abnormal termination.
- */
-
-extern void NXTransExit(int code) __attribute__((noreturn));
-
-#define exit(code) NXTransExit(code)
-
-#endif /* #ifdef NX_TRANS_EXIT */
-
-/* main.c */
-
-#define RES_OFFSET(field) XtOffsetOf(XTERM_RESOURCE, field)
-
-#include <xterm.h>
-
-#include <X11/cursorfont.h>
-#include <X11/Xlocale.h>
-
-#if OPT_TOOLBAR
-
-#if defined(HAVE_LIB_XAW)
-#include <X11/Xaw/Form.h>
-#elif defined(HAVE_LIB_XAW3D)
-#include <X11/Xaw3d/Form.h>
-#elif defined(HAVE_LIB_NEXTAW)
-#include <X11/neXtaw/Form.h>
-#elif defined(HAVE_LIB_XAWPLUS)
-#include <X11/XawPlus/Form.h>
-#endif
-
-#endif /* OPT_TOOLBAR */
-
-#include <pwd.h>
-#include <ctype.h>
-
-#include <data.h>
-#include <error.h>
-#include <menu.h>
-#include <main.h>
-#include <xstrings.h>
-#include <xterm_io.h>
-
-#if OPT_WIDE_CHARS
-#include <charclass.h>
-#endif
-
-#ifdef __osf__
-#define USE_SYSV_SIGNALS
-#define WTMP
-#include <pty.h> /* openpty() */
-#endif
-
-#ifdef __sgi
-#include <grp.h> /* initgroups() */
-#endif
-
-#ifdef USE_ISPTS_FLAG
-static Bool IsPts = False;
-#endif
-
-#if defined(__SCO__) || defined(SVR4) || defined(_POSIX_SOURCE)
-#define USE_POSIX_SIGNALS
-#endif
-
-#if defined(SYSV) && !defined(SVR4) && !defined(ISC22) && !defined(ISC30)
-/* older SYSV systems cannot ignore SIGHUP.
- Shell hangs, or you get extra shells, or something like that */
-#define USE_SYSV_SIGHUP
-#endif
-
-#if defined(sony) && defined(bsd43) && !defined(KANJI)
-#define KANJI
-#endif
-
-#ifdef linux
-#define USE_SYSV_PGRP
-#define USE_SYSV_SIGNALS
-#define WTMP
-#ifdef __GLIBC__
-#if (__GLIBC__ > 2) || ((__GLIBC__ == 2) && (__GLIBC_MINOR__ >= 1))
-#include <pty.h>
-#endif
-#endif
-#endif
-
-#ifdef __MVS__
-#define USE_SYSV_PGRP
-#define USE_SYSV_SIGNALS
-#endif
-
-#ifdef __CYGWIN__
-#define LASTLOG
-#define WTMP
-#endif
-
-#ifdef __SCO__
-#ifndef _SVID3
-#define _SVID3
-#endif
-#endif
-
-#if defined(__GLIBC__) && !defined(linux)
-#define USE_SYSV_PGRP
-#define WTMP
-#define HAS_BSD_GROUPS
-#endif
-
-#if defined(USE_TTY_GROUP) || defined(USE_UTMP_SETGID)
-#include <grp.h>
-#endif
-
-#ifndef TTY_GROUP_NAME
-#define TTY_GROUP_NAME "tty"
-#endif
-
-#include <sys/stat.h>
-
-#ifdef Lynx
-#ifndef BSDLY
-#define BSDLY 0
-#endif
-#ifndef VTDLY
-#define VTDLY 0
-#endif
-#ifndef FFDLY
-#define FFDLY 0
-#endif
-#endif
-
-#ifdef SYSV /* { */
-
-#ifdef USE_USG_PTYS /* AT&T SYSV has no ptyio.h */
-#include <sys/stropts.h> /* for I_PUSH */
-#include <poll.h> /* for POLLIN */
-#endif /* USE_USG_PTYS */
-
-#define USE_SYSV_SIGNALS
-#define USE_SYSV_PGRP
-
-#if !defined(TIOCSWINSZ) || defined(__SCO__) || defined(__UNIXWARE__)
-#define USE_SYSV_ENVVARS /* COLUMNS/LINES vs. TERMCAP */
-#endif
-
-/*
- * now get system-specific includes
- */
-#ifdef CRAY
-#define HAS_BSD_GROUPS
-#endif
-
-#ifdef macII
-#define HAS_BSD_GROUPS
-#include <sys/ttychars.h>
-#undef USE_SYSV_ENVVARS
-#undef FIOCLEX
-#undef FIONCLEX
-#define setpgrp2 setpgrp
-#include <sgtty.h>
-#include <sys/resource.h>
-#endif
-
-#ifdef __hpux
-#define HAS_BSD_GROUPS
-#include <sys/ptyio.h>
-#endif /* __hpux */
-
-#ifdef __osf__
-#define HAS_BSD_GROUPS
-#undef USE_SYSV_PGRP
-#define setpgrp setpgid
-#endif
-
-#ifdef __sgi
-#define HAS_BSD_GROUPS
-#include <sys/sysmacros.h>
-#endif /* __sgi */
-
-#ifdef sun
-#include <sys/strredir.h>
-#endif
-
-#else /* } !SYSV { */ /* BSD systems */
-
-#ifdef __QNX__
-
-#ifndef __QNXNTO__
-#define ttyslot() 1
-#else
-#define USE_SYSV_PGRP
-extern __inline__
-ttyslot()
-{
- return 1; /* yuk */
-}
-#endif
-
-#else
-
-#if defined(__INTERIX) || defined(__APPLE__)
-#define setpgrp setpgid
-#endif
-
-#ifndef linux
-#ifndef VMS
-#ifndef USE_POSIX_TERMIOS
-#ifndef USE_ANY_SYSV_TERMIO
-#include <sgtty.h>
-#endif
-#endif /* USE_POSIX_TERMIOS */
-#ifdef Lynx
-#include <resource.h>
-#else
-#include <sys/resource.h>
-#endif
-#ifndef __INTERIX
-#define HAS_BSD_GROUPS
-#endif
-#endif /* !VMS */
-#endif /* !linux */
-
-#endif /* __QNX__ */
-
-#endif /* } !SYSV */
-
-#if defined(SVR4) && !defined(__CYGWIN__)
-#define HAS_SAVED_IDS_AND_SETEUID
-#endif
-
-#ifdef linux
-#define HAS_SAVED_IDS_AND_SETEUID
-#endif
-
-/* Xpoll.h and <sys/param.h> on glibc 2.1 systems have colliding NBBY's */
-#if defined(__GLIBC__) && ((__GLIBC__ > 2) || ((__GLIBC__ == 2) && (__GLIBC_MINOR__ >= 1)))
-#ifndef NOFILE
-#define NOFILE OPEN_MAX
-#endif
-#elif !(defined(VMS) || defined(WIN32) || defined(Lynx) || defined(__GNU__) || defined(__MVS__))
-#include <sys/param.h> /* for NOFILE */
-#endif
-
-#if defined(BSD) && (BSD >= 199103)
-#define WTMP
-#define HAS_SAVED_IDS_AND_SETEUID
-#endif
-
-#include <stdio.h>
-
-#ifdef __hpux
-#include <sys/utsname.h>
-#endif /* __hpux */
-
-#if defined(apollo) && (OSMAJORVERSION == 10) && (OSMINORVERSION < 4)
-#define ttyslot() 1
-#endif /* apollo */
-
-#if defined(UTMPX_FOR_UTMP)
-#define UTMP_STR utmpx
-#else
-#define UTMP_STR utmp
-#endif
-
-#if defined(USE_UTEMPTER)
-#include <utempter.h>
-#endif
-
-#if defined(UTMPX_FOR_UTMP)
-
-#include <utmpx.h>
-
-#define call_endutent endutxent
-#define call_getutid getutxid
-#define call_pututline pututxline
-#define call_setutent setutxent
-#define call_updwtmp updwtmpx
-
-#elif defined(HAVE_UTMP)
-
-#include <utmp.h>
-
-#if defined(_CRAY) && (OSMAJORVERSION < 8)
-extern struct utmp *getutid __((struct utmp * _Id));
-#endif
-
-#define call_endutent endutent
-#define call_getutid getutid
-#define call_pututline pututline
-#define call_setutent setutent
-#define call_updwtmp updwtmp
-
-#endif
-
-#if defined(USE_LASTLOG) && defined(HAVE_LASTLOG_H)
-#include <lastlog.h> /* caution: glibc 2.3.5 includes utmp.h here */
-#endif
-
-#ifndef USE_LASTLOGX
-#if defined(_NETBSD_SOURCE) && defined(_PATH_LASTLOGX)
-#define USE_LASTLOGX 1
-#endif
-#endif
-
-#ifdef PUCC_PTYD
-#include <local/openpty.h>
-#endif /* PUCC_PTYD */
-
-#if defined(__OpenBSD__) || defined(__NetBSD__) || defined(__APPLE__)
-#include <util.h> /* openpty() */
-#endif
-
-#ifdef __FreeBSD__
-#include <libutil.h> /* openpty() */
-#endif
-
-#if !defined(UTMP_FILENAME)
-#if defined(UTMP_FILE)
-#define UTMP_FILENAME UTMP_FILE
-#elif defined(_PATH_UTMP)
-#define UTMP_FILENAME _PATH_UTMP
-#else
-#define UTMP_FILENAME "/etc/utmp"
-#endif
-#endif
-
-#ifndef LASTLOG_FILENAME
-#ifdef _PATH_LASTLOG
-#define LASTLOG_FILENAME _PATH_LASTLOG
-#else
-#define LASTLOG_FILENAME "/usr/adm/lastlog" /* only on BSD systems */
-#endif
-#endif
-
-#if !defined(WTMP_FILENAME)
-#if defined(WTMP_FILE)
-#define WTMP_FILENAME WTMP_FILE
-#elif defined(_PATH_WTMP)
-#define WTMP_FILENAME _PATH_WTMP
-#elif defined(SYSV)
-#define WTMP_FILENAME "/etc/wtmp"
-#else
-#define WTMP_FILENAME "/usr/adm/wtmp"
-#endif
-#endif
-
-#include <signal.h>
-
-#if defined(__SCO__) || (defined(ISC) && !defined(_POSIX_SOURCE))
-#undef SIGTSTP /* defined, but not the BSD way */
-#endif
-
-#ifdef SIGTSTP
-#include <sys/wait.h>
-#endif
-
-#if defined(__SCO__) || defined(__UNIXWARE__)
-#undef ECHOKE
-#undef ECHOCTL
-#endif
-
-#ifdef X_NOT_POSIX
-extern long lseek();
-#if defined(USG) || defined(SVR4)
-extern unsigned sleep();
-#else
-extern void sleep();
-#endif
-extern char *ttyname();
-#endif
-
-#ifdef SYSV
-extern char *ptsname(int);
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
- extern int tgetent(char *ptr, char *name);
- extern char *tgetstr(char *name, char **ptr);
-
-#ifdef __cplusplus
-}
-#endif
-#ifndef VMS
-static SIGNAL_T reapchild(int n);
-static int spawn(void);
-static void remove_termcap_entry(char *buf, char *str);
-#ifdef USE_PTY_SEARCH
-static int pty_search(int *pty);
-#endif
-#endif /* ! VMS */
-
-static int get_pty(int *pty, char *from);
-static void get_terminal(void);
-static void resize(TScreen * s, char *oldtc, char *newtc);
-static void set_owner(char *device, uid_t uid, gid_t gid, mode_t mode);
-
-static Bool added_utmp_entry = False;
-
-#if defined(USE_UTMP_SETGID)
-static int utmpGid = -1;
-static int really_get_pty(int *pty, char *from);
-#endif
-
-#if defined(USE_SYSV_UTMP) && !defined(USE_UTEMPTER)
-static Bool xterm_exiting = False;
-#endif
-
-static char *explicit_shname = NULL;
-
-/*
-** Ordinarily it should be okay to omit the assignment in the following
-** statement. Apparently the c89 compiler on AIX 4.1.3 has a bug, or does
-** it? Without the assignment though the compiler will init command_to_exec
-** to 0xffffffff instead of NULL; and subsequent usage, e.g. in spawn() to
-** SEGV.
-*/
-static char **command_to_exec = NULL;
-
-#if OPT_LUIT_PROG
-static char **command_to_exec_with_luit = NULL;
-#endif
-
-#define TERMCAP_ERASE "kb"
-#define VAL_INITIAL_ERASE A2E(8)
-
-/* choose a nice default value for speed - if we make it too low, users who
- * mistakenly use $TERM set to vt100 will get padding delays. Setting it to a
- * higher value is not useful since legacy applications (termcap) that care
- * about padding generally store the code in a short, which does not have
- * enough bits for the extended values.
- */
-#ifdef B38400 /* everyone should define this */
-#define VAL_LINE_SPEED B38400
-#else /* ...but xterm's used this for a long time */
-#define VAL_LINE_SPEED B9600
-#endif
-
-/* allow use of system default characters if defined and reasonable */
-#ifndef CBRK
-#define CBRK 0
-#endif
-#ifndef CDSUSP
-#define CDSUSP CONTROL('Y')
-#endif
-#ifndef CEOF
-#define CEOF CONTROL('D')
-#endif
-#ifndef CEOL
-#define CEOL 0
-#endif
-#ifndef CFLUSH
-#define CFLUSH CONTROL('O')
-#endif
-#ifndef CINTR
-#define CINTR 0177
-#endif
-#ifndef CKILL
-#define CKILL '@'
-#endif
-#ifndef CLNEXT
-#define CLNEXT CONTROL('V')
-#endif
-#ifndef CNUL
-#define CNUL 0
-#endif
-#ifndef CQUIT
-#define CQUIT CONTROL('\\')
-#endif
-#ifndef CRPRNT
-#define CRPRNT CONTROL('R')
-#endif
-#ifndef CSTART
-#define CSTART CONTROL('Q')
-#endif
-#ifndef CSTOP
-#define CSTOP CONTROL('S')
-#endif
-#ifndef CSUSP
-#define CSUSP CONTROL('Z')
-#endif
-#ifndef CSWTCH
-#define CSWTCH 0
-#endif
-#ifndef CWERASE
-#define CWERASE CONTROL('W')
-#endif
-
-#ifdef USE_ANY_SYSV_TERMIO
-#define TERMIO_STRUCT struct termio
-#define ttySetAttr(fd, datap) ioctl(fd, TCSETA, datap)
-#define ttyGetAttr(fd, datap) ioctl(fd, TCGETA, datap)
-#elif defined(USE_POSIX_TERMIOS)
-#define TERMIO_STRUCT struct termios
-#define ttySetAttr(fd, datap) tcsetattr(fd, TCSANOW, datap)
-#define ttyGetAttr(fd, datap) tcgetattr(fd, datap)
-#endif /* USE_ANY_SYSV_TERMIO */
-
-#ifndef VMS
-#ifdef TERMIO_STRUCT
-/* The following structures are initialized in main() in order
-** to eliminate any assumptions about the internal order of their
-** contents.
-*/
-static TERMIO_STRUCT d_tio;
-
-#ifdef HAS_LTCHARS
-static struct ltchars d_ltc;
-#endif /* HAS_LTCHARS */
-
-#ifdef TIOCLSET
-static unsigned int d_lmode;
-#endif /* TIOCLSET */
-
-#else /* !TERMIO_STRUCT */
-static struct sgttyb d_sg =
-{
- 0, 0, 0177, CKILL, (EVENP | ODDP | ECHO | XTABS | CRMOD)
-};
-static struct tchars d_tc =
-{
- CINTR, CQUIT, CSTART,
- CSTOP, CEOF, CBRK
-};
-static struct ltchars d_ltc =
-{
- CSUSP, CDSUSP, CRPRNT,
- CFLUSH, CWERASE, CLNEXT
-};
-static int d_disipline = NTTYDISC;
-static long int d_lmode = LCRTBS | LCRTERA | LCRTKIL | LCTLECH;
-#ifdef sony
-static long int d_jmode = KM_SYSSJIS | KM_ASCII;
-static struct jtchars d_jtc =
-{
- 'J', 'B'
-};
-#endif /* sony */
-#endif /* TERMIO_STRUCT */
-#endif /* ! VMS */
-
-/*
- * SYSV has the termio.c_cc[V] and ltchars; BSD has tchars and ltchars;
- * SVR4 has only termio.c_cc, but it includes everything from ltchars.
- * POSIX termios has termios.c_cc, which is similar to SVR4.
- */
-#define TTYMODE(name) { name, sizeof(name)-1, 0, 0 }
-static int override_tty_modes = 0;
-/* *INDENT-OFF* */
-static struct _xttymodes {
- char *name;
- size_t len;
- int set;
- Char value;
-} ttymodelist[] = {
- TTYMODE("intr"), /* tchars.t_intrc ; VINTR */
-#define XTTYMODE_intr 0
- TTYMODE("quit"), /* tchars.t_quitc ; VQUIT */
-#define XTTYMODE_quit 1
- TTYMODE("erase"), /* sgttyb.sg_erase ; VERASE */
-#define XTTYMODE_erase 2
- TTYMODE("kill"), /* sgttyb.sg_kill ; VKILL */
-#define XTTYMODE_kill 3
- TTYMODE("eof"), /* tchars.t_eofc ; VEOF */
-#define XTTYMODE_eof 4
- TTYMODE("eol"), /* VEOL */
-#define XTTYMODE_eol 5
- TTYMODE("swtch"), /* VSWTCH */
-#define XTTYMODE_swtch 6
- TTYMODE("start"), /* tchars.t_startc ; VSTART */
-#define XTTYMODE_start 7
- TTYMODE("stop"), /* tchars.t_stopc ; VSTOP */
-#define XTTYMODE_stop 8
- TTYMODE("brk"), /* tchars.t_brkc */
-#define XTTYMODE_brk 9
- TTYMODE("susp"), /* ltchars.t_suspc ; VSUSP */
-#define XTTYMODE_susp 10
- TTYMODE("dsusp"), /* ltchars.t_dsuspc ; VDSUSP */
-#define XTTYMODE_dsusp 11
- TTYMODE("rprnt"), /* ltchars.t_rprntc ; VREPRINT */
-#define XTTYMODE_rprnt 12
- TTYMODE("flush"), /* ltchars.t_flushc ; VDISCARD */
-#define XTTYMODE_flush 13
- TTYMODE("weras"), /* ltchars.t_werasc ; VWERASE */
-#define XTTYMODE_weras 14
- TTYMODE("lnext"), /* ltchars.t_lnextc ; VLNEXT */
-#define XTTYMODE_lnext 15
- TTYMODE("status"), /* VSTATUS */
-#define XTTYMODE_status 16
- TTYMODE("erase2"), /* VERASE2 */
-#define XTTYMODE_erase2 17
- TTYMODE("eol2"), /* VEOL2 */
-#define XTTYMODE_eol2 18
- { NULL, 0, 0, '\0' }, /* end of data */
-};
-/* *INDENT-ON* */
-
-#define TMODE(ind,var) if (ttymodelist[ind].set) var = ttymodelist[ind].value
-
-static int parse_tty_modes(char *s, struct _xttymodes *modelist);
-
-#ifdef USE_SYSV_UTMP
-#if (defined(AIXV3) && (OSMAJORVERSION < 4)) && !(defined(getutid))
-extern struct utmp *getutid();
-#endif /* AIXV3 */
-
-#else /* not USE_SYSV_UTMP */
-static char etc_utmp[] = UTMP_FILENAME;
-#endif /* USE_SYSV_UTMP */
-
-#ifndef USE_UTEMPTER
-#ifdef USE_LASTLOG
-static char etc_lastlog[] = LASTLOG_FILENAME;
-#endif
-
-#ifdef WTMP
-static char etc_wtmp[] = WTMP_FILENAME;
-#endif
-#endif /* !USE_UTEMPTER */
-
-/*
- * Some people with 4.3bsd /bin/login seem to like to use login -p -f user
- * to implement xterm -ls. They can turn on USE_LOGIN_DASH_P and turn off
- * WTMP and USE_LASTLOG.
- */
-#ifdef USE_LOGIN_DASH_P
-#ifndef LOGIN_FILENAME
-#define LOGIN_FILENAME "/bin/login"
-#endif
-static char bin_login[] = LOGIN_FILENAME;
-#endif
-
-static char passedPty[PTYCHARLEN + 1]; /* name if pty if slave */
-
-#if defined(TIOCCONS) || defined(SRIOCSREDIR)
-static int Console;
-#include <X11/Xmu/SysUtil.h> /* XmuGetHostname */
-#define MIT_CONSOLE_LEN 12
-#define MIT_CONSOLE "MIT_CONSOLE_"
-static char mit_console_name[255 + MIT_CONSOLE_LEN + 1] = MIT_CONSOLE;
-static Atom mit_console;
-#endif /* TIOCCONS */
-
-#ifndef USE_SYSV_UTMP
-static int tslot;
-#endif /* USE_SYSV_UTMP */
-static sigjmp_buf env;
-
-#define SetUtmpHost(dst, screen) \
- { \
- char host[sizeof(dst) + 1]; \
- strncpy(host, DisplayString(screen->display), sizeof(host)); \
- TRACE(("DisplayString(%s)\n", host)); \
- if (!resource.utmpDisplayId) { \
- char *endptr = strrchr(host, ':'); \
- if (endptr) { \
- TRACE(("trimming display-id '%s'\n", host)); \
- *endptr = '\0'; \
- } \
- } \
- strncpy(dst, host, sizeof(dst)); \
- }
-
-/* used by VT (charproc.c) */
-
-static XtResource application_resources[] =
-{
- Sres("name", "Name", xterm_name, DFT_TERMTYPE),
- Sres("iconGeometry", "IconGeometry", icon_geometry, NULL),
- Sres(XtNtitle, XtCTitle, title, NULL),
- Sres(XtNiconName, XtCIconName, icon_name, NULL),
- Sres("termName", "TermName", term_name, NULL),
- Sres("ttyModes", "TtyModes", tty_modes, NULL),
- Bres("hold", "Hold", hold_screen, False),
- Bres("utmpInhibit", "UtmpInhibit", utmpInhibit, False),
- Bres("utmpDisplayId", "UtmpDisplayId", utmpDisplayId, True),
- Bres("messages", "Messages", messages, True),
- Ires("minBufSize", "MinBufSize", minBufSize, 4096),
- Ires("maxBufSize", "MaxBufSize", maxBufSize, 32768),
- Sres("keyboardType", "KeyboardType", keyboardType, "unknown"),
- Bres("sunFunctionKeys", "SunFunctionKeys", sunFunctionKeys, False),
-#if OPT_SUNPC_KBD
- Bres("sunKeyboard", "SunKeyboard", sunKeyboard, False),
-#endif
-#if OPT_HP_FUNC_KEYS
- Bres("hpFunctionKeys", "HpFunctionKeys", hpFunctionKeys, False),
-#endif
-#if OPT_SCO_FUNC_KEYS
- Bres("scoFunctionKeys", "ScoFunctionKeys", scoFunctionKeys, False),
-#endif
-#if OPT_INITIAL_ERASE
- Bres("ptyInitialErase", "PtyInitialErase", ptyInitialErase, DEF_INITIAL_ERASE),
- Bres("backarrowKeyIsErase", "BackarrowKeyIsErase", backarrow_is_erase, DEF_BACKARO_ERASE),
-#endif
- Bres("waitForMap", "WaitForMap", wait_for_map, False),
- Bres("useInsertMode", "UseInsertMode", useInsertMode, False),
-#if OPT_ZICONBEEP
- Ires("zIconBeep", "ZIconBeep", zIconBeep, 0),
-#endif
-#if OPT_PTY_HANDSHAKE
- Bres("ptyHandshake", "PtyHandshake", ptyHandshake, True),
-#endif
-#if OPT_SAME_NAME
- Bres("sameName", "SameName", sameName, True),
-#endif
-#if OPT_SESSION_MGT
- Bres("sessionMgt", "SessionMgt", sessionMgt, True),
-#endif
-#if OPT_TOOLBAR
- Bres(XtNtoolBar, XtCToolBar, toolBar, True),
-#endif
-};
-
-static char *fallback_resources[] =
-{
- "*SimpleMenu*menuLabel.vertSpace: 100",
- "*SimpleMenu*HorizontalMargins: 16",
- "*SimpleMenu*Sme.height: 16",
- "*SimpleMenu*Cursor: left_ptr",
- "*mainMenu.Label: Main Options (no app-defaults)",
- "*vtMenu.Label: VT Options (no app-defaults)",
- "*fontMenu.Label: VT Fonts (no app-defaults)",
-#if OPT_TEK4014
- "*tekMenu.Label: Tek Options (no app-defaults)",
-#endif
- NULL
-};
-
-/* Command line options table. Only resources are entered here...there is a
- pass over the remaining options after XrmParseCommand is let loose. */
-/* *INDENT-OFF* */
-static XrmOptionDescRec optionDescList[] = {
-{"-geometry", "*vt100.geometry",XrmoptionSepArg, (caddr_t) NULL},
-{"-132", "*c132", XrmoptionNoArg, (caddr_t) "on"},
-{"+132", "*c132", XrmoptionNoArg, (caddr_t) "off"},
-{"-ah", "*alwaysHighlight", XrmoptionNoArg, (caddr_t) "on"},
-{"+ah", "*alwaysHighlight", XrmoptionNoArg, (caddr_t) "off"},
-{"-aw", "*autoWrap", XrmoptionNoArg, (caddr_t) "on"},
-{"+aw", "*autoWrap", XrmoptionNoArg, (caddr_t) "off"},
-#ifndef NO_ACTIVE_ICON
-{"-ai", "*activeIcon", XrmoptionNoArg, (caddr_t) "off"},
-{"+ai", "*activeIcon", XrmoptionNoArg, (caddr_t) "on"},
-#endif /* NO_ACTIVE_ICON */
-{"-b", "*internalBorder",XrmoptionSepArg, (caddr_t) NULL},
-{"-bc", "*cursorBlink", XrmoptionNoArg, (caddr_t) "on"},
-{"+bc", "*cursorBlink", XrmoptionNoArg, (caddr_t) "off"},
-{"-bcf", "*cursorOffTime",XrmoptionSepArg, (caddr_t) NULL},
-{"-bcn", "*cursorOnTime",XrmoptionSepArg, (caddr_t) NULL},
-{"-bdc", "*colorBDMode", XrmoptionNoArg, (caddr_t) "off"},
-{"+bdc", "*colorBDMode", XrmoptionNoArg, (caddr_t) "on"},
-{"-cb", "*cutToBeginningOfLine", XrmoptionNoArg, (caddr_t) "off"},
-{"+cb", "*cutToBeginningOfLine", XrmoptionNoArg, (caddr_t) "on"},
-{"-cc", "*charClass", XrmoptionSepArg, (caddr_t) NULL},
-{"-cm", "*colorMode", XrmoptionNoArg, (caddr_t) "off"},
-{"+cm", "*colorMode", XrmoptionNoArg, (caddr_t) "on"},
-{"-cn", "*cutNewline", XrmoptionNoArg, (caddr_t) "off"},
-{"+cn", "*cutNewline", XrmoptionNoArg, (caddr_t) "on"},
-{"-cr", "*cursorColor", XrmoptionSepArg, (caddr_t) NULL},
-{"-cu", "*curses", XrmoptionNoArg, (caddr_t) "on"},
-{"+cu", "*curses", XrmoptionNoArg, (caddr_t) "off"},
-{"-dc", "*dynamicColors",XrmoptionNoArg, (caddr_t) "off"},
-{"+dc", "*dynamicColors",XrmoptionNoArg, (caddr_t) "on"},
-{"-fb", "*boldFont", XrmoptionSepArg, (caddr_t) NULL},
-{"-fbb", "*freeBoldBox", XrmoptionNoArg, (caddr_t)"off"},
-{"+fbb", "*freeBoldBox", XrmoptionNoArg, (caddr_t)"on"},
-{"-fbx", "*forceBoxChars", XrmoptionNoArg, (caddr_t)"off"},
-{"+fbx", "*forceBoxChars", XrmoptionNoArg, (caddr_t)"on"},
-#ifndef NO_ACTIVE_ICON
-{"-fi", "*iconFont", XrmoptionSepArg, (caddr_t) NULL},
-#endif /* NO_ACTIVE_ICON */
-#if OPT_RENDERFONT
-{"-fa", "*faceName", XrmoptionSepArg, (caddr_t) NULL},
-{"-fd", "*faceNameDoublesize", XrmoptionSepArg, (caddr_t) NULL},
-{"-fs", "*faceSize", XrmoptionSepArg, (caddr_t) NULL},
-#endif
-#if OPT_WIDE_CHARS
-{"-fw", "*wideFont", XrmoptionSepArg, (caddr_t) NULL},
-{"-fwb", "*wideBoldFont", XrmoptionSepArg, (caddr_t) NULL},
-#endif
-#if OPT_INPUT_METHOD
-{"-fx", "*ximFont", XrmoptionSepArg, (caddr_t) NULL},
-#endif
-#if OPT_HIGHLIGHT_COLOR
-{"-hc", "*highlightColor", XrmoptionSepArg, (caddr_t) NULL},
-#endif
-#if OPT_HP_FUNC_KEYS
-{"-hf", "*hpFunctionKeys",XrmoptionNoArg, (caddr_t) "on"},
-{"+hf", "*hpFunctionKeys",XrmoptionNoArg, (caddr_t) "off"},
-#endif
-{"-hold", "*hold", XrmoptionNoArg, (caddr_t) "on"},
-{"+hold", "*hold", XrmoptionNoArg, (caddr_t) "off"},
-#if OPT_INITIAL_ERASE
-{"-ie", "*ptyInitialErase", XrmoptionNoArg, (caddr_t) "on"},
-{"+ie", "*ptyInitialErase", XrmoptionNoArg, (caddr_t) "off"},
-#endif
-{"-j", "*jumpScroll", XrmoptionNoArg, (caddr_t) "on"},
-{"+j", "*jumpScroll", XrmoptionNoArg, (caddr_t) "off"},
-#if OPT_C1_PRINT
-{"-k8", "*allowC1Printable", XrmoptionNoArg, (caddr_t) "on"},
-{"+k8", "*allowC1Printable", XrmoptionNoArg, (caddr_t) "off"},
-#endif
-{"-kt", "*keyboardType", XrmoptionSepArg, (caddr_t) NULL},
-{"+kt", "*keyboardType", XrmoptionSepArg, (caddr_t) NULL},
-/* parse logging options anyway for compatibility */
-{"-l", "*logging", XrmoptionNoArg, (caddr_t) "on"},
-{"+l", "*logging", XrmoptionNoArg, (caddr_t) "off"},
-{"-lf", "*logFile", XrmoptionSepArg, (caddr_t) NULL},
-{"-ls", "*loginShell", XrmoptionNoArg, (caddr_t) "on"},
-{"+ls", "*loginShell", XrmoptionNoArg, (caddr_t) "off"},
-{"-mb", "*marginBell", XrmoptionNoArg, (caddr_t) "on"},
-{"+mb", "*marginBell", XrmoptionNoArg, (caddr_t) "off"},
-{"-mc", "*multiClickTime", XrmoptionSepArg, (caddr_t) NULL},
-{"-mesg", "*messages", XrmoptionNoArg, (caddr_t) "off"},
-{"+mesg", "*messages", XrmoptionNoArg, (caddr_t) "on"},
-{"-ms", "*pointerColor",XrmoptionSepArg, (caddr_t) NULL},
-{"-nb", "*nMarginBell", XrmoptionSepArg, (caddr_t) NULL},
-{"-nul", "*underLine", XrmoptionNoArg, (caddr_t) "off"},
-{"+nul", "*underLine", XrmoptionNoArg, (caddr_t) "on"},
-{"-pc", "*boldColors", XrmoptionNoArg, (caddr_t) "on"},
-{"+pc", "*boldColors", XrmoptionNoArg, (caddr_t) "off"},
-{"-rw", "*reverseWrap", XrmoptionNoArg, (caddr_t) "on"},
-{"+rw", "*reverseWrap", XrmoptionNoArg, (caddr_t) "off"},
-{"-s", "*multiScroll", XrmoptionNoArg, (caddr_t) "on"},
-{"+s", "*multiScroll", XrmoptionNoArg, (caddr_t) "off"},
-{"-sb", "*scrollBar", XrmoptionNoArg, (caddr_t) "on"},
-{"+sb", "*scrollBar", XrmoptionNoArg, (caddr_t) "off"},
-#ifdef SCROLLBAR_RIGHT
-{"-leftbar", "*rightScrollBar", XrmoptionNoArg, (caddr_t) "off"},
-{"-rightbar", "*rightScrollBar", XrmoptionNoArg, (caddr_t) "on"},
-#endif
-{"-rvc", "*colorRVMode", XrmoptionNoArg, (caddr_t) "off"},
-{"+rvc", "*colorRVMode", XrmoptionNoArg, (caddr_t) "on"},
-{"-sf", "*sunFunctionKeys", XrmoptionNoArg, (caddr_t) "on"},
-{"+sf", "*sunFunctionKeys", XrmoptionNoArg, (caddr_t) "off"},
-{"-si", "*scrollTtyOutput", XrmoptionNoArg, (caddr_t) "off"},
-{"+si", "*scrollTtyOutput", XrmoptionNoArg, (caddr_t) "on"},
-{"-sk", "*scrollKey", XrmoptionNoArg, (caddr_t) "on"},
-{"+sk", "*scrollKey", XrmoptionNoArg, (caddr_t) "off"},
-{"-sl", "*saveLines", XrmoptionSepArg, (caddr_t) NULL},
-#if OPT_SUNPC_KBD
-{"-sp", "*sunKeyboard", XrmoptionNoArg, (caddr_t) "on"},
-{"+sp", "*sunKeyboard", XrmoptionNoArg, (caddr_t) "off"},
-#endif
-#if OPT_TEK4014
-{"-t", "*tekStartup", XrmoptionNoArg, (caddr_t) "on"},
-{"+t", "*tekStartup", XrmoptionNoArg, (caddr_t) "off"},
-#endif
-{"-ti", "*decTerminalID",XrmoptionSepArg, (caddr_t) NULL},
-{"-tm", "*ttyModes", XrmoptionSepArg, (caddr_t) NULL},
-{"-tn", "*termName", XrmoptionSepArg, (caddr_t) NULL},
-#if OPT_WIDE_CHARS
-{"-u8", "*utf8", XrmoptionNoArg, (caddr_t) "2"},
-{"+u8", "*utf8", XrmoptionNoArg, (caddr_t) "0"},
-#endif
-#if OPT_LUIT_PROG
-{"-lc", "*locale", XrmoptionNoArg, (caddr_t) "on"},
-{"+lc", "*locale", XrmoptionNoArg, (caddr_t) "off"},
-{"-lcc", "*localeFilter",XrmoptionSepArg, (caddr_t) NULL},
-{"-en", "*locale", XrmoptionSepArg, (caddr_t) NULL},
-#endif
-{"-ulc", "*colorULMode", XrmoptionNoArg, (caddr_t) "off"},
-{"+ulc", "*colorULMode", XrmoptionNoArg, (caddr_t) "on"},
-{"-ulit", "*italicULMode", XrmoptionNoArg, (caddr_t) "off"},
-{"+ulit", "*italicULMode", XrmoptionNoArg, (caddr_t) "on"},
-{"-ut", "*utmpInhibit", XrmoptionNoArg, (caddr_t) "on"},
-{"+ut", "*utmpInhibit", XrmoptionNoArg, (caddr_t) "off"},
-{"-im", "*useInsertMode", XrmoptionNoArg, (caddr_t) "on"},
-{"+im", "*useInsertMode", XrmoptionNoArg, (caddr_t) "off"},
-{"-vb", "*visualBell", XrmoptionNoArg, (caddr_t) "on"},
-{"+vb", "*visualBell", XrmoptionNoArg, (caddr_t) "off"},
-{"-pob", "*popOnBell", XrmoptionNoArg, (caddr_t) "on"},
-{"+pob", "*popOnBell", XrmoptionNoArg, (caddr_t) "off"},
-#if OPT_WIDE_CHARS
-{"-wc", "*wideChars", XrmoptionNoArg, (caddr_t) "on"},
-{"+wc", "*wideChars", XrmoptionNoArg, (caddr_t) "off"},
-{"-mk_width", "*mkWidth", XrmoptionNoArg, (caddr_t) "on"},
-{"+mk_width", "*mkWidth", XrmoptionNoArg, (caddr_t) "off"},
-{"-cjk_width", "*cjkWidth", XrmoptionNoArg, (caddr_t) "on"},
-{"+cjk_width", "*cjkWidth", XrmoptionNoArg, (caddr_t) "off"},
-#endif
-{"-wf", "*waitForMap", XrmoptionNoArg, (caddr_t) "on"},
-{"+wf", "*waitForMap", XrmoptionNoArg, (caddr_t) "off"},
-#if OPT_ZICONBEEP
-{"-ziconbeep", "*zIconBeep", XrmoptionSepArg, (caddr_t) NULL},
-#endif
-#if OPT_SAME_NAME
-{"-samename", "*sameName", XrmoptionNoArg, (caddr_t) "on"},
-{"+samename", "*sameName", XrmoptionNoArg, (caddr_t) "off"},
-#endif
-#if OPT_SESSION_MGT
-{"-sm", "*sessionMgt", XrmoptionNoArg, (caddr_t) "on"},
-{"+sm", "*sessionMgt", XrmoptionNoArg, (caddr_t) "off"},
-#endif
-#if OPT_TOOLBAR
-{"-tb", "*"XtNtoolBar, XrmoptionNoArg, (caddr_t) "on"},
-{"+tb", "*"XtNtoolBar, XrmoptionNoArg, (caddr_t) "off"},
-#endif
-/* options that we process ourselves */
-{"-help", NULL, XrmoptionSkipNArgs, (caddr_t) NULL},
-{"-version", NULL, XrmoptionSkipNArgs, (caddr_t) NULL},
-{"-class", NULL, XrmoptionSkipArg, (caddr_t) NULL},
-{"-e", NULL, XrmoptionSkipLine, (caddr_t) NULL},
-{"-into", NULL, XrmoptionSkipArg, (caddr_t) NULL},
-/* bogus old compatibility stuff for which there are
- standard XtOpenApplication options now */
-{"%", "*tekGeometry", XrmoptionStickyArg, (caddr_t) NULL},
-{"#", ".iconGeometry",XrmoptionStickyArg, (caddr_t) NULL},
-{"-T", ".title", XrmoptionSepArg, (caddr_t) NULL},
-{"-n", "*iconName", XrmoptionSepArg, (caddr_t) NULL},
-{"-r", "*reverseVideo",XrmoptionNoArg, (caddr_t) "on"},
-{"+r", "*reverseVideo",XrmoptionNoArg, (caddr_t) "off"},
-{"-rv", "*reverseVideo",XrmoptionNoArg, (caddr_t) "on"},
-{"+rv", "*reverseVideo",XrmoptionNoArg, (caddr_t) "off"},
-{"-w", ".borderWidth", XrmoptionSepArg, (caddr_t) NULL},
-};
-
-static OptionHelp xtermOptions[] = {
-{ "-version", "print the version number" },
-{ "-help", "print out this message" },
-{ "-display displayname", "X server to contact" },
-{ "-geometry geom", "size (in characters) and position" },
-{ "-/+rv", "turn on/off reverse video" },
-{ "-bg color", "background color" },
-{ "-fg color", "foreground color" },
-{ "-bd color", "border color" },
-{ "-bw number", "border width in pixels" },
-{ "-fn fontname", "normal text font" },
-{ "-fb fontname", "bold text font" },
-{ "-/+fbb", "turn on/off normal/bold font comparison inhibit"},
-{ "-/+fbx", "turn off/on linedrawing characters"},
-#if OPT_RENDERFONT
-{ "-fa pattern", "FreeType font-selection pattern" },
-{ "-fd pattern", "FreeType Doublesize font-selection pattern" },
-{ "-fs size", "FreeType font-size" },
-#endif
-#if OPT_WIDE_CHARS
-{ "-fw fontname", "doublewidth text font" },
-{ "-fwb fontname", "doublewidth bold text font" },
-#endif
-#if OPT_INPUT_METHOD
-{ "-fx fontname", "XIM fontset" },
-#endif
-{ "-iconic", "start iconic" },
-{ "-name string", "client instance, icon, and title strings" },
-{ "-class string", "class string (XTerm)" },
-{ "-title string", "title string" },
-{ "-xrm resourcestring", "additional resource specifications" },
-{ "-/+132", "turn on/off 80/132 column switching" },
-{ "-/+ah", "turn on/off always highlight" },
-#ifndef NO_ACTIVE_ICON
-{ "-/+ai", "turn off/on active icon" },
-{ "-fi fontname", "icon font for active icon" },
-#endif /* NO_ACTIVE_ICON */
-{ "-b number", "internal border in pixels" },
-{ "-/+bc", "turn on/off text cursor blinking" },
-{ "-bcf milliseconds", "time text cursor is off when blinking"},
-{ "-bcn milliseconds", "time text cursor is on when blinking"},
-{ "-/+bdc", "turn off/on display of bold as color"},
-{ "-/+cb", "turn on/off cut-to-beginning-of-line inhibit" },
-{ "-cc classrange", "specify additional character classes" },
-{ "-/+cm", "turn off/on ANSI color mode" },
-{ "-/+cn", "turn on/off cut newline inhibit" },
-{ "-cr color", "text cursor color" },
-{ "-/+cu", "turn on/off curses emulation" },
-{ "-/+dc", "turn off/on dynamic color selection" },
-#if OPT_HIGHLIGHT_COLOR
-{ "-hc color", "selection background color" },
-#endif
-#if OPT_HP_FUNC_KEYS
-{ "-/+hf", "turn on/off HP Function Key escape codes" },
-#endif
-{ "-/+hold", "turn on/off logic that retains window after exit" },
-#if OPT_INITIAL_ERASE
-{ "-/+ie", "turn on/off initialization of 'erase' from pty" },
-#endif
-{ "-/+im", "use insert mode for TERMCAP" },
-{ "-/+j", "turn on/off jump scroll" },
-#if OPT_C1_PRINT
-{ "-/+k8", "turn on/off C1-printable classification"},
-#endif
-{ "-kt keyboardtype", "set keyboard type:" KEYBOARD_TYPES },
-#ifdef ALLOWLOGGING
-{ "-/+l", "turn on/off logging" },
-{ "-lf filename", "logging filename" },
-#else
-{ "-/+l", "turn on/off logging (not supported)" },
-{ "-lf filename", "logging filename (not supported)" },
-#endif
-{ "-/+ls", "turn on/off login shell" },
-{ "-/+mb", "turn on/off margin bell" },
-{ "-mc milliseconds", "multiclick time in milliseconds" },
-{ "-/+mesg", "forbid/allow messages" },
-{ "-ms color", "pointer color" },
-{ "-nb number", "margin bell in characters from right end" },
-{ "-/+nul", "turn off/on display of underlining" },
-{ "-/+aw", "turn on/off auto wraparound" },
-{ "-/+pc", "turn on/off PC-style bold colors" },
-{ "-/+rw", "turn on/off reverse wraparound" },
-{ "-/+s", "turn on/off multiscroll" },
-{ "-/+sb", "turn on/off scrollbar" },
-#ifdef SCROLLBAR_RIGHT
-{ "-rightbar", "force scrollbar right (default left)" },
-{ "-leftbar", "force scrollbar left" },
-#endif
-{ "-/+rvc", "turn off/on display of reverse as color" },
-{ "-/+sf", "turn on/off Sun Function Key escape codes" },
-{ "-/+si", "turn on/off scroll-on-tty-output inhibit" },
-{ "-/+sk", "turn on/off scroll-on-keypress" },
-{ "-sl number", "number of scrolled lines to save" },
-#if OPT_SUNPC_KBD
-{ "-/+sp", "turn on/off Sun/PC Function/Keypad mapping" },
-#endif
-#if OPT_TEK4014
-{ "-/+t", "turn on/off Tek emulation window" },
-#endif
-#if OPT_TOOLBAR
-{ "-/+tb", "turn on/off toolbar" },
-#endif
-{ "-ti termid", "terminal identifier" },
-{ "-tm string", "terminal mode keywords and characters" },
-{ "-tn name", "TERM environment variable name" },
-#if OPT_WIDE_CHARS
-{ "-/+u8", "turn on/off UTF-8 mode (implies wide-characters)" },
-#endif
-#if OPT_LUIT_PROG
-{ "-/+lc", "turn on/off locale mode using luit" },
-{ "-lcc path", "filename of locale converter (" DEFLOCALEFILTER ")" },
-#endif
-{ "-/+ulc", "turn off/on display of underline as color" },
-{ "-/+ulit", "turn off/on display of underline as italics" },
-#ifdef HAVE_UTMP
-{ "-/+ut", "turn on/off utmp support" },
-#else
-{ "-/+ut", "turn on/off utmp support (not available)" },
-#endif
-{ "-/+vb", "turn on/off visual bell" },
-{ "-/+pob", "turn on/off pop on bell" },
-#if OPT_WIDE_CHARS
-{ "-/+wc", "turn on/off wide-character mode" },
-{ "-/+mk_width", "turn on/off simple width convention" },
-{ "-/+cjk_width", "turn on/off legacy CJK width convention" },
-#endif
-{ "-/+wf", "turn on/off wait for map before command exec" },
-{ "-e command args ...", "command to execute" },
-#if OPT_TEK4014
-{ "%geom", "Tek window geometry" },
-#endif
-{ "#geom", "icon window geometry" },
-{ "-T string", "title name for window" },
-{ "-n string", "icon name for window" },
-#if defined(TIOCCONS) || defined(SRIOCSREDIR)
-{ "-C", "intercept console messages" },
-#else
-{ "-C", "intercept console messages (not supported)" },
-#endif
-{ "-Sccn", "slave mode on \"ttycc\", file descriptor \"n\"" },
-{ "-into windowId", "use the window id given to -into as the parent window rather than the default root window" },
-#if OPT_ZICONBEEP
-{ "-ziconbeep percent", "beep and flag icon of window having hidden output" },
-#endif
-#if OPT_SAME_NAME
-{ "-/+samename", "turn on/off the no-flicker option for title and icon name" },
-#endif
-#if OPT_SESSION_MGT
-{ "-/+sm", "turn on/off the session-management support" },
-#endif
-{ NULL, NULL }};
-/* *INDENT-ON* */
-
-static char *message[] =
-{
- "Fonts should be fixed width and, if both normal and bold are specified, should",
- "have the same size. If only a normal font is specified, it will be used for",
- "both normal and bold text (by doing overstriking). The -e option, if given,",
- "must appear at the end of the command line, otherwise the user's default shell",
- "will be started. Options that start with a plus sign (+) restore the default.",
- NULL};
-
-/*
- * Decode a key-definition. This combines the termcap and ttyModes, for
- * comparison. Note that octal escapes in ttyModes are done by the normal
- * resource translation. Also, ttyModes allows '^-' as a synonym for disabled.
- */
-static int
-decode_keyvalue(char **ptr, int termcap)
-{
- char *string = *ptr;
- int value = -1;
-
- TRACE(("...decode '%s'\n", string));
- if (*string == '^') {
- switch (*++string) {
- case '?':
- value = A2E(127);
- break;
- case '-':
- if (!termcap) {
- errno = 0;
-#if defined(_POSIX_VDISABLE) && defined(HAVE_UNISTD_H)
- value = _POSIX_VDISABLE;
-#endif
-#if defined(_PC_VDISABLE)
- if (value == -1) {
- value = fpathconf(0, _PC_VDISABLE);
- if (value == -1) {
- if (errno != 0)
- break; /* skip this (error) */
- value = 0377;
- }
- }
-#elif defined(VDISABLE)
- if (value == -1)
- value = VDISABLE;
-#endif
- break;
- }
- /* FALLTHRU */
- default:
- value = CONTROL(*string);
- break;
- }
- ++string;
- } else if (termcap && (*string == '\\')) {
- char *d;
- int temp = strtol(string + 1, &d, 8);
- if (temp > 0 && d != string) {
- value = temp;
- string = d;
- }
- } else {
- value = CharOf(*string);
- ++string;
- }
- *ptr = string;
- return value;
-}
-
-/*
- * If we're linked to terminfo, tgetent() will return an empty buffer. We
- * cannot use that to adjust the $TERMCAP variable.
- */
-static Bool
-get_termcap(char *name, char *buffer, char *resized)
-{
- TScreen *screen = &term->screen;
-
- *buffer = 0; /* initialize, in case we're using terminfo's tgetent */
-
- if (name != 0) {
- if (tgetent(buffer, name) == 1) {
- TRACE(("get_termcap(%s) succeeded (%s)\n", name,
- (*buffer
- ? "ok:termcap, we can update $TERMCAP"
- : "assuming this is terminfo")));
- if (*buffer) {
- if (!TEK4014_ACTIVE(screen)) {
- resize(screen, buffer, resized);
- }
- }
- return True;
- } else {
- *buffer = 0; /* just in case */
- }
- }
- return False;
-}
-
-static int
-abbrev(char *tst, char *cmp, size_t need)
-{
- size_t len = strlen(tst);
- return ((len >= need) && (!strncmp(tst, cmp, len)));
-}
-
-static void
-Syntax(char *badOption)
-{
- OptionHelp *opt;
- OptionHelp *list = sortedOpts(xtermOptions, optionDescList, XtNumber(optionDescList));
- int col;
-
- fprintf(stderr, "%s: bad command line option \"%s\"\r\n\n",
- ProgramName, badOption);
-
- fprintf(stderr, "usage: %s", ProgramName);
- col = 8 + strlen(ProgramName);
- for (opt = list; opt->opt; opt++) {
- int len = 3 + strlen(opt->opt); /* space [ string ] */
- if (col + len > 79) {
- fprintf(stderr, "\r\n "); /* 3 spaces */
- col = 3;
- }
- fprintf(stderr, " [%s]", opt->opt);
- col += len;
- }
-
- fprintf(stderr, "\r\n\nType %s -help for a full description.\r\n\n",
- ProgramName);
- exit(1);
-}
-
-static void
-Version(void)
-{
- printf("%s\n", xtermVersion());
- fflush(stdout);
-}
-
-static void
-Help(void)
-{
- OptionHelp *opt;
- OptionHelp *list = sortedOpts(xtermOptions, optionDescList, XtNumber(optionDescList));
- char **cpp;
-
- printf("%s usage:\n %s [-options ...] [-e command args]\n\n",
- xtermVersion(), ProgramName);
- printf("where options include:\n");
- for (opt = list; opt->opt; opt++) {
- printf(" %-28s %s\n", opt->opt, opt->desc);
- }
-
- putchar('\n');
- for (cpp = message; *cpp; cpp++)
- puts(*cpp);
- putchar('\n');
- fflush(stdout);
-}
-
-#if defined(TIOCCONS) || defined(SRIOCSREDIR)
-/* ARGSUSED */
-static Boolean
-ConvertConsoleSelection(Widget w GCC_UNUSED,
- Atom * selection GCC_UNUSED,
- Atom * target GCC_UNUSED,
- Atom * type GCC_UNUSED,
- XtPointer *value GCC_UNUSED,
- unsigned long *length GCC_UNUSED,
- int *format GCC_UNUSED)
-{
- /* we don't save console output, so can't offer it */
- return False;
-}
-#endif /* TIOCCONS */
-
-#if OPT_SESSION_MGT
-static void
-die_callback(Widget w GCC_UNUSED,
- XtPointer client_data GCC_UNUSED,
- XtPointer call_data GCC_UNUSED)
-{
- Cleanup(0);
-}
-
-static void
-save_callback(Widget w GCC_UNUSED,
- XtPointer client_data GCC_UNUSED,
- XtPointer call_data)
-{
- XtCheckpointToken token = (XtCheckpointToken) call_data;
- /* we have nothing to save */
- token->save_success = True;
-}
-#endif /* OPT_SESSION_MGT */
-
-/*
- * DeleteWindow(): Action proc to implement ICCCM delete_window.
- */
-/* ARGSUSED */
-static void
-DeleteWindow(Widget w,
- XEvent * event GCC_UNUSED,
- String * params GCC_UNUSED,
- Cardinal *num_params GCC_UNUSED)
-{
-#if OPT_TEK4014
- if (w == toplevel) {
- if (term->screen.Tshow)
- hide_vt_window();
- else
- do_hangup(w, (XtPointer) 0, (XtPointer) 0);
- } else if (term->screen.Vshow)
- hide_tek_window();
- else
-#endif
- do_hangup(w, (XtPointer) 0, (XtPointer) 0);
-}
-
-/* ARGSUSED */
-static void
-KeyboardMapping(Widget w GCC_UNUSED,
- XEvent * event,
- String * params GCC_UNUSED,
- Cardinal *num_params GCC_UNUSED)
-{
- switch (event->type) {
- case MappingNotify:
- XRefreshKeyboardMapping(&event->xmapping);
- break;
- }
-}
-
-static XtActionsRec actionProcs[] =
-{
- {"DeleteWindow", DeleteWindow},
- {"KeyboardMapping", KeyboardMapping},
-};
-
-/*
- * Some platforms use names such as /dev/tty01, others /dev/pts/1. Parse off
- * the "tty01" or "pts/1" portion, and return that for use as an identifier for
- * utmp.
- */
-static char *
-my_pty_name(char *device)
-{
- size_t len = strlen(device);
- Bool name = False;
-
- while (len != 0) {
- int ch = device[len - 1];
- if (isdigit(ch)) {
- len--;
- } else if (ch == '/') {
- if (name)
- break;
- len--;
- } else if (isalpha(ch)) {
- name = True;
- len--;
- } else {
- break;
- }
- }
- TRACE(("my_pty_name(%s) -> '%s'\n", device, device + len));
- return device + len;
-}
-
-/*
- * If the name contains a '/', it is a "pts/1" case. Otherwise, return the
- * last few characters for a utmp identifier.
- */
-static char *
-my_pty_id(char *device)
-{
- char *name = my_pty_name(device);
- char *leaf = x_basename(name);
-
- if (name == leaf) { /* no '/' in the name */
- int len = strlen(leaf);
- if (PTYCHARLEN < len)
- leaf = leaf + (len - PTYCHARLEN);
- }
- TRACE(("my_pty_id (%s) -> '%s'\n", device, leaf));
- return leaf;
-}
-
-/*
- * Set the tty/pty identifier
- */
-static void
-set_pty_id(char *device, char *id)
-{
- char *name = my_pty_name(device);
- char *leaf = x_basename(name);
-
- if (name == leaf) {
- strcpy(my_pty_id(device), id);
- } else {
- strcpy(leaf, id);
- }
- TRACE(("set_pty_id(%s) -> '%s'\n", id, device));
-}
-
-/*
- * The original -S option accepts two characters to identify the pty, and a
- * file-descriptor (assumed to be nonzero). That is not general enough, so we
- * check first if the option contains a '/' to delimit the two fields, and if
- * not, fall-thru to the original logic.
- */
-static Bool
-ParseSccn(char *option)
-{
- char *leaf = x_basename(option);
- Bool code = False;
-
- if (leaf != option) {
- if (leaf - option > 0
- && isdigit(CharOf(*leaf))
- && sscanf(leaf, "%d", &am_slave) == 1) {
- size_t len = leaf - option - 1;
- /*
- * If we have a slash, we only care about the part after the slash,
- * which is a file-descriptor. The part before the slash can be
- * the /dev/pts/XXX value, but since we do not need to reopen it,
- * it is useful mainly for display in a "ps -ef".
- */
- strncpy(passedPty, option, len);
- passedPty[len] = 0;
- code = True;
- }
- } else {
- code = (sscanf(option, "%c%c%d",
- passedPty, passedPty + 1, &am_slave) == 3);
- }
- TRACE(("ParseSccn(%s) = '%s' %d (%s)\n", option,
- passedPty, am_slave, code ? "OK" : "ERR"));
- return code;
-}
-
-#if defined(USE_SYSV_UTMP) && !defined(USE_UTEMPTER)
-/*
- * From "man utmp":
- * xterm and other terminal emulators directly create a USER_PROCESS record
- * and generate the ut_id by using the last two letters of /dev/ttyp%c or by
- * using p%d for /dev/pts/%d. If they find a DEAD_PROCESS for this id, they
- * recycle it, otherwise they create a new entry. If they can, they will mark
- * it as DEAD_PROCESS on exiting and it is advised that they null ut_line,
- * ut_time, ut_user and ut_host as well.
- *
- * Generally ut_id allows no more than 3 characters (plus null), even if the
- * pty implementation allows more than 3 digits.
- */
-static char *
-my_utmp_id(char *device)
-{
- typedef struct UTMP_STR UTMP_STRUCT;
-#define UTIDSIZE (sizeof(((UTMP_STRUCT *)NULL)->ut_id))
- static char result[UTIDSIZE + 1];
-
-#if defined(__SCO__) || defined(__UNIXWARE__)
- /*
- * Legend does not support old-style pty's, has no related compatibility
- * issues, and can use the available space in ut_id differently from the
- * default convention.
- *
- * This scheme is intended to avoid conflicts both with other users of
- * utmpx as well as between multiple xterms. First, Legend uses all of the
- * characters of ut_id, and adds no terminating NUL is required (the
- * default scheme may add a trailing NUL). Second, all xterm entries will
- * start with the letter 'x' followed by three digits, which will be the
- * last three digits of the device name, regardless of the format of the
- * device name, with leading 0's added where necessary. For instance, an
- * xterm on /dev/pts/3 will have a ut_id of x003; an xterm on /dev/pts123
- * will have a ut_id of x123. Under the other convention, /dev/pts/3 would
- * have a ut_id of p3 and /dev/pts123 would have a ut_id of p123.
- */
- int len, n;
-
- len = strlen(device);
- n = UTIDSIZE;
- result[n] = '\0';
- while ((n > 0) && (len > 0) && isdigit(device[len - 1]))
- result[--n] = device[--len];
- while (n > 0)
- result[--n] = '0';
- result[0] = 'x';
-#else
- char *name = my_pty_name(device);
- char *leaf = x_basename(name);
- size_t len = strlen(leaf);
-
- if ((UTIDSIZE - 1) < len)
- leaf = leaf + (len - (UTIDSIZE - 1));
- sprintf(result, "p%s", leaf);
-#endif
-
- TRACE(("my_utmp_id (%s) -> '%s'\n", device, result));
- return result;
-}
-#endif /* USE_SYSV_UTMP */
-
-#ifdef USE_POSIX_SIGNALS
-
-typedef void (*sigfunc) (int);
-
-/* make sure we sure we ignore SIGCHLD for the cases parent
- has just been stopped and not actually killed */
-
-static sigfunc
-posix_signal(int signo, sigfunc func)
-{
- struct sigaction act, oact;
-
- act.sa_handler = func;
- sigemptyset(&act.sa_mask);
-#ifdef SA_RESTART
- act.sa_flags = SA_NOCLDSTOP | SA_RESTART;
-#else
- act.sa_flags = SA_NOCLDSTOP;
-#endif
- if (sigaction(signo, &act, &oact) < 0)
- return (SIG_ERR);
- return (oact.sa_handler);
-}
-
-#endif /* linux && _POSIX_SOURCE */
-
-int
-main(int argc, char *argv[]ENVP_ARG)
-{
- Widget form_top, menu_top;
- TScreen *screen;
- int mode;
- char *my_class = DEFCLASS;
- Window winToEmbedInto = None;
-
-#ifdef DISABLE_SETUID
- if (seteuid(getuid()) == -1)
- exit(2);
- if (setuid(getuid()) == -1)
- exit(2);
-#endif
-
- ProgramName = argv[0];
-
- /* extra length in case longer tty name like /dev/ttyq255 */
- ttydev = TypeMallocN(char, sizeof(TTYDEV) + 80);
-#ifdef USE_PTY_DEVICE
- ptydev = TypeMallocN(char, sizeof(PTYDEV) + 80);
- if (!ttydev || !ptydev)
-#else
- if (!ttydev)
-#endif
- {
- fprintf(stderr,
- "%s: unable to allocate memory for ttydev or ptydev\n",
- ProgramName);
- exit(1);
- }
- strcpy(ttydev, TTYDEV);
-#ifdef USE_PTY_DEVICE
- strcpy(ptydev, PTYDEV);
-#endif
-
-#if defined(USE_UTMP_SETGID)
- get_pty(NULL, NULL);
- if (seteuid(getuid()) == -1) {
- fprintf(stderr,
- "%s: unable to change back euid\n", ProgramName);
- exit(1);
- }
- if (setuid(getuid()) == -1) {
- fprintf(stderr,
- "%s: unable to change back uid\n", ProgramName);
- exit(1);
- }
-#define get_pty(pty, from) really_get_pty(pty, from)
-#endif
-
- /* Do these first, since we may not be able to open the display */
- TRACE_OPTS(xtermOptions, optionDescList, XtNumber(optionDescList));
- TRACE_ARGV("Before XtOpenApplication", argv);
- if (argc > 1) {
- int n;
- unsigned unique = 2;
- Bool quit = True;
-
- for (n = 1; n < argc; n++) {
- TRACE(("parsing %s\n", argv[n]));
- if (abbrev(argv[n], "-version", unique)) {
- Version();
- } else if (abbrev(argv[n], "-help", unique)) {
- Help();
- } else if (abbrev(argv[n], "-class", 3)) {
- if ((my_class = argv[++n]) == 0) {
- Help();
- } else {
- quit = False;
- }
- unique = 3;
- } else {
- quit = False;
- unique = 3;
- }
- }
- if (quit)
- exit(0);
- }
-
- /* This dumps core on HP-UX 9.05 with X11R5 */
-#if OPT_I18N_SUPPORT
- XtSetLanguageProc(NULL, NULL, NULL);
-#endif
-
-#ifdef TERMIO_STRUCT /* { */
- /* Initialization is done here rather than above in order
- * to prevent any assumptions about the order of the contents
- * of the various terminal structures (which may change from
- * implementation to implementation).
- */
- d_tio.c_iflag = ICRNL | IXON;
-#ifdef TAB3
- d_tio.c_oflag = OPOST | ONLCR | TAB3;
-#else
-#ifdef ONLCR
- d_tio.c_oflag = OPOST | ONLCR;
-#else
- d_tio.c_oflag = OPOST;
-#endif
-#endif
-#if defined(macII) || defined(ATT) || defined(CRAY) /* { */
- d_tio.c_cflag = VAL_LINE_SPEED | CS8 | CREAD | PARENB | HUPCL;
- d_tio.c_lflag = ISIG | ICANON | ECHO | ECHOE | ECHOK;
-#ifdef ECHOKE
- d_tio.c_lflag |= ECHOKE | IEXTEN;
-#endif
-#ifdef ECHOCTL
- d_tio.c_lflag |= ECHOCTL | IEXTEN;
-#endif
-
-#ifndef USE_TERMIOS /* { */
- d_tio.c_line = 0;
-#endif /* } */
-
- d_tio.c_cc[VINTR] = CINTR;
- d_tio.c_cc[VQUIT] = CQUIT;
- d_tio.c_cc[VERASE] = CERASE;
- d_tio.c_cc[VKILL] = CKILL;
- d_tio.c_cc[VEOF] = CEOF;
- d_tio.c_cc[VEOL] = CNUL;
- d_tio.c_cc[VEOL2] = CNUL;
-#ifdef VSWTCH
- d_tio.c_cc[VSWTCH] = CNUL;
-#endif
-
-#if defined(USE_TERMIOS) || defined(USE_POSIX_TERMIOS) /* { */
- d_tio.c_cc[VSUSP] = CSUSP;
-#ifdef VDSUSP
- d_tio.c_cc[VDSUSP] = CDSUSP;
-#endif
- d_tio.c_cc[VREPRINT] = CRPRNT;
- d_tio.c_cc[VDISCARD] = CFLUSH;
- d_tio.c_cc[VWERASE] = CWERASE;
- d_tio.c_cc[VLNEXT] = CLNEXT;
- d_tio.c_cc[VMIN] = 1;
- d_tio.c_cc[VTIME] = 0;
-#endif /* } */
-#ifdef HAS_LTCHARS /* { */
- d_ltc.t_suspc = CSUSP; /* t_suspc */
- d_ltc.t_dsuspc = CDSUSP; /* t_dsuspc */
- d_ltc.t_rprntc = CRPRNT;
- d_ltc.t_flushc = CFLUSH;
- d_ltc.t_werasc = CWERASE;
- d_ltc.t_lnextc = CLNEXT;
-#endif /* } HAS_LTCHARS */
-#ifdef TIOCLSET /* { */
- d_lmode = 0;
-#endif /* } TIOCLSET */
-#else /* }{ else !macII, ATT, CRAY */
-#ifndef USE_POSIX_TERMIOS
-#ifdef BAUD_0 /* { */
- d_tio.c_cflag = CS8 | CREAD | PARENB | HUPCL;
-#else /* }{ !BAUD_0 */
- d_tio.c_cflag = VAL_LINE_SPEED | CS8 | CREAD | PARENB | HUPCL;
-#endif /* } !BAUD_0 */
-#else /* USE_POSIX_TERMIOS */
- d_tio.c_cflag = CS8 | CREAD | PARENB | HUPCL;
- cfsetispeed(&d_tio, VAL_LINE_SPEED);
- cfsetospeed(&d_tio, VAL_LINE_SPEED);
-#endif
- d_tio.c_lflag = ISIG | ICANON | ECHO | ECHOE | ECHOK;
-#ifdef ECHOKE
- d_tio.c_lflag |= ECHOKE | IEXTEN;
-#endif
-#ifdef ECHOCTL
- d_tio.c_lflag |= ECHOCTL | IEXTEN;
-#endif
-#ifndef USE_POSIX_TERMIOS
-#ifdef NTTYDISC
- d_tio.c_line = NTTYDISC;
-#else
- d_tio.c_line = 0;
-#endif
-#endif /* USE_POSIX_TERMIOS */
-#ifdef __sgi
- d_tio.c_cflag &= ~(HUPCL | PARENB);
- d_tio.c_iflag |= BRKINT | ISTRIP | IGNPAR;
-#endif
-#ifdef __MVS__
- d_tio.c_cflag &= ~(HUPCL | PARENB);
-#endif
- d_tio.c_cc[VINTR] = CONTROL('C'); /* '^C' */
- d_tio.c_cc[VERASE] = 0x7f; /* DEL */
- d_tio.c_cc[VKILL] = CONTROL('U'); /* '^U' */
- d_tio.c_cc[VQUIT] = CQUIT; /* '^\' */
- d_tio.c_cc[VEOF] = CEOF; /* '^D' */
- d_tio.c_cc[VEOL] = CEOL; /* '^@' */
- d_tio.c_cc[VMIN] = 1;
- d_tio.c_cc[VTIME] = 0;
-#ifdef VSWTCH
- d_tio.c_cc[VSWTCH] = CSWTCH; /* usually '^Z' */
-#endif
-#ifdef VLNEXT
- d_tio.c_cc[VLNEXT] = CLNEXT;
-#endif
-#ifdef VWERASE
- d_tio.c_cc[VWERASE] = CWERASE;
-#endif
-#ifdef VREPRINT
- d_tio.c_cc[VREPRINT] = CRPRNT;
-#endif
-#ifdef VRPRNT
- d_tio.c_cc[VRPRNT] = CRPRNT;
-#endif
-#ifdef VDISCARD
- d_tio.c_cc[VDISCARD] = CFLUSH;
-#endif
-#ifdef VFLUSHO
- d_tio.c_cc[VFLUSHO] = CFLUSH;
-#endif
-#ifdef VSTOP
- d_tio.c_cc[VSTOP] = CSTOP;
-#endif
-#ifdef VSTART
- d_tio.c_cc[VSTART] = CSTART;
-#endif
-#ifdef VSUSP
- d_tio.c_cc[VSUSP] = CSUSP;
-#endif
-#ifdef VDSUSP
- d_tio.c_cc[VDSUSP] = CDSUSP;
-#endif
-#ifdef VSTATUS
- d_tio.c_cc[VSTATUS] = CSTATUS;
-#endif
- /* now, try to inherit tty settings */
- {
- int i;
-
- for (i = 0; i <= 2; i++) {
- TERMIO_STRUCT deftio;
- if (ttyGetAttr(i, &deftio) == 0) {
- d_tio.c_cc[VINTR] = deftio.c_cc[VINTR];
- d_tio.c_cc[VQUIT] = deftio.c_cc[VQUIT];
- d_tio.c_cc[VERASE] = deftio.c_cc[VERASE];
- d_tio.c_cc[VKILL] = deftio.c_cc[VKILL];
- d_tio.c_cc[VEOF] = deftio.c_cc[VEOF];
- d_tio.c_cc[VEOL] = deftio.c_cc[VEOL];
-#ifdef VSWTCH
- d_tio.c_cc[VSWTCH] = deftio.c_cc[VSWTCH];
-#endif
-#ifdef VEOL2
- d_tio.c_cc[VEOL2] = deftio.c_cc[VEOL2];
-#endif
-#ifdef VLNEXT
- d_tio.c_cc[VLNEXT] = deftio.c_cc[VLNEXT];
-#endif
-#ifdef VWERASE
- d_tio.c_cc[VWERASE] = deftio.c_cc[VWERASE];
-#endif
-#ifdef VREPRINT
- d_tio.c_cc[VREPRINT] = deftio.c_cc[VREPRINT];
-#endif
-#ifdef VRPRNT
- d_tio.c_cc[VRPRNT] = deftio.c_cc[VRPRNT];
-#endif
-#ifdef VDISCARD
- d_tio.c_cc[VDISCARD] = deftio.c_cc[VDISCARD];
-#endif
-#ifdef VFLUSHO
- d_tio.c_cc[VFLUSHO] = deftio.c_cc[VFLUSHO];
-#endif
-#ifdef VSTOP
- d_tio.c_cc[VSTOP] = deftio.c_cc[VSTOP];
-#endif
-#ifdef VSTART
- d_tio.c_cc[VSTART] = deftio.c_cc[VSTART];
-#endif
-#ifdef VSUSP
- d_tio.c_cc[VSUSP] = deftio.c_cc[VSUSP];
-#endif
-#ifdef VDSUSP
- d_tio.c_cc[VDSUSP] = deftio.c_cc[VDSUSP];
-#endif
-#ifdef VSTATUS
- d_tio.c_cc[VSTATUS] = deftio.c_cc[VSTATUS];
-#endif
- break;
- }
- }
- }
-#ifdef HAS_LTCHARS /* { */
- d_ltc.t_suspc = CharOf('\000'); /* t_suspc */
- d_ltc.t_dsuspc = CharOf('\000'); /* t_dsuspc */
- d_ltc.t_rprntc = CharOf('\377'); /* reserved... */
- d_ltc.t_flushc = CharOf('\377');
- d_ltc.t_werasc = CharOf('\377');
- d_ltc.t_lnextc = CharOf('\377');
-#endif /* } HAS_LTCHARS */
-#if defined(USE_TERMIOS) || defined(USE_POSIX_TERMIOS) /* { */
- d_tio.c_cc[VSUSP] = CSUSP;
-#ifdef VDSUSP
- d_tio.c_cc[VDSUSP] = CharOf('\000');
-#endif
-#ifdef VSTATUS
- d_tio.c_cc[VSTATUS] = CharOf('\377');
-#endif
-#ifdef VREPRINT
- d_tio.c_cc[VREPRINT] = CharOf('\377');
-#endif
-#ifdef VDISCARD
- d_tio.c_cc[VDISCARD] = CharOf('\377');
-#endif
-#ifdef VWERASE
- d_tio.c_cc[VWERASE] = CharOf('\377');
-#endif
-#ifdef VLNEXT
- d_tio.c_cc[VLNEXT] = CharOf('\377');
-#endif
-#endif /* } USE_TERMIOS */
-#ifdef TIOCLSET /* { */
- d_lmode = 0;
-#endif /* } TIOCLSET */
-#endif /* } macII, ATT, CRAY */
-#endif /* } TERMIO_STRUCT */
-
- /* Init the Toolkit. */
- {
-#ifdef HAS_SAVED_IDS_AND_SETEUID
- uid_t euid = geteuid();
- gid_t egid = getegid();
- uid_t ruid = getuid();
- gid_t rgid = getgid();
-
- if (setegid(rgid) == -1) {
-#ifdef __MVS__
- if (!(errno == EMVSERR)) /* could happen if _BPX_SHAREAS=REUSE */
-#endif
- (void) fprintf(stderr, "setegid(%d): %s\n",
- (int) rgid, strerror(errno));
- }
-
- if (seteuid(ruid) == -1) {
-#ifdef __MVS__
- if (!(errno == EMVSERR))
-#endif
- (void) fprintf(stderr, "seteuid(%d): %s\n",
- (int) ruid, strerror(errno));
- }
-#endif
-
- XtSetErrorHandler(xt_error);
-#if OPT_SESSION_MGT
- toplevel = XtOpenApplication(&app_con, my_class,
- optionDescList,
- XtNumber(optionDescList),
- &argc, argv, fallback_resources,
- sessionShellWidgetClass,
- NULL, 0);
-#else
- toplevel = XtAppInitialize(&app_con, my_class,
- optionDescList,
- XtNumber(optionDescList),
- &argc, argv, fallback_resources,
- NULL, 0);
-#endif /* OPT_SESSION_MGT */
- XtSetErrorHandler((XtErrorHandler) 0);
-
- XtGetApplicationResources(toplevel, (XtPointer) &resource,
- application_resources,
- XtNumber(application_resources), NULL, 0);
- TRACE_XRES();
-
-#ifdef HAS_SAVED_IDS_AND_SETEUID
- if (seteuid(euid) == -1) {
-#ifdef __MVS__
- if (!(errno == EMVSERR))
-#endif
- (void) fprintf(stderr, "seteuid(%d): %s\n",
- (int) euid, strerror(errno));
- }
-
- if (setegid(egid) == -1) {
-#ifdef __MVS__
- if (!(errno == EMVSERR))
-#endif
- (void) fprintf(stderr, "setegid(%d): %s\n",
- (int) egid, strerror(errno));
- }
-#endif
-
-#if defined(USE_UTMP_SETGID)
- if (resource.utmpInhibit) {
- /* Can totally revoke group privs */
- setegid(getgid());
- setgid(getgid());
- }
-#endif
- }
-
- waiting_for_initial_map = resource.wait_for_map;
-
- /*
- * ICCCM delete_window.
- */
- XtAppAddActions(app_con, actionProcs, XtNumber(actionProcs));
-
- /*
- * fill in terminal modes
- */
- if (resource.tty_modes) {
- int n = parse_tty_modes(resource.tty_modes, ttymodelist);
- if (n < 0) {
- fprintf(stderr, "%s: bad tty modes \"%s\"\n",
- ProgramName, resource.tty_modes);
- } else if (n > 0) {
- override_tty_modes = 1;
- }
- }
-#if OPT_ZICONBEEP
- zIconBeep = resource.zIconBeep;
- zIconBeep_flagged = False;
- if (zIconBeep > 100 || zIconBeep < -100) {
- zIconBeep = 0; /* was 100, but I prefer to defaulting off. */
- fprintf(stderr,
- "a number between -100 and 100 is required for zIconBeep. 0 used by default\n");
- }
-#endif /* OPT_ZICONBEEP */
-#if OPT_SAME_NAME
- sameName = resource.sameName;
-#endif
- hold_screen = resource.hold_screen ? 1 : 0;
- xterm_name = resource.xterm_name;
- if (strcmp(xterm_name, "-") == 0)
- xterm_name = DFT_TERMTYPE;
- if (resource.icon_geometry != NULL) {
- int scr, junk;
- int ix, iy;
- Arg args[2];
-
- for (scr = 0; /* yyuucchh */
- XtScreen(toplevel) != ScreenOfDisplay(XtDisplay(toplevel), scr);
- scr++) ;
-
- args[0].name = XtNiconX;
- args[1].name = XtNiconY;
- XGeometry(XtDisplay(toplevel), scr, resource.icon_geometry, "",
- 0, 0, 0, 0, 0, &ix, &iy, &junk, &junk);
- args[0].value = (XtArgVal) ix;
- args[1].value = (XtArgVal) iy;
- XtSetValues(toplevel, args, 2);
- }
-
- XtSetValues(toplevel, ourTopLevelShellArgs,
- number_ourTopLevelShellArgs);
-
-#if OPT_WIDE_CHARS
- /* seems as good a place as any */
- init_classtab();
-#endif
-
- /* Parse the rest of the command line */
- TRACE_ARGV("After XtOpenApplication", argv);
- for (argc--, argv++; argc > 0; argc--, argv++) {
-#ifdef VMS
- if (**argv != '-')
- Syntax(*argv);
-#else
- if (**argv != '-') {
- if (argc > 1)
- Syntax(*argv);
- if (command_to_exec == 0) /* if no "-e" option */
- explicit_shname = xtermFindShell(*argv, True);
- continue;
- }
-#endif
-
- TRACE(("parsing %s\n", argv[0]));
- switch (argv[0][1]) {
- case 'h': /* -help */
- Help();
- continue;
- case 'v': /* -version */
- Version();
- continue;
- case 'C':
-#if defined(TIOCCONS) || defined(SRIOCSREDIR)
-#ifndef __sgi
- {
- struct stat sbuf;
-
- /* Must be owner and have read/write permission.
- xdm cooperates to give the console the right user. */
- if (!stat("/dev/console", &sbuf) &&
- (sbuf.st_uid == getuid()) &&
- !access("/dev/console", R_OK | W_OK)) {
- Console = True;
- } else
- Console = False;
- }
-#else /* __sgi */
- Console = True;
-#endif /* __sgi */
-#endif /* TIOCCONS */
- continue;
- case 'S':
- if (!ParseSccn(*argv + 2))
- Syntax(*argv);
- continue;
-#ifdef DEBUG
- case 'D':
- debug = True;
- continue;
-#endif /* DEBUG */
- case 'c': /* -class param */
- if (strcmp(argv[0] + 1, "class") == 0)
- argc--, argv++;
- else
- Syntax(*argv);
- continue;
- case 'e':
- if (argc <= 1)
- Syntax(*argv);
- command_to_exec = ++argv;
- break;
- case 'i':
- if (argc <= 1) {
- Syntax(*argv);
- } else {
- char *endPtr;
- --argc;
- ++argv;
- winToEmbedInto = (Window) strtol(argv[0], &endPtr, 10);
- }
- continue;
-
- default:
- Syntax(*argv);
- }
- break;
- }
-
- SetupMenus(toplevel, &form_top, &menu_top);
-
- term = (XtermWidget) XtVaCreateManagedWidget("vt100", xtermWidgetClass,
- form_top,
-#if OPT_TOOLBAR
- XtNmenuBar, menu_top,
- XtNresizable, True,
- XtNfromVert, menu_top,
- XtNleft, XawChainLeft,
- XtNright, XawChainRight,
- XtNtop, XawChainTop,
- XtNbottom, XawChainBottom,
-#endif
- (XtPointer) 0);
- decode_keyboard_type(&resource);
-
- screen = &term->screen;
- screen->inhibit = 0;
-
-#ifdef ALLOWLOGGING
- if (term->misc.logInhibit)
- screen->inhibit |= I_LOG;
-#endif
- if (term->misc.signalInhibit)
- screen->inhibit |= I_SIGNAL;
-#if OPT_TEK4014
- if (term->misc.tekInhibit)
- screen->inhibit |= I_TEK;
-#endif
-
- /*
- * We might start by showing the tek4014 window.
- */
-#if OPT_TEK4014
- if (screen->inhibit & I_TEK)
- screen->TekEmu = False;
-
- if (screen->TekEmu && !TekInit())
- SysError(ERROR_INIT);
-#endif
-
- /*
- * Start the toolbar at this point, after the first window has been setup.
- */
-#if OPT_TOOLBAR
- ShowToolbar(resource.toolBar);
-#endif
-
-#if OPT_SESSION_MGT
- if (resource.sessionMgt) {
- TRACE(("Enabling session-management callbacks\n"));
- XtAddCallback(toplevel, XtNdieCallback, die_callback, NULL);
- XtAddCallback(toplevel, XtNsaveCallback, save_callback, NULL);
- }
-#endif
-
- /*
- * Set title and icon name if not specified
- */
- if (command_to_exec) {
- Arg args[2];
-
- if (!resource.title) {
- if (command_to_exec) {
- resource.title = x_basename(command_to_exec[0]);
- } /* else not reached */
- }
-
- if (!resource.icon_name)
- resource.icon_name = resource.title;
- XtSetArg(args[0], XtNtitle, resource.title);
- XtSetArg(args[1], XtNiconName, resource.icon_name);
-
- TRACE(("setting:\n\ttitle \"%s\"\n\ticon \"%s\"\n\tbased on command \"%s\"\n",
- resource.title,
- resource.icon_name,
- *command_to_exec));
-
- XtSetValues(toplevel, args, 2);
- }
-#if OPT_LUIT_PROG
- if (term->misc.callfilter) {
- int u = (term->misc.use_encoding ? 2 : 0);
- if (command_to_exec) {
- int n;
- char **c;
- for (n = 0, c = command_to_exec; *c; n++, c++) ;
- c = TypeMallocN(char *, n + 3 + u);
- if (c == NULL)
- SysError(ERROR_LUMALLOC);
- memcpy(c + 2 + u, command_to_exec, (n + 1) * sizeof(char *));
- c[0] = term->misc.localefilter;
- if (u) {
- c[1] = "-encoding";
- c[2] = term->misc.locale_str;
- }
- c[1 + u] = "--";
- command_to_exec_with_luit = c;
- } else {
- static char *luit[4];
- luit[0] = term->misc.localefilter;
- if (u) {
- luit[1] = "-encoding";
- luit[2] = term->misc.locale_str;
- luit[3] = NULL;
- } else
- luit[1] = NULL;
- command_to_exec_with_luit = luit;
- }
- }
-#endif
-
-#ifdef DEBUG
- {
- /* Set up stderr properly. Opening this log file cannot be
- done securely by a privileged xterm process (although we try),
- so the debug feature is disabled by default. */
- char dbglogfile[45];
- int i = -1;
- if (debug) {
- timestamp_filename(dbglogfile, "xterm.debug.log.");
- if (creat_as(getuid(), getgid(), False, dbglogfile, 0666)) {
- i = open(dbglogfile, O_WRONLY | O_TRUNC);
- }
- }
- if (i >= 0) {
- dup2(i, 2);
-
- /* mark this file as close on exec */
- (void) fcntl(i, F_SETFD, 1);
- }
- }
-#endif /* DEBUG */
-
- /* open a terminal for client */
- get_terminal();
-
- spawn();
-
-#ifndef VMS
- /* Child process is out there, let's catch its termination */
-
-#ifdef USE_POSIX_SIGNALS
- (void) posix_signal(SIGCHLD, reapchild);
-#else
- (void) signal(SIGCHLD, reapchild);
-#endif
- /* Realize procs have now been executed */
-
- if (am_slave >= 0) { /* Write window id so master end can read and use */
- char buf[80];
-
- buf[0] = '\0';
- sprintf(buf, "%lx\n", XtWindow(SHELL_OF(CURRENT_EMU(screen))));
- write(screen->respond, buf, strlen(buf));
- }
-#ifdef AIXV3
-#if (OSMAJORVERSION < 4)
- /* In AIXV3, xterms started from /dev/console have CLOCAL set.
- * This means we need to clear CLOCAL so that SIGHUP gets sent
- * to the slave-pty process when xterm exits.
- */
-
- {
- TERMIO_STRUCT tio;
-
- if (ttyGetAttr(screen->respond, &tio) == -1)
- SysError(ERROR_TIOCGETP);
-
- tio.c_cflag &= ~(CLOCAL);
-
- if (ttySetAttr(screen->respond, &tio) == -1)
- SysError(ERROR_TIOCSETP);
- }
-#endif
-#endif
-#if defined(USE_ANY_SYSV_TERMIO) || defined(__MVS__)
- if (0 > (mode = fcntl(screen->respond, F_GETFL, 0)))
- SysError(ERROR_F_GETFL);
-#ifdef O_NDELAY
- mode |= O_NDELAY;
-#else
- mode |= O_NONBLOCK;
-#endif /* O_NDELAY */
- if (fcntl(screen->respond, F_SETFL, mode))
- SysError(ERROR_F_SETFL);
-#else /* !USE_ANY_SYSV_TERMIO */
- mode = 1;
- if (ioctl(screen->respond, FIONBIO, (char *) &mode) == -1)
- SysError(ERROR_FIONBIO);
-#endif /* USE_ANY_SYSV_TERMIO, etc */
-
- /* The erase character is used to delete the current completion */
-#if OPT_DABBREV
-#ifdef TERMIO_STRUCT
- screen->dabbrev_erase_char = d_tio.c_cc[VERASE];
-#else
- screen->dabbrev_erase_char = d_sg.sg_erase;
-#endif
-#endif
-
- FD_ZERO(&pty_mask);
- FD_ZERO(&X_mask);
- FD_ZERO(&Select_mask);
- FD_SET(screen->respond, &pty_mask);
- FD_SET(ConnectionNumber(screen->display), &X_mask);
- FD_SET(screen->respond, &Select_mask);
- FD_SET(ConnectionNumber(screen->display), &Select_mask);
- max_plus1 = ((screen->respond < ConnectionNumber(screen->display))
- ? (1 + ConnectionNumber(screen->display))
- : (1 + screen->respond));
-
-#endif /* !VMS */
-#ifdef DEBUG
- if (debug)
- printf("debugging on\n");
-#endif /* DEBUG */
- XSetErrorHandler(xerror);
- XSetIOErrorHandler(xioerror);
-
- initPtyData(&VTbuffer);
-#ifdef ALLOWLOGGING
- if (term->misc.log_on) {
- StartLog(screen);
- }
-#endif
-
- if (winToEmbedInto != None) {
- XtRealizeWidget(toplevel);
- /*
- * This should probably query the tree or check the attributes of
- * winToEmbedInto in order to verify that it exists, but I'm still not
- * certain what is the best way to do it -GPS
- */
- XReparentWindow(XtDisplay(toplevel),
- XtWindow(toplevel),
- winToEmbedInto, 0, 0);
- }
-
- for (;;) {
-#if OPT_TEK4014
- if (screen->TekEmu)
- TekRun();
- else
-#endif
- VTRun();
- }
-}
-
-#if defined(__osf__) || (defined(__GLIBC__) && !defined(USE_USG_PTYS)) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__APPLE__)
-#define USE_OPENPTY 1
-static int opened_tty = -1;
-#endif
-
-/*
- * This function opens up a pty master and stuffs its value into pty.
- *
- * If it finds one, it returns a value of 0. If it does not find one,
- * it returns a value of !0. This routine is designed to be re-entrant,
- * so that if a pty master is found and later, we find that the slave
- * has problems, we can re-enter this function and get another one.
- */
-static int
-get_pty(int *pty, char *from GCC_UNUSED)
-{
- int result = 1;
-
-#if defined(PUCC_PTYD)
-
- result = ((*pty = openrpty(ttydev, ptydev,
- (resource.utmpInhibit ? OPTY_NOP : OPTY_LOGIN),
- getuid(), from)) < 0);
-
-#elif defined(USE_OPENPTY)
-
- result = openpty(pty, &opened_tty, ttydev, NULL, NULL);
-
-#elif defined(__QNXNTO__)
-
- result = pty_search(pty);
-
-#else
-#if defined(USE_ISPTS_FLAG)
-
- /*
- The order of this code is *important*. On SYSV/386 we want to open
- a /dev/ttyp? first if at all possible. If none are available, then
- we'll try to open a /dev/pts??? device.
-
- The reason for this is because /dev/ttyp? works correctly, where
- as /dev/pts??? devices have a number of bugs, (won't update
- screen correcly, will hang -- it more or less works, but you
- really don't want to use it).
-
- Most importantly, for boxes of this nature, one of the major
- "features" is that you can emulate a 8086 by spawning off a UNIX
- program on 80386/80486 in v86 mode. In other words, you can spawn
- off multiple MS-DOS environments. On ISC the program that does
- this is named "vpix." The catcher is that "vpix" will *not* work
- with a /dev/pts??? device, will only work with a /dev/ttyp? device.
-
- Since we can open either a /dev/ttyp? or a /dev/pts??? device,
- the flag "IsPts" is set here so that we know which type of
- device we're dealing with in routine spawn(). That's the reason
- for the "if (IsPts)" statement in spawn(); we have two different
- device types which need to be handled differently.
- */
- result = pty_search(pty);
- if (!result)
- IsPts = 0;
-
-#endif
-#if defined(USE_USG_PTYS) || defined(__CYGWIN__)
-#ifdef __GLIBC__ /* if __GLIBC__ and USE_USG_PTYS, we know glibc >= 2.1 */
- /* GNU libc 2 allows us to abstract away from having to know the
- master pty device name. */
- if ((*pty = getpt()) >= 0) {
- char *name = ptsname(*pty);
- if (name != 0) { /* if filesystem is trashed, this may be null */
- strcpy(ttydev, name);
- result = 0;
- }
- }
-#elif defined(__MVS__)
- result = pty_search(pty);
-#else
-#if defined(USE_ISPTS_FLAG)
- if (result) {
-#endif
- result = ((*pty = open("/dev/ptmx", O_RDWR)) < 0);
-#endif
-#if defined(SVR4) || defined(__SCO__) || defined(USE_ISPTS_FLAG)
- if (!result)
- strcpy(ttydev, ptsname(*pty));
-#ifdef USE_ISPTS_FLAG
- IsPts = !result; /* true if we're successful */
- }
-#endif
-#endif
-
-#elif defined(AIXV3)
-
- if ((*pty = open("/dev/ptc", O_RDWR)) >= 0) {
- strcpy(ttydev, ttyname(*pty));
- result = 0;
- }
-#elif defined(__convex__)
-
- char *pty_name;
- extern char *getpty(void);
-
- while ((pty_name = getpty()) != NULL) {
- if ((*pty = open(pty_name, O_RDWR)) >= 0) {
- strcpy(ptydev, pty_name);
- strcpy(ttydev, pty_name);
- *x_basename(ttydev) = 't';
- result = 0;
- break;
- }
- }
-
-#elif defined(sequent)
-
- result = ((*pty = getpseudotty(&ttydev, &ptydev)) < 0);
-
-#elif defined(__sgi) && (OSMAJORVERSION >= 4)
-
- char *tty_name;
-
- tty_name = _getpty(pty, O_RDWR, 0622, 0);
- if (tty_name != 0) {
- strcpy(ttydev, tty_name);
- result = 0;
- }
-#elif (defined(__sgi) && (OSMAJORVERSION < 4)) || (defined(umips) && defined (SYSTYPE_SYSV))
-
- struct stat fstat_buf;
-
- *pty = open("/dev/ptc", O_RDWR);
- if (*pty >= 0 && (fstat(*pty, &fstat_buf)) >= 0) {
- result = 0;
- sprintf(ttydev, "/dev/ttyq%d", minor(fstat_buf.st_rdev));
- }
-#elif defined(__hpux)
-
- /*
- * Use the clone device if it works, otherwise use pty_search logic.
- */
- if ((*pty = open("/dev/ptym/clone", O_RDWR)) >= 0) {
- char *name = ptsname(*pty);
- if (name != 0) {
- strcpy(ttydev, name);
- result = 0;
- } else { /* permissions, or other unexpected problem */
- close(*pty);
- *pty = -1;
- result = pty_search(pty);
- }
- } else {
- result = pty_search(pty);
- }
-
-#else
-
- result = pty_search(pty);
-
-#endif
-#endif
-
- TRACE(("get_pty(ttydev=%s, ptydev=%s) %s fd=%d\n",
- ttydev != 0 ? ttydev : "?",
- ptydev != 0 ? ptydev : "?",
- result ? "FAIL" : "OK",
- pty != 0 ? *pty : -1));
- return result;
-}
-
-static void
-set_pty_permissions(uid_t uid, gid_t gid, mode_t mode)
-{
-#ifdef USE_TTY_GROUP
- struct group *ttygrp;
-
- if ((ttygrp = getgrnam(TTY_GROUP_NAME)) != 0) {
- gid = ttygrp->gr_gid;
- mode &= 0660U;
- }
- endgrent();
-#endif /* USE_TTY_GROUP */
-
- set_owner(ttydev, uid, gid, mode);
-}
-
-#ifdef get_pty /* USE_UTMP_SETGID */
-#undef get_pty
-/*
- * Call the real get_pty() before relinquishing root-setuid, caching the
- * result.
- */
-static int
-get_pty(int *pty, char *from)
-{
- static int m_pty = -1;
- int result = -1;
-
- if (pty == NULL) {
- result = really_get_pty(&m_pty, from);
-
- seteuid(0);
- set_pty_permissions(getuid(), getgid(), 0600U);
- seteuid(getuid());
-
-#ifdef USE_OPENPTY
- if (opened_tty >= 0) {
- close(opened_tty);
- opened_tty = -1;
- }
-#endif
- } else if (m_pty != -1) {
- *pty = m_pty;
- result = 0;
- } else {
- result = -1;
- }
- return result;
-}
-#endif
-
-/*
- * Called from get_pty to iterate over likely pseudo terminals
- * we might allocate. Used on those systems that do not have
- * a functional interface for allocating a pty.
- * Returns 0 if found a pty, 1 if fails.
- */
-#ifdef USE_PTY_SEARCH
-static int
-pty_search(int *pty)
-{
- static int devindex = 0, letter = 0;
-
-#if defined(CRAY) || defined(__MVS__)
- while (devindex < MAXPTTYS) {
- sprintf(ttydev, TTYFORMAT, devindex);
- sprintf(ptydev, PTYFORMAT, devindex);
- devindex++;
-
- TRACE(("pty_search(ttydev=%s, ptydev=%s)\n", ttydev, ptydev));
- if ((*pty = open(ptydev, O_RDWR)) >= 0) {
- return 0;
- }
- }
-#else /* CRAY || __MVS__ */
- while (PTYCHAR1[letter]) {
- ttydev[strlen(ttydev) - 2] =
- ptydev[strlen(ptydev) - 2] = PTYCHAR1[letter];
-
- while (PTYCHAR2[devindex]) {
- ttydev[strlen(ttydev) - 1] =
- ptydev[strlen(ptydev) - 1] = PTYCHAR2[devindex];
- devindex++;
-
- TRACE(("pty_search(ttydev=%s, ptydev=%s)\n", ttydev, ptydev));
- if ((*pty = open(ptydev, O_RDWR)) >= 0) {
-#ifdef sun
- /* Need to check the process group of the pty.
- * If it exists, then the slave pty is in use,
- * and we need to get another one.
- */
- int pgrp_rtn;
- if (ioctl(*pty, TIOCGPGRP, &pgrp_rtn) == 0 || errno != EIO) {
- close(*pty);
- continue;
- }
-#endif /* sun */
- return 0;
- }
- }
- devindex = 0;
- letter++;
- }
-#endif /* CRAY else */
- /*
- * We were unable to allocate a pty master! Return an error
- * condition and let our caller terminate cleanly.
- */
- return 1;
-}
-#endif /* USE_PTY_SEARCH */
-
-/*
- * sets up X and initializes the terminal structure except for term.buf.fildes.
- */
-static void
-get_terminal(void)
-{
- TScreen *screen = &term->screen;
-
- screen->arrow = make_colored_cursor(XC_left_ptr,
- T_COLOR(screen, MOUSE_FG),
- T_COLOR(screen, MOUSE_BG));
-}
-
-/*
- * The only difference in /etc/termcap between 4014 and 4015 is that
- * the latter has support for switching character sets. We support the
- * 4015 protocol, but ignore the character switches. Therefore, we
- * choose 4014 over 4015.
- *
- * Features of the 4014 over the 4012: larger (19") screen, 12-bit
- * graphics addressing (compatible with 4012 10-bit addressing),
- * special point plot mode, incremental plot mode (not implemented in
- * later Tektronix terminals), and 4 character sizes.
- * All of these are supported by xterm.
- */
-
-#if OPT_TEK4014
-static char *tekterm[] =
-{
- "tek4014",
- "tek4015", /* 4014 with APL character set support */
- "tek4012", /* 4010 with lower case */
- "tek4013", /* 4012 with APL character set support */
- "tek4010", /* small screen, upper-case only */
- "dumb",
- 0
-};
-#endif
-
-/* The VT102 is a VT100 with the Advanced Video Option included standard.
- * It also adds Escape sequences for insert/delete character/line.
- * The VT220 adds 8-bit character sets, selective erase.
- * The VT320 adds a 25th status line, terminal state interrogation.
- * The VT420 has up to 48 lines on the screen.
- */
-
-static char *vtterm[] =
-{
-#ifdef USE_X11TERM
- "x11term", /* for people who want special term name */
-#endif
- DFT_TERMTYPE, /* for people who want special term name */
- "xterm", /* the prefered name, should be fastest */
- "vt102",
- "vt100",
- "ansi",
- "dumb",
- 0
-};
-
-/* ARGSUSED */
-static SIGNAL_T
-hungtty(int i GCC_UNUSED)
-{
- siglongjmp(env, 1);
- SIGNAL_RETURN;
-}
-
-/*
- * declared outside OPT_PTY_HANDSHAKE so HsSysError() callers can use
- */
-static int cp_pipe[2]; /* this pipe is used for child to parent transfer */
-
-#if OPT_PTY_HANDSHAKE
-static int pc_pipe[2]; /* this pipe is used for parent to child transfer */
-typedef enum { /* c == child, p == parent */
- PTY_BAD, /* c->p: can't open pty slave for some reason */
- PTY_FATALERROR, /* c->p: we had a fatal error with the pty */
- PTY_GOOD, /* c->p: we have a good pty, let's go on */
- PTY_NEW, /* p->c: here is a new pty slave, try this */
- PTY_NOMORE, /* p->c; no more pty's, terminate */
- UTMP_ADDED, /* c->p: utmp entry has been added */
- UTMP_TTYSLOT, /* c->p: here is my ttyslot */
- PTY_EXEC /* p->c: window has been mapped the first time */
-} status_t;
-
-typedef struct {
- status_t status;
- int error;
- int fatal_error;
- int tty_slot;
- int rows;
- int cols;
- char buffer[1024];
-} handshake_t;
-
-/* HsSysError()
- *
- * This routine does the equivalent of a SysError but it handshakes
- * over the errno and error exit to the master process so that it can
- * display our error message and exit with our exit code so that the
- * user can see it.
- */
-
-static void
-HsSysError(int pf, int error)
-{
- handshake_t handshake;
-
- handshake.status = PTY_FATALERROR;
- handshake.error = errno;
- handshake.fatal_error = error;
- strcpy(handshake.buffer, ttydev);
- write(pf, (char *) &handshake, sizeof(handshake));
- exit(error);
-}
-
-void
-first_map_occurred(void)
-{
- handshake_t handshake;
- TScreen *screen = &term->screen;
-
- handshake.status = PTY_EXEC;
- handshake.rows = screen->max_row;
- handshake.cols = screen->max_col;
- write(pc_pipe[1], (char *) &handshake, sizeof(handshake));
- close(cp_pipe[0]);
- close(pc_pipe[1]);
- waiting_for_initial_map = False;
-}
-#else
-/*
- * temporary hack to get xterm working on att ptys
- */
-static void
-HsSysError(int pf GCC_UNUSED, int error)
-{
- fprintf(stderr, "%s: fatal pty error %d (errno=%d) on tty %s\n",
- xterm_name, error, errno, ttydev);
- exit(error);
-}
-
-void
-first_map_occurred(void)
-{
- return;
-}
-#endif /* OPT_PTY_HANDSHAKE else !OPT_PTY_HANDSHAKE */
-
-#ifndef VMS
-static void
-set_owner(char *device, uid_t uid, gid_t gid, mode_t mode)
-{
- int why;
-
- TRACE(("set_owner(%s, uid=%d, gid=%d, mode=%#o\n", device, uid, gid, mode));
-
- if (chown(device, uid, gid) < 0) {
- why = errno;
- if (why != ENOENT
- && getuid() == 0) {
- fprintf(stderr, "Cannot chown %s to %ld,%ld: %s\n",
- device, (long) uid, (long) gid,
- strerror(why));
- }
- TRACE(("...chown failed: %s\n", strerror(why)));
- }
- if (chmod(device, mode) < 0) {
- why = errno;
- if (why != ENOENT) {
- struct stat sb;
- if (stat(device, &sb) < 0) {
- fprintf(stderr, "Cannot chmod %s to %03o: %s\n",
- device, (unsigned) mode,
- strerror(why));
- } else if (mode != (sb.st_mode & 0777U)) {
- fprintf(stderr,
- "Cannot chmod %s to %03o currently %03o: %s\n",
- device, (unsigned) mode, (sb.st_mode & 0777U),
- strerror(why));
- TRACE(("...stat uid=%d, gid=%d, mode=%#o\n",
- sb.st_uid, sb.st_gid, sb.st_mode));
- }
- }
- TRACE(("...chmod failed: %s\n", strerror(why)));
- }
-}
-
-#if defined(HAVE_UTMP) && defined(USE_SYSV_UTMP) && !defined(USE_UTEMPTER)
-/*
- * getutid() only looks at ut_type and ut_id.
- * But we'll also check ut_line in find_utmp().
- */
-static void
-init_utmp(int type, struct UTMP_STR *tofind)
-{
- memset(tofind, 0, sizeof(*tofind));
- tofind->ut_type = type;
- (void) strncpy(tofind->ut_id, my_utmp_id(ttydev), sizeof(tofind->ut_id));
- (void) strncpy(tofind->ut_line, my_pty_name(ttydev), sizeof(tofind->ut_line));
-}
-
-/*
- * We could use getutline() if we didn't support old systems.
- */
-static struct UTMP_STR *
-find_utmp(struct UTMP_STR *tofind)
-{
- struct UTMP_STR *result;
- struct UTMP_STR working;
-
- for (;;) {
- memset(&working, 0, sizeof(working));
- working.ut_type = tofind->ut_type;
- memcpy(working.ut_id, tofind->ut_id, sizeof(tofind->ut_id));
-#if defined(__digital__) && defined(__unix__) && (defined(OSMAJORVERSION) && OSMAJORVERSION < 5)
- working.ut_type = 0;
-#endif
- if ((result = call_getutid(&working)) == 0)
- break;
- if (!strcmp(result->ut_line, tofind->ut_line))
- break;
- /*
- * Solaris, IRIX64 and HPUX manpages say to fill the static area
- * pointed to by the return-value to zeros if searching for multiple
- * occurrences. Otherwise it will continue to return the same value.
- */
- memset(result, 0, sizeof(*result));
- }
- return result;
-}
-#endif /* HAVE_UTMP... */
-
-#define close_fd(fd) close(fd), fd = -1
-
-/*
- * Inits pty and tty and forks a login process.
- * Does not close fd Xsocket.
- * If slave, the pty named in passedPty is already open for use
- */
-static int
-spawn(void)
-{
- TScreen *screen = &term->screen;
-#if OPT_PTY_HANDSHAKE
- handshake_t handshake;
- int done;
-#endif
-#if OPT_INITIAL_ERASE
- int initial_erase = VAL_INITIAL_ERASE;
-#endif
- int rc = 0;
- int ttyfd = -1;
-
-#ifdef TERMIO_STRUCT
- TERMIO_STRUCT tio;
-#ifdef __MVS__
- TERMIO_STRUCT gio;
-#endif /* __MVS__ */
-#ifdef TIOCLSET
- unsigned lmode;
-#endif /* TIOCLSET */
-#ifdef HAS_LTCHARS
- struct ltchars ltc;
-#endif /* HAS_LTCHARS */
-#else /* !TERMIO_STRUCT */
- int ldisc = 0;
- int discipline;
- unsigned lmode;
- struct tchars tc;
- struct ltchars ltc;
- struct sgttyb sg;
-#ifdef sony
- int jmode;
- struct jtchars jtc;
-#endif /* sony */
-#endif /* TERMIO_STRUCT */
-
- char termcap[TERMCAP_SIZE];
- char newtc[TERMCAP_SIZE];
- char *ptr, *shname, *shname_minus;
- int i, no_dev_tty = False;
- char **envnew; /* new environment */
- int envsize; /* elements in new environment */
- char buf[64];
- char *TermName = NULL;
-#ifdef TTYSIZE_STRUCT
- TTYSIZE_STRUCT ts;
-#endif
- struct passwd *pw = NULL;
- char *login_name = NULL;
-#ifndef USE_UTEMPTER
-#ifdef HAVE_UTMP
- struct UTMP_STR utmp;
-#ifdef USE_SYSV_UTMP
- struct UTMP_STR *utret = NULL;
-#endif
-#ifdef USE_LASTLOG
- struct lastlog lastlog;
-#endif
-#ifdef USE_LASTLOGX
- struct lastlogx lastlog;
-#endif /* USE_LASTLOG */
-#endif /* HAVE_UTMP */
-#endif /* !USE_UTEMPTER */
-
- /* Noisy compilers (suppress some unused-variable warnings) */
- (void) rc;
-#if defined(HAVE_UTMP) && defined(USE_SYSV_UTMP) && !defined(USE_UTEMPTER)
- (void) utret;
-#endif
-
- screen->uid = getuid();
- screen->gid = getgid();
-
- termcap[0] = '\0';
- newtc[0] = '\0';
-
-#ifdef SIGTTOU
- /* so that TIOCSWINSZ || TIOCSIZE doesn't block */
- signal(SIGTTOU, SIG_IGN);
-#endif
-
- if (am_slave >= 0) {
- screen->respond = am_slave;
- set_pty_id(ttydev, passedPty);
-#ifdef USE_PTY_DEVICE
- set_pty_id(ptydev, passedPty);
-#endif
- setgid(screen->gid);
- setuid(screen->uid);
- } else {
- Bool tty_got_hung;
-
- /*
- * Sometimes /dev/tty hangs on open (as in the case of a pty
- * that has gone away). Simply make up some reasonable
- * defaults.
- */
-
- signal(SIGALRM, hungtty);
- alarm(2); /* alarm(1) might return too soon */
- if (!sigsetjmp(env, 1)) {
- ttyfd = open("/dev/tty", O_RDWR);
- alarm(0);
- tty_got_hung = False;
- } else {
- tty_got_hung = True;
- ttyfd = -1;
- errno = ENXIO;
- }
-#if OPT_INITIAL_ERASE
- initial_erase = VAL_INITIAL_ERASE;
-#endif
- signal(SIGALRM, SIG_DFL);
-
- /*
- * Check results and ignore current control terminal if
- * necessary. ENXIO is what is normally returned if there is
- * no controlling terminal, but some systems (e.g. SunOS 4.0)
- * seem to return EIO. Solaris 2.3 is said to return EINVAL.
- * Cygwin returns ENOENT.
- */
- no_dev_tty = False;
- if (ttyfd < 0) {
- if (tty_got_hung || errno == ENXIO || errno == EIO ||
-#ifdef ENODEV
- errno == ENODEV ||
-#endif
-#ifdef __CYGWIN__
- errno == ENOENT ||
-#endif
- errno == EINVAL || errno == ENOTTY || errno == EACCES) {
- no_dev_tty = True;
-#ifdef HAS_LTCHARS
- ltc = d_ltc;
-#endif /* HAS_LTCHARS */
-#ifdef TIOCLSET
- lmode = d_lmode;
-#endif /* TIOCLSET */
-#ifdef TERMIO_STRUCT
- tio = d_tio;
-#else /* !TERMIO_STRUCT */
- sg = d_sg;
- tc = d_tc;
- discipline = d_disipline;
-#ifdef sony
- jmode = d_jmode;
- jtc = d_jtc;
-#endif /* sony */
-#endif /* TERMIO_STRUCT */
- } else {
- SysError(ERROR_OPDEVTTY);
- }
- } else {
-
- /* Get a copy of the current terminal's state,
- * if we can. Some systems (e.g., SVR4 and MacII)
- * may not have a controlling terminal at this point
- * if started directly from xdm or xinit,
- * in which case we just use the defaults as above.
- */
-#ifdef HAS_LTCHARS
- if (ioctl(ttyfd, TIOCGLTC, &ltc) == -1)
- ltc = d_ltc;
-#endif /* HAS_LTCHARS */
-#ifdef TIOCLSET
- if (ioctl(ttyfd, TIOCLGET, &lmode) == -1)
- lmode = d_lmode;
-#endif /* TIOCLSET */
-#ifdef TERMIO_STRUCT
- if ((rc = ttyGetAttr(ttyfd, &tio)) == -1)
- tio = d_tio;
-#else /* !TERMIO_STRUCT */
- if ((rc = ioctl(ttyfd, TIOCGETP, (char *) &sg)) == -1)
- sg = d_sg;
- if (ioctl(ttyfd, TIOCGETC, (char *) &tc) == -1)
- tc = d_tc;
- if (ioctl(ttyfd, TIOCGETD, (char *) &discipline) == -1)
- discipline = d_disipline;
-#ifdef sony
- if (ioctl(ttyfd, TIOCKGET, (char *) &jmode) == -1)
- jmode = d_jmode;
- if (ioctl(ttyfd, TIOCKGETC, (char *) &jtc) == -1)
- jtc = d_jtc;
-#endif /* sony */
-#endif /* TERMIO_STRUCT */
-
- /*
- * If ptyInitialErase is set, we want to get the pty's
- * erase value. Just in case that will fail, first get
- * the value from /dev/tty, so we will have something
- * at least.
- */
-#if OPT_INITIAL_ERASE
- if (resource.ptyInitialErase) {
-#ifdef TERMIO_STRUCT
- initial_erase = tio.c_cc[VERASE];
-#else /* !TERMIO_STRUCT */
- initial_erase = sg.sg_erase;
-#endif /* TERMIO_STRUCT */
- TRACE(("%s initial_erase:%d (from /dev/tty)\n",
- rc == 0 ? "OK" : "FAIL",
- initial_erase));
- }
-#endif
-#ifdef __MVS__
- if (ttyGetAttr(ttyfd, &gio) == 0) {
- gio.c_cflag &= ~(HUPCL | PARENB);
- ttySetAttr(ttyfd, &gio);
- }
-#endif /* __MVS__ */
-
- close_fd(ttyfd);
- }
-
- if (get_pty(&screen->respond, XDisplayString(screen->display))) {
- SysError(ERROR_PTYS);
- }
-#if OPT_INITIAL_ERASE
- if (resource.ptyInitialErase) {
-#ifdef TERMIO_STRUCT
- TERMIO_STRUCT my_tio;
- if ((rc = ttyGetAttr(screen->respond, &my_tio)) == 0)
- initial_erase = my_tio.c_cc[VERASE];
-#else /* !TERMIO_STRUCT */
- struct sgttyb my_sg;
- if ((rc = ioctl(screen->respond, TIOCGETP, (char *) &my_sg)) == 0)
- initial_erase = my_sg.sg_erase;
-#endif /* TERMIO_STRUCT */
- TRACE(("%s initial_erase:%d (from pty)\n",
- (rc == 0) ? "OK" : "FAIL",
- initial_erase));
- }
-#endif /* OPT_INITIAL_ERASE */
- }
-
- /* avoid double MapWindow requests */
- XtSetMappedWhenManaged(XtParent(CURRENT_EMU(screen)), False);
-
- wm_delete_window = XInternAtom(XtDisplay(toplevel), "WM_DELETE_WINDOW",
- False);
-
- if (!TEK4014_ACTIVE(screen))
- VTInit(); /* realize now so know window size for tty driver */
-#if defined(TIOCCONS) || defined(SRIOCSREDIR)
- if (Console) {
- /*
- * Inform any running xconsole program
- * that we are going to steal the console.
- */
- XmuGetHostname(mit_console_name + MIT_CONSOLE_LEN, 255);
- mit_console = XInternAtom(screen->display, mit_console_name, False);
- /* the user told us to be the console, so we can use CurrentTime */
- XtOwnSelection(XtParent(CURRENT_EMU(screen)),
- mit_console, CurrentTime,
- ConvertConsoleSelection, NULL, NULL);
- }
-#endif
-#if OPT_TEK4014
- if (screen->TekEmu) {
- envnew = tekterm;
- ptr = newtc;
- } else
-#endif
- {
- envnew = vtterm;
- ptr = termcap;
- }
-
- /*
- * This used to exit if no termcap entry was found for the specified
- * terminal name. That's a little unfriendly, so instead we'll allow
- * the program to proceed (but not to set $TERMCAP) if the termcap
- * entry is not found.
- */
- if (!get_termcap(TermName = resource.term_name, ptr, newtc)) {
- char *last = NULL;
- TermName = *envnew;
- while (*envnew != NULL) {
- if ((last == NULL || strcmp(last, *envnew))
- && get_termcap(*envnew, ptr, newtc)) {
- TermName = *envnew;
- break;
- }
- last = *envnew;
- envnew++;
- }
- }
-
- /*
- * Check if ptyInitialErase is not set. If so, we rely on the termcap
- * (or terminfo) to tell us what the erase mode should be set to.
- */
-#if OPT_INITIAL_ERASE
- TRACE(("resource ptyInitialErase is %sset\n",
- resource.ptyInitialErase ? "" : "not "));
- if (!resource.ptyInitialErase) {
- char temp[1024], *p = temp;
- char *s = tgetstr(TERMCAP_ERASE, &p);
- TRACE(("...extracting initial_erase value from termcap\n"));
- if (s != 0) {
- initial_erase = decode_keyvalue(&s, True);
- }
- }
- TRACE(("...initial_erase:%d\n", initial_erase));
-
- TRACE(("resource backarrowKeyIsErase is %sset\n",
- resource.backarrow_is_erase ? "" : "not "));
- if (resource.backarrow_is_erase) { /* see input.c */
- if (initial_erase == 127) {
- term->keyboard.flags &= ~MODE_DECBKM;
- } else {
- term->keyboard.flags |= MODE_DECBKM;
- term->keyboard.reset_DECBKM = 1;
- }
- TRACE(("...sets DECBKM %s\n",
- (term->keyboard.flags & MODE_DECBKM) ? "on" : "off"));
- } else {
- term->keyboard.reset_DECBKM = 2;
- }
-#endif /* OPT_INITIAL_ERASE */
-
-#ifdef TTYSIZE_STRUCT
- /* tell tty how big window is */
-#if OPT_TEK4014
- if (TEK4014_ACTIVE(screen)) {
- TTYSIZE_ROWS(ts) = 38;
- TTYSIZE_COLS(ts) = 81;
-#if defined(USE_STRUCT_WINSIZE)
- ts.ws_xpixel = TFullWidth(screen);
- ts.ws_ypixel = TFullHeight(screen);
-#endif
- } else
-#endif
- {
- TTYSIZE_ROWS(ts) = MaxRows(screen);
- TTYSIZE_COLS(ts) = MaxCols(screen);
-#if defined(USE_STRUCT_WINSIZE)
- ts.ws_xpixel = FullWidth(screen);
- ts.ws_ypixel = FullHeight(screen);
-#endif
- }
- i = SET_TTYSIZE(screen->respond, ts);
- TRACE(("spawn SET_TTYSIZE %dx%d return %d\n",
- TTYSIZE_ROWS(ts),
- TTYSIZE_COLS(ts), i));
-#endif /* TTYSIZE_STRUCT */
-
- added_utmp_entry = False;
-#if defined(USE_UTEMPTER)
-#undef UTMP
- if (!resource.utmpInhibit) {
- struct UTMP_STR dummy;
-
- /* Note: utempter may trim it anyway */
- SetUtmpHost(dummy.ut_host, screen);
- addToUtmp(ttydev, dummy.ut_host, screen->respond);
- added_utmp_entry = True;
- }
-#endif
-
- if (am_slave < 0) {
-#if OPT_PTY_HANDSHAKE
- if (resource.ptyHandshake && (pipe(pc_pipe) || pipe(cp_pipe)))
- SysError(ERROR_FORK);
-#endif
- TRACE(("Forking...\n"));
- if ((screen->pid = fork()) == -1)
- SysError(ERROR_FORK);
-
- if (screen->pid == 0) {
- /*
- * now in child process
- */
- TRACE_CHILD
-#if defined(_POSIX_SOURCE) || defined(SVR4) || defined(__convex__) || defined(__SCO__) || defined(__QNX__)
- int pgrp = setsid(); /* variable may not be used... */
-#else
- int pgrp = getpid();
-#endif
-
-#ifdef USE_USG_PTYS
-#ifdef USE_ISPTS_FLAG
- if (IsPts) { /* SYSV386 supports both, which did we open? */
-#endif
- int ptyfd = 0;
- char *pty_name = 0;
-
- setpgrp();
- grantpt(screen->respond);
- unlockpt(screen->respond);
- if ((pty_name = ptsname(screen->respond)) == 0) {
- SysError(ERROR_PTSNAME);
- }
- if ((ptyfd = open(pty_name, O_RDWR)) < 0) {
- SysError(ERROR_OPPTSNAME);
- }
-#ifdef I_PUSH
- if (ioctl(ptyfd, I_PUSH, "ptem") < 0) {
- SysError(ERROR_PTEM);
- }
-#if !defined(SVR4) && !(defined(SYSV) && defined(i386))
- if (!getenv("CONSEM") && ioctl(ptyfd, I_PUSH, "consem") < 0) {
- SysError(ERROR_CONSEM);
- }
-#endif /* !SVR4 */
- if (ioctl(ptyfd, I_PUSH, "ldterm") < 0) {
- SysError(ERROR_LDTERM);
- }
-#ifdef SVR4 /* from Sony */
- if (ioctl(ptyfd, I_PUSH, "ttcompat") < 0) {
- SysError(ERROR_TTCOMPAT);
- }
-#endif /* SVR4 */
-#endif /* I_PUSH */
- ttyfd = ptyfd;
-#ifndef __MVS__
- close_fd(screen->respond);
-#endif /* __MVS__ */
-
-#ifdef TTYSIZE_STRUCT
- /* tell tty how big window is */
-#if OPT_TEK4014
- if (TEK4014_ACTIVE(screen)) {
- TTYSIZE_ROWS(ts) = 24;
- TTYSIZE_COLS(ts) = 80;
-#ifdef USE_STRUCT_WINSIZE
- ts.ws_xpixel = TFullWidth(screen);
- ts.ws_ypixel = TFullHeight(screen);
-#endif
- } else
-#endif /* OPT_TEK4014 */
- {
- TTYSIZE_ROWS(ts) = MaxRows(screen);
- TTYSIZE_COLS(ts) = MaxCols(screen);
-#ifdef USE_STRUCT_WINSIZE
- ts.ws_xpixel = FullWidth(screen);
- ts.ws_ypixel = FullHeight(screen);
-#endif
- }
-#endif /* TTYSIZE_STRUCT */
-
-#ifdef USE_ISPTS_FLAG
- } else { /* else pty, not pts */
-#endif
-#endif /* USE_USG_PTYS */
-
- (void) pgrp; /* not all branches use this variable */
-
-#if OPT_PTY_HANDSHAKE /* warning, goes for a long ways */
- if (resource.ptyHandshake) {
- /* close parent's sides of the pipes */
- close(cp_pipe[0]);
- close(pc_pipe[1]);
-
- /* Make sure that our sides of the pipes are not in the
- * 0, 1, 2 range so that we don't fight with stdin, out
- * or err.
- */
- if (cp_pipe[1] <= 2) {
- if ((i = fcntl(cp_pipe[1], F_DUPFD, 3)) >= 0) {
- (void) close(cp_pipe[1]);
- cp_pipe[1] = i;
- }
- }
- if (pc_pipe[0] <= 2) {
- if ((i = fcntl(pc_pipe[0], F_DUPFD, 3)) >= 0) {
- (void) close(pc_pipe[0]);
- pc_pipe[0] = i;
- }
- }
-
- /* we don't need the socket, or the pty master anymore */
- close(ConnectionNumber(screen->display));
-#ifndef __MVS__
- close(screen->respond);
-#endif /* __MVS__ */
-
- /* Now is the time to set up our process group and
- * open up the pty slave.
- */
-#ifdef USE_SYSV_PGRP
-#if defined(CRAY) && (OSMAJORVERSION > 5)
- (void) setsid();
-#else
- (void) setpgrp();
-#endif
-#endif /* USE_SYSV_PGRP */
-
-#if defined(__QNX__) && !defined(__QNXNTO__)
- qsetlogin(getlogin(), ttydev);
-#endif
- if (ttyfd >= 0) {
-#ifdef __MVS__
- if (ttyGetAttr(ttyfd, &gio) == 0) {
- gio.c_cflag &= ~(HUPCL | PARENB);
- ttySetAttr(ttyfd, &gio);
- }
-#else /* !__MVS__ */
- close_fd(ttyfd);
-#endif /* __MVS__ */
- }
-
- while (1) {
-#if defined(TIOCNOTTY) && (!defined(__GLIBC__) || (__GLIBC__ < 2) || ((__GLIBC__ == 2) && (__GLIBC_MINOR__ < 1)))
- if (!no_dev_tty
- && (ttyfd = open("/dev/tty", O_RDWR)) >= 0) {
- ioctl(ttyfd, TIOCNOTTY, (char *) NULL);
- close_fd(ttyfd);
- }
-#endif /* TIOCNOTTY && !glibc >= 2.1 */
-#ifdef CSRG_BASED
- (void) revoke(ttydev);
-#endif
- if ((ttyfd = open(ttydev, O_RDWR)) >= 0) {
-#if defined(CRAY) && defined(TCSETCTTY)
- /* make /dev/tty work */
- ioctl(ttyfd, TCSETCTTY, 0);
-#endif
-#ifdef USE_SYSV_PGRP
- /* We need to make sure that we are actually
- * the process group leader for the pty. If
- * we are, then we should now be able to open
- * /dev/tty.
- */
- if ((i = open("/dev/tty", O_RDWR)) >= 0) {
- /* success! */
- close(i);
- break;
- }
-#else /* USE_SYSV_PGRP */
- break;
-#endif /* USE_SYSV_PGRP */
- }
- perror("open ttydev");
-#ifdef TIOCSCTTY
- ioctl(ttyfd, TIOCSCTTY, 0);
-#endif
- /* let our master know that the open failed */
- handshake.status = PTY_BAD;
- handshake.error = errno;
- strcpy(handshake.buffer, ttydev);
- write(cp_pipe[1], (char *) &handshake,
- sizeof(handshake));
-
- /* get reply from parent */
- i = read(pc_pipe[0], (char *) &handshake,
- sizeof(handshake));
- if (i <= 0) {
- /* parent terminated */
- exit(1);
- }
-
- if (handshake.status == PTY_NOMORE) {
- /* No more ptys, let's shutdown. */
- exit(1);
- }
-
- /* We have a new pty to try */
- free(ttydev);
- ttydev = CastMallocN(char, strlen(handshake.buffer));
- if (ttydev == NULL) {
- SysError(ERROR_SPREALLOC);
- }
- strcpy(ttydev, handshake.buffer);
- }
-
- /* use the same tty name that everyone else will use
- * (from ttyname)
- */
- if ((ptr = ttyname(ttyfd)) != 0) {
- /* it may be bigger */
- ttydev = TypeRealloc(char, strlen(ptr) + 1, ttydev);
- if (ttydev == NULL) {
- SysError(ERROR_SPREALLOC);
- }
- (void) strcpy(ttydev, ptr);
- }
- }
-#endif /* OPT_PTY_HANDSHAKE -- from near fork */
-
-#ifdef USE_ISPTS_FLAG
- } /* end of IsPts else clause */
-#endif
-
- set_pty_permissions(screen->uid,
- screen->gid,
- (resource.messages
- ? 0622U
- : 0600U));
-
- /*
- * set up the tty modes
- */
- {
-#ifdef TERMIO_STRUCT
-#if defined(umips) || defined(CRAY) || defined(linux)
- /* If the control tty had its modes screwed around with,
- eg. by lineedit in the shell, or emacs, etc. then tio
- will have bad values. Let's just get termio from the
- new tty and tailor it. */
- if (ttyGetAttr(ttyfd, &tio) == -1)
- SysError(ERROR_TIOCGETP);
- tio.c_lflag |= ECHOE;
-#endif /* umips */
- /* Now is also the time to change the modes of the
- * child pty.
- */
- /* input: nl->nl, don't ignore cr, cr->nl */
- tio.c_iflag &= ~(INLCR | IGNCR);
- tio.c_iflag |= ICRNL;
-#if OPT_WIDE_CHARS && defined(linux) && defined(IUTF8)
-#if OPT_LUIT_PROG
- if (command_to_exec_with_luit == 0)
-#endif
- if (screen->utf8_mode)
- tio.c_iflag |= IUTF8;
-#endif
- /* ouput: cr->cr, nl is not return, no delays, ln->cr/nl */
-#ifndef USE_POSIX_TERMIOS
- tio.c_oflag &=
- ~(OCRNL
- | ONLRET
- | NLDLY
- | CRDLY
- | TABDLY
- | BSDLY
- | VTDLY
- | FFDLY);
-#endif /* USE_POSIX_TERMIOS */
-#ifdef ONLCR
- tio.c_oflag |= ONLCR;
-#endif /* ONLCR */
-#ifdef OPOST
- tio.c_oflag |= OPOST;
-#endif /* OPOST */
-#ifndef USE_POSIX_TERMIOS
-# if defined(Lynx) && !defined(CBAUD)
-# define CBAUD V_CBAUD
-# endif
- tio.c_cflag &= ~(CBAUD);
-#ifdef BAUD_0
- /* baud rate is 0 (don't care) */
-#elif defined(HAVE_TERMIO_C_ISPEED)
- tio.c_ispeed = tio.c_ospeed = VAL_LINE_SPEED;
-#else /* !BAUD_0 */
- tio.c_cflag |= VAL_LINE_SPEED;
-#endif /* !BAUD_0 */
-#else /* USE_POSIX_TERMIOS */
- cfsetispeed(&tio, VAL_LINE_SPEED);
- cfsetospeed(&tio, VAL_LINE_SPEED);
-#ifdef __MVS__
- /* turn off bits that can't be set from the slave side */
- tio.c_cflag &= ~(PACKET | PKT3270 | PTU3270 | PKTXTND);
-#endif /* __MVS__ */
- /* Clear CLOCAL so that SIGHUP is sent to us
- when the xterm ends */
- tio.c_cflag &= ~CLOCAL;
-#endif /* USE_POSIX_TERMIOS */
- /* enable signals, canonical processing (erase, kill, etc),
- * echo
- */
- tio.c_lflag |= ISIG | ICANON | ECHO | ECHOE | ECHOK;
-#ifdef ECHOKE
- tio.c_lflag |= ECHOKE | IEXTEN;
-#endif
-#ifdef ECHOCTL
- tio.c_lflag |= ECHOCTL | IEXTEN;
-#endif
-#ifndef __MVS__
- /* reset EOL to default value */
- tio.c_cc[VEOL] = CEOL; /* '^@' */
- /* certain shells (ksh & csh) change EOF as well */
- tio.c_cc[VEOF] = CEOF; /* '^D' */
-#else
- if (tio.c_cc[VEOL] == 0)
- tio.c_cc[VEOL] = CEOL; /* '^@' */
- if (tio.c_cc[VEOF] == 0)
- tio.c_cc[VEOF] = CEOF; /* '^D' */
-#endif
-#ifdef VLNEXT
- tio.c_cc[VLNEXT] = CLNEXT;
-#endif
-#ifdef VWERASE
- tio.c_cc[VWERASE] = CWERASE;
-#endif
-#ifdef VREPRINT
- tio.c_cc[VREPRINT] = CRPRNT;
-#endif
-#ifdef VRPRNT
- tio.c_cc[VRPRNT] = CRPRNT;
-#endif
-#ifdef VDISCARD
- tio.c_cc[VDISCARD] = CFLUSH;
-#endif
-#ifdef VFLUSHO
- tio.c_cc[VFLUSHO] = CFLUSH;
-#endif
-#ifdef VSTOP
- tio.c_cc[VSTOP] = CSTOP;
-#endif
-#ifdef VSTART
- tio.c_cc[VSTART] = CSTART;
-#endif
-#ifdef VSUSP
- tio.c_cc[VSUSP] = CSUSP;
-#endif
-#ifdef VDSUSP
- tio.c_cc[VDSUSP] = CDSUSP;
-#endif
- if (override_tty_modes) {
- /* sysv-specific */
- TMODE(XTTYMODE_intr, tio.c_cc[VINTR]);
- TMODE(XTTYMODE_quit, tio.c_cc[VQUIT]);
- TMODE(XTTYMODE_erase, tio.c_cc[VERASE]);
- TMODE(XTTYMODE_kill, tio.c_cc[VKILL]);
- TMODE(XTTYMODE_eof, tio.c_cc[VEOF]);
- TMODE(XTTYMODE_eol, tio.c_cc[VEOL]);
-#ifdef VSWTCH
- TMODE(XTTYMODE_swtch, tio.c_cc[VSWTCH]);
-#endif
-#ifdef VSUSP
- TMODE(XTTYMODE_susp, tio.c_cc[VSUSP]);
-#endif
-#ifdef VDSUSP
- TMODE(XTTYMODE_dsusp, tio.c_cc[VDSUSP]);
-#endif
-#ifdef VREPRINT
- TMODE(XTTYMODE_rprnt, tio.c_cc[VREPRINT]);
-#endif
-#ifdef VRPRNT
- TMODE(XTTYMODE_rprnt, tio.c_cc[VRPRNT]);
-#endif
-#ifdef VDISCARD
- TMODE(XTTYMODE_flush, tio.c_cc[VDISCARD]);
-#endif
-#ifdef VFLUSHO
- TMODE(XTTYMODE_flush, tio.c_cc[VFLUSHO]);
-#endif
-#ifdef VWERASE
- TMODE(XTTYMODE_weras, tio.c_cc[VWERASE]);
-#endif
-#ifdef VLNEXT
- TMODE(XTTYMODE_lnext, tio.c_cc[VLNEXT]);
-#endif
-#ifdef VSTART
- TMODE(XTTYMODE_start, tio.c_cc[VSTART]);
-#endif
-#ifdef VSTOP
- TMODE(XTTYMODE_stop, tio.c_cc[VSTOP]);
-#endif
-#ifdef VSTATUS
- TMODE(XTTYMODE_status, tio.c_cc[VSTATUS]);
-#endif
-#ifdef VERASE2
- TMODE(XTTYMODE_erase2, tio.c_cc[VERASE2]);
-#endif
-#ifdef VEOL2
- TMODE(XTTYMODE_eol2, tio.c_cc[VEOL2]);
-#endif
-#ifdef HAS_LTCHARS
- /* both SYSV and BSD have ltchars */
- TMODE(XTTYMODE_susp, ltc.t_suspc);
- TMODE(XTTYMODE_dsusp, ltc.t_dsuspc);
- TMODE(XTTYMODE_rprnt, ltc.t_rprntc);
- TMODE(XTTYMODE_flush, ltc.t_flushc);
- TMODE(XTTYMODE_weras, ltc.t_werasc);
- TMODE(XTTYMODE_lnext, ltc.t_lnextc);
-#endif
- }
-#ifdef HAS_LTCHARS
-#ifdef __hpux
- /* ioctl chokes when the "reserved" process group controls
- * are not set to _POSIX_VDISABLE */
- ltc.t_rprntc = ltc.t_rprntc = ltc.t_flushc =
- ltc.t_werasc = ltc.t_lnextc = _POSIX_VDISABLE;
-#endif /* __hpux */
- if (ioctl(ttyfd, TIOCSLTC, &ltc) == -1)
- HsSysError(cp_pipe[1], ERROR_TIOCSETC);
-#endif /* HAS_LTCHARS */
-#ifdef TIOCLSET
- if (ioctl(ttyfd, TIOCLSET, (char *) &lmode) == -1)
- HsSysError(cp_pipe[1], ERROR_TIOCLSET);
-#endif /* TIOCLSET */
- if (ttySetAttr(ttyfd, &tio) == -1)
- HsSysError(cp_pipe[1], ERROR_TIOCSETP);
-
- /* ignore errors here - some platforms don't work */
- tio.c_cflag &= ~CSIZE;
- if (screen->input_eight_bits)
- tio.c_cflag |= CS8;
- else
- tio.c_cflag |= CS7;
- (void) ttySetAttr(ttyfd, &tio);
-
-#else /* !TERMIO_STRUCT */
- sg.sg_flags &= ~(ALLDELAY | XTABS | CBREAK | RAW);
- sg.sg_flags |= ECHO | CRMOD;
- /* make sure speed is set on pty so that editors work right */
- sg.sg_ispeed = VAL_LINE_SPEED;
- sg.sg_ospeed = VAL_LINE_SPEED;
- /* reset t_brkc to default value */
- tc.t_brkc = -1;
-#ifdef LPASS8
- if (screen->input_eight_bits)
- lmode |= LPASS8;
- else
- lmode &= ~(LPASS8);
-#endif
-#ifdef sony
- jmode &= ~KM_KANJI;
-#endif /* sony */
-
- ltc = d_ltc;
-
- if (override_tty_modes) {
- TMODE(XTTYMODE_intr, tc.t_intrc);
- TMODE(XTTYMODE_quit, tc.t_quitc);
- TMODE(XTTYMODE_erase, sg.sg_erase);
- TMODE(XTTYMODE_kill, sg.sg_kill);
- TMODE(XTTYMODE_eof, tc.t_eofc);
- TMODE(XTTYMODE_start, tc.t_startc);
- TMODE(XTTYMODE_stop, tc.t_stopc);
- TMODE(XTTYMODE_brk, tc.t_brkc);
- /* both SYSV and BSD have ltchars */
- TMODE(XTTYMODE_susp, ltc.t_suspc);
- TMODE(XTTYMODE_dsusp, ltc.t_dsuspc);
- TMODE(XTTYMODE_rprnt, ltc.t_rprntc);
- TMODE(XTTYMODE_flush, ltc.t_flushc);
- TMODE(XTTYMODE_weras, ltc.t_werasc);
- TMODE(XTTYMODE_lnext, ltc.t_lnextc);
- }
-
- if (ioctl(ttyfd, TIOCSETP, (char *) &sg) == -1)
- HsSysError(cp_pipe[1], ERROR_TIOCSETP);
- if (ioctl(ttyfd, TIOCSETC, (char *) &tc) == -1)
- HsSysError(cp_pipe[1], ERROR_TIOCSETC);
- if (ioctl(ttyfd, TIOCSETD, (char *) &discipline) == -1)
- HsSysError(cp_pipe[1], ERROR_TIOCSETD);
- if (ioctl(ttyfd, TIOCSLTC, (char *) &ltc) == -1)
- HsSysError(cp_pipe[1], ERROR_TIOCSLTC);
- if (ioctl(ttyfd, TIOCLSET, (char *) &lmode) == -1)
- HsSysError(cp_pipe[1], ERROR_TIOCLSET);
-#ifdef sony
- if (ioctl(ttyfd, TIOCKSET, (char *) &jmode) == -1)
- HsSysError(cp_pipe[1], ERROR_TIOCKSET);
- if (ioctl(ttyfd, TIOCKSETC, (char *) &jtc) == -1)
- HsSysError(cp_pipe[1], ERROR_TIOCKSETC);
-#endif /* sony */
-#endif /* TERMIO_STRUCT */
-#if defined(TIOCCONS) || defined(SRIOCSREDIR)
- if (Console) {
-#ifdef TIOCCONS
- int on = 1;
- if (ioctl(ttyfd, TIOCCONS, (char *) &on) == -1)
- fprintf(stderr, "%s: cannot open console: %s\n",
- xterm_name, strerror(errno));
-#endif
-#ifdef SRIOCSREDIR
- int fd = open("/dev/console", O_RDWR);
- if (fd == -1 || ioctl(fd, SRIOCSREDIR, ttyfd) == -1)
- fprintf(stderr, "%s: cannot open console: %s\n",
- xterm_name, strerror(errno));
- (void) close(fd);
-#endif
- }
-#endif /* TIOCCONS */
- }
-
- signal(SIGCHLD, SIG_DFL);
-#ifdef USE_SYSV_SIGHUP
- /* watch out for extra shells (I don't understand either) */
- signal(SIGHUP, SIG_DFL);
-#else
- signal(SIGHUP, SIG_IGN);
-#endif
- /* restore various signals to their defaults */
- signal(SIGINT, SIG_DFL);
- signal(SIGQUIT, SIG_DFL);
- signal(SIGTERM, SIG_DFL);
-
- /*
- * If we're not asked to make the parent process set the
- * terminal's erase mode, and if we had no ttyModes resource,
- * then set the terminal's erase mode from our best guess.
- */
-#if OPT_INITIAL_ERASE
- TRACE(("check if we should set erase to %d:%s\n\tptyInitialErase:%d,\n\toveride_tty_modes:%d,\n\tXTTYMODE_erase:%d\n",
- initial_erase,
- (!resource.ptyInitialErase
- && !override_tty_modes
- && !ttymodelist[XTTYMODE_erase].set)
- ? "YES" : "NO",
- resource.ptyInitialErase,
- override_tty_modes,
- ttymodelist[XTTYMODE_erase].set));
- if (!resource.ptyInitialErase
- && !override_tty_modes
- && !ttymodelist[XTTYMODE_erase].set) {
-#if OPT_TRACE
- int old_erase;
-#endif
-#ifdef TERMIO_STRUCT
- if (ttyGetAttr(ttyfd, &tio) == -1)
- tio = d_tio;
-#if OPT_TRACE
- old_erase = tio.c_cc[VERASE];
-#endif
- tio.c_cc[VERASE] = initial_erase;
- rc = ttySetAttr(ttyfd, &tio);
-#else /* !TERMIO_STRUCT */
- if (ioctl(ttyfd, TIOCGETP, (char *) &sg) == -1)
- sg = d_sg;
-#if OPT_TRACE
- old_erase = sg.sg_erase;
-#endif
- sg.sg_erase = initial_erase;
- rc = ioctl(ttyfd, TIOCSETP, (char *) &sg);
-#endif /* TERMIO_STRUCT */
- TRACE(("%s setting erase to %d (was %d)\n",
- rc ? "FAIL" : "OK", initial_erase, old_erase));
- }
-#endif
-
- /* copy the environment before Setenv'ing */
- for (i = 0; environ[i] != NULL; i++) ;
- /* compute number of xtermSetenv() calls below */
- envsize = 1; /* (NULL terminating entry) */
- envsize += 5; /* TERM, WINDOWID, DISPLAY, _SHELL, _VERSION */
-#ifdef HAVE_UTMP
- envsize += 1; /* LOGNAME */
-#endif /* HAVE_UTMP */
-#ifdef USE_SYSV_ENVVARS
- envsize += 2; /* COLUMNS, LINES */
-#ifdef HAVE_UTMP
- envsize += 2; /* HOME, SHELL */
-#endif /* HAVE_UTMP */
-#ifdef OWN_TERMINFO_DIR
- envsize += 1; /* TERMINFO */
-#endif
-#else /* USE_SYSV_ENVVARS */
- envsize += 1; /* TERMCAP */
-#endif /* USE_SYSV_ENVVARS */
- envnew = TypeCallocN(char *, (unsigned) i + envsize);
- memmove((char *) envnew, (char *) environ, i * sizeof(char *));
- environ = envnew;
- xtermSetenv("TERM=", TermName);
- if (!TermName)
- *newtc = 0;
-
- sprintf(buf, "%lu",
- ((unsigned long) XtWindow(SHELL_OF(CURRENT_EMU(screen)))));
- xtermSetenv("WINDOWID=", buf);
-
- /* put the display into the environment of the shell */
- xtermSetenv("DISPLAY=", XDisplayString(screen->display));
-
- xtermSetenv("XTERM_VERSION=", xtermVersion());
-
- signal(SIGTERM, SIG_DFL);
-
- /* this is the time to go and set up stdin, out, and err
- */
- {
-#if defined(CRAY) && (OSMAJORVERSION >= 6)
- close_fd(ttyfd);
-
- (void) close(0);
-
- if (open("/dev/tty", O_RDWR)) {
- SysError(ERROR_OPDEVTTY);
- }
- (void) close(1);
- (void) close(2);
- dup(0);
- dup(0);
-#else
- /* dup the tty */
- for (i = 0; i <= 2; i++)
- if (i != ttyfd) {
- (void) close(i);
- (void) dup(ttyfd);
- }
-#ifndef ATT
- /* and close the tty */
- if (ttyfd > 2)
- close_fd(ttyfd);
-#endif
-#endif /* CRAY */
- }
-
-#if !defined(USE_SYSV_PGRP)
-#ifdef TIOCSCTTY
- setsid();
- ioctl(0, TIOCSCTTY, 0);
-#endif
- ioctl(0, TIOCSPGRP, (char *) &pgrp);
- setpgrp(0, 0);
- close(open(ttydev, O_WRONLY));
- setpgrp(0, pgrp);
-#if defined(__QNX__)
- tcsetpgrp(0, pgrp /*setsid() */ );
-#endif
-#endif /* !USE_SYSV_PGRP */
-
-#ifdef Lynx
- {
- TERMIO_STRUCT t;
- if (ttyGetAttr(0, &t) >= 0) {
- /* this gets lost somewhere on our way... */
- t.c_oflag |= OPOST;
- ttySetAttr(0, &t);
- }
- }
-#endif
-
-#ifdef HAVE_UTMP
- pw = getpwuid(screen->uid);
- login_name = NULL;
- if (pw && pw->pw_name) {
-#ifdef HAVE_GETLOGIN
- /*
- * If the value from getlogin() differs from the value we
- * get by looking in the password file, check if it does
- * correspond to the same uid. If so, allow that as an
- * alias for the uid.
- *
- * Of course getlogin() will fail if we're started from
- * a window-manager, since there's no controlling terminal
- * to fuss with. In that case, try to get something useful
- * from the user's $LOGNAME or $USER environment variables.
- */
- if (((login_name = getlogin()) != NULL
- || (login_name = getenv("LOGNAME")) != NULL
- || (login_name = getenv("USER")) != NULL)
- && strcmp(login_name, pw->pw_name)) {
- struct passwd *pw2 = getpwnam(login_name);
- if (pw2 != 0) {
- uid_t uid2 = pw2->pw_uid;
- pw = getpwuid(screen->uid);
- if ((uid_t) pw->pw_uid != uid2)
- login_name = NULL;
- } else {
- pw = getpwuid(screen->uid);
- }
- }
-#endif
- if (login_name == NULL)
- login_name = pw->pw_name;
- if (login_name != NULL)
- login_name = x_strdup(login_name);
- }
- if (login_name != NULL) {
- xtermSetenv("LOGNAME=", login_name); /* for POSIX */
- }
-#ifndef USE_UTEMPTER
-#ifdef USE_SYSV_UTMP
- /* Set up our utmp entry now. We need to do it here
- * for the following reasons:
- * - It needs to have our correct process id (for
- * login).
- * - If our parent was to set it after the fork(),
- * it might make it out before we need it.
- * - We need to do it before we go and change our
- * user and group id's.
- */
- (void) call_setutent();
- init_utmp(DEAD_PROCESS, &utmp);
-
- /* position to entry in utmp file */
- /* Test return value: beware of entries left behind: PSz 9 Mar 00 */
- if (!(utret = find_utmp(&utmp))) {
- (void) call_setutent();
- init_utmp(USER_PROCESS, &utmp);
- if (!(utret = find_utmp(&utmp))) {
- (void) call_setutent();
- }
- }
-#if OPT_TRACE
- if (!utret)
- TRACE(("getutid: NULL\n"));
- else
- TRACE(("getutid: pid=%d type=%d user=%s line=%s id=%s\n",
- utret->ut_pid, utret->ut_type, utret->ut_user,
- utret->ut_line, utret->ut_id));
-#endif
-
- /* set up the new entry */
- utmp.ut_type = USER_PROCESS;
-#ifdef HAVE_UTMP_UT_XSTATUS
- utmp.ut_xstatus = 2;
-#endif
- (void) strncpy(utmp.ut_user,
- (login_name != NULL) ? login_name : "????",
- sizeof(utmp.ut_user));
- /* why are we copying this string again? (see above) */
- (void) strncpy(utmp.ut_id, my_utmp_id(ttydev), sizeof(utmp.ut_id));
- (void) strncpy(utmp.ut_line,
- my_pty_name(ttydev), sizeof(utmp.ut_line));
-
-#ifdef HAVE_UTMP_UT_HOST
- SetUtmpHost(utmp.ut_host, screen);
-#endif
- (void) strncpy(utmp.ut_name,
- (login_name) ? login_name : "????",
- sizeof(utmp.ut_name));
-
- utmp.ut_pid = getpid();
-#if defined(HAVE_UTMP_UT_XTIME)
-#if defined(HAVE_UTMP_UT_SESSION)
- utmp.ut_session = getsid(0);
-#endif
- utmp.ut_xtime = time((time_t *) 0);
- utmp.ut_tv.tv_usec = 0;
-#else
- utmp.ut_time = time((time_t *) 0);
-#endif
-
- /* write out the entry */
- if (!resource.utmpInhibit) {
- errno = 0;
- call_pututline(&utmp);
- TRACE(("pututline: id %s, line %s, pid %ld, errno %d %s\n",
- utmp.ut_id,
- utmp.ut_line,
- (long) utmp.ut_pid,
- errno, (errno != 0) ? strerror(errno) : ""));
- }
-#ifdef WTMP
-#if defined(WTMPX_FILE) && (defined(SVR4) || defined(__SCO__))
- if (term->misc.login_shell)
- updwtmpx(WTMPX_FILE, &utmp);
-#elif defined(linux) && defined(__GLIBC__) && (__GLIBC__ >= 2) && !(defined(__powerpc__) && (__GLIBC__ == 2) && (__GLIBC_MINOR__ == 0))
- if (term->misc.login_shell)
- call_updwtmp(etc_wtmp, &utmp);
-#else
- if (term->misc.login_shell &&
- (i = open(etc_wtmp, O_WRONLY | O_APPEND)) >= 0) {
- write(i, (char *) &utmp, sizeof(utmp));
- close(i);
- }
-#endif
-#endif
- /* close the file */
- (void) call_endutent();
-
-#else /* USE_SYSV_UTMP */
- /* We can now get our ttyslot! We can also set the initial
- * utmp entry.
- */
- tslot = ttyslot();
- added_utmp_entry = False;
- {
- if (tslot > 0 && pw && !resource.utmpInhibit &&
- (i = open(etc_utmp, O_WRONLY)) >= 0) {
- bzero((char *) &utmp, sizeof(utmp));
- (void) strncpy(utmp.ut_line,
- my_pty_name(ttydev),
- sizeof(utmp.ut_line));
- (void) strncpy(utmp.ut_name, login_name,
- sizeof(utmp.ut_name));
-#ifdef HAVE_UTMP_UT_HOST
- SetUtmpHost(utmp.ut_host, screen);
-#endif
- /* cast needed on Ultrix 4.4 */
- time((time_t *) & utmp.ut_time);
- lseek(i, (long) (tslot * sizeof(utmp)), 0);
- write(i, (char *) &utmp, sizeof(utmp));
- close(i);
- added_utmp_entry = True;
-#if defined(WTMP)
- if (term->misc.login_shell &&
- (i = open(etc_wtmp, O_WRONLY | O_APPEND)) >= 0) {
- int status;
- status = write(i, (char *) &utmp, sizeof(utmp));
- status = close(i);
- }
-#elif defined(MNX_LASTLOG)
- if (term->misc.login_shell &&
- (i = open(_U_LASTLOG, O_WRONLY)) >= 0) {
- lseek(i, (long) (screen->uid *
- sizeof(utmp)), 0);
- write(i, (char *) &utmp, sizeof(utmp));
- close(i);
- }
-#endif /* WTMP or MNX_LASTLOG */
- } else
- tslot = -tslot;
- }
-
- /* Let's pass our ttyslot to our parent so that it can
- * clean up after us.
- */
-#if OPT_PTY_HANDSHAKE
- if (resource.ptyHandshake) {
- handshake.tty_slot = tslot;
- }
-#endif /* OPT_PTY_HANDSHAKE */
-#endif /* USE_SYSV_UTMP */
-
-#ifdef USE_LASTLOGX
- if (term->misc.login_shell) {
- bzero((char *) &lastlog, sizeof(lastlog));
- (void) strncpy(lastlog.ll_line,
- my_pty_name(ttydev),
- sizeof(lastlog.ll_line));
- X_GETTIMEOFDAY(&lastlog.ll_tv);
- SetUtmpHost(lastlog.ll_host, screen);
- updlastlogx(_PATH_LASTLOGX, screen->uid, &lastlog);
- }
-#endif
-
-#ifdef USE_LASTLOG
- if (term->misc.login_shell &&
- (i = open(etc_lastlog, O_WRONLY)) >= 0) {
- bzero((char *) &lastlog, sizeof(struct lastlog));
- (void) strncpy(lastlog.ll_line,
- my_pty_name(ttydev),
- sizeof(lastlog.ll_line));
- SetUtmpHost(lastlog.ll_host, screen);
- time(&lastlog.ll_time);
- lseek(i, (long) (screen->uid * sizeof(struct lastlog)), 0);
- write(i, (char *) &lastlog, sizeof(struct lastlog));
- close(i);
- }
-#endif /* USE_LASTLOG */
-
-#if defined(USE_UTMP_SETGID)
- /* Switch to real gid after writing utmp entry */
- utmpGid = getegid();
- if (getgid() != getegid()) {
- utmpGid = getegid();
- setegid(getgid());
- TRACE(("switch to real gid %d after writing utmp\n", getgid()));
- }
-#endif
-
-#if OPT_PTY_HANDSHAKE
- /* Let our parent know that we set up our utmp entry
- * so that it can clean up after us.
- */
- if (resource.ptyHandshake) {
- handshake.status = UTMP_ADDED;
- handshake.error = 0;
- strcpy(handshake.buffer, ttydev);
- (void) write(cp_pipe[1], (char *) &handshake, sizeof(handshake));
- }
-#endif /* OPT_PTY_HANDSHAKE */
-#endif /* USE_UTEMPTER */
-#endif /* HAVE_UTMP */
-
- (void) setgid(screen->gid);
-#ifdef HAS_BSD_GROUPS
- if (geteuid() == 0 && pw) {
- if (initgroups(login_name, pw->pw_gid)) {
- perror("initgroups failed");
- SysError(ERROR_INIGROUPS);
- }
- }
-#endif
- if (setuid(screen->uid)) {
- SysError(ERROR_SETUID);
- }
-#if OPT_PTY_HANDSHAKE
- if (resource.ptyHandshake) {
- /* mark the pipes as close on exec */
- fcntl(cp_pipe[1], F_SETFD, 1);
- fcntl(pc_pipe[0], F_SETFD, 1);
-
- /* We are at the point where we are going to
- * exec our shell (or whatever). Let our parent
- * know we arrived safely.
- */
- handshake.status = PTY_GOOD;
- handshake.error = 0;
- (void) strcpy(handshake.buffer, ttydev);
- (void) write(cp_pipe[1], (char *) &handshake, sizeof(handshake));
-
- if (waiting_for_initial_map) {
- i = read(pc_pipe[0], (char *) &handshake,
- sizeof(handshake));
- if (i != sizeof(handshake) ||
- handshake.status != PTY_EXEC) {
- /* some very bad problem occurred */
- exit(ERROR_PTY_EXEC);
- }
- if (handshake.rows > 0 && handshake.cols > 0) {
- set_max_row(screen, handshake.rows);
- set_max_col(screen, handshake.cols);
-#ifdef TTYSIZE_STRUCT
- TTYSIZE_ROWS(ts) = MaxRows(screen);
- TTYSIZE_COLS(ts) = MaxCols(screen);
-#if defined(USE_STRUCT_WINSIZE)
- ts.ws_xpixel = FullWidth(screen);
- ts.ws_ypixel = FullHeight(screen);
-#endif
-#endif /* TTYSIZE_STRUCT */
- }
- }
- }
-#endif /* OPT_PTY_HANDSHAKE */
-
-#ifdef USE_SYSV_ENVVARS
- {
- char numbuf[12];
- sprintf(numbuf, "%d", MaxCols(screen));
- xtermSetenv("COLUMNS=", numbuf);
- sprintf(numbuf, "%d", MaxRows(screen));
- xtermSetenv("LINES=", numbuf);
- }
-#ifdef HAVE_UTMP
- if (pw) { /* SVR4 doesn't provide these */
- if (!getenv("HOME"))
- xtermSetenv("HOME=", pw->pw_dir);
- if (!getenv("SHELL"))
- xtermSetenv("SHELL=", pw->pw_shell);
- }
-#endif /* HAVE_UTMP */
-#ifdef OWN_TERMINFO_DIR
- xtermSetenv("TERMINFO=", OWN_TERMINFO_DIR);
-#endif
-#else /* USE_SYSV_ENVVARS */
- if (!TEK4014_ACTIVE(screen) && *newtc) {
- strcpy(termcap, newtc);
- resize(screen, termcap, newtc);
- }
- if (term->misc.titeInhibit && !term->misc.tiXtraScroll) {
- remove_termcap_entry(newtc, "ti=");
- remove_termcap_entry(newtc, "te=");
- }
- /*
- * work around broken termcap entries */
- if (resource.useInsertMode) {
- remove_termcap_entry(newtc, "ic=");
- /* don't get duplicates */
- remove_termcap_entry(newtc, "im=");
- remove_termcap_entry(newtc, "ei=");
- remove_termcap_entry(newtc, "mi");
- if (*newtc)
- strcat(newtc, ":im=\\E[4h:ei=\\E[4l:mi:");
- }
- if (*newtc) {
-#if OPT_INITIAL_ERASE
- unsigned len;
- remove_termcap_entry(newtc, TERMCAP_ERASE "=");
- len = strlen(newtc);
- if (len != 0 && newtc[len - 1] == ':')
- len--;
- sprintf(newtc + len, ":%s=\\%03o:",
- TERMCAP_ERASE,
- CharOf(initial_erase));
-#endif
- xtermSetenv("TERMCAP=", newtc);
- }
-#endif /* USE_SYSV_ENVVARS */
-
- /* need to reset after all the ioctl bashing we did above */
-#if OPT_PTY_HANDSHAKE
- if (resource.ptyHandshake) {
-#ifdef TTYSIZE_STRUCT
- i = SET_TTYSIZE(0, ts);
- TRACE(("spawn SET_TTYSIZE %dx%d return %d\n",
- TTYSIZE_ROWS(ts),
- TTYSIZE_COLS(ts), i));
-#endif /* TTYSIZE_STRUCT */
- }
-#endif /* OPT_PTY_HANDSHAKE */
- signal(SIGHUP, SIG_DFL);
-
- if ((ptr = explicit_shname) == NULL) {
- if (((ptr = getenv("SHELL")) == NULL || *ptr == 0) &&
- ((pw == NULL && (pw = getpwuid(screen->uid)) == NULL) ||
- *(ptr = pw->pw_shell) == 0)) {
- ptr = "/bin/sh";
- }
- } else {
- xtermSetenv("SHELL=", explicit_shname);
- }
- xtermSetenv("XTERM_SHELL=", ptr);
-
- shname = x_basename(ptr);
- TRACE(("shell path '%s' leaf '%s'\n", ptr, shname));
-
-#if OPT_LUIT_PROG
- /*
- * Use two copies of command_to_exec, in case luit is not actually
- * there, or refuses to run. In that case we will fall-through to
- * to command that the user gave anyway.
- */
- if (command_to_exec_with_luit) {
- xtermSetenv("XTERM_SHELL=",
- xtermFindShell(*command_to_exec_with_luit, False));
- TRACE(("spawning command \"%s\"\n", *command_to_exec_with_luit));
- execvp(*command_to_exec_with_luit, command_to_exec_with_luit);
- /* print error message on screen */
- fprintf(stderr, "%s: Can't execvp %s: %s\n",
- xterm_name, *command_to_exec_with_luit, strerror(errno));
- fprintf(stderr, "%s: cannot support your locale.\n",
- xterm_name);
- }
-#endif
- if (command_to_exec) {
- xtermSetenv("XTERM_SHELL=",
- xtermFindShell(*command_to_exec, False));
- TRACE(("spawning command \"%s\"\n", *command_to_exec));
- execvp(*command_to_exec, command_to_exec);
- if (command_to_exec[1] == 0)
- execlp(ptr, shname, "-c", command_to_exec[0], (void *) 0);
- /* print error message on screen */
- fprintf(stderr, "%s: Can't execvp %s: %s\n",
- xterm_name, *command_to_exec, strerror(errno));
- }
-#ifdef USE_SYSV_SIGHUP
- /* fix pts sh hanging around */
- signal(SIGHUP, SIG_DFL);
-#endif
-
- shname_minus = CastMallocN(char, strlen(shname) + 2);
- (void) strcpy(shname_minus, "-");
- (void) strcat(shname_minus, shname);
-#ifndef TERMIO_STRUCT
- ldisc = XStrCmp("csh", shname + strlen(shname) - 3) == 0 ?
- NTTYDISC : 0;
- ioctl(0, TIOCSETD, (char *) &ldisc);
-#endif /* !TERMIO_STRUCT */
-
-#ifdef USE_LOGIN_DASH_P
- if (term->misc.login_shell && pw && added_utmp_entry)
- execl(bin_login, "login", "-p", "-f", login_name, (void *) 0);
-#endif
- execlp(ptr,
- (term->misc.login_shell ? shname_minus : shname),
- (void *) 0);
-
- /* Exec failed. */
- fprintf(stderr, "%s: Could not exec %s: %s\n", xterm_name,
- ptr, strerror(errno));
- (void) sleep(5);
- exit(ERROR_EXEC);
- }
- /* end if in child after fork */
-#if OPT_PTY_HANDSHAKE
- if (resource.ptyHandshake) {
- /* Parent process. Let's handle handshaked requests to our
- * child process.
- */
-
- /* close childs's sides of the pipes */
- close(cp_pipe[1]);
- close(pc_pipe[0]);
-
- for (done = 0; !done;) {
- if (read(cp_pipe[0],
- (char *) &handshake,
- sizeof(handshake)) <= 0) {
- /* Our child is done talking to us. If it terminated
- * due to an error, we will catch the death of child
- * and clean up.
- */
- break;
- }
-
- switch (handshake.status) {
- case PTY_GOOD:
- /* Success! Let's free up resources and
- * continue.
- */
- done = 1;
- break;
-
- case PTY_BAD:
- /* The open of the pty failed! Let's get
- * another one.
- */
- (void) close(screen->respond);
- if (get_pty(&screen->respond, XDisplayString(screen->display))) {
- /* no more ptys! */
- fprintf(stderr,
- "%s: child process can find no available ptys: %s\n",
- xterm_name, strerror(errno));
- handshake.status = PTY_NOMORE;
- write(pc_pipe[1], (char *) &handshake, sizeof(handshake));
- exit(ERROR_PTYS);
- }
- handshake.status = PTY_NEW;
- (void) strcpy(handshake.buffer, ttydev);
- write(pc_pipe[1], (char *) &handshake, sizeof(handshake));
- break;
-
- case PTY_FATALERROR:
- errno = handshake.error;
- close(cp_pipe[0]);
- close(pc_pipe[1]);
- SysError(handshake.fatal_error);
- /*NOTREACHED */
-
- case UTMP_ADDED:
- /* The utmp entry was set by our slave. Remember
- * this so that we can reset it later.
- */
- added_utmp_entry = True;
-#ifndef USE_SYSV_UTMP
- tslot = handshake.tty_slot;
-#endif /* USE_SYSV_UTMP */
- free(ttydev);
- ttydev = x_strdup(handshake.buffer);
- break;
- default:
- fprintf(stderr, "%s: unexpected handshake status %d\n",
- xterm_name,
- (int) handshake.status);
- }
- }
- /* close our sides of the pipes */
- if (!waiting_for_initial_map) {
- close(cp_pipe[0]);
- close(pc_pipe[1]);
- }
- }
-#endif /* OPT_PTY_HANDSHAKE */
- }
-
- /* end if no slave */
- /*
- * still in parent (xterm process)
- */
-#ifdef USE_SYSV_SIGHUP
- /* hung sh problem? */
- signal(SIGHUP, SIG_DFL);
-#else
- signal(SIGHUP, SIG_IGN);
-#endif
-
-/*
- * Unfortunately, System V seems to have trouble divorcing the child process
- * from the process group of xterm. This is a problem because hitting the
- * INTR or QUIT characters on the keyboard will cause xterm to go away if we
- * don't ignore the signals. This is annoying.
- */
-
-#if defined(USE_SYSV_SIGNALS) && !defined(SIGTSTP)
- signal(SIGINT, SIG_IGN);
-
-#ifndef SYSV
- /* hung shell problem */
- signal(SIGQUIT, SIG_IGN);
-#endif
- signal(SIGTERM, SIG_IGN);
-#elif defined(SYSV) || defined(__osf__)
- /* if we were spawned by a jobcontrol smart shell (like ksh or csh),
- * then our pgrp and pid will be the same. If we were spawned by
- * a jobcontrol dumb shell (like /bin/sh), then we will be in our
- * parent's pgrp, and we must ignore keyboard signals, or we will
- * tank on everything.
- */
- if (getpid() == getpgrp()) {
- (void) signal(SIGINT, Exit);
- (void) signal(SIGQUIT, Exit);
- (void) signal(SIGTERM, Exit);
- } else {
- (void) signal(SIGINT, SIG_IGN);
- (void) signal(SIGQUIT, SIG_IGN);
- (void) signal(SIGTERM, SIG_IGN);
- }
- (void) signal(SIGPIPE, Exit);
-#else /* SYSV */
- signal(SIGINT, Exit);
- signal(SIGQUIT, Exit);
- signal(SIGTERM, Exit);
- signal(SIGPIPE, Exit);
-#endif /* USE_SYSV_SIGNALS and not SIGTSTP */
-
- return 0;
-} /* end spawn */
-
-SIGNAL_T
-Exit(int n)
-{
- TScreen *screen = &term->screen;
-
-#ifdef USE_UTEMPTER
- if (!resource.utmpInhibit && added_utmp_entry)
- removeFromUtmp();
-#elif defined(HAVE_UTMP)
-#ifdef USE_SYSV_UTMP
- struct UTMP_STR utmp;
- struct UTMP_STR *utptr;
-
- /* don't do this more than once */
- if (xterm_exiting)
- SIGNAL_RETURN;
- xterm_exiting = True;
-
-#ifdef PUCC_PTYD
- closepty(ttydev, ptydev, (resource.utmpInhibit ? OPTY_NOP : OPTY_LOGIN), screen->respond);
-#endif /* PUCC_PTYD */
-
- /* cleanup the utmp entry we forged earlier */
- if (!resource.utmpInhibit
-#if OPT_PTY_HANDSHAKE /* without handshake, no way to know */
- && (resource.ptyHandshake && added_utmp_entry)
-#endif /* OPT_PTY_HANDSHAKE */
- ) {
-#if defined(USE_UTMP_SETGID)
- if (utmpGid != -1) {
- /* Switch back to group utmp */
- setegid(utmpGid);
- TRACE(("switched back to group %d (check: %d)\n",
- utmpGid, (int) getgid()));
- }
-#endif
- init_utmp(USER_PROCESS, &utmp);
- (void) call_setutent();
-
- /*
- * We could use getutline() if we didn't support old systems.
- */
- while ((utptr = find_utmp(&utmp)) != 0) {
- if (utptr->ut_pid == screen->pid) {
- utptr->ut_type = DEAD_PROCESS;
-#if defined(HAVE_UTMP_UT_XTIME)
-#if defined(HAVE_UTMP_UT_SESSION)
- utptr->ut_session = getsid(0);
-#endif
- utptr->ut_xtime = time((time_t *) 0);
- utptr->ut_tv.tv_usec = 0;
-#else
- *utptr->ut_user = 0;
- utptr->ut_time = time((time_t *) 0);
-#endif
- (void) call_pututline(utptr);
-#ifdef WTMP
-#if defined(WTMPX_FILE) && (defined(SVR4) || defined(__SCO__))
- if (term->misc.login_shell)
- updwtmpx(WTMPX_FILE, utptr);
-#elif defined(linux) && defined(__GLIBC__) && (__GLIBC__ >= 2) && !(defined(__powerpc__) && (__GLIBC__ == 2) && (__GLIBC_MINOR__ == 0))
- strncpy(utmp.ut_line, utptr->ut_line, sizeof(utmp.ut_line));
- if (term->misc.login_shell)
- call_updwtmp(etc_wtmp, utptr);
-#else
- /* set wtmp entry if wtmp file exists */
- if (term->misc.login_shell) {
- int fd;
- if ((fd = open(etc_wtmp, O_WRONLY | O_APPEND)) >= 0) {
- write(fd, utptr, sizeof(*utptr));
- close(fd);
- }
- }
-#endif
-#endif
- break;
- }
- memset(utptr, 0, sizeof(*utptr)); /* keep searching */
- }
- (void) call_endutent();
- }
-#else /* not USE_SYSV_UTMP */
- int wfd;
- struct utmp utmp;
-
- if (!resource.utmpInhibit && added_utmp_entry &&
- (am_slave < 0 && tslot > 0 && (wfd = open(etc_utmp, O_WRONLY)) >= 0)) {
- bzero((char *) &utmp, sizeof(utmp));
- lseek(wfd, (long) (tslot * sizeof(utmp)), 0);
- write(wfd, (char *) &utmp, sizeof(utmp));
- close(wfd);
-#ifdef WTMP
- if (term->misc.login_shell &&
- (wfd = open(etc_wtmp, O_WRONLY | O_APPEND)) >= 0) {
- (void) strncpy(utmp.ut_line,
- my_pty_name(ttydev),
- sizeof(utmp.ut_line));
- time(&utmp.ut_time);
- write(wfd, (char *) &utmp, sizeof(utmp));
- close(wfd);
- }
-#endif /* WTMP */
- }
-#endif /* USE_SYSV_UTMP */
-#endif /* HAVE_UTMP */
- close(screen->respond); /* close explicitly to avoid race with slave side */
-#ifdef ALLOWLOGGING
- if (screen->logging)
- CloseLog(screen);
-#endif
-
- if (am_slave < 0) {
- /* restore ownership of tty and pty */
- set_owner(ttydev, 0, 0, 0666U);
-#if (defined(USE_PTY_DEVICE) && !defined(__sgi) && !defined(__hpux))
- set_owner(ptydev, 0, 0, 0666U);
-#endif
- }
-#if OPT_TRACE || defined(NO_LEAKS)
- if (n == 0) {
- TRACE(("Freeing memory leaks\n"));
- if (term != 0) {
- Display *dpy = term->screen.display;
-
- if (term->screen.sbuf_address) {
- free(term->screen.sbuf_address);
- TRACE(("freed screen.sbuf_address\n"));
- }
- if (term->screen.allbuf) {
- free(term->screen.allbuf);
- TRACE(("freed screen.allbuf\n"));
- }
- if (term->screen.xim) {
- XCloseIM(term->screen.xim);
- TRACE(("freed screen.xim\n"));
- }
- if (toplevel) {
- XtDestroyWidget(toplevel);
- TRACE(("destroyed top-level widget\n"));
- }
- XtCloseDisplay(dpy);
- TRACE(("closed display\n"));
- }
- TRACE((0));
- }
-#endif
-
- exit(n);
- SIGNAL_RETURN;
-}
-
-/* ARGSUSED */
-static void
-resize(TScreen * screen, char *oldtc, char *newtc)
-{
-#ifndef USE_SYSV_ENVVARS
- char *ptr1, *ptr2;
- size_t i;
- int li_first = 0;
- char *temp;
-
- TRACE(("resize %s\n", oldtc));
- if ((ptr1 = x_strindex(oldtc, "co#")) == NULL) {
- strcat(oldtc, "co#80:");
- ptr1 = x_strindex(oldtc, "co#");
- }
- if ((ptr2 = x_strindex(oldtc, "li#")) == NULL) {
- strcat(oldtc, "li#24:");
- ptr2 = x_strindex(oldtc, "li#");
- }
- if (ptr1 > ptr2) {
- li_first++;
- temp = ptr1;
- ptr1 = ptr2;
- ptr2 = temp;
- }
- ptr1 += 3;
- ptr2 += 3;
- strncpy(newtc, oldtc, i = ptr1 - oldtc);
- temp = newtc + i;
- sprintf(temp, "%d", (li_first
- ? MaxRows(screen)
- : MaxCols(screen)));
- temp += strlen(temp);
- ptr1 = strchr(ptr1, ':');
- strncpy(temp, ptr1, i = ptr2 - ptr1);
- temp += i;
- sprintf(temp, "%d", (li_first
- ? MaxCols(screen)
- : MaxRows(screen)));
- ptr2 = strchr(ptr2, ':');
- strcat(temp, ptr2);
- TRACE((" ==> %s\n", newtc));
-#endif /* USE_SYSV_ENVVARS */
-}
-
-#endif /* ! VMS */
-
-/*
- * Does a non-blocking wait for a child process. If the system
- * doesn't support non-blocking wait, do nothing.
- * Returns the pid of the child, or 0 or -1 if none or error.
- */
-int
-nonblocking_wait(void)
-{
-#ifdef USE_POSIX_WAIT
- pid_t pid;
-
- pid = waitpid(-1, NULL, WNOHANG);
-#elif defined(USE_SYSV_SIGNALS) && (defined(CRAY) || !defined(SIGTSTP))
- /* cannot do non-blocking wait */
- int pid = 0;
-#else /* defined(USE_SYSV_SIGNALS) && (defined(CRAY) || !defined(SIGTSTP)) */
-#if defined(Lynx)
- int status;
-#else
- union wait status;
-#endif
- int pid;
-
- pid = wait3(&status, WNOHANG, (struct rusage *) NULL);
-#endif /* USE_POSIX_WAIT else */
- return pid;
-}
-
-#ifndef VMS
-
-/* ARGSUSED */
-static SIGNAL_T
-reapchild(int n GCC_UNUSED)
-{
- int olderrno = errno;
- int pid;
-
- pid = wait(NULL);
-
-#ifdef USE_SYSV_SIGNALS
- /* cannot re-enable signal before waiting for child
- * because then SVR4 loops. Sigh. HP-UX 9.01 too.
- */
- (void) signal(SIGCHLD, reapchild);
-#endif
-
- do {
- if (pid == term->screen.pid) {
-#ifdef DEBUG
- if (debug)
- fputs("Exiting\n", stderr);
-#endif
- if (!hold_screen)
- need_cleanup = TRUE;
- }
- } while ((pid = nonblocking_wait()) > 0);
-
- errno = olderrno;
- SIGNAL_RETURN;
-}
-#endif /* !VMS */
-
-static void
-remove_termcap_entry(char *buf, char *str)
-{
- char *base = buf;
- char *first = base;
- int count = 0;
- size_t len = strlen(str);
-
- TRACE(("*** remove_termcap_entry('%s', '%s')\n", str, buf));
-
- while (*buf != 0) {
- if (!count && !strncmp(buf, str, len)) {
- while (*buf != 0) {
- if (*buf == '\\')
- buf++;
- else if (*buf == ':')
- break;
- if (*buf != 0)
- buf++;
- }
- while ((*first++ = *buf++) != 0) ;
- TRACE(("...removed_termcap_entry('%s', '%s')\n", str, base));
- return;
- } else if (*buf == '\\') {
- buf++;
- } else if (*buf == ':') {
- first = buf;
- count = 0;
- } else if (!isspace(CharOf(*buf))) {
- count++;
- }
- if (*buf != 0)
- buf++;
- }
- TRACE(("...cannot remove\n"));
-}
-
-/*
- * parse_tty_modes accepts lines of the following form:
- *
- * [SETTING] ...
- *
- * where setting consists of the words in the modelist followed by a character
- * or ^char.
- */
-static int
-parse_tty_modes(char *s, struct _xttymodes *modelist)
-{
- struct _xttymodes *mp;
- int c;
- int count = 0;
-
- TRACE(("parse_tty_modes\n"));
- while (1) {
- size_t len;
-
- while (*s && isascii(CharOf(*s)) && isspace(CharOf(*s)))
- s++;
- if (!*s)
- return count;
-
- for (len = 0; isalnum(CharOf(s[len])); ++len) ;
- for (mp = modelist; mp->name; mp++) {
- if (len == mp->len
- && strncmp(s, mp->name, mp->len) == 0)
- break;
- }
- if (!mp->name)
- return -1;
-
- s += mp->len;
- while (*s && isascii(CharOf(*s)) && isspace(CharOf(*s)))
- s++;
- if (!*s)
- return -1;
-
- if ((c = decode_keyvalue(&s, False)) != -1) {
- mp->value = c;
- mp->set = 1;
- count++;
- TRACE(("...parsed #%d: %s=%#x\n", count, mp->name, c));
- }
- }
-}
-
-#ifndef VMS /* don't use pipes on OpenVMS */
-int
-GetBytesAvailable(int fd)
-{
-#if defined(FIONREAD)
- int arg;
- ioctl(fd, FIONREAD, (char *) &arg);
- return (int) arg;
-#elif defined(__CYGWIN__)
- fd_set set;
- struct timeval timeout =
- {0, 0};
-
- FD_ZERO(&set);
- FD_SET(fd, &set);
- if (Select(fd + 1, &set, NULL, NULL, &timeout) > 0)
- return 1;
- else
- return 0;
-#elif defined(FIORDCK)
- return (ioctl(fd, FIORDCHK, NULL));
-#else /* !FIORDCK */
- struct pollfd pollfds[1];
-
- pollfds[0].fd = fd;
- pollfds[0].events = POLLIN;
- return poll(pollfds, 1, 0);
-#endif
-}
-#endif /* !VMS */
-
-/* Utility function to try to hide system differences from
- everybody who used to call killpg() */
-
-int
-kill_process_group(int pid, int sig)
-{
- TRACE(("kill_process_group(pid=%d, sig=%d)\n", pid, sig));
-#if defined(SVR4) || defined(SYSV) || !defined(X_NOT_POSIX)
- return kill(-pid, sig);
-#else
- return killpg(pid, sig);
-#endif
-}
-
-#if OPT_EBCDIC
-int
-A2E(int x)
-{
- char c;
- c = x;
- __atoe_l(&c, 1);
- return c;
-}
-
-int
-E2A(int x)
-{
- char c;
- c = x;
- __etoa_l(&c, 1);
- return c;
-}
-#endif
-
-#if defined(__QNX__) && !defined(__QNXNTO__)
-#include <sys/types.h>
-#include <sys/proc_msg.h>
-#include <sys/kernel.h>
-#include <string.h>
-#include <errno.h>
-
-struct _proc_session ps;
-struct _proc_session_reply rps;
-
-int
-qsetlogin(char *login, char *ttyname)
-{
- int v = getsid(getpid());
-
- memset(&ps, 0, sizeof(ps));
- memset(&rps, 0, sizeof(rps));
-
- ps.type = _PROC_SESSION;
- ps.subtype = _PROC_SUB_ACTION1;
- ps.sid = v;
- strcpy(ps.name, login);
-
- Send(1, &ps, &rps, sizeof(ps), sizeof(rps));
-
- if (rps.status < 0)
- return (rps.status);
-
- ps.type = _PROC_SESSION;
- ps.subtype = _PROC_SUB_ACTION2;
- ps.sid = v;
- sprintf(ps.name, "//%d%s", getnid(), ttyname);
- Send(1, &ps, &rps, sizeof(ps), sizeof(rps));
-
- return (rps.status);
-}
-#endif
diff --git a/nx-X11/programs/xterm/main.c.X.original b/nx-X11/programs/xterm/main.c.X.original
deleted file mode 100644
index b84826cb4..000000000
--- a/nx-X11/programs/xterm/main.c.X.original
+++ /dev/null
@@ -1,4912 +0,0 @@
-/* $XTermId: main.c,v 1.477 2005/11/13 23:10:36 tom Exp $ */
-
-#if !defined(lint) && 0
-static char *rid = "$Xorg: main.c,v 1.7 2001/02/09 02:06:02 xorgcvs Exp $";
-#endif /* lint */
-
-/*
- * W A R N I N G
- *
- * If you think you know what all of this code is doing, you are
- * probably very mistaken. There be serious and nasty dragons here.
- *
- * This client is *not* to be taken as an example of how to write X
- * Toolkit applications. It is in need of a substantial rewrite,
- * ideally to create a generic tty widget with several different parsing
- * widgets so that you can plug 'em together any way you want. Don't
- * hold your breath, though....
- */
-
-/***********************************************************
-
-Copyright 2002-2004,2005 by Thomas E. Dickey
-
- All Rights Reserved
-
-Permission is hereby granted, free of charge, to any person obtaining a
-copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name(s) of the above copyright
-holders shall not be used in advertising or otherwise to promote the
-sale, use or other dealings in this Software without prior written
-authorization.
-
-Copyright 1987, 1988 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-
-Copyright 1987, 1988 by Digital Equipment Corporation, Maynard.
-
- All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and its
-documentation for any purpose and without fee is hereby granted,
-provided that the above copyright notice appear in all copies and that
-both that copyright notice and this permission notice appear in
-supporting documentation, and that the name of Digital not be used in
-advertising or publicity pertaining to distribution of the software
-without specific, written prior permission.
-
-DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
-ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
-DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
-ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
-WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
-SOFTWARE.
-
-******************************************************************/
-
-/* $XFree86: xc/programs/xterm/main.c,v 3.199 2005/11/13 23:10:36 dickey Exp $ */
-
-/* main.c */
-
-#define RES_OFFSET(field) XtOffsetOf(XTERM_RESOURCE, field)
-
-#include <xterm.h>
-
-#include <X11/cursorfont.h>
-#include <X11/Xlocale.h>
-
-#if OPT_TOOLBAR
-
-#if defined(HAVE_LIB_XAW)
-#include <X11/Xaw/Form.h>
-#elif defined(HAVE_LIB_XAW3D)
-#include <X11/Xaw3d/Form.h>
-#elif defined(HAVE_LIB_NEXTAW)
-#include <X11/neXtaw/Form.h>
-#elif defined(HAVE_LIB_XAWPLUS)
-#include <X11/XawPlus/Form.h>
-#endif
-
-#endif /* OPT_TOOLBAR */
-
-#include <pwd.h>
-#include <ctype.h>
-
-#include <data.h>
-#include <error.h>
-#include <menu.h>
-#include <main.h>
-#include <xstrings.h>
-#include <xterm_io.h>
-
-#if OPT_WIDE_CHARS
-#include <charclass.h>
-#endif
-
-#ifdef __osf__
-#define USE_SYSV_SIGNALS
-#define WTMP
-#include <pty.h> /* openpty() */
-#endif
-
-#ifdef __sgi
-#include <grp.h> /* initgroups() */
-#endif
-
-#ifdef USE_ISPTS_FLAG
-static Bool IsPts = False;
-#endif
-
-#if defined(__SCO__) || defined(SVR4) || defined(_POSIX_SOURCE)
-#define USE_POSIX_SIGNALS
-#endif
-
-#if defined(SYSV) && !defined(SVR4) && !defined(ISC22) && !defined(ISC30)
-/* older SYSV systems cannot ignore SIGHUP.
- Shell hangs, or you get extra shells, or something like that */
-#define USE_SYSV_SIGHUP
-#endif
-
-#if defined(sony) && defined(bsd43) && !defined(KANJI)
-#define KANJI
-#endif
-
-#ifdef linux
-#define USE_SYSV_PGRP
-#define USE_SYSV_SIGNALS
-#define WTMP
-#ifdef __GLIBC__
-#if (__GLIBC__ > 2) || ((__GLIBC__ == 2) && (__GLIBC_MINOR__ >= 1))
-#include <pty.h>
-#endif
-#endif
-#endif
-
-#ifdef __MVS__
-#define USE_SYSV_PGRP
-#define USE_SYSV_SIGNALS
-#endif
-
-#ifdef __CYGWIN__
-#define LASTLOG
-#define WTMP
-#endif
-
-#ifdef __SCO__
-#ifndef _SVID3
-#define _SVID3
-#endif
-#endif
-
-#if defined(__GLIBC__) && !defined(linux)
-#define USE_SYSV_PGRP
-#define WTMP
-#define HAS_BSD_GROUPS
-#endif
-
-#if defined(USE_TTY_GROUP) || defined(USE_UTMP_SETGID)
-#include <grp.h>
-#endif
-
-#ifndef TTY_GROUP_NAME
-#define TTY_GROUP_NAME "tty"
-#endif
-
-#include <sys/stat.h>
-
-#ifdef Lynx
-#ifndef BSDLY
-#define BSDLY 0
-#endif
-#ifndef VTDLY
-#define VTDLY 0
-#endif
-#ifndef FFDLY
-#define FFDLY 0
-#endif
-#endif
-
-#ifdef SYSV /* { */
-
-#ifdef USE_USG_PTYS /* AT&T SYSV has no ptyio.h */
-#include <sys/stropts.h> /* for I_PUSH */
-#include <poll.h> /* for POLLIN */
-#endif /* USE_USG_PTYS */
-
-#define USE_SYSV_SIGNALS
-#define USE_SYSV_PGRP
-
-#if !defined(TIOCSWINSZ) || defined(__SCO__) || defined(__UNIXWARE__)
-#define USE_SYSV_ENVVARS /* COLUMNS/LINES vs. TERMCAP */
-#endif
-
-/*
- * now get system-specific includes
- */
-#ifdef CRAY
-#define HAS_BSD_GROUPS
-#endif
-
-#ifdef macII
-#define HAS_BSD_GROUPS
-#include <sys/ttychars.h>
-#undef USE_SYSV_ENVVARS
-#undef FIOCLEX
-#undef FIONCLEX
-#define setpgrp2 setpgrp
-#include <sgtty.h>
-#include <sys/resource.h>
-#endif
-
-#ifdef __hpux
-#define HAS_BSD_GROUPS
-#include <sys/ptyio.h>
-#endif /* __hpux */
-
-#ifdef __osf__
-#define HAS_BSD_GROUPS
-#undef USE_SYSV_PGRP
-#define setpgrp setpgid
-#endif
-
-#ifdef __sgi
-#define HAS_BSD_GROUPS
-#include <sys/sysmacros.h>
-#endif /* __sgi */
-
-#ifdef sun
-#include <sys/strredir.h>
-#endif
-
-#else /* } !SYSV { */ /* BSD systems */
-
-#ifdef __QNX__
-
-#ifndef __QNXNTO__
-#define ttyslot() 1
-#else
-#define USE_SYSV_PGRP
-extern __inline__
-ttyslot()
-{
- return 1; /* yuk */
-}
-#endif
-
-#else
-
-#if defined(__INTERIX) || defined(__APPLE__)
-#define setpgrp setpgid
-#endif
-
-#ifndef linux
-#ifndef VMS
-#ifndef USE_POSIX_TERMIOS
-#ifndef USE_ANY_SYSV_TERMIO
-#include <sgtty.h>
-#endif
-#endif /* USE_POSIX_TERMIOS */
-#ifdef Lynx
-#include <resource.h>
-#else
-#include <sys/resource.h>
-#endif
-#ifndef __INTERIX
-#define HAS_BSD_GROUPS
-#endif
-#endif /* !VMS */
-#endif /* !linux */
-
-#endif /* __QNX__ */
-
-#endif /* } !SYSV */
-
-#if defined(SVR4) && !defined(__CYGWIN__)
-#define HAS_SAVED_IDS_AND_SETEUID
-#endif
-
-#ifdef linux
-#define HAS_SAVED_IDS_AND_SETEUID
-#endif
-
-/* Xpoll.h and <sys/param.h> on glibc 2.1 systems have colliding NBBY's */
-#if defined(__GLIBC__) && ((__GLIBC__ > 2) || ((__GLIBC__ == 2) && (__GLIBC_MINOR__ >= 1)))
-#ifndef NOFILE
-#define NOFILE OPEN_MAX
-#endif
-#elif !(defined(VMS) || defined(WIN32) || defined(Lynx) || defined(__GNU__) || defined(__MVS__))
-#include <sys/param.h> /* for NOFILE */
-#endif
-
-#if defined(BSD) && (BSD >= 199103)
-#define WTMP
-#define HAS_SAVED_IDS_AND_SETEUID
-#endif
-
-#include <stdio.h>
-
-#ifdef __hpux
-#include <sys/utsname.h>
-#endif /* __hpux */
-
-#if defined(apollo) && (OSMAJORVERSION == 10) && (OSMINORVERSION < 4)
-#define ttyslot() 1
-#endif /* apollo */
-
-#if defined(UTMPX_FOR_UTMP)
-#define UTMP_STR utmpx
-#else
-#define UTMP_STR utmp
-#endif
-
-#if defined(USE_UTEMPTER)
-#include <utempter.h>
-#endif
-
-#if defined(UTMPX_FOR_UTMP)
-
-#include <utmpx.h>
-
-#define call_endutent endutxent
-#define call_getutid getutxid
-#define call_pututline pututxline
-#define call_setutent setutxent
-#define call_updwtmp updwtmpx
-
-#elif defined(HAVE_UTMP)
-
-#include <utmp.h>
-
-#if defined(_CRAY) && (OSMAJORVERSION < 8)
-extern struct utmp *getutid __((struct utmp * _Id));
-#endif
-
-#define call_endutent endutent
-#define call_getutid getutid
-#define call_pututline pututline
-#define call_setutent setutent
-#define call_updwtmp updwtmp
-
-#endif
-
-#if defined(USE_LASTLOG) && defined(HAVE_LASTLOG_H)
-#include <lastlog.h> /* caution: glibc 2.3.5 includes utmp.h here */
-#endif
-
-#ifndef USE_LASTLOGX
-#if defined(_NETBSD_SOURCE) && defined(_PATH_LASTLOGX)
-#define USE_LASTLOGX 1
-#endif
-#endif
-
-#ifdef PUCC_PTYD
-#include <local/openpty.h>
-#endif /* PUCC_PTYD */
-
-#if defined(__OpenBSD__) || defined(__NetBSD__) || defined(__APPLE__)
-#include <util.h> /* openpty() */
-#endif
-
-#ifdef __FreeBSD__
-#include <libutil.h> /* openpty() */
-#endif
-
-#if !defined(UTMP_FILENAME)
-#if defined(UTMP_FILE)
-#define UTMP_FILENAME UTMP_FILE
-#elif defined(_PATH_UTMP)
-#define UTMP_FILENAME _PATH_UTMP
-#else
-#define UTMP_FILENAME "/etc/utmp"
-#endif
-#endif
-
-#ifndef LASTLOG_FILENAME
-#ifdef _PATH_LASTLOG
-#define LASTLOG_FILENAME _PATH_LASTLOG
-#else
-#define LASTLOG_FILENAME "/usr/adm/lastlog" /* only on BSD systems */
-#endif
-#endif
-
-#if !defined(WTMP_FILENAME)
-#if defined(WTMP_FILE)
-#define WTMP_FILENAME WTMP_FILE
-#elif defined(_PATH_WTMP)
-#define WTMP_FILENAME _PATH_WTMP
-#elif defined(SYSV)
-#define WTMP_FILENAME "/etc/wtmp"
-#else
-#define WTMP_FILENAME "/usr/adm/wtmp"
-#endif
-#endif
-
-#include <signal.h>
-
-#if defined(__SCO__) || (defined(ISC) && !defined(_POSIX_SOURCE))
-#undef SIGTSTP /* defined, but not the BSD way */
-#endif
-
-#ifdef SIGTSTP
-#include <sys/wait.h>
-#endif
-
-#if defined(__SCO__) || defined(__UNIXWARE__)
-#undef ECHOKE
-#undef ECHOCTL
-#endif
-
-#ifdef X_NOT_POSIX
-extern long lseek();
-#if defined(USG) || defined(SVR4)
-extern unsigned sleep();
-#else
-extern void sleep();
-#endif
-extern char *ttyname();
-#endif
-
-#ifdef SYSV
-extern char *ptsname(int);
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
- extern int tgetent(char *ptr, char *name);
- extern char *tgetstr(char *name, char **ptr);
-
-#ifdef __cplusplus
-}
-#endif
-#ifndef VMS
-static SIGNAL_T reapchild(int n);
-static int spawn(void);
-static void remove_termcap_entry(char *buf, char *str);
-#ifdef USE_PTY_SEARCH
-static int pty_search(int *pty);
-#endif
-#endif /* ! VMS */
-
-static int get_pty(int *pty, char *from);
-static void get_terminal(void);
-static void resize(TScreen * s, char *oldtc, char *newtc);
-static void set_owner(char *device, uid_t uid, gid_t gid, mode_t mode);
-
-static Bool added_utmp_entry = False;
-
-#if defined(USE_UTMP_SETGID)
-static int utmpGid = -1;
-static int really_get_pty(int *pty, char *from);
-#endif
-
-#if defined(USE_SYSV_UTMP) && !defined(USE_UTEMPTER)
-static Bool xterm_exiting = False;
-#endif
-
-static char *explicit_shname = NULL;
-
-/*
-** Ordinarily it should be okay to omit the assignment in the following
-** statement. Apparently the c89 compiler on AIX 4.1.3 has a bug, or does
-** it? Without the assignment though the compiler will init command_to_exec
-** to 0xffffffff instead of NULL; and subsequent usage, e.g. in spawn() to
-** SEGV.
-*/
-static char **command_to_exec = NULL;
-
-#if OPT_LUIT_PROG
-static char **command_to_exec_with_luit = NULL;
-#endif
-
-#define TERMCAP_ERASE "kb"
-#define VAL_INITIAL_ERASE A2E(8)
-
-/* choose a nice default value for speed - if we make it too low, users who
- * mistakenly use $TERM set to vt100 will get padding delays. Setting it to a
- * higher value is not useful since legacy applications (termcap) that care
- * about padding generally store the code in a short, which does not have
- * enough bits for the extended values.
- */
-#ifdef B38400 /* everyone should define this */
-#define VAL_LINE_SPEED B38400
-#else /* ...but xterm's used this for a long time */
-#define VAL_LINE_SPEED B9600
-#endif
-
-/* allow use of system default characters if defined and reasonable */
-#ifndef CBRK
-#define CBRK 0
-#endif
-#ifndef CDSUSP
-#define CDSUSP CONTROL('Y')
-#endif
-#ifndef CEOF
-#define CEOF CONTROL('D')
-#endif
-#ifndef CEOL
-#define CEOL 0
-#endif
-#ifndef CFLUSH
-#define CFLUSH CONTROL('O')
-#endif
-#ifndef CINTR
-#define CINTR 0177
-#endif
-#ifndef CKILL
-#define CKILL '@'
-#endif
-#ifndef CLNEXT
-#define CLNEXT CONTROL('V')
-#endif
-#ifndef CNUL
-#define CNUL 0
-#endif
-#ifndef CQUIT
-#define CQUIT CONTROL('\\')
-#endif
-#ifndef CRPRNT
-#define CRPRNT CONTROL('R')
-#endif
-#ifndef CSTART
-#define CSTART CONTROL('Q')
-#endif
-#ifndef CSTOP
-#define CSTOP CONTROL('S')
-#endif
-#ifndef CSUSP
-#define CSUSP CONTROL('Z')
-#endif
-#ifndef CSWTCH
-#define CSWTCH 0
-#endif
-#ifndef CWERASE
-#define CWERASE CONTROL('W')
-#endif
-
-#ifdef USE_ANY_SYSV_TERMIO
-#define TERMIO_STRUCT struct termio
-#define ttySetAttr(fd, datap) ioctl(fd, TCSETA, datap)
-#define ttyGetAttr(fd, datap) ioctl(fd, TCGETA, datap)
-#elif defined(USE_POSIX_TERMIOS)
-#define TERMIO_STRUCT struct termios
-#define ttySetAttr(fd, datap) tcsetattr(fd, TCSANOW, datap)
-#define ttyGetAttr(fd, datap) tcgetattr(fd, datap)
-#endif /* USE_ANY_SYSV_TERMIO */
-
-#ifndef VMS
-#ifdef TERMIO_STRUCT
-/* The following structures are initialized in main() in order
-** to eliminate any assumptions about the internal order of their
-** contents.
-*/
-static TERMIO_STRUCT d_tio;
-
-#ifdef HAS_LTCHARS
-static struct ltchars d_ltc;
-#endif /* HAS_LTCHARS */
-
-#ifdef TIOCLSET
-static unsigned int d_lmode;
-#endif /* TIOCLSET */
-
-#else /* !TERMIO_STRUCT */
-static struct sgttyb d_sg =
-{
- 0, 0, 0177, CKILL, (EVENP | ODDP | ECHO | XTABS | CRMOD)
-};
-static struct tchars d_tc =
-{
- CINTR, CQUIT, CSTART,
- CSTOP, CEOF, CBRK
-};
-static struct ltchars d_ltc =
-{
- CSUSP, CDSUSP, CRPRNT,
- CFLUSH, CWERASE, CLNEXT
-};
-static int d_disipline = NTTYDISC;
-static long int d_lmode = LCRTBS | LCRTERA | LCRTKIL | LCTLECH;
-#ifdef sony
-static long int d_jmode = KM_SYSSJIS | KM_ASCII;
-static struct jtchars d_jtc =
-{
- 'J', 'B'
-};
-#endif /* sony */
-#endif /* TERMIO_STRUCT */
-#endif /* ! VMS */
-
-/*
- * SYSV has the termio.c_cc[V] and ltchars; BSD has tchars and ltchars;
- * SVR4 has only termio.c_cc, but it includes everything from ltchars.
- * POSIX termios has termios.c_cc, which is similar to SVR4.
- */
-#define TTYMODE(name) { name, sizeof(name)-1, 0, 0 }
-static int override_tty_modes = 0;
-/* *INDENT-OFF* */
-static struct _xttymodes {
- char *name;
- size_t len;
- int set;
- Char value;
-} ttymodelist[] = {
- TTYMODE("intr"), /* tchars.t_intrc ; VINTR */
-#define XTTYMODE_intr 0
- TTYMODE("quit"), /* tchars.t_quitc ; VQUIT */
-#define XTTYMODE_quit 1
- TTYMODE("erase"), /* sgttyb.sg_erase ; VERASE */
-#define XTTYMODE_erase 2
- TTYMODE("kill"), /* sgttyb.sg_kill ; VKILL */
-#define XTTYMODE_kill 3
- TTYMODE("eof"), /* tchars.t_eofc ; VEOF */
-#define XTTYMODE_eof 4
- TTYMODE("eol"), /* VEOL */
-#define XTTYMODE_eol 5
- TTYMODE("swtch"), /* VSWTCH */
-#define XTTYMODE_swtch 6
- TTYMODE("start"), /* tchars.t_startc ; VSTART */
-#define XTTYMODE_start 7
- TTYMODE("stop"), /* tchars.t_stopc ; VSTOP */
-#define XTTYMODE_stop 8
- TTYMODE("brk"), /* tchars.t_brkc */
-#define XTTYMODE_brk 9
- TTYMODE("susp"), /* ltchars.t_suspc ; VSUSP */
-#define XTTYMODE_susp 10
- TTYMODE("dsusp"), /* ltchars.t_dsuspc ; VDSUSP */
-#define XTTYMODE_dsusp 11
- TTYMODE("rprnt"), /* ltchars.t_rprntc ; VREPRINT */
-#define XTTYMODE_rprnt 12
- TTYMODE("flush"), /* ltchars.t_flushc ; VDISCARD */
-#define XTTYMODE_flush 13
- TTYMODE("weras"), /* ltchars.t_werasc ; VWERASE */
-#define XTTYMODE_weras 14
- TTYMODE("lnext"), /* ltchars.t_lnextc ; VLNEXT */
-#define XTTYMODE_lnext 15
- TTYMODE("status"), /* VSTATUS */
-#define XTTYMODE_status 16
- TTYMODE("erase2"), /* VERASE2 */
-#define XTTYMODE_erase2 17
- TTYMODE("eol2"), /* VEOL2 */
-#define XTTYMODE_eol2 18
- { NULL, 0, 0, '\0' }, /* end of data */
-};
-/* *INDENT-ON* */
-
-#define TMODE(ind,var) if (ttymodelist[ind].set) var = ttymodelist[ind].value
-
-static int parse_tty_modes(char *s, struct _xttymodes *modelist);
-
-#ifdef USE_SYSV_UTMP
-#if (defined(AIXV3) && (OSMAJORVERSION < 4)) && !(defined(getutid))
-extern struct utmp *getutid();
-#endif /* AIXV3 */
-
-#else /* not USE_SYSV_UTMP */
-static char etc_utmp[] = UTMP_FILENAME;
-#endif /* USE_SYSV_UTMP */
-
-#ifndef USE_UTEMPTER
-#ifdef USE_LASTLOG
-static char etc_lastlog[] = LASTLOG_FILENAME;
-#endif
-
-#ifdef WTMP
-static char etc_wtmp[] = WTMP_FILENAME;
-#endif
-#endif /* !USE_UTEMPTER */
-
-/*
- * Some people with 4.3bsd /bin/login seem to like to use login -p -f user
- * to implement xterm -ls. They can turn on USE_LOGIN_DASH_P and turn off
- * WTMP and USE_LASTLOG.
- */
-#ifdef USE_LOGIN_DASH_P
-#ifndef LOGIN_FILENAME
-#define LOGIN_FILENAME "/bin/login"
-#endif
-static char bin_login[] = LOGIN_FILENAME;
-#endif
-
-static char passedPty[PTYCHARLEN + 1]; /* name if pty if slave */
-
-#if defined(TIOCCONS) || defined(SRIOCSREDIR)
-static int Console;
-#include <X11/Xmu/SysUtil.h> /* XmuGetHostname */
-#define MIT_CONSOLE_LEN 12
-#define MIT_CONSOLE "MIT_CONSOLE_"
-static char mit_console_name[255 + MIT_CONSOLE_LEN + 1] = MIT_CONSOLE;
-static Atom mit_console;
-#endif /* TIOCCONS */
-
-#ifndef USE_SYSV_UTMP
-static int tslot;
-#endif /* USE_SYSV_UTMP */
-static sigjmp_buf env;
-
-#define SetUtmpHost(dst, screen) \
- { \
- char host[sizeof(dst) + 1]; \
- strncpy(host, DisplayString(screen->display), sizeof(host)); \
- TRACE(("DisplayString(%s)\n", host)); \
- if (!resource.utmpDisplayId) { \
- char *endptr = strrchr(host, ':'); \
- if (endptr) { \
- TRACE(("trimming display-id '%s'\n", host)); \
- *endptr = '\0'; \
- } \
- } \
- strncpy(dst, host, sizeof(dst)); \
- }
-
-/* used by VT (charproc.c) */
-
-static XtResource application_resources[] =
-{
- Sres("name", "Name", xterm_name, DFT_TERMTYPE),
- Sres("iconGeometry", "IconGeometry", icon_geometry, NULL),
- Sres(XtNtitle, XtCTitle, title, NULL),
- Sres(XtNiconName, XtCIconName, icon_name, NULL),
- Sres("termName", "TermName", term_name, NULL),
- Sres("ttyModes", "TtyModes", tty_modes, NULL),
- Bres("hold", "Hold", hold_screen, False),
- Bres("utmpInhibit", "UtmpInhibit", utmpInhibit, False),
- Bres("utmpDisplayId", "UtmpDisplayId", utmpDisplayId, True),
- Bres("messages", "Messages", messages, True),
- Ires("minBufSize", "MinBufSize", minBufSize, 4096),
- Ires("maxBufSize", "MaxBufSize", maxBufSize, 32768),
- Sres("keyboardType", "KeyboardType", keyboardType, "unknown"),
- Bres("sunFunctionKeys", "SunFunctionKeys", sunFunctionKeys, False),
-#if OPT_SUNPC_KBD
- Bres("sunKeyboard", "SunKeyboard", sunKeyboard, False),
-#endif
-#if OPT_HP_FUNC_KEYS
- Bres("hpFunctionKeys", "HpFunctionKeys", hpFunctionKeys, False),
-#endif
-#if OPT_SCO_FUNC_KEYS
- Bres("scoFunctionKeys", "ScoFunctionKeys", scoFunctionKeys, False),
-#endif
-#if OPT_INITIAL_ERASE
- Bres("ptyInitialErase", "PtyInitialErase", ptyInitialErase, DEF_INITIAL_ERASE),
- Bres("backarrowKeyIsErase", "BackarrowKeyIsErase", backarrow_is_erase, DEF_BACKARO_ERASE),
-#endif
- Bres("waitForMap", "WaitForMap", wait_for_map, False),
- Bres("useInsertMode", "UseInsertMode", useInsertMode, False),
-#if OPT_ZICONBEEP
- Ires("zIconBeep", "ZIconBeep", zIconBeep, 0),
-#endif
-#if OPT_PTY_HANDSHAKE
- Bres("ptyHandshake", "PtyHandshake", ptyHandshake, True),
-#endif
-#if OPT_SAME_NAME
- Bres("sameName", "SameName", sameName, True),
-#endif
-#if OPT_SESSION_MGT
- Bres("sessionMgt", "SessionMgt", sessionMgt, True),
-#endif
-#if OPT_TOOLBAR
- Bres(XtNtoolBar, XtCToolBar, toolBar, True),
-#endif
-};
-
-static char *fallback_resources[] =
-{
- "*SimpleMenu*menuLabel.vertSpace: 100",
- "*SimpleMenu*HorizontalMargins: 16",
- "*SimpleMenu*Sme.height: 16",
- "*SimpleMenu*Cursor: left_ptr",
- "*mainMenu.Label: Main Options (no app-defaults)",
- "*vtMenu.Label: VT Options (no app-defaults)",
- "*fontMenu.Label: VT Fonts (no app-defaults)",
-#if OPT_TEK4014
- "*tekMenu.Label: Tek Options (no app-defaults)",
-#endif
- NULL
-};
-
-/* Command line options table. Only resources are entered here...there is a
- pass over the remaining options after XrmParseCommand is let loose. */
-/* *INDENT-OFF* */
-static XrmOptionDescRec optionDescList[] = {
-{"-geometry", "*vt100.geometry",XrmoptionSepArg, (caddr_t) NULL},
-{"-132", "*c132", XrmoptionNoArg, (caddr_t) "on"},
-{"+132", "*c132", XrmoptionNoArg, (caddr_t) "off"},
-{"-ah", "*alwaysHighlight", XrmoptionNoArg, (caddr_t) "on"},
-{"+ah", "*alwaysHighlight", XrmoptionNoArg, (caddr_t) "off"},
-{"-aw", "*autoWrap", XrmoptionNoArg, (caddr_t) "on"},
-{"+aw", "*autoWrap", XrmoptionNoArg, (caddr_t) "off"},
-#ifndef NO_ACTIVE_ICON
-{"-ai", "*activeIcon", XrmoptionNoArg, (caddr_t) "off"},
-{"+ai", "*activeIcon", XrmoptionNoArg, (caddr_t) "on"},
-#endif /* NO_ACTIVE_ICON */
-{"-b", "*internalBorder",XrmoptionSepArg, (caddr_t) NULL},
-{"-bc", "*cursorBlink", XrmoptionNoArg, (caddr_t) "on"},
-{"+bc", "*cursorBlink", XrmoptionNoArg, (caddr_t) "off"},
-{"-bcf", "*cursorOffTime",XrmoptionSepArg, (caddr_t) NULL},
-{"-bcn", "*cursorOnTime",XrmoptionSepArg, (caddr_t) NULL},
-{"-bdc", "*colorBDMode", XrmoptionNoArg, (caddr_t) "off"},
-{"+bdc", "*colorBDMode", XrmoptionNoArg, (caddr_t) "on"},
-{"-cb", "*cutToBeginningOfLine", XrmoptionNoArg, (caddr_t) "off"},
-{"+cb", "*cutToBeginningOfLine", XrmoptionNoArg, (caddr_t) "on"},
-{"-cc", "*charClass", XrmoptionSepArg, (caddr_t) NULL},
-{"-cm", "*colorMode", XrmoptionNoArg, (caddr_t) "off"},
-{"+cm", "*colorMode", XrmoptionNoArg, (caddr_t) "on"},
-{"-cn", "*cutNewline", XrmoptionNoArg, (caddr_t) "off"},
-{"+cn", "*cutNewline", XrmoptionNoArg, (caddr_t) "on"},
-{"-cr", "*cursorColor", XrmoptionSepArg, (caddr_t) NULL},
-{"-cu", "*curses", XrmoptionNoArg, (caddr_t) "on"},
-{"+cu", "*curses", XrmoptionNoArg, (caddr_t) "off"},
-{"-dc", "*dynamicColors",XrmoptionNoArg, (caddr_t) "off"},
-{"+dc", "*dynamicColors",XrmoptionNoArg, (caddr_t) "on"},
-{"-fb", "*boldFont", XrmoptionSepArg, (caddr_t) NULL},
-{"-fbb", "*freeBoldBox", XrmoptionNoArg, (caddr_t)"off"},
-{"+fbb", "*freeBoldBox", XrmoptionNoArg, (caddr_t)"on"},
-{"-fbx", "*forceBoxChars", XrmoptionNoArg, (caddr_t)"off"},
-{"+fbx", "*forceBoxChars", XrmoptionNoArg, (caddr_t)"on"},
-#ifndef NO_ACTIVE_ICON
-{"-fi", "*iconFont", XrmoptionSepArg, (caddr_t) NULL},
-#endif /* NO_ACTIVE_ICON */
-#if OPT_RENDERFONT
-{"-fa", "*faceName", XrmoptionSepArg, (caddr_t) NULL},
-{"-fd", "*faceNameDoublesize", XrmoptionSepArg, (caddr_t) NULL},
-{"-fs", "*faceSize", XrmoptionSepArg, (caddr_t) NULL},
-#endif
-#if OPT_WIDE_CHARS
-{"-fw", "*wideFont", XrmoptionSepArg, (caddr_t) NULL},
-{"-fwb", "*wideBoldFont", XrmoptionSepArg, (caddr_t) NULL},
-#endif
-#if OPT_INPUT_METHOD
-{"-fx", "*ximFont", XrmoptionSepArg, (caddr_t) NULL},
-#endif
-#if OPT_HIGHLIGHT_COLOR
-{"-hc", "*highlightColor", XrmoptionSepArg, (caddr_t) NULL},
-#endif
-#if OPT_HP_FUNC_KEYS
-{"-hf", "*hpFunctionKeys",XrmoptionNoArg, (caddr_t) "on"},
-{"+hf", "*hpFunctionKeys",XrmoptionNoArg, (caddr_t) "off"},
-#endif
-{"-hold", "*hold", XrmoptionNoArg, (caddr_t) "on"},
-{"+hold", "*hold", XrmoptionNoArg, (caddr_t) "off"},
-#if OPT_INITIAL_ERASE
-{"-ie", "*ptyInitialErase", XrmoptionNoArg, (caddr_t) "on"},
-{"+ie", "*ptyInitialErase", XrmoptionNoArg, (caddr_t) "off"},
-#endif
-{"-j", "*jumpScroll", XrmoptionNoArg, (caddr_t) "on"},
-{"+j", "*jumpScroll", XrmoptionNoArg, (caddr_t) "off"},
-#if OPT_C1_PRINT
-{"-k8", "*allowC1Printable", XrmoptionNoArg, (caddr_t) "on"},
-{"+k8", "*allowC1Printable", XrmoptionNoArg, (caddr_t) "off"},
-#endif
-{"-kt", "*keyboardType", XrmoptionSepArg, (caddr_t) NULL},
-{"+kt", "*keyboardType", XrmoptionSepArg, (caddr_t) NULL},
-/* parse logging options anyway for compatibility */
-{"-l", "*logging", XrmoptionNoArg, (caddr_t) "on"},
-{"+l", "*logging", XrmoptionNoArg, (caddr_t) "off"},
-{"-lf", "*logFile", XrmoptionSepArg, (caddr_t) NULL},
-{"-ls", "*loginShell", XrmoptionNoArg, (caddr_t) "on"},
-{"+ls", "*loginShell", XrmoptionNoArg, (caddr_t) "off"},
-{"-mb", "*marginBell", XrmoptionNoArg, (caddr_t) "on"},
-{"+mb", "*marginBell", XrmoptionNoArg, (caddr_t) "off"},
-{"-mc", "*multiClickTime", XrmoptionSepArg, (caddr_t) NULL},
-{"-mesg", "*messages", XrmoptionNoArg, (caddr_t) "off"},
-{"+mesg", "*messages", XrmoptionNoArg, (caddr_t) "on"},
-{"-ms", "*pointerColor",XrmoptionSepArg, (caddr_t) NULL},
-{"-nb", "*nMarginBell", XrmoptionSepArg, (caddr_t) NULL},
-{"-nul", "*underLine", XrmoptionNoArg, (caddr_t) "off"},
-{"+nul", "*underLine", XrmoptionNoArg, (caddr_t) "on"},
-{"-pc", "*boldColors", XrmoptionNoArg, (caddr_t) "on"},
-{"+pc", "*boldColors", XrmoptionNoArg, (caddr_t) "off"},
-{"-rw", "*reverseWrap", XrmoptionNoArg, (caddr_t) "on"},
-{"+rw", "*reverseWrap", XrmoptionNoArg, (caddr_t) "off"},
-{"-s", "*multiScroll", XrmoptionNoArg, (caddr_t) "on"},
-{"+s", "*multiScroll", XrmoptionNoArg, (caddr_t) "off"},
-{"-sb", "*scrollBar", XrmoptionNoArg, (caddr_t) "on"},
-{"+sb", "*scrollBar", XrmoptionNoArg, (caddr_t) "off"},
-#ifdef SCROLLBAR_RIGHT
-{"-leftbar", "*rightScrollBar", XrmoptionNoArg, (caddr_t) "off"},
-{"-rightbar", "*rightScrollBar", XrmoptionNoArg, (caddr_t) "on"},
-#endif
-{"-rvc", "*colorRVMode", XrmoptionNoArg, (caddr_t) "off"},
-{"+rvc", "*colorRVMode", XrmoptionNoArg, (caddr_t) "on"},
-{"-sf", "*sunFunctionKeys", XrmoptionNoArg, (caddr_t) "on"},
-{"+sf", "*sunFunctionKeys", XrmoptionNoArg, (caddr_t) "off"},
-{"-si", "*scrollTtyOutput", XrmoptionNoArg, (caddr_t) "off"},
-{"+si", "*scrollTtyOutput", XrmoptionNoArg, (caddr_t) "on"},
-{"-sk", "*scrollKey", XrmoptionNoArg, (caddr_t) "on"},
-{"+sk", "*scrollKey", XrmoptionNoArg, (caddr_t) "off"},
-{"-sl", "*saveLines", XrmoptionSepArg, (caddr_t) NULL},
-#if OPT_SUNPC_KBD
-{"-sp", "*sunKeyboard", XrmoptionNoArg, (caddr_t) "on"},
-{"+sp", "*sunKeyboard", XrmoptionNoArg, (caddr_t) "off"},
-#endif
-#if OPT_TEK4014
-{"-t", "*tekStartup", XrmoptionNoArg, (caddr_t) "on"},
-{"+t", "*tekStartup", XrmoptionNoArg, (caddr_t) "off"},
-#endif
-{"-ti", "*decTerminalID",XrmoptionSepArg, (caddr_t) NULL},
-{"-tm", "*ttyModes", XrmoptionSepArg, (caddr_t) NULL},
-{"-tn", "*termName", XrmoptionSepArg, (caddr_t) NULL},
-#if OPT_WIDE_CHARS
-{"-u8", "*utf8", XrmoptionNoArg, (caddr_t) "2"},
-{"+u8", "*utf8", XrmoptionNoArg, (caddr_t) "0"},
-#endif
-#if OPT_LUIT_PROG
-{"-lc", "*locale", XrmoptionNoArg, (caddr_t) "on"},
-{"+lc", "*locale", XrmoptionNoArg, (caddr_t) "off"},
-{"-lcc", "*localeFilter",XrmoptionSepArg, (caddr_t) NULL},
-{"-en", "*locale", XrmoptionSepArg, (caddr_t) NULL},
-#endif
-{"-ulc", "*colorULMode", XrmoptionNoArg, (caddr_t) "off"},
-{"+ulc", "*colorULMode", XrmoptionNoArg, (caddr_t) "on"},
-{"-ulit", "*italicULMode", XrmoptionNoArg, (caddr_t) "off"},
-{"+ulit", "*italicULMode", XrmoptionNoArg, (caddr_t) "on"},
-{"-ut", "*utmpInhibit", XrmoptionNoArg, (caddr_t) "on"},
-{"+ut", "*utmpInhibit", XrmoptionNoArg, (caddr_t) "off"},
-{"-im", "*useInsertMode", XrmoptionNoArg, (caddr_t) "on"},
-{"+im", "*useInsertMode", XrmoptionNoArg, (caddr_t) "off"},
-{"-vb", "*visualBell", XrmoptionNoArg, (caddr_t) "on"},
-{"+vb", "*visualBell", XrmoptionNoArg, (caddr_t) "off"},
-{"-pob", "*popOnBell", XrmoptionNoArg, (caddr_t) "on"},
-{"+pob", "*popOnBell", XrmoptionNoArg, (caddr_t) "off"},
-#if OPT_WIDE_CHARS
-{"-wc", "*wideChars", XrmoptionNoArg, (caddr_t) "on"},
-{"+wc", "*wideChars", XrmoptionNoArg, (caddr_t) "off"},
-{"-mk_width", "*mkWidth", XrmoptionNoArg, (caddr_t) "on"},
-{"+mk_width", "*mkWidth", XrmoptionNoArg, (caddr_t) "off"},
-{"-cjk_width", "*cjkWidth", XrmoptionNoArg, (caddr_t) "on"},
-{"+cjk_width", "*cjkWidth", XrmoptionNoArg, (caddr_t) "off"},
-#endif
-{"-wf", "*waitForMap", XrmoptionNoArg, (caddr_t) "on"},
-{"+wf", "*waitForMap", XrmoptionNoArg, (caddr_t) "off"},
-#if OPT_ZICONBEEP
-{"-ziconbeep", "*zIconBeep", XrmoptionSepArg, (caddr_t) NULL},
-#endif
-#if OPT_SAME_NAME
-{"-samename", "*sameName", XrmoptionNoArg, (caddr_t) "on"},
-{"+samename", "*sameName", XrmoptionNoArg, (caddr_t) "off"},
-#endif
-#if OPT_SESSION_MGT
-{"-sm", "*sessionMgt", XrmoptionNoArg, (caddr_t) "on"},
-{"+sm", "*sessionMgt", XrmoptionNoArg, (caddr_t) "off"},
-#endif
-#if OPT_TOOLBAR
-{"-tb", "*"XtNtoolBar, XrmoptionNoArg, (caddr_t) "on"},
-{"+tb", "*"XtNtoolBar, XrmoptionNoArg, (caddr_t) "off"},
-#endif
-/* options that we process ourselves */
-{"-help", NULL, XrmoptionSkipNArgs, (caddr_t) NULL},
-{"-version", NULL, XrmoptionSkipNArgs, (caddr_t) NULL},
-{"-class", NULL, XrmoptionSkipArg, (caddr_t) NULL},
-{"-e", NULL, XrmoptionSkipLine, (caddr_t) NULL},
-{"-into", NULL, XrmoptionSkipArg, (caddr_t) NULL},
-/* bogus old compatibility stuff for which there are
- standard XtOpenApplication options now */
-{"%", "*tekGeometry", XrmoptionStickyArg, (caddr_t) NULL},
-{"#", ".iconGeometry",XrmoptionStickyArg, (caddr_t) NULL},
-{"-T", ".title", XrmoptionSepArg, (caddr_t) NULL},
-{"-n", "*iconName", XrmoptionSepArg, (caddr_t) NULL},
-{"-r", "*reverseVideo",XrmoptionNoArg, (caddr_t) "on"},
-{"+r", "*reverseVideo",XrmoptionNoArg, (caddr_t) "off"},
-{"-rv", "*reverseVideo",XrmoptionNoArg, (caddr_t) "on"},
-{"+rv", "*reverseVideo",XrmoptionNoArg, (caddr_t) "off"},
-{"-w", ".borderWidth", XrmoptionSepArg, (caddr_t) NULL},
-};
-
-static OptionHelp xtermOptions[] = {
-{ "-version", "print the version number" },
-{ "-help", "print out this message" },
-{ "-display displayname", "X server to contact" },
-{ "-geometry geom", "size (in characters) and position" },
-{ "-/+rv", "turn on/off reverse video" },
-{ "-bg color", "background color" },
-{ "-fg color", "foreground color" },
-{ "-bd color", "border color" },
-{ "-bw number", "border width in pixels" },
-{ "-fn fontname", "normal text font" },
-{ "-fb fontname", "bold text font" },
-{ "-/+fbb", "turn on/off normal/bold font comparison inhibit"},
-{ "-/+fbx", "turn off/on linedrawing characters"},
-#if OPT_RENDERFONT
-{ "-fa pattern", "FreeType font-selection pattern" },
-{ "-fd pattern", "FreeType Doublesize font-selection pattern" },
-{ "-fs size", "FreeType font-size" },
-#endif
-#if OPT_WIDE_CHARS
-{ "-fw fontname", "doublewidth text font" },
-{ "-fwb fontname", "doublewidth bold text font" },
-#endif
-#if OPT_INPUT_METHOD
-{ "-fx fontname", "XIM fontset" },
-#endif
-{ "-iconic", "start iconic" },
-{ "-name string", "client instance, icon, and title strings" },
-{ "-class string", "class string (XTerm)" },
-{ "-title string", "title string" },
-{ "-xrm resourcestring", "additional resource specifications" },
-{ "-/+132", "turn on/off 80/132 column switching" },
-{ "-/+ah", "turn on/off always highlight" },
-#ifndef NO_ACTIVE_ICON
-{ "-/+ai", "turn off/on active icon" },
-{ "-fi fontname", "icon font for active icon" },
-#endif /* NO_ACTIVE_ICON */
-{ "-b number", "internal border in pixels" },
-{ "-/+bc", "turn on/off text cursor blinking" },
-{ "-bcf milliseconds", "time text cursor is off when blinking"},
-{ "-bcn milliseconds", "time text cursor is on when blinking"},
-{ "-/+bdc", "turn off/on display of bold as color"},
-{ "-/+cb", "turn on/off cut-to-beginning-of-line inhibit" },
-{ "-cc classrange", "specify additional character classes" },
-{ "-/+cm", "turn off/on ANSI color mode" },
-{ "-/+cn", "turn on/off cut newline inhibit" },
-{ "-cr color", "text cursor color" },
-{ "-/+cu", "turn on/off curses emulation" },
-{ "-/+dc", "turn off/on dynamic color selection" },
-#if OPT_HIGHLIGHT_COLOR
-{ "-hc color", "selection background color" },
-#endif
-#if OPT_HP_FUNC_KEYS
-{ "-/+hf", "turn on/off HP Function Key escape codes" },
-#endif
-{ "-/+hold", "turn on/off logic that retains window after exit" },
-#if OPT_INITIAL_ERASE
-{ "-/+ie", "turn on/off initialization of 'erase' from pty" },
-#endif
-{ "-/+im", "use insert mode for TERMCAP" },
-{ "-/+j", "turn on/off jump scroll" },
-#if OPT_C1_PRINT
-{ "-/+k8", "turn on/off C1-printable classification"},
-#endif
-{ "-kt keyboardtype", "set keyboard type:" KEYBOARD_TYPES },
-#ifdef ALLOWLOGGING
-{ "-/+l", "turn on/off logging" },
-{ "-lf filename", "logging filename" },
-#else
-{ "-/+l", "turn on/off logging (not supported)" },
-{ "-lf filename", "logging filename (not supported)" },
-#endif
-{ "-/+ls", "turn on/off login shell" },
-{ "-/+mb", "turn on/off margin bell" },
-{ "-mc milliseconds", "multiclick time in milliseconds" },
-{ "-/+mesg", "forbid/allow messages" },
-{ "-ms color", "pointer color" },
-{ "-nb number", "margin bell in characters from right end" },
-{ "-/+nul", "turn off/on display of underlining" },
-{ "-/+aw", "turn on/off auto wraparound" },
-{ "-/+pc", "turn on/off PC-style bold colors" },
-{ "-/+rw", "turn on/off reverse wraparound" },
-{ "-/+s", "turn on/off multiscroll" },
-{ "-/+sb", "turn on/off scrollbar" },
-#ifdef SCROLLBAR_RIGHT
-{ "-rightbar", "force scrollbar right (default left)" },
-{ "-leftbar", "force scrollbar left" },
-#endif
-{ "-/+rvc", "turn off/on display of reverse as color" },
-{ "-/+sf", "turn on/off Sun Function Key escape codes" },
-{ "-/+si", "turn on/off scroll-on-tty-output inhibit" },
-{ "-/+sk", "turn on/off scroll-on-keypress" },
-{ "-sl number", "number of scrolled lines to save" },
-#if OPT_SUNPC_KBD
-{ "-/+sp", "turn on/off Sun/PC Function/Keypad mapping" },
-#endif
-#if OPT_TEK4014
-{ "-/+t", "turn on/off Tek emulation window" },
-#endif
-#if OPT_TOOLBAR
-{ "-/+tb", "turn on/off toolbar" },
-#endif
-{ "-ti termid", "terminal identifier" },
-{ "-tm string", "terminal mode keywords and characters" },
-{ "-tn name", "TERM environment variable name" },
-#if OPT_WIDE_CHARS
-{ "-/+u8", "turn on/off UTF-8 mode (implies wide-characters)" },
-#endif
-#if OPT_LUIT_PROG
-{ "-/+lc", "turn on/off locale mode using luit" },
-{ "-lcc path", "filename of locale converter (" DEFLOCALEFILTER ")" },
-#endif
-{ "-/+ulc", "turn off/on display of underline as color" },
-{ "-/+ulit", "turn off/on display of underline as italics" },
-#ifdef HAVE_UTMP
-{ "-/+ut", "turn on/off utmp support" },
-#else
-{ "-/+ut", "turn on/off utmp support (not available)" },
-#endif
-{ "-/+vb", "turn on/off visual bell" },
-{ "-/+pob", "turn on/off pop on bell" },
-#if OPT_WIDE_CHARS
-{ "-/+wc", "turn on/off wide-character mode" },
-{ "-/+mk_width", "turn on/off simple width convention" },
-{ "-/+cjk_width", "turn on/off legacy CJK width convention" },
-#endif
-{ "-/+wf", "turn on/off wait for map before command exec" },
-{ "-e command args ...", "command to execute" },
-#if OPT_TEK4014
-{ "%geom", "Tek window geometry" },
-#endif
-{ "#geom", "icon window geometry" },
-{ "-T string", "title name for window" },
-{ "-n string", "icon name for window" },
-#if defined(TIOCCONS) || defined(SRIOCSREDIR)
-{ "-C", "intercept console messages" },
-#else
-{ "-C", "intercept console messages (not supported)" },
-#endif
-{ "-Sccn", "slave mode on \"ttycc\", file descriptor \"n\"" },
-{ "-into windowId", "use the window id given to -into as the parent window rather than the default root window" },
-#if OPT_ZICONBEEP
-{ "-ziconbeep percent", "beep and flag icon of window having hidden output" },
-#endif
-#if OPT_SAME_NAME
-{ "-/+samename", "turn on/off the no-flicker option for title and icon name" },
-#endif
-#if OPT_SESSION_MGT
-{ "-/+sm", "turn on/off the session-management support" },
-#endif
-{ NULL, NULL }};
-/* *INDENT-ON* */
-
-static char *message[] =
-{
- "Fonts should be fixed width and, if both normal and bold are specified, should",
- "have the same size. If only a normal font is specified, it will be used for",
- "both normal and bold text (by doing overstriking). The -e option, if given,",
- "must appear at the end of the command line, otherwise the user's default shell",
- "will be started. Options that start with a plus sign (+) restore the default.",
- NULL};
-
-/*
- * Decode a key-definition. This combines the termcap and ttyModes, for
- * comparison. Note that octal escapes in ttyModes are done by the normal
- * resource translation. Also, ttyModes allows '^-' as a synonym for disabled.
- */
-static int
-decode_keyvalue(char **ptr, int termcap)
-{
- char *string = *ptr;
- int value = -1;
-
- TRACE(("...decode '%s'\n", string));
- if (*string == '^') {
- switch (*++string) {
- case '?':
- value = A2E(127);
- break;
- case '-':
- if (!termcap) {
- errno = 0;
-#if defined(_POSIX_VDISABLE) && defined(HAVE_UNISTD_H)
- value = _POSIX_VDISABLE;
-#endif
-#if defined(_PC_VDISABLE)
- if (value == -1) {
- value = fpathconf(0, _PC_VDISABLE);
- if (value == -1) {
- if (errno != 0)
- break; /* skip this (error) */
- value = 0377;
- }
- }
-#elif defined(VDISABLE)
- if (value == -1)
- value = VDISABLE;
-#endif
- break;
- }
- /* FALLTHRU */
- default:
- value = CONTROL(*string);
- break;
- }
- ++string;
- } else if (termcap && (*string == '\\')) {
- char *d;
- int temp = strtol(string + 1, &d, 8);
- if (temp > 0 && d != string) {
- value = temp;
- string = d;
- }
- } else {
- value = CharOf(*string);
- ++string;
- }
- *ptr = string;
- return value;
-}
-
-/*
- * If we're linked to terminfo, tgetent() will return an empty buffer. We
- * cannot use that to adjust the $TERMCAP variable.
- */
-static Bool
-get_termcap(char *name, char *buffer, char *resized)
-{
- TScreen *screen = &term->screen;
-
- *buffer = 0; /* initialize, in case we're using terminfo's tgetent */
-
- if (name != 0) {
- if (tgetent(buffer, name) == 1) {
- TRACE(("get_termcap(%s) succeeded (%s)\n", name,
- (*buffer
- ? "ok:termcap, we can update $TERMCAP"
- : "assuming this is terminfo")));
- if (*buffer) {
- if (!TEK4014_ACTIVE(screen)) {
- resize(screen, buffer, resized);
- }
- }
- return True;
- } else {
- *buffer = 0; /* just in case */
- }
- }
- return False;
-}
-
-static int
-abbrev(char *tst, char *cmp, size_t need)
-{
- size_t len = strlen(tst);
- return ((len >= need) && (!strncmp(tst, cmp, len)));
-}
-
-static void
-Syntax(char *badOption)
-{
- OptionHelp *opt;
- OptionHelp *list = sortedOpts(xtermOptions, optionDescList, XtNumber(optionDescList));
- int col;
-
- fprintf(stderr, "%s: bad command line option \"%s\"\r\n\n",
- ProgramName, badOption);
-
- fprintf(stderr, "usage: %s", ProgramName);
- col = 8 + strlen(ProgramName);
- for (opt = list; opt->opt; opt++) {
- int len = 3 + strlen(opt->opt); /* space [ string ] */
- if (col + len > 79) {
- fprintf(stderr, "\r\n "); /* 3 spaces */
- col = 3;
- }
- fprintf(stderr, " [%s]", opt->opt);
- col += len;
- }
-
- fprintf(stderr, "\r\n\nType %s -help for a full description.\r\n\n",
- ProgramName);
- exit(1);
-}
-
-static void
-Version(void)
-{
- printf("%s\n", xtermVersion());
- fflush(stdout);
-}
-
-static void
-Help(void)
-{
- OptionHelp *opt;
- OptionHelp *list = sortedOpts(xtermOptions, optionDescList, XtNumber(optionDescList));
- char **cpp;
-
- printf("%s usage:\n %s [-options ...] [-e command args]\n\n",
- xtermVersion(), ProgramName);
- printf("where options include:\n");
- for (opt = list; opt->opt; opt++) {
- printf(" %-28s %s\n", opt->opt, opt->desc);
- }
-
- putchar('\n');
- for (cpp = message; *cpp; cpp++)
- puts(*cpp);
- putchar('\n');
- fflush(stdout);
-}
-
-#if defined(TIOCCONS) || defined(SRIOCSREDIR)
-/* ARGSUSED */
-static Boolean
-ConvertConsoleSelection(Widget w GCC_UNUSED,
- Atom * selection GCC_UNUSED,
- Atom * target GCC_UNUSED,
- Atom * type GCC_UNUSED,
- XtPointer *value GCC_UNUSED,
- unsigned long *length GCC_UNUSED,
- int *format GCC_UNUSED)
-{
- /* we don't save console output, so can't offer it */
- return False;
-}
-#endif /* TIOCCONS */
-
-#if OPT_SESSION_MGT
-static void
-die_callback(Widget w GCC_UNUSED,
- XtPointer client_data GCC_UNUSED,
- XtPointer call_data GCC_UNUSED)
-{
- Cleanup(0);
-}
-
-static void
-save_callback(Widget w GCC_UNUSED,
- XtPointer client_data GCC_UNUSED,
- XtPointer call_data)
-{
- XtCheckpointToken token = (XtCheckpointToken) call_data;
- /* we have nothing to save */
- token->save_success = True;
-}
-#endif /* OPT_SESSION_MGT */
-
-/*
- * DeleteWindow(): Action proc to implement ICCCM delete_window.
- */
-/* ARGSUSED */
-static void
-DeleteWindow(Widget w,
- XEvent * event GCC_UNUSED,
- String * params GCC_UNUSED,
- Cardinal *num_params GCC_UNUSED)
-{
-#if OPT_TEK4014
- if (w == toplevel) {
- if (term->screen.Tshow)
- hide_vt_window();
- else
- do_hangup(w, (XtPointer) 0, (XtPointer) 0);
- } else if (term->screen.Vshow)
- hide_tek_window();
- else
-#endif
- do_hangup(w, (XtPointer) 0, (XtPointer) 0);
-}
-
-/* ARGSUSED */
-static void
-KeyboardMapping(Widget w GCC_UNUSED,
- XEvent * event,
- String * params GCC_UNUSED,
- Cardinal *num_params GCC_UNUSED)
-{
- switch (event->type) {
- case MappingNotify:
- XRefreshKeyboardMapping(&event->xmapping);
- break;
- }
-}
-
-static XtActionsRec actionProcs[] =
-{
- {"DeleteWindow", DeleteWindow},
- {"KeyboardMapping", KeyboardMapping},
-};
-
-/*
- * Some platforms use names such as /dev/tty01, others /dev/pts/1. Parse off
- * the "tty01" or "pts/1" portion, and return that for use as an identifier for
- * utmp.
- */
-static char *
-my_pty_name(char *device)
-{
- size_t len = strlen(device);
- Bool name = False;
-
- while (len != 0) {
- int ch = device[len - 1];
- if (isdigit(ch)) {
- len--;
- } else if (ch == '/') {
- if (name)
- break;
- len--;
- } else if (isalpha(ch)) {
- name = True;
- len--;
- } else {
- break;
- }
- }
- TRACE(("my_pty_name(%s) -> '%s'\n", device, device + len));
- return device + len;
-}
-
-/*
- * If the name contains a '/', it is a "pts/1" case. Otherwise, return the
- * last few characters for a utmp identifier.
- */
-static char *
-my_pty_id(char *device)
-{
- char *name = my_pty_name(device);
- char *leaf = x_basename(name);
-
- if (name == leaf) { /* no '/' in the name */
- int len = strlen(leaf);
- if (PTYCHARLEN < len)
- leaf = leaf + (len - PTYCHARLEN);
- }
- TRACE(("my_pty_id (%s) -> '%s'\n", device, leaf));
- return leaf;
-}
-
-/*
- * Set the tty/pty identifier
- */
-static void
-set_pty_id(char *device, char *id)
-{
- char *name = my_pty_name(device);
- char *leaf = x_basename(name);
-
- if (name == leaf) {
- strcpy(my_pty_id(device), id);
- } else {
- strcpy(leaf, id);
- }
- TRACE(("set_pty_id(%s) -> '%s'\n", id, device));
-}
-
-/*
- * The original -S option accepts two characters to identify the pty, and a
- * file-descriptor (assumed to be nonzero). That is not general enough, so we
- * check first if the option contains a '/' to delimit the two fields, and if
- * not, fall-thru to the original logic.
- */
-static Bool
-ParseSccn(char *option)
-{
- char *leaf = x_basename(option);
- Bool code = False;
-
- if (leaf != option) {
- if (leaf - option > 0
- && isdigit(CharOf(*leaf))
- && sscanf(leaf, "%d", &am_slave) == 1) {
- size_t len = leaf - option - 1;
- /*
- * If we have a slash, we only care about the part after the slash,
- * which is a file-descriptor. The part before the slash can be
- * the /dev/pts/XXX value, but since we do not need to reopen it,
- * it is useful mainly for display in a "ps -ef".
- */
- strncpy(passedPty, option, len);
- passedPty[len] = 0;
- code = True;
- }
- } else {
- code = (sscanf(option, "%c%c%d",
- passedPty, passedPty + 1, &am_slave) == 3);
- }
- TRACE(("ParseSccn(%s) = '%s' %d (%s)\n", option,
- passedPty, am_slave, code ? "OK" : "ERR"));
- return code;
-}
-
-#if defined(USE_SYSV_UTMP) && !defined(USE_UTEMPTER)
-/*
- * From "man utmp":
- * xterm and other terminal emulators directly create a USER_PROCESS record
- * and generate the ut_id by using the last two letters of /dev/ttyp%c or by
- * using p%d for /dev/pts/%d. If they find a DEAD_PROCESS for this id, they
- * recycle it, otherwise they create a new entry. If they can, they will mark
- * it as DEAD_PROCESS on exiting and it is advised that they null ut_line,
- * ut_time, ut_user and ut_host as well.
- *
- * Generally ut_id allows no more than 3 characters (plus null), even if the
- * pty implementation allows more than 3 digits.
- */
-static char *
-my_utmp_id(char *device)
-{
- typedef struct UTMP_STR UTMP_STRUCT;
-#define UTIDSIZE (sizeof(((UTMP_STRUCT *)NULL)->ut_id))
- static char result[UTIDSIZE + 1];
-
-#if defined(__SCO__) || defined(__UNIXWARE__)
- /*
- * Legend does not support old-style pty's, has no related compatibility
- * issues, and can use the available space in ut_id differently from the
- * default convention.
- *
- * This scheme is intended to avoid conflicts both with other users of
- * utmpx as well as between multiple xterms. First, Legend uses all of the
- * characters of ut_id, and adds no terminating NUL is required (the
- * default scheme may add a trailing NUL). Second, all xterm entries will
- * start with the letter 'x' followed by three digits, which will be the
- * last three digits of the device name, regardless of the format of the
- * device name, with leading 0's added where necessary. For instance, an
- * xterm on /dev/pts/3 will have a ut_id of x003; an xterm on /dev/pts123
- * will have a ut_id of x123. Under the other convention, /dev/pts/3 would
- * have a ut_id of p3 and /dev/pts123 would have a ut_id of p123.
- */
- int len, n;
-
- len = strlen(device);
- n = UTIDSIZE;
- result[n] = '\0';
- while ((n > 0) && (len > 0) && isdigit(device[len - 1]))
- result[--n] = device[--len];
- while (n > 0)
- result[--n] = '0';
- result[0] = 'x';
-#else
- char *name = my_pty_name(device);
- char *leaf = x_basename(name);
- size_t len = strlen(leaf);
-
- if ((UTIDSIZE - 1) < len)
- leaf = leaf + (len - (UTIDSIZE - 1));
- sprintf(result, "p%s", leaf);
-#endif
-
- TRACE(("my_utmp_id (%s) -> '%s'\n", device, result));
- return result;
-}
-#endif /* USE_SYSV_UTMP */
-
-#ifdef USE_POSIX_SIGNALS
-
-typedef void (*sigfunc) (int);
-
-/* make sure we sure we ignore SIGCHLD for the cases parent
- has just been stopped and not actually killed */
-
-static sigfunc
-posix_signal(int signo, sigfunc func)
-{
- struct sigaction act, oact;
-
- act.sa_handler = func;
- sigemptyset(&act.sa_mask);
-#ifdef SA_RESTART
- act.sa_flags = SA_NOCLDSTOP | SA_RESTART;
-#else
- act.sa_flags = SA_NOCLDSTOP;
-#endif
- if (sigaction(signo, &act, &oact) < 0)
- return (SIG_ERR);
- return (oact.sa_handler);
-}
-
-#endif /* linux && _POSIX_SOURCE */
-
-int
-main(int argc, char *argv[]ENVP_ARG)
-{
- Widget form_top, menu_top;
- TScreen *screen;
- int mode;
- char *my_class = DEFCLASS;
- Window winToEmbedInto = None;
-
-#ifdef DISABLE_SETUID
- if (seteuid(getuid()) == -1)
- exit(2);
- if (setuid(getuid()) == -1)
- exit(2);
-#endif
-
- ProgramName = argv[0];
-
- /* extra length in case longer tty name like /dev/ttyq255 */
- ttydev = TypeMallocN(char, sizeof(TTYDEV) + 80);
-#ifdef USE_PTY_DEVICE
- ptydev = TypeMallocN(char, sizeof(PTYDEV) + 80);
- if (!ttydev || !ptydev)
-#else
- if (!ttydev)
-#endif
- {
- fprintf(stderr,
- "%s: unable to allocate memory for ttydev or ptydev\n",
- ProgramName);
- exit(1);
- }
- strcpy(ttydev, TTYDEV);
-#ifdef USE_PTY_DEVICE
- strcpy(ptydev, PTYDEV);
-#endif
-
-#if defined(USE_UTMP_SETGID)
- get_pty(NULL, NULL);
- if (seteuid(getuid()) == -1) {
- fprintf(stderr,
- "%s: unable to change back euid\n", ProgramName);
- exit(1);
- }
- if (setuid(getuid()) == -1) {
- fprintf(stderr,
- "%s: unable to change back uid\n", ProgramName);
- exit(1);
- }
-#define get_pty(pty, from) really_get_pty(pty, from)
-#endif
-
- /* Do these first, since we may not be able to open the display */
- TRACE_OPTS(xtermOptions, optionDescList, XtNumber(optionDescList));
- TRACE_ARGV("Before XtOpenApplication", argv);
- if (argc > 1) {
- int n;
- unsigned unique = 2;
- Bool quit = True;
-
- for (n = 1; n < argc; n++) {
- TRACE(("parsing %s\n", argv[n]));
- if (abbrev(argv[n], "-version", unique)) {
- Version();
- } else if (abbrev(argv[n], "-help", unique)) {
- Help();
- } else if (abbrev(argv[n], "-class", 3)) {
- if ((my_class = argv[++n]) == 0) {
- Help();
- } else {
- quit = False;
- }
- unique = 3;
- } else {
- quit = False;
- unique = 3;
- }
- }
- if (quit)
- exit(0);
- }
-
- /* This dumps core on HP-UX 9.05 with X11R5 */
-#if OPT_I18N_SUPPORT
- XtSetLanguageProc(NULL, NULL, NULL);
-#endif
-
-#ifdef TERMIO_STRUCT /* { */
- /* Initialization is done here rather than above in order
- * to prevent any assumptions about the order of the contents
- * of the various terminal structures (which may change from
- * implementation to implementation).
- */
- d_tio.c_iflag = ICRNL | IXON;
-#ifdef TAB3
- d_tio.c_oflag = OPOST | ONLCR | TAB3;
-#else
-#ifdef ONLCR
- d_tio.c_oflag = OPOST | ONLCR;
-#else
- d_tio.c_oflag = OPOST;
-#endif
-#endif
-#if defined(macII) || defined(ATT) || defined(CRAY) /* { */
- d_tio.c_cflag = VAL_LINE_SPEED | CS8 | CREAD | PARENB | HUPCL;
- d_tio.c_lflag = ISIG | ICANON | ECHO | ECHOE | ECHOK;
-#ifdef ECHOKE
- d_tio.c_lflag |= ECHOKE | IEXTEN;
-#endif
-#ifdef ECHOCTL
- d_tio.c_lflag |= ECHOCTL | IEXTEN;
-#endif
-
-#ifndef USE_TERMIOS /* { */
- d_tio.c_line = 0;
-#endif /* } */
-
- d_tio.c_cc[VINTR] = CINTR;
- d_tio.c_cc[VQUIT] = CQUIT;
- d_tio.c_cc[VERASE] = CERASE;
- d_tio.c_cc[VKILL] = CKILL;
- d_tio.c_cc[VEOF] = CEOF;
- d_tio.c_cc[VEOL] = CNUL;
- d_tio.c_cc[VEOL2] = CNUL;
-#ifdef VSWTCH
- d_tio.c_cc[VSWTCH] = CNUL;
-#endif
-
-#if defined(USE_TERMIOS) || defined(USE_POSIX_TERMIOS) /* { */
- d_tio.c_cc[VSUSP] = CSUSP;
-#ifdef VDSUSP
- d_tio.c_cc[VDSUSP] = CDSUSP;
-#endif
- d_tio.c_cc[VREPRINT] = CRPRNT;
- d_tio.c_cc[VDISCARD] = CFLUSH;
- d_tio.c_cc[VWERASE] = CWERASE;
- d_tio.c_cc[VLNEXT] = CLNEXT;
- d_tio.c_cc[VMIN] = 1;
- d_tio.c_cc[VTIME] = 0;
-#endif /* } */
-#ifdef HAS_LTCHARS /* { */
- d_ltc.t_suspc = CSUSP; /* t_suspc */
- d_ltc.t_dsuspc = CDSUSP; /* t_dsuspc */
- d_ltc.t_rprntc = CRPRNT;
- d_ltc.t_flushc = CFLUSH;
- d_ltc.t_werasc = CWERASE;
- d_ltc.t_lnextc = CLNEXT;
-#endif /* } HAS_LTCHARS */
-#ifdef TIOCLSET /* { */
- d_lmode = 0;
-#endif /* } TIOCLSET */
-#else /* }{ else !macII, ATT, CRAY */
-#ifndef USE_POSIX_TERMIOS
-#ifdef BAUD_0 /* { */
- d_tio.c_cflag = CS8 | CREAD | PARENB | HUPCL;
-#else /* }{ !BAUD_0 */
- d_tio.c_cflag = VAL_LINE_SPEED | CS8 | CREAD | PARENB | HUPCL;
-#endif /* } !BAUD_0 */
-#else /* USE_POSIX_TERMIOS */
- d_tio.c_cflag = CS8 | CREAD | PARENB | HUPCL;
- cfsetispeed(&d_tio, VAL_LINE_SPEED);
- cfsetospeed(&d_tio, VAL_LINE_SPEED);
-#endif
- d_tio.c_lflag = ISIG | ICANON | ECHO | ECHOE | ECHOK;
-#ifdef ECHOKE
- d_tio.c_lflag |= ECHOKE | IEXTEN;
-#endif
-#ifdef ECHOCTL
- d_tio.c_lflag |= ECHOCTL | IEXTEN;
-#endif
-#ifndef USE_POSIX_TERMIOS
-#ifdef NTTYDISC
- d_tio.c_line = NTTYDISC;
-#else
- d_tio.c_line = 0;
-#endif
-#endif /* USE_POSIX_TERMIOS */
-#ifdef __sgi
- d_tio.c_cflag &= ~(HUPCL | PARENB);
- d_tio.c_iflag |= BRKINT | ISTRIP | IGNPAR;
-#endif
-#ifdef __MVS__
- d_tio.c_cflag &= ~(HUPCL | PARENB);
-#endif
- d_tio.c_cc[VINTR] = CONTROL('C'); /* '^C' */
- d_tio.c_cc[VERASE] = 0x7f; /* DEL */
- d_tio.c_cc[VKILL] = CONTROL('U'); /* '^U' */
- d_tio.c_cc[VQUIT] = CQUIT; /* '^\' */
- d_tio.c_cc[VEOF] = CEOF; /* '^D' */
- d_tio.c_cc[VEOL] = CEOL; /* '^@' */
- d_tio.c_cc[VMIN] = 1;
- d_tio.c_cc[VTIME] = 0;
-#ifdef VSWTCH
- d_tio.c_cc[VSWTCH] = CSWTCH; /* usually '^Z' */
-#endif
-#ifdef VLNEXT
- d_tio.c_cc[VLNEXT] = CLNEXT;
-#endif
-#ifdef VWERASE
- d_tio.c_cc[VWERASE] = CWERASE;
-#endif
-#ifdef VREPRINT
- d_tio.c_cc[VREPRINT] = CRPRNT;
-#endif
-#ifdef VRPRNT
- d_tio.c_cc[VRPRNT] = CRPRNT;
-#endif
-#ifdef VDISCARD
- d_tio.c_cc[VDISCARD] = CFLUSH;
-#endif
-#ifdef VFLUSHO
- d_tio.c_cc[VFLUSHO] = CFLUSH;
-#endif
-#ifdef VSTOP
- d_tio.c_cc[VSTOP] = CSTOP;
-#endif
-#ifdef VSTART
- d_tio.c_cc[VSTART] = CSTART;
-#endif
-#ifdef VSUSP
- d_tio.c_cc[VSUSP] = CSUSP;
-#endif
-#ifdef VDSUSP
- d_tio.c_cc[VDSUSP] = CDSUSP;
-#endif
-#ifdef VSTATUS
- d_tio.c_cc[VSTATUS] = CSTATUS;
-#endif
- /* now, try to inherit tty settings */
- {
- int i;
-
- for (i = 0; i <= 2; i++) {
- TERMIO_STRUCT deftio;
- if (ttyGetAttr(i, &deftio) == 0) {
- d_tio.c_cc[VINTR] = deftio.c_cc[VINTR];
- d_tio.c_cc[VQUIT] = deftio.c_cc[VQUIT];
- d_tio.c_cc[VERASE] = deftio.c_cc[VERASE];
- d_tio.c_cc[VKILL] = deftio.c_cc[VKILL];
- d_tio.c_cc[VEOF] = deftio.c_cc[VEOF];
- d_tio.c_cc[VEOL] = deftio.c_cc[VEOL];
-#ifdef VSWTCH
- d_tio.c_cc[VSWTCH] = deftio.c_cc[VSWTCH];
-#endif
-#ifdef VEOL2
- d_tio.c_cc[VEOL2] = deftio.c_cc[VEOL2];
-#endif
-#ifdef VLNEXT
- d_tio.c_cc[VLNEXT] = deftio.c_cc[VLNEXT];
-#endif
-#ifdef VWERASE
- d_tio.c_cc[VWERASE] = deftio.c_cc[VWERASE];
-#endif
-#ifdef VREPRINT
- d_tio.c_cc[VREPRINT] = deftio.c_cc[VREPRINT];
-#endif
-#ifdef VRPRNT
- d_tio.c_cc[VRPRNT] = deftio.c_cc[VRPRNT];
-#endif
-#ifdef VDISCARD
- d_tio.c_cc[VDISCARD] = deftio.c_cc[VDISCARD];
-#endif
-#ifdef VFLUSHO
- d_tio.c_cc[VFLUSHO] = deftio.c_cc[VFLUSHO];
-#endif
-#ifdef VSTOP
- d_tio.c_cc[VSTOP] = deftio.c_cc[VSTOP];
-#endif
-#ifdef VSTART
- d_tio.c_cc[VSTART] = deftio.c_cc[VSTART];
-#endif
-#ifdef VSUSP
- d_tio.c_cc[VSUSP] = deftio.c_cc[VSUSP];
-#endif
-#ifdef VDSUSP
- d_tio.c_cc[VDSUSP] = deftio.c_cc[VDSUSP];
-#endif
-#ifdef VSTATUS
- d_tio.c_cc[VSTATUS] = deftio.c_cc[VSTATUS];
-#endif
- break;
- }
- }
- }
-#ifdef HAS_LTCHARS /* { */
- d_ltc.t_suspc = CharOf('\000'); /* t_suspc */
- d_ltc.t_dsuspc = CharOf('\000'); /* t_dsuspc */
- d_ltc.t_rprntc = CharOf('\377'); /* reserved... */
- d_ltc.t_flushc = CharOf('\377');
- d_ltc.t_werasc = CharOf('\377');
- d_ltc.t_lnextc = CharOf('\377');
-#endif /* } HAS_LTCHARS */
-#if defined(USE_TERMIOS) || defined(USE_POSIX_TERMIOS) /* { */
- d_tio.c_cc[VSUSP] = CSUSP;
-#ifdef VDSUSP
- d_tio.c_cc[VDSUSP] = CharOf('\000');
-#endif
-#ifdef VSTATUS
- d_tio.c_cc[VSTATUS] = CharOf('\377');
-#endif
-#ifdef VREPRINT
- d_tio.c_cc[VREPRINT] = CharOf('\377');
-#endif
-#ifdef VDISCARD
- d_tio.c_cc[VDISCARD] = CharOf('\377');
-#endif
-#ifdef VWERASE
- d_tio.c_cc[VWERASE] = CharOf('\377');
-#endif
-#ifdef VLNEXT
- d_tio.c_cc[VLNEXT] = CharOf('\377');
-#endif
-#endif /* } USE_TERMIOS */
-#ifdef TIOCLSET /* { */
- d_lmode = 0;
-#endif /* } TIOCLSET */
-#endif /* } macII, ATT, CRAY */
-#endif /* } TERMIO_STRUCT */
-
- /* Init the Toolkit. */
- {
-#ifdef HAS_SAVED_IDS_AND_SETEUID
- uid_t euid = geteuid();
- gid_t egid = getegid();
- uid_t ruid = getuid();
- gid_t rgid = getgid();
-
- if (setegid(rgid) == -1) {
-#ifdef __MVS__
- if (!(errno == EMVSERR)) /* could happen if _BPX_SHAREAS=REUSE */
-#endif
- (void) fprintf(stderr, "setegid(%d): %s\n",
- (int) rgid, strerror(errno));
- }
-
- if (seteuid(ruid) == -1) {
-#ifdef __MVS__
- if (!(errno == EMVSERR))
-#endif
- (void) fprintf(stderr, "seteuid(%d): %s\n",
- (int) ruid, strerror(errno));
- }
-#endif
-
- XtSetErrorHandler(xt_error);
-#if OPT_SESSION_MGT
- toplevel = XtOpenApplication(&app_con, my_class,
- optionDescList,
- XtNumber(optionDescList),
- &argc, argv, fallback_resources,
- sessionShellWidgetClass,
- NULL, 0);
-#else
- toplevel = XtAppInitialize(&app_con, my_class,
- optionDescList,
- XtNumber(optionDescList),
- &argc, argv, fallback_resources,
- NULL, 0);
-#endif /* OPT_SESSION_MGT */
- XtSetErrorHandler((XtErrorHandler) 0);
-
- XtGetApplicationResources(toplevel, (XtPointer) &resource,
- application_resources,
- XtNumber(application_resources), NULL, 0);
- TRACE_XRES();
-
-#ifdef HAS_SAVED_IDS_AND_SETEUID
- if (seteuid(euid) == -1) {
-#ifdef __MVS__
- if (!(errno == EMVSERR))
-#endif
- (void) fprintf(stderr, "seteuid(%d): %s\n",
- (int) euid, strerror(errno));
- }
-
- if (setegid(egid) == -1) {
-#ifdef __MVS__
- if (!(errno == EMVSERR))
-#endif
- (void) fprintf(stderr, "setegid(%d): %s\n",
- (int) egid, strerror(errno));
- }
-#endif
-
-#if defined(USE_UTMP_SETGID)
- if (resource.utmpInhibit) {
- /* Can totally revoke group privs */
- setegid(getgid());
- setgid(getgid());
- }
-#endif
- }
-
- waiting_for_initial_map = resource.wait_for_map;
-
- /*
- * ICCCM delete_window.
- */
- XtAppAddActions(app_con, actionProcs, XtNumber(actionProcs));
-
- /*
- * fill in terminal modes
- */
- if (resource.tty_modes) {
- int n = parse_tty_modes(resource.tty_modes, ttymodelist);
- if (n < 0) {
- fprintf(stderr, "%s: bad tty modes \"%s\"\n",
- ProgramName, resource.tty_modes);
- } else if (n > 0) {
- override_tty_modes = 1;
- }
- }
-#if OPT_ZICONBEEP
- zIconBeep = resource.zIconBeep;
- zIconBeep_flagged = False;
- if (zIconBeep > 100 || zIconBeep < -100) {
- zIconBeep = 0; /* was 100, but I prefer to defaulting off. */
- fprintf(stderr,
- "a number between -100 and 100 is required for zIconBeep. 0 used by default\n");
- }
-#endif /* OPT_ZICONBEEP */
-#if OPT_SAME_NAME
- sameName = resource.sameName;
-#endif
- hold_screen = resource.hold_screen ? 1 : 0;
- xterm_name = resource.xterm_name;
- if (strcmp(xterm_name, "-") == 0)
- xterm_name = DFT_TERMTYPE;
- if (resource.icon_geometry != NULL) {
- int scr, junk;
- int ix, iy;
- Arg args[2];
-
- for (scr = 0; /* yyuucchh */
- XtScreen(toplevel) != ScreenOfDisplay(XtDisplay(toplevel), scr);
- scr++) ;
-
- args[0].name = XtNiconX;
- args[1].name = XtNiconY;
- XGeometry(XtDisplay(toplevel), scr, resource.icon_geometry, "",
- 0, 0, 0, 0, 0, &ix, &iy, &junk, &junk);
- args[0].value = (XtArgVal) ix;
- args[1].value = (XtArgVal) iy;
- XtSetValues(toplevel, args, 2);
- }
-
- XtSetValues(toplevel, ourTopLevelShellArgs,
- number_ourTopLevelShellArgs);
-
-#if OPT_WIDE_CHARS
- /* seems as good a place as any */
- init_classtab();
-#endif
-
- /* Parse the rest of the command line */
- TRACE_ARGV("After XtOpenApplication", argv);
- for (argc--, argv++; argc > 0; argc--, argv++) {
-#ifdef VMS
- if (**argv != '-')
- Syntax(*argv);
-#else
- if (**argv != '-') {
- if (argc > 1)
- Syntax(*argv);
- if (command_to_exec == 0) /* if no "-e" option */
- explicit_shname = xtermFindShell(*argv, True);
- continue;
- }
-#endif
-
- TRACE(("parsing %s\n", argv[0]));
- switch (argv[0][1]) {
- case 'h': /* -help */
- Help();
- continue;
- case 'v': /* -version */
- Version();
- continue;
- case 'C':
-#if defined(TIOCCONS) || defined(SRIOCSREDIR)
-#ifndef __sgi
- {
- struct stat sbuf;
-
- /* Must be owner and have read/write permission.
- xdm cooperates to give the console the right user. */
- if (!stat("/dev/console", &sbuf) &&
- (sbuf.st_uid == getuid()) &&
- !access("/dev/console", R_OK | W_OK)) {
- Console = True;
- } else
- Console = False;
- }
-#else /* __sgi */
- Console = True;
-#endif /* __sgi */
-#endif /* TIOCCONS */
- continue;
- case 'S':
- if (!ParseSccn(*argv + 2))
- Syntax(*argv);
- continue;
-#ifdef DEBUG
- case 'D':
- debug = True;
- continue;
-#endif /* DEBUG */
- case 'c': /* -class param */
- if (strcmp(argv[0] + 1, "class") == 0)
- argc--, argv++;
- else
- Syntax(*argv);
- continue;
- case 'e':
- if (argc <= 1)
- Syntax(*argv);
- command_to_exec = ++argv;
- break;
- case 'i':
- if (argc <= 1) {
- Syntax(*argv);
- } else {
- char *endPtr;
- --argc;
- ++argv;
- winToEmbedInto = (Window) strtol(argv[0], &endPtr, 10);
- }
- continue;
-
- default:
- Syntax(*argv);
- }
- break;
- }
-
- SetupMenus(toplevel, &form_top, &menu_top);
-
- term = (XtermWidget) XtVaCreateManagedWidget("vt100", xtermWidgetClass,
- form_top,
-#if OPT_TOOLBAR
- XtNmenuBar, menu_top,
- XtNresizable, True,
- XtNfromVert, menu_top,
- XtNleft, XawChainLeft,
- XtNright, XawChainRight,
- XtNtop, XawChainTop,
- XtNbottom, XawChainBottom,
-#endif
- (XtPointer) 0);
- decode_keyboard_type(&resource);
-
- screen = &term->screen;
- screen->inhibit = 0;
-
-#ifdef ALLOWLOGGING
- if (term->misc.logInhibit)
- screen->inhibit |= I_LOG;
-#endif
- if (term->misc.signalInhibit)
- screen->inhibit |= I_SIGNAL;
-#if OPT_TEK4014
- if (term->misc.tekInhibit)
- screen->inhibit |= I_TEK;
-#endif
-
- /*
- * We might start by showing the tek4014 window.
- */
-#if OPT_TEK4014
- if (screen->inhibit & I_TEK)
- screen->TekEmu = False;
-
- if (screen->TekEmu && !TekInit())
- SysError(ERROR_INIT);
-#endif
-
- /*
- * Start the toolbar at this point, after the first window has been setup.
- */
-#if OPT_TOOLBAR
- ShowToolbar(resource.toolBar);
-#endif
-
-#if OPT_SESSION_MGT
- if (resource.sessionMgt) {
- TRACE(("Enabling session-management callbacks\n"));
- XtAddCallback(toplevel, XtNdieCallback, die_callback, NULL);
- XtAddCallback(toplevel, XtNsaveCallback, save_callback, NULL);
- }
-#endif
-
- /*
- * Set title and icon name if not specified
- */
- if (command_to_exec) {
- Arg args[2];
-
- if (!resource.title) {
- if (command_to_exec) {
- resource.title = x_basename(command_to_exec[0]);
- } /* else not reached */
- }
-
- if (!resource.icon_name)
- resource.icon_name = resource.title;
- XtSetArg(args[0], XtNtitle, resource.title);
- XtSetArg(args[1], XtNiconName, resource.icon_name);
-
- TRACE(("setting:\n\ttitle \"%s\"\n\ticon \"%s\"\n\tbased on command \"%s\"\n",
- resource.title,
- resource.icon_name,
- *command_to_exec));
-
- XtSetValues(toplevel, args, 2);
- }
-#if OPT_LUIT_PROG
- if (term->misc.callfilter) {
- int u = (term->misc.use_encoding ? 2 : 0);
- if (command_to_exec) {
- int n;
- char **c;
- for (n = 0, c = command_to_exec; *c; n++, c++) ;
- c = TypeMallocN(char *, n + 3 + u);
- if (c == NULL)
- SysError(ERROR_LUMALLOC);
- memcpy(c + 2 + u, command_to_exec, (n + 1) * sizeof(char *));
- c[0] = term->misc.localefilter;
- if (u) {
- c[1] = "-encoding";
- c[2] = term->misc.locale_str;
- }
- c[1 + u] = "--";
- command_to_exec_with_luit = c;
- } else {
- static char *luit[4];
- luit[0] = term->misc.localefilter;
- if (u) {
- luit[1] = "-encoding";
- luit[2] = term->misc.locale_str;
- luit[3] = NULL;
- } else
- luit[1] = NULL;
- command_to_exec_with_luit = luit;
- }
- }
-#endif
-
-#ifdef DEBUG
- {
- /* Set up stderr properly. Opening this log file cannot be
- done securely by a privileged xterm process (although we try),
- so the debug feature is disabled by default. */
- char dbglogfile[45];
- int i = -1;
- if (debug) {
- timestamp_filename(dbglogfile, "xterm.debug.log.");
- if (creat_as(getuid(), getgid(), False, dbglogfile, 0666)) {
- i = open(dbglogfile, O_WRONLY | O_TRUNC);
- }
- }
- if (i >= 0) {
- dup2(i, 2);
-
- /* mark this file as close on exec */
- (void) fcntl(i, F_SETFD, 1);
- }
- }
-#endif /* DEBUG */
-
- /* open a terminal for client */
- get_terminal();
-
- spawn();
-
-#ifndef VMS
- /* Child process is out there, let's catch its termination */
-
-#ifdef USE_POSIX_SIGNALS
- (void) posix_signal(SIGCHLD, reapchild);
-#else
- (void) signal(SIGCHLD, reapchild);
-#endif
- /* Realize procs have now been executed */
-
- if (am_slave >= 0) { /* Write window id so master end can read and use */
- char buf[80];
-
- buf[0] = '\0';
- sprintf(buf, "%lx\n", XtWindow(SHELL_OF(CURRENT_EMU(screen))));
- write(screen->respond, buf, strlen(buf));
- }
-#ifdef AIXV3
-#if (OSMAJORVERSION < 4)
- /* In AIXV3, xterms started from /dev/console have CLOCAL set.
- * This means we need to clear CLOCAL so that SIGHUP gets sent
- * to the slave-pty process when xterm exits.
- */
-
- {
- TERMIO_STRUCT tio;
-
- if (ttyGetAttr(screen->respond, &tio) == -1)
- SysError(ERROR_TIOCGETP);
-
- tio.c_cflag &= ~(CLOCAL);
-
- if (ttySetAttr(screen->respond, &tio) == -1)
- SysError(ERROR_TIOCSETP);
- }
-#endif
-#endif
-#if defined(USE_ANY_SYSV_TERMIO) || defined(__MVS__)
- if (0 > (mode = fcntl(screen->respond, F_GETFL, 0)))
- SysError(ERROR_F_GETFL);
-#ifdef O_NDELAY
- mode |= O_NDELAY;
-#else
- mode |= O_NONBLOCK;
-#endif /* O_NDELAY */
- if (fcntl(screen->respond, F_SETFL, mode))
- SysError(ERROR_F_SETFL);
-#else /* !USE_ANY_SYSV_TERMIO */
- mode = 1;
- if (ioctl(screen->respond, FIONBIO, (char *) &mode) == -1)
- SysError(ERROR_FIONBIO);
-#endif /* USE_ANY_SYSV_TERMIO, etc */
-
- /* The erase character is used to delete the current completion */
-#if OPT_DABBREV
-#ifdef TERMIO_STRUCT
- screen->dabbrev_erase_char = d_tio.c_cc[VERASE];
-#else
- screen->dabbrev_erase_char = d_sg.sg_erase;
-#endif
-#endif
-
- FD_ZERO(&pty_mask);
- FD_ZERO(&X_mask);
- FD_ZERO(&Select_mask);
- FD_SET(screen->respond, &pty_mask);
- FD_SET(ConnectionNumber(screen->display), &X_mask);
- FD_SET(screen->respond, &Select_mask);
- FD_SET(ConnectionNumber(screen->display), &Select_mask);
- max_plus1 = ((screen->respond < ConnectionNumber(screen->display))
- ? (1 + ConnectionNumber(screen->display))
- : (1 + screen->respond));
-
-#endif /* !VMS */
-#ifdef DEBUG
- if (debug)
- printf("debugging on\n");
-#endif /* DEBUG */
- XSetErrorHandler(xerror);
- XSetIOErrorHandler(xioerror);
-
- initPtyData(&VTbuffer);
-#ifdef ALLOWLOGGING
- if (term->misc.log_on) {
- StartLog(screen);
- }
-#endif
-
- if (winToEmbedInto != None) {
- XtRealizeWidget(toplevel);
- /*
- * This should probably query the tree or check the attributes of
- * winToEmbedInto in order to verify that it exists, but I'm still not
- * certain what is the best way to do it -GPS
- */
- XReparentWindow(XtDisplay(toplevel),
- XtWindow(toplevel),
- winToEmbedInto, 0, 0);
- }
-
- for (;;) {
-#if OPT_TEK4014
- if (screen->TekEmu)
- TekRun();
- else
-#endif
- VTRun();
- }
-}
-
-#if defined(__osf__) || (defined(__GLIBC__) && !defined(USE_USG_PTYS)) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__APPLE__)
-#define USE_OPENPTY 1
-static int opened_tty = -1;
-#endif
-
-/*
- * This function opens up a pty master and stuffs its value into pty.
- *
- * If it finds one, it returns a value of 0. If it does not find one,
- * it returns a value of !0. This routine is designed to be re-entrant,
- * so that if a pty master is found and later, we find that the slave
- * has problems, we can re-enter this function and get another one.
- */
-static int
-get_pty(int *pty, char *from GCC_UNUSED)
-{
- int result = 1;
-
-#if defined(PUCC_PTYD)
-
- result = ((*pty = openrpty(ttydev, ptydev,
- (resource.utmpInhibit ? OPTY_NOP : OPTY_LOGIN),
- getuid(), from)) < 0);
-
-#elif defined(USE_OPENPTY)
-
- result = openpty(pty, &opened_tty, ttydev, NULL, NULL);
-
-#elif defined(__QNXNTO__)
-
- result = pty_search(pty);
-
-#else
-#if defined(USE_ISPTS_FLAG)
-
- /*
- The order of this code is *important*. On SYSV/386 we want to open
- a /dev/ttyp? first if at all possible. If none are available, then
- we'll try to open a /dev/pts??? device.
-
- The reason for this is because /dev/ttyp? works correctly, where
- as /dev/pts??? devices have a number of bugs, (won't update
- screen correcly, will hang -- it more or less works, but you
- really don't want to use it).
-
- Most importantly, for boxes of this nature, one of the major
- "features" is that you can emulate a 8086 by spawning off a UNIX
- program on 80386/80486 in v86 mode. In other words, you can spawn
- off multiple MS-DOS environments. On ISC the program that does
- this is named "vpix." The catcher is that "vpix" will *not* work
- with a /dev/pts??? device, will only work with a /dev/ttyp? device.
-
- Since we can open either a /dev/ttyp? or a /dev/pts??? device,
- the flag "IsPts" is set here so that we know which type of
- device we're dealing with in routine spawn(). That's the reason
- for the "if (IsPts)" statement in spawn(); we have two different
- device types which need to be handled differently.
- */
- result = pty_search(pty);
- if (!result)
- IsPts = 0;
-
-#endif
-#if defined(USE_USG_PTYS) || defined(__CYGWIN__)
-#ifdef __GLIBC__ /* if __GLIBC__ and USE_USG_PTYS, we know glibc >= 2.1 */
- /* GNU libc 2 allows us to abstract away from having to know the
- master pty device name. */
- if ((*pty = getpt()) >= 0) {
- char *name = ptsname(*pty);
- if (name != 0) { /* if filesystem is trashed, this may be null */
- strcpy(ttydev, name);
- result = 0;
- }
- }
-#elif defined(__MVS__)
- result = pty_search(pty);
-#else
-#if defined(USE_ISPTS_FLAG)
- if (result) {
-#endif
- result = ((*pty = open("/dev/ptmx", O_RDWR)) < 0);
-#endif
-#if defined(SVR4) || defined(__SCO__) || defined(USE_ISPTS_FLAG)
- if (!result)
- strcpy(ttydev, ptsname(*pty));
-#ifdef USE_ISPTS_FLAG
- IsPts = !result; /* true if we're successful */
- }
-#endif
-#endif
-
-#elif defined(AIXV3)
-
- if ((*pty = open("/dev/ptc", O_RDWR)) >= 0) {
- strcpy(ttydev, ttyname(*pty));
- result = 0;
- }
-#elif defined(__convex__)
-
- char *pty_name;
- extern char *getpty(void);
-
- while ((pty_name = getpty()) != NULL) {
- if ((*pty = open(pty_name, O_RDWR)) >= 0) {
- strcpy(ptydev, pty_name);
- strcpy(ttydev, pty_name);
- *x_basename(ttydev) = 't';
- result = 0;
- break;
- }
- }
-
-#elif defined(sequent)
-
- result = ((*pty = getpseudotty(&ttydev, &ptydev)) < 0);
-
-#elif defined(__sgi) && (OSMAJORVERSION >= 4)
-
- char *tty_name;
-
- tty_name = _getpty(pty, O_RDWR, 0622, 0);
- if (tty_name != 0) {
- strcpy(ttydev, tty_name);
- result = 0;
- }
-#elif (defined(__sgi) && (OSMAJORVERSION < 4)) || (defined(umips) && defined (SYSTYPE_SYSV))
-
- struct stat fstat_buf;
-
- *pty = open("/dev/ptc", O_RDWR);
- if (*pty >= 0 && (fstat(*pty, &fstat_buf)) >= 0) {
- result = 0;
- sprintf(ttydev, "/dev/ttyq%d", minor(fstat_buf.st_rdev));
- }
-#elif defined(__hpux)
-
- /*
- * Use the clone device if it works, otherwise use pty_search logic.
- */
- if ((*pty = open("/dev/ptym/clone", O_RDWR)) >= 0) {
- char *name = ptsname(*pty);
- if (name != 0) {
- strcpy(ttydev, name);
- result = 0;
- } else { /* permissions, or other unexpected problem */
- close(*pty);
- *pty = -1;
- result = pty_search(pty);
- }
- } else {
- result = pty_search(pty);
- }
-
-#else
-
- result = pty_search(pty);
-
-#endif
-#endif
-
- TRACE(("get_pty(ttydev=%s, ptydev=%s) %s fd=%d\n",
- ttydev != 0 ? ttydev : "?",
- ptydev != 0 ? ptydev : "?",
- result ? "FAIL" : "OK",
- pty != 0 ? *pty : -1));
- return result;
-}
-
-static void
-set_pty_permissions(uid_t uid, gid_t gid, mode_t mode)
-{
-#ifdef USE_TTY_GROUP
- struct group *ttygrp;
-
- if ((ttygrp = getgrnam(TTY_GROUP_NAME)) != 0) {
- gid = ttygrp->gr_gid;
- mode &= 0660U;
- }
- endgrent();
-#endif /* USE_TTY_GROUP */
-
- set_owner(ttydev, uid, gid, mode);
-}
-
-#ifdef get_pty /* USE_UTMP_SETGID */
-#undef get_pty
-/*
- * Call the real get_pty() before relinquishing root-setuid, caching the
- * result.
- */
-static int
-get_pty(int *pty, char *from)
-{
- static int m_pty = -1;
- int result = -1;
-
- if (pty == NULL) {
- result = really_get_pty(&m_pty, from);
-
- seteuid(0);
- set_pty_permissions(getuid(), getgid(), 0600U);
- seteuid(getuid());
-
-#ifdef USE_OPENPTY
- if (opened_tty >= 0) {
- close(opened_tty);
- opened_tty = -1;
- }
-#endif
- } else if (m_pty != -1) {
- *pty = m_pty;
- result = 0;
- } else {
- result = -1;
- }
- return result;
-}
-#endif
-
-/*
- * Called from get_pty to iterate over likely pseudo terminals
- * we might allocate. Used on those systems that do not have
- * a functional interface for allocating a pty.
- * Returns 0 if found a pty, 1 if fails.
- */
-#ifdef USE_PTY_SEARCH
-static int
-pty_search(int *pty)
-{
- static int devindex = 0, letter = 0;
-
-#if defined(CRAY) || defined(__MVS__)
- while (devindex < MAXPTTYS) {
- sprintf(ttydev, TTYFORMAT, devindex);
- sprintf(ptydev, PTYFORMAT, devindex);
- devindex++;
-
- TRACE(("pty_search(ttydev=%s, ptydev=%s)\n", ttydev, ptydev));
- if ((*pty = open(ptydev, O_RDWR)) >= 0) {
- return 0;
- }
- }
-#else /* CRAY || __MVS__ */
- while (PTYCHAR1[letter]) {
- ttydev[strlen(ttydev) - 2] =
- ptydev[strlen(ptydev) - 2] = PTYCHAR1[letter];
-
- while (PTYCHAR2[devindex]) {
- ttydev[strlen(ttydev) - 1] =
- ptydev[strlen(ptydev) - 1] = PTYCHAR2[devindex];
- devindex++;
-
- TRACE(("pty_search(ttydev=%s, ptydev=%s)\n", ttydev, ptydev));
- if ((*pty = open(ptydev, O_RDWR)) >= 0) {
-#ifdef sun
- /* Need to check the process group of the pty.
- * If it exists, then the slave pty is in use,
- * and we need to get another one.
- */
- int pgrp_rtn;
- if (ioctl(*pty, TIOCGPGRP, &pgrp_rtn) == 0 || errno != EIO) {
- close(*pty);
- continue;
- }
-#endif /* sun */
- return 0;
- }
- }
- devindex = 0;
- letter++;
- }
-#endif /* CRAY else */
- /*
- * We were unable to allocate a pty master! Return an error
- * condition and let our caller terminate cleanly.
- */
- return 1;
-}
-#endif /* USE_PTY_SEARCH */
-
-/*
- * sets up X and initializes the terminal structure except for term.buf.fildes.
- */
-static void
-get_terminal(void)
-{
- TScreen *screen = &term->screen;
-
- screen->arrow = make_colored_cursor(XC_left_ptr,
- T_COLOR(screen, MOUSE_FG),
- T_COLOR(screen, MOUSE_BG));
-}
-
-/*
- * The only difference in /etc/termcap between 4014 and 4015 is that
- * the latter has support for switching character sets. We support the
- * 4015 protocol, but ignore the character switches. Therefore, we
- * choose 4014 over 4015.
- *
- * Features of the 4014 over the 4012: larger (19") screen, 12-bit
- * graphics addressing (compatible with 4012 10-bit addressing),
- * special point plot mode, incremental plot mode (not implemented in
- * later Tektronix terminals), and 4 character sizes.
- * All of these are supported by xterm.
- */
-
-#if OPT_TEK4014
-static char *tekterm[] =
-{
- "tek4014",
- "tek4015", /* 4014 with APL character set support */
- "tek4012", /* 4010 with lower case */
- "tek4013", /* 4012 with APL character set support */
- "tek4010", /* small screen, upper-case only */
- "dumb",
- 0
-};
-#endif
-
-/* The VT102 is a VT100 with the Advanced Video Option included standard.
- * It also adds Escape sequences for insert/delete character/line.
- * The VT220 adds 8-bit character sets, selective erase.
- * The VT320 adds a 25th status line, terminal state interrogation.
- * The VT420 has up to 48 lines on the screen.
- */
-
-static char *vtterm[] =
-{
-#ifdef USE_X11TERM
- "x11term", /* for people who want special term name */
-#endif
- DFT_TERMTYPE, /* for people who want special term name */
- "xterm", /* the prefered name, should be fastest */
- "vt102",
- "vt100",
- "ansi",
- "dumb",
- 0
-};
-
-/* ARGSUSED */
-static SIGNAL_T
-hungtty(int i GCC_UNUSED)
-{
- siglongjmp(env, 1);
- SIGNAL_RETURN;
-}
-
-/*
- * declared outside OPT_PTY_HANDSHAKE so HsSysError() callers can use
- */
-static int cp_pipe[2]; /* this pipe is used for child to parent transfer */
-
-#if OPT_PTY_HANDSHAKE
-static int pc_pipe[2]; /* this pipe is used for parent to child transfer */
-typedef enum { /* c == child, p == parent */
- PTY_BAD, /* c->p: can't open pty slave for some reason */
- PTY_FATALERROR, /* c->p: we had a fatal error with the pty */
- PTY_GOOD, /* c->p: we have a good pty, let's go on */
- PTY_NEW, /* p->c: here is a new pty slave, try this */
- PTY_NOMORE, /* p->c; no more pty's, terminate */
- UTMP_ADDED, /* c->p: utmp entry has been added */
- UTMP_TTYSLOT, /* c->p: here is my ttyslot */
- PTY_EXEC /* p->c: window has been mapped the first time */
-} status_t;
-
-typedef struct {
- status_t status;
- int error;
- int fatal_error;
- int tty_slot;
- int rows;
- int cols;
- char buffer[1024];
-} handshake_t;
-
-/* HsSysError()
- *
- * This routine does the equivalent of a SysError but it handshakes
- * over the errno and error exit to the master process so that it can
- * display our error message and exit with our exit code so that the
- * user can see it.
- */
-
-static void
-HsSysError(int pf, int error)
-{
- handshake_t handshake;
-
- handshake.status = PTY_FATALERROR;
- handshake.error = errno;
- handshake.fatal_error = error;
- strcpy(handshake.buffer, ttydev);
- write(pf, (char *) &handshake, sizeof(handshake));
- exit(error);
-}
-
-void
-first_map_occurred(void)
-{
- handshake_t handshake;
- TScreen *screen = &term->screen;
-
- handshake.status = PTY_EXEC;
- handshake.rows = screen->max_row;
- handshake.cols = screen->max_col;
- write(pc_pipe[1], (char *) &handshake, sizeof(handshake));
- close(cp_pipe[0]);
- close(pc_pipe[1]);
- waiting_for_initial_map = False;
-}
-#else
-/*
- * temporary hack to get xterm working on att ptys
- */
-static void
-HsSysError(int pf GCC_UNUSED, int error)
-{
- fprintf(stderr, "%s: fatal pty error %d (errno=%d) on tty %s\n",
- xterm_name, error, errno, ttydev);
- exit(error);
-}
-
-void
-first_map_occurred(void)
-{
- return;
-}
-#endif /* OPT_PTY_HANDSHAKE else !OPT_PTY_HANDSHAKE */
-
-#ifndef VMS
-static void
-set_owner(char *device, uid_t uid, gid_t gid, mode_t mode)
-{
- int why;
-
- TRACE(("set_owner(%s, uid=%d, gid=%d, mode=%#o\n", device, uid, gid, mode));
-
- if (chown(device, uid, gid) < 0) {
- why = errno;
- if (why != ENOENT
- && getuid() == 0) {
- fprintf(stderr, "Cannot chown %s to %ld,%ld: %s\n",
- device, (long) uid, (long) gid,
- strerror(why));
- }
- TRACE(("...chown failed: %s\n", strerror(why)));
- }
- if (chmod(device, mode) < 0) {
- why = errno;
- if (why != ENOENT) {
- struct stat sb;
- if (stat(device, &sb) < 0) {
- fprintf(stderr, "Cannot chmod %s to %03o: %s\n",
- device, (unsigned) mode,
- strerror(why));
- } else if (mode != (sb.st_mode & 0777U)) {
- fprintf(stderr,
- "Cannot chmod %s to %03o currently %03o: %s\n",
- device, (unsigned) mode, (sb.st_mode & 0777U),
- strerror(why));
- TRACE(("...stat uid=%d, gid=%d, mode=%#o\n",
- sb.st_uid, sb.st_gid, sb.st_mode));
- }
- }
- TRACE(("...chmod failed: %s\n", strerror(why)));
- }
-}
-
-#if defined(HAVE_UTMP) && defined(USE_SYSV_UTMP) && !defined(USE_UTEMPTER)
-/*
- * getutid() only looks at ut_type and ut_id.
- * But we'll also check ut_line in find_utmp().
- */
-static void
-init_utmp(int type, struct UTMP_STR *tofind)
-{
- memset(tofind, 0, sizeof(*tofind));
- tofind->ut_type = type;
- (void) strncpy(tofind->ut_id, my_utmp_id(ttydev), sizeof(tofind->ut_id));
- (void) strncpy(tofind->ut_line, my_pty_name(ttydev), sizeof(tofind->ut_line));
-}
-
-/*
- * We could use getutline() if we didn't support old systems.
- */
-static struct UTMP_STR *
-find_utmp(struct UTMP_STR *tofind)
-{
- struct UTMP_STR *result;
- struct UTMP_STR working;
-
- for (;;) {
- memset(&working, 0, sizeof(working));
- working.ut_type = tofind->ut_type;
- memcpy(working.ut_id, tofind->ut_id, sizeof(tofind->ut_id));
-#if defined(__digital__) && defined(__unix__) && (defined(OSMAJORVERSION) && OSMAJORVERSION < 5)
- working.ut_type = 0;
-#endif
- if ((result = call_getutid(&working)) == 0)
- break;
- if (!strcmp(result->ut_line, tofind->ut_line))
- break;
- /*
- * Solaris, IRIX64 and HPUX manpages say to fill the static area
- * pointed to by the return-value to zeros if searching for multiple
- * occurrences. Otherwise it will continue to return the same value.
- */
- memset(result, 0, sizeof(*result));
- }
- return result;
-}
-#endif /* HAVE_UTMP... */
-
-#define close_fd(fd) close(fd), fd = -1
-
-/*
- * Inits pty and tty and forks a login process.
- * Does not close fd Xsocket.
- * If slave, the pty named in passedPty is already open for use
- */
-static int
-spawn(void)
-{
- TScreen *screen = &term->screen;
-#if OPT_PTY_HANDSHAKE
- handshake_t handshake;
- int done;
-#endif
-#if OPT_INITIAL_ERASE
- int initial_erase = VAL_INITIAL_ERASE;
-#endif
- int rc = 0;
- int ttyfd = -1;
-
-#ifdef TERMIO_STRUCT
- TERMIO_STRUCT tio;
-#ifdef __MVS__
- TERMIO_STRUCT gio;
-#endif /* __MVS__ */
-#ifdef TIOCLSET
- unsigned lmode;
-#endif /* TIOCLSET */
-#ifdef HAS_LTCHARS
- struct ltchars ltc;
-#endif /* HAS_LTCHARS */
-#else /* !TERMIO_STRUCT */
- int ldisc = 0;
- int discipline;
- unsigned lmode;
- struct tchars tc;
- struct ltchars ltc;
- struct sgttyb sg;
-#ifdef sony
- int jmode;
- struct jtchars jtc;
-#endif /* sony */
-#endif /* TERMIO_STRUCT */
-
- char termcap[TERMCAP_SIZE];
- char newtc[TERMCAP_SIZE];
- char *ptr, *shname, *shname_minus;
- int i, no_dev_tty = False;
- char **envnew; /* new environment */
- int envsize; /* elements in new environment */
- char buf[64];
- char *TermName = NULL;
-#ifdef TTYSIZE_STRUCT
- TTYSIZE_STRUCT ts;
-#endif
- struct passwd *pw = NULL;
- char *login_name = NULL;
-#ifndef USE_UTEMPTER
-#ifdef HAVE_UTMP
- struct UTMP_STR utmp;
-#ifdef USE_SYSV_UTMP
- struct UTMP_STR *utret = NULL;
-#endif
-#ifdef USE_LASTLOG
- struct lastlog lastlog;
-#endif
-#ifdef USE_LASTLOGX
- struct lastlogx lastlog;
-#endif /* USE_LASTLOG */
-#endif /* HAVE_UTMP */
-#endif /* !USE_UTEMPTER */
-
- /* Noisy compilers (suppress some unused-variable warnings) */
- (void) rc;
-#if defined(HAVE_UTMP) && defined(USE_SYSV_UTMP) && !defined(USE_UTEMPTER)
- (void) utret;
-#endif
-
- screen->uid = getuid();
- screen->gid = getgid();
-
- termcap[0] = '\0';
- newtc[0] = '\0';
-
-#ifdef SIGTTOU
- /* so that TIOCSWINSZ || TIOCSIZE doesn't block */
- signal(SIGTTOU, SIG_IGN);
-#endif
-
- if (am_slave >= 0) {
- screen->respond = am_slave;
- set_pty_id(ttydev, passedPty);
-#ifdef USE_PTY_DEVICE
- set_pty_id(ptydev, passedPty);
-#endif
- setgid(screen->gid);
- setuid(screen->uid);
- } else {
- Bool tty_got_hung;
-
- /*
- * Sometimes /dev/tty hangs on open (as in the case of a pty
- * that has gone away). Simply make up some reasonable
- * defaults.
- */
-
- signal(SIGALRM, hungtty);
- alarm(2); /* alarm(1) might return too soon */
- if (!sigsetjmp(env, 1)) {
- ttyfd = open("/dev/tty", O_RDWR);
- alarm(0);
- tty_got_hung = False;
- } else {
- tty_got_hung = True;
- ttyfd = -1;
- errno = ENXIO;
- }
-#if OPT_INITIAL_ERASE
- initial_erase = VAL_INITIAL_ERASE;
-#endif
- signal(SIGALRM, SIG_DFL);
-
- /*
- * Check results and ignore current control terminal if
- * necessary. ENXIO is what is normally returned if there is
- * no controlling terminal, but some systems (e.g. SunOS 4.0)
- * seem to return EIO. Solaris 2.3 is said to return EINVAL.
- * Cygwin returns ENOENT.
- */
- no_dev_tty = False;
- if (ttyfd < 0) {
- if (tty_got_hung || errno == ENXIO || errno == EIO ||
-#ifdef ENODEV
- errno == ENODEV ||
-#endif
-#ifdef __CYGWIN__
- errno == ENOENT ||
-#endif
- errno == EINVAL || errno == ENOTTY || errno == EACCES) {
- no_dev_tty = True;
-#ifdef HAS_LTCHARS
- ltc = d_ltc;
-#endif /* HAS_LTCHARS */
-#ifdef TIOCLSET
- lmode = d_lmode;
-#endif /* TIOCLSET */
-#ifdef TERMIO_STRUCT
- tio = d_tio;
-#else /* !TERMIO_STRUCT */
- sg = d_sg;
- tc = d_tc;
- discipline = d_disipline;
-#ifdef sony
- jmode = d_jmode;
- jtc = d_jtc;
-#endif /* sony */
-#endif /* TERMIO_STRUCT */
- } else {
- SysError(ERROR_OPDEVTTY);
- }
- } else {
-
- /* Get a copy of the current terminal's state,
- * if we can. Some systems (e.g., SVR4 and MacII)
- * may not have a controlling terminal at this point
- * if started directly from xdm or xinit,
- * in which case we just use the defaults as above.
- */
-#ifdef HAS_LTCHARS
- if (ioctl(ttyfd, TIOCGLTC, &ltc) == -1)
- ltc = d_ltc;
-#endif /* HAS_LTCHARS */
-#ifdef TIOCLSET
- if (ioctl(ttyfd, TIOCLGET, &lmode) == -1)
- lmode = d_lmode;
-#endif /* TIOCLSET */
-#ifdef TERMIO_STRUCT
- if ((rc = ttyGetAttr(ttyfd, &tio)) == -1)
- tio = d_tio;
-#else /* !TERMIO_STRUCT */
- if ((rc = ioctl(ttyfd, TIOCGETP, (char *) &sg)) == -1)
- sg = d_sg;
- if (ioctl(ttyfd, TIOCGETC, (char *) &tc) == -1)
- tc = d_tc;
- if (ioctl(ttyfd, TIOCGETD, (char *) &discipline) == -1)
- discipline = d_disipline;
-#ifdef sony
- if (ioctl(ttyfd, TIOCKGET, (char *) &jmode) == -1)
- jmode = d_jmode;
- if (ioctl(ttyfd, TIOCKGETC, (char *) &jtc) == -1)
- jtc = d_jtc;
-#endif /* sony */
-#endif /* TERMIO_STRUCT */
-
- /*
- * If ptyInitialErase is set, we want to get the pty's
- * erase value. Just in case that will fail, first get
- * the value from /dev/tty, so we will have something
- * at least.
- */
-#if OPT_INITIAL_ERASE
- if (resource.ptyInitialErase) {
-#ifdef TERMIO_STRUCT
- initial_erase = tio.c_cc[VERASE];
-#else /* !TERMIO_STRUCT */
- initial_erase = sg.sg_erase;
-#endif /* TERMIO_STRUCT */
- TRACE(("%s initial_erase:%d (from /dev/tty)\n",
- rc == 0 ? "OK" : "FAIL",
- initial_erase));
- }
-#endif
-#ifdef __MVS__
- if (ttyGetAttr(ttyfd, &gio) == 0) {
- gio.c_cflag &= ~(HUPCL | PARENB);
- ttySetAttr(ttyfd, &gio);
- }
-#endif /* __MVS__ */
-
- close_fd(ttyfd);
- }
-
- if (get_pty(&screen->respond, XDisplayString(screen->display))) {
- SysError(ERROR_PTYS);
- }
-#if OPT_INITIAL_ERASE
- if (resource.ptyInitialErase) {
-#ifdef TERMIO_STRUCT
- TERMIO_STRUCT my_tio;
- if ((rc = ttyGetAttr(screen->respond, &my_tio)) == 0)
- initial_erase = my_tio.c_cc[VERASE];
-#else /* !TERMIO_STRUCT */
- struct sgttyb my_sg;
- if ((rc = ioctl(screen->respond, TIOCGETP, (char *) &my_sg)) == 0)
- initial_erase = my_sg.sg_erase;
-#endif /* TERMIO_STRUCT */
- TRACE(("%s initial_erase:%d (from pty)\n",
- (rc == 0) ? "OK" : "FAIL",
- initial_erase));
- }
-#endif /* OPT_INITIAL_ERASE */
- }
-
- /* avoid double MapWindow requests */
- XtSetMappedWhenManaged(XtParent(CURRENT_EMU(screen)), False);
-
- wm_delete_window = XInternAtom(XtDisplay(toplevel), "WM_DELETE_WINDOW",
- False);
-
- if (!TEK4014_ACTIVE(screen))
- VTInit(); /* realize now so know window size for tty driver */
-#if defined(TIOCCONS) || defined(SRIOCSREDIR)
- if (Console) {
- /*
- * Inform any running xconsole program
- * that we are going to steal the console.
- */
- XmuGetHostname(mit_console_name + MIT_CONSOLE_LEN, 255);
- mit_console = XInternAtom(screen->display, mit_console_name, False);
- /* the user told us to be the console, so we can use CurrentTime */
- XtOwnSelection(XtParent(CURRENT_EMU(screen)),
- mit_console, CurrentTime,
- ConvertConsoleSelection, NULL, NULL);
- }
-#endif
-#if OPT_TEK4014
- if (screen->TekEmu) {
- envnew = tekterm;
- ptr = newtc;
- } else
-#endif
- {
- envnew = vtterm;
- ptr = termcap;
- }
-
- /*
- * This used to exit if no termcap entry was found for the specified
- * terminal name. That's a little unfriendly, so instead we'll allow
- * the program to proceed (but not to set $TERMCAP) if the termcap
- * entry is not found.
- */
- if (!get_termcap(TermName = resource.term_name, ptr, newtc)) {
- char *last = NULL;
- TermName = *envnew;
- while (*envnew != NULL) {
- if ((last == NULL || strcmp(last, *envnew))
- && get_termcap(*envnew, ptr, newtc)) {
- TermName = *envnew;
- break;
- }
- last = *envnew;
- envnew++;
- }
- }
-
- /*
- * Check if ptyInitialErase is not set. If so, we rely on the termcap
- * (or terminfo) to tell us what the erase mode should be set to.
- */
-#if OPT_INITIAL_ERASE
- TRACE(("resource ptyInitialErase is %sset\n",
- resource.ptyInitialErase ? "" : "not "));
- if (!resource.ptyInitialErase) {
- char temp[1024], *p = temp;
- char *s = tgetstr(TERMCAP_ERASE, &p);
- TRACE(("...extracting initial_erase value from termcap\n"));
- if (s != 0) {
- initial_erase = decode_keyvalue(&s, True);
- }
- }
- TRACE(("...initial_erase:%d\n", initial_erase));
-
- TRACE(("resource backarrowKeyIsErase is %sset\n",
- resource.backarrow_is_erase ? "" : "not "));
- if (resource.backarrow_is_erase) { /* see input.c */
- if (initial_erase == 127) {
- term->keyboard.flags &= ~MODE_DECBKM;
- } else {
- term->keyboard.flags |= MODE_DECBKM;
- term->keyboard.reset_DECBKM = 1;
- }
- TRACE(("...sets DECBKM %s\n",
- (term->keyboard.flags & MODE_DECBKM) ? "on" : "off"));
- } else {
- term->keyboard.reset_DECBKM = 2;
- }
-#endif /* OPT_INITIAL_ERASE */
-
-#ifdef TTYSIZE_STRUCT
- /* tell tty how big window is */
-#if OPT_TEK4014
- if (TEK4014_ACTIVE(screen)) {
- TTYSIZE_ROWS(ts) = 38;
- TTYSIZE_COLS(ts) = 81;
-#if defined(USE_STRUCT_WINSIZE)
- ts.ws_xpixel = TFullWidth(screen);
- ts.ws_ypixel = TFullHeight(screen);
-#endif
- } else
-#endif
- {
- TTYSIZE_ROWS(ts) = MaxRows(screen);
- TTYSIZE_COLS(ts) = MaxCols(screen);
-#if defined(USE_STRUCT_WINSIZE)
- ts.ws_xpixel = FullWidth(screen);
- ts.ws_ypixel = FullHeight(screen);
-#endif
- }
- i = SET_TTYSIZE(screen->respond, ts);
- TRACE(("spawn SET_TTYSIZE %dx%d return %d\n",
- TTYSIZE_ROWS(ts),
- TTYSIZE_COLS(ts), i));
-#endif /* TTYSIZE_STRUCT */
-
- added_utmp_entry = False;
-#if defined(USE_UTEMPTER)
-#undef UTMP
- if (!resource.utmpInhibit) {
- struct UTMP_STR dummy;
-
- /* Note: utempter may trim it anyway */
- SetUtmpHost(dummy.ut_host, screen);
- addToUtmp(ttydev, dummy.ut_host, screen->respond);
- added_utmp_entry = True;
- }
-#endif
-
- if (am_slave < 0) {
-#if OPT_PTY_HANDSHAKE
- if (resource.ptyHandshake && (pipe(pc_pipe) || pipe(cp_pipe)))
- SysError(ERROR_FORK);
-#endif
- TRACE(("Forking...\n"));
- if ((screen->pid = fork()) == -1)
- SysError(ERROR_FORK);
-
- if (screen->pid == 0) {
- /*
- * now in child process
- */
- TRACE_CHILD
-#if defined(_POSIX_SOURCE) || defined(SVR4) || defined(__convex__) || defined(__SCO__) || defined(__QNX__)
- int pgrp = setsid(); /* variable may not be used... */
-#else
- int pgrp = getpid();
-#endif
-
-#ifdef USE_USG_PTYS
-#ifdef USE_ISPTS_FLAG
- if (IsPts) { /* SYSV386 supports both, which did we open? */
-#endif
- int ptyfd = 0;
- char *pty_name = 0;
-
- setpgrp();
- grantpt(screen->respond);
- unlockpt(screen->respond);
- if ((pty_name = ptsname(screen->respond)) == 0) {
- SysError(ERROR_PTSNAME);
- }
- if ((ptyfd = open(pty_name, O_RDWR)) < 0) {
- SysError(ERROR_OPPTSNAME);
- }
-#ifdef I_PUSH
- if (ioctl(ptyfd, I_PUSH, "ptem") < 0) {
- SysError(ERROR_PTEM);
- }
-#if !defined(SVR4) && !(defined(SYSV) && defined(i386))
- if (!getenv("CONSEM") && ioctl(ptyfd, I_PUSH, "consem") < 0) {
- SysError(ERROR_CONSEM);
- }
-#endif /* !SVR4 */
- if (ioctl(ptyfd, I_PUSH, "ldterm") < 0) {
- SysError(ERROR_LDTERM);
- }
-#ifdef SVR4 /* from Sony */
- if (ioctl(ptyfd, I_PUSH, "ttcompat") < 0) {
- SysError(ERROR_TTCOMPAT);
- }
-#endif /* SVR4 */
-#endif /* I_PUSH */
- ttyfd = ptyfd;
-#ifndef __MVS__
- close_fd(screen->respond);
-#endif /* __MVS__ */
-
-#ifdef TTYSIZE_STRUCT
- /* tell tty how big window is */
-#if OPT_TEK4014
- if (TEK4014_ACTIVE(screen)) {
- TTYSIZE_ROWS(ts) = 24;
- TTYSIZE_COLS(ts) = 80;
-#ifdef USE_STRUCT_WINSIZE
- ts.ws_xpixel = TFullWidth(screen);
- ts.ws_ypixel = TFullHeight(screen);
-#endif
- } else
-#endif /* OPT_TEK4014 */
- {
- TTYSIZE_ROWS(ts) = MaxRows(screen);
- TTYSIZE_COLS(ts) = MaxCols(screen);
-#ifdef USE_STRUCT_WINSIZE
- ts.ws_xpixel = FullWidth(screen);
- ts.ws_ypixel = FullHeight(screen);
-#endif
- }
-#endif /* TTYSIZE_STRUCT */
-
-#ifdef USE_ISPTS_FLAG
- } else { /* else pty, not pts */
-#endif
-#endif /* USE_USG_PTYS */
-
- (void) pgrp; /* not all branches use this variable */
-
-#if OPT_PTY_HANDSHAKE /* warning, goes for a long ways */
- if (resource.ptyHandshake) {
- /* close parent's sides of the pipes */
- close(cp_pipe[0]);
- close(pc_pipe[1]);
-
- /* Make sure that our sides of the pipes are not in the
- * 0, 1, 2 range so that we don't fight with stdin, out
- * or err.
- */
- if (cp_pipe[1] <= 2) {
- if ((i = fcntl(cp_pipe[1], F_DUPFD, 3)) >= 0) {
- (void) close(cp_pipe[1]);
- cp_pipe[1] = i;
- }
- }
- if (pc_pipe[0] <= 2) {
- if ((i = fcntl(pc_pipe[0], F_DUPFD, 3)) >= 0) {
- (void) close(pc_pipe[0]);
- pc_pipe[0] = i;
- }
- }
-
- /* we don't need the socket, or the pty master anymore */
- close(ConnectionNumber(screen->display));
-#ifndef __MVS__
- close(screen->respond);
-#endif /* __MVS__ */
-
- /* Now is the time to set up our process group and
- * open up the pty slave.
- */
-#ifdef USE_SYSV_PGRP
-#if defined(CRAY) && (OSMAJORVERSION > 5)
- (void) setsid();
-#else
- (void) setpgrp();
-#endif
-#endif /* USE_SYSV_PGRP */
-
-#if defined(__QNX__) && !defined(__QNXNTO__)
- qsetlogin(getlogin(), ttydev);
-#endif
- if (ttyfd >= 0) {
-#ifdef __MVS__
- if (ttyGetAttr(ttyfd, &gio) == 0) {
- gio.c_cflag &= ~(HUPCL | PARENB);
- ttySetAttr(ttyfd, &gio);
- }
-#else /* !__MVS__ */
- close_fd(ttyfd);
-#endif /* __MVS__ */
- }
-
- while (1) {
-#if defined(TIOCNOTTY) && (!defined(__GLIBC__) || (__GLIBC__ < 2) || ((__GLIBC__ == 2) && (__GLIBC_MINOR__ < 1)))
- if (!no_dev_tty
- && (ttyfd = open("/dev/tty", O_RDWR)) >= 0) {
- ioctl(ttyfd, TIOCNOTTY, (char *) NULL);
- close_fd(ttyfd);
- }
-#endif /* TIOCNOTTY && !glibc >= 2.1 */
-#ifdef CSRG_BASED
- (void) revoke(ttydev);
-#endif
- if ((ttyfd = open(ttydev, O_RDWR)) >= 0) {
-#if defined(CRAY) && defined(TCSETCTTY)
- /* make /dev/tty work */
- ioctl(ttyfd, TCSETCTTY, 0);
-#endif
-#ifdef USE_SYSV_PGRP
- /* We need to make sure that we are actually
- * the process group leader for the pty. If
- * we are, then we should now be able to open
- * /dev/tty.
- */
- if ((i = open("/dev/tty", O_RDWR)) >= 0) {
- /* success! */
- close(i);
- break;
- }
-#else /* USE_SYSV_PGRP */
- break;
-#endif /* USE_SYSV_PGRP */
- }
- perror("open ttydev");
-#ifdef TIOCSCTTY
- ioctl(ttyfd, TIOCSCTTY, 0);
-#endif
- /* let our master know that the open failed */
- handshake.status = PTY_BAD;
- handshake.error = errno;
- strcpy(handshake.buffer, ttydev);
- write(cp_pipe[1], (char *) &handshake,
- sizeof(handshake));
-
- /* get reply from parent */
- i = read(pc_pipe[0], (char *) &handshake,
- sizeof(handshake));
- if (i <= 0) {
- /* parent terminated */
- exit(1);
- }
-
- if (handshake.status == PTY_NOMORE) {
- /* No more ptys, let's shutdown. */
- exit(1);
- }
-
- /* We have a new pty to try */
- free(ttydev);
- ttydev = CastMallocN(char, strlen(handshake.buffer));
- if (ttydev == NULL) {
- SysError(ERROR_SPREALLOC);
- }
- strcpy(ttydev, handshake.buffer);
- }
-
- /* use the same tty name that everyone else will use
- * (from ttyname)
- */
- if ((ptr = ttyname(ttyfd)) != 0) {
- /* it may be bigger */
- ttydev = TypeRealloc(char, strlen(ptr) + 1, ttydev);
- if (ttydev == NULL) {
- SysError(ERROR_SPREALLOC);
- }
- (void) strcpy(ttydev, ptr);
- }
- }
-#endif /* OPT_PTY_HANDSHAKE -- from near fork */
-
-#ifdef USE_ISPTS_FLAG
- } /* end of IsPts else clause */
-#endif
-
- set_pty_permissions(screen->uid,
- screen->gid,
- (resource.messages
- ? 0622U
- : 0600U));
-
- /*
- * set up the tty modes
- */
- {
-#ifdef TERMIO_STRUCT
-#if defined(umips) || defined(CRAY) || defined(linux)
- /* If the control tty had its modes screwed around with,
- eg. by lineedit in the shell, or emacs, etc. then tio
- will have bad values. Let's just get termio from the
- new tty and tailor it. */
- if (ttyGetAttr(ttyfd, &tio) == -1)
- SysError(ERROR_TIOCGETP);
- tio.c_lflag |= ECHOE;
-#endif /* umips */
- /* Now is also the time to change the modes of the
- * child pty.
- */
- /* input: nl->nl, don't ignore cr, cr->nl */
- tio.c_iflag &= ~(INLCR | IGNCR);
- tio.c_iflag |= ICRNL;
-#if OPT_WIDE_CHARS && defined(linux) && defined(IUTF8)
-#if OPT_LUIT_PROG
- if (command_to_exec_with_luit == 0)
-#endif
- if (screen->utf8_mode)
- tio.c_iflag |= IUTF8;
-#endif
- /* ouput: cr->cr, nl is not return, no delays, ln->cr/nl */
-#ifndef USE_POSIX_TERMIOS
- tio.c_oflag &=
- ~(OCRNL
- | ONLRET
- | NLDLY
- | CRDLY
- | TABDLY
- | BSDLY
- | VTDLY
- | FFDLY);
-#endif /* USE_POSIX_TERMIOS */
-#ifdef ONLCR
- tio.c_oflag |= ONLCR;
-#endif /* ONLCR */
-#ifdef OPOST
- tio.c_oflag |= OPOST;
-#endif /* OPOST */
-#ifndef USE_POSIX_TERMIOS
-# if defined(Lynx) && !defined(CBAUD)
-# define CBAUD V_CBAUD
-# endif
- tio.c_cflag &= ~(CBAUD);
-#ifdef BAUD_0
- /* baud rate is 0 (don't care) */
-#elif defined(HAVE_TERMIO_C_ISPEED)
- tio.c_ispeed = tio.c_ospeed = VAL_LINE_SPEED;
-#else /* !BAUD_0 */
- tio.c_cflag |= VAL_LINE_SPEED;
-#endif /* !BAUD_0 */
-#else /* USE_POSIX_TERMIOS */
- cfsetispeed(&tio, VAL_LINE_SPEED);
- cfsetospeed(&tio, VAL_LINE_SPEED);
-#ifdef __MVS__
- /* turn off bits that can't be set from the slave side */
- tio.c_cflag &= ~(PACKET | PKT3270 | PTU3270 | PKTXTND);
-#endif /* __MVS__ */
- /* Clear CLOCAL so that SIGHUP is sent to us
- when the xterm ends */
- tio.c_cflag &= ~CLOCAL;
-#endif /* USE_POSIX_TERMIOS */
- /* enable signals, canonical processing (erase, kill, etc),
- * echo
- */
- tio.c_lflag |= ISIG | ICANON | ECHO | ECHOE | ECHOK;
-#ifdef ECHOKE
- tio.c_lflag |= ECHOKE | IEXTEN;
-#endif
-#ifdef ECHOCTL
- tio.c_lflag |= ECHOCTL | IEXTEN;
-#endif
-#ifndef __MVS__
- /* reset EOL to default value */
- tio.c_cc[VEOL] = CEOL; /* '^@' */
- /* certain shells (ksh & csh) change EOF as well */
- tio.c_cc[VEOF] = CEOF; /* '^D' */
-#else
- if (tio.c_cc[VEOL] == 0)
- tio.c_cc[VEOL] = CEOL; /* '^@' */
- if (tio.c_cc[VEOF] == 0)
- tio.c_cc[VEOF] = CEOF; /* '^D' */
-#endif
-#ifdef VLNEXT
- tio.c_cc[VLNEXT] = CLNEXT;
-#endif
-#ifdef VWERASE
- tio.c_cc[VWERASE] = CWERASE;
-#endif
-#ifdef VREPRINT
- tio.c_cc[VREPRINT] = CRPRNT;
-#endif
-#ifdef VRPRNT
- tio.c_cc[VRPRNT] = CRPRNT;
-#endif
-#ifdef VDISCARD
- tio.c_cc[VDISCARD] = CFLUSH;
-#endif
-#ifdef VFLUSHO
- tio.c_cc[VFLUSHO] = CFLUSH;
-#endif
-#ifdef VSTOP
- tio.c_cc[VSTOP] = CSTOP;
-#endif
-#ifdef VSTART
- tio.c_cc[VSTART] = CSTART;
-#endif
-#ifdef VSUSP
- tio.c_cc[VSUSP] = CSUSP;
-#endif
-#ifdef VDSUSP
- tio.c_cc[VDSUSP] = CDSUSP;
-#endif
- if (override_tty_modes) {
- /* sysv-specific */
- TMODE(XTTYMODE_intr, tio.c_cc[VINTR]);
- TMODE(XTTYMODE_quit, tio.c_cc[VQUIT]);
- TMODE(XTTYMODE_erase, tio.c_cc[VERASE]);
- TMODE(XTTYMODE_kill, tio.c_cc[VKILL]);
- TMODE(XTTYMODE_eof, tio.c_cc[VEOF]);
- TMODE(XTTYMODE_eol, tio.c_cc[VEOL]);
-#ifdef VSWTCH
- TMODE(XTTYMODE_swtch, tio.c_cc[VSWTCH]);
-#endif
-#ifdef VSUSP
- TMODE(XTTYMODE_susp, tio.c_cc[VSUSP]);
-#endif
-#ifdef VDSUSP
- TMODE(XTTYMODE_dsusp, tio.c_cc[VDSUSP]);
-#endif
-#ifdef VREPRINT
- TMODE(XTTYMODE_rprnt, tio.c_cc[VREPRINT]);
-#endif
-#ifdef VRPRNT
- TMODE(XTTYMODE_rprnt, tio.c_cc[VRPRNT]);
-#endif
-#ifdef VDISCARD
- TMODE(XTTYMODE_flush, tio.c_cc[VDISCARD]);
-#endif
-#ifdef VFLUSHO
- TMODE(XTTYMODE_flush, tio.c_cc[VFLUSHO]);
-#endif
-#ifdef VWERASE
- TMODE(XTTYMODE_weras, tio.c_cc[VWERASE]);
-#endif
-#ifdef VLNEXT
- TMODE(XTTYMODE_lnext, tio.c_cc[VLNEXT]);
-#endif
-#ifdef VSTART
- TMODE(XTTYMODE_start, tio.c_cc[VSTART]);
-#endif
-#ifdef VSTOP
- TMODE(XTTYMODE_stop, tio.c_cc[VSTOP]);
-#endif
-#ifdef VSTATUS
- TMODE(XTTYMODE_status, tio.c_cc[VSTATUS]);
-#endif
-#ifdef VERASE2
- TMODE(XTTYMODE_erase2, tio.c_cc[VERASE2]);
-#endif
-#ifdef VEOL2
- TMODE(XTTYMODE_eol2, tio.c_cc[VEOL2]);
-#endif
-#ifdef HAS_LTCHARS
- /* both SYSV and BSD have ltchars */
- TMODE(XTTYMODE_susp, ltc.t_suspc);
- TMODE(XTTYMODE_dsusp, ltc.t_dsuspc);
- TMODE(XTTYMODE_rprnt, ltc.t_rprntc);
- TMODE(XTTYMODE_flush, ltc.t_flushc);
- TMODE(XTTYMODE_weras, ltc.t_werasc);
- TMODE(XTTYMODE_lnext, ltc.t_lnextc);
-#endif
- }
-#ifdef HAS_LTCHARS
-#ifdef __hpux
- /* ioctl chokes when the "reserved" process group controls
- * are not set to _POSIX_VDISABLE */
- ltc.t_rprntc = ltc.t_rprntc = ltc.t_flushc =
- ltc.t_werasc = ltc.t_lnextc = _POSIX_VDISABLE;
-#endif /* __hpux */
- if (ioctl(ttyfd, TIOCSLTC, &ltc) == -1)
- HsSysError(cp_pipe[1], ERROR_TIOCSETC);
-#endif /* HAS_LTCHARS */
-#ifdef TIOCLSET
- if (ioctl(ttyfd, TIOCLSET, (char *) &lmode) == -1)
- HsSysError(cp_pipe[1], ERROR_TIOCLSET);
-#endif /* TIOCLSET */
- if (ttySetAttr(ttyfd, &tio) == -1)
- HsSysError(cp_pipe[1], ERROR_TIOCSETP);
-
- /* ignore errors here - some platforms don't work */
- tio.c_cflag &= ~CSIZE;
- if (screen->input_eight_bits)
- tio.c_cflag |= CS8;
- else
- tio.c_cflag |= CS7;
- (void) ttySetAttr(ttyfd, &tio);
-
-#else /* !TERMIO_STRUCT */
- sg.sg_flags &= ~(ALLDELAY | XTABS | CBREAK | RAW);
- sg.sg_flags |= ECHO | CRMOD;
- /* make sure speed is set on pty so that editors work right */
- sg.sg_ispeed = VAL_LINE_SPEED;
- sg.sg_ospeed = VAL_LINE_SPEED;
- /* reset t_brkc to default value */
- tc.t_brkc = -1;
-#ifdef LPASS8
- if (screen->input_eight_bits)
- lmode |= LPASS8;
- else
- lmode &= ~(LPASS8);
-#endif
-#ifdef sony
- jmode &= ~KM_KANJI;
-#endif /* sony */
-
- ltc = d_ltc;
-
- if (override_tty_modes) {
- TMODE(XTTYMODE_intr, tc.t_intrc);
- TMODE(XTTYMODE_quit, tc.t_quitc);
- TMODE(XTTYMODE_erase, sg.sg_erase);
- TMODE(XTTYMODE_kill, sg.sg_kill);
- TMODE(XTTYMODE_eof, tc.t_eofc);
- TMODE(XTTYMODE_start, tc.t_startc);
- TMODE(XTTYMODE_stop, tc.t_stopc);
- TMODE(XTTYMODE_brk, tc.t_brkc);
- /* both SYSV and BSD have ltchars */
- TMODE(XTTYMODE_susp, ltc.t_suspc);
- TMODE(XTTYMODE_dsusp, ltc.t_dsuspc);
- TMODE(XTTYMODE_rprnt, ltc.t_rprntc);
- TMODE(XTTYMODE_flush, ltc.t_flushc);
- TMODE(XTTYMODE_weras, ltc.t_werasc);
- TMODE(XTTYMODE_lnext, ltc.t_lnextc);
- }
-
- if (ioctl(ttyfd, TIOCSETP, (char *) &sg) == -1)
- HsSysError(cp_pipe[1], ERROR_TIOCSETP);
- if (ioctl(ttyfd, TIOCSETC, (char *) &tc) == -1)
- HsSysError(cp_pipe[1], ERROR_TIOCSETC);
- if (ioctl(ttyfd, TIOCSETD, (char *) &discipline) == -1)
- HsSysError(cp_pipe[1], ERROR_TIOCSETD);
- if (ioctl(ttyfd, TIOCSLTC, (char *) &ltc) == -1)
- HsSysError(cp_pipe[1], ERROR_TIOCSLTC);
- if (ioctl(ttyfd, TIOCLSET, (char *) &lmode) == -1)
- HsSysError(cp_pipe[1], ERROR_TIOCLSET);
-#ifdef sony
- if (ioctl(ttyfd, TIOCKSET, (char *) &jmode) == -1)
- HsSysError(cp_pipe[1], ERROR_TIOCKSET);
- if (ioctl(ttyfd, TIOCKSETC, (char *) &jtc) == -1)
- HsSysError(cp_pipe[1], ERROR_TIOCKSETC);
-#endif /* sony */
-#endif /* TERMIO_STRUCT */
-#if defined(TIOCCONS) || defined(SRIOCSREDIR)
- if (Console) {
-#ifdef TIOCCONS
- int on = 1;
- if (ioctl(ttyfd, TIOCCONS, (char *) &on) == -1)
- fprintf(stderr, "%s: cannot open console: %s\n",
- xterm_name, strerror(errno));
-#endif
-#ifdef SRIOCSREDIR
- int fd = open("/dev/console", O_RDWR);
- if (fd == -1 || ioctl(fd, SRIOCSREDIR, ttyfd) == -1)
- fprintf(stderr, "%s: cannot open console: %s\n",
- xterm_name, strerror(errno));
- (void) close(fd);
-#endif
- }
-#endif /* TIOCCONS */
- }
-
- signal(SIGCHLD, SIG_DFL);
-#ifdef USE_SYSV_SIGHUP
- /* watch out for extra shells (I don't understand either) */
- signal(SIGHUP, SIG_DFL);
-#else
- signal(SIGHUP, SIG_IGN);
-#endif
- /* restore various signals to their defaults */
- signal(SIGINT, SIG_DFL);
- signal(SIGQUIT, SIG_DFL);
- signal(SIGTERM, SIG_DFL);
-
- /*
- * If we're not asked to make the parent process set the
- * terminal's erase mode, and if we had no ttyModes resource,
- * then set the terminal's erase mode from our best guess.
- */
-#if OPT_INITIAL_ERASE
- TRACE(("check if we should set erase to %d:%s\n\tptyInitialErase:%d,\n\toveride_tty_modes:%d,\n\tXTTYMODE_erase:%d\n",
- initial_erase,
- (!resource.ptyInitialErase
- && !override_tty_modes
- && !ttymodelist[XTTYMODE_erase].set)
- ? "YES" : "NO",
- resource.ptyInitialErase,
- override_tty_modes,
- ttymodelist[XTTYMODE_erase].set));
- if (!resource.ptyInitialErase
- && !override_tty_modes
- && !ttymodelist[XTTYMODE_erase].set) {
-#if OPT_TRACE
- int old_erase;
-#endif
-#ifdef TERMIO_STRUCT
- if (ttyGetAttr(ttyfd, &tio) == -1)
- tio = d_tio;
-#if OPT_TRACE
- old_erase = tio.c_cc[VERASE];
-#endif
- tio.c_cc[VERASE] = initial_erase;
- rc = ttySetAttr(ttyfd, &tio);
-#else /* !TERMIO_STRUCT */
- if (ioctl(ttyfd, TIOCGETP, (char *) &sg) == -1)
- sg = d_sg;
-#if OPT_TRACE
- old_erase = sg.sg_erase;
-#endif
- sg.sg_erase = initial_erase;
- rc = ioctl(ttyfd, TIOCSETP, (char *) &sg);
-#endif /* TERMIO_STRUCT */
- TRACE(("%s setting erase to %d (was %d)\n",
- rc ? "FAIL" : "OK", initial_erase, old_erase));
- }
-#endif
-
- /* copy the environment before Setenv'ing */
- for (i = 0; environ[i] != NULL; i++) ;
- /* compute number of xtermSetenv() calls below */
- envsize = 1; /* (NULL terminating entry) */
- envsize += 5; /* TERM, WINDOWID, DISPLAY, _SHELL, _VERSION */
-#ifdef HAVE_UTMP
- envsize += 1; /* LOGNAME */
-#endif /* HAVE_UTMP */
-#ifdef USE_SYSV_ENVVARS
- envsize += 2; /* COLUMNS, LINES */
-#ifdef HAVE_UTMP
- envsize += 2; /* HOME, SHELL */
-#endif /* HAVE_UTMP */
-#ifdef OWN_TERMINFO_DIR
- envsize += 1; /* TERMINFO */
-#endif
-#else /* USE_SYSV_ENVVARS */
- envsize += 1; /* TERMCAP */
-#endif /* USE_SYSV_ENVVARS */
- envnew = TypeCallocN(char *, (unsigned) i + envsize);
- memmove((char *) envnew, (char *) environ, i * sizeof(char *));
- environ = envnew;
- xtermSetenv("TERM=", TermName);
- if (!TermName)
- *newtc = 0;
-
- sprintf(buf, "%lu",
- ((unsigned long) XtWindow(SHELL_OF(CURRENT_EMU(screen)))));
- xtermSetenv("WINDOWID=", buf);
-
- /* put the display into the environment of the shell */
- xtermSetenv("DISPLAY=", XDisplayString(screen->display));
-
- xtermSetenv("XTERM_VERSION=", xtermVersion());
-
- signal(SIGTERM, SIG_DFL);
-
- /* this is the time to go and set up stdin, out, and err
- */
- {
-#if defined(CRAY) && (OSMAJORVERSION >= 6)
- close_fd(ttyfd);
-
- (void) close(0);
-
- if (open("/dev/tty", O_RDWR)) {
- SysError(ERROR_OPDEVTTY);
- }
- (void) close(1);
- (void) close(2);
- dup(0);
- dup(0);
-#else
- /* dup the tty */
- for (i = 0; i <= 2; i++)
- if (i != ttyfd) {
- (void) close(i);
- (void) dup(ttyfd);
- }
-#ifndef ATT
- /* and close the tty */
- if (ttyfd > 2)
- close_fd(ttyfd);
-#endif
-#endif /* CRAY */
- }
-
-#if !defined(USE_SYSV_PGRP)
-#ifdef TIOCSCTTY
- setsid();
- ioctl(0, TIOCSCTTY, 0);
-#endif
- ioctl(0, TIOCSPGRP, (char *) &pgrp);
- setpgrp(0, 0);
- close(open(ttydev, O_WRONLY));
- setpgrp(0, pgrp);
-#if defined(__QNX__)
- tcsetpgrp(0, pgrp /*setsid() */ );
-#endif
-#endif /* !USE_SYSV_PGRP */
-
-#ifdef Lynx
- {
- TERMIO_STRUCT t;
- if (ttyGetAttr(0, &t) >= 0) {
- /* this gets lost somewhere on our way... */
- t.c_oflag |= OPOST;
- ttySetAttr(0, &t);
- }
- }
-#endif
-
-#ifdef HAVE_UTMP
- pw = getpwuid(screen->uid);
- login_name = NULL;
- if (pw && pw->pw_name) {
-#ifdef HAVE_GETLOGIN
- /*
- * If the value from getlogin() differs from the value we
- * get by looking in the password file, check if it does
- * correspond to the same uid. If so, allow that as an
- * alias for the uid.
- *
- * Of course getlogin() will fail if we're started from
- * a window-manager, since there's no controlling terminal
- * to fuss with. In that case, try to get something useful
- * from the user's $LOGNAME or $USER environment variables.
- */
- if (((login_name = getlogin()) != NULL
- || (login_name = getenv("LOGNAME")) != NULL
- || (login_name = getenv("USER")) != NULL)
- && strcmp(login_name, pw->pw_name)) {
- struct passwd *pw2 = getpwnam(login_name);
- if (pw2 != 0) {
- uid_t uid2 = pw2->pw_uid;
- pw = getpwuid(screen->uid);
- if ((uid_t) pw->pw_uid != uid2)
- login_name = NULL;
- } else {
- pw = getpwuid(screen->uid);
- }
- }
-#endif
- if (login_name == NULL)
- login_name = pw->pw_name;
- if (login_name != NULL)
- login_name = x_strdup(login_name);
- }
- if (login_name != NULL) {
- xtermSetenv("LOGNAME=", login_name); /* for POSIX */
- }
-#ifndef USE_UTEMPTER
-#ifdef USE_SYSV_UTMP
- /* Set up our utmp entry now. We need to do it here
- * for the following reasons:
- * - It needs to have our correct process id (for
- * login).
- * - If our parent was to set it after the fork(),
- * it might make it out before we need it.
- * - We need to do it before we go and change our
- * user and group id's.
- */
- (void) call_setutent();
- init_utmp(DEAD_PROCESS, &utmp);
-
- /* position to entry in utmp file */
- /* Test return value: beware of entries left behind: PSz 9 Mar 00 */
- if (!(utret = find_utmp(&utmp))) {
- (void) call_setutent();
- init_utmp(USER_PROCESS, &utmp);
- if (!(utret = find_utmp(&utmp))) {
- (void) call_setutent();
- }
- }
-#if OPT_TRACE
- if (!utret)
- TRACE(("getutid: NULL\n"));
- else
- TRACE(("getutid: pid=%d type=%d user=%s line=%s id=%s\n",
- utret->ut_pid, utret->ut_type, utret->ut_user,
- utret->ut_line, utret->ut_id));
-#endif
-
- /* set up the new entry */
- utmp.ut_type = USER_PROCESS;
-#ifdef HAVE_UTMP_UT_XSTATUS
- utmp.ut_xstatus = 2;
-#endif
- (void) strncpy(utmp.ut_user,
- (login_name != NULL) ? login_name : "????",
- sizeof(utmp.ut_user));
- /* why are we copying this string again? (see above) */
- (void) strncpy(utmp.ut_id, my_utmp_id(ttydev), sizeof(utmp.ut_id));
- (void) strncpy(utmp.ut_line,
- my_pty_name(ttydev), sizeof(utmp.ut_line));
-
-#ifdef HAVE_UTMP_UT_HOST
- SetUtmpHost(utmp.ut_host, screen);
-#endif
- (void) strncpy(utmp.ut_name,
- (login_name) ? login_name : "????",
- sizeof(utmp.ut_name));
-
- utmp.ut_pid = getpid();
-#if defined(HAVE_UTMP_UT_XTIME)
-#if defined(HAVE_UTMP_UT_SESSION)
- utmp.ut_session = getsid(0);
-#endif
- utmp.ut_xtime = time((time_t *) 0);
- utmp.ut_tv.tv_usec = 0;
-#else
- utmp.ut_time = time((time_t *) 0);
-#endif
-
- /* write out the entry */
- if (!resource.utmpInhibit) {
- errno = 0;
- call_pututline(&utmp);
- TRACE(("pututline: id %s, line %s, pid %ld, errno %d %s\n",
- utmp.ut_id,
- utmp.ut_line,
- (long) utmp.ut_pid,
- errno, (errno != 0) ? strerror(errno) : ""));
- }
-#ifdef WTMP
-#if defined(WTMPX_FILE) && (defined(SVR4) || defined(__SCO__))
- if (term->misc.login_shell)
- updwtmpx(WTMPX_FILE, &utmp);
-#elif defined(linux) && defined(__GLIBC__) && (__GLIBC__ >= 2) && !(defined(__powerpc__) && (__GLIBC__ == 2) && (__GLIBC_MINOR__ == 0))
- if (term->misc.login_shell)
- call_updwtmp(etc_wtmp, &utmp);
-#else
- if (term->misc.login_shell &&
- (i = open(etc_wtmp, O_WRONLY | O_APPEND)) >= 0) {
- write(i, (char *) &utmp, sizeof(utmp));
- close(i);
- }
-#endif
-#endif
- /* close the file */
- (void) call_endutent();
-
-#else /* USE_SYSV_UTMP */
- /* We can now get our ttyslot! We can also set the initial
- * utmp entry.
- */
- tslot = ttyslot();
- added_utmp_entry = False;
- {
- if (tslot > 0 && pw && !resource.utmpInhibit &&
- (i = open(etc_utmp, O_WRONLY)) >= 0) {
- bzero((char *) &utmp, sizeof(utmp));
- (void) strncpy(utmp.ut_line,
- my_pty_name(ttydev),
- sizeof(utmp.ut_line));
- (void) strncpy(utmp.ut_name, login_name,
- sizeof(utmp.ut_name));
-#ifdef HAVE_UTMP_UT_HOST
- SetUtmpHost(utmp.ut_host, screen);
-#endif
- /* cast needed on Ultrix 4.4 */
- time((time_t *) & utmp.ut_time);
- lseek(i, (long) (tslot * sizeof(utmp)), 0);
- write(i, (char *) &utmp, sizeof(utmp));
- close(i);
- added_utmp_entry = True;
-#if defined(WTMP)
- if (term->misc.login_shell &&
- (i = open(etc_wtmp, O_WRONLY | O_APPEND)) >= 0) {
- int status;
- status = write(i, (char *) &utmp, sizeof(utmp));
- status = close(i);
- }
-#elif defined(MNX_LASTLOG)
- if (term->misc.login_shell &&
- (i = open(_U_LASTLOG, O_WRONLY)) >= 0) {
- lseek(i, (long) (screen->uid *
- sizeof(utmp)), 0);
- write(i, (char *) &utmp, sizeof(utmp));
- close(i);
- }
-#endif /* WTMP or MNX_LASTLOG */
- } else
- tslot = -tslot;
- }
-
- /* Let's pass our ttyslot to our parent so that it can
- * clean up after us.
- */
-#if OPT_PTY_HANDSHAKE
- if (resource.ptyHandshake) {
- handshake.tty_slot = tslot;
- }
-#endif /* OPT_PTY_HANDSHAKE */
-#endif /* USE_SYSV_UTMP */
-
-#ifdef USE_LASTLOGX
- if (term->misc.login_shell) {
- bzero((char *) &lastlog, sizeof(lastlog));
- (void) strncpy(lastlog.ll_line,
- my_pty_name(ttydev),
- sizeof(lastlog.ll_line));
- X_GETTIMEOFDAY(&lastlog.ll_tv);
- SetUtmpHost(lastlog.ll_host, screen);
- updlastlogx(_PATH_LASTLOGX, screen->uid, &lastlog);
- }
-#endif
-
-#ifdef USE_LASTLOG
- if (term->misc.login_shell &&
- (i = open(etc_lastlog, O_WRONLY)) >= 0) {
- bzero((char *) &lastlog, sizeof(struct lastlog));
- (void) strncpy(lastlog.ll_line,
- my_pty_name(ttydev),
- sizeof(lastlog.ll_line));
- SetUtmpHost(lastlog.ll_host, screen);
- time(&lastlog.ll_time);
- lseek(i, (long) (screen->uid * sizeof(struct lastlog)), 0);
- write(i, (char *) &lastlog, sizeof(struct lastlog));
- close(i);
- }
-#endif /* USE_LASTLOG */
-
-#if defined(USE_UTMP_SETGID)
- /* Switch to real gid after writing utmp entry */
- utmpGid = getegid();
- if (getgid() != getegid()) {
- utmpGid = getegid();
- setegid(getgid());
- TRACE(("switch to real gid %d after writing utmp\n", getgid()));
- }
-#endif
-
-#if OPT_PTY_HANDSHAKE
- /* Let our parent know that we set up our utmp entry
- * so that it can clean up after us.
- */
- if (resource.ptyHandshake) {
- handshake.status = UTMP_ADDED;
- handshake.error = 0;
- strcpy(handshake.buffer, ttydev);
- (void) write(cp_pipe[1], (char *) &handshake, sizeof(handshake));
- }
-#endif /* OPT_PTY_HANDSHAKE */
-#endif /* USE_UTEMPTER */
-#endif /* HAVE_UTMP */
-
- (void) setgid(screen->gid);
-#ifdef HAS_BSD_GROUPS
- if (geteuid() == 0 && pw) {
- if (initgroups(login_name, pw->pw_gid)) {
- perror("initgroups failed");
- SysError(ERROR_INIGROUPS);
- }
- }
-#endif
- if (setuid(screen->uid)) {
- SysError(ERROR_SETUID);
- }
-#if OPT_PTY_HANDSHAKE
- if (resource.ptyHandshake) {
- /* mark the pipes as close on exec */
- fcntl(cp_pipe[1], F_SETFD, 1);
- fcntl(pc_pipe[0], F_SETFD, 1);
-
- /* We are at the point where we are going to
- * exec our shell (or whatever). Let our parent
- * know we arrived safely.
- */
- handshake.status = PTY_GOOD;
- handshake.error = 0;
- (void) strcpy(handshake.buffer, ttydev);
- (void) write(cp_pipe[1], (char *) &handshake, sizeof(handshake));
-
- if (waiting_for_initial_map) {
- i = read(pc_pipe[0], (char *) &handshake,
- sizeof(handshake));
- if (i != sizeof(handshake) ||
- handshake.status != PTY_EXEC) {
- /* some very bad problem occurred */
- exit(ERROR_PTY_EXEC);
- }
- if (handshake.rows > 0 && handshake.cols > 0) {
- set_max_row(screen, handshake.rows);
- set_max_col(screen, handshake.cols);
-#ifdef TTYSIZE_STRUCT
- TTYSIZE_ROWS(ts) = MaxRows(screen);
- TTYSIZE_COLS(ts) = MaxCols(screen);
-#if defined(USE_STRUCT_WINSIZE)
- ts.ws_xpixel = FullWidth(screen);
- ts.ws_ypixel = FullHeight(screen);
-#endif
-#endif /* TTYSIZE_STRUCT */
- }
- }
- }
-#endif /* OPT_PTY_HANDSHAKE */
-
-#ifdef USE_SYSV_ENVVARS
- {
- char numbuf[12];
- sprintf(numbuf, "%d", MaxCols(screen));
- xtermSetenv("COLUMNS=", numbuf);
- sprintf(numbuf, "%d", MaxRows(screen));
- xtermSetenv("LINES=", numbuf);
- }
-#ifdef HAVE_UTMP
- if (pw) { /* SVR4 doesn't provide these */
- if (!getenv("HOME"))
- xtermSetenv("HOME=", pw->pw_dir);
- if (!getenv("SHELL"))
- xtermSetenv("SHELL=", pw->pw_shell);
- }
-#endif /* HAVE_UTMP */
-#ifdef OWN_TERMINFO_DIR
- xtermSetenv("TERMINFO=", OWN_TERMINFO_DIR);
-#endif
-#else /* USE_SYSV_ENVVARS */
- if (!TEK4014_ACTIVE(screen) && *newtc) {
- strcpy(termcap, newtc);
- resize(screen, termcap, newtc);
- }
- if (term->misc.titeInhibit && !term->misc.tiXtraScroll) {
- remove_termcap_entry(newtc, "ti=");
- remove_termcap_entry(newtc, "te=");
- }
- /*
- * work around broken termcap entries */
- if (resource.useInsertMode) {
- remove_termcap_entry(newtc, "ic=");
- /* don't get duplicates */
- remove_termcap_entry(newtc, "im=");
- remove_termcap_entry(newtc, "ei=");
- remove_termcap_entry(newtc, "mi");
- if (*newtc)
- strcat(newtc, ":im=\\E[4h:ei=\\E[4l:mi:");
- }
- if (*newtc) {
-#if OPT_INITIAL_ERASE
- unsigned len;
- remove_termcap_entry(newtc, TERMCAP_ERASE "=");
- len = strlen(newtc);
- if (len != 0 && newtc[len - 1] == ':')
- len--;
- sprintf(newtc + len, ":%s=\\%03o:",
- TERMCAP_ERASE,
- CharOf(initial_erase));
-#endif
- xtermSetenv("TERMCAP=", newtc);
- }
-#endif /* USE_SYSV_ENVVARS */
-
- /* need to reset after all the ioctl bashing we did above */
-#if OPT_PTY_HANDSHAKE
- if (resource.ptyHandshake) {
-#ifdef TTYSIZE_STRUCT
- i = SET_TTYSIZE(0, ts);
- TRACE(("spawn SET_TTYSIZE %dx%d return %d\n",
- TTYSIZE_ROWS(ts),
- TTYSIZE_COLS(ts), i));
-#endif /* TTYSIZE_STRUCT */
- }
-#endif /* OPT_PTY_HANDSHAKE */
- signal(SIGHUP, SIG_DFL);
-
- if ((ptr = explicit_shname) == NULL) {
- if (((ptr = getenv("SHELL")) == NULL || *ptr == 0) &&
- ((pw == NULL && (pw = getpwuid(screen->uid)) == NULL) ||
- *(ptr = pw->pw_shell) == 0)) {
- ptr = "/bin/sh";
- }
- } else {
- xtermSetenv("SHELL=", explicit_shname);
- }
- xtermSetenv("XTERM_SHELL=", ptr);
-
- shname = x_basename(ptr);
- TRACE(("shell path '%s' leaf '%s'\n", ptr, shname));
-
-#if OPT_LUIT_PROG
- /*
- * Use two copies of command_to_exec, in case luit is not actually
- * there, or refuses to run. In that case we will fall-through to
- * to command that the user gave anyway.
- */
- if (command_to_exec_with_luit) {
- xtermSetenv("XTERM_SHELL=",
- xtermFindShell(*command_to_exec_with_luit, False));
- TRACE(("spawning command \"%s\"\n", *command_to_exec_with_luit));
- execvp(*command_to_exec_with_luit, command_to_exec_with_luit);
- /* print error message on screen */
- fprintf(stderr, "%s: Can't execvp %s: %s\n",
- xterm_name, *command_to_exec_with_luit, strerror(errno));
- fprintf(stderr, "%s: cannot support your locale.\n",
- xterm_name);
- }
-#endif
- if (command_to_exec) {
- xtermSetenv("XTERM_SHELL=",
- xtermFindShell(*command_to_exec, False));
- TRACE(("spawning command \"%s\"\n", *command_to_exec));
- execvp(*command_to_exec, command_to_exec);
- if (command_to_exec[1] == 0)
- execlp(ptr, shname, "-c", command_to_exec[0], (void *) 0);
- /* print error message on screen */
- fprintf(stderr, "%s: Can't execvp %s: %s\n",
- xterm_name, *command_to_exec, strerror(errno));
- }
-#ifdef USE_SYSV_SIGHUP
- /* fix pts sh hanging around */
- signal(SIGHUP, SIG_DFL);
-#endif
-
- shname_minus = CastMallocN(char, strlen(shname) + 2);
- (void) strcpy(shname_minus, "-");
- (void) strcat(shname_minus, shname);
-#ifndef TERMIO_STRUCT
- ldisc = XStrCmp("csh", shname + strlen(shname) - 3) == 0 ?
- NTTYDISC : 0;
- ioctl(0, TIOCSETD, (char *) &ldisc);
-#endif /* !TERMIO_STRUCT */
-
-#ifdef USE_LOGIN_DASH_P
- if (term->misc.login_shell && pw && added_utmp_entry)
- execl(bin_login, "login", "-p", "-f", login_name, (void *) 0);
-#endif
- execlp(ptr,
- (term->misc.login_shell ? shname_minus : shname),
- (void *) 0);
-
- /* Exec failed. */
- fprintf(stderr, "%s: Could not exec %s: %s\n", xterm_name,
- ptr, strerror(errno));
- (void) sleep(5);
- exit(ERROR_EXEC);
- }
- /* end if in child after fork */
-#if OPT_PTY_HANDSHAKE
- if (resource.ptyHandshake) {
- /* Parent process. Let's handle handshaked requests to our
- * child process.
- */
-
- /* close childs's sides of the pipes */
- close(cp_pipe[1]);
- close(pc_pipe[0]);
-
- for (done = 0; !done;) {
- if (read(cp_pipe[0],
- (char *) &handshake,
- sizeof(handshake)) <= 0) {
- /* Our child is done talking to us. If it terminated
- * due to an error, we will catch the death of child
- * and clean up.
- */
- break;
- }
-
- switch (handshake.status) {
- case PTY_GOOD:
- /* Success! Let's free up resources and
- * continue.
- */
- done = 1;
- break;
-
- case PTY_BAD:
- /* The open of the pty failed! Let's get
- * another one.
- */
- (void) close(screen->respond);
- if (get_pty(&screen->respond, XDisplayString(screen->display))) {
- /* no more ptys! */
- fprintf(stderr,
- "%s: child process can find no available ptys: %s\n",
- xterm_name, strerror(errno));
- handshake.status = PTY_NOMORE;
- write(pc_pipe[1], (char *) &handshake, sizeof(handshake));
- exit(ERROR_PTYS);
- }
- handshake.status = PTY_NEW;
- (void) strcpy(handshake.buffer, ttydev);
- write(pc_pipe[1], (char *) &handshake, sizeof(handshake));
- break;
-
- case PTY_FATALERROR:
- errno = handshake.error;
- close(cp_pipe[0]);
- close(pc_pipe[1]);
- SysError(handshake.fatal_error);
- /*NOTREACHED */
-
- case UTMP_ADDED:
- /* The utmp entry was set by our slave. Remember
- * this so that we can reset it later.
- */
- added_utmp_entry = True;
-#ifndef USE_SYSV_UTMP
- tslot = handshake.tty_slot;
-#endif /* USE_SYSV_UTMP */
- free(ttydev);
- ttydev = x_strdup(handshake.buffer);
- break;
- default:
- fprintf(stderr, "%s: unexpected handshake status %d\n",
- xterm_name,
- (int) handshake.status);
- }
- }
- /* close our sides of the pipes */
- if (!waiting_for_initial_map) {
- close(cp_pipe[0]);
- close(pc_pipe[1]);
- }
- }
-#endif /* OPT_PTY_HANDSHAKE */
- }
-
- /* end if no slave */
- /*
- * still in parent (xterm process)
- */
-#ifdef USE_SYSV_SIGHUP
- /* hung sh problem? */
- signal(SIGHUP, SIG_DFL);
-#else
- signal(SIGHUP, SIG_IGN);
-#endif
-
-/*
- * Unfortunately, System V seems to have trouble divorcing the child process
- * from the process group of xterm. This is a problem because hitting the
- * INTR or QUIT characters on the keyboard will cause xterm to go away if we
- * don't ignore the signals. This is annoying.
- */
-
-#if defined(USE_SYSV_SIGNALS) && !defined(SIGTSTP)
- signal(SIGINT, SIG_IGN);
-
-#ifndef SYSV
- /* hung shell problem */
- signal(SIGQUIT, SIG_IGN);
-#endif
- signal(SIGTERM, SIG_IGN);
-#elif defined(SYSV) || defined(__osf__)
- /* if we were spawned by a jobcontrol smart shell (like ksh or csh),
- * then our pgrp and pid will be the same. If we were spawned by
- * a jobcontrol dumb shell (like /bin/sh), then we will be in our
- * parent's pgrp, and we must ignore keyboard signals, or we will
- * tank on everything.
- */
- if (getpid() == getpgrp()) {
- (void) signal(SIGINT, Exit);
- (void) signal(SIGQUIT, Exit);
- (void) signal(SIGTERM, Exit);
- } else {
- (void) signal(SIGINT, SIG_IGN);
- (void) signal(SIGQUIT, SIG_IGN);
- (void) signal(SIGTERM, SIG_IGN);
- }
- (void) signal(SIGPIPE, Exit);
-#else /* SYSV */
- signal(SIGINT, Exit);
- signal(SIGQUIT, Exit);
- signal(SIGTERM, Exit);
- signal(SIGPIPE, Exit);
-#endif /* USE_SYSV_SIGNALS and not SIGTSTP */
-
- return 0;
-} /* end spawn */
-
-SIGNAL_T
-Exit(int n)
-{
- TScreen *screen = &term->screen;
-
-#ifdef USE_UTEMPTER
- if (!resource.utmpInhibit && added_utmp_entry)
- removeFromUtmp();
-#elif defined(HAVE_UTMP)
-#ifdef USE_SYSV_UTMP
- struct UTMP_STR utmp;
- struct UTMP_STR *utptr;
-
- /* don't do this more than once */
- if (xterm_exiting)
- SIGNAL_RETURN;
- xterm_exiting = True;
-
-#ifdef PUCC_PTYD
- closepty(ttydev, ptydev, (resource.utmpInhibit ? OPTY_NOP : OPTY_LOGIN), screen->respond);
-#endif /* PUCC_PTYD */
-
- /* cleanup the utmp entry we forged earlier */
- if (!resource.utmpInhibit
-#if OPT_PTY_HANDSHAKE /* without handshake, no way to know */
- && (resource.ptyHandshake && added_utmp_entry)
-#endif /* OPT_PTY_HANDSHAKE */
- ) {
-#if defined(USE_UTMP_SETGID)
- if (utmpGid != -1) {
- /* Switch back to group utmp */
- setegid(utmpGid);
- TRACE(("switched back to group %d (check: %d)\n",
- utmpGid, (int) getgid()));
- }
-#endif
- init_utmp(USER_PROCESS, &utmp);
- (void) call_setutent();
-
- /*
- * We could use getutline() if we didn't support old systems.
- */
- while ((utptr = find_utmp(&utmp)) != 0) {
- if (utptr->ut_pid == screen->pid) {
- utptr->ut_type = DEAD_PROCESS;
-#if defined(HAVE_UTMP_UT_XTIME)
-#if defined(HAVE_UTMP_UT_SESSION)
- utptr->ut_session = getsid(0);
-#endif
- utptr->ut_xtime = time((time_t *) 0);
- utptr->ut_tv.tv_usec = 0;
-#else
- *utptr->ut_user = 0;
- utptr->ut_time = time((time_t *) 0);
-#endif
- (void) call_pututline(utptr);
-#ifdef WTMP
-#if defined(WTMPX_FILE) && (defined(SVR4) || defined(__SCO__))
- if (term->misc.login_shell)
- updwtmpx(WTMPX_FILE, utptr);
-#elif defined(linux) && defined(__GLIBC__) && (__GLIBC__ >= 2) && !(defined(__powerpc__) && (__GLIBC__ == 2) && (__GLIBC_MINOR__ == 0))
- strncpy(utmp.ut_line, utptr->ut_line, sizeof(utmp.ut_line));
- if (term->misc.login_shell)
- call_updwtmp(etc_wtmp, utptr);
-#else
- /* set wtmp entry if wtmp file exists */
- if (term->misc.login_shell) {
- int fd;
- if ((fd = open(etc_wtmp, O_WRONLY | O_APPEND)) >= 0) {
- write(fd, utptr, sizeof(*utptr));
- close(fd);
- }
- }
-#endif
-#endif
- break;
- }
- memset(utptr, 0, sizeof(*utptr)); /* keep searching */
- }
- (void) call_endutent();
- }
-#else /* not USE_SYSV_UTMP */
- int wfd;
- struct utmp utmp;
-
- if (!resource.utmpInhibit && added_utmp_entry &&
- (am_slave < 0 && tslot > 0 && (wfd = open(etc_utmp, O_WRONLY)) >= 0)) {
- bzero((char *) &utmp, sizeof(utmp));
- lseek(wfd, (long) (tslot * sizeof(utmp)), 0);
- write(wfd, (char *) &utmp, sizeof(utmp));
- close(wfd);
-#ifdef WTMP
- if (term->misc.login_shell &&
- (wfd = open(etc_wtmp, O_WRONLY | O_APPEND)) >= 0) {
- (void) strncpy(utmp.ut_line,
- my_pty_name(ttydev),
- sizeof(utmp.ut_line));
- time(&utmp.ut_time);
- write(wfd, (char *) &utmp, sizeof(utmp));
- close(wfd);
- }
-#endif /* WTMP */
- }
-#endif /* USE_SYSV_UTMP */
-#endif /* HAVE_UTMP */
- close(screen->respond); /* close explicitly to avoid race with slave side */
-#ifdef ALLOWLOGGING
- if (screen->logging)
- CloseLog(screen);
-#endif
-
- if (am_slave < 0) {
- /* restore ownership of tty and pty */
- set_owner(ttydev, 0, 0, 0666U);
-#if (defined(USE_PTY_DEVICE) && !defined(__sgi) && !defined(__hpux))
- set_owner(ptydev, 0, 0, 0666U);
-#endif
- }
-#if OPT_TRACE || defined(NO_LEAKS)
- if (n == 0) {
- TRACE(("Freeing memory leaks\n"));
- if (term != 0) {
- Display *dpy = term->screen.display;
-
- if (term->screen.sbuf_address) {
- free(term->screen.sbuf_address);
- TRACE(("freed screen.sbuf_address\n"));
- }
- if (term->screen.allbuf) {
- free(term->screen.allbuf);
- TRACE(("freed screen.allbuf\n"));
- }
- if (term->screen.xim) {
- XCloseIM(term->screen.xim);
- TRACE(("freed screen.xim\n"));
- }
- if (toplevel) {
- XtDestroyWidget(toplevel);
- TRACE(("destroyed top-level widget\n"));
- }
- XtCloseDisplay(dpy);
- TRACE(("closed display\n"));
- }
- TRACE((0));
- }
-#endif
-
- exit(n);
- SIGNAL_RETURN;
-}
-
-/* ARGSUSED */
-static void
-resize(TScreen * screen, char *oldtc, char *newtc)
-{
-#ifndef USE_SYSV_ENVVARS
- char *ptr1, *ptr2;
- size_t i;
- int li_first = 0;
- char *temp;
-
- TRACE(("resize %s\n", oldtc));
- if ((ptr1 = x_strindex(oldtc, "co#")) == NULL) {
- strcat(oldtc, "co#80:");
- ptr1 = x_strindex(oldtc, "co#");
- }
- if ((ptr2 = x_strindex(oldtc, "li#")) == NULL) {
- strcat(oldtc, "li#24:");
- ptr2 = x_strindex(oldtc, "li#");
- }
- if (ptr1 > ptr2) {
- li_first++;
- temp = ptr1;
- ptr1 = ptr2;
- ptr2 = temp;
- }
- ptr1 += 3;
- ptr2 += 3;
- strncpy(newtc, oldtc, i = ptr1 - oldtc);
- temp = newtc + i;
- sprintf(temp, "%d", (li_first
- ? MaxRows(screen)
- : MaxCols(screen)));
- temp += strlen(temp);
- ptr1 = strchr(ptr1, ':');
- strncpy(temp, ptr1, i = ptr2 - ptr1);
- temp += i;
- sprintf(temp, "%d", (li_first
- ? MaxCols(screen)
- : MaxRows(screen)));
- ptr2 = strchr(ptr2, ':');
- strcat(temp, ptr2);
- TRACE((" ==> %s\n", newtc));
-#endif /* USE_SYSV_ENVVARS */
-}
-
-#endif /* ! VMS */
-
-/*
- * Does a non-blocking wait for a child process. If the system
- * doesn't support non-blocking wait, do nothing.
- * Returns the pid of the child, or 0 or -1 if none or error.
- */
-int
-nonblocking_wait(void)
-{
-#ifdef USE_POSIX_WAIT
- pid_t pid;
-
- pid = waitpid(-1, NULL, WNOHANG);
-#elif defined(USE_SYSV_SIGNALS) && (defined(CRAY) || !defined(SIGTSTP))
- /* cannot do non-blocking wait */
- int pid = 0;
-#else /* defined(USE_SYSV_SIGNALS) && (defined(CRAY) || !defined(SIGTSTP)) */
-#if defined(Lynx)
- int status;
-#else
- union wait status;
-#endif
- int pid;
-
- pid = wait3(&status, WNOHANG, (struct rusage *) NULL);
-#endif /* USE_POSIX_WAIT else */
- return pid;
-}
-
-#ifndef VMS
-
-/* ARGSUSED */
-static SIGNAL_T
-reapchild(int n GCC_UNUSED)
-{
- int olderrno = errno;
- int pid;
-
- pid = wait(NULL);
-
-#ifdef USE_SYSV_SIGNALS
- /* cannot re-enable signal before waiting for child
- * because then SVR4 loops. Sigh. HP-UX 9.01 too.
- */
- (void) signal(SIGCHLD, reapchild);
-#endif
-
- do {
- if (pid == term->screen.pid) {
-#ifdef DEBUG
- if (debug)
- fputs("Exiting\n", stderr);
-#endif
- if (!hold_screen)
- need_cleanup = TRUE;
- }
- } while ((pid = nonblocking_wait()) > 0);
-
- errno = olderrno;
- SIGNAL_RETURN;
-}
-#endif /* !VMS */
-
-static void
-remove_termcap_entry(char *buf, char *str)
-{
- char *base = buf;
- char *first = base;
- int count = 0;
- size_t len = strlen(str);
-
- TRACE(("*** remove_termcap_entry('%s', '%s')\n", str, buf));
-
- while (*buf != 0) {
- if (!count && !strncmp(buf, str, len)) {
- while (*buf != 0) {
- if (*buf == '\\')
- buf++;
- else if (*buf == ':')
- break;
- if (*buf != 0)
- buf++;
- }
- while ((*first++ = *buf++) != 0) ;
- TRACE(("...removed_termcap_entry('%s', '%s')\n", str, base));
- return;
- } else if (*buf == '\\') {
- buf++;
- } else if (*buf == ':') {
- first = buf;
- count = 0;
- } else if (!isspace(CharOf(*buf))) {
- count++;
- }
- if (*buf != 0)
- buf++;
- }
- TRACE(("...cannot remove\n"));
-}
-
-/*
- * parse_tty_modes accepts lines of the following form:
- *
- * [SETTING] ...
- *
- * where setting consists of the words in the modelist followed by a character
- * or ^char.
- */
-static int
-parse_tty_modes(char *s, struct _xttymodes *modelist)
-{
- struct _xttymodes *mp;
- int c;
- int count = 0;
-
- TRACE(("parse_tty_modes\n"));
- while (1) {
- size_t len;
-
- while (*s && isascii(CharOf(*s)) && isspace(CharOf(*s)))
- s++;
- if (!*s)
- return count;
-
- for (len = 0; isalnum(CharOf(s[len])); ++len) ;
- for (mp = modelist; mp->name; mp++) {
- if (len == mp->len
- && strncmp(s, mp->name, mp->len) == 0)
- break;
- }
- if (!mp->name)
- return -1;
-
- s += mp->len;
- while (*s && isascii(CharOf(*s)) && isspace(CharOf(*s)))
- s++;
- if (!*s)
- return -1;
-
- if ((c = decode_keyvalue(&s, False)) != -1) {
- mp->value = c;
- mp->set = 1;
- count++;
- TRACE(("...parsed #%d: %s=%#x\n", count, mp->name, c));
- }
- }
-}
-
-#ifndef VMS /* don't use pipes on OpenVMS */
-int
-GetBytesAvailable(int fd)
-{
-#if defined(FIONREAD)
- int arg;
- ioctl(fd, FIONREAD, (char *) &arg);
- return (int) arg;
-#elif defined(__CYGWIN__)
- fd_set set;
- struct timeval timeout =
- {0, 0};
-
- FD_ZERO(&set);
- FD_SET(fd, &set);
- if (Select(fd + 1, &set, NULL, NULL, &timeout) > 0)
- return 1;
- else
- return 0;
-#elif defined(FIORDCK)
- return (ioctl(fd, FIORDCHK, NULL));
-#else /* !FIORDCK */
- struct pollfd pollfds[1];
-
- pollfds[0].fd = fd;
- pollfds[0].events = POLLIN;
- return poll(pollfds, 1, 0);
-#endif
-}
-#endif /* !VMS */
-
-/* Utility function to try to hide system differences from
- everybody who used to call killpg() */
-
-int
-kill_process_group(int pid, int sig)
-{
- TRACE(("kill_process_group(pid=%d, sig=%d)\n", pid, sig));
-#if defined(SVR4) || defined(SYSV) || !defined(X_NOT_POSIX)
- return kill(-pid, sig);
-#else
- return killpg(pid, sig);
-#endif
-}
-
-#if OPT_EBCDIC
-int
-A2E(int x)
-{
- char c;
- c = x;
- __atoe_l(&c, 1);
- return c;
-}
-
-int
-E2A(int x)
-{
- char c;
- c = x;
- __etoa_l(&c, 1);
- return c;
-}
-#endif
-
-#if defined(__QNX__) && !defined(__QNXNTO__)
-#include <sys/types.h>
-#include <sys/proc_msg.h>
-#include <sys/kernel.h>
-#include <string.h>
-#include <errno.h>
-
-struct _proc_session ps;
-struct _proc_session_reply rps;
-
-int
-qsetlogin(char *login, char *ttyname)
-{
- int v = getsid(getpid());
-
- memset(&ps, 0, sizeof(ps));
- memset(&rps, 0, sizeof(rps));
-
- ps.type = _PROC_SESSION;
- ps.subtype = _PROC_SUB_ACTION1;
- ps.sid = v;
- strcpy(ps.name, login);
-
- Send(1, &ps, &rps, sizeof(ps), sizeof(rps));
-
- if (rps.status < 0)
- return (rps.status);
-
- ps.type = _PROC_SESSION;
- ps.subtype = _PROC_SUB_ACTION2;
- ps.sid = v;
- sprintf(ps.name, "//%d%s", getnid(), ttyname);
- Send(1, &ps, &rps, sizeof(ps), sizeof(rps));
-
- return (rps.status);
-}
-#endif
diff --git a/nx-X11/programs/xterm/main.h b/nx-X11/programs/xterm/main.h
deleted file mode 100644
index 5a8116665..000000000
--- a/nx-X11/programs/xterm/main.h
+++ /dev/null
@@ -1,89 +0,0 @@
-/* $XTermId: main.h,v 1.27 2004/12/01 01:27:47 tom Exp $ */
-
-/*
- * $Xorg: main.h,v 1.3 2000/08/17 19:55:09 cpqbld Exp $
- */
-
-/* $XFree86: xc/programs/xterm/main.h,v 3.12 2004/12/01 01:27:47 dickey Exp $ */
-
-/*
- * Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
- *
- * All Rights Reserved
- *
- * Permission to use, copy, modify, and distribute this software and its
- * documentation for any purpose and without fee is hereby granted,
- * provided that the above copyright notice appear in all copies and that
- * both that copyright notice and this permission notice appear in
- * supporting documentation, and that the name of Digital Equipment
- * Corporation not be used in advertising or publicity pertaining to
- * distribution of the software without specific, written prior permission.
- *
- *
- * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
- * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
- * DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
- * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
- * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
- * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- * SOFTWARE.
- */
-#ifndef included_main_h
-#define included_main_h
-
-#include <xterm.h>
-
-#define DEFCLASS "XTerm"
-#define DEFFONT "fixed"
-#define DEFWIDEFONT NULL /* grab one which is 2x as wide */
-#define DEFWIDEBOLDFONT NULL
-#define DEFXIMFONT "*"
-#define DEFBOLDFONT NULL /* no bold font uses overstriking */
-#define DEFBORDER 2
-#define DEFFACENAME NULL
-#define DEFFACESIZE "14.0"
-
-#if OPT_BLINK_TEXT
-#define DEFBLINKASBOLD FALSE
-#else
-#define DEFBLINKASBOLD TRUE
-#endif
-
-#ifndef DEFDELETE_DEL
-#define DEFDELETE_DEL 2
-#endif
-
-#ifndef DEF_BACKARO_ERASE
-#define DEF_BACKARO_ERASE FALSE
-#endif
-
-#ifndef DEF_COLOR4
-#define DEF_COLOR4 "blue2" /* see XTerm-col.ad */
-#endif
-
-#ifndef DEF_COLOR12
-#define DEF_COLOR12 "rgb:5c/5c/ff" /* see XTerm-col.ad */
-#endif
-
-#ifndef DEF_INITIAL_ERASE
-#define DEF_INITIAL_ERASE FALSE
-#endif
-
-#ifndef PROJECTROOT
-#define PROJECTROOT "/usr/X11R6"
-#endif
-
-/*
- * The configure script quotes PROJECTROOT's value.
- * imake does not quote PROJECTROOT's value.
- */
-#ifdef HAVE_CONFIG_H
-#define DEFLOCALEFILTER2(x) x
-#else
-#define DEFLOCALEFILTER2(x) #x
-#endif
-
-#define DEFLOCALEFILTER1(x) DEFLOCALEFILTER2(x)
-#define DEFLOCALEFILTER DEFLOCALEFILTER1(PROJECTROOT) "/bin/luit"
-
-#endif /* included_main_h */
diff --git a/nx-X11/programs/xterm/make.com b/nx-X11/programs/xterm/make.com
deleted file mode 100644
index d2b662bd0..000000000
--- a/nx-X11/programs/xterm/make.com
+++ /dev/null
@@ -1,90 +0,0 @@
-$! make.com
-$! 25-JAN-2000, David Mathog
-$! builds xaw3d, xmu, and then xterm.
-$!
-$! $XFree86: xc/programs/xterm/make.com,v 1.1 2000/02/08 17:19:37 dawes Exp $
-$!
-$!************************************************************
-$!
-$! set up logicals for XAW, XMU and so forth
-$!
-$ define x11_directory decw$include
-$ thisfile = f$environment("PROCEDURE")
-$ thisis = f$parse(thisfile,,,"DEVICE") + f$parse(thisfile,,,"DIRECTORY")
-$ thisis = thisis - "]"
-$ define xaw_directory "''thisis'.lib.xaw3d]"
-$ define xmu_directory "''thisis'.lib.xmu]"
-$ define bitmap_directory "''thisis'.lib.bitmaps]"
-$ define/trans=(concealed) thisX11 "''thisis.lib.]"
-$ define X11 thisx11,decw$include
-$!
-$! note, ansi doesn't work with this variant of X11R5.
-$!
-$! don't build libs in debug mode
-$ if(P1 .eqs. "" .AND. P2 .eqs. "")
-$ then
-$!
-$! build XMU
-$!
-$ set ver
-$ set def [.lib.xmu]
-$ @make
-$!
-$! build XAW3D
-$!
-$ set def [-.xaw3d]
-$ @make
-$ set def [--]
-$ set nover
-$!
-$! move the two libraries to this level
-$!
-$ rename [.lib...]*.olb []
-$ endif
-$!
-$ if(P1 .nes. "")
-$ then
-$ ccstub := cc/standard=vaxc/include=[]/debug/noopt
-$ mylink :== link/debug
-$ else
-$ ccstub := cc/standard=vaxc/include=[]
-$ mylink :== link
-$ endif
-$ mycc :== 'ccstub' -
-/define=(VMS,OPT_TEK4014,ALLOWLOGGING,OPT_NUM_LOCK)
-$!
-$! OPT_TOOLBAR doesn't work - it pulls in calls through Xaw3d and Xmu for
-$! XSHAPECOMBINEMASK and XSHAPEQUERYEXTENSION
-$! which seem not to exist in DW MOtif 1.2-5
-$!
-$!
-$ set ver
-$ mycc BUTTON.C
-$ mycc CHARPROC.C
-$ mycc CHARSETS.C
-$ mycc CURSOR.C
-$ mycc DATA.C
-$ mycc DOUBLECHR.C
-$ mycc FONTUTILS.C
-$ mycc INPUT.C
-$ mycc KEYSYM2UCS.C
-$ mycc MAIN.C
-$ mycc MENU.C
-$ mycc MISC.C
-$ mycc PRINT.C
-$ mycc PTYDATA.C
-$! mycc RESIZE.C
-$ mycc SCREEN.C
-$ mycc SCROLLBAR.C
-$ mycc TABS.C
-$ mycc TEKPROC.C
-$ mycc TEKPRSTBL.C
-$ mycc TRACE.C
-$ mycc TTYSVR.C
-$ mycc UTIL.C
-$ mycc VMS.C
-$ mycc VTPRSTBL.C
-$!
-$ mylink/exe=xterm.exe xterm_axp.opt/option
-$ set nover
-$ exit
diff --git a/nx-X11/programs/xterm/menu.c b/nx-X11/programs/xterm/menu.c
deleted file mode 100644
index 4f451d660..000000000
--- a/nx-X11/programs/xterm/menu.c
+++ /dev/null
@@ -1,2959 +0,0 @@
-/* $XTermId: menu.c,v 1.191 2005/11/13 23:10:36 tom Exp $ */
-
-/* $Xorg: menu.c,v 1.4 2001/02/09 02:06:03 xorgcvs Exp $ */
-/*
-
-Copyright 1999-2004,2005 by Thomas E. Dickey
-
- All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and its
-documentation for any purpose and without fee is hereby granted,
-provided that the above copyright notice appear in all copies and that
-both that copyright notice and this permission notice appear in
-supporting documentation, and that the name of the above listed
-copyright holder(s) not be used in advertising or publicity pertaining
-to distribution of the software without specific, written prior
-permission.
-
-THE ABOVE LISTED COPYRIGHT HOLDER(S) DISCLAIM ALL WARRANTIES WITH REGARD
-TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
-AND FITNESS, IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE
-LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
-ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
-OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-
-Copyright 1989 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-
-*/
-/* $XFree86: xc/programs/xterm/menu.c,v 3.64 2005/11/13 23:10:36 dickey Exp $ */
-
-#include <xterm.h>
-#include <data.h>
-#include <menu.h>
-#include <fontutils.h>
-
-#include <X11/Xmu/CharSet.h>
-
-#define app_con Xaw_app_con /* quiet a warning from SimpleMenu.h */
-
-#if defined(HAVE_LIB_XAW)
-
-#include <X11/Xaw/SimpleMenu.h>
-#include <X11/Xaw/Box.h>
-#include <X11/Xaw/SmeBSB.h>
-#include <X11/Xaw/SmeLine.h>
-
-#if OPT_TOOLBAR
-#include <X11/Xaw/MenuButton.h>
-#include <X11/Xaw/Form.h>
-#endif
-
-#elif defined(HAVE_LIB_XAW3D)
-
-#include <X11/Xaw3d/SimpleMenu.h>
-#include <X11/Xaw3d/Box.h>
-#include <X11/Xaw3d/SmeBSB.h>
-#include <X11/Xaw3d/SmeLine.h>
-
-#if OPT_TOOLBAR
-#include <X11/Xaw3d/MenuButton.h>
-#include <X11/Xaw3d/Form.h>
-#endif
-
-#elif defined(HAVE_LIB_NEXTAW)
-
-#include <X11/neXtaw/SimpleMenu.h>
-#include <X11/neXtaw/Box.h>
-#include <X11/neXtaw/SmeBSB.h>
-#include <X11/neXtaw/SmeLine.h>
-
-#if OPT_TOOLBAR
-#include <X11/neXtaw/MenuButton.h>
-#include <X11/neXtaw/Form.h>
-#endif
-
-#elif defined(HAVE_LIB_XAWPLUS)
-
-#include <X11/XawPlus/SimpleMenu.h>
-#include <X11/XawPlus/Box.h>
-#include <X11/XawPlus/SmeBSB.h>
-#include <X11/XawPlus/SmeLine.h>
-
-#if OPT_TOOLBAR
-#include <X11/XawPlus/MenuButton.h>
-#include <X11/XawPlus/Form.h>
-#endif
-
-#endif
-
-#undef app_con
-
-#include <stdio.h>
-#include <signal.h>
-/* *INDENT-OFF* */
-static void do_8bit_control PROTO_XT_CALLBACK_ARGS;
-static void do_allow132 PROTO_XT_CALLBACK_ARGS;
-static void do_allowsends PROTO_XT_CALLBACK_ARGS;
-static void do_altscreen PROTO_XT_CALLBACK_ARGS;
-static void do_appcursor PROTO_XT_CALLBACK_ARGS;
-static void do_appkeypad PROTO_XT_CALLBACK_ARGS;
-static void do_autolinefeed PROTO_XT_CALLBACK_ARGS;
-static void do_autowrap PROTO_XT_CALLBACK_ARGS;
-static void do_backarrow PROTO_XT_CALLBACK_ARGS;
-static void do_clearsavedlines PROTO_XT_CALLBACK_ARGS;
-static void do_continue PROTO_XT_CALLBACK_ARGS;
-static void do_cursesemul PROTO_XT_CALLBACK_ARGS;
-static void do_delete_del PROTO_XT_CALLBACK_ARGS;
-static void do_hardreset PROTO_XT_CALLBACK_ARGS;
-static void do_interrupt PROTO_XT_CALLBACK_ARGS;
-static void do_jumpscroll PROTO_XT_CALLBACK_ARGS;
-static void do_kill PROTO_XT_CALLBACK_ARGS;
-static void do_marginbell PROTO_XT_CALLBACK_ARGS;
-static void do_old_fkeys PROTO_XT_CALLBACK_ARGS;
-static void do_print PROTO_XT_CALLBACK_ARGS;
-static void do_print_redir PROTO_XT_CALLBACK_ARGS;
-static void do_quit PROTO_XT_CALLBACK_ARGS;
-static void do_redraw PROTO_XT_CALLBACK_ARGS;
-static void do_reversevideo PROTO_XT_CALLBACK_ARGS;
-static void do_reversewrap PROTO_XT_CALLBACK_ARGS;
-static void do_scrollbar PROTO_XT_CALLBACK_ARGS;
-static void do_scrollkey PROTO_XT_CALLBACK_ARGS;
-static void do_scrollttyoutput PROTO_XT_CALLBACK_ARGS;
-static void do_securekbd PROTO_XT_CALLBACK_ARGS;
-static void do_softreset PROTO_XT_CALLBACK_ARGS;
-static void do_sun_fkeys PROTO_XT_CALLBACK_ARGS;
-static void do_suspend PROTO_XT_CALLBACK_ARGS;
-static void do_terminate PROTO_XT_CALLBACK_ARGS;
-static void do_titeInhibit PROTO_XT_CALLBACK_ARGS;
-static void do_visualbell PROTO_XT_CALLBACK_ARGS;
-static void do_poponbell PROTO_XT_CALLBACK_ARGS;
-static void do_vtfont PROTO_XT_CALLBACK_ARGS;
-
-#ifdef ALLOWLOGGING
-static void do_logging PROTO_XT_CALLBACK_ARGS;
-#endif
-
-#ifndef NO_ACTIVE_ICON
-static void do_activeicon PROTO_XT_CALLBACK_ARGS;
-#endif /* NO_ACTIVE_ICON */
-
-#if OPT_BLINK_CURS
-static void do_cursorblink PROTO_XT_CALLBACK_ARGS;
-#endif
-
-#if OPT_BOX_CHARS
-static void do_font_boxchars PROTO_XT_CALLBACK_ARGS;
-#endif
-
-#if OPT_DEC_CHRSET
-static void do_font_doublesize PROTO_XT_CALLBACK_ARGS;
-#endif
-
-#if OPT_DEC_SOFTFONT
-static void do_font_loadable PROTO_XT_CALLBACK_ARGS;
-#endif
-
-#if OPT_HP_FUNC_KEYS
-static void do_hp_fkeys PROTO_XT_CALLBACK_ARGS;
-#endif
-
-#if OPT_NUM_LOCK
-static void do_alt_esc PROTO_XT_CALLBACK_ARGS;
-static void do_num_lock PROTO_XT_CALLBACK_ARGS;
-static void do_meta_esc PROTO_XT_CALLBACK_ARGS;
-#endif
-
-#if OPT_RENDERFONT
-static void do_font_renderfont PROTO_XT_CALLBACK_ARGS;
-#endif
-
-#if OPT_SCO_FUNC_KEYS
-static void do_sco_fkeys PROTO_XT_CALLBACK_ARGS;
-#endif
-
-#if OPT_SUNPC_KBD
-static void do_sun_kbd PROTO_XT_CALLBACK_ARGS;
-#endif
-
-#if OPT_TEK4014
-static void do_tekcopy PROTO_XT_CALLBACK_ARGS;
-static void do_tekhide PROTO_XT_CALLBACK_ARGS;
-static void do_tekmode PROTO_XT_CALLBACK_ARGS;
-static void do_tekonoff PROTO_XT_CALLBACK_ARGS;
-static void do_tekpage PROTO_XT_CALLBACK_ARGS;
-static void do_tekreset PROTO_XT_CALLBACK_ARGS;
-static void do_tekshow PROTO_XT_CALLBACK_ARGS;
-static void do_tektext2 PROTO_XT_CALLBACK_ARGS;
-static void do_tektext3 PROTO_XT_CALLBACK_ARGS;
-static void do_tektextlarge PROTO_XT_CALLBACK_ARGS;
-static void do_tektextsmall PROTO_XT_CALLBACK_ARGS;
-static void do_vthide PROTO_XT_CALLBACK_ARGS;
-static void do_vtmode PROTO_XT_CALLBACK_ARGS;
-static void do_vtonoff PROTO_XT_CALLBACK_ARGS;
-static void do_vtshow PROTO_XT_CALLBACK_ARGS;
-static void handle_tekshow (Widget gw, Bool allowswitch);
-static void handle_vtshow (Widget gw, Bool allowswitch);
-#endif
-
-#if OPT_TOOLBAR
-static void do_toolbar PROTO_XT_CALLBACK_ARGS;
-#endif
-
-#if OPT_WIDE_CHARS
-static void do_font_utf8_mode PROTO_XT_CALLBACK_ARGS;
-#endif
-
-/*
- * The order of entries MUST match the values given in menu.h
- */
-MenuEntry mainMenuEntries[] = {
-#if OPT_TOOLBAR
- { "toolbar", do_toolbar, NULL },
-#endif
- { "securekbd", do_securekbd, NULL },
- { "allowsends", do_allowsends, NULL },
- { "redraw", do_redraw, NULL },
- { "line1", NULL, NULL },
-#ifdef ALLOWLOGGING
- { "logging", do_logging, NULL },
-#endif
- { "print", do_print, NULL },
- { "print-redirect", do_print_redir, NULL },
- { "line2", NULL, NULL },
- { "8-bit control", do_8bit_control,NULL },
- { "backarrow key", do_backarrow, NULL },
-#if OPT_NUM_LOCK
- { "num-lock", do_num_lock, NULL },
- { "alt-esc", do_alt_esc, NULL },
- { "meta-esc", do_meta_esc, NULL },
-#endif
- { "delete-is-del", do_delete_del, NULL },
- { "oldFunctionKeys",do_old_fkeys, NULL },
-#if OPT_HP_FUNC_KEYS
- { "hpFunctionKeys", do_hp_fkeys, NULL },
-#endif
-#if OPT_SCO_FUNC_KEYS
- { "scoFunctionKeys",do_sco_fkeys, NULL },
-#endif
- { "sunFunctionKeys",do_sun_fkeys, NULL },
-#if OPT_SUNPC_KBD
- { "sunKeyboard", do_sun_kbd, NULL },
-#endif
- { "line3", NULL, NULL },
- { "suspend", do_suspend, NULL },
- { "continue", do_continue, NULL },
- { "interrupt", do_interrupt, NULL },
- { "hangup", do_hangup, NULL },
- { "terminate", do_terminate, NULL },
- { "kill", do_kill, NULL },
- { "line4", NULL, NULL },
- { "quit", do_quit, NULL }};
-
-MenuEntry vtMenuEntries[] = {
- { "scrollbar", do_scrollbar, NULL },
- { "jumpscroll", do_jumpscroll, NULL },
- { "reversevideo", do_reversevideo, NULL },
- { "autowrap", do_autowrap, NULL },
- { "reversewrap", do_reversewrap, NULL },
- { "autolinefeed", do_autolinefeed, NULL },
- { "appcursor", do_appcursor, NULL },
- { "appkeypad", do_appkeypad, NULL },
- { "scrollkey", do_scrollkey, NULL },
- { "scrollttyoutput",do_scrollttyoutput, NULL },
- { "allow132", do_allow132, NULL },
- { "cursesemul", do_cursesemul, NULL },
- { "visualbell", do_visualbell, NULL },
- { "poponbell", do_poponbell, NULL },
- { "marginbell", do_marginbell, NULL },
-#if OPT_BLINK_CURS
- { "cursorblink", do_cursorblink, NULL },
-#endif
- { "titeInhibit", do_titeInhibit, NULL },
-#ifndef NO_ACTIVE_ICON
- { "activeicon", do_activeicon, NULL },
-#endif /* NO_ACTIVE_ICON */
- { "line1", NULL, NULL },
- { "softreset", do_softreset, NULL },
- { "hardreset", do_hardreset, NULL },
- { "clearsavedlines",do_clearsavedlines, NULL },
- { "line2", NULL, NULL },
-#if OPT_TEK4014
- { "tekshow", do_tekshow, NULL },
- { "tekmode", do_tekmode, NULL },
- { "vthide", do_vthide, NULL },
-#endif
- { "altscreen", do_altscreen, NULL },
- };
-
-MenuEntry fontMenuEntries[] = {
- { "fontdefault", do_vtfont, NULL },
- { "font1", do_vtfont, NULL },
- { "font2", do_vtfont, NULL },
- { "font3", do_vtfont, NULL },
- { "font4", do_vtfont, NULL },
- { "font5", do_vtfont, NULL },
- { "font6", do_vtfont, NULL },
- /* this is after the last builtin font; the other entries are special */
- { "fontescape", do_vtfont, NULL },
- { "fontsel", do_vtfont, NULL },
- /* down to here should match NMENUFONTS in ptyx.h */
-
-#if OPT_DEC_CHRSET || OPT_BOX_CHARS || OPT_DEC_SOFTFONT
- { "line1", NULL, NULL },
-#if OPT_BOX_CHARS
- { "font-linedrawing",do_font_boxchars,NULL },
-#endif
-#if OPT_DEC_CHRSET
- { "font-doublesize",do_font_doublesize,NULL },
-#endif
-#if OPT_DEC_SOFTFONT
- { "font-loadable", do_font_loadable,NULL },
-#endif
-#endif /* toggles for DEC font extensions */
-
-#if OPT_RENDERFONT || OPT_WIDE_CHARS
- { "line2", NULL, NULL },
-#if OPT_RENDERFONT
- { "render-font", do_font_renderfont,NULL },
-#endif
-#if OPT_WIDE_CHARS
- { "utf8-mode", do_font_utf8_mode,NULL },
-#endif
-#endif /* toggles for other font extensions */
-
- };
-
-#if OPT_TEK4014
-MenuEntry tekMenuEntries[] = {
- { "tektextlarge", do_tektextlarge, NULL },
- { "tektext2", do_tektext2, NULL },
- { "tektext3", do_tektext3, NULL },
- { "tektextsmall", do_tektextsmall, NULL },
- { "line1", NULL, NULL },
- { "tekpage", do_tekpage, NULL },
- { "tekreset", do_tekreset, NULL },
- { "tekcopy", do_tekcopy, NULL },
- { "line2", NULL, NULL },
- { "vtshow", do_vtshow, NULL },
- { "vtmode", do_vtmode, NULL },
- { "tekhide", do_tekhide, NULL }};
-#endif
-
-typedef struct {
- char *internal_name;
- MenuEntry *entry_list;
- Cardinal entry_len;
-} MenuHeader;
-
- /* This table is ordered to correspond with MenuIndex */
-static MenuHeader menu_names[] = {
- { "mainMenu", mainMenuEntries, XtNumber(mainMenuEntries) },
- { "vtMenu", vtMenuEntries, XtNumber(vtMenuEntries) },
- { "fontMenu", fontMenuEntries, XtNumber(fontMenuEntries) },
-#if OPT_TEK4014
- { "tekMenu", tekMenuEntries, XtNumber(tekMenuEntries) },
-#endif
- { 0, 0, 0 },
-};
-/* *INDENT-ON* */
-
-/*
- * FIXME: These are global data rather than in the xterm widget because they
- * are initialized before the widget is created.
- */
-typedef struct {
- Widget b; /* the toolbar's buttons */
- Widget w; /* the popup shell activated by the button */
- Cardinal entries;
-} MenuList;
-
-static MenuList vt_shell[NUM_POPUP_MENUS];
-
-#if OPT_TEK4014 && OPT_TOOLBAR
-static MenuList tek_shell[NUM_POPUP_MENUS];
-#endif
-
-/*
- * Returns a pointer to the MenuList entry that matches the popup menu.
- */
-static MenuList *
-select_menu(Widget w GCC_UNUSED, MenuIndex num)
-{
-#if OPT_TEK4014 && OPT_TOOLBAR
- while (w != 0) {
- if (w == tekshellwidget) {
- return &tek_shell[num];
- }
- w = XtParent(w);
- }
-#endif
- return &vt_shell[num];
-}
-
-/*
- * Returns a pointer to the given popup menu shell
- */
-static Widget
-obtain_menu(Widget w, MenuIndex num)
-{
- return select_menu(w, num)->w;
-}
-
-/*
- * Returns the number of entries in the given popup menu shell
- */
-static Cardinal
-sizeof_menu(Widget w, MenuIndex num)
-{
- return select_menu(w, num)->entries;
-}
-
-/*
- * create_menu - create a popup shell and stuff the menu into it.
- */
-
-static Widget
-create_menu(Widget w, XtermWidget xtw, MenuIndex num)
-{
- static XtCallbackRec cb[2] =
- {
- {NULL, NULL},
- {NULL, NULL}};
- static Arg arg =
- {XtNcallback, (XtArgVal) cb};
-
- Widget m;
- TScreen *screen = &xtw->screen;
- MenuHeader *data = &menu_names[num];
- MenuList *list = select_menu(w, num);
- struct _MenuEntry *entries = data->entry_list;
- int nentries = data->entry_len;
-
- if (screen->menu_item_bitmap == None) {
- /*
- * we really want to do these dynamically
- */
-#define check_width 9
-#define check_height 8
- static unsigned char check_bits[] =
- {
- 0x00, 0x01, 0x80, 0x01, 0xc0, 0x00, 0x60, 0x00,
- 0x31, 0x00, 0x1b, 0x00, 0x0e, 0x00, 0x04, 0x00
- };
-
- screen->menu_item_bitmap =
- XCreateBitmapFromData(XtDisplay(xtw),
- RootWindowOfScreen(XtScreen(xtw)),
- (char *) check_bits, check_width, check_height);
- }
-#if OPT_TOOLBAR
- m = list->w;
- if (m == 0) {
- return m;
- }
-#else
- m = XtCreatePopupShell(data->internal_name,
- simpleMenuWidgetClass,
- toplevel,
- NULL, 0);
- list->w = m;
-#endif
- list->entries = nentries;
-
- for (; nentries > 0; nentries--, entries++) {
- cb[0].callback = (XtCallbackProc) entries->function;
- cb[0].closure = (caddr_t) entries->name;
- entries->widget = XtCreateManagedWidget(entries->name,
- (entries->function ?
- smeBSBObjectClass :
- smeLineObjectClass), m,
- &arg, (Cardinal) 1);
- }
-
- /* do not realize at this point */
- return m;
-}
-
-static MenuIndex
-indexOfMenu(String menuName)
-{
- MenuIndex me;
- switch (*menuName) {
- case 'm':
- me = mainMenu;
- break;
- case 'v':
- me = vtMenu;
- break;
- case 'f':
- me = fontMenu;
- break;
-#if OPT_TEK4014
- case 't':
- me = tekMenu;
- break;
-#endif
- default:
- me = noMenu;
- }
- return (me);
-}
-
-/*
- * public interfaces
- */
-
-/* ARGSUSED */
-static Bool
-domenu(Widget w GCC_UNUSED,
- XEvent * event GCC_UNUSED,
- String * params, /* mainMenu, vtMenu, or tekMenu */
- Cardinal *param_count) /* 0 or 1 */
-{
- TScreen *screen = &term->screen;
- MenuIndex me;
- Bool created = False;
- Widget mw;
-
- if (*param_count != 1) {
- Bell(XkbBI_MinorError, 0);
- return False;
- }
-
- if ((me = indexOfMenu(params[0])) == noMenu) {
- Bell(XkbBI_MinorError, 0);
- return False;
- }
-
- if ((mw = obtain_menu(w, me)) == 0
- || sizeof_menu(w, me) == 0) {
- mw = create_menu(w, term, me);
- created = (mw != 0);
- }
- if (mw == 0)
- return False;
-
- TRACE(("domenu(%s) %s\n", params[0], created ? "create" : "update"));
- switch (me) {
- case mainMenu:
- if (created) {
- update_toolbar();
- update_securekbd();
- update_allowsends();
- update_logging();
- update_print_redir();
- update_8bit_control();
- update_decbkm();
- update_num_lock();
- update_alt_esc();
- update_meta_esc();
- update_delete_del();
- update_keyboard_type();
- if (!xtermHasPrinter()) {
- set_sensitivity(mw,
- mainMenuEntries[mainMenu_print].widget,
- False);
- set_sensitivity(mw,
- mainMenuEntries[mainMenu_print_redir].widget,
- False);
- }
- if (screen->terminal_id < 200) {
- set_sensitivity(mw,
- mainMenuEntries[mainMenu_8bit_ctrl].widget,
- False);
- }
-#if !defined(SIGTSTP)
- set_sensitivity(mw,
- mainMenuEntries[mainMenu_suspend].widget, False);
-#endif
-#if !defined(SIGCONT)
- set_sensitivity(mw,
- mainMenuEntries[mainMenu_continue].widget, False);
-#endif
-#ifdef ALLOWLOGGING
- if (screen->inhibit & I_LOG) {
- set_sensitivity(mw,
- mainMenuEntries[mainMenu_logging].widget, False);
- }
-#endif
- if (screen->inhibit & I_SIGNAL) {
- int n;
- for (n = (int) mainMenu_suspend; n <= (int) mainMenu_quit; ++n) {
- set_sensitivity(mw, mainMenuEntries[n].widget, False);
- }
- }
- }
- break;
-
- case vtMenu:
- if (created) {
- update_scrollbar();
- update_jumpscroll();
- update_reversevideo();
- update_autowrap();
- update_reversewrap();
- update_autolinefeed();
- update_appcursor();
- update_appkeypad();
- update_scrollkey();
- update_scrollttyoutput();
- update_allow132();
- update_cursesemul();
- update_visualbell();
- update_poponbell();
- update_marginbell();
- update_cursorblink();
- update_altscreen();
- update_titeInhibit();
-#ifndef NO_ACTIVE_ICON
- if (!screen->fnt_icon || !screen->iconVwin.window) {
- set_sensitivity(mw,
- vtMenuEntries[vtMenu_activeicon].widget,
- False);
- } else
- update_activeicon();
-#endif /* NO_ACTIVE_ICON */
-#if OPT_TEK4014
- if (screen->inhibit & I_TEK) {
- int n;
- for (n = (int) vtMenu_tekshow; n <= (int) vtMenu_vthide; ++n) {
- set_sensitivity(mw, vtMenuEntries[n].widget, False);
- }
- }
-#endif
- }
- break;
-
- case fontMenu:
- if (created) {
- set_menu_font(True);
- set_sensitivity(mw,
- fontMenuEntries[fontMenu_fontescape].widget,
- (screen->menu_font_names[fontMenu_fontescape]
- ? True : False));
-#if OPT_BOX_CHARS
- update_font_boxchars();
- set_sensitivity(mw,
- fontMenuEntries[fontMenu_font_boxchars].widget,
- True);
-#endif
-#if OPT_DEC_SOFTFONT /* FIXME: not implemented */
- update_font_loadable();
- set_sensitivity(mw,
- fontMenuEntries[fontMenu_font_loadable].widget,
- False);
-#endif
-#if OPT_DEC_CHRSET
- update_font_doublesize();
- if (term->screen.cache_doublesize == 0)
- set_sensitivity(mw,
- fontMenuEntries[fontMenu_font_doublesize].widget,
- False);
-#endif
-#if OPT_RENDERFONT
- update_font_renderfont();
- if (term->misc.face_name == 0) {
- set_sensitivity(mw,
- fontMenuEntries[fontMenu_render_font].widget,
- False);
- }
-#endif
-#if OPT_WIDE_CHARS
- update_font_utf8_mode();
-#endif
- }
- FindFontSelection(NULL, True);
- set_sensitivity(mw,
- fontMenuEntries[fontMenu_fontsel].widget,
- (screen->menu_font_names[fontMenu_fontsel]
- ? True : False));
- break;
-
-#if OPT_TEK4014
- case tekMenu:
- if (created) {
- set_tekfont_menu_item(screen->cur.fontsize, True);
- update_vtshow();
- }
- break;
-#endif
- default:
- break;
- }
-
- return True;
-}
-
-void
-HandleCreateMenu(Widget w,
- XEvent * event,
- String * params, /* mainMenu, vtMenu, or tekMenu */
- Cardinal *param_count) /* 0 or 1 */
-{
- TRACE(("HandleCreateMenu\n"));
- (void) domenu(w, event, params, param_count);
-}
-
-void
-HandlePopupMenu(Widget w,
- XEvent * event,
- String * params, /* mainMenu, vtMenu, or tekMenu */
- Cardinal *param_count) /* 0 or 1 */
-{
- TRACE(("HandlePopupMenu\n"));
- if (domenu(w, event, params, param_count)) {
-#if OPT_TOOLBAR
- w = select_menu(w, mainMenu)->w;
-#endif
- XtCallActionProc(w, "XawPositionSimpleMenu", event, params, 1);
- XtCallActionProc(w, "MenuPopup", event, params, 1);
- }
-}
-
-/*
- * private interfaces - keep out!
- */
-
-/* ARGSUSED */
-static void
-handle_send_signal(Widget gw GCC_UNUSED, int sig)
-{
-#ifndef VMS
- TScreen *screen = &term->screen;
-
- if (hold_screen > 1)
- hold_screen = 0;
- if (screen->pid > 1)
- kill_process_group(screen->pid, sig);
-#endif
-}
-
-/*
- * action routines
- */
-
-/* ARGSUSED */
-void
-DoSecureKeyboard(Time tp GCC_UNUSED)
-{
- do_securekbd(vt_shell[mainMenu].w, (XtPointer) 0, (XtPointer) 0);
-}
-
-static void
-do_securekbd(Widget gw GCC_UNUSED,
- XtPointer closure GCC_UNUSED,
- XtPointer data GCC_UNUSED)
-{
- TScreen *screen = &term->screen;
- Time now = CurrentTime; /* XXX - wrong */
-
- if (screen->grabbedKbd) {
- XUngrabKeyboard(screen->display, now);
- ReverseVideo(term);
- screen->grabbedKbd = False;
- } else {
- if (XGrabKeyboard(screen->display, XtWindow(CURRENT_EMU(screen)),
- True, GrabModeAsync, GrabModeAsync, now)
- != GrabSuccess) {
- Bell(XkbBI_MinorError, 100);
- } else {
- ReverseVideo(term);
- screen->grabbedKbd = True;
- }
- }
- update_securekbd();
-}
-
-static void
-do_allowsends(Widget gw GCC_UNUSED,
- XtPointer closure GCC_UNUSED,
- XtPointer data GCC_UNUSED)
-{
- TScreen *screen = &term->screen;
-
- screen->allowSendEvents = !screen->allowSendEvents;
- update_allowsends();
-}
-
-static void
-do_visualbell(Widget gw GCC_UNUSED,
- XtPointer closure GCC_UNUSED,
- XtPointer data GCC_UNUSED)
-{
- TScreen *screen = &term->screen;
-
- screen->visualbell = !screen->visualbell;
- update_visualbell();
-}
-
-static void
-do_poponbell(Widget gw GCC_UNUSED,
- XtPointer closure GCC_UNUSED,
- XtPointer data GCC_UNUSED)
-{
- TScreen *screen = &term->screen;
-
- screen->poponbell = !screen->poponbell;
- update_poponbell();
-}
-
-#ifdef ALLOWLOGGING
-static void
-do_logging(Widget gw GCC_UNUSED,
- XtPointer closure GCC_UNUSED,
- XtPointer data GCC_UNUSED)
-{
- TScreen *screen = &term->screen;
-
- if (screen->logging) {
- CloseLog(screen);
- } else {
- StartLog(screen);
- }
- /* update_logging done by CloseLog and StartLog */
-}
-#endif
-
-static void
-do_print(Widget gw GCC_UNUSED,
- XtPointer closure GCC_UNUSED,
- XtPointer data GCC_UNUSED)
-{
- xtermPrintScreen(True);
-}
-
-static void
-do_print_redir(Widget gw GCC_UNUSED,
- XtPointer closure GCC_UNUSED,
- XtPointer data GCC_UNUSED)
-{
- setPrinterControlMode(term->screen.printer_controlmode ? 0 : 2);
-}
-
-static void
-do_redraw(Widget gw GCC_UNUSED,
- XtPointer closure GCC_UNUSED,
- XtPointer data GCC_UNUSED)
-{
- Redraw();
-}
-
-void
-show_8bit_control(Bool value)
-{
- if (term->screen.control_eight_bits != value) {
- term->screen.control_eight_bits = value;
- update_8bit_control();
- }
-}
-
-static void
-do_8bit_control(Widget gw GCC_UNUSED,
- XtPointer closure GCC_UNUSED,
- XtPointer data GCC_UNUSED)
-{
- show_8bit_control(!term->screen.control_eight_bits);
-}
-
-static void
-do_backarrow(Widget gw GCC_UNUSED,
- XtPointer closure GCC_UNUSED,
- XtPointer data GCC_UNUSED)
-{
- term->keyboard.flags ^= MODE_DECBKM;
- update_decbkm();
-}
-
-#if OPT_NUM_LOCK
-static void
-do_num_lock(Widget gw GCC_UNUSED,
- XtPointer closure GCC_UNUSED,
- XtPointer data GCC_UNUSED)
-{
- term->misc.real_NumLock = !term->misc.real_NumLock;
- update_num_lock();
-}
-
-static void
-do_alt_esc(Widget gw GCC_UNUSED,
- XtPointer closure GCC_UNUSED,
- XtPointer data GCC_UNUSED)
-{
- term->screen.input_eight_bits = !term->screen.input_eight_bits;
- update_alt_esc();
-}
-
-static void
-do_meta_esc(Widget gw GCC_UNUSED,
- XtPointer closure GCC_UNUSED,
- XtPointer data GCC_UNUSED)
-{
- term->screen.meta_sends_esc = !term->screen.meta_sends_esc;
- update_meta_esc();
-}
-#endif
-
-static void
-do_delete_del(Widget gw GCC_UNUSED,
- XtPointer closure GCC_UNUSED,
- XtPointer data GCC_UNUSED)
-{
- if (xtermDeleteIsDEL())
- term->screen.delete_is_del = False;
- else
- term->screen.delete_is_del = True;
- update_delete_del();
-}
-
-static void
-do_old_fkeys(Widget gw GCC_UNUSED,
- XtPointer closure GCC_UNUSED,
- XtPointer data GCC_UNUSED)
-{
- toggle_keyboard_type(keyboardIsLegacy);
-}
-
-#if OPT_HP_FUNC_KEYS
-static void
-do_hp_fkeys(Widget gw GCC_UNUSED,
- XtPointer closure GCC_UNUSED,
- XtPointer data GCC_UNUSED)
-{
- toggle_keyboard_type(keyboardIsHP);
-}
-#endif
-
-#if OPT_SCO_FUNC_KEYS
-static void
-do_sco_fkeys(Widget gw GCC_UNUSED,
- XtPointer closure GCC_UNUSED,
- XtPointer data GCC_UNUSED)
-{
- toggle_keyboard_type(keyboardIsSCO);
-}
-#endif
-
-static void
-do_sun_fkeys(Widget gw GCC_UNUSED,
- XtPointer closure GCC_UNUSED,
- XtPointer data GCC_UNUSED)
-{
- toggle_keyboard_type(keyboardIsSun);
-}
-
-#if OPT_SUNPC_KBD
-/*
- * This really means "Sun/PC keyboard emulating VT220".
- */
-static void
-do_sun_kbd(Widget gw GCC_UNUSED,
- XtPointer closure GCC_UNUSED,
- XtPointer data GCC_UNUSED)
-{
- toggle_keyboard_type(keyboardIsVT220);
-}
-#endif
-
-/*
- * The following cases use the pid instead of the process group so that we
- * don't get hosed by programs that change their process group
- */
-
-/* ARGSUSED */
-static void
-do_suspend(Widget gw,
- XtPointer closure GCC_UNUSED,
- XtPointer data GCC_UNUSED)
-{
-#if defined(SIGTSTP)
- handle_send_signal(gw, SIGTSTP);
-#endif
-}
-
-/* ARGSUSED */
-static void
-do_continue(Widget gw,
- XtPointer closure GCC_UNUSED,
- XtPointer data GCC_UNUSED)
-{
-#if defined(SIGCONT)
- handle_send_signal(gw, SIGCONT);
-#endif
-}
-
-/* ARGSUSED */
-static void
-do_interrupt(Widget gw,
- XtPointer closure GCC_UNUSED,
- XtPointer data GCC_UNUSED)
-{
- handle_send_signal(gw, SIGINT);
-}
-
-/* ARGSUSED */
-void
-do_hangup(Widget gw,
- XtPointer closure GCC_UNUSED,
- XtPointer data GCC_UNUSED)
-{
- handle_send_signal(gw, SIGHUP);
-}
-
-/* ARGSUSED */
-static void
-do_terminate(Widget gw,
- XtPointer closure GCC_UNUSED,
- XtPointer data GCC_UNUSED)
-{
- handle_send_signal(gw, SIGTERM);
-}
-
-/* ARGSUSED */
-static void
-do_kill(Widget gw,
- XtPointer closure GCC_UNUSED,
- XtPointer data GCC_UNUSED)
-{
- handle_send_signal(gw, SIGKILL);
-}
-
-static void
-do_quit(Widget gw GCC_UNUSED,
- XtPointer closure GCC_UNUSED,
- XtPointer data GCC_UNUSED)
-{
- Cleanup(0);
-}
-
-/*
- * vt menu callbacks
- */
-
-static void
-do_scrollbar(Widget gw GCC_UNUSED,
- XtPointer closure GCC_UNUSED,
- XtPointer data GCC_UNUSED)
-{
- ToggleScrollBar(term);
-}
-
-static void
-do_jumpscroll(Widget gw GCC_UNUSED,
- XtPointer closure GCC_UNUSED,
- XtPointer data GCC_UNUSED)
-{
- TScreen *screen = &term->screen;
-
- term->flags ^= SMOOTHSCROLL;
- if (term->flags & SMOOTHSCROLL) {
- screen->jumpscroll = False;
- if (screen->scroll_amt)
- FlushScroll(screen);
- } else {
- screen->jumpscroll = True;
- }
- update_jumpscroll();
-}
-
-static void
-do_reversevideo(Widget gw GCC_UNUSED,
- XtPointer closure GCC_UNUSED,
- XtPointer data GCC_UNUSED)
-{
- ReverseVideo(term);
-}
-
-static void
-do_autowrap(Widget gw GCC_UNUSED,
- XtPointer closure GCC_UNUSED,
- XtPointer data GCC_UNUSED)
-{
- term->flags ^= WRAPAROUND;
- update_autowrap();
-}
-
-static void
-do_reversewrap(Widget gw GCC_UNUSED,
- XtPointer closure GCC_UNUSED,
- XtPointer data GCC_UNUSED)
-{
- term->flags ^= REVERSEWRAP;
- update_reversewrap();
-}
-
-static void
-do_autolinefeed(Widget gw GCC_UNUSED,
- XtPointer closure GCC_UNUSED,
- XtPointer data GCC_UNUSED)
-{
- term->flags ^= LINEFEED;
- update_autolinefeed();
-}
-
-static void
-do_appcursor(Widget gw GCC_UNUSED,
- XtPointer closure GCC_UNUSED,
- XtPointer data GCC_UNUSED)
-{
- term->keyboard.flags ^= MODE_DECCKM;
- update_appcursor();
-}
-
-static void
-do_appkeypad(Widget gw GCC_UNUSED,
- XtPointer closure GCC_UNUSED,
- XtPointer data GCC_UNUSED)
-{
- term->keyboard.flags ^= MODE_DECKPAM;
- update_appkeypad();
-}
-
-static void
-do_scrollkey(Widget gw GCC_UNUSED,
- XtPointer closure GCC_UNUSED,
- XtPointer data GCC_UNUSED)
-{
- TScreen *screen = &term->screen;
-
- screen->scrollkey = !screen->scrollkey;
- update_scrollkey();
-}
-
-static void
-do_scrollttyoutput(Widget gw GCC_UNUSED,
- XtPointer closure GCC_UNUSED,
- XtPointer data GCC_UNUSED)
-{
- TScreen *screen = &term->screen;
-
- screen->scrollttyoutput = !screen->scrollttyoutput;
- update_scrollttyoutput();
-}
-
-static void
-do_allow132(Widget gw GCC_UNUSED,
- XtPointer closure GCC_UNUSED,
- XtPointer data GCC_UNUSED)
-{
- TScreen *screen = &term->screen;
-
- screen->c132 = !screen->c132;
- update_allow132();
-}
-
-static void
-do_cursesemul(Widget gw GCC_UNUSED,
- XtPointer closure GCC_UNUSED,
- XtPointer data GCC_UNUSED)
-{
- TScreen *screen = &term->screen;
-
- screen->curses = !screen->curses;
- update_cursesemul();
-}
-
-static void
-do_marginbell(Widget gw GCC_UNUSED,
- XtPointer closure GCC_UNUSED,
- XtPointer data GCC_UNUSED)
-{
- TScreen *screen = &term->screen;
-
- if (!(screen->marginbell = !screen->marginbell))
- screen->bellarmed = -1;
- update_marginbell();
-}
-
-#if OPT_TEK4014
-static void
-handle_tekshow(Widget gw GCC_UNUSED, Bool allowswitch)
-{
- TScreen *screen = &term->screen;
-
- if (!screen->Tshow) { /* not showing, turn on */
- set_tek_visibility(True);
- } else if (screen->Vshow || allowswitch) { /* is showing, turn off */
- set_tek_visibility(False);
- end_tek_mode(); /* WARNING: this does a longjmp */
- } else
- Bell(XkbBI_MinorError, 0);
-}
-
-/* ARGSUSED */
-static void
-do_tekshow(Widget gw,
- XtPointer closure GCC_UNUSED,
- XtPointer data GCC_UNUSED)
-{
- handle_tekshow(gw, True);
-}
-
-/* ARGSUSED */
-static void
-do_tekonoff(Widget gw,
- XtPointer closure GCC_UNUSED,
- XtPointer data GCC_UNUSED)
-{
- handle_tekshow(gw, False);
-}
-#endif /* OPT_TEK4014 */
-
-#if OPT_BLINK_CURS
-/* ARGSUSED */
-static void
-do_cursorblink(Widget gw GCC_UNUSED,
- XtPointer closure GCC_UNUSED,
- XtPointer data GCC_UNUSED)
-{
- TScreen *screen = &term->screen;
- ToggleCursorBlink(screen);
-}
-#endif
-
-/* ARGSUSED */
-static void
-do_altscreen(Widget gw GCC_UNUSED,
- XtPointer closure GCC_UNUSED,
- XtPointer data GCC_UNUSED)
-{
- TScreen *screen = &term->screen;
- ToggleAlternate(screen);
-}
-
-/* ARGSUSED */
-static void
-do_titeInhibit(Widget gw GCC_UNUSED,
- XtPointer closure GCC_UNUSED,
- XtPointer data GCC_UNUSED)
-{
- term->misc.titeInhibit = !term->misc.titeInhibit;
- update_titeInhibit();
-}
-
-#ifndef NO_ACTIVE_ICON
-/* ARGSUSED */
-static void
-do_activeicon(Widget gw GCC_UNUSED,
- XtPointer closure GCC_UNUSED,
- XtPointer data GCC_UNUSED)
-{
- TScreen *screen = &term->screen;
-
- if (screen->iconVwin.window) {
- Widget shell = XtParent(term);
- term->misc.active_icon = !term->misc.active_icon;
- XtVaSetValues(shell, XtNiconWindow,
- term->misc.active_icon ? screen->iconVwin.window : None,
- (XtPointer) 0);
- update_activeicon();
- }
-}
-#endif /* NO_ACTIVE_ICON */
-
-static void
-do_softreset(Widget gw GCC_UNUSED,
- XtPointer closure GCC_UNUSED,
- XtPointer data GCC_UNUSED)
-{
- VTReset(False, False);
-}
-
-static void
-do_hardreset(Widget gw GCC_UNUSED,
- XtPointer closure GCC_UNUSED,
- XtPointer data GCC_UNUSED)
-{
- VTReset(True, False);
-}
-
-static void
-do_clearsavedlines(Widget gw GCC_UNUSED,
- XtPointer closure GCC_UNUSED,
- XtPointer data GCC_UNUSED)
-{
- VTReset(True, True);
-}
-
-#if OPT_TEK4014
-static void
-do_tekmode(Widget gw GCC_UNUSED,
- XtPointer closure GCC_UNUSED,
- XtPointer data GCC_UNUSED)
-{
- TScreen *screen = &term->screen;
-
- switch_modes(screen->TekEmu); /* switch to tek mode */
-}
-
-/* ARGSUSED */
-static void
-do_vthide(Widget gw GCC_UNUSED,
- XtPointer closure GCC_UNUSED,
- XtPointer data GCC_UNUSED)
-{
- hide_vt_window();
-}
-#endif /* OPT_TEK4014 */
-
-/*
- * vtfont menu
- */
-
-static void
-do_vtfont(Widget gw GCC_UNUSED,
- XtPointer closure,
- XtPointer data GCC_UNUSED)
-{
- char *entryname = (char *) closure;
- int i;
-
- for (i = 0; i < NMENUFONTS; i++) {
- if (strcmp(entryname, fontMenuEntries[i].name) == 0) {
- SetVTFont(term, i, True, NULL);
- return;
- }
- }
- Bell(XkbBI_MinorError, 0);
-}
-
-#if OPT_DEC_CHRSET
-static void
-do_font_doublesize(Widget gw GCC_UNUSED,
- XtPointer closure GCC_UNUSED,
- XtPointer data GCC_UNUSED)
-{
- if (term->screen.cache_doublesize != 0)
- term->screen.font_doublesize = !term->screen.font_doublesize;
- update_font_doublesize();
- Redraw();
-}
-#endif
-
-#if OPT_BOX_CHARS
-static void
-do_font_boxchars(Widget gw GCC_UNUSED,
- XtPointer closure GCC_UNUSED,
- XtPointer data GCC_UNUSED)
-{
- term->screen.force_box_chars = !term->screen.force_box_chars;
- update_font_boxchars();
- Redraw();
-}
-#endif
-
-#if OPT_DEC_SOFTFONT
-static void
-do_font_loadable(Widget gw GCC_UNUSED,
- XtPointer closure GCC_UNUSED,
- XtPointer data GCC_UNUSED)
-{
- term->misc.font_loadable = !term->misc.font_loadable;
- update_font_loadable();
-}
-#endif
-
-#if OPT_RENDERFONT
-static void
-do_font_renderfont(Widget gw GCC_UNUSED,
- XtPointer closure GCC_UNUSED,
- XtPointer data GCC_UNUSED)
-{
- TScreen *screen = &term->screen;
- int fontnum = screen->menu_font_number;
- String name = term->screen.MenuFontName(fontnum);
-
- term->misc.render_font = !term->misc.render_font;
- update_font_renderfont();
- xtermLoadFont(term, xtermFontName(name), True, fontnum);
- ScrnRefresh(screen, 0, 0,
- MaxRows(screen),
- MaxCols(screen), True);
-}
-#endif
-
-#if OPT_WIDE_CHARS
-static void
-do_font_utf8_mode(Widget gw GCC_UNUSED,
- XtPointer closure GCC_UNUSED,
- XtPointer data GCC_UNUSED)
-{
- TScreen *screen = &term->screen;
-
- /*
- * If xterm was started with -wc option, it might not have the wide fonts.
- * If xterm was not started with -wc, it might not have wide cells.
- */
- if (!screen->utf8_mode) {
- if (screen->wide_chars) {
- if (xtermLoadWideFonts(term, True)) {
- SetVTFont(term, screen->menu_font_number, TRUE, NULL);
- }
- } else {
- ChangeToWide(screen);
- }
- }
- switchPtyData(screen, !screen->utf8_mode);
- /*
- * We don't repaint the screen when switching UTF-8 on/off. When switching
- * on - the Latin-1 codes should paint as-is. When switching off, that's
- * hard to do properly.
- */
-}
-#endif
-
-/*
- * tek menu
- */
-
-#if OPT_TEK4014
-static void
-do_tektextlarge(Widget gw GCC_UNUSED,
- XtPointer closure GCC_UNUSED,
- XtPointer data GCC_UNUSED)
-{
- TekSetFontSize(tekMenu_tektextlarge);
-}
-
-static void
-do_tektext2(Widget gw GCC_UNUSED,
- XtPointer closure GCC_UNUSED,
- XtPointer data GCC_UNUSED)
-{
- TekSetFontSize(tekMenu_tektext2);
-}
-
-static void
-do_tektext3(Widget gw GCC_UNUSED,
- XtPointer closure GCC_UNUSED,
- XtPointer data GCC_UNUSED)
-{
- TekSetFontSize(tekMenu_tektext3);
-}
-
-static void
-do_tektextsmall(Widget gw GCC_UNUSED,
- XtPointer closure GCC_UNUSED,
- XtPointer data GCC_UNUSED)
-{
-
- TekSetFontSize(tekMenu_tektextsmall);
-}
-
-static void
-do_tekpage(Widget gw GCC_UNUSED,
- XtPointer closure GCC_UNUSED,
- XtPointer data GCC_UNUSED)
-{
- TekSimulatePageButton(False);
-}
-
-static void
-do_tekreset(Widget gw GCC_UNUSED,
- XtPointer closure GCC_UNUSED,
- XtPointer data GCC_UNUSED)
-{
- TekSimulatePageButton(True);
-}
-
-static void
-do_tekcopy(Widget gw GCC_UNUSED,
- XtPointer closure GCC_UNUSED,
- XtPointer data GCC_UNUSED)
-{
- TekCopy();
-}
-
-static void
-handle_vtshow(Widget gw GCC_UNUSED, Bool allowswitch)
-{
- TScreen *screen = &term->screen;
-
- if (!screen->Vshow) { /* not showing, turn on */
- set_vt_visibility(True);
- } else if (screen->Tshow || allowswitch) { /* is showing, turn off */
- set_vt_visibility(False);
- if (!screen->TekEmu && TekRefresh)
- dorefresh();
- end_vt_mode(); /* WARNING: this does a longjmp... */
- } else
- Bell(XkbBI_MinorError, 0);
-}
-
-static void
-do_vtshow(Widget gw,
- XtPointer closure GCC_UNUSED,
- XtPointer data GCC_UNUSED)
-{
- handle_vtshow(gw, True);
-}
-
-static void
-do_vtonoff(Widget gw,
- XtPointer closure GCC_UNUSED,
- XtPointer data GCC_UNUSED)
-{
- handle_vtshow(gw, False);
-}
-
-static void
-do_vtmode(Widget gw GCC_UNUSED,
- XtPointer closure GCC_UNUSED,
- XtPointer data GCC_UNUSED)
-{
- TScreen *screen = &term->screen;
-
- switch_modes(screen->TekEmu); /* switch to vt, or from */
-}
-
-/* ARGSUSED */
-static void
-do_tekhide(Widget gw GCC_UNUSED,
- XtPointer closure GCC_UNUSED,
- XtPointer data GCC_UNUSED)
-{
- hide_tek_window();
-}
-#endif /* OPT_TEK4014 */
-
-/*
- * public handler routines
- */
-
-static void
-handle_toggle(void (*proc) PROTO_XT_CALLBACK_ARGS,
- int var,
- String * params,
- Cardinal nparams,
- Widget w,
- XtPointer closure,
- XtPointer data)
-{
- int dir = -2;
-
- switch (nparams) {
- case 0:
- dir = -1;
- break;
- case 1:
- if (XmuCompareISOLatin1(params[0], "on") == 0)
- dir = 1;
- else if (XmuCompareISOLatin1(params[0], "off") == 0)
- dir = 0;
- else if (XmuCompareISOLatin1(params[0], "toggle") == 0)
- dir = -1;
- break;
- }
-
- switch (dir) {
- case -2:
- Bell(XkbBI_MinorError, 0);
- break;
-
- case -1:
- (*proc) (w, closure, data);
- break;
-
- case 0:
- if (var)
- (*proc) (w, closure, data);
- else
- Bell(XkbBI_MinorError, 0);
- break;
-
- case 1:
- if (!var)
- (*proc) (w, closure, data);
- else
- Bell(XkbBI_MinorError, 0);
- break;
- }
- return;
-}
-
-#define handle_vt_toggle(proc, var, params, nparams, w) \
- handle_toggle(proc, (int) (var), params, nparams, w, (XtPointer)0, (XtPointer)0)
-
-#define handle_tek_toggle(proc, var, params, nparams, w) \
- handle_toggle(proc, (int) (var), params, nparams, w, (XtPointer)0, (XtPointer)0)
-
-void
-HandleAllowSends(Widget w,
- XEvent * event GCC_UNUSED,
- String * params,
- Cardinal *param_count)
-{
- handle_vt_toggle(do_allowsends, term->screen.allowSendEvents,
- params, *param_count, w);
-}
-
-void
-HandleSetVisualBell(Widget w,
- XEvent * event GCC_UNUSED,
- String * params,
- Cardinal *param_count)
-{
- handle_vt_toggle(do_visualbell, term->screen.visualbell,
- params, *param_count, w);
-}
-
-void
-HandleSetPopOnBell(Widget w,
- XEvent * event GCC_UNUSED,
- String * params,
- Cardinal *param_count)
-{
- handle_vt_toggle(do_poponbell, term->screen.poponbell,
- params, *param_count, w);
-}
-
-#ifdef ALLOWLOGGING
-void
-HandleLogging(Widget w,
- XEvent * event GCC_UNUSED,
- String * params,
- Cardinal *param_count)
-{
- handle_vt_toggle(do_logging, term->screen.logging,
- params, *param_count, w);
-}
-#endif
-
-/* ARGSUSED */
-void
-HandlePrintScreen(Widget w,
- XEvent * event GCC_UNUSED,
- String * params GCC_UNUSED,
- Cardinal *param_count GCC_UNUSED)
-{
- do_print(w, (XtPointer) 0, (XtPointer) 0);
-}
-
-/* ARGSUSED */
-void
-HandlePrintControlMode(Widget w,
- XEvent * event GCC_UNUSED,
- String * params GCC_UNUSED,
- Cardinal *param_count GCC_UNUSED)
-{
- do_print_redir(w, (XtPointer) 0, (XtPointer) 0);
-}
-
-/* ARGSUSED */
-void
-HandleRedraw(Widget w,
- XEvent * event GCC_UNUSED,
- String * params GCC_UNUSED,
- Cardinal *param_count GCC_UNUSED)
-{
- do_redraw(w, (XtPointer) 0, (XtPointer) 0);
-}
-
-/* ARGSUSED */
-void
-HandleSendSignal(Widget w,
- XEvent * event GCC_UNUSED,
- String * params,
- Cardinal *param_count)
-{
- /* *INDENT-OFF* */
- static struct sigtab {
- char *name;
- int sig;
- } signals[] = {
-#ifdef SIGTSTP
- { "suspend", SIGTSTP },
- { "tstp", SIGTSTP },
-#endif
-#ifdef SIGCONT
- { "cont", SIGCONT },
-#endif
- { "int", SIGINT },
- { "hup", SIGHUP },
- { "quit", SIGQUIT },
- { "alrm", SIGALRM },
- { "alarm", SIGALRM },
- { "term", SIGTERM },
- { "kill", SIGKILL },
- { NULL, 0 },
- };
- /* *INDENT-ON* */
-
- if (*param_count == 1) {
- struct sigtab *st;
-
- for (st = signals; st->name; st++) {
- if (XmuCompareISOLatin1(st->name, params[0]) == 0) {
- handle_send_signal(w, st->sig);
- return;
- }
- }
- /* one could allow numeric values, but that would be a security hole */
- }
-
- Bell(XkbBI_MinorError, 0);
-}
-
-/* ARGSUSED */
-void
-HandleQuit(Widget w,
- XEvent * event GCC_UNUSED,
- String * params GCC_UNUSED,
- Cardinal *param_count GCC_UNUSED)
-{
- do_quit(w, (XtPointer) 0, (XtPointer) 0);
-}
-
-void
-Handle8BitControl(Widget w,
- XEvent * event GCC_UNUSED,
- String * params,
- Cardinal *param_count)
-{
- handle_vt_toggle(do_8bit_control, term->screen.control_eight_bits,
- params, *param_count, w);
-}
-
-void
-HandleBackarrow(Widget w,
- XEvent * event GCC_UNUSED,
- String * params,
- Cardinal *param_count)
-{
- handle_vt_toggle(do_backarrow, term->keyboard.flags & MODE_DECBKM,
- params, *param_count, w);
-}
-
-void
-HandleSunFunctionKeys(Widget w,
- XEvent * event GCC_UNUSED,
- String * params,
- Cardinal *param_count)
-{
- handle_vt_toggle(do_sun_fkeys, term->keyboard.type == keyboardIsSun,
- params, *param_count, w);
-}
-
-#if OPT_NUM_LOCK
-void
-HandleNumLock(Widget w,
- XEvent * event GCC_UNUSED,
- String * params,
- Cardinal *param_count)
-{
- handle_vt_toggle(do_num_lock, term->misc.real_NumLock,
- params, *param_count, w);
-}
-
-void
-HandleAltEsc(Widget w,
- XEvent * event GCC_UNUSED,
- String * params,
- Cardinal *param_count)
-{
- handle_vt_toggle(do_alt_esc, !term->screen.input_eight_bits,
- params, *param_count, w);
-}
-
-void
-HandleMetaEsc(Widget w,
- XEvent * event GCC_UNUSED,
- String * params,
- Cardinal *param_count)
-{
- handle_vt_toggle(do_meta_esc, term->screen.meta_sends_esc,
- params, *param_count, w);
-}
-#endif
-
-void
-HandleDeleteIsDEL(Widget w,
- XEvent * event GCC_UNUSED,
- String * params,
- Cardinal *param_count)
-{
- handle_vt_toggle(do_delete_del, term->screen.delete_is_del,
- params, *param_count, w);
-}
-
-void
-HandleOldFunctionKeys(Widget w,
- XEvent * event GCC_UNUSED,
- String * params,
- Cardinal *param_count)
-{
- handle_vt_toggle(do_old_fkeys, term->keyboard.type == keyboardIsLegacy,
- params, *param_count, w);
-}
-
-#if OPT_SUNPC_KBD
-void
-HandleSunKeyboard(Widget w,
- XEvent * event GCC_UNUSED,
- String * params,
- Cardinal *param_count)
-{
- handle_vt_toggle(do_sun_kbd, term->keyboard.type == keyboardIsVT220,
- params, *param_count, w);
-}
-#endif
-
-#if OPT_HP_FUNC_KEYS
-void
-HandleHpFunctionKeys(Widget w,
- XEvent * event GCC_UNUSED,
- String * params,
- Cardinal *param_count)
-{
- handle_vt_toggle(do_hp_fkeys, term->keyboard.type == keyboardIsHP,
- params, *param_count, w);
-}
-#endif
-
-#if OPT_SCO_FUNC_KEYS
-void
-HandleScoFunctionKeys(Widget w,
- XEvent * event GCC_UNUSED,
- String * params,
- Cardinal *param_count)
-{
- handle_vt_toggle(do_sco_fkeys, term->keyboard.type == keyboardIsSCO,
- params, *param_count, w);
-}
-#endif
-
-void
-HandleScrollbar(Widget w,
- XEvent * event GCC_UNUSED,
- String * params,
- Cardinal *param_count)
-{
- if (IsIcon(&(term->screen))) {
- Bell(XkbBI_MinorError, 0);
- } else {
- handle_vt_toggle(do_scrollbar, term->screen.fullVwin.sb_info.width,
- params, *param_count, w);
- }
-}
-
-void
-HandleJumpscroll(Widget w,
- XEvent * event GCC_UNUSED,
- String * params,
- Cardinal *param_count)
-{
- handle_vt_toggle(do_jumpscroll, term->screen.jumpscroll,
- params, *param_count, w);
-}
-
-void
-HandleReverseVideo(Widget w,
- XEvent * event GCC_UNUSED,
- String * params,
- Cardinal *param_count)
-{
- handle_vt_toggle(do_reversevideo, (term->misc.re_verse0),
- params, *param_count, w);
-}
-
-void
-HandleAutoWrap(Widget w,
- XEvent * event GCC_UNUSED,
- String * params,
- Cardinal *param_count)
-{
- handle_vt_toggle(do_autowrap, (term->flags & WRAPAROUND),
- params, *param_count, w);
-}
-
-void
-HandleReverseWrap(Widget w,
- XEvent * event GCC_UNUSED,
- String * params,
- Cardinal *param_count)
-{
- handle_vt_toggle(do_reversewrap, (term->flags & REVERSEWRAP),
- params, *param_count, w);
-}
-
-void
-HandleAutoLineFeed(Widget w,
- XEvent * event GCC_UNUSED,
- String * params,
- Cardinal *param_count)
-{
- handle_vt_toggle(do_autolinefeed, (term->flags & LINEFEED),
- params, *param_count, w);
-}
-
-void
-HandleAppCursor(Widget w,
- XEvent * event GCC_UNUSED,
- String * params,
- Cardinal *param_count)
-{
- handle_vt_toggle(do_appcursor, (term->keyboard.flags & MODE_DECCKM),
- params, *param_count, w);
-}
-
-void
-HandleAppKeypad(Widget w,
- XEvent * event GCC_UNUSED,
- String * params,
- Cardinal *param_count)
-{
- handle_vt_toggle(do_appkeypad, (term->keyboard.flags & MODE_DECKPAM),
- params, *param_count, w);
-}
-
-void
-HandleScrollKey(Widget w,
- XEvent * event GCC_UNUSED,
- String * params,
- Cardinal *param_count)
-{
- handle_vt_toggle(do_scrollkey, term->screen.scrollkey,
- params, *param_count, w);
-}
-
-void
-HandleScrollTtyOutput(Widget w,
- XEvent * event GCC_UNUSED,
- String * params,
- Cardinal *param_count)
-{
- handle_vt_toggle(do_scrollttyoutput, term->screen.scrollttyoutput,
- params, *param_count, w);
-}
-
-void
-HandleAllow132(Widget w,
- XEvent * event GCC_UNUSED,
- String * params,
- Cardinal *param_count)
-{
- handle_vt_toggle(do_allow132, term->screen.c132,
- params, *param_count, w);
-}
-
-void
-HandleCursesEmul(Widget w,
- XEvent * event GCC_UNUSED,
- String * params,
- Cardinal *param_count)
-{
- handle_vt_toggle(do_cursesemul, term->screen.curses,
- params, *param_count, w);
-}
-
-void
-HandleMarginBell(Widget w,
- XEvent * event GCC_UNUSED,
- String * params,
- Cardinal *param_count)
-{
- handle_vt_toggle(do_marginbell, term->screen.marginbell,
- params, *param_count, w);
-}
-
-#if OPT_BLINK_CURS
-void
-HandleCursorBlink(Widget w,
- XEvent * event GCC_UNUSED,
- String * params,
- Cardinal *param_count)
-{
- /* eventually want to see if sensitive or not */
- handle_vt_toggle(do_cursorblink, term->screen.cursor_blink,
- params, *param_count, w);
-}
-#endif
-
-void
-HandleAltScreen(Widget w,
- XEvent * event GCC_UNUSED,
- String * params,
- Cardinal *param_count)
-{
- /* eventually want to see if sensitive or not */
- handle_vt_toggle(do_altscreen, term->screen.alternate,
- params, *param_count, w);
-}
-
-void
-HandleTiteInhibit(Widget w,
- XEvent * event GCC_UNUSED,
- String * params,
- Cardinal *param_count)
-{
- /* eventually want to see if sensitive or not */
- handle_vt_toggle(do_titeInhibit, !(term->misc.titeInhibit),
- params, *param_count, w);
-}
-
-/* ARGSUSED */
-void
-HandleSoftReset(Widget w,
- XEvent * event GCC_UNUSED,
- String * params GCC_UNUSED,
- Cardinal *param_count GCC_UNUSED)
-{
- do_softreset(w, (XtPointer) 0, (XtPointer) 0);
-}
-
-/* ARGSUSED */
-void
-HandleHardReset(Widget w,
- XEvent * event GCC_UNUSED,
- String * params GCC_UNUSED,
- Cardinal *param_count GCC_UNUSED)
-{
- do_hardreset(w, (XtPointer) 0, (XtPointer) 0);
-}
-
-/* ARGSUSED */
-void
-HandleClearSavedLines(Widget w,
- XEvent * event GCC_UNUSED,
- String * params GCC_UNUSED,
- Cardinal *param_count GCC_UNUSED)
-{
- do_clearsavedlines(w, (XtPointer) 0, (XtPointer) 0);
-}
-
-#if OPT_DEC_CHRSET
-void
-HandleFontDoublesize(Widget w,
- XEvent * event GCC_UNUSED,
- String * params,
- Cardinal *param_count)
-{
- handle_vt_toggle(do_font_doublesize, term->screen.font_doublesize,
- params, *param_count, w);
-}
-#endif
-
-#if OPT_BOX_CHARS
-void
-HandleFontBoxChars(Widget w,
- XEvent * event GCC_UNUSED,
- String * params,
- Cardinal *param_count)
-{
- handle_vt_toggle(do_font_boxchars, term->screen.force_box_chars,
- params, *param_count, w);
-}
-#endif
-
-#if OPT_DEC_SOFTFONT
-void
-HandleFontLoading(Widget w,
- XEvent * event GCC_UNUSED,
- String * params,
- Cardinal *param_count)
-{
- handle_vt_toggle(do_font_loadable, term->misc.font_loadable,
- params, *param_count, w);
-}
-#endif
-
-#if OPT_RENDERFONT
-void
-HandleRenderFont(Widget w,
- XEvent * event GCC_UNUSED,
- String * params,
- Cardinal *param_count)
-{
- handle_vt_toggle(do_font_renderfont, term->misc.render_font,
- params, *param_count, w);
-}
-#endif
-
-#if OPT_WIDE_CHARS
-void
-HandleUTF8Mode(Widget w,
- XEvent * event GCC_UNUSED,
- String * params,
- Cardinal *param_count)
-{
- handle_vt_toggle(do_font_utf8_mode, term->screen.utf8_mode,
- params, *param_count, w);
-}
-#endif
-
-#if OPT_TEK4014
-void
-HandleSetTerminalType(Widget w,
- XEvent * event GCC_UNUSED,
- String * params,
- Cardinal *param_count)
-{
- if (*param_count == 1) {
- switch (params[0][0]) {
- case 'v':
- case 'V':
- if (term->screen.TekEmu)
- do_vtmode(w, (XtPointer) 0, (XtPointer) 0);
- break;
- case 't':
- case 'T':
- if (!term->screen.TekEmu)
- do_tekmode(w, (XtPointer) 0, (XtPointer) 0);
- break;
- default:
- Bell(XkbBI_MinorError, 0);
- }
- } else {
- Bell(XkbBI_MinorError, 0);
- }
-}
-
-void
-HandleVisibility(Widget w,
- XEvent * event GCC_UNUSED,
- String * params,
- Cardinal *param_count)
-{
- if (*param_count == 2) {
- switch (params[0][0]) {
- case 'v':
- case 'V':
- handle_tek_toggle(do_vtonoff, (int) term->screen.Vshow,
- params + 1, (*param_count) - 1, w);
- break;
- case 't':
- case 'T':
- handle_tek_toggle(do_tekonoff, (int) term->screen.Tshow,
- params + 1, (*param_count) - 1, w);
- break;
- default:
- Bell(XkbBI_MinorError, 0);
- }
- } else {
- Bell(XkbBI_MinorError, 0);
- }
-}
-
-/* ARGSUSED */
-void
-HandleSetTekText(Widget w,
- XEvent * event GCC_UNUSED,
- String * params,
- Cardinal *param_count)
-{
- void (*proc) PROTO_XT_CALLBACK_ARGS = 0;
-
- switch (*param_count) {
- case 0:
- proc = do_tektextlarge;
- break;
- case 1:
- switch (params[0][0]) {
- case 'l':
- case 'L':
- proc = do_tektextlarge;
- break;
- case '2':
- proc = do_tektext2;
- break;
- case '3':
- proc = do_tektext3;
- break;
- case 's':
- case 'S':
- proc = do_tektextsmall;
- break;
- }
- break;
- }
- if (proc)
- (*proc) (w, (XtPointer) 0, (XtPointer) 0);
- else
- Bell(XkbBI_MinorError, 0);
-}
-
-/* ARGSUSED */
-void
-HandleTekPage(Widget w,
- XEvent * event GCC_UNUSED,
- String * params GCC_UNUSED,
- Cardinal *param_count GCC_UNUSED)
-{
- do_tekpage(w, (XtPointer) 0, (XtPointer) 0);
-}
-
-/* ARGSUSED */
-void
-HandleTekReset(Widget w,
- XEvent * event GCC_UNUSED,
- String * params GCC_UNUSED,
- Cardinal *param_count GCC_UNUSED)
-{
- do_tekreset(w, (XtPointer) 0, (XtPointer) 0);
-}
-
-/* ARGSUSED */
-void
-HandleTekCopy(Widget w,
- XEvent * event GCC_UNUSED,
- String * params GCC_UNUSED,
- Cardinal *param_count GCC_UNUSED)
-{
- do_tekcopy(w, (XtPointer) 0, (XtPointer) 0);
-}
-#endif /* OPT_TEK4014 */
-
-void
-UpdateMenuItem(Widget mi, XtArgVal val)
-{
- static Arg menuArgs =
- {XtNleftBitmap, (XtArgVal) 0};
-
- if (mi) {
- menuArgs.value = (XtArgVal) ((val)
- ? term->screen.menu_item_bitmap
- : None);
- XtSetValues(mi, &menuArgs, (Cardinal) 1);
- }
-}
-
-void
-SetItemSensitivity(Widget mi, XtArgVal val)
-{
- static Arg menuArgs =
- {XtNsensitive, (XtArgVal) 0};
-
- if (mi) {
- menuArgs.value = (XtArgVal) (val);
- XtSetValues(mi, &menuArgs, (Cardinal) 1);
- }
-}
-
-#if OPT_TOOLBAR
-/*
- * The normal style of xterm popup menu delays initialization until the menu is
- * first requested. When using a toolbar, we can use the same initialization,
- * though on the first popup there will be a little geometry layout jitter,
- * since the menu is already managed when this callback is invoked.
- */
-static void
-InitPopup(Widget gw,
- XtPointer closure,
- XtPointer data GCC_UNUSED)
-{
- String params[2];
- Cardinal count = 1;
-
- params[0] = (char *) closure;
- params[1] = 0;
- TRACE(("InitPopup(%s)\n", params[0]));
-
- domenu(gw, (XEvent *) 0, params, &count);
-
- if (gw)
- XtRemoveCallback(gw, XtNpopupCallback, InitPopup, closure);
-}
-
-static void
-SetupShell(Widget *menus, MenuList * shell, int n, int m)
-{
- char temp[80];
- char *external_name = 0;
-
- shell[n].w = XtVaCreatePopupShell(menu_names[n].internal_name,
- simpleMenuWidgetClass,
- *menus,
- XtNgeometry, NULL,
- (XtPointer) 0);
-
- XtAddCallback(shell[n].w, XtNpopupCallback, InitPopup, menu_names[n].internal_name);
- XtVaGetValues(shell[n].w,
- XtNlabel, &external_name,
- (XtPointer) 0);
-
- TRACE(("...SetupShell(%s) -> %s -> %#lx\n",
- menu_names[n].internal_name,
- external_name,
- (long) shell[n].w));
-
- sprintf(temp, "%sButton", menu_names[n].internal_name);
- shell[n].b = XtVaCreateManagedWidget(temp,
- menuButtonWidgetClass,
- *menus,
- XtNfromHoriz, ((m >= 0)
- ? shell[m].b
- : 0),
- XtNmenuName, menu_names[n].internal_name,
- XtNlabel, external_name,
- (XtPointer) 0);
-}
-
-#endif
-
-void
-SetupMenus(Widget shell, Widget *forms, Widget *menus)
-{
-#if OPT_TOOLBAR
- Cardinal n;
- Arg args[10];
-#endif
-
- TRACE(("SetupMenus(%s)\n", shell == toplevel ? "vt100" : "tek4014"));
-
- if (shell == toplevel) {
- XawSimpleMenuAddGlobalActions(app_con);
- XtRegisterGrabAction(HandlePopupMenu, True,
- (ButtonPressMask | ButtonReleaseMask),
- GrabModeAsync, GrabModeAsync);
- }
-#if OPT_TOOLBAR
- *forms = XtVaCreateManagedWidget("form",
- formWidgetClass, shell,
- (XtPointer) 0);
- xtermAddInput(*forms);
-
- /*
- * Set a nominal value for the preferred pane size, which lets the
- * buttons determine the actual height of the menu bar. We don't show
- * the grip, because it's too easy to make the toolbar look bad that
- * way.
- */
- XtSetArg(args[0], XtNorientation, XtorientHorizontal);
- XtSetArg(args[1], XtNtop, XawChainTop);
- XtSetArg(args[2], XtNbottom, XawChainTop);
- XtSetArg(args[3], XtNleft, XawChainLeft);
- XtSetArg(args[4], XtNright, XawChainLeft);
-
- if (resource.toolBar)
- *menus = XtCreateManagedWidget("menubar", boxWidgetClass, *forms,
- args, 5);
- else
- *menus = XtCreateWidget("menubar", boxWidgetClass, *forms, args, 5);
-
- if (shell == toplevel) { /* vt100 */
- for (n = mainMenu; n <= fontMenu; n++) {
- SetupShell(menus, vt_shell, n, n - 1);
- }
- }
-#if OPT_TEK4014
- else { /* tek4014 */
- SetupShell(menus, tek_shell, mainMenu, -1);
- SetupShell(menus, tek_shell, tekMenu, mainMenu);
- }
-#endif
-
-#else
- *forms = shell;
- *menus = shell;
-#endif
-
- TRACE(("...shell=%#lx\n", (long) shell));
- TRACE(("...forms=%#lx\n", (long) *forms));
- TRACE(("...menus=%#lx\n", (long) *menus));
-}
-
-void
-repairSizeHints(void)
-{
- TScreen *screen = &term->screen;
-
- XSizeHints sizehints;
-
- if (XtIsRealized((Widget) term)) {
- bzero(&sizehints, sizeof(sizehints));
- xtermSizeHints(term, &sizehints, ScrollbarWidth(screen));
-
- XSetWMNormalHints(screen->display, XtWindow(SHELL_OF(term)), &sizehints);
- }
-}
-
-#if OPT_TOOLBAR
-static int called_SetupToolbar[2] =
-{False, False};
-
-static void
-SetupToolbar(int which)
-{
- int n;
-
- TRACE(("SetupToolbar(%s)\n", which ? "vt100" : "tek4014"));
-
- if (which) { /* vt100 */
- for (n = mainMenu; n <= fontMenu; n++) {
- InitPopup(vt_shell[n].w, menu_names[n].internal_name, 0);
- }
- }
-#if OPT_TEK4014
- else { /* tek4014 */
- InitPopup(tek_shell[mainMenu].w, menu_names[mainMenu].internal_name, 0);
- InitPopup(tek_shell[tekMenu].w, menu_names[tekMenu].internal_name, 0);
- }
-#endif
- called_SetupToolbar[which] = True;
- ShowToolbar(resource.toolBar);
-}
-
-static TbInfo *
-toolbar_info(Widget w)
-{
- TRACE(("...getting toolbar_info\n"));
-#if OPT_TEK4014
- if (w != (Widget) term)
- return &(tekWidget->tek.tb_info);
-#endif
- return &(WhichVWin(&(term->screen))->tb_info);
-}
-
-static void
-hide_toolbar(Widget w)
-{
- if (w != 0) {
- TbInfo *info = toolbar_info(w);
-
- TRACE(("hiding toolbar\n"));
- XtVaSetValues(w,
- XtNfromVert, (Widget) 0,
- (XtPointer) 0);
-
- if (info->menu_bar != 0) {
- repairSizeHints();
- XtUnmanageChild(info->menu_bar);
- if (XtIsRealized(info->menu_bar)) {
- XtUnmapWidget(info->menu_bar);
- }
- }
- TRACE(("...hiding toolbar (done)\n"));
- }
-}
-
-static void
-show_toolbar(Widget w)
-{
- if (w != 0) {
- TbInfo *info = toolbar_info(w);
-
- TRACE(("showing toolbar\n"));
- if (info->menu_bar != 0) {
- XtVaSetValues(w,
- XtNfromVert, info->menu_bar,
- (XtPointer) 0);
- if (XtIsRealized(info->menu_bar))
- repairSizeHints();
- XtManageChild(info->menu_bar);
- if (XtIsRealized(info->menu_bar)) {
- XtMapWidget(info->menu_bar);
- }
- }
- /*
- * This is needed to make the terminal widget move down below the
- * toolbar.
- */
- XawFormDoLayout(XtParent(w), True);
- TRACE(("...showing toolbar (done)\n"));
- }
-}
-
-/*
- * Make the toolbar visible or invisible in the current window(s).
- */
-void
-ShowToolbar(Bool enable)
-{
- TRACE(("ShowToolbar(%d)\n", enable));
-
- if (IsIcon(&(term->screen))) {
- Bell(XkbBI_MinorError, 0);
- } else {
- if (enable) {
- int which = !TEK4014_ACTIVE(&(term->screen));
- if (!called_SetupToolbar[which])
- SetupToolbar(which);
- show_toolbar((Widget) term);
-#if OPT_TEK4014
- show_toolbar((Widget) tekWidget);
-#endif
- } else {
- hide_toolbar((Widget) term);
-#if OPT_TEK4014
- hide_toolbar((Widget) tekWidget);
-#endif
- }
- resource.toolBar = enable;
- update_toolbar();
- }
-}
-
-void
-HandleToolbar(Widget w,
- XEvent * event GCC_UNUSED,
- String * params GCC_UNUSED,
- Cardinal *param_count GCC_UNUSED)
-{
- if (IsIcon(&(term->screen))) {
- Bell(XkbBI_MinorError, 0);
- } else {
- handle_vt_toggle(do_toolbar, resource.toolBar,
- params, *param_count, w);
- }
-}
-
-/* ARGSUSED */
-static void
-do_toolbar(Widget gw GCC_UNUSED,
- XtPointer closure GCC_UNUSED,
- XtPointer data GCC_UNUSED)
-{
- /*
- * Toggle toolbars for both vt100 and tek windows, since they share the
- * menu which contains the checkbox indicating whether the toolbar is
- * active.
- */
- if (IsIcon(&(term->screen))) {
- Bell(XkbBI_MinorError, 0);
- } else {
- ShowToolbar(resource.toolBar = !resource.toolBar);
- }
-}
-
-void
-update_toolbar(void)
-{
- update_menu_item(term->screen.mainMenu,
- mainMenuEntries[mainMenu_toolbar].widget,
- resource.toolBar);
-}
-#endif /* OPT_TOOLBAR */
-
-void
-update_securekbd(void)
-{
- update_menu_item(term->screen.mainMenu,
- mainMenuEntries[mainMenu_securekbd].widget,
- term->screen.grabbedKbd);
-}
-
-void
-update_allowsends(void)
-{
- update_menu_item(term->screen.mainMenu,
- mainMenuEntries[mainMenu_allowsends].widget,
- term->screen.allowSendEvents);
-}
-
-#ifdef ALLOWLOGGING
-void
-update_logging(void)
-{
- update_menu_item(term->screen.mainMenu,
- mainMenuEntries[mainMenu_logging].widget,
- term->screen.logging);
-}
-#endif
-
-void
-update_print_redir(void)
-{
- update_menu_item(term->screen.mainMenu,
- mainMenuEntries[mainMenu_print_redir].widget,
- term->screen.printer_controlmode);
-}
-
-void
-update_8bit_control(void)
-{
- update_menu_item(term->screen.mainMenu,
- mainMenuEntries[mainMenu_8bit_ctrl].widget,
- term->screen.control_eight_bits);
-}
-
-void
-update_decbkm(void)
-{
- update_menu_item(term->screen.mainMenu,
- mainMenuEntries[mainMenu_backarrow].widget,
- (term->keyboard.flags & MODE_DECBKM) != 0);
-}
-
-#if OPT_NUM_LOCK
-void
-update_num_lock(void)
-{
- update_menu_item(term->screen.mainMenu,
- mainMenuEntries[mainMenu_num_lock].widget,
- term->misc.real_NumLock);
-}
-
-void
-update_alt_esc(void)
-{
- update_menu_item(term->screen.mainMenu,
- mainMenuEntries[mainMenu_alt_esc].widget,
- !term->screen.input_eight_bits);
-}
-
-void
-update_meta_esc(void)
-{
- update_menu_item(term->screen.mainMenu,
- mainMenuEntries[mainMenu_meta_esc].widget,
- term->screen.meta_sends_esc);
-}
-#endif
-
-void
-update_sun_fkeys(void)
-{
- update_menu_item(term->screen.mainMenu,
- mainMenuEntries[mainMenu_sun_fkeys].widget,
- term->keyboard.type == keyboardIsSun);
-}
-
-void
-update_old_fkeys(void)
-{
- update_menu_item(term->screen.mainMenu,
- mainMenuEntries[mainMenu_old_fkeys].widget,
- term->keyboard.type == keyboardIsLegacy);
-}
-
-void
-update_delete_del(void)
-{
- update_menu_item(term->screen.mainMenu,
- mainMenuEntries[mainMenu_delete_del].widget,
- xtermDeleteIsDEL());
-}
-
-#if OPT_SUNPC_KBD
-void
-update_sun_kbd(void)
-{
- update_menu_item(term->screen.mainMenu,
- mainMenuEntries[mainMenu_sun_kbd].widget,
- term->keyboard.type == keyboardIsVT220);
-}
-#endif
-
-#if OPT_HP_FUNC_KEYS
-void
-update_hp_fkeys(void)
-{
- update_menu_item(term->screen.mainMenu,
- mainMenuEntries[mainMenu_hp_fkeys].widget,
- term->keyboard.type == keyboardIsHP);
-}
-#endif
-
-#if OPT_SCO_FUNC_KEYS
-void
-update_sco_fkeys(void)
-{
- update_menu_item(term->screen.mainMenu,
- mainMenuEntries[mainMenu_sco_fkeys].widget,
- term->keyboard.type == keyboardIsSCO);
-}
-#endif
-
-void
-update_scrollbar(void)
-{
- update_menu_item(term->screen.vtMenu,
- vtMenuEntries[vtMenu_scrollbar].widget,
- ScrollbarWidth(&term->screen));
-}
-
-void
-update_jumpscroll(void)
-{
- update_menu_item(term->screen.vtMenu,
- vtMenuEntries[vtMenu_jumpscroll].widget,
- term->screen.jumpscroll);
-}
-
-void
-update_reversevideo(void)
-{
- update_menu_item(term->screen.vtMenu,
- vtMenuEntries[vtMenu_reversevideo].widget,
- (term->misc.re_verse));
-}
-
-void
-update_autowrap(void)
-{
- update_menu_item(term->screen.vtMenu,
- vtMenuEntries[vtMenu_autowrap].widget,
- (term->flags & WRAPAROUND) != 0);
-}
-
-void
-update_reversewrap(void)
-{
- update_menu_item(term->screen.vtMenu,
- vtMenuEntries[vtMenu_reversewrap].widget,
- (term->flags & REVERSEWRAP) != 0);
-}
-
-void
-update_autolinefeed(void)
-{
- update_menu_item(term->screen.vtMenu,
- vtMenuEntries[vtMenu_autolinefeed].widget,
- (term->flags & LINEFEED) != 0);
-}
-
-void
-update_appcursor(void)
-{
- update_menu_item(term->screen.vtMenu,
- vtMenuEntries[vtMenu_appcursor].widget,
- (term->keyboard.flags & MODE_DECCKM) != 0);
-}
-
-void
-update_appkeypad(void)
-{
- update_menu_item(term->screen.vtMenu,
- vtMenuEntries[vtMenu_appkeypad].widget,
- (term->keyboard.flags & MODE_DECKPAM) != 0);
-}
-
-void
-update_scrollkey(void)
-{
- update_menu_item(term->screen.vtMenu,
- vtMenuEntries[vtMenu_scrollkey].widget,
- term->screen.scrollkey);
-}
-
-void
-update_scrollttyoutput(void)
-{
- update_menu_item(term->screen.vtMenu,
- vtMenuEntries[vtMenu_scrollttyoutput].widget,
- term->screen.scrollttyoutput);
-}
-
-void
-update_allow132(void)
-{
- update_menu_item(term->screen.vtMenu,
- vtMenuEntries[vtMenu_allow132].widget,
- term->screen.c132);
-}
-
-void
-update_cursesemul(void)
-{
- update_menu_item(term->screen.vtMenu,
- vtMenuEntries[vtMenu_cursesemul].widget,
- term->screen.curses);
-}
-
-void
-update_visualbell(void)
-{
- update_menu_item(term->screen.vtMenu,
- vtMenuEntries[vtMenu_visualbell].widget,
- term->screen.visualbell);
-}
-
-void
-update_poponbell(void)
-{
- update_menu_item(term->screen.vtMenu,
- vtMenuEntries[vtMenu_poponbell].widget,
- term->screen.poponbell);
-}
-
-void
-update_marginbell(void)
-{
- update_menu_item(term->screen.vtMenu,
- vtMenuEntries[vtMenu_marginbell].widget,
- term->screen.marginbell);
-}
-
-#if OPT_BLINK_CURS
-void
-update_cursorblink(void)
-{
- update_menu_item(term->screen.vtMenu,
- vtMenuEntries[vtMenu_cursorblink].widget,
- term->screen.cursor_blink);
-}
-#endif
-
-void
-update_altscreen(void)
-{
- update_menu_item(term->screen.vtMenu,
- vtMenuEntries[vtMenu_altscreen].widget,
- term->screen.alternate);
-}
-
-void
-update_titeInhibit(void)
-{
- update_menu_item(term->screen.vtMenu,
- vtMenuEntries[vtMenu_titeInhibit].widget,
- !(term->misc.titeInhibit));
-}
-
-#ifndef NO_ACTIVE_ICON
-void
-update_activeicon(void)
-{
- update_menu_item(term->screen.vtMenu,
- vtMenuEntries[vtMenu_activeicon].widget,
- term->misc.active_icon);
-}
-#endif /* NO_ACTIVE_ICON */
-
-#if OPT_DEC_CHRSET
-void
-update_font_doublesize(void)
-{
- update_menu_item(term->screen.fontMenu,
- fontMenuEntries[fontMenu_font_doublesize].widget,
- term->screen.font_doublesize);
-}
-#endif
-
-#if OPT_BOX_CHARS
-void
-update_font_boxchars(void)
-{
- update_menu_item(term->screen.fontMenu,
- fontMenuEntries[fontMenu_font_boxchars].widget,
- term->screen.force_box_chars);
-}
-#endif
-
-#if OPT_DEC_SOFTFONT
-void
-update_font_loadable(void)
-{
- update_menu_item(term->screen.fontMenu,
- fontMenuEntries[fontMenu_font_loadable].widget,
- term->misc.font_loadable);
-}
-#endif
-
-#if OPT_RENDERFONT
-void
-update_font_renderfont(void)
-{
- update_menu_item(term->screen.fontMenu,
- fontMenuEntries[fontMenu_render_font].widget,
- term->misc.render_font);
-}
-#endif
-
-#if OPT_WIDE_CHARS
-void
-update_font_utf8_mode(void)
-{
- Widget iw = fontMenuEntries[fontMenu_wide_chars].widget;
- Bool active = (term->screen.utf8_mode != uAlways);
- Bool enable = (term->screen.utf8_mode != uFalse);
-
- TRACE(("update_font_utf8_mode active %d, enable %d\n", active, enable));
- set_sensitivity(term->screen.fontMenu, iw, active);
- update_menu_item(term->screen.fontMenu, iw, enable);
-}
-#endif
-
-#if OPT_TEK4014
-void
-update_tekshow(void)
-{
- if (!(term->screen.inhibit & I_TEK)) {
- update_menu_item(term->screen.vtMenu,
- vtMenuEntries[vtMenu_tekshow].widget,
- term->screen.Tshow);
- }
-}
-
-void
-update_vttekmode(void)
-{
- if (!(term->screen.inhibit & I_TEK)) {
- update_menu_item(term->screen.vtMenu,
- vtMenuEntries[vtMenu_tekmode].widget,
- term->screen.TekEmu);
- update_menu_item(term->screen.tekMenu,
- tekMenuEntries[tekMenu_vtmode].widget,
- !term->screen.TekEmu);
- }
-}
-
-void
-update_vtshow(void)
-{
- if (!(term->screen.inhibit & I_TEK)) {
- update_menu_item(term->screen.tekMenu,
- tekMenuEntries[tekMenu_vtshow].widget,
- term->screen.Vshow);
- }
-}
-
-void
-set_vthide_sensitivity(void)
-{
- if (!(term->screen.inhibit & I_TEK)) {
- set_sensitivity(term->screen.vtMenu,
- vtMenuEntries[vtMenu_vthide].widget,
- term->screen.Tshow);
- }
-}
-
-void
-set_tekhide_sensitivity(void)
-{
- if (!(term->screen.inhibit & I_TEK)) {
- set_sensitivity(term->screen.tekMenu,
- tekMenuEntries[tekMenu_tekhide].widget,
- term->screen.Vshow);
- }
-}
-
-void
-set_tekfont_menu_item(int n, int val)
-{
- if (!(term->screen.inhibit & I_TEK)) {
- update_menu_item(term->screen.tekMenu,
- tekMenuEntries[FS2MI(n)].widget,
- (val));
- }
-}
-#endif /* OPT_TEK4014 */
-
-void
-set_menu_font(int val)
-{
- update_menu_item(term->screen.fontMenu,
- fontMenuEntries[term->screen.menu_font_number].widget,
- (val));
-}
diff --git a/nx-X11/programs/xterm/menu.h b/nx-X11/programs/xterm/menu.h
deleted file mode 100644
index e64c5d3dc..000000000
--- a/nx-X11/programs/xterm/menu.h
+++ /dev/null
@@ -1,441 +0,0 @@
-/* $XTermId: menu.h,v 1.96 2005/11/03 13:17:28 tom Exp $ */
-
-/* $Xorg: menu.h,v 1.4 2001/02/09 02:06:03 xorgcvs Exp $ */
-/*
-
-Copyright 1999-2004,2005 by Thomas E. Dickey
-
- All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and its
-documentation for any purpose and without fee is hereby granted,
-provided that the above copyright notice appear in all copies and that
-both that copyright notice and this permission notice appear in
-supporting documentation, and that the name of the above listed
-copyright holder(s) not be used in advertising or publicity pertaining
-to distribution of the software without specific, written prior
-permission.
-
-THE ABOVE LISTED COPYRIGHT HOLDER(S) DISCLAIM ALL WARRANTIES WITH REGARD
-TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
-AND FITNESS, IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE
-LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
-ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
-OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-
-
-Copyright 1989 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
-OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall
-not be used in advertising or otherwise to promote the sale, use or
-other dealings in this Software without prior written authorization
-from The Open Group.
-
-*/
-/* $XFree86: xc/programs/xterm/menu.h,v 3.38 2005/11/03 13:17:28 dickey Exp $ */
-
-#ifndef included_menu_h
-#define included_menu_h
-
-#include <xterm.h>
-
-typedef struct _MenuEntry {
- char *name;
- void (*function) PROTO_XT_CALLBACK_ARGS;
- Widget widget;
-} MenuEntry;
-
-extern MenuEntry mainMenuEntries[], vtMenuEntries[];
-extern MenuEntry fontMenuEntries[];
-#if OPT_TEK4014
-extern MenuEntry tekMenuEntries[];
-#endif
-
-extern void Handle8BitControl PROTO_XT_ACTIONS_ARGS;
-extern void HandleAllow132 PROTO_XT_ACTIONS_ARGS;
-extern void HandleAllowSends PROTO_XT_ACTIONS_ARGS;
-extern void HandleAltEsc PROTO_XT_ACTIONS_ARGS;
-extern void HandleAltScreen PROTO_XT_ACTIONS_ARGS;
-extern void HandleAppCursor PROTO_XT_ACTIONS_ARGS;
-extern void HandleAppKeypad PROTO_XT_ACTIONS_ARGS;
-extern void HandleAutoLineFeed PROTO_XT_ACTIONS_ARGS;
-extern void HandleAutoWrap PROTO_XT_ACTIONS_ARGS;
-extern void HandleBackarrow PROTO_XT_ACTIONS_ARGS;
-extern void HandleClearSavedLines PROTO_XT_ACTIONS_ARGS;
-extern void HandleCreateMenu PROTO_XT_ACTIONS_ARGS;
-extern void HandleCursesEmul PROTO_XT_ACTIONS_ARGS;
-extern void HandleCursorBlink PROTO_XT_ACTIONS_ARGS;
-extern void HandleDeleteIsDEL PROTO_XT_ACTIONS_ARGS;
-extern void HandleFontBoxChars PROTO_XT_ACTIONS_ARGS;
-extern void HandleFontDoublesize PROTO_XT_ACTIONS_ARGS;
-extern void HandleFontLoading PROTO_XT_ACTIONS_ARGS;
-extern void HandleHardReset PROTO_XT_ACTIONS_ARGS;
-extern void HandleHpFunctionKeys PROTO_XT_ACTIONS_ARGS;
-extern void HandleJumpscroll PROTO_XT_ACTIONS_ARGS;
-extern void HandleLogging PROTO_XT_ACTIONS_ARGS;
-extern void HandleMarginBell PROTO_XT_ACTIONS_ARGS;
-extern void HandleMetaEsc PROTO_XT_ACTIONS_ARGS;
-extern void HandleNumLock PROTO_XT_ACTIONS_ARGS;
-extern void HandleOldFunctionKeys PROTO_XT_ACTIONS_ARGS;
-extern void HandlePopupMenu PROTO_XT_ACTIONS_ARGS;
-extern void HandlePrintControlMode PROTO_XT_ACTIONS_ARGS;
-extern void HandlePrintScreen PROTO_XT_ACTIONS_ARGS;
-extern void HandleQuit PROTO_XT_ACTIONS_ARGS;
-extern void HandleRedraw PROTO_XT_ACTIONS_ARGS;
-extern void HandleRenderFont PROTO_XT_ACTIONS_ARGS;
-extern void HandleReverseVideo PROTO_XT_ACTIONS_ARGS;
-extern void HandleReverseWrap PROTO_XT_ACTIONS_ARGS;
-extern void HandleScoFunctionKeys PROTO_XT_ACTIONS_ARGS;
-extern void HandleScrollKey PROTO_XT_ACTIONS_ARGS;
-extern void HandleScrollTtyOutput PROTO_XT_ACTIONS_ARGS;
-extern void HandleScrollbar PROTO_XT_ACTIONS_ARGS;
-extern void HandleSendSignal PROTO_XT_ACTIONS_ARGS;
-extern void HandleSetPopOnBell PROTO_XT_ACTIONS_ARGS;
-extern void HandleSetTekText PROTO_XT_ACTIONS_ARGS;
-extern void HandleSetTerminalType PROTO_XT_ACTIONS_ARGS;
-extern void HandleSetVisualBell PROTO_XT_ACTIONS_ARGS;
-extern void HandleSoftReset PROTO_XT_ACTIONS_ARGS;
-extern void HandleSunFunctionKeys PROTO_XT_ACTIONS_ARGS;
-extern void HandleSunKeyboard PROTO_XT_ACTIONS_ARGS;
-extern void HandleTekCopy PROTO_XT_ACTIONS_ARGS;
-extern void HandleTekPage PROTO_XT_ACTIONS_ARGS;
-extern void HandleTekReset PROTO_XT_ACTIONS_ARGS;
-extern void HandleTiteInhibit PROTO_XT_ACTIONS_ARGS;
-extern void HandleToolbar PROTO_XT_ACTIONS_ARGS;
-extern void HandleUTF8Mode PROTO_XT_ACTIONS_ARGS;
-extern void HandleVisibility PROTO_XT_ACTIONS_ARGS;
-
-extern void DoSecureKeyboard (Time tp);
-extern void SetupMenus (Widget shell, Widget *forms, Widget *menus);
-
-#if OPT_TOOLBAR
-extern void ShowToolbar(Bool);
-#endif
-
-/*
- * The following definitions MUST match the order of entries given in
- * the mainMenuEntries, vtMenuEntries, and tekMenuEntries arrays in menu.c.
- */
-
-/*
- * items in primary menu
- */
-typedef enum {
-#if OPT_TOOLBAR
- mainMenu_toolbar,
-#endif
- mainMenu_securekbd,
- mainMenu_allowsends,
- mainMenu_redraw,
- mainMenu_line1,
-#ifdef ALLOWLOGGING
- mainMenu_logging,
-#endif
- mainMenu_print,
- mainMenu_print_redir,
- mainMenu_line2,
- mainMenu_8bit_ctrl,
- mainMenu_backarrow,
-#if OPT_NUM_LOCK
- mainMenu_num_lock,
- mainMenu_alt_esc,
- mainMenu_meta_esc,
-#endif
- mainMenu_delete_del,
- mainMenu_old_fkeys,
-#if OPT_HP_FUNC_KEYS
- mainMenu_hp_fkeys,
-#endif
-#if OPT_SCO_FUNC_KEYS
- mainMenu_sco_fkeys,
-#endif
- mainMenu_sun_fkeys,
-#if OPT_SUNPC_KBD
- mainMenu_sun_kbd,
-#endif
- mainMenu_line3,
- mainMenu_suspend,
- mainMenu_continue,
- mainMenu_interrupt,
- mainMenu_hangup,
- mainMenu_terminate,
- mainMenu_kill,
- mainMenu_line4,
- mainMenu_quit,
- mainMenu_LAST
-} mainMenuIndices;
-
-
-/*
- * items in vt100 mode menu
- */
-typedef enum {
- vtMenu_scrollbar,
- vtMenu_jumpscroll,
- vtMenu_reversevideo,
- vtMenu_autowrap,
- vtMenu_reversewrap,
- vtMenu_autolinefeed,
- vtMenu_appcursor,
- vtMenu_appkeypad,
- vtMenu_scrollkey,
- vtMenu_scrollttyoutput,
- vtMenu_allow132,
- vtMenu_cursesemul,
- vtMenu_visualbell,
- vtMenu_poponbell,
- vtMenu_marginbell,
-#if OPT_BLINK_CURS
- vtMenu_cursorblink,
-#endif
- vtMenu_titeInhibit,
-#ifndef NO_ACTIVE_ICON
- vtMenu_activeicon,
-#endif /* NO_ACTIVE_ICON */
- vtMenu_line1,
- vtMenu_softreset,
- vtMenu_hardreset,
- vtMenu_clearsavedlines,
- vtMenu_line2,
-#if OPT_TEK4014
- vtMenu_tekshow,
- vtMenu_tekmode,
- vtMenu_vthide,
-#endif
- vtMenu_altscreen,
- vtMenu_LAST
-} vtMenuIndices;
-
-/*
- * items in vt100 font menu
- */
-typedef enum {
- fontMenu_fontdefault,
- fontMenu_font1,
- fontMenu_font2,
- fontMenu_font3,
- fontMenu_font4,
- fontMenu_font5,
- fontMenu_font6,
-#define fontMenu_lastBuiltin fontMenu_font6
- fontMenu_fontescape,
- fontMenu_fontsel,
-/* number of non-line items down to here should match NMENUFONTS in ptyx.h */
-
-#if OPT_DEC_CHRSET || OPT_BOX_CHARS || OPT_DEC_SOFTFONT
- fontMenu_line1,
-#if OPT_BOX_CHARS
- fontMenu_font_boxchars,
-#endif
-#if OPT_DEC_CHRSET
- fontMenu_font_doublesize,
-#endif
-#if OPT_DEC_SOFTFONT
- fontMenu_font_loadable,
-#endif
-#endif
-
-#if OPT_RENDERFONT || OPT_WIDE_CHARS
- fontMenu_line2,
-#if OPT_RENDERFONT
- fontMenu_render_font,
-#endif
-#if OPT_WIDE_CHARS
- fontMenu_wide_chars,
-#endif
-#endif
-
- fontMenu_LAST
-} fontMenuIndices;
-
-
-/*
- * items in tek4014 mode menu
- */
-#if OPT_TEK4014
-typedef enum {
- tekMenu_tektextlarge,
- tekMenu_tektext2,
- tekMenu_tektext3,
- tekMenu_tektextsmall,
- tekMenu_line1,
- tekMenu_tekpage,
- tekMenu_tekreset,
- tekMenu_tekcopy,
- tekMenu_line2,
- tekMenu_vtshow,
- tekMenu_vtmode,
- tekMenu_tekhide,
- tekMenu_LAST
-} tekMenuIndices;
-#endif
-
-
-/*
- * macros for updating menus
- */
-
-#define update_menu_item(w,mi,val) UpdateMenuItem(mi,val)
-extern void UpdateMenuItem(Widget mi, XtArgVal val);
-
-#define set_sensitivity(w,mi,val) SetItemSensitivity(mi,val)
-extern void SetItemSensitivity(Widget mi, XtArgVal val);
-
-/*
- * there should be one of each of the following for each checkable item
- */
-#if OPT_TOOLBAR
-extern void update_toolbar(void);
-#else
-#define update_toolbar() /* nothing */
-#endif
-
-extern void update_securekbd(void);
-extern void update_allowsends(void);
-
-#ifdef ALLOWLOGGING
-extern void update_logging(void);
-#else
-#define update_logging() /*nothing*/
-#endif
-
-extern void update_print_redir(void);
-extern void update_8bit_control(void);
-extern void update_decbkm(void);
-
-#if OPT_NUM_LOCK
-extern void update_num_lock(void);
-extern void update_alt_esc(void);
-extern void update_meta_esc(void);
-#else
-#define update_num_lock() /*nothing*/
-#define update_alt_esc() /*nothing*/
-#define update_meta_esc() /*nothing*/
-#endif
-
-extern void update_sun_fkeys(void);
-extern void update_old_fkeys(void);
-extern void update_delete_del(void);
-
-#if OPT_SUNPC_KBD
-extern void update_sun_kbd(void);
-#endif
-
-#if OPT_HP_FUNC_KEYS
-extern void update_hp_fkeys(void);
-#else
-#define update_hp_fkeys() /*nothing*/
-#endif
-
-#if OPT_SCO_FUNC_KEYS
-extern void update_sco_fkeys(void);
-#else
-#define update_sco_fkeys() /*nothing*/
-#endif
-
-extern void update_scrollbar(void);
-extern void update_jumpscroll(void);
-extern void update_reversevideo(void);
-extern void update_autowrap(void);
-extern void update_reversewrap(void);
-extern void update_autolinefeed(void);
-extern void update_appcursor(void);
-extern void update_appkeypad(void);
-extern void update_scrollkey(void);
-extern void update_scrollttyoutput(void);
-extern void update_allow132(void);
-extern void update_cursesemul(void);
-extern void update_visualbell(void);
-extern void update_poponbell(void);
-extern void update_marginbell(void);
-
-#if OPT_BLINK_CURS
-extern void update_cursorblink(void);
-#else
-#define update_cursorblink() /* nothing */
-#endif
-
-extern void update_altscreen(void);
-extern void update_titeInhibit(void);
-
-#ifndef NO_ACTIVE_ICON
-extern void update_activeicon(void);
-#endif /* NO_ACTIVE_ICON */
-
-#if OPT_DEC_CHRSET
-extern void update_font_doublesize(void);
-#else
-#define update_font_doublesize() /* nothing */
-#endif
-
-#if OPT_BOX_CHARS
-extern void update_font_boxchars(void);
-#else
-#define update_font_boxchars() /* nothing */
-#endif
-
-#if OPT_DEC_SOFTFONT
-extern void update_font_loadable(void);
-#else
-#define update_font_loadable() /* nothing */
-#endif
-
-#if OPT_RENDERFONT
-extern void update_font_renderfont(void);
-#else
-#define update_font_renderfont() /* nothing */
-#endif
-
-#if OPT_WIDE_CHARS
-extern void update_font_utf8_mode(void);
-#else
-#define update_font_utf8_mode() /* nothing */
-#endif
-
-#if OPT_TEK4014
-extern void update_tekshow(void);
-extern void update_vttekmode(void);
-extern void update_vtshow(void);
-extern void set_vthide_sensitivity(void);
-extern void set_tekhide_sensitivity(void);
-#else
-#define update_tekshow() /*nothing*/
-#define update_vttekmode() /*nothing*/
-#define update_vtshow() /*nothing*/
-#define set_vthide_sensitivity() /*nothing*/
-#define set_tekhide_sensitivity() /*nothing*/
-#endif
-
-/*
- * macros for mapping font size to tekMenu placement
- */
-#define FS2MI(n) (n) /* font_size_to_menu_item */
-#define MI2FS(n) (n) /* menu_item_to_font_size */
-
-#if OPT_TEK4014
-extern void set_tekfont_menu_item(int n,int val);
-#else
-#define set_tekfont_menu_item(n,val) /*nothing*/
-#endif
-
-extern void set_menu_font(int val);
-
-#endif /*included_menu_h*/
diff --git a/nx-X11/programs/xterm/minstall.sh b/nx-X11/programs/xterm/minstall.sh
deleted file mode 100644
index 1271ad3c0..000000000
--- a/nx-X11/programs/xterm/minstall.sh
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/bin/sh
-# $XFree86: xc/programs/xterm/minstall.sh,v 1.4 2002/12/27 21:05:22 dickey Exp $
-#
-# Install manpages, substituting a reasonable section value since XFree86 4.x
-# doesn't use constants...
-#
-# Parameters:
-# $1 = program to invoke as "install"
-# $2 = manpage to install
-# $3 = final installed-path
-#
-
-MINSTALL="$1"
-OLD_FILE="$2"
-END_FILE="$3"
-
-suffix=`echo "$END_FILE" | sed -e 's%^[^.]*.%%'`
-NEW_FILE=temp$$
-
-sed -e 's%__vendorversion__%"X Window System"%' \
- -e s%__apploaddir__%/usr/lib/X11/app-defaults% \
- -e s%__mansuffix__%$suffix%g \
- -e s%__miscmansuffix__%$suffix%g \
- $OLD_FILE >$NEW_FILE
-
-echo "$MINSTALL $OLD_FILE $END_FILE"
-eval "$MINSTALL $NEW_FILE $END_FILE"
-
-rm -f $NEW_FILE
diff --git a/nx-X11/programs/xterm/misc.c b/nx-X11/programs/xterm/misc.c
deleted file mode 100644
index 447e4c058..000000000
--- a/nx-X11/programs/xterm/misc.c
+++ /dev/null
@@ -1,3260 +0,0 @@
-/* $XTermId: misc.c,v 1.280 2005/11/03 13:17:28 tom Exp $ */
-
-/*
- * $Xorg: misc.c,v 1.3 2000/08/17 19:55:09 cpqbld Exp $
- */
-
-/* $XFree86: xc/programs/xterm/misc.c,v 3.101 2005/11/03 13:17:28 dickey Exp $ */
-
-/*
- *
- * Copyright 1999-2004,2005 by Thomas E. Dickey
- *
- * All Rights Reserved
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sublicense, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- * IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY
- * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- * Except as contained in this notice, the name(s) of the above copyright
- * holders shall not be used in advertising or otherwise to promote the
- * sale, use or other dealings in this Software without prior written
- * authorization.
- *
- *
- * Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
- *
- * All Rights Reserved
- *
- * Permission to use, copy, modify, and distribute this software and its
- * documentation for any purpose and without fee is hereby granted,
- * provided that the above copyright notice appear in all copies and that
- * both that copyright notice and this permission notice appear in
- * supporting documentation, and that the name of Digital Equipment
- * Corporation not be used in advertising or publicity pertaining to
- * distribution of the software without specific, written prior permission.
- *
- *
- * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
- * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
- * DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
- * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
- * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
- * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- * SOFTWARE.
- */
-
-#include <version.h>
-#include <xterm.h>
-
-#include <sys/stat.h>
-#include <stdio.h>
-#include <signal.h>
-#include <ctype.h>
-#include <pwd.h>
-#include <sys/wait.h>
-
-#include <X11/Xatom.h>
-#include <X11/cursorfont.h>
-
-#include <X11/Xmu/Error.h>
-#include <X11/Xmu/SysUtil.h>
-#include <X11/Xmu/WinUtil.h>
-#if HAVE_X11_SUNKEYSYM_H
-#include <X11/Sunkeysym.h>
-#endif
-
-#ifdef HAVE_LANGINFO_CODESET
-#include <langinfo.h>
-#endif
-
-#include <data.h>
-#include <error.h>
-#include <menu.h>
-#include <fontutils.h>
-#include <xcharmouse.h>
-#include <xstrings.h>
-#include <VTparse.h>
-
-#include <assert.h>
-
-#if (XtSpecificationRelease < 6)
-#ifndef X_GETTIMEOFDAY
-#define X_GETTIMEOFDAY(t) gettimeofday(t,(struct timezone *)0)
-#endif
-#endif
-
-#ifdef VMS
-#define XTERM_VMS_LOGFILE "SYS$SCRATCH:XTERM_LOG.TXT"
-#ifdef ALLOWLOGFILEEXEC
-#undef ALLOWLOGFILEEXEC
-#endif
-#endif /* VMS */
-
-#if OPT_TEK4014
-#define OUR_EVENT(event,Type) \
- (event.type == Type && \
- (event.xcrossing.window == XtWindow(XtParent(term)) || \
- (tekWidget && \
- event.xcrossing.window == XtWindow(XtParent(tekWidget)))))
-#else
-#define OUR_EVENT(event,Type) \
- (event.type == Type && \
- (event.xcrossing.window == XtWindow(XtParent(term))))
-#endif
-
-static Bool ChangeColorsRequest(XtermWidget pTerm, int start, char
- *names, int final);
-static void DoSpecialEnterNotify(XEnterWindowEvent * ev);
-static void DoSpecialLeaveNotify(XEnterWindowEvent * ev);
-static void selectwindow(TScreen * screen, int flag);
-static void unselectwindow(TScreen * screen, int flag);
-static void Sleep(int msec);
-
-void
-do_xevents(void)
-{
- TScreen *screen = &term->screen;
-
- if (XtAppPending(app_con)
- ||
-#if defined(VMS) || defined(__VMS)
- screen->display->qlen > 0
-#else
- GetBytesAvailable(ConnectionNumber(screen->display)) > 0
-#endif
- )
- xevents();
-}
-
-void
-xevents(void)
-{
- XEvent event;
- XtInputMask input_mask;
- TScreen *screen = &term->screen;
-
- if (need_cleanup)
- Cleanup(0);
-
- if (screen->scroll_amt)
- FlushScroll(screen);
- /*
- * process timeouts, relying on the fact that XtAppProcessEvent
- * will process the timeout and return without blockng on the
- * XEvent queue. Other sources i.e. the pty are handled elsewhere
- * with select().
- */
- while ((input_mask = XtAppPending(app_con)) & XtIMTimer)
- XtAppProcessEvent(app_con, XtIMTimer);
-#if OPT_SESSION_MGT
- /*
- * Session management events are alternative input events. Deal with
- * them in the same way.
- */
- while ((input_mask = XtAppPending(app_con)) & XtIMAlternateInput)
- XtAppProcessEvent(app_con, XtIMAlternateInput);
-#endif
-
- /*
- * If there's no XEvents, don't wait around...
- */
- if ((input_mask & XtIMXEvent) != XtIMXEvent)
- return;
- do {
- /*
- * This check makes xterm hang when in mouse hilite tracking mode.
- * We simply ignore all events except for those not passed down to
- * this function, e.g., those handled in in_put().
- */
- if (waitingForTrackInfo) {
- Sleep(10);
- return;
- }
- XtAppNextEvent(app_con, &event);
- /*
- * Hack to get around problems with the toolkit throwing away
- * eventing during the exclusive grab of the menu popup. By
- * looking at the event ourselves we make sure that we can
- * do the right thing.
- */
- if (OUR_EVENT(event, EnterNotify))
- DoSpecialEnterNotify(&event.xcrossing);
- else if (OUR_EVENT(event, LeaveNotify))
- DoSpecialLeaveNotify(&event.xcrossing);
- else if ((screen->send_mouse_pos == ANY_EVENT_MOUSE
-#if OPT_DEC_LOCATOR
- || screen->send_mouse_pos == DEC_LOCATOR
-#endif /* OPT_DEC_LOCATOR */
- )
- && event.xany.type == MotionNotify
- && event.xcrossing.window == XtWindow(term)) {
- SendMousePosition((Widget) term, &event);
- continue;
- }
-
- if (!event.xany.send_event ||
- screen->allowSendEvents ||
- ((event.xany.type != KeyPress) &&
- (event.xany.type != KeyRelease) &&
- (event.xany.type != ButtonPress) &&
- (event.xany.type != ButtonRelease)))
- XtDispatchEvent(&event);
- } while ((input_mask = XtAppPending(app_con)) & XtIMXEvent);
-}
-
-Cursor
-make_colored_cursor(unsigned cursorindex, /* index into font */
- unsigned long fg, /* pixel value */
- unsigned long bg) /* pixel value */
-{
- TScreen *screen = &term->screen;
- Cursor c;
- Display *dpy = screen->display;
-
- c = XCreateFontCursor(dpy, cursorindex);
- if (c == (Cursor) 0)
- return (c);
-
- recolor_cursor(c, fg, bg);
- return (c);
-}
-
-/* ARGSUSED */
-void
-HandleKeyPressed(Widget w GCC_UNUSED,
- XEvent * event,
- String * params GCC_UNUSED,
- Cardinal *nparams GCC_UNUSED)
-{
- TScreen *screen = &term->screen;
-
- TRACE(("Handle 7bit-key\n"));
-#ifdef ACTIVEWINDOWINPUTONLY
- if (w == CURRENT_EMU(screen))
-#endif
- Input(&term->keyboard, screen, &event->xkey, False);
-}
-
-/* ARGSUSED */
-void
-HandleEightBitKeyPressed(Widget w GCC_UNUSED,
- XEvent * event,
- String * params GCC_UNUSED,
- Cardinal *nparams GCC_UNUSED)
-{
- TScreen *screen = &term->screen;
-
- TRACE(("Handle 8bit-key\n"));
-#ifdef ACTIVEWINDOWINPUTONLY
- if (w == CURRENT_EMU(screen))
-#endif
- Input(&term->keyboard, screen, &event->xkey, True);
-}
-
-/* ARGSUSED */
-void
-HandleStringEvent(Widget w GCC_UNUSED,
- XEvent * event GCC_UNUSED,
- String * params,
- Cardinal *nparams)
-{
- TScreen *screen = &term->screen;
-
-#ifdef ACTIVEWINDOWINPUTONLY
- if (w != CURRENT_EMU(screen))
- return;
-#endif
-
- if (*nparams != 1)
- return;
-
- if ((*params)[0] == '0' && (*params)[1] == 'x' && (*params)[2] != '\0') {
- Char c, *p;
- Char hexval[2];
- hexval[0] = hexval[1] = 0;
- for (p = (Char *) (*params + 2); (c = *p); p++) {
- hexval[0] *= 16;
- if (isupper(c))
- c = tolower(c);
- if (c >= '0' && c <= '9')
- hexval[0] += c - '0';
- else if (c >= 'a' && c <= 'f')
- hexval[0] += c - 'a' + 10;
- else
- break;
- }
- if (c == '\0')
- StringInput(screen, hexval, 1);
- } else {
- StringInput(screen, (Char *) * params, strlen(*params));
- }
-}
-
-/*
- * Rather than sending characters to the host, put them directly into our
- * input queue. That lets a user have access to any of the control sequences
- * for a key binding. This is the equivalent of local function key support.
- *
- * NOTE: This code does not support the hexadecimal kludge used in
- * HandleStringEvent because it prevents us from sending an arbitrary string
- * (but it appears in a lot of examples - so we are stuck with it). The
- * standard string converter does recognize "\" for newline ("\n") and for
- * octal constants (e.g., "\007" for BEL). So we assume the user can make do
- * without a specialized converter. (Don't try to use \000, though).
- */
-/* ARGSUSED */
-void
-HandleInterpret(Widget w GCC_UNUSED,
- XEvent * event GCC_UNUSED,
- String * params,
- Cardinal *param_count)
-{
- if (*param_count == 1) {
- char *value = params[0];
- int need = strlen(value);
- int used = VTbuffer->next - VTbuffer->buffer;
- int have = VTbuffer->last - VTbuffer->buffer;
-
- if (have - used + need < BUF_SIZE) {
-
- fillPtyData(&term->screen, VTbuffer, value, (int) strlen(value));
-
- TRACE(("Interpret %s\n", value));
- VTbuffer->update++;
- }
- }
-}
-
-static void
-DoSpecialEnterNotify(XEnterWindowEvent * ev)
-{
- TScreen *screen = &term->screen;
-
- TRACE(("DoSpecialEnterNotify(%d)\n", screen->select));
-#ifdef ACTIVEWINDOWINPUTONLY
- if (ev->window == XtWindow(XtParent(CURRENT_EMU(screen))))
-#endif
- if (((ev->detail) != NotifyInferior) &&
- ev->focus &&
- !(screen->select & FOCUS))
- selectwindow(screen, INWINDOW);
-}
-
-/*ARGSUSED*/
-void
-HandleEnterWindow(Widget w GCC_UNUSED,
- XtPointer eventdata GCC_UNUSED,
- XEvent * event GCC_UNUSED,
- Boolean * cont GCC_UNUSED)
-{
- /* NOP since we handled it above */
- TRACE(("HandleEnterWindow ignored\n"));
-}
-
-static void
-DoSpecialLeaveNotify(XEnterWindowEvent * ev)
-{
- TScreen *screen = &term->screen;
-
- TRACE(("DoSpecialLeaveNotify(%d)\n", screen->select));
-#ifdef ACTIVEWINDOWINPUTONLY
- if (ev->window == XtWindow(XtParent(CURRENT_EMU(screen))))
-#endif
- if (((ev->detail) != NotifyInferior) &&
- ev->focus &&
- !(screen->select & FOCUS))
- unselectwindow(screen, INWINDOW);
-}
-
-/*ARGSUSED*/
-void
-HandleLeaveWindow(Widget w GCC_UNUSED,
- XtPointer eventdata GCC_UNUSED,
- XEvent * event GCC_UNUSED,
- Boolean * cont GCC_UNUSED)
-{
- /* NOP since we handled it above */
- TRACE(("HandleLeaveWindow ignored\n"));
-}
-
-/*ARGSUSED*/
-void
-HandleFocusChange(Widget w GCC_UNUSED,
- XtPointer eventdata GCC_UNUSED,
- XEvent * ev,
- Boolean * cont GCC_UNUSED)
-{
- XFocusChangeEvent *event = (XFocusChangeEvent *) ev;
- TScreen *screen = &term->screen;
-
- TRACE(("HandleFocusChange type=%d, mode=%d, detail=%d\n",
- event->type,
- event->mode,
- event->detail));
-
- if (event->type == FocusIn) {
- /*
- * NotifyNonlinear only happens (on FocusIn) if the pointer was not in
- * one of our windows. Use this to reset a case where one xterm is
- * partly obscuring another, and X gets (us) confused about whether the
- * pointer was in the window. In particular, this can happen if the
- * user is resizing the obscuring window, causing some events to not be
- * delivered to the obscured window.
- */
- if (event->detail == NotifyNonlinear
- && (screen->select & INWINDOW) != 0) {
- unselectwindow(screen, INWINDOW);
- }
- selectwindow(screen,
- ((event->detail == NotifyPointer)
- ? INWINDOW
- : FOCUS));
- } else {
- /*
- * XGrabKeyboard() will generate FocusOut/NotifyGrab event that we want
- * to ignore.
- */
- if (event->mode != NotifyGrab) {
- unselectwindow(screen,
- ((event->detail == NotifyPointer)
- ? INWINDOW
- : FOCUS));
- }
- if (screen->grabbedKbd && (event->mode == NotifyUngrab)) {
- Bell(XkbBI_Info, 100);
- ReverseVideo(term);
- screen->grabbedKbd = False;
- update_securekbd();
- }
- }
-}
-
-static void
-selectwindow(TScreen * screen, int flag)
-{
- TRACE(("selectwindow(%d) flag=%d\n", screen->select, flag));
-
-#if OPT_TEK4014
- if (screen->TekEmu) {
- if (!Ttoggled)
- TCursorToggle(TOGGLE);
- screen->select |= flag;
- if (!Ttoggled)
- TCursorToggle(TOGGLE);
- return;
- } else
-#endif
- {
- if (screen->xic)
- XSetICFocus(screen->xic);
-
- if (screen->cursor_state && CursorMoved(screen))
- HideCursor();
- screen->select |= flag;
- if (screen->cursor_state)
- ShowCursor();
- return;
- }
-}
-
-static void
-unselectwindow(TScreen * screen, int flag)
-{
- TRACE(("unselectwindow(%d) flag=%d\n", screen->select, flag));
-
- if (screen->always_highlight)
- return;
-
-#if OPT_TEK4014
- if (screen->TekEmu) {
- if (!Ttoggled)
- TCursorToggle(TOGGLE);
- screen->select &= ~flag;
- if (!Ttoggled)
- TCursorToggle(TOGGLE);
- } else
-#endif
- {
- if (screen->xic)
- XUnsetICFocus(screen->xic);
- screen->select &= ~flag;
- if (screen->cursor_state && CursorMoved(screen))
- HideCursor();
- if (screen->cursor_state)
- ShowCursor();
- }
-}
-
-static long lastBellTime; /* in milliseconds */
-
-void
-Bell(int which GCC_UNUSED, int percent)
-{
- TScreen *screen = &term->screen;
- struct timeval curtime;
- long now_msecs;
-
- TRACE(("BELL %d\n", percent));
-
- /* has enough time gone by that we are allowed to ring
- the bell again? */
- if (screen->bellSuppressTime) {
- if (screen->bellInProgress) {
- do_xevents();
- if (screen->bellInProgress) { /* even after new events? */
- return;
- }
- }
- X_GETTIMEOFDAY(&curtime);
- now_msecs = 1000 * curtime.tv_sec + curtime.tv_usec / 1000;
- if (lastBellTime != 0 && now_msecs - lastBellTime >= 0 &&
- now_msecs - lastBellTime < screen->bellSuppressTime) {
- return;
- }
- lastBellTime = now_msecs;
- }
-
- if (screen->visualbell) {
- VisualBell();
- } else {
-#if defined(HAVE_XKBBELL)
- XkbBell(screen->display, VShellWindow, percent, which);
-#else
- XBell(screen->display, percent);
-#endif
- }
-
- if (screen->poponbell)
- XRaiseWindow(screen->display, VShellWindow);
-
- if (screen->bellSuppressTime) {
- /* now we change a property and wait for the notify event to come
- back. If the server is suspending operations while the bell
- is being emitted (problematic for audio bell), this lets us
- know when the previous bell has finished */
- Widget w = CURRENT_EMU(screen);
- XChangeProperty(XtDisplay(w), XtWindow(w),
- XA_NOTICE, XA_NOTICE, 8, PropModeAppend, NULL, 0);
- screen->bellInProgress = True;
- }
-}
-
-#define VB_DELAY screen->visualBellDelay
-
-static void
-flashWindow(TScreen * screen, Window window, GC visualGC, unsigned width, unsigned height)
-{
- XFillRectangle(screen->display, window, visualGC, 0, 0, width, height);
- XFlush(screen->display);
- Sleep(VB_DELAY);
- XFillRectangle(screen->display, window, visualGC, 0, 0, width, height);
-}
-
-void
-VisualBell(void)
-{
- TScreen *screen = &term->screen;
-
- if (VB_DELAY > 0) {
- Pixel xorPixel = (T_COLOR(screen, TEXT_FG) ^
- T_COLOR(screen, TEXT_BG));
- XGCValues gcval;
- GC visualGC;
-
- gcval.function = GXxor;
- gcval.foreground = xorPixel;
- visualGC = XtGetGC((Widget) term, GCFunction + GCForeground, &gcval);
-#if OPT_TEK4014
- if (screen->TekEmu) {
- flashWindow(screen, TWindow(screen), visualGC,
- TFullWidth(screen),
- TFullHeight(screen));
- } else
-#endif
- {
- flashWindow(screen, VWindow(screen), visualGC,
- FullWidth(screen),
- FullHeight(screen));
- }
- XtReleaseGC((Widget) term, visualGC);
- }
-}
-
-/* ARGSUSED */
-void
-HandleBellPropertyChange(Widget w GCC_UNUSED,
- XtPointer data GCC_UNUSED,
- XEvent * ev,
- Boolean * more GCC_UNUSED)
-{
- TScreen *screen = &term->screen;
-
- if (ev->xproperty.atom == XA_NOTICE) {
- screen->bellInProgress = False;
- }
-}
-
-Window
-WMFrameWindow(XtermWidget termw)
-{
- Window win_root, win_current, *children;
- Window win_parent = 0;
- unsigned int nchildren;
-
- win_current = XtWindow(termw);
-
- /* find the parent which is child of root */
- do {
- if (win_parent)
- win_current = win_parent;
- XQueryTree((&termw->screen)->display,
- win_current,
- &win_root,
- &win_parent,
- &children,
- &nchildren);
- XFree(children);
- } while (win_root != win_parent);
-
- return win_current;
-}
-
-#if OPT_DABBREV
-/*
- * The following code implements `dynamic abbreviation' expansion a la
- * Emacs. It looks in the preceding visible screen and its scrollback
- * to find expansions of a typed word. It compares consecutive
- * expansions and ignores one of them if they are identical.
- * (Tomasz J. Cholewo, t.cholewo@ieee.org)
- */
-
-#define IS_WORD_CONSTITUENT(x) ((x) != ' ' && (x) != '\0')
-#define MAXWLEN 1024 /* maximum word length as in tcsh */
-
-static int
-dabbrev_prev_char(int *xp, int *yp, TScreen * screen)
-{
- Char *linep;
-
- while (*yp >= 0) {
- linep = BUF_CHARS(screen->allbuf, *yp);
- if (--*xp >= 0)
- return linep[*xp];
- if (--*yp < 0) /* go to previous line */
- break;
- *xp = MaxCols(screen);
- if (!((long) BUF_FLAGS(screen->allbuf, *yp) & LINEWRAPPED))
- return ' '; /* treat lines as separate */
- }
- return -1;
-}
-
-static char *
-dabbrev_prev_word(int *xp, int *yp, TScreen * screen)
-{
- static char ab[MAXWLEN];
- char *abword;
- int c;
-
- abword = ab + MAXWLEN - 1;
- *abword = '\0'; /* end of string marker */
-
- while ((c = dabbrev_prev_char(xp, yp, screen)) >= 0 &&
- IS_WORD_CONSTITUENT(c))
- if (abword > ab) /* store only |MAXWLEN| last chars */
- *(--abword) = c;
- if (c < 0) {
- if (abword < ab + MAXWLEN - 1)
- return abword;
- else
- return 0;
- }
-
- while ((c = dabbrev_prev_char(xp, yp, screen)) >= 0 &&
- !IS_WORD_CONSTITUENT(c)) ; /* skip preceding spaces */
- (*xp)++; /* can be | > screen->max_col| */
- return abword;
-}
-
-static int
-dabbrev_expand(TScreen * screen)
-{
- int pty = screen->respond; /* file descriptor of pty */
-
- static int x, y;
- static char *dabbrev_hint = 0, *lastexpansion = 0;
-
- char *expansion;
- Char *copybuffer;
- size_t hint_len;
- unsigned i;
- unsigned del_cnt;
- unsigned buf_cnt;
-
- if (!screen->dabbrev_working) { /* initialize */
- x = screen->cur_col;
- y = screen->cur_row + screen->savelines;
-
- free(dabbrev_hint); /* free(NULL) is OK */
- dabbrev_hint = dabbrev_prev_word(&x, &y, screen);
- if (!dabbrev_hint)
- return 0; /* no preceding word? */
- free(lastexpansion);
- if (!(lastexpansion = strdup(dabbrev_hint))) /* make own copy */
- return 0;
- if (!(dabbrev_hint = strdup(dabbrev_hint))) {
- free(lastexpansion);
- return 0;
- }
- screen->dabbrev_working = 1; /* we are in the middle of dabbrev process */
- }
-
- hint_len = strlen(dabbrev_hint);
- while ((expansion = dabbrev_prev_word(&x, &y, screen))) {
- if (!strncmp(dabbrev_hint, expansion, hint_len) && /* empty hint matches everything */
- strlen(expansion) > hint_len && /* trivial expansion disallowed */
- strcmp(expansion, lastexpansion)) /* different from previous */
- break;
- }
- if (!expansion) /* no expansion found */
- return 0;
-
- del_cnt = strlen(lastexpansion) - hint_len;
- buf_cnt = del_cnt + strlen(expansion) - hint_len;
- if (!(copybuffer = TypeMallocN(Char, buf_cnt)))
- return 0;
- for (i = 0; i < del_cnt; i++) { /* delete previous expansion */
- copybuffer[i] = screen->dabbrev_erase_char;
- }
- memmove(copybuffer + del_cnt,
- expansion + hint_len,
- strlen(expansion) - hint_len);
- v_write(pty, copybuffer, buf_cnt);
- screen->dabbrev_working = 1; /* v_write() just set it to 1 */
- free(copybuffer);
-
- free(lastexpansion);
- lastexpansion = strdup(expansion);
- if (!lastexpansion)
- return 0;
- return 1;
-}
-
-/*ARGSUSED*/
-void
-HandleDabbrevExpand(Widget gw,
- XEvent * event GCC_UNUSED,
- String * params GCC_UNUSED,
- Cardinal *nparams GCC_UNUSED)
-{
- XtermWidget w = (XtermWidget) gw;
- TScreen *screen = &w->screen;
- if (!dabbrev_expand(screen))
- Bell(XkbBI_TerminalBell, 0);
-}
-#endif /* OPT_DABBREV */
-
-#if OPT_MAXIMIZE
-/*ARGSUSED*/
-void
-HandleDeIconify(Widget gw,
- XEvent * event GCC_UNUSED,
- String * params GCC_UNUSED,
- Cardinal *nparams GCC_UNUSED)
-{
- if (IsXtermWidget(gw)) {
- TScreen *screen = &((XtermWidget) gw)->screen;
- XMapWindow(screen->display, VShellWindow);
- }
-}
-
-/*ARGSUSED*/
-void
-HandleIconify(Widget gw,
- XEvent * event GCC_UNUSED,
- String * params GCC_UNUSED,
- Cardinal *nparams GCC_UNUSED)
-{
- if (IsXtermWidget(gw)) {
- TScreen *screen = &((XtermWidget) gw)->screen;
- XIconifyWindow(screen->display,
- VShellWindow,
- DefaultScreen(screen->display));
- }
-}
-
-int
-QueryMaximize(XtermWidget termw, unsigned *width, unsigned *height)
-{
- TScreen *screen = &termw->screen;
- XSizeHints hints;
- long supp = 0;
- Window root_win;
- int root_x = -1; /* saved co-ordinates */
- int root_y = -1;
- unsigned root_border;
- unsigned root_depth;
-
- if (XGetGeometry(screen->display,
- RootWindowOfScreen(XtScreen(termw)),
- &root_win,
- &root_x,
- &root_y,
- width,
- height,
- &root_border,
- &root_depth)) {
- TRACE(("QueryMaximize: XGetGeometry position %d,%d size %d,%d border %d\n",
- root_x,
- root_y,
- *width,
- *height,
- root_border));
-
- *width -= (root_border * 2);
- *height -= (root_border * 2);
-
- hints.flags = PMaxSize;
- if (XGetWMNormalHints(screen->display,
- VShellWindow,
- &hints,
- &supp)
- && (hints.flags & PMaxSize) != 0) {
-
- TRACE(("QueryMaximize: WM hints max_w %#x max_h %#x\n",
- hints.max_width,
- hints.max_height));
-
- if ((unsigned) hints.max_width < *width)
- *width = hints.max_width;
- if ((unsigned) hints.max_height < *height)
- *height = hints.max_height;
- }
- return 1;
- }
- return 0;
-}
-
-void
-RequestMaximize(XtermWidget termw, int maximize)
-{
- TScreen *screen = &termw->screen;
- XWindowAttributes wm_attrs, vshell_attrs;
- unsigned root_width, root_height;
-
- if (maximize) {
-
- if (QueryMaximize(termw, &root_width, &root_height)) {
-
- if (XGetWindowAttributes(screen->display,
- WMFrameWindow(termw),
- &wm_attrs)) {
-
- if (XGetWindowAttributes(screen->display,
- VShellWindow,
- &vshell_attrs)) {
-
- if (screen->restore_data != True
- || screen->restore_width != root_width
- || screen->restore_height != root_height) {
- screen->restore_data = True;
- screen->restore_x = wm_attrs.x + wm_attrs.border_width;
- screen->restore_y = wm_attrs.y + wm_attrs.border_width;
- screen->restore_width = vshell_attrs.width;
- screen->restore_height = vshell_attrs.height;
- TRACE(("HandleMaximize: save window position %d,%d size %d,%d\n",
- screen->restore_x,
- screen->restore_y,
- screen->restore_width,
- screen->restore_height));
- }
-
- /* subtract wm decoration dimensions */
- root_width -= ((wm_attrs.width - vshell_attrs.width)
- + (wm_attrs.border_width * 2));
- root_height -= ((wm_attrs.height - vshell_attrs.height)
- + (wm_attrs.border_width * 2));
-
- XMoveResizeWindow(screen->display, VShellWindow,
- 0 + wm_attrs.border_width, /* x */
- 0 + wm_attrs.border_width, /* y */
- root_width,
- root_height);
- }
- }
- }
- } else {
- if (screen->restore_data) {
- TRACE(("HandleRestoreSize: position %d,%d size %d,%d\n",
- screen->restore_x,
- screen->restore_y,
- screen->restore_width,
- screen->restore_height));
- screen->restore_data = False;
-
- XMoveResizeWindow(screen->display,
- VShellWindow,
- screen->restore_x,
- screen->restore_y,
- screen->restore_width,
- screen->restore_height);
- }
- }
-}
-
-/*ARGSUSED*/
-void
-HandleMaximize(Widget gw,
- XEvent * event GCC_UNUSED,
- String * params GCC_UNUSED,
- Cardinal *nparams GCC_UNUSED)
-{
- if (IsXtermWidget(gw)) {
- RequestMaximize((XtermWidget) gw, 1);
- }
-}
-
-/*ARGSUSED*/
-void
-HandleRestoreSize(Widget gw,
- XEvent * event GCC_UNUSED,
- String * params GCC_UNUSED,
- Cardinal *nparams GCC_UNUSED)
-{
- if (IsXtermWidget(gw)) {
- RequestMaximize((XtermWidget) gw, 0);
- }
-}
-#endif /* OPT_MAXIMIZE */
-
-void
-Redraw(void)
-{
- TScreen *screen = &term->screen;
- XExposeEvent event;
-
- event.type = Expose;
- event.display = screen->display;
- event.x = 0;
- event.y = 0;
- event.count = 0;
-
- if (VWindow(screen)) {
- event.window = VWindow(screen);
- event.width = term->core.width;
- event.height = term->core.height;
- (*term->core.widget_class->core_class.expose) ((Widget) term,
- (XEvent *) & event,
- NULL);
- if (ScrollbarWidth(screen)) {
- (screen->scrollWidget->core.widget_class->core_class.expose)
- (screen->scrollWidget, (XEvent *) & event, NULL);
- }
- }
-#if OPT_TEK4014
- if (TWindow(screen) && screen->Tshow) {
- event.window = TWindow(screen);
- event.width = tekWidget->core.width;
- event.height = tekWidget->core.height;
- TekExpose((Widget) tekWidget, (XEvent *) & event, NULL);
- }
-#endif
-}
-
-#ifdef VMS
-#define TIMESTAMP_FMT "%s%d-%02d-%02d-%02d-%02d-%02d"
-#else
-#define TIMESTAMP_FMT "%s%d-%02d-%02d.%02d:%02d:%02d"
-#endif
-
-void
-timestamp_filename(char *dst, const char *src)
-{
- time_t tstamp;
- struct tm *tstruct;
-
- time(&tstamp);
- tstruct = localtime(&tstamp);
- sprintf(dst, TIMESTAMP_FMT,
- src,
- tstruct->tm_year + 1900,
- tstruct->tm_mon + 1,
- tstruct->tm_mday,
- tstruct->tm_hour,
- tstruct->tm_min,
- tstruct->tm_sec);
-}
-
-int
-open_userfile(uid_t uid, gid_t gid, char *path, Bool append)
-{
- int fd;
- struct stat sb;
-
-#ifdef VMS
- if ((fd = open(path, O_WRONLY | O_CREAT | O_TRUNC, 0644)) < 0) {
- int the_error = errno;
- fprintf(stderr, "%s: cannot open %s: %d:%s\n",
- xterm_name,
- path,
- the_error,
- SysErrorMsg(the_error));
- return -1;
- }
- chown(path, uid, gid);
-#else
- if ((access(path, F_OK) != 0 && (errno != ENOENT))
- || (!(creat_as(uid, gid, append, path, 0644)))
- || ((fd = open(path, O_WRONLY | O_APPEND)) < 0)) {
- int the_error = errno;
- fprintf(stderr, "%s: cannot open %s: %d:%s\n",
- xterm_name,
- path,
- the_error,
- SysErrorMsg(the_error));
- return -1;
- }
-#endif
-
- /*
- * Doublecheck that the user really owns the file that we've opened before
- * we do any damage, and that it is not world-writable.
- */
- if (fstat(fd, &sb) < 0
- || sb.st_uid != uid
- || (sb.st_mode & 022) != 0) {
- fprintf(stderr, "%s: you do not own %s\n", xterm_name, path);
- close(fd);
- return -1;
- }
- return fd;
-}
-
-#ifndef VMS
-/*
- * Create a file only if we could with the permissions of the real user id.
- * We could emulate this with careful use of access() and following
- * symbolic links, but that is messy and has race conditions.
- * Forking is messy, too, but we can't count on setreuid() or saved set-uids
- * being available.
- *
- * Note: When called for user logging, we have ensured that the real and
- * effective user ids are the same, so this remains as a convenience function
- * for the debug logs.
- *
- * Returns 1 if we can proceed to open the file in relative safety, 0
- * otherwise.
- */
-int
-creat_as(uid_t uid, gid_t gid, Bool append, char *pathname, int mode)
-{
- int fd;
- pid_t pid;
- int retval = 0;
- int childstat = 0;
-#ifndef HAVE_WAITPID
- int waited;
- SIGNAL_T(*chldfunc) (int);
-
- chldfunc = signal(SIGCHLD, SIG_DFL);
-#endif /* HAVE_WAITPID */
-
- TRACE(("creat_as(uid=%d/%d, gid=%d/%d, append=%d, pathname=%s, mode=%#o)\n",
- uid, geteuid(),
- gid, getegid(),
- append,
- pathname,
- mode));
-
- if (uid == geteuid() && gid == getegid()) {
- fd = open(pathname,
- O_WRONLY | O_CREAT | (append ? O_APPEND : O_EXCL),
- mode);
- if (fd >= 0)
- close(fd);
- return (fd >= 0);
- }
-
- pid = fork();
- switch (pid) {
- case 0: /* child */
- if (setgid(gid) == -1)
- _exit(ERROR_SETUID);
- if (setuid(uid) == -1)
- _exit(ERROR_SETUID);
- fd = open(pathname,
- O_WRONLY | O_CREAT | (append ? O_APPEND : O_EXCL),
- mode);
- if (fd >= 0) {
- close(fd);
- _exit(0);
- } else
- _exit(1);
- /* NOTREACHED */
- case -1: /* error */
- return retval;
- default: /* parent */
-#ifdef HAVE_WAITPID
- while (waitpid(pid, &childstat, 0) < 0) {
-#ifdef EINTR
- if (errno == EINTR)
- continue;
-#endif /* EINTR */
-#ifdef ERESTARTSYS
- if (errno == ERESTARTSYS)
- continue;
-#endif /* ERESTARTSYS */
- break;
- }
-#else /* HAVE_WAITPID */
- waited = wait(&childstat);
- signal(SIGCHLD, chldfunc);
- /*
- Since we had the signal handler uninstalled for a while,
- we might have missed the termination of our screen child.
- If we can check for this possibility without hanging, do so.
- */
- do
- if (waited == term->screen.pid)
- Cleanup(0);
- while ((waited = nonblocking_wait()) > 0) ;
-#endif /* HAVE_WAITPID */
-#ifndef WIFEXITED
-#define WIFEXITED(status) ((status & 0xff) != 0)
-#endif
- if (WIFEXITED(childstat))
- retval = 1;
- return retval;
- }
-}
-#endif /* !VMS */
-
-#ifdef ALLOWLOGGING
-
-/*
- * Logging is a security hole, since it allows a setuid program to write
- * arbitrary data to an arbitrary file. So it is disabled by default.
- */
-
-#ifdef ALLOWLOGFILEEXEC
-static SIGNAL_T
-logpipe(int sig GCC_UNUSED)
-{
- TScreen *screen = &term->screen;
-
-#ifdef SYSV
- (void) signal(SIGPIPE, SIG_IGN);
-#endif /* SYSV */
- if (screen->logging)
- CloseLog(screen);
-}
-#endif /* ALLOWLOGFILEEXEC */
-
-void
-StartLog(TScreen * screen)
-{
- static char *log_default;
-#ifdef ALLOWLOGFILEEXEC
- char *cp;
-#endif /* ALLOWLOGFILEEXEC */
-
- if (screen->logging || (screen->inhibit & I_LOG))
- return;
-#ifdef VMS /* file name is fixed in VMS variant */
- screen->logfd = open(XTERM_VMS_LOGFILE,
- O_CREAT | O_TRUNC | O_APPEND | O_RDWR,
- 0640);
- if (screen->logfd < 0)
- return; /* open failed */
-#else /*VMS */
- if (screen->logfile == NULL || *screen->logfile == 0) {
- if (screen->logfile)
- free(screen->logfile);
- if (log_default == NULL) {
-#if defined(HAVE_GETHOSTNAME) && defined(HAVE_STRFTIME)
- char log_def_name[512]; /* see sprintf below */
- char hostname[255 + 1]; /* Internet standard limit (RFC 1035):
- ``To simplify implementations, the
- total length of a domain name (i.e.,
- label octets and label length
- octets) is restricted to 255 octets
- or less.'' */
- char yyyy_mm_dd_hh_mm_ss[4 + 5 * (1 + 2) + 1];
- time_t now;
- struct tm *ltm;
-
- (void) time(&now);
- ltm = (struct tm *) localtime(&now);
- if ((gethostname(hostname, sizeof(hostname)) == 0) &&
- (strftime(yyyy_mm_dd_hh_mm_ss,
- sizeof(yyyy_mm_dd_hh_mm_ss),
- "%Y.%m.%d.%H.%M.%S", ltm) > 0)) {
- (void) sprintf(log_def_name, "Xterm.log.%.255s.%.20s.%d",
- hostname, yyyy_mm_dd_hh_mm_ss, getpid());
- }
- if ((log_default = x_strdup(log_def_name)) == NULL)
- return;
-#else
- const char *log_def_name = "XtermLog.XXXXXX";
- if ((log_default = x_strdup(log_def_name)) == NULL)
- return;
-
- mktemp(log_default);
-#endif
- }
- if ((screen->logfile = x_strdup(log_default)) == 0)
- return;
- }
- if (*screen->logfile == '|') { /* exec command */
-#ifdef ALLOWLOGFILEEXEC
- /*
- * Warning, enabling this "feature" allows arbitrary programs
- * to be run. If ALLOWLOGFILECHANGES is enabled, this can be
- * done through escape sequences.... You have been warned.
- */
- int pid;
- int p[2];
- static char *shell;
- struct passwd *pw;
-
- if (pipe(p) < 0 || (pid = fork()) < 0)
- return;
- if (pid == 0) { /* child */
- /*
- * Close our output (we won't be talking back to the
- * parent), and redirect our child's output to the
- * original stderr.
- */
- close(p[1]);
- dup2(p[0], 0);
- close(p[0]);
- dup2(fileno(stderr), 1);
- dup2(fileno(stderr), 2);
-
- close(fileno(stderr));
- close(ConnectionNumber(screen->display));
- close(screen->respond);
-
- if ((((cp = getenv("SHELL")) == NULL || *cp == 0)
- && ((pw = getpwuid(screen->uid)) == NULL
- || *(cp = pw->pw_shell) == 0))
- || (shell = CastMallocN(char, strlen(cp))) == 0) {
- shell = "/bin/sh";
- } else {
- strcpy(shell, cp);
- }
-
- signal(SIGHUP, SIG_DFL);
- signal(SIGCHLD, SIG_DFL);
-
- /* (this is redundant) */
- if (setgid(screen->gid) == -1)
- exit(ERROR_SETUID);
- if (setuid(screen->uid) == -1)
- exit(ERROR_SETUID);
-
- execl(shell, shell, "-c", &screen->logfile[1], (void *) 0);
-
- fprintf(stderr, "%s: Can't exec `%s'\n", xterm_name,
- &screen->logfile[1]);
- exit(ERROR_LOGEXEC);
- }
- close(p[0]);
- screen->logfd = p[1];
- signal(SIGPIPE, logpipe);
-#else
- Bell(XkbBI_Info, 0);
- Bell(XkbBI_Info, 0);
- return;
-#endif
- } else {
- if ((screen->logfd = open_userfile(screen->uid,
- screen->gid,
- screen->logfile,
- (log_default != 0))) < 0)
- return;
- }
-#endif /*VMS */
- screen->logstart = VTbuffer->next;
- screen->logging = True;
- update_logging();
-}
-
-void
-CloseLog(TScreen * screen)
-{
- if (!screen->logging || (screen->inhibit & I_LOG))
- return;
- FlushLog(screen);
- close(screen->logfd);
- screen->logging = False;
- update_logging();
-}
-
-void
-FlushLog(TScreen * screen)
-{
- if (screen->logging && !(screen->inhibit & I_LOG)) {
- Char *cp;
- int i;
-
-#ifdef VMS /* avoid logging output loops which otherwise occur sometimes
- when there is no output and cp/screen->logstart are 1 apart */
- if (!tt_new_output)
- return;
- tt_new_output = False;
-#endif /* VMS */
- cp = VTbuffer->next;
- if (screen->logstart != 0
- && (i = cp - screen->logstart) > 0) {
- write(screen->logfd, (char *) screen->logstart, (unsigned) i);
- }
- screen->logstart = VTbuffer->next;
- }
-}
-
-#endif /* ALLOWLOGGING */
-
-/***====================================================================***/
-
-#if OPT_ISO_COLORS
-static void
-ReportAnsiColorRequest(XtermWidget pTerm, int colornum, int final)
-{
- XColor color;
- Colormap cmap = pTerm->core.colormap;
- char buffer[80];
-
- TRACE(("ReportAnsiColorRequest %d\n", colornum));
- color.pixel = GET_COLOR_RES(pTerm->screen.Acolors[colornum]);
- XQueryColor(term->screen.display, cmap, &color);
- sprintf(buffer, "4;%d;rgb:%04x/%04x/%04x",
- colornum,
- color.red,
- color.green,
- color.blue);
- unparseputc1(OSC, pTerm->screen.respond);
- unparseputs(buffer, pTerm->screen.respond);
- unparseputc1(final, pTerm->screen.respond);
-}
-
-/*
-* Find closest color for "def" in "cmap".
-* Set "def" to the resulting color.
-* Based on Monish Shah's "find_closest_color()" for Vim 6.0,
-* modified with ideas from David Tong's "noflash" library.
-* Return False if not able to find or allocate a color.
-*/
-static int
-find_closest_color(Display * display, Colormap cmap, XColor * def)
-{
- double tmp, distance, closestDistance;
- int closest, numFound;
- XColor *colortable;
- XVisualInfo myTemplate, *visInfoPtr;
- char *found;
- unsigned i;
- unsigned cmap_size;
- unsigned attempts;
-
- myTemplate.visualid = XVisualIDFromVisual(DefaultVisual(display,
- XDefaultScreen(display)));
- visInfoPtr = XGetVisualInfo(display, (long) VisualIDMask,
- &myTemplate, &numFound);
- if (numFound < 1) {
- /* FindClosestColor couldn't lookup visual */
- return False;
- }
-
- cmap_size = visInfoPtr->colormap_size;
- XFree((char *) visInfoPtr);
- colortable = TypeMallocN(XColor, cmap_size);
- if (!colortable) {
- return False; /* out of memory */
- }
- found = TypeCallocN(char, cmap_size);
- if (!found) {
- free(colortable);
- return False; /* out of memory */
- }
-
- for (i = 0; i < cmap_size; i++) {
- colortable[i].pixel = (unsigned long) i;
- }
- XQueryColors(display, cmap, colortable, (int) cmap_size);
-
- /*
- * Find the color that best approximates the desired one, then
- * try to allocate that color. If that fails, it must mean that
- * the color was read-write (so we can't use it, since its owner
- * might change it) or else it was already freed. Try again,
- * over and over again, until something succeeds.
- */
- for (attempts = 0; attempts < cmap_size; attempts++) {
- closestDistance = 1e30;
- closest = 0;
- for (i = 0; i < cmap_size; i++) {
- if (!found[closest]) {
- /*
- * Use Euclidean distance in RGB space, weighted by Y (of YIQ)
- * as the objective function; this accounts for differences
- * in the color sensitivity of the eye.
- */
- tmp = .30 * (((int) def->red) - (int) colortable[i].red);
- distance = tmp * tmp;
- tmp = .61 * (((int) def->green) - (int) colortable[i].green);
- distance += tmp * tmp;
- tmp = .11 * (((int) def->blue) - (int) colortable[i].blue);
- distance += tmp * tmp;
- if (distance < closestDistance) {
- closest = i;
- closestDistance = distance;
- }
- }
- }
- if (XAllocColor(display, cmap, &colortable[closest]) != 0) {
- *def = colortable[closest];
- break;
- }
- found[closest] = True; /* Don't look at this entry again */
- }
-
- free(colortable);
- free(found);
- if (attempts < cmap_size) {
- return True; /* Got a closest matching color */
- } else {
- return False; /* Couldn't allocate a near match */
- }
-}
-
-static Bool
-AllocateAnsiColor(XtermWidget pTerm,
- ColorRes * res,
- char *spec)
-{
- XColor def;
- TScreen *screen = &pTerm->screen;
- Colormap cmap = pTerm->core.colormap;
-
- if (XParseColor(screen->display, cmap, spec, &def)
- && (XAllocColor(screen->display, cmap, &def)
- || find_closest_color(screen->display, cmap, &def))) {
- SET_COLOR_RES(res, def.pixel);
- TRACE(("AllocateAnsiColor[%d] %s (pixel %#lx)\n",
- (res - screen->Acolors), spec, def.pixel));
-#if OPT_COLOR_RES
- res->mode = True;
-#endif
- return (True);
- }
- TRACE(("AllocateAnsiColor %s (failed)\n", spec));
- return (False);
-}
-
-#if OPT_COLOR_RES
-Pixel
-xtermGetColorRes(ColorRes * res)
-{
- Pixel result = 0;
-
- if (res->mode) {
- result = res->value;
- } else {
- TRACE(("xtermGetColorRes for Acolors[%d]\n",
- res - term->screen.Acolors));
-
- if (res >= term->screen.Acolors) {
- assert(res - term->screen.Acolors < MAXCOLORS);
-
- if (!AllocateAnsiColor(term, res, res->resource)) {
- res->value = term->screen.Tcolors[TEXT_FG].value;
- res->mode = -True;
- fprintf(stderr,
- "%s: Cannot allocate color %s\n",
- xterm_name,
- NonNull(res->resource));
- }
- result = res->value;
- } else {
- result = 0;
- }
- }
- return result;
-}
-#endif
-
-static Bool
-ChangeAnsiColorRequest(XtermWidget pTerm,
- char *buf,
- int final)
-{
- char *name;
- int color;
- int r = False;
-
- TRACE(("ChangeAnsiColorRequest string='%s'\n", buf));
-
- while (buf && *buf) {
- name = strchr(buf, ';');
- if (name == NULL)
- break;
- *name = '\0';
- name++;
- color = atoi(buf);
- if (color < 0 || color >= NUM_ANSI_COLORS)
- break;
- buf = strchr(name, ';');
- if (buf) {
- *buf = '\0';
- buf++;
- }
- if (!strcmp(name, "?"))
- ReportAnsiColorRequest(pTerm, color, final);
- else {
- TRACE(("ChangeAnsiColor for Acolors[%d]\n", color));
- if (!AllocateAnsiColor(pTerm, &(pTerm->screen.Acolors[color]), name))
- break;
- /* FIXME: free old color somehow? We aren't for the other color
- * change style (dynamic colors).
- */
- r = True;
- }
- }
- if (r)
- ChangeAnsiColors(pTerm);
- return (r);
-}
-#else
-#define find_closest_color(display, cmap, def) 0
-#endif /* OPT_ISO_COLORS */
-
-#if OPT_PASTE64
-static void
-ManipulateSelectionData(TScreen * screen, char *buf, int final)
-{
-#define PDATA(a,b) { a, #b }
- static struct {
- char given;
- char *result;
- } table[] = {
- PDATA('p', PRIMARY),
- PDATA('c', CLIPBOARD),
- PDATA('0', CUT_BUFFER0),
- PDATA('1', CUT_BUFFER1),
- PDATA('2', CUT_BUFFER2),
- PDATA('3', CUT_BUFFER3),
- PDATA('4', CUT_BUFFER4),
- PDATA('5', CUT_BUFFER5),
- PDATA('6', CUT_BUFFER6),
- PDATA('7', CUT_BUFFER7),
- };
-
- char *base = buf;
- Cardinal j, n = 0;
- char **select_args = 0;
-
- TRACE(("Manipulate selection data\n"));
-
- while (*buf != ';' && *buf != '\0') {
- ++buf;
- }
-
- if (*buf == ';') {
- *buf++ = '\0';
-
- if (*base == '\0')
- base = "p0";
- if ((select_args = TypeCallocN(String, 1 + strlen(base))) == 0)
- return;
- while (*base != '\0') {
- for (j = 0; j < XtNumber(table); ++j) {
- if (*base == table[j].given) {
- select_args[n++] = table[j].result;
- TRACE(("atom[%d] %s\n", n, table[j].result));
- break;
- }
- }
- ++base;
- }
-
- if (!strcmp(buf, "?")) {
- TRACE(("Getting selection\n"));
- unparseputc1(OSC, screen->respond);
- unparseputs("52", screen->respond);
- unparseputc(';', screen->respond);
-
- unparseputs(base, screen->respond);
- unparseputc(';', screen->respond);
-
- screen->base64_paste = 1; /* Tells xtermGetSelection data is base64 encoded */
- xtermGetSelection((Widget) term, 0, select_args, n, NULL);
- unparseputc1(final, screen->respond);
- } else {
- TRACE(("Setting selection with %s\n", buf));
- ClearSelectionBuffer();
- while (*buf != '\0')
- AppendToSelectionBuffer(screen, CharOf(*buf++));
- CompleteSelection(select_args, n);
- }
- free(select_args);
- }
-}
-#endif /* OPT_PASTE64 */
-
-/***====================================================================***/
-
-void
-do_osc(Char * oscbuf, unsigned len GCC_UNUSED, int final)
-{
- TScreen *screen = &(term->screen);
- int mode;
- Char *cp;
- int state = 0;
- char *buf = 0;
-
- TRACE(("do_osc %s\n", oscbuf));
-
- /*
- * Lines should be of the form <OSC> number ; string <ST>, however
- * older xterms can accept <BEL> as a final character. We will respond
- * with the same final character as the application sends to make this
- * work better with shell scripts, which may have trouble reading an
- * <ESC><backslash>, which is the 7-bit equivalent to <ST>.
- */
- mode = 0;
- for (cp = oscbuf; *cp != '\0'; cp++) {
- switch (state) {
- case 0:
- if (isdigit(*cp)) {
- mode = 10 * mode + (*cp - '0');
- if (mode > 65535)
- return;
- break;
- }
- /* FALLTHRU */
- case 1:
- if (*cp != ';')
- return;
- state = 2;
- break;
- case 2:
- buf = (char *) cp;
- state = 3;
- /* FALLTHRU */
- default:
- if (ansi_table[CharOf(*cp)] != CASE_PRINT)
- return;
- }
- }
- if (buf == 0)
- return;
-
- switch (mode) {
- case 0: /* new icon name and title */
- Changename(buf);
- Changetitle(buf);
- break;
-
- case 1: /* new icon name only */
- Changename(buf);
- break;
-
- case 2: /* new title only */
- Changetitle(buf);
- break;
-
- case 3: /* change X property */
- ChangeXprop(buf);
- break;
-#if OPT_ISO_COLORS
- case 4:
- ChangeAnsiColorRequest(term, buf, final);
- break;
-#endif
- case 10 + TEXT_FG:
- case 10 + TEXT_BG:
- case 10 + TEXT_CURSOR:
- case 10 + MOUSE_FG:
- case 10 + MOUSE_BG:
-#if OPT_HIGHLIGHT_COLOR
- case 10 + HIGHLIGHT_BG:
-#endif
-#if OPT_TEK4014
- case 10 + TEK_FG:
- case 10 + TEK_BG:
- case 10 + TEK_CURSOR:
-#endif
- if (term->misc.dynamicColors)
- ChangeColorsRequest(term, mode - 10, buf, final);
- break;
-
- case 30:
- case 31:
- /* reserved for Konsole (Stephan Binner <Stephan.Binner@gmx.de>) */
- break;
-
-#ifdef ALLOWLOGGING
- case 46: /* new log file */
-#ifdef ALLOWLOGFILECHANGES
- /*
- * Warning, enabling this feature allows people to overwrite
- * arbitrary files accessible to the person running xterm.
- */
- if (buf != 0
- && strcmp(buf, "?")
- && (cp = CastMallocN(char, strlen(buf)) != NULL)) {
- strcpy(cp, buf);
- if (screen->logfile)
- free(screen->logfile);
- screen->logfile = cp;
- break;
- }
-#endif
- Bell(XkbBI_Info, 0);
- Bell(XkbBI_Info, 0);
- break;
-#endif /* ALLOWLOGGING */
-
- case 50:
- if (buf != 0 && !strcmp(buf, "?")) {
- int num = screen->menu_font_number;
-
- unparseputc1(OSC, screen->respond);
- unparseputs("50", screen->respond);
-
- if ((buf = screen->MenuFontName(num)) != 0) {
- unparseputc(';', screen->respond);
- unparseputs(buf, screen->respond);
- }
- unparseputc1(final, screen->respond);
- } else if (buf != 0) {
- VTFontNames fonts;
-
- memset(&fonts, 0, sizeof(fonts));
-
- /*
- * If the font specification is a "#", followed by an
- * optional sign and optional number, lookup the
- * corresponding menu font entry.
- */
- if (*buf == '#') {
- int num = screen->menu_font_number;
- int rel = 0;
-
- if (*++buf == '+') {
- rel = 1;
- buf++;
- } else if (*buf == '-') {
- rel = -1;
- buf++;
- }
-
- if (isdigit(CharOf(*buf))) {
- int val = atoi(buf);
- if (rel > 0)
- rel = val;
- else if (rel < 0)
- rel = -val;
- else
- num = val;
- } else if (rel == 0) {
- num = 0;
- }
-
- if (rel != 0)
- num = lookupRelativeFontSize(screen,
- screen->menu_font_number, rel);
-
- if (num < 0
- || num > fontMenu_lastBuiltin
- || (buf = screen->MenuFontName(num)) == 0) {
- Bell(XkbBI_MinorError, 0);
- break;
- }
- }
- fonts.f_n = buf;
- SetVTFont(term, fontMenu_fontescape, True, &fonts);
- }
- break;
- case 51:
- /* reserved for Emacs shell (Rob Mayoff <mayoff@dqd.com>) */
- break;
-
-#if OPT_PASTE64
- case 52:
- if (screen->allowWindowOps && (buf != 0))
- ManipulateSelectionData(screen, buf, final);
- break;
-#endif
- /*
- * One could write code to send back the display and host names,
- * but that could potentially open a fairly nasty security hole.
- */
- }
-}
-
-#ifdef SunXK_F36
-#define MAX_UDK 37
-#else
-#define MAX_UDK 35
-#endif
-static struct {
- char *str;
- int len;
-} user_keys[MAX_UDK];
-
-/*
- * Parse one nibble of a hex byte from the OSC string. We have removed the
- * string-terminator (replacing it with a null), so the only other delimiter
- * that is expected is semicolon. Ignore other characters (Ray Neuman says
- * "real" terminals accept commas in the string definitions).
- */
-static int
-udk_value(char **cp)
-{
- int c;
-
- for (;;) {
- if ((c = **cp) != '\0')
- *cp = *cp + 1;
- if (c == ';' || c == '\0')
- return -1;
- if (c >= '0' && c <= '9')
- return c - '0';
- if (c >= 'A' && c <= 'F')
- return c - 'A' + 10;
- if (c >= 'a' && c <= 'f')
- return c - 'a' + 10;
- }
-}
-
-void
-reset_decudk(void)
-{
- int n;
- for (n = 0; n < MAX_UDK; n++) {
- if (user_keys[n].str != 0) {
- free(user_keys[n].str);
- user_keys[n].str = 0;
- user_keys[n].len = 0;
- }
- }
-}
-
-/*
- * Parse the data for DECUDK (user-defined keys).
- */
-static void
-parse_decudk(char *cp)
-{
- while (*cp) {
- char *base = cp;
- char *str = CastMallocN(char, strlen(cp) + 1);
- unsigned key = 0;
- int lo, hi;
- int len = 0;
-
- while (isdigit(CharOf(*cp)))
- key = (key * 10) + (*cp++ - '0');
- if (*cp == '/') {
- cp++;
- while ((hi = udk_value(&cp)) >= 0
- && (lo = udk_value(&cp)) >= 0) {
- str[len++] = (hi << 4) | lo;
- }
- }
- if (len > 0 && key < MAX_UDK) {
- if (user_keys[key].str != 0)
- free(user_keys[key].str);
- user_keys[key].str = str;
- user_keys[key].len = len;
- } else {
- free(str);
- }
- if (*cp == ';')
- cp++;
- if (cp == base) /* badly-formed sequence - bail out */
- break;
- }
-}
-
-#if OPT_TRACE
-#define SOFT_WIDE 10
-#define SOFT_HIGH 20
-
-static void
-parse_decdld(ANSI * params, char *string)
-{
- char DscsName[8];
- int len;
- int Pfn = params->a_param[0];
- int Pcn = params->a_param[1];
- int Pe = params->a_param[2];
- int Pcmw = params->a_param[3];
- int Pw = params->a_param[4];
- int Pt = params->a_param[5];
- int Pcmh = params->a_param[6];
- int Pcss = params->a_param[7];
-
- int start_char = Pcn + 0x20;
- int char_wide = ((Pcmw == 0)
- ? (Pcss ? 6 : 10)
- : (Pcmw > 4
- ? Pcmw
- : (Pcmw + 3)));
- int char_high = ((Pcmh == 0)
- ? ((Pcmw >= 2 || Pcmw <= 4)
- ? 10
- : 20)
- : Pcmh);
- Char ch;
- Char bits[SOFT_HIGH][SOFT_WIDE];
- Bool first = True;
- Bool prior = False;
- int row = 0, col = 0;
-
- TRACE(("Parsing DECDLD\n"));
- TRACE((" font number %d\n", Pfn));
- TRACE((" starting char %d\n", Pcn));
- TRACE((" erase control %d\n", Pe));
- TRACE((" char-width %d\n", Pcmw));
- TRACE((" font-width %d\n", Pw));
- TRACE((" text/full %d\n", Pt));
- TRACE((" char-height %d\n", Pcmh));
- TRACE((" charset-size %d\n", Pcss));
-
- if (Pfn > 1
- || Pcn > 95
- || Pe > 2
- || Pcmw > 10
- || Pcmw == 1
- || Pt > 2
- || Pcmh > 20
- || Pcss > 1
- || char_wide > SOFT_WIDE
- || char_high > SOFT_HIGH) {
- TRACE(("DECDLD illegal parameter\n"));
- return;
- }
-
- len = 0;
- while (*string != '\0') {
- ch = CharOf(*string++);
- if (ch >= 0x20 && ch <= 0x2f) {
- if (len < 2)
- DscsName[len++] = ch;
- } else if (ch >= 0x30 && ch <= 0x7e) {
- DscsName[len++] = ch;
- break;
- }
- }
- DscsName[len] = 0;
- TRACE((" Dscs name '%s'\n", DscsName));
-
- TRACE((" character matrix %dx%d\n", char_high, char_wide));
- while (*string != '\0') {
- if (first) {
- TRACE(("Char %d:\n", start_char));
- if (prior) {
- for (row = 0; row < char_high; ++row) {
- TRACE(("%.*s\n", char_wide, bits[row]));
- }
- }
- prior = False;
- first = False;
- for (row = 0; row < char_high; ++row) {
- for (col = 0; col < char_wide; ++col) {
- bits[row][col] = '.';
- }
- }
- row = col = 0;
- }
- ch = CharOf(*string++);
- if (ch >= 0x3f && ch <= 0x7e) {
- int n;
-
- ch -= 0x3f;
- for (n = 0; n < 6; ++n) {
- bits[row + n][col] = (ch & (1 << n)) ? '*' : '.';
- }
- col += 1;
- prior = True;
- } else if (ch == '/') {
- row += 6;
- col = 0;
- } else if (ch == ';') {
- first = True;
- ++start_char;
- }
- }
-}
-#else
-#define parse_decdld(p,q) /* nothing */
-#endif
-
-/*
- * Parse numeric parameters. Normally we use a state machine to simplify
- * interspersing with control characters, but have the string already.
- */
-static void
-parse_ansi_params(ANSI * params, char **string)
-{
- char *cp = *string;
- short nparam = 0;
-
- memset(params, 0, sizeof(*params));
- while (*cp != '\0') {
- Char ch = CharOf(*cp++);
-
- if (isdigit(ch)) {
- if (nparam < NPARAM) {
- params->a_param[nparam] *= 10;
- params->a_param[nparam] += (ch - '0');
- }
- } else if (ch == ';') {
- if (++nparam < NPARAM)
- params->a_nparam = nparam;
- } else if (ch < 32) {
- ;
- } else {
- /* should be 0x30 to 0x7e */
- params->a_final = ch;
- break;
- }
- }
- *string = cp;
-}
-
-void
-do_dcs(Char * dcsbuf, size_t dcslen)
-{
- TScreen *screen = &term->screen;
- char reply[BUFSIZ];
- char *cp = (char *) dcsbuf;
- Bool okay;
- ANSI params;
-
- TRACE(("do_dcs(%s:%d)\n", (char *) dcsbuf, dcslen));
-
- if (dcslen != strlen(cp))
- /* shouldn't have nulls in the string */
- return;
-
- switch (*cp) { /* intermediate character, or parameter */
- case '$': /* DECRQSS */
- okay = True;
-
- cp++;
- if (*cp++ == 'q') {
- if (!strcmp(cp, "\"q")) { /* DECSCA */
- sprintf(reply, "%d%s",
- (screen->protected_mode == DEC_PROTECT)
- && (term->flags & PROTECTED) ? 1 : 0,
- cp);
- } else if (!strcmp(cp, "\"p")) { /* DECSCL */
- sprintf(reply, "%d%s%s",
- (screen->vtXX_level ?
- screen->vtXX_level : 1) + 60,
- (screen->vtXX_level >= 2)
- ? (screen->control_eight_bits
- ? ";0" : ";1")
- : "",
- cp);
- } else if (!strcmp(cp, "r")) { /* DECSTBM */
- sprintf(reply, "%d;%dr",
- screen->top_marg + 1,
- screen->bot_marg + 1);
- } else if (!strcmp(cp, "m")) { /* SGR */
- strcpy(reply, "0");
- if (term->flags & BOLD)
- strcat(reply, ";1");
- if (term->flags & UNDERLINE)
- strcat(reply, ";4");
- if (term->flags & BLINK)
- strcat(reply, ";5");
- if (term->flags & INVERSE)
- strcat(reply, ";7");
- if (term->flags & INVISIBLE)
- strcat(reply, ";8");
- if_OPT_EXT_COLORS(screen, {
- if (term->flags & FG_COLOR) {
- if (term->cur_foreground >= 16)
- sprintf(reply + strlen(reply),
- ";38;5;%d", term->cur_foreground);
- else
- sprintf(reply + strlen(reply),
- ";%d%d",
- term->cur_foreground >= 8 ? 9 : 3,
- term->cur_foreground >= 8 ?
- term->cur_foreground - 8 :
- term->cur_foreground);
- }
- if (term->flags & BG_COLOR) {
- if (term->cur_background >= 16)
- sprintf(reply + strlen(reply),
- ";48;5;%d", term->cur_foreground);
- else
- sprintf(reply + strlen(reply),
- ";%d%d",
- term->cur_background >= 8 ? 10 : 4,
- term->cur_background >= 8 ?
- term->cur_background - 8 :
- term->cur_background);
- }
- });
- if_OPT_ISO_TRADITIONAL_COLORS(screen, {
- if (term->flags & FG_COLOR)
- sprintf(reply + strlen(reply),
- ";%d%d",
- term->cur_foreground >= 8 ? 9 : 3,
- term->cur_foreground >= 8 ?
- term->cur_foreground - 8 :
- term->cur_foreground);
- if (term->flags & BG_COLOR)
- sprintf(reply + strlen(reply),
- ";%d%d",
- term->cur_background >= 8 ? 10 : 4,
- term->cur_background >= 8 ?
- term->cur_background - 8 :
- term->cur_background);
- });
- strcat(reply, "m");
- } else
- okay = False;
-
- unparseputc1(DCS, screen->respond);
- unparseputc(okay ? '1' : '0', screen->respond);
- unparseputc('$', screen->respond);
- unparseputc('r', screen->respond);
- if (okay)
- cp = reply;
- unparseputs(cp, screen->respond);
- unparseputc1(ST, screen->respond);
- } else {
- unparseputc(CAN, screen->respond);
- }
- break;
-#if OPT_TCAP_QUERY
- case '+':
- cp++;
- if (*cp == 'q') {
- unsigned state;
- int code;
- char *tmp;
- char *parsed = ++cp;
-
- unparseputc1(DCS, screen->respond);
-
- code = xtermcapKeycode(&parsed, &state);
- unparseputc(code >= 0 ? '1' : '0', screen->respond);
-
- unparseputc('+', screen->respond);
- unparseputc('r', screen->respond);
-
- while (*cp != 0) {
- if (cp == parsed)
- break; /* no data found, error */
-
- for (tmp = cp; tmp != parsed; ++tmp)
- unparseputc(*tmp, screen->respond);
-
- if (code >= 0) {
- unparseputc('=', screen->respond);
- screen->tc_query = code;
- /* XK_COLORS is a fake code for the "Co" entry (maximum
- * number of colors) */
- if (code == XK_COLORS) {
-# if OPT_256_COLORS
- unparseputc('2', screen->respond);
- unparseputc('5', screen->respond);
- unparseputc('6', screen->respond);
-# elif OPT_88_COLORS
- unparseputc('8', screen->respond);
- unparseputc('8', screen->respond);
-# else
- unparseputc('1', screen->respond);
- unparseputc('6', screen->respond);
-# endif
- } else {
- XKeyEvent event;
- event.state = state;
- Input(&(term->keyboard), screen, &event, False);
- }
- screen->tc_query = -1;
- } else {
- break; /* no match found, error */
- }
-
- cp = parsed;
- if (*parsed == ';') {
- unparseputc(*parsed++, screen->respond);
- cp = parsed;
- code = xtermcapKeycode(&parsed, &state);
- }
- }
- unparseputc1(ST, screen->respond);
- }
- break;
-#endif
- default:
- parse_ansi_params(&params, &cp);
- switch (params.a_final) {
- case '|': /* DECUDK */
- if (params.a_param[0] == 0)
- reset_decudk();
- parse_decudk(cp);
- break;
- case '{': /* DECDLD */
- parse_decdld(&params, cp);
- break;
- }
- break;
- }
-}
-
-char *
-udk_lookup(int keycode, int *len)
-{
- if (keycode >= 0 && keycode < MAX_UDK) {
- *len = user_keys[keycode].len;
- return user_keys[keycode].str;
- }
- return 0;
-}
-
-static void
-ChangeGroup(String attribute, char *value)
-{
- Arg args[1];
- const char *name = (value != 0) ? (char *) value : "";
- TScreen *screen = &term->screen;
- Widget w = CURRENT_EMU(screen);
- Widget top = SHELL_OF(w);
-
- TRACE(("ChangeGroup(attribute=%s, value=%s)\n", attribute, name));
-
-#if OPT_WIDE_CHARS
- /*
- * Title strings are limited to ISO-8859-1, which is consistent with the
- * printable data in sos_table. However, if we're running in UTF-8 mode,
- * it is likely that non-ASCII text in the string will be rejected because
- * it is not printable in the current locale. So we convert it to UTF-8,
- * allowing the X library to convert it back.
- */
- if (xtermEnvUTF8()) {
- int n;
- unsigned limit = strlen(name);
-
- if (limit < 1024) {
- for (n = 0; name[n] != '\0'; ++n) {
- if (CharOf(name[n]) > 127) {
- static Char *converted;
- if (converted != 0)
- free(converted);
- if ((converted = TypeMallocN(Char, 1 + (5 * limit))) != 0) {
- Char *temp = converted;
- while (*name != 0) {
- temp = convertToUTF8(temp, CharOf(*name));
- ++name;
- }
- *temp = 0;
- name = (const char *) converted;
- }
- break;
- }
- }
- }
- }
-#endif
-
-#if OPT_SAME_NAME
- /* If the attribute isn't going to change, then don't bother... */
-
- if (sameName) {
- char *buf;
- XtSetArg(args[0], attribute, &buf);
- XtGetValues(top, args, 1);
- if (strcmp(name, buf) == 0)
- return;
- }
-#endif /* OPT_SAME_NAME */
-
- XtSetArg(args[0], attribute, name);
- XtSetValues(top, args, 1);
-}
-
-void
-Changename(char *name)
-{
- if (name == 0)
- name = "";
-#if OPT_ZICONBEEP /* If warning should be given then give it */
- if (zIconBeep && zIconBeep_flagged) {
- char *newname = CastMallocN(char, strlen(name) + 4);
- if (!newname) {
- fprintf(stderr, "malloc failed in Changename\n");
- return;
- }
- strcpy(newname, "*** ");
- strcat(newname, name);
- ChangeGroup(XtNiconName, newname);
- free(newname);
- } else
-#endif /* OPT_ZICONBEEP */
- ChangeGroup(XtNiconName, name);
-}
-
-void
-Changetitle(char *name)
-{
- ChangeGroup(XtNtitle, name);
-}
-
-#define Strlen(s) strlen((char *)(s))
-
-void
-ChangeXprop(char *buf)
-{
- Display *dpy = XtDisplay(toplevel);
- Window w = XtWindow(toplevel);
- XTextProperty text_prop;
- Atom aprop;
- Char *pchEndPropName = (Char *) strchr(buf, '=');
-
- if (pchEndPropName)
- *pchEndPropName = '\0';
- aprop = XInternAtom(dpy, buf, False);
- if (pchEndPropName == NULL) {
- /* no "=value" given, so delete the property */
- XDeleteProperty(dpy, w, aprop);
- } else {
- text_prop.value = pchEndPropName + 1;
- text_prop.encoding = XA_STRING;
- text_prop.format = 8;
- text_prop.nitems = Strlen(text_prop.value);
- XSetTextProperty(dpy, w, &text_prop, aprop);
- }
-}
-
-/***====================================================================***/
-
-static ScrnColors *pOldColors = NULL;
-
-static Bool
-GetOldColors(XtermWidget pTerm)
-{
- int i;
- if (pOldColors == NULL) {
- pOldColors = (ScrnColors *) XtMalloc(sizeof(ScrnColors));
- if (pOldColors == NULL) {
- fprintf(stderr, "allocation failure in GetOldColors\n");
- return (False);
- }
- pOldColors->which = 0;
- for (i = 0; i < NCOLORS; i++) {
- pOldColors->colors[i] = 0;
- pOldColors->names[i] = NULL;
- }
- GetColors(pTerm, pOldColors);
- }
- return (True);
-}
-
-static int
-oppositeColor(int n)
-{
- switch (n) {
- case TEXT_FG:
- n = TEXT_BG;
- break;
- case TEXT_BG:
- n = TEXT_FG;
- break;
- case MOUSE_FG:
- n = MOUSE_BG;
- break;
- case MOUSE_BG:
- n = MOUSE_FG;
- break;
-#if OPT_TEK4014
- case TEK_FG:
- n = TEK_BG;
- break;
- case TEK_BG:
- n = TEK_FG;
- break;
-#endif
- default:
- break;
- }
- return n;
-}
-
-static void
-ReportColorRequest(XtermWidget pTerm, int ndx, int final)
-{
- XColor color;
- Colormap cmap = pTerm->core.colormap;
- char buffer[80];
-
- /*
- * ChangeColorsRequest() has "always" chosen the opposite color when
- * reverse-video is set. Report this as the original color index, but
- * reporting the opposite color which would be used.
- */
- int i = (term->misc.re_verse) ? oppositeColor(ndx) : ndx;
-
- GetOldColors(pTerm);
- color.pixel = pOldColors->colors[ndx];
- XQueryColor(term->screen.display, cmap, &color);
- sprintf(buffer, "%d;rgb:%04x/%04x/%04x", i + 10,
- color.red,
- color.green,
- color.blue);
- TRACE(("ReportColors %d: %#lx as %s\n", ndx, pOldColors->colors[ndx], buffer));
- unparseputc1(OSC, pTerm->screen.respond);
- unparseputs(buffer, pTerm->screen.respond);
- unparseputc1(final, pTerm->screen.respond);
-}
-
-static Bool
-UpdateOldColors(XtermWidget pTerm GCC_UNUSED, ScrnColors * pNew)
-{
- int i;
-
- /* if we were going to free old colors, this would be the place to
- * do it. I've decided not to (for now), because it seems likely
- * that we'd have a small set of colors we use over and over, and that
- * we could save some overhead this way. The only case in which this
- * (clearly) fails is if someone is trying a boatload of colors, in
- * which case they can restart xterm
- */
- for (i = 0; i < NCOLORS; i++) {
- if (COLOR_DEFINED(pNew, i)) {
- if (pOldColors->names[i] != NULL) {
- XtFree(pOldColors->names[i]);
- pOldColors->names[i] = NULL;
- }
- if (pNew->names[i]) {
- pOldColors->names[i] = pNew->names[i];
- }
- pOldColors->colors[i] = pNew->colors[i];
- }
- }
- return (True);
-}
-
-void
-ReverseOldColors(void)
-{
- ScrnColors *pOld = pOldColors;
- Pixel tmpPix;
- char *tmpName;
-
- if (pOld) {
- /* change text cursor, if necesary */
- if (pOld->colors[TEXT_CURSOR] == pOld->colors[TEXT_FG]) {
- pOld->colors[TEXT_CURSOR] = pOld->colors[TEXT_BG];
- if (pOld->names[TEXT_CURSOR]) {
- XtFree(pOldColors->names[TEXT_CURSOR]);
- pOld->names[TEXT_CURSOR] = NULL;
- }
- if (pOld->names[TEXT_BG]) {
- tmpName = XtMalloc(strlen(pOld->names[TEXT_BG]) + 1);
- if (tmpName) {
- strcpy(tmpName, pOld->names[TEXT_BG]);
- pOld->names[TEXT_CURSOR] = tmpName;
- }
- }
- }
-
- EXCHANGE(pOld->colors[TEXT_FG], pOld->colors[TEXT_BG], tmpPix);
- EXCHANGE(pOld->names[TEXT_FG], pOld->names[TEXT_BG], tmpName);
-
- EXCHANGE(pOld->colors[MOUSE_FG], pOld->colors[MOUSE_BG], tmpPix);
- EXCHANGE(pOld->names[MOUSE_FG], pOld->names[MOUSE_BG], tmpName);
-
-#if OPT_TEK4014
- EXCHANGE(pOld->colors[TEK_FG], pOld->colors[TEK_BG], tmpPix);
- EXCHANGE(pOld->names[TEK_FG], pOld->names[TEK_BG], tmpName);
-#endif
- }
- return;
-}
-
-Bool
-AllocateTermColor(XtermWidget pTerm,
- ScrnColors * pNew,
- int ndx,
- const char *name)
-{
- XColor def;
- TScreen *screen = &pTerm->screen;
- Colormap cmap = pTerm->core.colormap;
- char *newName;
-
- if (XParseColor(screen->display, cmap, name, &def)
- && (XAllocColor(screen->display, cmap, &def)
- || find_closest_color(screen->display, cmap, &def))
- && (newName = XtMalloc(strlen(name) + 1)) != 0) {
- SET_COLOR_VALUE(pNew, ndx, def.pixel);
- strcpy(newName, name);
- SET_COLOR_NAME(pNew, ndx, newName);
- TRACE(("AllocateTermColor #%d: %s (pixel %#lx)\n", ndx, newName, def.pixel));
- return (True);
- }
- TRACE(("AllocateTermColor #%d: %s (failed)\n", ndx, name));
- return (False);
-}
-
-static Bool
-ChangeColorsRequest(XtermWidget pTerm,
- int start,
- char *names,
- int final)
-{
- char *thisName;
- ScrnColors newColors;
- int i, ndx;
-
- TRACE(("ChangeColorsRequest start=%d, names='%s'\n", start, names));
-
- if ((pOldColors == NULL)
- && (!GetOldColors(pTerm))) {
- return (False);
- }
- newColors.which = 0;
- for (i = 0; i < NCOLORS; i++) {
- newColors.names[i] = NULL;
- }
- for (i = start; i < NCOLORS; i++) {
- if (term->misc.re_verse)
- ndx = oppositeColor(i);
- else
- ndx = i;
- if ((names == NULL) || (names[0] == '\0')) {
- newColors.names[ndx] = NULL;
- } else {
- if (names[0] == ';')
- thisName = NULL;
- else
- thisName = names;
- names = strchr(names, ';');
- if (names != NULL) {
- *names = '\0';
- names++;
- }
- if (thisName != 0 && !strcmp(thisName, "?"))
- ReportColorRequest(pTerm, ndx, final);
- else if (!pOldColors->names[ndx]
- || (thisName
- && strcmp(thisName, pOldColors->names[ndx]))) {
- AllocateTermColor(pTerm, &newColors, ndx, thisName);
- }
- }
- }
-
- if (newColors.which == 0)
- return (True);
-
- ChangeColors(pTerm, &newColors);
- UpdateOldColors(pTerm, &newColors);
- return (True);
-}
-
-/***====================================================================***/
-
-#ifndef DEBUG
-/* ARGSUSED */
-#endif
-void
-Panic(char *s GCC_UNUSED, int a GCC_UNUSED)
-{
-#ifdef DEBUG
- if (debug) {
- fprintf(stderr, "%s: PANIC!\t", xterm_name);
- fprintf(stderr, s, a);
- fputs("\r\n", stderr);
- fflush(stderr);
- }
-#endif /* DEBUG */
-}
-
-char *
-SysErrorMsg(int n)
-{
- static char unknown[] = "unknown error";
- char *s = strerror(n);
- return s ? s : unknown;
-}
-
-void
-SysError(int i)
-{
- static const char *table[] =
- {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- ,"main: ioctl() failed on FIONBIO" /* 11 */
- ,"main: ioctl() failed on F_GETFL" /* 12 */
- ,"main: ioctl() failed on F_SETFL" /* 13 */
- ,"spawn: open() failed on /dev/tty" /* 14 */
- ,"spawn: ioctl() failed on TIOCGETP" /* 15 */
- ,0
- ,"spawn: ptsname() failed" /* 17 */
- ,"spawn: open() failed on ptsname" /* 18 */
- ,"spawn: ioctl() failed on I_PUSH/\"ptem\"" /* 19 */
- ,"spawn: ioctl() failed on I_PUSH/\"consem\"" /* 20 */
- ,"spawn: ioctl() failed on I_PUSH/\"ldterm\"" /* 21 */
- ,"spawn: ioctl() failed on I_PUSH/\"ttcompat\"" /* 22 */
- ,"spawn: ioctl() failed on TIOCSETP" /* 23 */
- ,"spawn: ioctl() failed on TIOCSETC" /* 24 */
- ,"spawn: ioctl() failed on TIOCSETD" /* 25 */
- ,"spawn: ioctl() failed on TIOCSLTC" /* 26 */
- ,"spawn: ioctl() failed on TIOCLSET" /* 27 */
- ,"spawn: initgroups() failed" /* 28 */
- ,"spawn: fork() failed" /* 29 */
- ,"spawn: exec() failed" /* 30 */
- ,0
- ,"get_pty: not enough ptys" /* 32 */
- ,0
- ,"waiting for initial map" /* 34 */
- ,"spawn: setuid() failed" /* 35 */
- ,"spawn: can't initialize window" /* 36 */
- ,0, 0, 0, 0, 0, 0, 0, 0, 0
- ,"spawn: ioctl() failed on TIOCKSET" /* 46 */
- ,"spawn: ioctl() failed on TIOCKSETC" /* 47 */
- ,"spawn: realloc of ttydev failed" /* 48 */
- ,"luit: command-line malloc failed" /* 49 */
- ,"in_put: select() failed" /* 50 */
- ,0, 0, 0
- ,"VTInit: can't initialize window" /* 54 */
- ,0, 0
- ,"HandleKeymapChange: malloc failed" /* 57 */
- ,0, 0
- ,"Tinput: select() failed" /* 60 */
- ,0, 0, 0
- ,"TekInit: can't initialize window" /* 64 */
- ,0, 0, 0, 0, 0, 0
- ,"SaltTextAway: malloc() failed" /* 71 */
- ,0, 0, 0, 0, 0, 0, 0, 0
- ,"StartLog: exec() failed" /* 80 */
- ,0, 0
- ,"xerror: XError event" /* 83 */
- ,"xioerror: X I/O error" /* 84 */
- ,0, 0, 0, 0, 0
- ,"Alloc: calloc() failed on base" /* 90 */
- ,"Alloc: calloc() failed on rows" /* 91 */
- ,"ScreenResize: realloc() failed on alt base" /* 92 */
- ,0, 0, 0
- ,"ScreenResize: malloc() or realloc() failed" /* 96 */
- ,0, 0, 0, 0, 0
- ,"ScrnPointers: malloc/realloc() failed" /* 102 */
- ,0, 0, 0, 0, 0, 0, 0
- ,"ScrollBarOn: realloc() failed on base" /* 110 */
- ,"ScrollBarOn: realloc() failed on rows" /* 111 */
- ,0, 0, 0, 0, 0, 0, 0, 0, 0
- ,"my_memmove: malloc/realloc failed" /* 121 */
- };
- int oerrno;
-
- oerrno = errno;
- fprintf(stderr, "%s: Error %d, errno %d: ", xterm_name, i, oerrno);
- fprintf(stderr, "%s\n", SysErrorMsg(oerrno));
- if ((Cardinal) i < XtNumber(table) && table[i] != 0) {
- fprintf(stderr, "Reason: %s\n", table[i]);
- }
- Cleanup(i);
-}
-
-static void
-Sleep(int msec)
-{
- static struct timeval select_timeout;
-
- select_timeout.tv_sec = 0;
- select_timeout.tv_usec = msec * 1000;
- select(0, 0, 0, 0, &select_timeout);
-}
-
-/*
- * cleanup by sending SIGHUP to client processes
- */
-void
-Cleanup(int code)
-{
- static Bool cleaning;
- TScreen *screen = &term->screen;
-
- /*
- * Process "-hold" and session cleanup only for a normal exit.
- */
- if (code == 0) {
- if (cleaning) {
- hold_screen = 0;
- return;
- }
-
- cleaning = True;
- need_cleanup = FALSE;
-
- TRACE(("Cleanup %d\n", code));
-
- if (hold_screen) {
- hold_screen = 2;
- while (hold_screen) {
- xevents();
- Sleep(10);
- }
- }
-#if OPT_SESSION_MGT
- if (resource.sessionMgt) {
- XtVaSetValues(toplevel,
- XtNjoinSession, False,
- (XtPointer *) 0);
- }
-#endif
- }
-
- if (screen->pid > 1) {
- (void) kill_process_group(screen->pid, SIGHUP);
- }
- Exit(code);
-}
-
-#ifndef VMS
-char *
-xtermFindShell(char *leaf, Bool warning)
-{
- char *s;
- char *d;
- char *tmp;
- char *result = leaf;
-
- TRACE(("xtermFindShell(%s)\n", leaf));
- if (*result != '\0' && strchr("+/-", *result) == 0) {
- /* find it in $PATH */
- if ((s = getenv("PATH")) != 0) {
- if ((tmp = TypeMallocN(char, strlen(leaf) + strlen(s) + 1)) != 0) {
- Bool found = False;
- while (*s != '\0') {
- strcpy(tmp, s);
- for (d = tmp;; ++d) {
- if (*d == ':' || *d == '\0') {
- int skip = (*d != '\0');
- *d = '/';
- strcpy(d + 1, leaf);
- if (skip)
- ++d;
- s += (d - tmp);
- if (*tmp == '/'
- && strstr(tmp, "..") == 0
- && access(tmp, X_OK) == 0) {
- result = x_strdup(tmp);
- found = True;
- }
- break;
- }
- if (found)
- break;
- }
- if (found)
- break;
- }
- free(tmp);
- }
- }
- }
- TRACE(("...xtermFindShell(%s)\n", result));
- if (*result != '/'
- || strstr(result, "..") != 0
- || access(result, X_OK) != 0) {
- if (warning)
- fprintf(stderr, "No absolute path found for shell: %s\n", result);
- result = 0;
- }
- return result;
-}
-#endif /* VMS */
-
-/*
- * sets the value of var to be arg in the Unix 4.2 BSD environment env.
- * Var should end with '=' (bindings are of the form "var=value").
- * This procedure assumes the memory for the first level of environ
- * was allocated using calloc, with enough extra room at the end so not
- * to have to do a realloc().
- */
-void
-xtermSetenv(char *var, char *value)
-{
- if (value != 0) {
- int envindex = 0;
- size_t len = strlen(var);
-
- TRACE(("xtermSetenv(var=%s, value=%s)\n", var, value));
-
- while (environ[envindex] != NULL) {
- if (strncmp(environ[envindex], var, len) == 0) {
- /* found it */
- environ[envindex] = CastMallocN(char, len + strlen(value));
- strcpy(environ[envindex], var);
- strcat(environ[envindex], value);
- return;
- }
- envindex++;
- }
-
- TRACE(("...expanding env to %d\n", envindex + 1));
-
- environ[envindex] = CastMallocN(char, len + strlen(value));
- (void) strcpy(environ[envindex], var);
- strcat(environ[envindex], value);
- environ[++envindex] = NULL;
- }
-}
-
-/*ARGSUSED*/
-int
-xerror(Display * d, XErrorEvent * ev)
-{
- fprintf(stderr, "%s: warning, error event received:\n", xterm_name);
- (void) XmuPrintDefaultErrorMessage(d, ev, stderr);
- Exit(ERROR_XERROR);
- return 0; /* appease the compiler */
-}
-
-/*ARGSUSED*/
-int
-xioerror(Display * dpy)
-{
- int the_error = errno;
-
- (void) fprintf(stderr,
- "%s: fatal IO error %d (%s) or KillClient on X server \"%s\"\r\n",
- xterm_name, the_error, SysErrorMsg(the_error),
- DisplayString(dpy));
-
- Exit(ERROR_XIOERROR);
- return 0; /* appease the compiler */
-}
-
-void
-xt_error(String message)
-{
- char *ptr;
-
- (void) fprintf(stderr, "%s Xt error: %s\n", ProgramName, message);
-
- /*
- * Check for the obvious - Xt does a poor job of reporting this.
- */
- if ((ptr = getenv("DISPLAY")) == 0 || *x_strtrim(ptr) == '\0') {
- fprintf(stderr, "%s: DISPLAY is not set\n", ProgramName);
- }
- exit(1);
-}
-
-int
-XStrCmp(char *s1, char *s2)
-{
- if (s1 && s2)
- return (strcmp(s1, s2));
- if (s1 && *s1)
- return (1);
- if (s2 && *s2)
- return (-1);
- return (0);
-}
-
-#if OPT_TEK4014
-static void
-withdraw_window(Display * dpy, Window w, int scr)
-{
- TRACE(("withdraw_window %#lx\n", (long) w));
- (void) XmuUpdateMapHints(dpy, w, NULL);
- XWithdrawWindow(dpy, w, scr);
- return;
-}
-#endif
-
-void
-set_vt_visibility(Bool on)
-{
- TScreen *screen = &term->screen;
-
- TRACE(("set_vt_visibility(%d)\n", on));
- if (on) {
- if (!screen->Vshow && term) {
- VTInit();
- XtMapWidget(XtParent(term));
-#if OPT_TOOLBAR
- /* we need both of these during initialization */
- XtMapWidget(SHELL_OF(term));
- ShowToolbar(resource.toolBar);
-#endif
- screen->Vshow = True;
- }
- }
-#if OPT_TEK4014
- else {
- if (screen->Vshow && term) {
- withdraw_window(XtDisplay(term),
- VShellWindow,
- XScreenNumberOfScreen(XtScreen(term)));
- screen->Vshow = False;
- }
- }
- set_vthide_sensitivity();
- set_tekhide_sensitivity();
- update_vttekmode();
- update_tekshow();
- update_vtshow();
-#endif
- return;
-}
-
-#if OPT_TEK4014
-void
-set_tek_visibility(Bool on)
-{
- TScreen *screen = &term->screen;
-
- TRACE(("set_tek_visibility(%d)\n", on));
- if (on) {
- if (!screen->Tshow && (tekWidget || TekInit())) {
- Widget tekParent = SHELL_OF(tekWidget);
- XtRealizeWidget(tekParent);
- XtMapWidget(XtParent(tekWidget));
-#if OPT_TOOLBAR
- /* we need both of these during initialization */
- XtMapWidget(tekParent);
- XtMapWidget(tekWidget);
-#endif
- XtOverrideTranslations(tekParent,
- XtParseTranslationTable
- ("<Message>WM_PROTOCOLS: DeleteWindow()"));
- (void) XSetWMProtocols(XtDisplay(tekParent),
- XtWindow(tekParent),
- &wm_delete_window, 1);
- screen->Tshow = True;
- }
- } else {
- if (screen->Tshow && tekWidget) {
- withdraw_window(XtDisplay(tekWidget),
- TShellWindow,
- XScreenNumberOfScreen(XtScreen(tekWidget)));
- screen->Tshow = False;
- }
- }
- set_tekhide_sensitivity();
- set_vthide_sensitivity();
- update_vtshow();
- update_tekshow();
- update_vttekmode();
- return;
-}
-
-void
-end_tek_mode(void)
-{
- TScreen *screen = &term->screen;
-
- if (screen->TekEmu) {
- FlushLog(screen);
- longjmp(Tekend, 1);
- }
- return;
-}
-
-void
-end_vt_mode(void)
-{
- TScreen *screen = &term->screen;
-
- if (!screen->TekEmu) {
- FlushLog(screen);
- screen->TekEmu = True;
- longjmp(VTend, 1);
- }
- return;
-}
-
-void
-switch_modes(Bool tovt) /* if true, then become vt mode */
-{
- if (tovt) {
- if (TekRefresh)
- dorefresh();
- end_tek_mode(); /* WARNING: this does a longjmp... */
- } else {
- end_vt_mode(); /* WARNING: this does a longjmp... */
- }
-}
-
-void
-hide_vt_window(void)
-{
- TScreen *screen = &term->screen;
-
- set_vt_visibility(False);
- if (!screen->TekEmu)
- switch_modes(False); /* switch to tek mode */
-}
-
-void
-hide_tek_window(void)
-{
- TScreen *screen = &term->screen;
-
- set_tek_visibility(False);
- TekRefresh = (TekLink *) 0;
- if (screen->TekEmu)
- switch_modes(True); /* does longjmp to vt mode */
-}
-#endif /* OPT_TEK4014 */
-
-static const char *
-skip_punct(const char *s)
-{
- while (*s == '-' || *s == '/' || *s == '+' || *s == '#' || *s == '%') {
- ++s;
- }
- return s;
-}
-
-static int
-cmp_options(const void *a, const void *b)
-{
- const char *s1 = skip_punct(((const OptionHelp *) a)->opt);
- const char *s2 = skip_punct(((const OptionHelp *) b)->opt);
- return strcmp(s1, s2);
-}
-
-static int
-cmp_resources(const void *a, const void *b)
-{
- return strcmp(((const XrmOptionDescRec *) a)->option,
- ((const XrmOptionDescRec *) b)->option);
-}
-
-XrmOptionDescRec *
-sortedOptDescs(XrmOptionDescRec * descs, Cardinal res_count)
-{
- static XrmOptionDescRec *res_array = 0;
-
- if (res_array == 0) {
- Cardinal j;
-
- /* make a sorted index to 'resources' */
- res_array = TypeCallocN(XrmOptionDescRec, res_count);
- for (j = 0; j < res_count; j++)
- res_array[j] = descs[j];
- qsort(res_array, res_count, sizeof(*res_array), cmp_resources);
- }
- return res_array;
-}
-
-/*
- * The first time this is called, construct sorted index to the main program's
- * list of options, taking into account the on/off options which will be
- * compressed into one token. It's a lot simpler to do it this way than
- * maintain the list in sorted form with lots of ifdef's.
- */
-OptionHelp *
-sortedOpts(OptionHelp * options, XrmOptionDescRec * descs, Cardinal numDescs)
-{
- static OptionHelp *opt_array = 0;
-
- if (opt_array == 0) {
- Cardinal opt_count, j;
-#if OPT_TRACE
- Cardinal k;
- XrmOptionDescRec *res_array = sortedOptDescs(descs, numDescs);
- int code;
- char *mesg;
-#else
- (void) descs;
- (void) numDescs;
-#endif
-
- /* count 'options' and make a sorted index to it */
- for (opt_count = 0; options[opt_count].opt != 0; ++opt_count) {
- ;
- }
- opt_array = TypeCallocN(OptionHelp, opt_count + 1);
- for (j = 0; j < opt_count; j++)
- opt_array[j] = options[j];
- qsort(opt_array, opt_count, sizeof(OptionHelp), cmp_options);
-
- /* supply the "turn on/off" strings if needed */
-#if OPT_TRACE
- for (j = 0; j < opt_count; j++) {
- if (!strncmp(opt_array[j].opt, "-/+", 3)) {
- char *name = opt_array[j].opt + 3;
- for (k = 0; k < numDescs; ++k) {
- char *value = res_array[k].value;
- if (res_array[k].option[0] == '-') {
- code = -1;
- } else if (res_array[k].option[0] == '+') {
- code = 1;
- } else {
- code = 0;
- }
- if (x_strindex(opt_array[j].desc, "inhibit") != 0)
- code = -code;
- if (code != 0
- && res_array[k].value != 0
- && !strcmp(name, res_array[k].option + 1)) {
- if (((code < 0) && !strcmp(value, "on"))
- || ((code > 0) && !strcmp(value, "off"))
- || ((code > 0) && !strcmp(value, "0"))) {
- mesg = "turn on/off";
- } else {
- mesg = "turn off/on";
- }
- if (strncmp(mesg, opt_array[j].desc, strlen(mesg))) {
- if (strncmp(opt_array[j].desc, "turn ", 5)) {
- char *s = CastMallocN(char,
- strlen(mesg)
- + 1
- + strlen(opt_array[j].desc));
- if (s != 0) {
- sprintf(s, "%s %s", mesg, opt_array[j].desc);
- opt_array[j].desc = s;
- }
- } else {
- TRACE(("OOPS "));
- }
- }
- TRACE(("%s: %s %s: %s (%s)\n",
- mesg,
- res_array[k].option,
- res_array[k].value,
- opt_array[j].opt,
- opt_array[j].desc));
- break;
- }
- }
- }
- }
-#endif
- }
- return opt_array;
-}
-
-/*
- * Report the locale that xterm was started in.
- */
-char *
-xtermEnvLocale(void)
-{
- static char *result;
-
- if (result == 0) {
- if ((result = getenv("LC_ALL")) == 0 || *result == '\0')
- if ((result = getenv("LC_CTYPE")) == 0 || *result == '\0')
- if ((result = getenv("LANG")) == 0 || *result == '\0')
- result = "";
- TRACE(("xtermEnvLocale ->%s\n", result));
- }
- return result;
-}
-
-char *
-xtermEnvEncoding(void)
-{
- static char *result;
-
- if (result == 0) {
-#ifdef HAVE_LANGINFO_CODESET
- result = nl_langinfo(CODESET);
-#else
- char *locale = xtermEnvLocale();
- if (*locale == 0 || !strcmp(locale, "C") || !strcmp(locale, "POSIX")) {
- result = "ASCII";
- } else {
- result = "ISO-8859-1";
- }
-#endif
- TRACE(("xtermEnvEncoding ->%s\n", result));
- }
- return result;
-}
-
-#if OPT_WIDE_CHARS
-/*
- * Tell whether xterm was started in a locale that uses UTF-8 encoding for
- * characters. That environment is inherited by subprocesses and used in
- * various library calls.
- */
-Bool
-xtermEnvUTF8(void)
-{
- static Bool init = False;
- static Bool result = False;
-
- if (!init) {
- init = True;
-#ifdef HAVE_LANGINFO_CODESET
- result = (strcmp(xtermEnvEncoding(), "UTF-8") == 0);
-#else
- result = (strstr(xtermEnvLocale(), "UTF-8") != NULL);
-#endif
- TRACE(("xtermEnvUTF8 ->%s\n", BtoS(result)));
- }
- return result;
-}
-#endif /* OPT_WIDE_CHARS */
-
-/*
- * Returns the version-string used in the "-v' message as well as a few other
- * places. It is derived (when possible) from the __vendorversion__ symbol
- * that some newer imake configurations define.
- */
-char *
-xtermVersion(void)
-{
- static char *result;
- if (result == 0) {
- char *vendor = __vendorversion__;
- char first[BUFSIZ];
- char second[BUFSIZ];
-
- result = CastMallocN(char, strlen(vendor) + 9);
- if (result == 0)
- result = vendor;
- else {
- /* some vendors leave trash in this string */
- for (;;) {
- if (!strncmp(vendor, "Version ", 8))
- vendor += 8;
- else if (isspace(CharOf(*vendor)))
- ++vendor;
- else
- break;
- }
- if (strlen(vendor) < BUFSIZ &&
- sscanf(vendor, "%[0-9.] %[A-Za-z_0-9.]", first, second) == 2)
- sprintf(result, "%s %s(%d)", second, first, XTERM_PATCH);
- else
- sprintf(result, "%s(%d)", vendor, XTERM_PATCH);
- }
- }
- return result;
-}
diff --git a/nx-X11/programs/xterm/mkdirs.sh b/nx-X11/programs/xterm/mkdirs.sh
deleted file mode 100644
index ffe7494c4..000000000
--- a/nx-X11/programs/xterm/mkdirs.sh
+++ /dev/null
@@ -1,38 +0,0 @@
-#! /bin/sh
-# mkinstalldirs --- make directory hierarchy
-# Author: Noah Friedman <friedman@prep.ai.mit.edu>
-# Created: 1993-05-16
-# Last modified: 1994-03-25
-# Public domain
-#
-
-errstatus=0
-umask 022
-
-for file in ${1+"$@"} ; do
- set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
- shift
-
- pathcomp=
- for d in ${1+"$@"} ; do
- pathcomp="$pathcomp$d"
- case "$pathcomp" in
- -* ) pathcomp=./$pathcomp ;;
- esac
-
- if test ! -d "$pathcomp"; then
- echo "mkdir $pathcomp" 1>&2
- case "$pathcomp" in
- [abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]: )
- ;; # DOSISH systems
- * ) mkdir "$pathcomp" || errstatus=$? ;;
- esac
- fi
-
- pathcomp="$pathcomp/"
- done
-done
-
-exit $errstatus
-
-# mkinstalldirs ends here
diff --git a/nx-X11/programs/xterm/os2main.c b/nx-X11/programs/xterm/os2main.c
deleted file mode 100644
index 8ef6147a1..000000000
--- a/nx-X11/programs/xterm/os2main.c
+++ /dev/null
@@ -1,2155 +0,0 @@
-/* $XTermId: os2main.c,v 1.213 2005/11/03 13:17:28 tom Exp $ */
-
-/* removed all foreign stuff to get the code more clear (hv)
- * and did some rewrite for the obscure OS/2 environment
- */
-
-#ifndef lint
-static char *rid = "$XConsortium: main.c,v 1.227.1.2 95/06/29 18:13:15 kaleb Exp $";
-#endif /* lint */
-/* $XFree86: xc/programs/xterm/os2main.c,v 3.81 2005/11/03 13:17:28 dickey Exp $ */
-
-/***********************************************************
-
-Copyright (c) 1987, 1988 X Consortium
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of the X Consortium shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from the X Consortium.
-
-Copyright 1987, 1988 by Digital Equipment Corporation, Maynard.
-
- All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and its
-documentation for any purpose and without fee is hereby granted,
-provided that the above copyright notice appear in all copies and that
-both that copyright notice and this permission notice appear in
-supporting documentation, and that the name of Digital not be used in
-advertising or publicity pertaining to distribution of the software
-without specific, written prior permission.
-
-DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
-ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
-DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
-ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
-WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
-SOFTWARE.
-
-******************************************************************/
-
-/* os2main.c */
-#define INCL_DOSFILEMGR
-#define INCL_DOSDEVIOCTL
-#define INCL_DOSSEMAPHORES
-#ifdef __INNOTEK_LIBC__
-#define INCL_DOSDEVICES
-#endif
-#define I_NEED_OS2_H
-#include <os2.h>
-#define XTERM_MAIN
-
-#define RES_OFFSET(field) XtOffsetOf(XTERM_RESOURCE, field)
-
-#include <xterm.h>
-
-#include <X11/cursorfont.h>
-#ifdef I18N
-#include <X11/Xlocale.h>
-#endif
-
-#if OPT_TOOLBAR
-
-#if defined(HAVE_LIB_XAW)
-#include <X11/Xaw/Form.h>
-#elif defined(HAVE_LIB_XAW3D)
-#include <X11/Xaw3d/Form.h>
-#elif defined(HAVE_LIB_NEXTAW)
-#include <X11/neXtaw/Form.h>
-#elif defined(HAVE_LIB_XAWPLUS)
-#include <X11/XawPlus/Form.h>
-#endif
-
-#endif /* OPT_TOOLBAR */
-
-#include <pwd.h>
-#include <ctype.h>
-
-#include <data.h>
-#include <error.h>
-#include <menu.h>
-#include <main.h>
-#include <xstrings.h>
-#include <xterm_io.h>
-
-#if OPT_WIDE_CHARS
-#include <charclass.h>
-#endif
-
-int
-setpgrp(pid_t pid, gid_t pgid)
-{
- return 0;
-}
-
-int
-chown(const char *fn, pid_t pid, gid_t gid)
-{
- return 0;
-}
-
-char *
-ttyname(int fd)
-{
- return "/dev/tty";
-}
-
-#include <sys/stat.h>
-#include <sys/param.h> /* for NOFILE */
-#include <stdio.h>
-#include <signal.h>
-
-static SIGNAL_T reapchild(int n);
-static int spawn(void);
-static void get_terminal(void);
-static void resize(TScreen * s, char *oldtc, char *newtc);
-static void set_owner(char *device, uid_t uid, gid_t gid, mode_t mode);
-
-static Bool added_utmp_entry = False;
-
-/*
-** Ordinarily it should be okay to omit the assignment in the following
-** statement. Apparently the c89 compiler on AIX 4.1.3 has a bug, or does
-** it? Without the assignment though the compiler will init command_to_exec
-** to 0xffffffff instead of NULL; and subsequent usage, e.g. in spawn() to
-** SEGV.
-*/
-static char **command_to_exec = NULL;
-
-#if OPT_LUIT_PROG
-static char **command_to_exec_with_luit = NULL;
-#endif
-
-/* The following structures are initialized in main() in order
-** to eliminate any assumptions about the internal order of their
-** contents.
-*/
-static struct termio d_tio;
-
-/* allow use of system default characters if defined and reasonable */
-#ifndef CEOF
-#define CEOF CONTROL('D')
-#endif
-#ifndef CEOL
-#define CEOL 0
-#endif
-#ifndef CFLUSH
-#define CFLUSH CONTROL('O')
-#endif
-#ifndef CLNEXT
-#define CLNEXT CONTROL('V')
-#endif
-#ifndef CNUL
-#define CNUL 0
-#endif
-#ifndef CQUIT
-#define CQUIT CONTROL('\\')
-#endif
-#ifndef CRPRNT
-#define CRPRNT CONTROL('R')
-#endif
-#ifndef CSTART
-#define CSTART CONTROL('Q')
-#endif
-#ifndef CSTOP
-#define CSTOP CONTROL('S')
-#endif
-#ifndef CSUSP
-#define CSUSP CONTROL('Z')
-#endif
-#ifndef CSWTCH
-#define CSWTCH 0
-#endif
-#ifndef CWERASE
-#define CWERASE CONTROL('W')
-#endif
-
-/*
- * SYSV has the termio.c_cc[V] and ltchars; BSD has tchars and ltchars;
- * SVR4 has only termio.c_cc, but it includes everything from ltchars.
- * POSIX termios has termios.c_cc, which is similar to SVR4.
- */
-#define TTYMODE(name) { name, sizeof(name)-1, 0, 0 }
-static int override_tty_modes = 0;
-/* *INDENT-OFF* */
-static struct _xttymodes {
- char *name;
- size_t len;
- int set;
- Char value;
-} ttymodelist[] = {
- TTYMODE("intr"), /* tchars.t_intrc ; VINTR */
-#define XTTYMODE_intr 0
- TTYMODE("quit"), /* tchars.t_quitc ; VQUIT */
-#define XTTYMODE_quit 1
- TTYMODE("erase"), /* sgttyb.sg_erase ; VERASE */
-#define XTTYMODE_erase 2
- TTYMODE("kill"), /* sgttyb.sg_kill ; VKILL */
-#define XTTYMODE_kill 3
- TTYMODE("eof"), /* tchars.t_eofc ; VEOF */
-#define XTTYMODE_eof 4
- TTYMODE("eol"), /* VEOL */
-#define XTTYMODE_eol 5
- TTYMODE("swtch"), /* VSWTCH */
-#define XTTYMODE_swtch 6
- TTYMODE("start"), /* tchars.t_startc ; VSTART */
-#define XTTYMODE_start 7
- TTYMODE("stop"), /* tchars.t_stopc ; VSTOP */
-#define XTTYMODE_stop 8
- TTYMODE("brk"), /* tchars.t_brkc */
-#define XTTYMODE_brk 9
- TTYMODE("susp"), /* ltchars.t_suspc ; VSUSP */
-#define XTTYMODE_susp 10
- TTYMODE("dsusp"), /* ltchars.t_dsuspc ; VDSUSP */
-#define XTTYMODE_dsusp 11
- TTYMODE("rprnt"), /* ltchars.t_rprntc ; VREPRINT */
-#define XTTYMODE_rprnt 12
- TTYMODE("flush"), /* ltchars.t_flushc ; VDISCARD */
-#define XTTYMODE_flush 13
- TTYMODE("weras"), /* ltchars.t_werasc ; VWERASE */
-#define XTTYMODE_weras 14
- TTYMODE("lnext"), /* ltchars.t_lnextc ; VLNEXT */
-#define XTTYMODE_lnext 15
- { NULL, 0, 0, '\0' }, /* end of data */
-};
-/* *INDENT-ON* */
-
-#define TMODE(ind,var) if (ttymodelist[ind].set) var = ttymodelist[ind].value
-
-static int parse_tty_modes(char *s, struct _xttymodes *modelist);
-
-static char passedPty[2]; /* name if pty if slave */
-
-static int Console;
-#include <X11/Xmu/SysUtil.h> /* XmuGetHostname */
-#define MIT_CONSOLE_LEN 12
-#define MIT_CONSOLE "MIT_CONSOLE_"
-static char mit_console_name[255 + MIT_CONSOLE_LEN + 1] = MIT_CONSOLE;
-static Atom mit_console;
-
-static int tslot;
-static jmp_buf env;
-
-/* used by VT (charproc.c) */
-
-static XtResource application_resources[] =
-{
- Sres("name", "Name", xterm_name, DFT_TERMTYPE),
- Sres("iconGeometry", "IconGeometry", icon_geometry, NULL),
- Sres(XtNtitle, XtCTitle, title, NULL),
- Sres(XtNiconName, XtCIconName, icon_name, NULL),
- Sres("termName", "TermName", term_name, NULL),
- Sres("ttyModes", "TtyModes", tty_modes, NULL),
- Bres("hold", "Hold", hold_screen, False),
- Bres("utmpInhibit", "UtmpInhibit", utmpInhibit, False),
- Bres("utmpDisplayId", "UtmpDisplayId", utmpDisplayId, True),
- Bres("messages", "Messages", messages, True),
- Ires("minBufSize", "MinBufSize", minBufSize, 4096),
- Ires("maxBufSize", "MaxBufSize", maxBufSize, 32768),
- Sres("keyboardType", "KeyboardType", keyboardType, "unknown"),
- Bres("sunFunctionKeys", "SunFunctionKeys", sunFunctionKeys, False),
-#if OPT_SUNPC_KBD
- Bres("sunKeyboard", "SunKeyboard", sunKeyboard, False),
-#endif
-#if OPT_HP_FUNC_KEYS
- Bres("hpFunctionKeys", "HpFunctionKeys", hpFunctionKeys, False),
-#endif
-#if OPT_SCO_FUNC_KEYS
- Bres("scoFunctionKeys", "ScoFunctionKeys", scoFunctionKeys, False),
-#endif
-#if OPT_INITIAL_ERASE
- Bres("ptyInitialErase", "PtyInitialErase", ptyInitialErase, DEF_INITIAL_ERASE),
- Bres("backarrowKeyIsErase", "BackarrowKeyIsErase", backarrow_is_erase, DEF_BACKARO_ERASE),
-#endif
- Bres("waitForMap", "WaitForMap", wait_for_map, False),
- Bres("useInsertMode", "UseInsertMode", useInsertMode, False),
-#if OPT_ZICONBEEP
- Ires("zIconBeep", "ZIconBeep", zIconBeep, 0),
-#endif
-#if OPT_PTY_HANDSHAKE
- Bres("ptyHandshake", "PtyHandshake", ptyHandshake, True),
-#endif
-#if OPT_SAME_NAME
- Bres("sameName", "SameName", sameName, True),
-#endif
-#if OPT_SESSION_MGT
- Bres("sessionMgt", "SessionMgt", sessionMgt, True),
-#endif
-#if OPT_TOOLBAR
- Bres(XtNtoolBar, XtCToolBar, toolBar, True),
-#endif
-};
-
-static char *fallback_resources[] =
-{
- "*SimpleMenu*menuLabel.vertSpace: 100",
- "*SimpleMenu*HorizontalMargins: 16",
- "*SimpleMenu*Sme.height: 16",
- "*SimpleMenu*Cursor: left_ptr",
- "*mainMenu.Label: Main Options (no app-defaults)",
- "*vtMenu.Label: VT Options (no app-defaults)",
- "*fontMenu.Label: VT Fonts (no app-defaults)",
-#if OPT_TEK4014
- "*tekMenu.Label: Tek Options (no app-defaults)",
-#endif
- NULL
-};
-
-/* Command line options table. Only resources are entered here...there is a
- pass over the remaining options after XrmParseCommand is let loose. */
-/* *INDENT-OFF* */
-static XrmOptionDescRec optionDescList[] = {
-{"-geometry", "*vt100.geometry",XrmoptionSepArg, (caddr_t) NULL},
-{"-132", "*c132", XrmoptionNoArg, (caddr_t) "on"},
-{"+132", "*c132", XrmoptionNoArg, (caddr_t) "off"},
-{"-ah", "*alwaysHighlight", XrmoptionNoArg, (caddr_t) "on"},
-{"+ah", "*alwaysHighlight", XrmoptionNoArg, (caddr_t) "off"},
-{"-aw", "*autoWrap", XrmoptionNoArg, (caddr_t) "on"},
-{"+aw", "*autoWrap", XrmoptionNoArg, (caddr_t) "off"},
-#ifndef NO_ACTIVE_ICON
-{"-ai", "*activeIcon", XrmoptionNoArg, (caddr_t) "off"},
-{"+ai", "*activeIcon", XrmoptionNoArg, (caddr_t) "on"},
-#endif /* NO_ACTIVE_ICON */
-{"-b", "*internalBorder",XrmoptionSepArg, (caddr_t) NULL},
-{"-bc", "*cursorBlink", XrmoptionNoArg, (caddr_t) "on"},
-{"+bc", "*cursorBlink", XrmoptionNoArg, (caddr_t) "off"},
-{"-bcf", "*cursorOffTime",XrmoptionSepArg, (caddr_t) NULL},
-{"-bcn", "*cursorOnTime",XrmoptionSepArg, (caddr_t) NULL},
-{"-bdc", "*colorBDMode", XrmoptionNoArg, (caddr_t) "off"},
-{"+bdc", "*colorBDMode", XrmoptionNoArg, (caddr_t) "on"},
-{"-cb", "*cutToBeginningOfLine", XrmoptionNoArg, (caddr_t) "off"},
-{"+cb", "*cutToBeginningOfLine", XrmoptionNoArg, (caddr_t) "on"},
-{"-cc", "*charClass", XrmoptionSepArg, (caddr_t) NULL},
-{"-cm", "*colorMode", XrmoptionNoArg, (caddr_t) "off"},
-{"+cm", "*colorMode", XrmoptionNoArg, (caddr_t) "on"},
-{"-cn", "*cutNewline", XrmoptionNoArg, (caddr_t) "off"},
-{"+cn", "*cutNewline", XrmoptionNoArg, (caddr_t) "on"},
-{"-cr", "*cursorColor", XrmoptionSepArg, (caddr_t) NULL},
-{"-cu", "*curses", XrmoptionNoArg, (caddr_t) "on"},
-{"+cu", "*curses", XrmoptionNoArg, (caddr_t) "off"},
-{"-dc", "*dynamicColors",XrmoptionNoArg, (caddr_t) "off"},
-{"+dc", "*dynamicColors",XrmoptionNoArg, (caddr_t) "on"},
-{"-fb", "*boldFont", XrmoptionSepArg, (caddr_t) NULL},
-{"-fbb", "*freeBoldBox", XrmoptionNoArg, (caddr_t)"off"},
-{"+fbb", "*freeBoldBox", XrmoptionNoArg, (caddr_t)"on"},
-{"-fbx", "*forceBoxChars", XrmoptionNoArg, (caddr_t)"off"},
-{"+fbx", "*forceBoxChars", XrmoptionNoArg, (caddr_t)"on"},
-#ifndef NO_ACTIVE_ICON
-{"-fi", "*iconFont", XrmoptionSepArg, (caddr_t) NULL},
-#endif /* NO_ACTIVE_ICON */
-#if OPT_RENDERFONT
-{"-fa", "*faceName", XrmoptionSepArg, (caddr_t) NULL},
-{"-fd", "*faceNameDoublesize", XrmoptionSepArg, (caddr_t) NULL},
-{"-fs", "*faceSize", XrmoptionSepArg, (caddr_t) NULL},
-#endif
-#if OPT_WIDE_CHARS
-{"-fw", "*wideFont", XrmoptionSepArg, (caddr_t) NULL},
-{"-fwb", "*wideBoldFont", XrmoptionSepArg, (caddr_t) NULL},
-#endif
-#if OPT_INPUT_METHOD
-{"-fx", "*ximFont", XrmoptionSepArg, (caddr_t) NULL},
-#endif
-#if OPT_HIGHLIGHT_COLOR
-{"-hc", "*highlightColor", XrmoptionSepArg, (caddr_t) NULL},
-#endif
-#if OPT_HP_FUNC_KEYS
-{"-hf", "*hpFunctionKeys",XrmoptionNoArg, (caddr_t) "on"},
-{"+hf", "*hpFunctionKeys",XrmoptionNoArg, (caddr_t) "off"},
-#endif
-{"-hold", "*hold", XrmoptionNoArg, (caddr_t) "on"},
-{"+hold", "*hold", XrmoptionNoArg, (caddr_t) "off"},
-#if OPT_INITIAL_ERASE
-{"-ie", "*ptyInitialErase", XrmoptionNoArg, (caddr_t) "on"},
-{"+ie", "*ptyInitialErase", XrmoptionNoArg, (caddr_t) "off"},
-#endif
-{"-j", "*jumpScroll", XrmoptionNoArg, (caddr_t) "on"},
-{"+j", "*jumpScroll", XrmoptionNoArg, (caddr_t) "off"},
-#if OPT_C1_PRINT
-{"-k8", "*allowC1Printable", XrmoptionNoArg, (caddr_t) "on"},
-{"+k8", "*allowC1Printable", XrmoptionNoArg, (caddr_t) "off"},
-#endif
-{"-kt", "*keyboardType", XrmoptionSepArg, (caddr_t) NULL},
-{"+kt", "*keyboardType", XrmoptionSepArg, (caddr_t) NULL},
-/* parse logging options anyway for compatibility */
-{"-l", "*logging", XrmoptionNoArg, (caddr_t) "on"},
-{"+l", "*logging", XrmoptionNoArg, (caddr_t) "off"},
-{"-lf", "*logFile", XrmoptionSepArg, (caddr_t) NULL},
-{"-ls", "*loginShell", XrmoptionNoArg, (caddr_t) "on"},
-{"+ls", "*loginShell", XrmoptionNoArg, (caddr_t) "off"},
-{"-mb", "*marginBell", XrmoptionNoArg, (caddr_t) "on"},
-{"+mb", "*marginBell", XrmoptionNoArg, (caddr_t) "off"},
-{"-mc", "*multiClickTime", XrmoptionSepArg, (caddr_t) NULL},
-{"-mesg", "*messages", XrmoptionNoArg, (caddr_t) "off"},
-{"+mesg", "*messages", XrmoptionNoArg, (caddr_t) "on"},
-{"-ms", "*pointerColor",XrmoptionSepArg, (caddr_t) NULL},
-{"-nb", "*nMarginBell", XrmoptionSepArg, (caddr_t) NULL},
-{"-nul", "*underLine", XrmoptionNoArg, (caddr_t) "off"},
-{"+nul", "*underLine", XrmoptionNoArg, (caddr_t) "on"},
-{"-pc", "*boldColors", XrmoptionNoArg, (caddr_t) "on"},
-{"+pc", "*boldColors", XrmoptionNoArg, (caddr_t) "off"},
-{"-rw", "*reverseWrap", XrmoptionNoArg, (caddr_t) "on"},
-{"+rw", "*reverseWrap", XrmoptionNoArg, (caddr_t) "off"},
-{"-s", "*multiScroll", XrmoptionNoArg, (caddr_t) "on"},
-{"+s", "*multiScroll", XrmoptionNoArg, (caddr_t) "off"},
-{"-sb", "*scrollBar", XrmoptionNoArg, (caddr_t) "on"},
-{"+sb", "*scrollBar", XrmoptionNoArg, (caddr_t) "off"},
-#ifdef SCROLLBAR_RIGHT
-{"-leftbar", "*rightScrollBar", XrmoptionNoArg, (caddr_t) "off"},
-{"-rightbar", "*rightScrollBar", XrmoptionNoArg, (caddr_t) "on"},
-#endif
-{"-rvc", "*colorRVMode", XrmoptionNoArg, (caddr_t) "off"},
-{"+rvc", "*colorRVMode", XrmoptionNoArg, (caddr_t) "on"},
-{"-sf", "*sunFunctionKeys", XrmoptionNoArg, (caddr_t) "on"},
-{"+sf", "*sunFunctionKeys", XrmoptionNoArg, (caddr_t) "off"},
-{"-si", "*scrollTtyOutput", XrmoptionNoArg, (caddr_t) "off"},
-{"+si", "*scrollTtyOutput", XrmoptionNoArg, (caddr_t) "on"},
-{"-sk", "*scrollKey", XrmoptionNoArg, (caddr_t) "on"},
-{"+sk", "*scrollKey", XrmoptionNoArg, (caddr_t) "off"},
-{"-sl", "*saveLines", XrmoptionSepArg, (caddr_t) NULL},
-#if OPT_SUNPC_KBD
-{"-sp", "*sunKeyboard", XrmoptionNoArg, (caddr_t) "on"},
-{"+sp", "*sunKeyboard", XrmoptionNoArg, (caddr_t) "off"},
-#endif
-#if OPT_TEK4014
-{"-t", "*tekStartup", XrmoptionNoArg, (caddr_t) "on"},
-{"+t", "*tekStartup", XrmoptionNoArg, (caddr_t) "off"},
-#endif
-{"-ti", "*decTerminalID",XrmoptionSepArg, (caddr_t) NULL},
-{"-tm", "*ttyModes", XrmoptionSepArg, (caddr_t) NULL},
-{"-tn", "*termName", XrmoptionSepArg, (caddr_t) NULL},
-#if OPT_WIDE_CHARS
-{"-u8", "*utf8", XrmoptionNoArg, (caddr_t) "2"},
-{"+u8", "*utf8", XrmoptionNoArg, (caddr_t) "0"},
-#endif
-#if OPT_LUIT_PROG
-{"-lc", "*locale", XrmoptionNoArg, (caddr_t) "on"},
-{"+lc", "*locale", XrmoptionNoArg, (caddr_t) "off"},
-{"-lcc", "*localeFilter",XrmoptionSepArg, (caddr_t) NULL},
-{"-en", "*locale", XrmoptionSepArg, (caddr_t) NULL},
-#endif
-{"-ulc", "*colorULMode", XrmoptionNoArg, (caddr_t) "off"},
-{"+ulc", "*colorULMode", XrmoptionNoArg, (caddr_t) "on"},
-{"-ulit", "*italicULMode", XrmoptionNoArg, (caddr_t) "off"},
-{"+ulit", "*italicULMode", XrmoptionNoArg, (caddr_t) "on"},
-{"-ut", "*utmpInhibit", XrmoptionNoArg, (caddr_t) "on"},
-{"+ut", "*utmpInhibit", XrmoptionNoArg, (caddr_t) "off"},
-{"-im", "*useInsertMode", XrmoptionNoArg, (caddr_t) "on"},
-{"+im", "*useInsertMode", XrmoptionNoArg, (caddr_t) "off"},
-{"-vb", "*visualBell", XrmoptionNoArg, (caddr_t) "on"},
-{"+vb", "*visualBell", XrmoptionNoArg, (caddr_t) "off"},
-{"-pob", "*popOnBell", XrmoptionNoArg, (caddr_t) "on"},
-{"+pob", "*popOnBell", XrmoptionNoArg, (caddr_t) "off"},
-#if OPT_WIDE_CHARS
-{"-wc", "*wideChars", XrmoptionNoArg, (caddr_t) "on"},
-{"+wc", "*wideChars", XrmoptionNoArg, (caddr_t) "off"},
-{"-mk_width", "*mkWidth", XrmoptionNoArg, (caddr_t) "on"},
-{"+mk_width", "*mkWidth", XrmoptionNoArg, (caddr_t) "off"},
-{"-cjk_width", "*cjkWidth", XrmoptionNoArg, (caddr_t) "on"},
-{"+cjk_width", "*cjkWidth", XrmoptionNoArg, (caddr_t) "off"},
-#endif
-{"-wf", "*waitForMap", XrmoptionNoArg, (caddr_t) "on"},
-{"+wf", "*waitForMap", XrmoptionNoArg, (caddr_t) "off"},
-#if OPT_ZICONBEEP
-{"-ziconbeep", "*zIconBeep", XrmoptionSepArg, (caddr_t) NULL},
-#endif
-#if OPT_SAME_NAME
-{"-samename", "*sameName", XrmoptionNoArg, (caddr_t) "on"},
-{"+samename", "*sameName", XrmoptionNoArg, (caddr_t) "off"},
-#endif
-#if OPT_SESSION_MGT
-{"-sm", "*sessionMgt", XrmoptionNoArg, (caddr_t) "on"},
-{"+sm", "*sessionMgt", XrmoptionNoArg, (caddr_t) "off"},
-#endif
-#if OPT_TOOLBAR
-{"-tb", "*"XtNtoolBar, XrmoptionNoArg, (caddr_t) "on"},
-{"+tb", "*"XtNtoolBar, XrmoptionNoArg, (caddr_t) "off"},
-#endif
-/* options that we process ourselves */
-{"-help", NULL, XrmoptionSkipNArgs, (caddr_t) NULL},
-{"-version", NULL, XrmoptionSkipNArgs, (caddr_t) NULL},
-{"-class", NULL, XrmoptionSkipArg, (caddr_t) NULL},
-{"-e", NULL, XrmoptionSkipLine, (caddr_t) NULL},
-{"-into", NULL, XrmoptionSkipArg, (caddr_t) NULL},
-/* bogus old compatibility stuff for which there are
- standard XtOpenApplication options now */
-{"%", "*tekGeometry", XrmoptionStickyArg, (caddr_t) NULL},
-{"#", ".iconGeometry",XrmoptionStickyArg, (caddr_t) NULL},
-{"-T", ".title", XrmoptionSepArg, (caddr_t) NULL},
-{"-n", "*iconName", XrmoptionSepArg, (caddr_t) NULL},
-{"-r", "*reverseVideo",XrmoptionNoArg, (caddr_t) "on"},
-{"+r", "*reverseVideo",XrmoptionNoArg, (caddr_t) "off"},
-{"-rv", "*reverseVideo",XrmoptionNoArg, (caddr_t) "on"},
-{"+rv", "*reverseVideo",XrmoptionNoArg, (caddr_t) "off"},
-{"-w", ".borderWidth", XrmoptionSepArg, (caddr_t) NULL},
-};
-
-static OptionHelp xtermOptions[] = {
-{ "-version", "print the version number" },
-{ "-help", "print out this message" },
-{ "-display displayname", "X server to contact" },
-{ "-geometry geom", "size (in characters) and position" },
-{ "-/+rv", "turn on/off reverse video" },
-{ "-bg color", "background color" },
-{ "-fg color", "foreground color" },
-{ "-bd color", "border color" },
-{ "-bw number", "border width in pixels" },
-{ "-fn fontname", "normal text font" },
-{ "-fb fontname", "bold text font" },
-{ "-/+fbb", "turn on/off normal/bold font comparison inhibit"},
-{ "-/+fbx", "turn off/on linedrawing characters"},
-#if OPT_RENDERFONT
-{ "-fa pattern", "FreeType font-selection pattern" },
-{ "-fd pattern", "FreeType Doublesize font-selection pattern" },
-{ "-fs size", "FreeType font-size" },
-#endif
-#if OPT_WIDE_CHARS
-{ "-fw fontname", "doublewidth text font" },
-{ "-fwb fontname", "doublewidth bold text font" },
-#endif
-#if OPT_INPUT_METHOD
-{ "-fx fontname", "XIM fontset" },
-#endif
-{ "-iconic", "start iconic" },
-{ "-name string", "client instance, icon, and title strings" },
-{ "-class string", "class string (XTerm)" },
-{ "-title string", "title string" },
-{ "-xrm resourcestring", "additional resource specifications" },
-{ "-/+132", "turn on/off 80/132 column switching" },
-{ "-/+ah", "turn on/off always highlight" },
-#ifndef NO_ACTIVE_ICON
-{ "-/+ai", "turn off/on active icon" },
-{ "-fi fontname", "icon font for active icon" },
-#endif /* NO_ACTIVE_ICON */
-{ "-b number", "internal border in pixels" },
-{ "-/+bc", "turn on/off text cursor blinking" },
-{ "-bcf milliseconds", "time text cursor is off when blinking"},
-{ "-bcn milliseconds", "time text cursor is on when blinking"},
-{ "-/+bdc", "turn off/on display of bold as color"},
-{ "-/+cb", "turn on/off cut-to-beginning-of-line inhibit" },
-{ "-cc classrange", "specify additional character classes" },
-{ "-/+cm", "turn off/on ANSI color mode" },
-{ "-/+cn", "turn on/off cut newline inhibit" },
-{ "-cr color", "text cursor color" },
-{ "-/+cu", "turn on/off curses emulation" },
-{ "-/+dc", "turn off/on dynamic color selection" },
-#if OPT_HIGHLIGHT_COLOR
-{ "-hc color", "selection background color" },
-#endif
-#if OPT_HP_FUNC_KEYS
-{ "-/+hf", "turn on/off HP Function Key escape codes" },
-#endif
-{ "-/+hold", "turn on/off logic that retains window after exit" },
-#if OPT_INITIAL_ERASE
-{ "-/+ie", "turn on/off initialization of 'erase' from pty" },
-#endif
-{ "-/+im", "use insert mode for TERMCAP" },
-{ "-/+j", "turn on/off jump scroll" },
-#if OPT_C1_PRINT
-{ "-/+k8", "turn on/off C1-printable classification"},
-#endif
-{ "-kt keyboardtype", "set keyboard type:" KEYBOARD_TYPES },
-#ifdef ALLOWLOGGING
-{ "-/+l", "turn on/off logging" },
-{ "-lf filename", "logging filename" },
-#else
-{ "-/+l", "turn on/off logging (not supported)" },
-{ "-lf filename", "logging filename (not supported)" },
-#endif
-{ "-/+ls", "turn on/off login shell" },
-{ "-/+mb", "turn on/off margin bell" },
-{ "-mc milliseconds", "multiclick time in milliseconds" },
-{ "-/+mesg", "forbid/allow messages" },
-{ "-ms color", "pointer color" },
-{ "-nb number", "margin bell in characters from right end" },
-{ "-/+nul", "turn off/on display of underlining" },
-{ "-/+aw", "turn on/off auto wraparound" },
-{ "-/+pc", "turn on/off PC-style bold colors" },
-{ "-/+rw", "turn on/off reverse wraparound" },
-{ "-/+s", "turn on/off multiscroll" },
-{ "-/+sb", "turn on/off scrollbar" },
-#ifdef SCROLLBAR_RIGHT
-{ "-rightbar", "force scrollbar right (default left)" },
-{ "-leftbar", "force scrollbar left" },
-#endif
-{ "-/+rvc", "turn off/on display of reverse as color" },
-{ "-/+sf", "turn on/off Sun Function Key escape codes" },
-{ "-/+si", "turn on/off scroll-on-tty-output inhibit" },
-{ "-/+sk", "turn on/off scroll-on-keypress" },
-{ "-sl number", "number of scrolled lines to save" },
-#if OPT_SUNPC_KBD
-{ "-/+sp", "turn on/off Sun/PC Function/Keypad mapping" },
-#endif
-#if OPT_TEK4014
-{ "-/+t", "turn on/off Tek emulation window" },
-#endif
-#if OPT_TOOLBAR
-{ "-/+tb", "turn on/off toolbar" },
-#endif
-{ "-ti termid", "terminal identifier" },
-{ "-tm string", "terminal mode keywords and characters" },
-{ "-tn name", "TERM environment variable name" },
-#if OPT_WIDE_CHARS
-{ "-/+u8", "turn on/off UTF-8 mode (implies wide-characters)" },
-#endif
-#if OPT_LUIT_PROG
-{ "-/+lc", "turn on/off locale mode using luit" },
-{ "-lcc path", "filename of locale converter (" DEFLOCALEFILTER ")" },
-#endif
-{ "-/+ulc", "turn off/on display of underline as color" },
-{ "-/+ut", "turn on/off utmp inhibit (not supported)" },
-{ "-/+ulit", "turn off/on display of underline as italics" },
-{ "-/+vb", "turn on/off visual bell" },
-{ "-/+pob", "turn on/off pop on bell" },
-#if OPT_WIDE_CHARS
-{ "-/+wc", "turn on/off wide-character mode" },
-{ "-/+mk_width", "turn on/off simple width convention" },
-{ "-/+cjk_width", "turn on/off legacy CJK width convention" },
-#endif
-{ "-/+wf", "turn on/off wait for map before command exec" },
-{ "-e command args ...", "command to execute" },
-#if OPT_TEK4014
-{ "%geom", "Tek window geometry" },
-#endif
-{ "#geom", "icon window geometry" },
-{ "-T string", "title name for window" },
-{ "-n string", "icon name for window" },
-{ "-C", "intercept console messages" },
-{ "-Sccn", "slave mode on \"ttycc\", file descriptor \"n\"" },
-{ "-into windowId", "use the window id given to -into as the parent window rather than the default root window" },
-#if OPT_ZICONBEEP
-{ "-ziconbeep percent", "beep and flag icon of window having hidden output" },
-#endif
-#if OPT_SAME_NAME
-{ "-/+samename", "turn on/off the no-flicker option for title and icon name" },
-#endif
-#if OPT_SESSION_MGT
-{ "-/+sm", "turn on/off the session-management support" },
-#endif
-{ NULL, NULL }};
-/* *INDENT-ON* */
-
-/*debug FILE *confd;*/
-/*static void opencons()
-{
- if ((confd=fopen("/dev/console$","w")) < 0) {
- fputs("!!! Cannot open console device.\n",
- stderr);
- exit(1);
- }
-}
-
-static void closecons(void)
-{
- fclose(confd);
-}
-*/
-static char *message[] =
-{
- "Fonts should be fixed width and, if both normal and bold are specified, should",
- "have the same size. If only a normal font is specified, it will be used for",
- "both normal and bold text (by doing overstriking). The -e option, if given,",
- "must appear at the end of the command line, otherwise the user's default shell",
- "will be started. Options that start with a plus sign (+) restore the default.",
- NULL};
-
-/*
- * Decode a key-definition. This combines the termcap and ttyModes, for
- * comparison. Note that octal escapes in ttyModes are done by the normal
- * resource translation. Also, ttyModes allows '^-' as a synonym for disabled.
- */
-static int
-decode_keyvalue(char **ptr, int termcap)
-{
- char *string = *ptr;
- int value = -1;
-
- TRACE(("...decode '%s'\n", string));
- if (*string == '^') {
- switch (*++string) {
- case '?':
- value = A2E(127);
- break;
- case '-':
- if (!termcap) {
- errno = 0;
-#if defined(_POSIX_VDISABLE) && defined(HAVE_UNISTD_H)
- value = _POSIX_VDISABLE;
-#endif
-#if defined(_PC_VDISABLE)
- if (value == -1) {
- value = fpathconf(0, _PC_VDISABLE);
- if (value == -1) {
- if (errno != 0)
- break; /* skip this (error) */
- value = 0377;
- }
- }
-#elif defined(VDISABLE)
- if (value == -1)
- value = VDISABLE;
-#endif
- break;
- }
- /* FALLTHRU */
- default:
- value = CONTROL(*string);
- break;
- }
- ++string;
- } else if (termcap && (*string == '\\')) {
- char *d;
- int temp = strtol(string + 1, &d, 8);
- if (temp > 0 && d != string) {
- value = temp;
- string = d;
- }
- } else {
- value = CharOf(*string);
- ++string;
- }
- *ptr = string;
- return value;
-}
-
-/*
- * If we're linked to terminfo, tgetent() will return an empty buffer. We
- * cannot use that to adjust the $TERMCAP variable.
- */
-static Bool
-get_termcap(char *name, char *buffer, char *resized)
-{
- TScreen *screen = &term->screen;
-
- *buffer = 0; /* initialize, in case we're using terminfo's tgetent */
-
- if (name != 0) {
- if (tgetent(buffer, name) == 1) {
- TRACE(("get_termcap(%s) succeeded (%s)\n", name,
- (*buffer
- ? "ok:termcap, we can update $TERMCAP"
- : "assuming this is terminfo")));
- if (*buffer) {
- if (!TEK4014_ACTIVE(screen)) {
- resize(screen, buffer, resized);
- }
- }
- return True;
- } else {
- *buffer = 0; /* just in case */
- }
- }
- return False;
-}
-
-static int
-abbrev(char *tst, char *cmp, size_t need)
-{
- size_t len = strlen(tst);
- return ((len >= need) && (!strncmp(tst, cmp, len)));
-}
-
-static void
-Syntax(char *badOption)
-{
- OptionHelp *opt;
- OptionHelp *list = sortedOpts(xtermOptions, optionDescList, XtNumber(optionDescList));
- int col;
-
- fprintf(stderr, "%s: bad command line option \"%s\"\r\n\n",
- ProgramName, badOption);
-
- fprintf(stderr, "usage: %s", ProgramName);
- col = 8 + strlen(ProgramName);
- for (opt = list; opt->opt; opt++) {
- int len = 3 + strlen(opt->opt); /* space [ string ] */
- if (col + len > 79) {
- fprintf(stderr, "\r\n "); /* 3 spaces */
- col = 3;
- }
- fprintf(stderr, " [%s]", opt->opt);
- col += len;
- }
-
- fprintf(stderr, "\r\n\nType %s -help for a full description.\r\n\n",
- ProgramName);
- exit(1);
-}
-
-static void
-Version(void)
-{
- printf("%s\n", xtermVersion());
- fflush(stdout);
-}
-
-static void
-Help(void)
-{
- OptionHelp *opt;
- OptionHelp *list = sortedOpts(xtermOptions, optionDescList, XtNumber(optionDescList));
- char **cpp;
-
- printf("%s usage:\n %s [-options ...] [-e command args]\n\n",
- xtermVersion(), ProgramName);
- printf("where options include:\n");
- for (opt = list; opt->opt; opt++) {
- printf(" %-28s %s\n", opt->opt, opt->desc);
- }
-
- putchar('\n');
- for (cpp = message; *cpp; cpp++)
- puts(*cpp);
- putchar('\n');
- fflush(stdout);
-}
-
-/* ARGSUSED */
-static Boolean
-ConvertConsoleSelection(Widget w GCC_UNUSED,
- Atom * selection GCC_UNUSED,
- Atom * target GCC_UNUSED,
- Atom * type GCC_UNUSED,
- XtPointer *value GCC_UNUSED,
- unsigned long *length GCC_UNUSED,
- int *format GCC_UNUSED)
-{
- /* we don't save console output, so can't offer it */
- return False;
-}
-
-#if OPT_SESSION_MGT
-static void
-die_callback(Widget w GCC_UNUSED,
- XtPointer client_data GCC_UNUSED,
- XtPointer call_data GCC_UNUSED)
-{
- Cleanup(0);
-}
-
-static void
-save_callback(Widget w GCC_UNUSED,
- XtPointer client_data GCC_UNUSED,
- XtPointer call_data)
-{
- XtCheckpointToken token = (XtCheckpointToken) call_data;
- /* we have nothing to save */
- token->save_success = True;
-}
-#endif /* OPT_SESSION_MGT */
-
-/*
- * DeleteWindow(): Action proc to implement ICCCM delete_window.
- */
-/* ARGSUSED */
-static void
-DeleteWindow(Widget w,
- XEvent * event GCC_UNUSED,
- String * params GCC_UNUSED,
- Cardinal *num_params GCC_UNUSED)
-{
-#if OPT_TEK4014
- if (w == toplevel) {
- if (term->screen.Tshow)
- hide_vt_window();
- else
- do_hangup(w, (XtPointer) 0, (XtPointer) 0);
- } else if (term->screen.Vshow)
- hide_tek_window();
- else
-#endif
- do_hangup(w, (XtPointer) 0, (XtPointer) 0);
-}
-
-/* ARGSUSED */
-static void
-KeyboardMapping(Widget w GCC_UNUSED,
- XEvent * event,
- String * params GCC_UNUSED,
- Cardinal *num_params GCC_UNUSED)
-{
- switch (event->type) {
- case MappingNotify:
- XRefreshKeyboardMapping(&event->xmapping);
- break;
- }
-}
-
-static XtActionsRec actionProcs[] =
-{
- {"DeleteWindow", DeleteWindow},
- {"KeyboardMapping", KeyboardMapping},
-};
-
-char **gblenvp;
-
-int
-main(int argc, char **argv ENVP_ARG)
-{
- Widget form_top, menu_top;
- TScreen *screen;
- int mode;
- char *my_class = DEFCLASS;
- Window winToEmbedInto = None;
-
- /* Do these first, since we may not be able to open the display */
- ProgramName = argv[0];
- TRACE_OPTS(xtermOptions, optionDescList, XtNumber(optionDescList));
- TRACE_ARGV("Before XtOpenApplication", argv);
- if (argc > 1) {
- int n;
- unsigned unique = 2;
- Bool quit = True;
-
- for (n = 1; n < argc; n++) {
- TRACE(("parsing %s\n", argv[n]));
- if (abbrev(argv[n], "-version", unique)) {
- Version();
- } else if (abbrev(argv[n], "-help", unique)) {
- Help();
- } else if (abbrev(argv[n], "-class", 3)) {
- if ((my_class = argv[++n]) == 0) {
- Help();
- } else {
- quit = False;
- }
- unique = 3;
- } else {
- quit = False;
- unique = 3;
- }
- }
- if (quit)
- exit(0);
- }
-
- /* XXX: for some obscure reason EMX seems to lose the value of
- * the environ variable, don't understand why, so save it recently
- */
- gblenvp = envp;
-
-#ifdef I18N
- setlocale(LC_ALL, NULL);
-#endif
-
-/*debug opencons();*/
-
- ttydev = TypeMallocN(char, PTMS_BUFSZ);
- ptydev = TypeMallocN(char, PTMS_BUFSZ);
- if (!ttydev || !ptydev) {
- fprintf(stderr,
- "%s: unable to allocate memory for ttydev or ptydev\n",
- ProgramName);
- exit(1);
- }
- strcpy(ttydev, TTYDEV);
- strcpy(ptydev, PTYDEV);
-
- /* Initialization is done here rather than above in order
- * to prevent any assumptions about the order of the contents
- * of the various terminal structures (which may change from
- * implementation to implementation).
- */
- d_tio.c_iflag = ICRNL | IXON;
- d_tio.c_oflag = OPOST | ONLCR | TAB3;
- d_tio.c_cflag = B38400 | CS8 | CREAD | PARENB | HUPCL;
- d_tio.c_lflag = ISIG | ICANON | ECHO | ECHOE | ECHOK;
- d_tio.c_line = 0;
- d_tio.c_cc[VINTR] = CONTROL('C'); /* '^C' */
- d_tio.c_cc[VERASE] = 0x7f; /* DEL */
- d_tio.c_cc[VKILL] = CONTROL('U'); /* '^U' */
- d_tio.c_cc[VQUIT] = CQUIT; /* '^\' */
- d_tio.c_cc[VEOF] = CEOF; /* '^D' */
- d_tio.c_cc[VEOL] = CEOL; /* '^@' */
-
- XtSetErrorHandler(xt_error);
-#if OPT_SESSION_MGT
- toplevel = XtOpenApplication(&app_con, my_class,
- optionDescList,
- XtNumber(optionDescList),
- &argc, argv, fallback_resources,
- sessionShellWidgetClass,
- NULL, 0);
-#else
- toplevel = XtAppInitialize(&app_con, my_class,
- optionDescList,
- XtNumber(optionDescList),
- &argc, argv, fallback_resources,
- NULL, 0);
-#endif /* OPT_SESSION_MGT */
- XtSetErrorHandler((XtErrorHandler) 0);
-
- XtGetApplicationResources(toplevel, (XtPointer) &resource,
- application_resources,
- XtNumber(application_resources), NULL, 0);
- TRACE_XRES();
-
- waiting_for_initial_map = resource.wait_for_map;
-
- /*
- * ICCCM delete_window.
- */
- XtAppAddActions(app_con, actionProcs, XtNumber(actionProcs));
-
- /*
- * fill in terminal modes
- */
- if (resource.tty_modes) {
- int n = parse_tty_modes(resource.tty_modes, ttymodelist);
- if (n < 0) {
- fprintf(stderr, "%s: bad tty modes \"%s\"\n",
- ProgramName, resource.tty_modes);
- } else if (n > 0) {
- override_tty_modes = 1;
- }
- }
-#if OPT_ZICONBEEP
- zIconBeep = resource.zIconBeep;
- zIconBeep_flagged = False;
- if (zIconBeep > 100 || zIconBeep < -100) {
- zIconBeep = 0; /* was 100, but I prefer to defaulting off. */
- fprintf(stderr,
- "a number between -100 and 100 is required for zIconBeep. 0 used by default\n");
- }
-#endif /* OPT_ZICONBEEP */
-#if OPT_SAME_NAME
- sameName = resource.sameName;
-#endif
- hold_screen = resource.hold_screen ? 1 : 0;
- xterm_name = resource.xterm_name;
- if (strcmp(xterm_name, "-") == 0)
- xterm_name = DFT_TERMTYPE;
- if (resource.icon_geometry != NULL) {
- int scr, junk;
- int ix, iy;
- Arg args[2];
-
- for (scr = 0; /* yyuucchh */
- XtScreen(toplevel) != ScreenOfDisplay(XtDisplay(toplevel), scr);
- scr++) ;
-
- args[0].name = XtNiconX;
- args[1].name = XtNiconY;
- XGeometry(XtDisplay(toplevel), scr, resource.icon_geometry, "",
- 0, 0, 0, 0, 0, &ix, &iy, &junk, &junk);
- args[0].value = (XtArgVal) ix;
- args[1].value = (XtArgVal) iy;
- XtSetValues(toplevel, args, 2);
- }
-
- XtSetValues(toplevel, ourTopLevelShellArgs,
- number_ourTopLevelShellArgs);
-
-#if OPT_WIDE_CHARS
- /* seems as good a place as any */
- init_classtab();
-#endif
-
- /* Parse the rest of the command line */
- TRACE_ARGV("After XtOpenApplication", argv);
- for (argc--, argv++; argc > 0; argc--, argv++) {
- if (**argv != '-')
- Syntax(*argv);
-
- TRACE(("parsing %s\n", argv[0]));
- switch (argv[0][1]) {
- case 'h': /* -help */
- Help();
- continue;
- case 'v': /* -version */
- Version();
- continue;
- case 'C':
- {
- struct stat sbuf;
-
- /* Must be owner and have read/write permission.
- xdm cooperates to give the console the right user. */
- if (!stat("/dev/console", &sbuf) &&
- (sbuf.st_uid == getuid()) &&
- !access("/dev/console", R_OK | W_OK)) {
- Console = True;
- } else
- Console = False;
- }
- continue;
- case 'S':
- if (sscanf(*argv + 2, "%c%c%d", passedPty, passedPty + 1,
- &am_slave) != 3)
- Syntax(*argv);
- continue;
-#ifdef DEBUG
- case 'D':
- debug = True;
- continue;
-#endif /* DEBUG */
- case 'c': /* -class param */
- if (strcmp(argv[0] + 1, "class") == 0)
- argc--, argv++;
- else
- Syntax(*argv);
- continue;
- case 'e':
- if (argc <= 1)
- Syntax(*argv);
- command_to_exec = ++argv;
- break;
- case 'i':
- if (argc <= 1) {
- Syntax(*argv);
- } else {
- char *endPtr;
- --argc;
- ++argv;
- winToEmbedInto = (Window) strtol(argv[0], &endPtr, 10);
- }
- continue;
-
- default:
- Syntax(*argv);
- }
- break;
- }
-
- SetupMenus(toplevel, &form_top, &menu_top);
-
- term = (XtermWidget) XtVaCreateManagedWidget("vt100", xtermWidgetClass,
- form_top,
-#if OPT_TOOLBAR
- XtNmenuBar, menu_top,
- XtNresizable, True,
- XtNfromVert, menu_top,
- XtNleft, XawChainLeft,
- XtNright, XawChainRight,
- XtNtop, XawChainTop,
- XtNbottom, XawChainBottom,
-#endif
- (XtPointer) 0);
-
- decode_keyboard_type(&resource);
-
- screen = &term->screen;
-
- screen->inhibit = 0;
-#ifdef ALLOWLOGGING
- if (term->misc.logInhibit)
- screen->inhibit |= I_LOG;
-#endif
- if (term->misc.signalInhibit)
- screen->inhibit |= I_SIGNAL;
-#if OPT_TEK4014
- if (term->misc.tekInhibit)
- screen->inhibit |= I_TEK;
-#endif
-
- /*
- * We might start by showing the tek4014 window.
- */
-#if OPT_TEK4014
- if (screen->inhibit & I_TEK)
- screen->TekEmu = False;
-
- if (screen->TekEmu && !TekInit())
- exit(ERROR_INIT);
-#endif
-
- /*
- * Start the toolbar at this point, after the first window has been setup.
- */
-#if OPT_TOOLBAR
- ShowToolbar(resource.toolBar);
-#endif
-
-#if OPT_SESSION_MGT
- if (resource.sessionMgt) {
- TRACE(("Enabling session-management callbacks\n"));
- XtAddCallback(toplevel, XtNdieCallback, die_callback, NULL);
- XtAddCallback(toplevel, XtNsaveCallback, save_callback, NULL);
- }
-#endif
-
- /*
- * Set title and icon name if not specified
- */
- if (command_to_exec) {
- Arg args[2];
-
- if (!resource.title) {
- if (command_to_exec) {
- resource.title = x_basename(command_to_exec[0]);
- } /* else not reached */
- }
-
- if (!resource.icon_name)
- resource.icon_name = resource.title;
- XtSetArg(args[0], XtNtitle, resource.title);
- XtSetArg(args[1], XtNiconName, resource.icon_name);
-
- TRACE(("setting:\n\ttitle \"%s\"\n\ticon \"%s\"\n\tbased on command \"%s\"\n",
- resource.title,
- resource.icon_name,
- *command_to_exec));
-
- XtSetValues(toplevel, args, 2);
- }
-#if OPT_LUIT_PROG
- if (term->misc.callfilter) {
- int u = (term->misc.use_encoding ? 2 : 0);
- if (command_to_exec) {
- int n;
- char **c;
- for (n = 0, c = command_to_exec; *c; n++, c++) ;
- c = TypeMallocN(char *, n + 3 + u);
- if (c == NULL)
- SysError(ERROR_LUMALLOC);
- memcpy(c + 2 + u, command_to_exec, (n + 1) * sizeof(char *));
- c[0] = term->misc.localefilter;
- if (u) {
- c[1] = "-encoding";
- c[2] = term->misc.locale_str;
- }
- c[1 + u] = "--";
- command_to_exec_with_luit = c;
- } else {
- static char *luit[4];
- luit[0] = term->misc.localefilter;
- if (u) {
- luit[1] = "-encoding";
- luit[2] = term->misc.locale_str;
- luit[3] = NULL;
- } else
- luit[1] = NULL;
- command_to_exec_with_luit = luit;
- }
- }
-#endif
-
-#ifdef DEBUG
- {
- /* Set up stderr properly. Opening this log file cannot be
- done securely by a privileged xterm process (although we try),
- so the debug feature is disabled by default. */
- int i = -1;
- if (debug) {
- creat_as(getuid(), getgid(), True, "xterm.debug.log", 0666);
- i = open("xterm.debug.log", O_WRONLY | O_TRUNC);
- }
- if (i >= 0) {
- dup2(i, 2);
-
- /* mark this file as close on exec */
- (void) fcntl(i, F_SETFD, 1);
- }
- }
-#endif /* DEBUG */
-
- /* open a terminal for client */
- get_terminal();
-
- spawn();
-
- /* Child process is out there, let's catch its termination */
- (void) signal(SIGCHLD, reapchild);
-
- /* Realize procs have now been executed */
-
- if (am_slave >= 0) { /* Write window id so master end can read and use */
- char buf[80];
-
- buf[0] = '\0';
- sprintf(buf, "%lx\n", XtWindow(SHELL_OF(CURRENT_EMU(screen))));
- write(screen->respond, buf, strlen(buf));
- }
-
- if (0 > (mode = fcntl(screen->respond, F_GETFL, 0)))
- SysError(ERROR_F_GETFL);
- mode |= O_NDELAY;
-
- if (fcntl(screen->respond, F_SETFL, mode))
- SysError(ERROR_F_SETFL);
-
- FD_ZERO(&pty_mask);
- FD_ZERO(&X_mask);
- FD_ZERO(&Select_mask);
- FD_SET(screen->respond, &pty_mask);
- FD_SET(ConnectionNumber(screen->display), &X_mask);
- FD_SET(screen->respond, &Select_mask);
- FD_SET(ConnectionNumber(screen->display), &Select_mask);
- max_plus1 = ((screen->respond < ConnectionNumber(screen->display))
- ? (1 + ConnectionNumber(screen->display))
- : (1 + screen->respond));
-
-#ifdef DEBUG
- if (debug)
- printf("debugging on\n");
-#endif /* DEBUG */
- XSetErrorHandler(xerror);
- XSetIOErrorHandler(xioerror);
-
- initPtyData(&VTbuffer);
-#ifdef ALLOWLOGGING
- if (term->misc.log_on) {
- StartLog(screen);
- }
-#endif
-
- if (winToEmbedInto != None) {
- XtRealizeWidget(toplevel);
- /*
- * This should probably query the tree or check the attributes of
- * winToEmbedInto in order to verify that it exists, but I'm still not
- * certain what is the best way to do it -GPS
- */
- XReparentWindow(XtDisplay(toplevel),
- XtWindow(toplevel),
- winToEmbedInto, 0, 0);
- }
-
- for (;;) {
-#if OPT_TEK4014
- if (screen->TekEmu)
- TekRun();
- else
-#endif
- VTRun();
- }
- return 0;
-}
-
-/*
- * Called from get_pty to iterate over likely pseudo terminals
- * we might allocate. Used on those systems that do not have
- * a functional interface for allocating a pty.
- * Returns 0 if found a pty, 1 if fails.
- */
-static int
-pty_search(int *pty)
-{
- char namebuf[PTMS_BUFSZ];
-
- /* ask the PTY manager */
- int fd = open("/dev/ptms$", 0);
- if (fd && ptioctl(fd, PTMS_GETPTY, namebuf) == 0) {
- strcpy(ttydev, namebuf);
- strcpy(ptydev, namebuf);
- *x_basename(ttydev) = 't';
- close(fd);
- if ((*pty = open(ptydev, O_RDWR)) >= 0) {
-#ifdef PTYDEBUG
- ptioctl(*pty, XTY_TRACE, 0);
-#endif
- return 0;
- } else {
- fprintf(stderr, "Unable to open %s, errno=%d\n", ptydev, errno);
- }
- }
- return 1;
-}
-
-/*
- * This function opens up a pty master and stuffs its value into pty.
- *
- * If it finds one, it returns a value of 0. If it does not find one,
- * it returns a value of !0. This routine is designed to be re-entrant,
- * so that if a pty master is found and later, we find that the slave
- * has problems, we can re-enter this function and get another one.
- */
-static int
-get_pty(int *pty)
-{
- return pty_search(pty);
-}
-
-/*
- * sets up X and initializes the terminal structure except for term.buf.fildes.
- */
-static void
-get_terminal(void)
-{
- TScreen *screen = &term->screen;
-
- screen->arrow = make_colored_cursor(XC_left_ptr,
- T_COLOR(screen, MOUSE_FG),
- T_COLOR(screen, MOUSE_BG));
-}
-
-/*
- * The only difference in /etc/termcap between 4014 and 4015 is that
- * the latter has support for switching character sets. We support the
- * 4015 protocol, but ignore the character switches. Therefore, we
- * choose 4014 over 4015.
- *
- * Features of the 4014 over the 4012: larger (19") screen, 12-bit
- * graphics addressing (compatible with 4012 10-bit addressing),
- * special point plot mode, incremental plot mode (not implemented in
- * later Tektronix terminals), and 4 character sizes.
- * All of these are supported by xterm.
- */
-
-#if OPT_TEK4014
-static char *tekterm[] =
-{
- "tek4014",
- "tek4015", /* 4014 with APL character set support */
- "tek4012", /* 4010 with lower case */
- "tek4013", /* 4012 with APL character set support */
- "tek4010", /* small screen, upper-case only */
- "dumb",
- 0
-};
-#endif
-
-/* The VT102 is a VT100 with the Advanced Video Option included standard.
- * It also adds Escape sequences for insert/delete character/line.
- * The VT220 adds 8-bit character sets, selective erase.
- * The VT320 adds a 25th status line, terminal state interrogation.
- * The VT420 has up to 48 lines on the screen.
- */
-
-static char *vtterm[] =
-{
-#ifdef USE_X11TERM
- "x11term", /* for people who want special term name */
-#endif
- DFT_TERMTYPE, /* for people who want special term name */
- "xterm", /* the prefered name, should be fastest */
- "vt102",
- "vt100",
- "ansi",
- "dumb",
- 0
-};
-
-/* ARGSUSED */
-static SIGNAL_T
-hungtty(int i GCC_UNUSED)
-{
- longjmp(env, 1);
- SIGNAL_RETURN;
-}
-
-struct {
- int rows;
- int cols;
-} handshake = {
-
- -1, -1
-};
-
-void
-first_map_occurred(void)
-{
- TScreen *screen = &term->screen;
- handshake.rows = screen->max_row;
- handshake.cols = screen->max_col;
- waiting_for_initial_map = False;
-}
-
-static void
-set_owner(char *device, uid_t uid, gid_t gid, mode_t mode)
-{
- int why;
-
- if (chown(device, uid, gid) < 0) {
- why = errno;
- if (why != ENOENT
- && getuid() == 0) {
- fprintf(stderr, "Cannot chown %s to %ld,%ld: %s\n",
- device, (long) uid, (long) gid, strerror(why));
- }
- }
- if (chmod(device, mode) < 0) {
- why = errno;
- if (why != ENOENT) {
- struct stat sb;
- if (stat(device, &sb) < 0) {
- fprintf(stderr, "Cannot chmod %s to %03o: %s\n",
- device, mode, strerror(why));
- } else {
- fprintf(stderr,
- "Cannot chmod %s to %03o currently %03o: %s\n",
- device, mode, (sb.st_mode & S_IFMT), strerror(why));
- }
- }
- }
-}
-
-#define THE_PARENT 1
-#define THE_CHILD 2
-int whoami = -1;
-
-SIGNAL_T
-killit(int sig)
-{
- switch (whoami) {
- case -1:
- signal(sig, killit);
- kill(-getpid(), sig);
- break;
- case THE_PARENT:
- wait(NULL);
- signal(SIGTERM, SIG_DFL);
- kill(-getpid(), SIGTERM);
- Exit(0);
- break;
- case THE_CHILD:
- signal(SIGTERM, SIG_DFL);
- kill(-getppid(), SIGTERM);
- Exit(0);
- break;
- }
-
- SIGNAL_RETURN;
-}
-
-#define close_fd(fd) close(fd), fd = -1
-
-static int
-spawn(void)
-/*
- * Inits pty and tty and forks a login process.
- * Does not close fd Xsocket.
- * If slave, the pty named in passedPty is already open for use
- */
-{
- TScreen *screen = &term->screen;
- int Xsocket = ConnectionNumber(screen->display);
-
- int ttyfd = -1;
- struct termio tio;
- int status;
-
- char termcap[TERMCAP_SIZE], newtc[TERMCAP_SIZE];
- char *TermName = NULL;
- char *ptr, *shname, buf[64];
- int i, no_dev_tty = False, envsize;
- char *dev_tty_name = (char *) 0;
- TTYSIZE_STRUCT ts;
- int pgrp = getpid();
- char numbuf[12], **envnew;
-
- screen->uid = getuid();
- screen->gid = getgid();
-
- if (am_slave >= 0) {
- screen->respond = am_slave;
- ptydev[strlen(ptydev) - 2] =
- ttydev[strlen(ttydev) - 2] = passedPty[0];
- ptydev[strlen(ptydev) - 1] =
- ttydev[strlen(ttydev) - 1] = passedPty[1];
-
- setgid(screen->gid);
- setuid(screen->uid);
- } else {
- Bool tty_got_hung;
-
- /*
- * Sometimes /dev/tty hangs on open (as in the case of a pty
- * that has gone away). Simply make up some reasonable
- * defaults.
- */
-
- signal(SIGALRM, hungtty);
- alarm(2); /* alarm(1) might return too soon */
- if (!setjmp(env)) {
- ttyfd = open("/dev/tty", O_RDWR);
- alarm(0);
- tty_got_hung = False;
- } else {
- tty_got_hung = True;
- ttyfd = -1;
- errno = ENXIO;
- }
- signal(SIGALRM, SIG_DFL);
-
- /*
- * Check results and ignore current control terminal if
- * necessary. ENXIO is what is normally returned if there is
- * no controlling terminal, but some systems (e.g. SunOS 4.0)
- * seem to return EIO. Solaris 2.3 is said to return EINVAL.
- */
- if (ttyfd < 0) {
- if (tty_got_hung || errno == ENXIO || errno == EIO ||
- errno == EINVAL || errno == ENOTTY) {
- no_dev_tty = True;
- tio = d_tio;
- } else {
- SysError(ERROR_OPDEVTTY);
- }
- } else {
-
- /* Get a copy of the current terminal's state,
- * if we can. Some systems (e.g., SVR4 and MacII)
- * may not have a controlling terminal at this point
- * if started directly from xdm or xinit,
- * in which case we just use the defaults as above.
- */
- if (ioctl(ttyfd, TCGETA, &tio) == -1)
- tio = d_tio;
-
- close_fd(ttyfd);
- }
-
- if (get_pty(&screen->respond)) {
- /* no ptys! */
- exit(ERROR_PTYS);
- }
- }
-
- /* avoid double MapWindow requests */
- XtSetMappedWhenManaged(XtParent(CURRENT_EMU(screen)), False);
-
- wm_delete_window = XInternAtom(XtDisplay(toplevel), "WM_DELETE_WINDOW",
- False);
-
- if (!TEK4014_ACTIVE(screen))
- VTInit(); /* realize now so know window size for tty driver */
-
- if (Console) {
- /*
- * Inform any running xconsole program
- * that we are going to steal the console.
- */
- XmuGetHostname(mit_console_name + MIT_CONSOLE_LEN, 255);
- mit_console = XInternAtom(screen->display, mit_console_name, False);
- /* the user told us to be the console, so we can use CurrentTime */
- XtOwnSelection(XtParent(CURRENT_EMU(screen)),
- mit_console, CurrentTime,
- ConvertConsoleSelection, NULL, NULL);
- }
-#if OPT_TEK4014
- if (screen->TekEmu) {
- envnew = tekterm;
- ptr = newtc;
- } else
-#endif
- {
- envnew = vtterm;
- ptr = termcap;
- }
-
- /*
- * This used to exit if no termcap entry was found for the specified
- * terminal name. That's a little unfriendly, so instead we'll allow
- * the program to proceed (but not to set $TERMCAP) if the termcap
- * entry is not found.
- */
- if (!get_termcap(TermName = resource.term_name, ptr, newtc)) {
- char *last = NULL;
- TermName = *envnew;
- while (*envnew != NULL) {
- if ((last == NULL || strcmp(last, *envnew))
- && get_termcap(*envnew, ptr, newtc)) {
- TermName = *envnew;
- break;
- }
- last = *envnew;
- envnew++;
- }
- }
-
- /* tell tty how big window is */
-#if OPT_TEK4014
- if (TEK4014_ACTIVE(screen)) {
- TTYSIZE_ROWS(ts) = 38;
- TTYSIZE_COLS(ts) = 81;
- ts.ws_xpixel = TFullWidth(screen);
- ts.ws_ypixel = TFullHeight(screen);
- } else
-#endif
- {
- TTYSIZE_ROWS(ts) = MaxRows(screen);
- TTYSIZE_COLS(ts) = MaxCols(screen);
- ts.ws_xpixel = FullWidth(screen);
- ts.ws_ypixel = FullHeight(screen);
- }
-
- if (am_slave < 0) {
-
- char sema[40];
- HEV sev;
- /* start a child process
- * use an event sema for sync
- */
- sprintf(sema, "\\SEM32\\xterm%s", &ptydev[8]);
- if (DosCreateEventSem(sema, &sev, DC_SEM_SHARED, False))
- SysError(ERROR_FORK);
-
- switch ((screen->pid = fork())) {
- case -1: /* error */
- SysError(ERROR_FORK);
- default: /* parent */
- whoami = THE_PARENT;
- DosWaitEventSem(sev, 1000L);
- DosCloseEventSem(sev);
- break;
- case 0: /* child */
- whoami = THE_CHILD;
-
-/*debug fclose(confd);
-opencons();*/
- /* we don't need the socket, or the pty master anymore */
- close(ConnectionNumber(screen->display));
- close(screen->respond);
-
- /* Now is the time to set up our process group and
- * open up the pty slave.
- */
- if ((ttyfd = open(ttydev, O_RDWR)) < 0) {
- /* dumm gelaufen */
- fprintf(stderr, "Cannot open slave side of PTY\n");
- exit(1);
- }
-
- /* use the same tty name that everyone else will use
- * (from ttyname)
- */
-#ifdef EMXNOTBOGUS
- if ((ptr = ttyname(ttyfd)) != 0) {
- /* it may be bigger */
- ttydev = TypeRealloc(char, strlen(ptr) + 1, ttydev);
- if (ttydev == NULL) {
- SysError(ERROR_SPREALLOC);
- }
- (void) strcpy(ttydev, ptr);
- }
-#else
- ptr = ttydev;
-#endif
- /* for safety: enable DUPs */
- ptioctl(ttyfd, XTY_ENADUP, 0);
-
- /* change ownership of tty to real group and user id */
- set_owner(ttydev, screen->uid, screen->gid,
- (resource.messages ? 0622U : 0600U));
-
- /* for the xf86sup-pty, we set the pty to bypass: OS/2 does
- * not have a line discipline structure
- */
- {
- struct termio t, t1;
- if (ptioctl(ttyfd, TCGETA, (char *) &t) < 0)
- t = d_tio;
-
- t.c_iflag = ICRNL;
- t.c_oflag = OPOST | ONLCR;
- t.c_lflag = ISIG | ICANON | ECHO | ECHOE | ECHOK;
-
- /* ignore error code, user will see it :-) */
- ptioctl(ttyfd, TCSETA, (char *) &t);
-
- /* set the console mode */
- if (Console) {
- int on = 1;
- if (ioctl(ttyfd, TIOCCONS, (char *) &on) == -1)
- fprintf(stderr, "%s: cannot open console\n", xterm_name);
- }
- }
-
- signal(SIGCHLD, SIG_DFL);
- signal(SIGHUP, SIG_IGN);
-
- /* restore various signals to their defaults */
- signal(SIGINT, SIG_DFL);
- signal(SIGQUIT, SIG_DFL);
- signal(SIGTERM, SIG_DFL);
-
- /* copy the environment before Setenv'ing */
- for (i = 0; gblenvp[i] != NULL; i++) ;
-
- /* compute number of xtermSetenv() calls below */
- envsize = 1; /* (NULL terminating entry) */
- envsize += 5; /* TERM, WINDOWID, DISPLAY, _SHELL, _VERSION */
- envsize += 2; /* COLUMNS, LINES */
-
- envnew = TypeCallocN(char *, (unsigned) i + envsize);
- memmove((char *) envnew, (char *) gblenvp, i * sizeof(char *));
- gblenvp = envnew;
- xtermSetenv("TERM=", TermName);
- if (!TermName)
- *newtc = 0;
-
- sprintf(buf, "%lu",
- ((unsigned long) XtWindow(SHELL_OF(CURRENT_EMU(screen)))));
- xtermSetenv("WINDOWID=", buf);
-
- /* put the display into the environment of the shell */
- xtermSetenv("DISPLAY=", XDisplayString(screen->display));
-
- xtermSetenv("XTERM_VERSION=", xtermVersion());
-
- signal(SIGTERM, SIG_DFL);
-
- /* this is the time to go and set up stdin, out, and err
- */
- /* dup the tty */
- for (i = 0; i <= 2; i++)
- if (i != ttyfd) {
- (void) close(i);
- (void) dup(ttyfd);
- }
-
- /* and close the tty */
- if (ttyfd > 2)
- close_fd(ttyfd);
-
- setpgrp(0, pgrp);
- setgid(screen->gid);
- setuid(screen->uid);
-
- if (handshake.rows > 0 && handshake.cols > 0) {
- set_max_row(screen, handshake.rows);
- set_max_col(screen, handshake.cols);
- TTYSIZE_ROWS(ts) = MaxRows(screen);
- TTYSIZE_COLS(ts) = MaxCols(screen);
- ts.ws_xpixel = FullWidth(screen);
- ts.ws_ypixel = FullHeight(screen);
- }
-
- sprintf(numbuf, "%d", MaxCols(screen));
- xtermSetenv("COLUMNS=", numbuf);
- sprintf(numbuf, "%d", MaxRows(screen));
- xtermSetenv("LINES=", numbuf);
-
- /* reconstruct dead environ variable */
- environ = gblenvp;
-
- /* need to reset after all the ioctl bashing we did above */
- ptioctl(0, TIOCSWINSZ, (char *) &ts);
-
- signal(SIGHUP, SIG_DFL);
-
- /* okay everything seems right, so tell the parent, we are going */
- {
- char sema[40];
- HEV sev;
- sprintf(sema, "\\SEM32\\xterm%s", &ttydev[8]);
- DosOpenEventSem(sema, &sev);
- DosPostEventSem(sev);
- DosCloseEventSem(sev);
- }
-
-#if OPT_LUIT_PROG
- /*
- * Use two copies of command_to_exec, in case luit is not actually
- * there, or refuses to run. In that case we will fall-through to
- * to command that the user gave anyway.
- */
- if (command_to_exec_with_luit) {
- xtermSetenv("XTERM_SHELL=",
- xtermFindShell(*command_to_exec_with_luit, False));
- TRACE(("spawning command \"%s\"\n", *command_to_exec_with_luit));
- execvp(*command_to_exec_with_luit, command_to_exec_with_luit);
- /* print error message on screen */
- fprintf(stderr, "%s: Can't execvp %s: %s\n",
- xterm_name, *command_to_exec_with_luit, strerror(errno));
- fprintf(stderr, "%s: cannot support your locale.\n",
- xterm_name);
- }
-#endif
- if (command_to_exec) {
- xtermSetenv("XTERM_SHELL=",
- xtermFindShell(*command_to_exec, False));
- TRACE(("spawning command \"%s\"\n", *command_to_exec));
- execvpe(*command_to_exec, command_to_exec, gblenvp);
-
- /* print error message on screen */
- fprintf(stderr, "%s: Can't execvp %s\n",
- xterm_name, *command_to_exec);
- }
-
- /* use a layered mechanism to find a shell */
- ptr = getenv("X11SHELL");
- if (!ptr)
- ptr = getenv("SHELL");
- if (!ptr)
- ptr = getenv("OS2_SHELL");
- if (!ptr)
- ptr = "SORRY_NO_SHELL_FOUND";
- xtermSetenv("XTERM_SHELL=", ptr);
-
- shname = x_basename(ptr);
- if (command_to_exec) {
- char *exargv[10]; /*XXX */
-
- exargv[0] = ptr;
- exargv[1] = "/C";
- exargv[2] = command_to_exec[0];
- exargv[3] = command_to_exec[1];
- exargv[4] = command_to_exec[2];
- exargv[5] = command_to_exec[3];
- exargv[6] = command_to_exec[4];
- exargv[7] = command_to_exec[5];
- exargv[8] = command_to_exec[6];
- exargv[9] = 0;
- execvpe(exargv[0], exargv, gblenvp);
-
- /* print error message on screen */
- fprintf(stderr, "%s: Can't execvp %s\n",
- xterm_name, *command_to_exec);
- } else {
- execlpe(ptr, shname, 0, gblenvp);
-
- /* Exec failed. */
- fprintf(stderr, "%s: Could not exec %s!\n",
- xterm_name, ptr);
- }
- sleep(5);
-
- /* preventively shoot the parent */
- kill(-getppid(), SIGTERM);
-
- exit(ERROR_EXEC);
- } /* endcase */
- }
- /* !am_slave */
- signal(SIGHUP, SIG_IGN);
-/*
- * Unfortunately, System V seems to have trouble divorcing the child process
- * from the process group of xterm. This is a problem because hitting the
- * INTR or QUIT characters on the keyboard will cause xterm to go away if we
- * don't ignore the signals. This is annoying.
- */
-
-/* signal (SIGINT, SIG_IGN);*/
- signal(SIGINT, killit);
- signal(SIGTERM, killit);
-
- /* hung shell problem */
- signal(SIGQUIT, SIG_IGN);
-/* signal (SIGTERM, SIG_IGN);*/
- return 0;
-} /* end spawn */
-
-SIGNAL_T
-Exit(int n)
-{
- TScreen *screen = &term->screen;
- int pty = term->screen.respond; /* file descriptor of pty */
- close(pty); /* close explicitly to avoid race with slave side */
-#ifdef ALLOWLOGGING
- if (screen->logging)
- CloseLog(screen);
-#endif
- if (am_slave < 0) {
- /* restore ownership of tty and pty */
- set_owner(ttydev, 0, 0, 0666U);
- set_owner(ptydev, 0, 0, 0666U);
- }
- exit(n);
- SIGNAL_RETURN;
-}
-
-/* ARGSUSED */
-static void
-resize(TScreen * screen, char *oldtc, char *newtc)
-{
-}
-
-/*
- * Does a non-blocking wait for a child process. If the system
- * doesn't support non-blocking wait, do nothing.
- * Returns the pid of the child, or 0 or -1 if none or error.
- */
-int
-nonblocking_wait(void)
-{
- pid_t pid;
-
- pid = waitpid(-1, NULL, WNOHANG);
- return pid;
-}
-
-/* ARGSUSED */
-static SIGNAL_T
-reapchild(int n GCC_UNUSED)
-{
- int olderrno = errno;
- int pid;
-
- pid = wait(NULL);
-
- /* cannot re-enable signal before waiting for child
- * because then SVR4 loops. Sigh. HP-UX 9.01 too.
- */
- (void) signal(SIGCHLD, reapchild);
-
- do {
- if (pid == term->screen.pid) {
-#ifdef DEBUG
- if (debug)
- fputs("Exiting\n", stderr);
-#endif
- if (!hold_screen)
- need_cleanup = TRUE;
- }
- } while ((pid = nonblocking_wait()) > 0);
-
- errno = olderrno;
- SIGNAL_RETURN;
-}
-
-/*
- * parse_tty_modes accepts lines of the following form:
- *
- * [SETTING] ...
- *
- * where setting consists of the words in the modelist followed by a character
- * or ^char.
- */
-static int
-parse_tty_modes(char *s, struct _xttymodes *modelist)
-{
- struct _xttymodes *mp;
- int c;
- int count = 0;
-
- TRACE(("parse_tty_modes\n"));
- while (1) {
- while (*s && isascii(CharOf(*s)) && isspace(CharOf(*s)))
- s++;
- if (!*s)
- return count;
-
- for (mp = modelist; mp->name; mp++) {
- if (strncmp(s, mp->name, mp->len) == 0)
- break;
- }
- if (!mp->name)
- return -1;
-
- s += mp->len;
- while (*s && isascii(CharOf(*s)) && isspace(CharOf(*s)))
- s++;
- if (!*s)
- return -1;
-
- if ((c = decode_keyvalue(&s, False)) != -1) {
- mp->value = c;
- mp->set = 1;
- count++;
- TRACE(("...parsed #%d: %s=%#x\n", count, mp->name, c));
- }
- }
-}
-
-int
-GetBytesAvailable(int fd)
-{
- long arg;
- ioctl(fd, FIONREAD, (char *) &arg);
- return (int) arg;
-}
-
-/* Utility function to try to hide system differences from
- everybody who used to call killpg() */
-
-int
-kill_process_group(int pid, int sig)
-{
- return kill(-pid, sig);
-}
-
-int
-ptioctl(int fd, int func, void *data)
-{
- APIRET rc;
- ULONG len;
- struct pt_termios pt;
- struct termio *t;
- int i;
-
- switch (func) {
- case TCGETA:
- rc = DosDevIOCtl(fd, XFREE86_PTY, XTY_TIOCGETA,
- NULL, 0, NULL,
- (ULONG *) & pt, sizeof(struct pt_termios), &len);
- if (rc)
- return -1;
- t = (struct termio *) data;
- t->c_iflag = pt.c_iflag;
- t->c_oflag = pt.c_oflag;
- t->c_cflag = pt.c_cflag;
- t->c_lflag = pt.c_lflag;
- for (i = 0; i < NCC; i++)
- t->c_cc[i] = pt.c_cc[i];
- return 0;
- case TCSETA:
- case TCSETAW:
- case TCSETAF:
- t = (struct termio *) data;
- pt.c_iflag = t->c_iflag;
- pt.c_oflag = t->c_oflag;
- pt.c_cflag = t->c_cflag;
- pt.c_lflag = t->c_lflag;
-
- for (i = 0; i < NCC; i++)
- pt.c_cc[i] = t->c_cc[i];
- if (func == TCSETA)
- i = XTY_TIOCSETA;
- else if (func == TCSETAW)
- i = XTY_TIOCSETAW;
- else
- i = XTY_TIOCSETAF;
- rc = DosDevIOCtl(fd, XFREE86_PTY, i,
- (ULONG *) & pt, sizeof(struct pt_termios), &len,
- NULL, 0, NULL);
- return (rc) ? -1 : 0;
- case TIOCCONS:
- return DosDevIOCtl(fd, XFREE86_PTY, XTY_TIOCCONS,
- (ULONG *) data, sizeof(ULONG), &len,
- NULL, 0, NULL);
- case TIOCSWINSZ:
- return DosDevIOCtl(fd, XFREE86_PTY, XTY_TIOCSWINSZ,
- (ULONG *) data, sizeof(TTYSIZE_STRUCT), &len,
- NULL, 0, NULL);
- case TIOCGWINSZ:
- return DosDevIOCtl(fd, XFREE86_PTY, XTY_TIOCGWINSZ,
- NULL, 0, NULL,
- (ULONG *) data, sizeof(TTYSIZE_STRUCT), &len);
- case XTY_ENADUP:
- i = 1;
- return DosDevIOCtl(fd, XFREE86_PTY, XTY_ENADUP,
- (ULONG *) & i, sizeof(ULONG), &len,
- NULL, 0, NULL);
- case XTY_TRACE:
- i = 2;
- return DosDevIOCtl(fd, XFREE86_PTY, XTY_TRACE,
- (ULONG *) & i, sizeof(ULONG), &len,
- NULL, 0, NULL);
- case PTMS_GETPTY:
- i = 1;
- return DosDevIOCtl(fd, XFREE86_PTY, PTMS_GETPTY,
- (ULONG *) & i, sizeof(ULONG), &len,
- (UCHAR *) data, 14, &len);
- default:
- return -1;
- }
-}
diff --git a/nx-X11/programs/xterm/plink.sh b/nx-X11/programs/xterm/plink.sh
deleted file mode 100644
index 244f1b517..000000000
--- a/nx-X11/programs/xterm/plink.sh
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/bin/sh
-# $XTermId: plink.sh,v 1.4 2005/05/03 00:38:24 tom Exp $
-# $XFree86: xc/programs/xterm/plink.sh,v 3.2 2005/05/03 00:38:24 dickey Exp $
-#
-# Reduce the number of dynamic libraries used to link an executable.
-LINKIT=
-while test $# != 0
-do
- OPT="$1"
- shift
- case $OPT in
- -l*)
- echo "testing if $OPT is needed"
- if ( eval $LINKIT $* >/dev/null 2>/dev/null )
- then
- : echo ...no
- else
- echo ...yes
- LINKIT="$LINKIT $OPT"
- fi
- ;;
- *)
- LINKIT="$LINKIT $OPT"
- ;;
- esac
-done
-eval $LINKIT
diff --git a/nx-X11/programs/xterm/precompose.c b/nx-X11/programs/xterm/precompose.c
deleted file mode 100644
index afe4c3f3f..000000000
--- a/nx-X11/programs/xterm/precompose.c
+++ /dev/null
@@ -1,1041 +0,0 @@
-/*
- * Canonical Compositions
- *
- * DO NOT EDIT BY HAND! This is generated by the script
- * unicode/make-precompose.sh
- */
-/* $XTermId: precompose.c,v 1.7 2004/12/01 01:27:47 tom Exp $ */
-/* $XFree86: xc/programs/xterm/precompose.c,v 1.3 2004/12/01 01:27:47 dickey Exp $ */
-
-#include <precompose.h>
-
-static struct {
- int replacement;
- int base;
- int comb;
-} precompositions[] = {
-{ 0x226E, 0x003C, 0x0338},
-{ 0x2260, 0x003D, 0x0338},
-{ 0x226F, 0x003E, 0x0338},
-{ 0x00C0, 0x0041, 0x0300},
-{ 0x00C1, 0x0041, 0x0301},
-{ 0x00C2, 0x0041, 0x0302},
-{ 0x00C3, 0x0041, 0x0303},
-{ 0x0100, 0x0041, 0x0304},
-{ 0x0102, 0x0041, 0x0306},
-{ 0x0226, 0x0041, 0x0307},
-{ 0x00C4, 0x0041, 0x0308},
-{ 0x1EA2, 0x0041, 0x0309},
-{ 0x00C5, 0x0041, 0x030A},
-{ 0x01CD, 0x0041, 0x030C},
-{ 0x0200, 0x0041, 0x030F},
-{ 0x0202, 0x0041, 0x0311},
-{ 0x1EA0, 0x0041, 0x0323},
-{ 0x1E00, 0x0041, 0x0325},
-{ 0x0104, 0x0041, 0x0328},
-{ 0x1E02, 0x0042, 0x0307},
-{ 0x1E04, 0x0042, 0x0323},
-{ 0x1E06, 0x0042, 0x0331},
-{ 0x0106, 0x0043, 0x0301},
-{ 0x0108, 0x0043, 0x0302},
-{ 0x010A, 0x0043, 0x0307},
-{ 0x010C, 0x0043, 0x030C},
-{ 0x00C7, 0x0043, 0x0327},
-{ 0x1E0A, 0x0044, 0x0307},
-{ 0x010E, 0x0044, 0x030C},
-{ 0x1E0C, 0x0044, 0x0323},
-{ 0x1E10, 0x0044, 0x0327},
-{ 0x1E12, 0x0044, 0x032D},
-{ 0x1E0E, 0x0044, 0x0331},
-{ 0x00C8, 0x0045, 0x0300},
-{ 0x00C9, 0x0045, 0x0301},
-{ 0x00CA, 0x0045, 0x0302},
-{ 0x1EBC, 0x0045, 0x0303},
-{ 0x0112, 0x0045, 0x0304},
-{ 0x0114, 0x0045, 0x0306},
-{ 0x0116, 0x0045, 0x0307},
-{ 0x00CB, 0x0045, 0x0308},
-{ 0x1EBA, 0x0045, 0x0309},
-{ 0x011A, 0x0045, 0x030C},
-{ 0x0204, 0x0045, 0x030F},
-{ 0x0206, 0x0045, 0x0311},
-{ 0x1EB8, 0x0045, 0x0323},
-{ 0x0228, 0x0045, 0x0327},
-{ 0x0118, 0x0045, 0x0328},
-{ 0x1E18, 0x0045, 0x032D},
-{ 0x1E1A, 0x0045, 0x0330},
-{ 0x1E1E, 0x0046, 0x0307},
-{ 0x01F4, 0x0047, 0x0301},
-{ 0x011C, 0x0047, 0x0302},
-{ 0x1E20, 0x0047, 0x0304},
-{ 0x011E, 0x0047, 0x0306},
-{ 0x0120, 0x0047, 0x0307},
-{ 0x01E6, 0x0047, 0x030C},
-{ 0x0122, 0x0047, 0x0327},
-{ 0x0124, 0x0048, 0x0302},
-{ 0x1E22, 0x0048, 0x0307},
-{ 0x1E26, 0x0048, 0x0308},
-{ 0x021E, 0x0048, 0x030C},
-{ 0x1E24, 0x0048, 0x0323},
-{ 0x1E28, 0x0048, 0x0327},
-{ 0x1E2A, 0x0048, 0x032E},
-{ 0x00CC, 0x0049, 0x0300},
-{ 0x00CD, 0x0049, 0x0301},
-{ 0x00CE, 0x0049, 0x0302},
-{ 0x0128, 0x0049, 0x0303},
-{ 0x012A, 0x0049, 0x0304},
-{ 0x012C, 0x0049, 0x0306},
-{ 0x0130, 0x0049, 0x0307},
-{ 0x00CF, 0x0049, 0x0308},
-{ 0x1EC8, 0x0049, 0x0309},
-{ 0x01CF, 0x0049, 0x030C},
-{ 0x0208, 0x0049, 0x030F},
-{ 0x020A, 0x0049, 0x0311},
-{ 0x1ECA, 0x0049, 0x0323},
-{ 0x012E, 0x0049, 0x0328},
-{ 0x1E2C, 0x0049, 0x0330},
-{ 0x0134, 0x004A, 0x0302},
-{ 0x1E30, 0x004B, 0x0301},
-{ 0x01E8, 0x004B, 0x030C},
-{ 0x1E32, 0x004B, 0x0323},
-{ 0x0136, 0x004B, 0x0327},
-{ 0x1E34, 0x004B, 0x0331},
-{ 0x0139, 0x004C, 0x0301},
-{ 0x013D, 0x004C, 0x030C},
-{ 0x1E36, 0x004C, 0x0323},
-{ 0x013B, 0x004C, 0x0327},
-{ 0x1E3C, 0x004C, 0x032D},
-{ 0x1E3A, 0x004C, 0x0331},
-{ 0x1E3E, 0x004D, 0x0301},
-{ 0x1E40, 0x004D, 0x0307},
-{ 0x1E42, 0x004D, 0x0323},
-{ 0x01F8, 0x004E, 0x0300},
-{ 0x0143, 0x004E, 0x0301},
-{ 0x00D1, 0x004E, 0x0303},
-{ 0x1E44, 0x004E, 0x0307},
-{ 0x0147, 0x004E, 0x030C},
-{ 0x1E46, 0x004E, 0x0323},
-{ 0x0145, 0x004E, 0x0327},
-{ 0x1E4A, 0x004E, 0x032D},
-{ 0x1E48, 0x004E, 0x0331},
-{ 0x00D2, 0x004F, 0x0300},
-{ 0x00D3, 0x004F, 0x0301},
-{ 0x00D4, 0x004F, 0x0302},
-{ 0x00D5, 0x004F, 0x0303},
-{ 0x014C, 0x004F, 0x0304},
-{ 0x014E, 0x004F, 0x0306},
-{ 0x022E, 0x004F, 0x0307},
-{ 0x00D6, 0x004F, 0x0308},
-{ 0x1ECE, 0x004F, 0x0309},
-{ 0x0150, 0x004F, 0x030B},
-{ 0x01D1, 0x004F, 0x030C},
-{ 0x020C, 0x004F, 0x030F},
-{ 0x020E, 0x004F, 0x0311},
-{ 0x01A0, 0x004F, 0x031B},
-{ 0x1ECC, 0x004F, 0x0323},
-{ 0x01EA, 0x004F, 0x0328},
-{ 0x1E54, 0x0050, 0x0301},
-{ 0x1E56, 0x0050, 0x0307},
-{ 0x0154, 0x0052, 0x0301},
-{ 0x1E58, 0x0052, 0x0307},
-{ 0x0158, 0x0052, 0x030C},
-{ 0x0210, 0x0052, 0x030F},
-{ 0x0212, 0x0052, 0x0311},
-{ 0x1E5A, 0x0052, 0x0323},
-{ 0x0156, 0x0052, 0x0327},
-{ 0x1E5E, 0x0052, 0x0331},
-{ 0x015A, 0x0053, 0x0301},
-{ 0x015C, 0x0053, 0x0302},
-{ 0x1E60, 0x0053, 0x0307},
-{ 0x0160, 0x0053, 0x030C},
-{ 0x1E62, 0x0053, 0x0323},
-{ 0x0218, 0x0053, 0x0326},
-{ 0x015E, 0x0053, 0x0327},
-{ 0x1E6A, 0x0054, 0x0307},
-{ 0x0164, 0x0054, 0x030C},
-{ 0x1E6C, 0x0054, 0x0323},
-{ 0x021A, 0x0054, 0x0326},
-{ 0x0162, 0x0054, 0x0327},
-{ 0x1E70, 0x0054, 0x032D},
-{ 0x1E6E, 0x0054, 0x0331},
-{ 0x00D9, 0x0055, 0x0300},
-{ 0x00DA, 0x0055, 0x0301},
-{ 0x00DB, 0x0055, 0x0302},
-{ 0x0168, 0x0055, 0x0303},
-{ 0x016A, 0x0055, 0x0304},
-{ 0x016C, 0x0055, 0x0306},
-{ 0x00DC, 0x0055, 0x0308},
-{ 0x1EE6, 0x0055, 0x0309},
-{ 0x016E, 0x0055, 0x030A},
-{ 0x0170, 0x0055, 0x030B},
-{ 0x01D3, 0x0055, 0x030C},
-{ 0x0214, 0x0055, 0x030F},
-{ 0x0216, 0x0055, 0x0311},
-{ 0x01AF, 0x0055, 0x031B},
-{ 0x1EE4, 0x0055, 0x0323},
-{ 0x1E72, 0x0055, 0x0324},
-{ 0x0172, 0x0055, 0x0328},
-{ 0x1E76, 0x0055, 0x032D},
-{ 0x1E74, 0x0055, 0x0330},
-{ 0x1E7C, 0x0056, 0x0303},
-{ 0x1E7E, 0x0056, 0x0323},
-{ 0x1E80, 0x0057, 0x0300},
-{ 0x1E82, 0x0057, 0x0301},
-{ 0x0174, 0x0057, 0x0302},
-{ 0x1E86, 0x0057, 0x0307},
-{ 0x1E84, 0x0057, 0x0308},
-{ 0x1E88, 0x0057, 0x0323},
-{ 0x1E8A, 0x0058, 0x0307},
-{ 0x1E8C, 0x0058, 0x0308},
-{ 0x1EF2, 0x0059, 0x0300},
-{ 0x00DD, 0x0059, 0x0301},
-{ 0x0176, 0x0059, 0x0302},
-{ 0x1EF8, 0x0059, 0x0303},
-{ 0x0232, 0x0059, 0x0304},
-{ 0x1E8E, 0x0059, 0x0307},
-{ 0x0178, 0x0059, 0x0308},
-{ 0x1EF6, 0x0059, 0x0309},
-{ 0x1EF4, 0x0059, 0x0323},
-{ 0x0179, 0x005A, 0x0301},
-{ 0x1E90, 0x005A, 0x0302},
-{ 0x017B, 0x005A, 0x0307},
-{ 0x017D, 0x005A, 0x030C},
-{ 0x1E92, 0x005A, 0x0323},
-{ 0x1E94, 0x005A, 0x0331},
-{ 0x00E0, 0x0061, 0x0300},
-{ 0x00E1, 0x0061, 0x0301},
-{ 0x00E2, 0x0061, 0x0302},
-{ 0x00E3, 0x0061, 0x0303},
-{ 0x0101, 0x0061, 0x0304},
-{ 0x0103, 0x0061, 0x0306},
-{ 0x0227, 0x0061, 0x0307},
-{ 0x00E4, 0x0061, 0x0308},
-{ 0x1EA3, 0x0061, 0x0309},
-{ 0x00E5, 0x0061, 0x030A},
-{ 0x01CE, 0x0061, 0x030C},
-{ 0x0201, 0x0061, 0x030F},
-{ 0x0203, 0x0061, 0x0311},
-{ 0x1EA1, 0x0061, 0x0323},
-{ 0x1E01, 0x0061, 0x0325},
-{ 0x0105, 0x0061, 0x0328},
-{ 0x1E03, 0x0062, 0x0307},
-{ 0x1E05, 0x0062, 0x0323},
-{ 0x1E07, 0x0062, 0x0331},
-{ 0x0107, 0x0063, 0x0301},
-{ 0x0109, 0x0063, 0x0302},
-{ 0x010B, 0x0063, 0x0307},
-{ 0x010D, 0x0063, 0x030C},
-{ 0x00E7, 0x0063, 0x0327},
-{ 0x1E0B, 0x0064, 0x0307},
-{ 0x010F, 0x0064, 0x030C},
-{ 0x1E0D, 0x0064, 0x0323},
-{ 0x1E11, 0x0064, 0x0327},
-{ 0x1E13, 0x0064, 0x032D},
-{ 0x1E0F, 0x0064, 0x0331},
-{ 0x00E8, 0x0065, 0x0300},
-{ 0x00E9, 0x0065, 0x0301},
-{ 0x00EA, 0x0065, 0x0302},
-{ 0x1EBD, 0x0065, 0x0303},
-{ 0x0113, 0x0065, 0x0304},
-{ 0x0115, 0x0065, 0x0306},
-{ 0x0117, 0x0065, 0x0307},
-{ 0x00EB, 0x0065, 0x0308},
-{ 0x1EBB, 0x0065, 0x0309},
-{ 0x011B, 0x0065, 0x030C},
-{ 0x0205, 0x0065, 0x030F},
-{ 0x0207, 0x0065, 0x0311},
-{ 0x1EB9, 0x0065, 0x0323},
-{ 0x0229, 0x0065, 0x0327},
-{ 0x0119, 0x0065, 0x0328},
-{ 0x1E19, 0x0065, 0x032D},
-{ 0x1E1B, 0x0065, 0x0330},
-{ 0x1E1F, 0x0066, 0x0307},
-{ 0x01F5, 0x0067, 0x0301},
-{ 0x011D, 0x0067, 0x0302},
-{ 0x1E21, 0x0067, 0x0304},
-{ 0x011F, 0x0067, 0x0306},
-{ 0x0121, 0x0067, 0x0307},
-{ 0x01E7, 0x0067, 0x030C},
-{ 0x0123, 0x0067, 0x0327},
-{ 0x0125, 0x0068, 0x0302},
-{ 0x1E23, 0x0068, 0x0307},
-{ 0x1E27, 0x0068, 0x0308},
-{ 0x021F, 0x0068, 0x030C},
-{ 0x1E25, 0x0068, 0x0323},
-{ 0x1E29, 0x0068, 0x0327},
-{ 0x1E2B, 0x0068, 0x032E},
-{ 0x1E96, 0x0068, 0x0331},
-{ 0x00EC, 0x0069, 0x0300},
-{ 0x00ED, 0x0069, 0x0301},
-{ 0x00EE, 0x0069, 0x0302},
-{ 0x0129, 0x0069, 0x0303},
-{ 0x012B, 0x0069, 0x0304},
-{ 0x012D, 0x0069, 0x0306},
-{ 0x00EF, 0x0069, 0x0308},
-{ 0x1EC9, 0x0069, 0x0309},
-{ 0x01D0, 0x0069, 0x030C},
-{ 0x0209, 0x0069, 0x030F},
-{ 0x020B, 0x0069, 0x0311},
-{ 0x1ECB, 0x0069, 0x0323},
-{ 0x012F, 0x0069, 0x0328},
-{ 0x1E2D, 0x0069, 0x0330},
-{ 0x0135, 0x006A, 0x0302},
-{ 0x01F0, 0x006A, 0x030C},
-{ 0x1E31, 0x006B, 0x0301},
-{ 0x01E9, 0x006B, 0x030C},
-{ 0x1E33, 0x006B, 0x0323},
-{ 0x0137, 0x006B, 0x0327},
-{ 0x1E35, 0x006B, 0x0331},
-{ 0x013A, 0x006C, 0x0301},
-{ 0x013E, 0x006C, 0x030C},
-{ 0x1E37, 0x006C, 0x0323},
-{ 0x013C, 0x006C, 0x0327},
-{ 0x1E3D, 0x006C, 0x032D},
-{ 0x1E3B, 0x006C, 0x0331},
-{ 0x1E3F, 0x006D, 0x0301},
-{ 0x1E41, 0x006D, 0x0307},
-{ 0x1E43, 0x006D, 0x0323},
-{ 0x01F9, 0x006E, 0x0300},
-{ 0x0144, 0x006E, 0x0301},
-{ 0x00F1, 0x006E, 0x0303},
-{ 0x1E45, 0x006E, 0x0307},
-{ 0x0148, 0x006E, 0x030C},
-{ 0x1E47, 0x006E, 0x0323},
-{ 0x0146, 0x006E, 0x0327},
-{ 0x1E4B, 0x006E, 0x032D},
-{ 0x1E49, 0x006E, 0x0331},
-{ 0x00F2, 0x006F, 0x0300},
-{ 0x00F3, 0x006F, 0x0301},
-{ 0x00F4, 0x006F, 0x0302},
-{ 0x00F5, 0x006F, 0x0303},
-{ 0x014D, 0x006F, 0x0304},
-{ 0x014F, 0x006F, 0x0306},
-{ 0x022F, 0x006F, 0x0307},
-{ 0x00F6, 0x006F, 0x0308},
-{ 0x1ECF, 0x006F, 0x0309},
-{ 0x0151, 0x006F, 0x030B},
-{ 0x01D2, 0x006F, 0x030C},
-{ 0x020D, 0x006F, 0x030F},
-{ 0x020F, 0x006F, 0x0311},
-{ 0x01A1, 0x006F, 0x031B},
-{ 0x1ECD, 0x006F, 0x0323},
-{ 0x01EB, 0x006F, 0x0328},
-{ 0x1E55, 0x0070, 0x0301},
-{ 0x1E57, 0x0070, 0x0307},
-{ 0x0155, 0x0072, 0x0301},
-{ 0x1E59, 0x0072, 0x0307},
-{ 0x0159, 0x0072, 0x030C},
-{ 0x0211, 0x0072, 0x030F},
-{ 0x0213, 0x0072, 0x0311},
-{ 0x1E5B, 0x0072, 0x0323},
-{ 0x0157, 0x0072, 0x0327},
-{ 0x1E5F, 0x0072, 0x0331},
-{ 0x015B, 0x0073, 0x0301},
-{ 0x015D, 0x0073, 0x0302},
-{ 0x1E61, 0x0073, 0x0307},
-{ 0x0161, 0x0073, 0x030C},
-{ 0x1E63, 0x0073, 0x0323},
-{ 0x0219, 0x0073, 0x0326},
-{ 0x015F, 0x0073, 0x0327},
-{ 0x1E6B, 0x0074, 0x0307},
-{ 0x1E97, 0x0074, 0x0308},
-{ 0x0165, 0x0074, 0x030C},
-{ 0x1E6D, 0x0074, 0x0323},
-{ 0x021B, 0x0074, 0x0326},
-{ 0x0163, 0x0074, 0x0327},
-{ 0x1E71, 0x0074, 0x032D},
-{ 0x1E6F, 0x0074, 0x0331},
-{ 0x00F9, 0x0075, 0x0300},
-{ 0x00FA, 0x0075, 0x0301},
-{ 0x00FB, 0x0075, 0x0302},
-{ 0x0169, 0x0075, 0x0303},
-{ 0x016B, 0x0075, 0x0304},
-{ 0x016D, 0x0075, 0x0306},
-{ 0x00FC, 0x0075, 0x0308},
-{ 0x1EE7, 0x0075, 0x0309},
-{ 0x016F, 0x0075, 0x030A},
-{ 0x0171, 0x0075, 0x030B},
-{ 0x01D4, 0x0075, 0x030C},
-{ 0x0215, 0x0075, 0x030F},
-{ 0x0217, 0x0075, 0x0311},
-{ 0x01B0, 0x0075, 0x031B},
-{ 0x1EE5, 0x0075, 0x0323},
-{ 0x1E73, 0x0075, 0x0324},
-{ 0x0173, 0x0075, 0x0328},
-{ 0x1E77, 0x0075, 0x032D},
-{ 0x1E75, 0x0075, 0x0330},
-{ 0x1E7D, 0x0076, 0x0303},
-{ 0x1E7F, 0x0076, 0x0323},
-{ 0x1E81, 0x0077, 0x0300},
-{ 0x1E83, 0x0077, 0x0301},
-{ 0x0175, 0x0077, 0x0302},
-{ 0x1E87, 0x0077, 0x0307},
-{ 0x1E85, 0x0077, 0x0308},
-{ 0x1E98, 0x0077, 0x030A},
-{ 0x1E89, 0x0077, 0x0323},
-{ 0x1E8B, 0x0078, 0x0307},
-{ 0x1E8D, 0x0078, 0x0308},
-{ 0x1EF3, 0x0079, 0x0300},
-{ 0x00FD, 0x0079, 0x0301},
-{ 0x0177, 0x0079, 0x0302},
-{ 0x1EF9, 0x0079, 0x0303},
-{ 0x0233, 0x0079, 0x0304},
-{ 0x1E8F, 0x0079, 0x0307},
-{ 0x00FF, 0x0079, 0x0308},
-{ 0x1EF7, 0x0079, 0x0309},
-{ 0x1E99, 0x0079, 0x030A},
-{ 0x1EF5, 0x0079, 0x0323},
-{ 0x017A, 0x007A, 0x0301},
-{ 0x1E91, 0x007A, 0x0302},
-{ 0x017C, 0x007A, 0x0307},
-{ 0x017E, 0x007A, 0x030C},
-{ 0x1E93, 0x007A, 0x0323},
-{ 0x1E95, 0x007A, 0x0331},
-{ 0x1FED, 0x00A8, 0x0300},
-{ 0x0385, 0x00A8, 0x0301},
-{ 0x1FC1, 0x00A8, 0x0342},
-{ 0x1EA6, 0x00C2, 0x0300},
-{ 0x1EA4, 0x00C2, 0x0301},
-{ 0x1EAA, 0x00C2, 0x0303},
-{ 0x1EA8, 0x00C2, 0x0309},
-{ 0x01DE, 0x00C4, 0x0304},
-{ 0x01FA, 0x00C5, 0x0301},
-{ 0x01FC, 0x00C6, 0x0301},
-{ 0x01E2, 0x00C6, 0x0304},
-{ 0x1E08, 0x00C7, 0x0301},
-{ 0x1EC0, 0x00CA, 0x0300},
-{ 0x1EBE, 0x00CA, 0x0301},
-{ 0x1EC4, 0x00CA, 0x0303},
-{ 0x1EC2, 0x00CA, 0x0309},
-{ 0x1E2E, 0x00CF, 0x0301},
-{ 0x1ED2, 0x00D4, 0x0300},
-{ 0x1ED0, 0x00D4, 0x0301},
-{ 0x1ED6, 0x00D4, 0x0303},
-{ 0x1ED4, 0x00D4, 0x0309},
-{ 0x1E4C, 0x00D5, 0x0301},
-{ 0x022C, 0x00D5, 0x0304},
-{ 0x1E4E, 0x00D5, 0x0308},
-{ 0x022A, 0x00D6, 0x0304},
-{ 0x01FE, 0x00D8, 0x0301},
-{ 0x01DB, 0x00DC, 0x0300},
-{ 0x01D7, 0x00DC, 0x0301},
-{ 0x01D5, 0x00DC, 0x0304},
-{ 0x01D9, 0x00DC, 0x030C},
-{ 0x1EA7, 0x00E2, 0x0300},
-{ 0x1EA5, 0x00E2, 0x0301},
-{ 0x1EAB, 0x00E2, 0x0303},
-{ 0x1EA9, 0x00E2, 0x0309},
-{ 0x01DF, 0x00E4, 0x0304},
-{ 0x01FB, 0x00E5, 0x0301},
-{ 0x01FD, 0x00E6, 0x0301},
-{ 0x01E3, 0x00E6, 0x0304},
-{ 0x1E09, 0x00E7, 0x0301},
-{ 0x1EC1, 0x00EA, 0x0300},
-{ 0x1EBF, 0x00EA, 0x0301},
-{ 0x1EC5, 0x00EA, 0x0303},
-{ 0x1EC3, 0x00EA, 0x0309},
-{ 0x1E2F, 0x00EF, 0x0301},
-{ 0x1ED3, 0x00F4, 0x0300},
-{ 0x1ED1, 0x00F4, 0x0301},
-{ 0x1ED7, 0x00F4, 0x0303},
-{ 0x1ED5, 0x00F4, 0x0309},
-{ 0x1E4D, 0x00F5, 0x0301},
-{ 0x022D, 0x00F5, 0x0304},
-{ 0x1E4F, 0x00F5, 0x0308},
-{ 0x022B, 0x00F6, 0x0304},
-{ 0x01FF, 0x00F8, 0x0301},
-{ 0x01DC, 0x00FC, 0x0300},
-{ 0x01D8, 0x00FC, 0x0301},
-{ 0x01D6, 0x00FC, 0x0304},
-{ 0x01DA, 0x00FC, 0x030C},
-{ 0x1EB0, 0x0102, 0x0300},
-{ 0x1EAE, 0x0102, 0x0301},
-{ 0x1EB4, 0x0102, 0x0303},
-{ 0x1EB2, 0x0102, 0x0309},
-{ 0x1EB1, 0x0103, 0x0300},
-{ 0x1EAF, 0x0103, 0x0301},
-{ 0x1EB5, 0x0103, 0x0303},
-{ 0x1EB3, 0x0103, 0x0309},
-{ 0x1E14, 0x0112, 0x0300},
-{ 0x1E16, 0x0112, 0x0301},
-{ 0x1E15, 0x0113, 0x0300},
-{ 0x1E17, 0x0113, 0x0301},
-{ 0x1E50, 0x014C, 0x0300},
-{ 0x1E52, 0x014C, 0x0301},
-{ 0x1E51, 0x014D, 0x0300},
-{ 0x1E53, 0x014D, 0x0301},
-{ 0x1E64, 0x015A, 0x0307},
-{ 0x1E65, 0x015B, 0x0307},
-{ 0x1E66, 0x0160, 0x0307},
-{ 0x1E67, 0x0161, 0x0307},
-{ 0x1E78, 0x0168, 0x0301},
-{ 0x1E79, 0x0169, 0x0301},
-{ 0x1E7A, 0x016A, 0x0308},
-{ 0x1E7B, 0x016B, 0x0308},
-{ 0x1E9B, 0x017F, 0x0307},
-{ 0x1EDC, 0x01A0, 0x0300},
-{ 0x1EDA, 0x01A0, 0x0301},
-{ 0x1EE0, 0x01A0, 0x0303},
-{ 0x1EDE, 0x01A0, 0x0309},
-{ 0x1EE2, 0x01A0, 0x0323},
-{ 0x1EDD, 0x01A1, 0x0300},
-{ 0x1EDB, 0x01A1, 0x0301},
-{ 0x1EE1, 0x01A1, 0x0303},
-{ 0x1EDF, 0x01A1, 0x0309},
-{ 0x1EE3, 0x01A1, 0x0323},
-{ 0x1EEA, 0x01AF, 0x0300},
-{ 0x1EE8, 0x01AF, 0x0301},
-{ 0x1EEE, 0x01AF, 0x0303},
-{ 0x1EEC, 0x01AF, 0x0309},
-{ 0x1EF0, 0x01AF, 0x0323},
-{ 0x1EEB, 0x01B0, 0x0300},
-{ 0x1EE9, 0x01B0, 0x0301},
-{ 0x1EEF, 0x01B0, 0x0303},
-{ 0x1EED, 0x01B0, 0x0309},
-{ 0x1EF1, 0x01B0, 0x0323},
-{ 0x01EE, 0x01B7, 0x030C},
-{ 0x01EC, 0x01EA, 0x0304},
-{ 0x01ED, 0x01EB, 0x0304},
-{ 0x01E0, 0x0226, 0x0304},
-{ 0x01E1, 0x0227, 0x0304},
-{ 0x1E1C, 0x0228, 0x0306},
-{ 0x1E1D, 0x0229, 0x0306},
-{ 0x0230, 0x022E, 0x0304},
-{ 0x0231, 0x022F, 0x0304},
-{ 0x01EF, 0x0292, 0x030C},
-{ 0x0344, 0x0308, 0x0301},
-{ 0x1FBA, 0x0391, 0x0300},
-{ 0x0386, 0x0391, 0x0301},
-{ 0x1FB9, 0x0391, 0x0304},
-{ 0x1FB8, 0x0391, 0x0306},
-{ 0x1F08, 0x0391, 0x0313},
-{ 0x1F09, 0x0391, 0x0314},
-{ 0x1FBC, 0x0391, 0x0345},
-{ 0x1FC8, 0x0395, 0x0300},
-{ 0x0388, 0x0395, 0x0301},
-{ 0x1F18, 0x0395, 0x0313},
-{ 0x1F19, 0x0395, 0x0314},
-{ 0x1FCA, 0x0397, 0x0300},
-{ 0x0389, 0x0397, 0x0301},
-{ 0x1F28, 0x0397, 0x0313},
-{ 0x1F29, 0x0397, 0x0314},
-{ 0x1FCC, 0x0397, 0x0345},
-{ 0x1FDA, 0x0399, 0x0300},
-{ 0x038A, 0x0399, 0x0301},
-{ 0x1FD9, 0x0399, 0x0304},
-{ 0x1FD8, 0x0399, 0x0306},
-{ 0x03AA, 0x0399, 0x0308},
-{ 0x1F38, 0x0399, 0x0313},
-{ 0x1F39, 0x0399, 0x0314},
-{ 0x1FF8, 0x039F, 0x0300},
-{ 0x038C, 0x039F, 0x0301},
-{ 0x1F48, 0x039F, 0x0313},
-{ 0x1F49, 0x039F, 0x0314},
-{ 0x1FEC, 0x03A1, 0x0314},
-{ 0x1FEA, 0x03A5, 0x0300},
-{ 0x038E, 0x03A5, 0x0301},
-{ 0x1FE9, 0x03A5, 0x0304},
-{ 0x1FE8, 0x03A5, 0x0306},
-{ 0x03AB, 0x03A5, 0x0308},
-{ 0x1F59, 0x03A5, 0x0314},
-{ 0x1FFA, 0x03A9, 0x0300},
-{ 0x038F, 0x03A9, 0x0301},
-{ 0x1F68, 0x03A9, 0x0313},
-{ 0x1F69, 0x03A9, 0x0314},
-{ 0x1FFC, 0x03A9, 0x0345},
-{ 0x1FB4, 0x03AC, 0x0345},
-{ 0x1FC4, 0x03AE, 0x0345},
-{ 0x1F70, 0x03B1, 0x0300},
-{ 0x03AC, 0x03B1, 0x0301},
-{ 0x1FB1, 0x03B1, 0x0304},
-{ 0x1FB0, 0x03B1, 0x0306},
-{ 0x1F00, 0x03B1, 0x0313},
-{ 0x1F01, 0x03B1, 0x0314},
-{ 0x1FB6, 0x03B1, 0x0342},
-{ 0x1FB3, 0x03B1, 0x0345},
-{ 0x1F72, 0x03B5, 0x0300},
-{ 0x03AD, 0x03B5, 0x0301},
-{ 0x1F10, 0x03B5, 0x0313},
-{ 0x1F11, 0x03B5, 0x0314},
-{ 0x1F74, 0x03B7, 0x0300},
-{ 0x03AE, 0x03B7, 0x0301},
-{ 0x1F20, 0x03B7, 0x0313},
-{ 0x1F21, 0x03B7, 0x0314},
-{ 0x1FC6, 0x03B7, 0x0342},
-{ 0x1FC3, 0x03B7, 0x0345},
-{ 0x1F76, 0x03B9, 0x0300},
-{ 0x03AF, 0x03B9, 0x0301},
-{ 0x1FD1, 0x03B9, 0x0304},
-{ 0x1FD0, 0x03B9, 0x0306},
-{ 0x03CA, 0x03B9, 0x0308},
-{ 0x1F30, 0x03B9, 0x0313},
-{ 0x1F31, 0x03B9, 0x0314},
-{ 0x1FD6, 0x03B9, 0x0342},
-{ 0x1F78, 0x03BF, 0x0300},
-{ 0x03CC, 0x03BF, 0x0301},
-{ 0x1F40, 0x03BF, 0x0313},
-{ 0x1F41, 0x03BF, 0x0314},
-{ 0x1FE4, 0x03C1, 0x0313},
-{ 0x1FE5, 0x03C1, 0x0314},
-{ 0x1F7A, 0x03C5, 0x0300},
-{ 0x03CD, 0x03C5, 0x0301},
-{ 0x1FE1, 0x03C5, 0x0304},
-{ 0x1FE0, 0x03C5, 0x0306},
-{ 0x03CB, 0x03C5, 0x0308},
-{ 0x1F50, 0x03C5, 0x0313},
-{ 0x1F51, 0x03C5, 0x0314},
-{ 0x1FE6, 0x03C5, 0x0342},
-{ 0x1F7C, 0x03C9, 0x0300},
-{ 0x03CE, 0x03C9, 0x0301},
-{ 0x1F60, 0x03C9, 0x0313},
-{ 0x1F61, 0x03C9, 0x0314},
-{ 0x1FF6, 0x03C9, 0x0342},
-{ 0x1FF3, 0x03C9, 0x0345},
-{ 0x1FD2, 0x03CA, 0x0300},
-{ 0x0390, 0x03CA, 0x0301},
-{ 0x1FD7, 0x03CA, 0x0342},
-{ 0x1FE2, 0x03CB, 0x0300},
-{ 0x03B0, 0x03CB, 0x0301},
-{ 0x1FE7, 0x03CB, 0x0342},
-{ 0x1FF4, 0x03CE, 0x0345},
-{ 0x03D3, 0x03D2, 0x0301},
-{ 0x03D4, 0x03D2, 0x0308},
-{ 0x0407, 0x0406, 0x0308},
-{ 0x04D0, 0x0410, 0x0306},
-{ 0x04D2, 0x0410, 0x0308},
-{ 0x0403, 0x0413, 0x0301},
-{ 0x0400, 0x0415, 0x0300},
-{ 0x04D6, 0x0415, 0x0306},
-{ 0x0401, 0x0415, 0x0308},
-{ 0x04C1, 0x0416, 0x0306},
-{ 0x04DC, 0x0416, 0x0308},
-{ 0x04DE, 0x0417, 0x0308},
-{ 0x040D, 0x0418, 0x0300},
-{ 0x04E2, 0x0418, 0x0304},
-{ 0x0419, 0x0418, 0x0306},
-{ 0x04E4, 0x0418, 0x0308},
-{ 0x040C, 0x041A, 0x0301},
-{ 0x04E6, 0x041E, 0x0308},
-{ 0x04EE, 0x0423, 0x0304},
-{ 0x040E, 0x0423, 0x0306},
-{ 0x04F0, 0x0423, 0x0308},
-{ 0x04F2, 0x0423, 0x030B},
-{ 0x04F4, 0x0427, 0x0308},
-{ 0x04F8, 0x042B, 0x0308},
-{ 0x04EC, 0x042D, 0x0308},
-{ 0x04D1, 0x0430, 0x0306},
-{ 0x04D3, 0x0430, 0x0308},
-{ 0x0453, 0x0433, 0x0301},
-{ 0x0450, 0x0435, 0x0300},
-{ 0x04D7, 0x0435, 0x0306},
-{ 0x0451, 0x0435, 0x0308},
-{ 0x04C2, 0x0436, 0x0306},
-{ 0x04DD, 0x0436, 0x0308},
-{ 0x04DF, 0x0437, 0x0308},
-{ 0x045D, 0x0438, 0x0300},
-{ 0x04E3, 0x0438, 0x0304},
-{ 0x0439, 0x0438, 0x0306},
-{ 0x04E5, 0x0438, 0x0308},
-{ 0x045C, 0x043A, 0x0301},
-{ 0x04E7, 0x043E, 0x0308},
-{ 0x04EF, 0x0443, 0x0304},
-{ 0x045E, 0x0443, 0x0306},
-{ 0x04F1, 0x0443, 0x0308},
-{ 0x04F3, 0x0443, 0x030B},
-{ 0x04F5, 0x0447, 0x0308},
-{ 0x04F9, 0x044B, 0x0308},
-{ 0x04ED, 0x044D, 0x0308},
-{ 0x0457, 0x0456, 0x0308},
-{ 0x0476, 0x0474, 0x030F},
-{ 0x0477, 0x0475, 0x030F},
-{ 0x04DA, 0x04D8, 0x0308},
-{ 0x04DB, 0x04D9, 0x0308},
-{ 0x04EA, 0x04E8, 0x0308},
-{ 0x04EB, 0x04E9, 0x0308},
-{ 0xFB2E, 0x05D0, 0x05B7},
-{ 0xFB2F, 0x05D0, 0x05B8},
-{ 0xFB30, 0x05D0, 0x05BC},
-{ 0xFB31, 0x05D1, 0x05BC},
-{ 0xFB4C, 0x05D1, 0x05BF},
-{ 0xFB32, 0x05D2, 0x05BC},
-{ 0xFB33, 0x05D3, 0x05BC},
-{ 0xFB34, 0x05D4, 0x05BC},
-{ 0xFB4B, 0x05D5, 0x05B9},
-{ 0xFB35, 0x05D5, 0x05BC},
-{ 0xFB36, 0x05D6, 0x05BC},
-{ 0xFB38, 0x05D8, 0x05BC},
-{ 0xFB1D, 0x05D9, 0x05B4},
-{ 0xFB39, 0x05D9, 0x05BC},
-{ 0xFB3A, 0x05DA, 0x05BC},
-{ 0xFB3B, 0x05DB, 0x05BC},
-{ 0xFB4D, 0x05DB, 0x05BF},
-{ 0xFB3C, 0x05DC, 0x05BC},
-{ 0xFB3E, 0x05DE, 0x05BC},
-{ 0xFB40, 0x05E0, 0x05BC},
-{ 0xFB41, 0x05E1, 0x05BC},
-{ 0xFB43, 0x05E3, 0x05BC},
-{ 0xFB44, 0x05E4, 0x05BC},
-{ 0xFB4E, 0x05E4, 0x05BF},
-{ 0xFB46, 0x05E6, 0x05BC},
-{ 0xFB47, 0x05E7, 0x05BC},
-{ 0xFB48, 0x05E8, 0x05BC},
-{ 0xFB49, 0x05E9, 0x05BC},
-{ 0xFB2A, 0x05E9, 0x05C1},
-{ 0xFB2B, 0x05E9, 0x05C2},
-{ 0xFB4A, 0x05EA, 0x05BC},
-{ 0xFB1F, 0x05F2, 0x05B7},
-{ 0x0622, 0x0627, 0x0653},
-{ 0x0623, 0x0627, 0x0654},
-{ 0x0625, 0x0627, 0x0655},
-{ 0x0624, 0x0648, 0x0654},
-{ 0x0626, 0x064A, 0x0654},
-{ 0x06C2, 0x06C1, 0x0654},
-{ 0x06D3, 0x06D2, 0x0654},
-{ 0x06C0, 0x06D5, 0x0654},
-{ 0x0958, 0x0915, 0x093C},
-{ 0x0959, 0x0916, 0x093C},
-{ 0x095A, 0x0917, 0x093C},
-{ 0x095B, 0x091C, 0x093C},
-{ 0x095C, 0x0921, 0x093C},
-{ 0x095D, 0x0922, 0x093C},
-{ 0x0929, 0x0928, 0x093C},
-{ 0x095E, 0x092B, 0x093C},
-{ 0x095F, 0x092F, 0x093C},
-{ 0x0931, 0x0930, 0x093C},
-{ 0x0934, 0x0933, 0x093C},
-{ 0x09DC, 0x09A1, 0x09BC},
-{ 0x09DD, 0x09A2, 0x09BC},
-{ 0x09DF, 0x09AF, 0x09BC},
-{ 0x09CB, 0x09C7, 0x09BE},
-{ 0x09CC, 0x09C7, 0x09D7},
-{ 0x0A59, 0x0A16, 0x0A3C},
-{ 0x0A5A, 0x0A17, 0x0A3C},
-{ 0x0A5B, 0x0A1C, 0x0A3C},
-{ 0x0A5E, 0x0A2B, 0x0A3C},
-{ 0x0A33, 0x0A32, 0x0A3C},
-{ 0x0A36, 0x0A38, 0x0A3C},
-{ 0x0B5C, 0x0B21, 0x0B3C},
-{ 0x0B5D, 0x0B22, 0x0B3C},
-{ 0x0B4B, 0x0B47, 0x0B3E},
-{ 0x0B48, 0x0B47, 0x0B56},
-{ 0x0B4C, 0x0B47, 0x0B57},
-{ 0x0B94, 0x0B92, 0x0BD7},
-{ 0x0BCA, 0x0BC6, 0x0BBE},
-{ 0x0BCC, 0x0BC6, 0x0BD7},
-{ 0x0BCB, 0x0BC7, 0x0BBE},
-{ 0x0C48, 0x0C46, 0x0C56},
-{ 0x0CC0, 0x0CBF, 0x0CD5},
-{ 0x0CCA, 0x0CC6, 0x0CC2},
-{ 0x0CC7, 0x0CC6, 0x0CD5},
-{ 0x0CC8, 0x0CC6, 0x0CD6},
-{ 0x0CCB, 0x0CCA, 0x0CD5},
-{ 0x0D4A, 0x0D46, 0x0D3E},
-{ 0x0D4C, 0x0D46, 0x0D57},
-{ 0x0D4B, 0x0D47, 0x0D3E},
-{ 0x0DDA, 0x0DD9, 0x0DCA},
-{ 0x0DDC, 0x0DD9, 0x0DCF},
-{ 0x0DDE, 0x0DD9, 0x0DDF},
-{ 0x0DDD, 0x0DDC, 0x0DCA},
-{ 0x0F69, 0x0F40, 0x0FB5},
-{ 0x0F43, 0x0F42, 0x0FB7},
-{ 0x0F4D, 0x0F4C, 0x0FB7},
-{ 0x0F52, 0x0F51, 0x0FB7},
-{ 0x0F57, 0x0F56, 0x0FB7},
-{ 0x0F5C, 0x0F5B, 0x0FB7},
-{ 0x0F73, 0x0F71, 0x0F72},
-{ 0x0F75, 0x0F71, 0x0F74},
-{ 0x0F81, 0x0F71, 0x0F80},
-{ 0x0FB9, 0x0F90, 0x0FB5},
-{ 0x0F93, 0x0F92, 0x0FB7},
-{ 0x0F9D, 0x0F9C, 0x0FB7},
-{ 0x0FA2, 0x0FA1, 0x0FB7},
-{ 0x0FA7, 0x0FA6, 0x0FB7},
-{ 0x0FAC, 0x0FAB, 0x0FB7},
-{ 0x0F76, 0x0FB2, 0x0F80},
-{ 0x0F78, 0x0FB3, 0x0F80},
-{ 0x1026, 0x1025, 0x102E},
-{ 0x1D15E, 0x1D157, 0x1D165},
-{ 0x1D15F, 0x1D158, 0x1D165},
-{ 0x1D160, 0x1D15F, 0x1D16E},
-{ 0x1D161, 0x1D15F, 0x1D16F},
-{ 0x1D162, 0x1D15F, 0x1D170},
-{ 0x1D163, 0x1D15F, 0x1D171},
-{ 0x1D164, 0x1D15F, 0x1D172},
-{ 0x1D1BB, 0x1D1B9, 0x1D165},
-{ 0x1D1BC, 0x1D1BA, 0x1D165},
-{ 0x1D1BD, 0x1D1BB, 0x1D16E},
-{ 0x1D1BF, 0x1D1BB, 0x1D16F},
-{ 0x1D1BE, 0x1D1BC, 0x1D16E},
-{ 0x1D1C0, 0x1D1BC, 0x1D16F},
-{ 0x1E38, 0x1E36, 0x0304},
-{ 0x1E39, 0x1E37, 0x0304},
-{ 0x1E5C, 0x1E5A, 0x0304},
-{ 0x1E5D, 0x1E5B, 0x0304},
-{ 0x1E68, 0x1E62, 0x0307},
-{ 0x1E69, 0x1E63, 0x0307},
-{ 0x1EAC, 0x1EA0, 0x0302},
-{ 0x1EB6, 0x1EA0, 0x0306},
-{ 0x1EAD, 0x1EA1, 0x0302},
-{ 0x1EB7, 0x1EA1, 0x0306},
-{ 0x1EC6, 0x1EB8, 0x0302},
-{ 0x1EC7, 0x1EB9, 0x0302},
-{ 0x1ED8, 0x1ECC, 0x0302},
-{ 0x1ED9, 0x1ECD, 0x0302},
-{ 0x1F02, 0x1F00, 0x0300},
-{ 0x1F04, 0x1F00, 0x0301},
-{ 0x1F06, 0x1F00, 0x0342},
-{ 0x1F80, 0x1F00, 0x0345},
-{ 0x1F03, 0x1F01, 0x0300},
-{ 0x1F05, 0x1F01, 0x0301},
-{ 0x1F07, 0x1F01, 0x0342},
-{ 0x1F81, 0x1F01, 0x0345},
-{ 0x1F82, 0x1F02, 0x0345},
-{ 0x1F83, 0x1F03, 0x0345},
-{ 0x1F84, 0x1F04, 0x0345},
-{ 0x1F85, 0x1F05, 0x0345},
-{ 0x1F86, 0x1F06, 0x0345},
-{ 0x1F87, 0x1F07, 0x0345},
-{ 0x1F0A, 0x1F08, 0x0300},
-{ 0x1F0C, 0x1F08, 0x0301},
-{ 0x1F0E, 0x1F08, 0x0342},
-{ 0x1F88, 0x1F08, 0x0345},
-{ 0x1F0B, 0x1F09, 0x0300},
-{ 0x1F0D, 0x1F09, 0x0301},
-{ 0x1F0F, 0x1F09, 0x0342},
-{ 0x1F89, 0x1F09, 0x0345},
-{ 0x1F8A, 0x1F0A, 0x0345},
-{ 0x1F8B, 0x1F0B, 0x0345},
-{ 0x1F8C, 0x1F0C, 0x0345},
-{ 0x1F8D, 0x1F0D, 0x0345},
-{ 0x1F8E, 0x1F0E, 0x0345},
-{ 0x1F8F, 0x1F0F, 0x0345},
-{ 0x1F12, 0x1F10, 0x0300},
-{ 0x1F14, 0x1F10, 0x0301},
-{ 0x1F13, 0x1F11, 0x0300},
-{ 0x1F15, 0x1F11, 0x0301},
-{ 0x1F1A, 0x1F18, 0x0300},
-{ 0x1F1C, 0x1F18, 0x0301},
-{ 0x1F1B, 0x1F19, 0x0300},
-{ 0x1F1D, 0x1F19, 0x0301},
-{ 0x1F22, 0x1F20, 0x0300},
-{ 0x1F24, 0x1F20, 0x0301},
-{ 0x1F26, 0x1F20, 0x0342},
-{ 0x1F90, 0x1F20, 0x0345},
-{ 0x1F23, 0x1F21, 0x0300},
-{ 0x1F25, 0x1F21, 0x0301},
-{ 0x1F27, 0x1F21, 0x0342},
-{ 0x1F91, 0x1F21, 0x0345},
-{ 0x1F92, 0x1F22, 0x0345},
-{ 0x1F93, 0x1F23, 0x0345},
-{ 0x1F94, 0x1F24, 0x0345},
-{ 0x1F95, 0x1F25, 0x0345},
-{ 0x1F96, 0x1F26, 0x0345},
-{ 0x1F97, 0x1F27, 0x0345},
-{ 0x1F2A, 0x1F28, 0x0300},
-{ 0x1F2C, 0x1F28, 0x0301},
-{ 0x1F2E, 0x1F28, 0x0342},
-{ 0x1F98, 0x1F28, 0x0345},
-{ 0x1F2B, 0x1F29, 0x0300},
-{ 0x1F2D, 0x1F29, 0x0301},
-{ 0x1F2F, 0x1F29, 0x0342},
-{ 0x1F99, 0x1F29, 0x0345},
-{ 0x1F9A, 0x1F2A, 0x0345},
-{ 0x1F9B, 0x1F2B, 0x0345},
-{ 0x1F9C, 0x1F2C, 0x0345},
-{ 0x1F9D, 0x1F2D, 0x0345},
-{ 0x1F9E, 0x1F2E, 0x0345},
-{ 0x1F9F, 0x1F2F, 0x0345},
-{ 0x1F32, 0x1F30, 0x0300},
-{ 0x1F34, 0x1F30, 0x0301},
-{ 0x1F36, 0x1F30, 0x0342},
-{ 0x1F33, 0x1F31, 0x0300},
-{ 0x1F35, 0x1F31, 0x0301},
-{ 0x1F37, 0x1F31, 0x0342},
-{ 0x1F3A, 0x1F38, 0x0300},
-{ 0x1F3C, 0x1F38, 0x0301},
-{ 0x1F3E, 0x1F38, 0x0342},
-{ 0x1F3B, 0x1F39, 0x0300},
-{ 0x1F3D, 0x1F39, 0x0301},
-{ 0x1F3F, 0x1F39, 0x0342},
-{ 0x1F42, 0x1F40, 0x0300},
-{ 0x1F44, 0x1F40, 0x0301},
-{ 0x1F43, 0x1F41, 0x0300},
-{ 0x1F45, 0x1F41, 0x0301},
-{ 0x1F4A, 0x1F48, 0x0300},
-{ 0x1F4C, 0x1F48, 0x0301},
-{ 0x1F4B, 0x1F49, 0x0300},
-{ 0x1F4D, 0x1F49, 0x0301},
-{ 0x1F52, 0x1F50, 0x0300},
-{ 0x1F54, 0x1F50, 0x0301},
-{ 0x1F56, 0x1F50, 0x0342},
-{ 0x1F53, 0x1F51, 0x0300},
-{ 0x1F55, 0x1F51, 0x0301},
-{ 0x1F57, 0x1F51, 0x0342},
-{ 0x1F5B, 0x1F59, 0x0300},
-{ 0x1F5D, 0x1F59, 0x0301},
-{ 0x1F5F, 0x1F59, 0x0342},
-{ 0x1F62, 0x1F60, 0x0300},
-{ 0x1F64, 0x1F60, 0x0301},
-{ 0x1F66, 0x1F60, 0x0342},
-{ 0x1FA0, 0x1F60, 0x0345},
-{ 0x1F63, 0x1F61, 0x0300},
-{ 0x1F65, 0x1F61, 0x0301},
-{ 0x1F67, 0x1F61, 0x0342},
-{ 0x1FA1, 0x1F61, 0x0345},
-{ 0x1FA2, 0x1F62, 0x0345},
-{ 0x1FA3, 0x1F63, 0x0345},
-{ 0x1FA4, 0x1F64, 0x0345},
-{ 0x1FA5, 0x1F65, 0x0345},
-{ 0x1FA6, 0x1F66, 0x0345},
-{ 0x1FA7, 0x1F67, 0x0345},
-{ 0x1F6A, 0x1F68, 0x0300},
-{ 0x1F6C, 0x1F68, 0x0301},
-{ 0x1F6E, 0x1F68, 0x0342},
-{ 0x1FA8, 0x1F68, 0x0345},
-{ 0x1F6B, 0x1F69, 0x0300},
-{ 0x1F6D, 0x1F69, 0x0301},
-{ 0x1F6F, 0x1F69, 0x0342},
-{ 0x1FA9, 0x1F69, 0x0345},
-{ 0x1FAA, 0x1F6A, 0x0345},
-{ 0x1FAB, 0x1F6B, 0x0345},
-{ 0x1FAC, 0x1F6C, 0x0345},
-{ 0x1FAD, 0x1F6D, 0x0345},
-{ 0x1FAE, 0x1F6E, 0x0345},
-{ 0x1FAF, 0x1F6F, 0x0345},
-{ 0x1FB2, 0x1F70, 0x0345},
-{ 0x1FC2, 0x1F74, 0x0345},
-{ 0x1FF2, 0x1F7C, 0x0345},
-{ 0x1FB7, 0x1FB6, 0x0345},
-{ 0x1FCD, 0x1FBF, 0x0300},
-{ 0x1FCE, 0x1FBF, 0x0301},
-{ 0x1FCF, 0x1FBF, 0x0342},
-{ 0x1FC7, 0x1FC6, 0x0345},
-{ 0x1FF7, 0x1FF6, 0x0345},
-{ 0x1FDD, 0x1FFE, 0x0300},
-{ 0x1FDE, 0x1FFE, 0x0301},
-{ 0x1FDF, 0x1FFE, 0x0342},
-{ 0x219A, 0x2190, 0x0338},
-{ 0x219B, 0x2192, 0x0338},
-{ 0x21AE, 0x2194, 0x0338},
-{ 0x21CD, 0x21D0, 0x0338},
-{ 0x21CF, 0x21D2, 0x0338},
-{ 0x21CE, 0x21D4, 0x0338},
-{ 0x2204, 0x2203, 0x0338},
-{ 0x2209, 0x2208, 0x0338},
-{ 0x220C, 0x220B, 0x0338},
-{ 0x2224, 0x2223, 0x0338},
-{ 0x2226, 0x2225, 0x0338},
-{ 0x2241, 0x223C, 0x0338},
-{ 0x2244, 0x2243, 0x0338},
-{ 0x2247, 0x2245, 0x0338},
-{ 0x2249, 0x2248, 0x0338},
-{ 0x226D, 0x224D, 0x0338},
-{ 0x2262, 0x2261, 0x0338},
-{ 0x2270, 0x2264, 0x0338},
-{ 0x2271, 0x2265, 0x0338},
-{ 0x2274, 0x2272, 0x0338},
-{ 0x2275, 0x2273, 0x0338},
-{ 0x2278, 0x2276, 0x0338},
-{ 0x2279, 0x2277, 0x0338},
-{ 0x2280, 0x227A, 0x0338},
-{ 0x2281, 0x227B, 0x0338},
-{ 0x22E0, 0x227C, 0x0338},
-{ 0x22E1, 0x227D, 0x0338},
-{ 0x2284, 0x2282, 0x0338},
-{ 0x2285, 0x2283, 0x0338},
-{ 0x2288, 0x2286, 0x0338},
-{ 0x2289, 0x2287, 0x0338},
-{ 0x22E2, 0x2291, 0x0338},
-{ 0x22E3, 0x2292, 0x0338},
-{ 0x22AC, 0x22A2, 0x0338},
-{ 0x22AD, 0x22A8, 0x0338},
-{ 0x22AE, 0x22A9, 0x0338},
-{ 0x22AF, 0x22AB, 0x0338},
-{ 0x22EA, 0x22B2, 0x0338},
-{ 0x22EB, 0x22B3, 0x0338},
-{ 0x22EC, 0x22B4, 0x0338},
-{ 0x22ED, 0x22B5, 0x0338},
-{ 0x2ADC, 0x2ADD, 0x0338},
-{ 0x3094, 0x3046, 0x3099},
-{ 0x304C, 0x304B, 0x3099},
-{ 0x304E, 0x304D, 0x3099},
-{ 0x3050, 0x304F, 0x3099},
-{ 0x3052, 0x3051, 0x3099},
-{ 0x3054, 0x3053, 0x3099},
-{ 0x3056, 0x3055, 0x3099},
-{ 0x3058, 0x3057, 0x3099},
-{ 0x305A, 0x3059, 0x3099},
-{ 0x305C, 0x305B, 0x3099},
-{ 0x305E, 0x305D, 0x3099},
-{ 0x3060, 0x305F, 0x3099},
-{ 0x3062, 0x3061, 0x3099},
-{ 0x3065, 0x3064, 0x3099},
-{ 0x3067, 0x3066, 0x3099},
-{ 0x3069, 0x3068, 0x3099},
-{ 0x3070, 0x306F, 0x3099},
-{ 0x3071, 0x306F, 0x309A},
-{ 0x3073, 0x3072, 0x3099},
-{ 0x3074, 0x3072, 0x309A},
-{ 0x3076, 0x3075, 0x3099},
-{ 0x3077, 0x3075, 0x309A},
-{ 0x3079, 0x3078, 0x3099},
-{ 0x307A, 0x3078, 0x309A},
-{ 0x307C, 0x307B, 0x3099},
-{ 0x307D, 0x307B, 0x309A},
-{ 0x309E, 0x309D, 0x3099},
-{ 0x30F4, 0x30A6, 0x3099},
-{ 0x30AC, 0x30AB, 0x3099},
-{ 0x30AE, 0x30AD, 0x3099},
-{ 0x30B0, 0x30AF, 0x3099},
-{ 0x30B2, 0x30B1, 0x3099},
-{ 0x30B4, 0x30B3, 0x3099},
-{ 0x30B6, 0x30B5, 0x3099},
-{ 0x30B8, 0x30B7, 0x3099},
-{ 0x30BA, 0x30B9, 0x3099},
-{ 0x30BC, 0x30BB, 0x3099},
-{ 0x30BE, 0x30BD, 0x3099},
-{ 0x30C0, 0x30BF, 0x3099},
-{ 0x30C2, 0x30C1, 0x3099},
-{ 0x30C5, 0x30C4, 0x3099},
-{ 0x30C7, 0x30C6, 0x3099},
-{ 0x30C9, 0x30C8, 0x3099},
-{ 0x30D0, 0x30CF, 0x3099},
-{ 0x30D1, 0x30CF, 0x309A},
-{ 0x30D3, 0x30D2, 0x3099},
-{ 0x30D4, 0x30D2, 0x309A},
-{ 0x30D6, 0x30D5, 0x3099},
-{ 0x30D7, 0x30D5, 0x309A},
-{ 0x30D9, 0x30D8, 0x3099},
-{ 0x30DA, 0x30D8, 0x309A},
-{ 0x30DC, 0x30DB, 0x3099},
-{ 0x30DD, 0x30DB, 0x309A},
-{ 0x30F7, 0x30EF, 0x3099},
-{ 0x30F8, 0x30F0, 0x3099},
-{ 0x30F9, 0x30F1, 0x3099},
-{ 0x30FA, 0x30F2, 0x3099},
-{ 0x30FE, 0x30FD, 0x3099},
-{ 0xFB2C, 0xFB49, 0x05C1},
-{ 0xFB2D, 0xFB49, 0x05C2},
-};
-
-int do_precomposition(int base, int comb) {
- int min = 0;
- int max = sizeof(precompositions) / sizeof(precompositions[0]) - 1;
- int mid;
- unsigned int sought = ((unsigned)base << 16) | (unsigned)comb, that;
-
- /* binary search */
- while (max >= min) {
- mid = (min + max) / 2;
- that = ((unsigned)precompositions[mid].base << 16) | ((unsigned)precompositions[mid].comb);
- if (that < sought) {
- min = mid + 1;
- } else if (that > sought) {
- max = mid - 1;
- } else {
- return precompositions[mid].replacement;
- }
- }
- /* no match */
- return -1;
-}
diff --git a/nx-X11/programs/xterm/precompose.h b/nx-X11/programs/xterm/precompose.h
deleted file mode 100644
index 661bbb1ac..000000000
--- a/nx-X11/programs/xterm/precompose.h
+++ /dev/null
@@ -1,11 +0,0 @@
-/* $XFree86: xc/programs/xterm/precompose.h,v 1.1 2000/08/26 04:33:54 dawes Exp $ */
-
-#ifndef PRECOMPOSE_H
-#define PRECOMPOSE_H
-
-int do_precomposition(int base, int comb);
-
-/* returns unicode value if a canonical composition exists,
- otherwise -1 */
-
-#endif
diff --git a/nx-X11/programs/xterm/print.c b/nx-X11/programs/xterm/print.c
deleted file mode 100644
index c081f8ff9..000000000
--- a/nx-X11/programs/xterm/print.c
+++ /dev/null
@@ -1,608 +0,0 @@
-/* $XTermId: print.c,v 1.63 2005/08/05 01:25:40 tom Exp $ */
-
-/*
- * $XFree86: xc/programs/xterm/print.c,v 1.22 2005/08/05 01:25:40 dickey Exp $
- */
-
-/************************************************************
-
-Copyright 1997-2004,2005 by Thomas E. Dickey
-
- All Rights Reserved
-
-Permission is hereby granted, free of charge, to any person obtaining a
-copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name(s) of the above copyright
-holders shall not be used in advertising or otherwise to promote the
-sale, use or other dealings in this Software without prior written
-authorization.
-
-********************************************************/
-
-#include <xterm.h>
-#include <data.h>
-#include <menu.h>
-#include <error.h>
-
-#include <stdio.h>
-
-#undef CTRL
-#define CTRL(c) ((c) & 0x1f)
-
-#define SHIFT_IN '\017'
-#define SHIFT_OUT '\016'
-
-#define CSET_IN 'A'
-#define CSET_OUT '0'
-
-#define isForm(c) ((c) == '\r' || (c) == '\n' || (c) == '\f')
-#define Strlen(a) strlen((char *)a)
-#define Strcmp(a,b) strcmp((char *)a,(char *)b)
-#define Strncmp(a,b,c) strncmp((char *)a,(char *)b,c)
-
-#ifdef VMS
-#define VMS_TEMP_PRINT_FILE "sys$scratch:xterm_print.txt"
-#endif
-
-static void charToPrinter(int chr);
-static void printLine(int row, int chr);
-static void send_CharSet(int row);
-static void send_SGR(unsigned attr, unsigned fg, unsigned bg);
-static void stringToPrinter(char *str);
-
-static FILE *Printer;
-static pid_t Printer_pid;
-static int initialized;
-
-static void
-closePrinter(void)
-{
- if (xtermHasPrinter() != 0) {
-#ifdef VMS
- TScreen *screen = &term->screen;
-
- char pcommand[256];
- (void) sprintf(pcommand, "%s %s;",
- screen->printer_command,
- VMS_TEMP_PRINT_FILE);
-#endif
-
- if (Printer != 0) {
- fclose(Printer);
- TRACE(("closed printer, waiting...\n"));
-#ifdef VMS /* This is a quick hack, really should use
- spawn and check status or system services
- and go straight to the queue */
- (void) system(pcommand);
-#else /* VMS */
- while (nonblocking_wait() > 0)
-#endif /* VMS */
- ;
- Printer = 0;
- initialized = 0;
- TRACE(("closed printer\n"));
- }
- }
-}
-
-static void
-printCursorLine(void)
-{
- TScreen *screen = &term->screen;
-
- TRACE(("printCursorLine\n"));
- printLine(screen->cur_row, '\n');
-}
-
-#define NO_COLOR ((unsigned)-1)
-
-/*
- * DEC's manual doesn't document whether trailing blanks are removed, or what
- * happens with a line that is entirely blank. This function prints the
- * characters that xterm would allow as a selection (which may include blanks).
- */
-static void
-printLine(int row, int chr)
-{
- TScreen *screen = &term->screen;
- Char *c = SCRN_BUF_CHARS(screen, row);
- Char *a = SCRN_BUF_ATTRS(screen, row);
- Char attr = 0;
- unsigned ch;
- int last = MaxCols(screen);
- int col;
-#if OPT_ISO_COLORS && OPT_PRINT_COLORS
-#if OPT_EXT_COLORS
- Char *fbf = 0;
- Char *fbb = 0;
-#define ColorOf(col) (unsigned)((fbf[col] << 8) | fbb[col])
-#else
- Char *fb = 0;
-#define ColorOf(col) (fb[col])
-#endif
-#endif
- unsigned fg = NO_COLOR, last_fg = NO_COLOR;
- unsigned bg = NO_COLOR, last_bg = NO_COLOR;
- int cs = CSET_IN;
- int last_cs = CSET_IN;
-
- TRACE(("printLine(row=%d, top=%d:%d, chr=%d):%s\n",
- row, screen->topline, screen->max_row, chr,
- visibleChars(PAIRED_CHARS(c,
- screen->utf8_mode
- ? SCRN_BUF_WIDEC(screen, row)
- : 0), (unsigned) last)));
-
- if_OPT_EXT_COLORS(screen, {
- fbf = SCRN_BUF_FGRND(screen, row);
- fbb = SCRN_BUF_BGRND(screen, row);
- });
- if_OPT_ISO_TRADITIONAL_COLORS(screen, {
- fb = SCRN_BUF_COLOR(screen, row);
- });
- while (last > 0) {
- if ((a[last - 1] & CHARDRAWN) == 0)
- last--;
- else
- break;
- }
- if (last) {
- if (screen->print_attributes) {
- send_CharSet(row);
- send_SGR(0, NO_COLOR, NO_COLOR);
- }
- for (col = 0; col < last; col++) {
- ch = c[col];
- if_OPT_WIDE_CHARS(screen, {
- ch = getXtermCell(screen, row, col);
- });
-#if OPT_PRINT_COLORS
- if (screen->colorMode) {
- if (screen->print_attributes > 1) {
- fg = (a[col] & FG_COLOR)
- ? extract_fg(ColorOf(col), a[col])
- : NO_COLOR;
- bg = (a[col] & BG_COLOR)
- ? extract_bg(ColorOf(col), a[col])
- : NO_COLOR;
- }
- }
-#endif
- if ((((a[col] & SGR_MASK) != attr)
-#if OPT_PRINT_COLORS
- || (last_fg != fg) || (last_bg != bg)
-#endif
- )
- && ch) {
- attr = (a[col] & SGR_MASK);
- last_fg = fg;
- last_bg = bg;
- if (screen->print_attributes)
- send_SGR(attr, fg, bg);
- }
-
- if (ch == 0)
- ch = ' ';
-
-#if OPT_WIDE_CHARS
- if (screen->utf8_mode)
- cs = CSET_IN;
- else
-#endif
- cs = (ch >= ' ' && ch != 0x7f) ? CSET_IN : CSET_OUT;
- if (last_cs != cs) {
- if (screen->print_attributes) {
- charToPrinter((cs == CSET_OUT)
- ? SHIFT_OUT
- : SHIFT_IN);
- }
- last_cs = cs;
- }
-
- /* FIXME: we shouldn't have to map back from the
- * alternate character set, except that the
- * corresponding charset information is not encoded
- * into the CSETS array.
- */
- charToPrinter((int) ((cs == CSET_OUT)
- ? (ch == 0x7f ? 0x5f : (ch + 0x5f))
- : ch));
- }
- if (screen->print_attributes) {
- send_SGR(0, NO_COLOR, NO_COLOR);
- if (cs != CSET_IN)
- charToPrinter(SHIFT_IN);
- }
- }
- if (screen->print_attributes)
- charToPrinter('\r');
- charToPrinter(chr);
-}
-
-void
-xtermPrintScreen(Bool use_DECPEX)
-{
- if (XtIsRealized((Widget) term)) {
- TScreen *screen = &term->screen;
- Bool extent = (use_DECPEX && screen->printer_extent);
- int top = extent ? 0 : screen->top_marg;
- int bot = extent ? screen->max_row : screen->bot_marg;
- int was_open = initialized;
-
- TRACE(("xtermPrintScreen, rows %d..%d\n", top, bot));
-
- while (top <= bot)
- printLine(top++, '\n');
- if (screen->printer_formfeed)
- charToPrinter('\f');
-
- if (!was_open || screen->printer_autoclose) {
- closePrinter();
- }
- } else {
- Bell(XkbBI_MinorError, 0);
- }
-}
-
-/*
- * If the alternate screen is active, we'll print only that. Otherwise, print
- * the normal screen plus all scrolled-back lines. The distinction is made
- * because the normal screen's buffer is part of the overall scrollback buffer.
- */
-static void
-xtermPrintEverything(void)
-{
- TScreen *screen = &term->screen;
- int top = 0;
- int bot = screen->max_row;
- int was_open = initialized;
-
- if (!screen->altbuf)
- top = -screen->savedlines;
-
- TRACE(("xtermPrintEverything, rows %d..%d\n", top, bot));
- while (top <= bot)
- printLine(top++, '\n');
- if (screen->printer_formfeed)
- charToPrinter('\f');
-
- if (!was_open || screen->printer_autoclose) {
- closePrinter();
- }
-}
-
-static void
-send_CharSet(int row)
-{
-#if OPT_DEC_CHRSET
- TScreen *screen = &term->screen;
- char *msg = 0;
-
- switch (SCRN_BUF_CSETS(screen, row)[0]) {
- case CSET_SWL:
- msg = "\033#5";
- break;
- case CSET_DHL_TOP:
- msg = "\033#3";
- break;
- case CSET_DHL_BOT:
- msg = "\033#4";
- break;
- case CSET_DWL:
- msg = "\033#6";
- break;
- }
- if (msg != 0)
- stringToPrinter(msg);
-#endif /* OPT_DEC_CHRSET */
-}
-
-static void
-send_SGR(unsigned attr, unsigned fg, unsigned bg)
-{
- char msg[80];
- strcpy(msg, "\033[0");
- if (attr & BOLD)
- strcat(msg, ";1");
- if (attr & UNDERLINE)
- strcat(msg, ";4"); /* typo? DEC documents this as '2' */
- if (attr & BLINK)
- strcat(msg, ";5");
- if (attr & INVERSE) /* typo? DEC documents this as invisible */
- strcat(msg, ";7");
-#if OPT_PRINT_COLORS
- if (bg != NO_COLOR) {
- sprintf(msg + strlen(msg), ";%u", (bg < 8) ? (40 + bg) : (92 + bg));
- }
- if (fg != NO_COLOR) {
-#if OPT_PC_COLORS
- if (term->screen.boldColors
- && fg > 8
- && (attr & BOLD) != 0)
- fg -= 8;
-#endif
- sprintf(msg + strlen(msg), ";%u", (fg < 8) ? (30 + fg) : (82 + fg));
- }
-#endif
- strcat(msg, "m");
- stringToPrinter(msg);
-}
-
-/*
- * This implementation only knows how to write to a pipe.
- */
-static void
-charToPrinter(int chr)
-{
- TScreen *screen = &term->screen;
-
- if (!initialized && xtermHasPrinter()) {
-#if defined(VMS)
- /*
- * This implementation only knows how to write to a file. When the
- * file is closed the print command executes. Print command must be of
- * the form:
- * print/que=name/delete [/otherflags].
- */
- Printer = fopen(VMS_TEMP_PRINT_FILE, "w");
-#else
- /*
- * This implementation only knows how to write to a pipe.
- */
- FILE *input;
- int my_pipe[2];
- int c;
-
- if (pipe(my_pipe))
- SysError(ERROR_FORK);
- if ((Printer_pid = fork()) < 0)
- SysError(ERROR_FORK);
-
- if (Printer_pid == 0) {
- TRACE(((char *) 0));
- close(my_pipe[1]); /* printer is silent */
- close(screen->respond);
-
- close(fileno(stdout));
- dup2(fileno(stderr), 1);
-
- if (fileno(stderr) != 2) {
- dup2(fileno(stderr), 2);
- close(fileno(stderr));
- }
- /* don't want privileges! */
- if (setgid(screen->gid) == -1)
- exit(2);
- if (setuid(screen->uid) == -1)
- exit(2);
-
- Printer = popen(screen->printer_command, "w");
- input = fdopen(my_pipe[0], "r");
- while ((c = fgetc(input)) != EOF) {
- fputc(c, Printer);
- if (isForm(c))
- fflush(Printer);
- }
- pclose(Printer);
- exit(0);
- } else {
- close(my_pipe[0]); /* won't read from printer */
- Printer = fdopen(my_pipe[1], "w");
- TRACE(("opened printer from pid %d/%d\n",
- (int) getpid(), Printer_pid));
- }
-#endif
- initialized++;
- }
- if (Printer != 0) {
-#if OPT_WIDE_CHARS
- if (chr > 127) {
- Char temp[10];
- *convertToUTF8(temp, (unsigned) chr) = 0;
- fputs((char *) temp, Printer);
- } else
-#endif
- fputc(chr, Printer);
- if (isForm(chr))
- fflush(Printer);
- }
-}
-
-static void
-stringToPrinter(char *str)
-{
- while (*str)
- charToPrinter(*str++);
-}
-
-/*
- * This module implements the MC (Media Copy) and related printing control
- * sequences for VTxxx emulation. This is based on the description in the
- * VT330/VT340 Programmer Reference Manual EK-VT3XX-TP-001 (Digital Equipment
- * Corp., March 1987).
- */
-void
-xtermMediaControl(int param, int private_seq)
-{
- TRACE(("MediaCopy param=%d, private=%d\n", param, private_seq));
-
- if (private_seq) {
- switch (param) {
- case 1:
- printCursorLine();
- break;
- case 4:
- setPrinterControlMode(0);
- break;
- case 5:
- setPrinterControlMode(1);
- break;
- case 10: /* VT320 */
- xtermPrintScreen(False);
- break;
- case 11: /* VT320 */
- xtermPrintEverything();
- break;
- }
- } else {
- switch (param) {
- case -1:
- case 0:
- xtermPrintScreen(True);
- break;
- case 4:
- setPrinterControlMode(0);
- break;
- case 5:
- setPrinterControlMode(2);
- break;
- }
- }
-}
-
-/*
- * When in autoprint mode, the printer prints a line from the screen when you
- * move the cursor off that line with an LF, FF, or VT character, or an
- * autowrap occurs. The printed line ends with a CR and the character (LF, FF
- * or VT) that moved the cursor off the previous line.
- */
-void
-xtermAutoPrint(int chr)
-{
- TScreen *screen = &term->screen;
-
- if (screen->printer_controlmode == 1) {
- TRACE(("AutoPrint %d\n", chr));
- printLine(screen->cursor_row, chr);
- if (Printer != 0)
- fflush(Printer);
- }
-}
-
-/*
- * When in printer controller mode, the terminal sends received characters to
- * the printer without displaying them on the screen. The terminal sends all
- * characters and control sequences to the printer, except NUL, XON, XOFF, and
- * the printer controller sequences.
- *
- * This function eats characters, returning 0 as long as it must buffer or
- * divert to the printer. We're only invoked here when in printer controller
- * mode, and handle the exit from that mode.
- */
-#define LB '['
-
-int
-xtermPrinterControl(int chr)
-{
- TScreen *screen = &term->screen;
- /* *INDENT-OFF* */
- static struct {
- Char seq[5];
- int active;
- } tbl[] = {
- { { CSI, '5', 'i' }, 2 },
- { { CSI, '4', 'i' }, 0 },
- { { ESC, LB, '5', 'i' }, 2 },
- { { ESC, LB, '4', 'i' }, 0 },
- };
- /* *INDENT-ON* */
-
- static Char bfr[10];
- static size_t length;
- size_t n;
-
- TRACE(("In printer:%04X\n", chr));
-
- switch (chr) {
- case 0:
- case CTRL('Q'):
- case CTRL('S'):
- return 0; /* ignored by application */
-
- case CSI:
- case ESC:
- case '[':
- case '4':
- case '5':
- case 'i':
- bfr[length++] = chr;
- for (n = 0; n < sizeof(tbl) / sizeof(tbl[0]); n++) {
- size_t len = Strlen(tbl[n].seq);
-
- if (length == len
- && Strcmp(bfr, tbl[n].seq) == 0) {
- setPrinterControlMode(tbl[n].active);
- if (screen->printer_autoclose
- && screen->printer_controlmode == 0)
- closePrinter();
- length = 0;
- return 0;
- } else if (len > length
- && Strncmp(bfr, tbl[n].seq, length) == 0) {
- return 0;
- }
- }
- length--;
-
- /* FALLTHRU */
-
- default:
- for (n = 0; n < length; n++)
- charToPrinter(bfr[n]);
- bfr[0] = chr;
- length = 1;
- return 0;
- }
-}
-
-/*
- * If there is no printer command, we will ignore printer controls.
- */
-Bool
-xtermHasPrinter(void)
-{
- TScreen *screen = &term->screen;
-
- return (strlen(screen->printer_command) != 0);
-}
-
-#define showPrinterControlMode(mode) \
- (((mode) == 0) \
- ? "normal" \
- : ((mode) == 1 \
- ? "autoprint" \
- : "printer controller"))
-
-void
-setPrinterControlMode(int mode)
-{
- if (xtermHasPrinter()
- && term->screen.printer_controlmode != mode) {
- TRACE(("%s %s mode\n",
- (mode
- ? "set"
- : "reset"),
- (mode
- ? showPrinterControlMode(mode)
- : showPrinterControlMode(term->screen.printer_controlmode))));
- term->screen.printer_controlmode = mode;
- update_print_redir();
- }
-}
diff --git a/nx-X11/programs/xterm/proto.h b/nx-X11/programs/xterm/proto.h
deleted file mode 100644
index 262c308dc..000000000
--- a/nx-X11/programs/xterm/proto.h
+++ /dev/null
@@ -1,29 +0,0 @@
-/* $XFree86: xc/programs/xterm/proto.h,v 3.4 2003/10/27 01:07:57 dickey Exp $ */
-
-#ifndef included_proto_h
-#define included_proto_h
-
-#define PROTO_XT_ACTIONS_ARGS \
- (Widget w, XEvent *event, String *params, Cardinal *num_params)
-
-#define PROTO_XT_CALLBACK_ARGS \
- (Widget gw, XtPointer closure, XtPointer data)
-
-#define PROTO_XT_CVT_SELECT_ARGS \
- (Widget w, Atom *selection, Atom *target, Atom *type, XtPointer *value, unsigned long *length, int *format)
-
-#define PROTO_XT_EV_HANDLER_ARGS \
- (Widget w, XtPointer closure, XEvent *event, Boolean *cont)
-
-#define PROTO_XT_SEL_CB_ARGS \
- (Widget w, XtPointer client_data, Atom *selection, Atom *type, XtPointer value, unsigned long *length, int *format)
-
-#ifdef SIGNALRETURNSINT
-#define SIGNAL_T int
-#define SIGNAL_RETURN return 0
-#else
-#define SIGNAL_T void
-#define SIGNAL_RETURN return
-#endif
-
-#endif/*included_proto_h*/
diff --git a/nx-X11/programs/xterm/ptydata.c b/nx-X11/programs/xterm/ptydata.c
deleted file mode 100644
index 7d3dae3e1..000000000
--- a/nx-X11/programs/xterm/ptydata.c
+++ /dev/null
@@ -1,420 +0,0 @@
-/* $XTermId: ptydata.c,v 1.65 2005/04/22 00:21:54 tom Exp $ */
-
-/*
- * $XFree86: xc/programs/xterm/ptydata.c,v 1.23 2005/04/22 00:21:54 dickey Exp $
- */
-
-/************************************************************
-
-Copyright 1999-2004,2005 by Thomas E. Dickey
-
- All Rights Reserved
-
-Permission is hereby granted, free of charge, to any person obtaining a
-copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name(s) of the above copyright
-holders shall not be used in advertising or otherwise to promote the
-sale, use or other dealings in this Software without prior written
-authorization.
-
-********************************************************/
-
-#include <data.h>
-
-#if OPT_WIDE_CHARS
-#include <menu.h>
-#endif
-
-/*
- * Check for both EAGAIN and EWOULDBLOCK, because some supposedly POSIX
- * systems are broken and return EWOULDBLOCK when they should return EAGAIN.
- * Note that this macro may evaluate its argument more than once.
- */
-#if defined(EAGAIN) && defined(EWOULDBLOCK)
-#define E_TEST(err) ((err) == EAGAIN || (err) == EWOULDBLOCK)
-#else
-#ifdef EAGAIN
-#define E_TEST(err) ((err) == EAGAIN)
-#else
-#define E_TEST(err) ((err) == EWOULDBLOCK)
-#endif
-#endif
-
-#if OPT_WIDE_CHARS
-/*
- * Convert the 8-bit codes in data->buffer[] into Unicode in data->utf_data.
- * The number of bytes converted will be nonzero iff there is data.
- */
-static Bool
-decodeUtf8(PtyData * data)
-{
- int i;
- int length = data->last - data->next;
- int utf_count = 0;
- IChar utf_char = 0;
-
- data->utf_size = 0;
- for (i = 0; i < length; i++) {
- unsigned c = data->next[i];
-
- /* Combine UTF-8 into Unicode */
- if (c < 0x80) {
- /* We received an ASCII character */
- if (utf_count > 0) {
- data->utf_data = UCS_REPL; /* prev. sequence incomplete */
- data->utf_size = (i + 1);
- } else {
- data->utf_data = c;
- data->utf_size = 1;
- }
- break;
- } else if (c < 0xc0) {
- /* We received a continuation byte */
- if (utf_count < 1) {
- /*
- * We received a continuation byte before receiving a sequence
- * state. Or an attempt to use a C1 control string. Either
- * way, it is mapped to the replacement character.
- */
- data->utf_data = UCS_REPL; /* ... unexpectedly */
- data->utf_size = (i + 1);
- break;
- } else {
- /* Check for overlong UTF-8 sequences for which a shorter
- * encoding would exist and replace them with UCS_REPL.
- * An overlong UTF-8 sequence can have any of the following
- * forms:
- * 1100000x 10xxxxxx
- * 11100000 100xxxxx 10xxxxxx
- * 11110000 1000xxxx 10xxxxxx 10xxxxxx
- * 11111000 10000xxx 10xxxxxx 10xxxxxx 10xxxxxx
- * 11111100 100000xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
- */
- if (!utf_char && !((c & 0x7f) >> (7 - utf_count))) {
- utf_char = UCS_REPL;
- }
- /* characters outside UCS-2 become UCS_REPL */
- if (utf_char > 0x03ff) {
- /* value would be >0xffff */
- utf_char = UCS_REPL;
- } else {
- utf_char <<= 6;
- utf_char |= (c & 0x3f);
- }
- if ((utf_char >= 0xd800 &&
- utf_char <= 0xdfff) ||
- (utf_char == 0xfffe) ||
- (utf_char == 0xffff)) {
- utf_char = UCS_REPL;
- }
- utf_count--;
- if (utf_count == 0) {
- data->utf_data = utf_char;
- data->utf_size = (i + 1);
- break;
- }
- }
- } else {
- /* We received a sequence start byte */
- if (utf_count > 0) {
- data->utf_data = UCS_REPL; /* prev. sequence incomplete */
- data->utf_size = (i + 1);
- break;
- }
- if (c < 0xe0) {
- utf_count = 1;
- utf_char = (c & 0x1f);
- if (!(c & 0x1e))
- utf_char = UCS_REPL; /* overlong sequence */
- } else if (c < 0xf0) {
- utf_count = 2;
- utf_char = (c & 0x0f);
- } else if (c < 0xf8) {
- utf_count = 3;
- utf_char = (c & 0x07);
- } else if (c < 0xfc) {
- utf_count = 4;
- utf_char = (c & 0x03);
- } else if (c < 0xfe) {
- utf_count = 5;
- utf_char = (c & 0x01);
- } else {
- data->utf_data = UCS_REPL;
- data->utf_size = (i + 1);
- break;
- }
- }
- }
-#if OPT_TRACE > 1
- TRACE(("UTF-8 char %04X [%d..%d]\n",
- data->utf_data,
- data->next - data->buffer,
- data->next - data->buffer + data->utf_size - 1));
-#endif
-
- return (data->utf_size != 0);
-}
-#endif
-
-int
-readPtyData(TScreen * screen, PtySelect * select_mask, PtyData * data)
-{
- int size = 0;
-
-#ifdef VMS
- if (*select_mask & pty_mask) {
- trimPtyData(screen, data);
- if (read_queue.flink != 0) {
- size = tt_read(data->next);
- if (size == 0) {
- Panic("input: read returned zero\n", 0);
- }
- } else {
- sys$hiber();
- }
- }
-#else /* !VMS */
- if (FD_ISSET(screen->respond, select_mask)) {
- trimPtyData(screen, data);
-
- size = read(screen->respond, (char *) data->last, FRG_SIZE);
- if (size <= 0) {
- /*
- * Yes, I know this is a majorly f*ugly hack, however it seems to
- * be necessary for Solaris x86. DWH 11/15/94
- * Dunno why though..
- * (and now CYGWIN, alanh@xfree86.org 08/15/01
- */
-#if (defined(i386) && defined(SVR4) && defined(sun)) || defined(__CYGWIN__)
- if (errno == EIO || errno == 0)
-#else
- if (errno == EIO)
-#endif
- Cleanup(0);
- else if (!E_TEST(errno))
- Panic("input: read returned unexpected error (%d)\n", errno);
- size = 0;
- } else if (size == 0) {
-#if defined(__UNIXOS2__)
- Cleanup(0);
-#else
- Panic("input: read returned zero\n", 0);
-#endif
- }
- }
-#endif /* VMS */
-
- if (size) {
-#if OPT_TRACE
- int i;
-
- TRACE(("read %d bytes from pty\n", size));
- for (i = 0; i < size; i++) {
- if (!(i % 16))
- TRACE(("%s", i ? "\n " : "READ"));
- TRACE((" %02X", data->last[i]));
- }
- TRACE(("\n"));
-#endif
- data->last += size;
-#ifdef ALLOWLOGGING
- term->screen.logstart = VTbuffer->next;
-#endif
- }
-
- return (size);
-}
-
-/*
- * Check if there is more data in the input buffer which can be returned by
- * nextPtyData(). If there is insufficient data to return a completed UTF-8
- * value, return false anyway.
- */
-#if OPT_WIDE_CHARS
-Bool
-morePtyData(TScreen * screen GCC_UNUSED, PtyData * data)
-{
- Bool result = (data->last > data->next);
- if (result && screen->utf8_inparse) {
- if (!data->utf_size)
- result = decodeUtf8(data);
- }
- TRACE2(("morePtyData returns %d\n", result));
- return result;
-}
-#endif
-
-/*
- * Return the next value from the input buffer. Note that morePtyData() is
- * always called before this function, so we can do the UTF-8 input conversion
- * in that function and simply return the result here.
- */
-#if OPT_WIDE_CHARS
-IChar
-nextPtyData(TScreen * screen, PtyData * data)
-{
- IChar result;
- if (screen->utf8_inparse) {
- result = data->utf_data;
- data->next += data->utf_size;
- data->utf_size = 0;
- } else {
- result = *((data)->next++);
- if (!screen->output_eight_bits)
- result &= 0x7f;
- }
- TRACE2(("nextPtyData returns %#x\n", result));
- return result;
-}
-#endif
-
-#if OPT_WIDE_CHARS
-/*
- * Called when UTF-8 mode has been turned on/off.
- */
-void
-switchPtyData(TScreen * screen, int flag)
-{
- if (screen->utf8_mode != flag) {
- screen->utf8_mode = flag;
- screen->utf8_inparse = (flag != 0);
-
- TRACE(("turning UTF-8 mode %s\n", BtoS(flag)));
- update_font_utf8_mode();
- }
-}
-#endif
-
-void
-initPtyData(PtyData ** result)
-{
- PtyData *data;
-
- TRACE(("initPtyData given minBufSize %d, maxBufSize %d\n",
- FRG_SIZE, BUF_SIZE));
-
- if (FRG_SIZE < 64)
- FRG_SIZE = 64;
- if (BUF_SIZE < FRG_SIZE)
- BUF_SIZE = FRG_SIZE;
- if (BUF_SIZE % FRG_SIZE)
- BUF_SIZE = BUF_SIZE + FRG_SIZE - (BUF_SIZE % FRG_SIZE);
-
- TRACE(("initPtyData using minBufSize %d, maxBufSize %d\n",
- FRG_SIZE, BUF_SIZE));
-
- data = (PtyData *) XtMalloc(sizeof(*data) + BUF_SIZE + FRG_SIZE);
-
- memset(data, 0, sizeof(*data));
- data->next = data->buffer;
- data->last = data->buffer;
- *result = data;
-}
-
-/*
- * Remove used data by shifting the buffer down, to make room for more data,
- * e.g., a continuation-read.
- */
-void
-trimPtyData(TScreen * screen GCC_UNUSED, PtyData * data)
-{
- int i;
-
- FlushLog(screen);
-
- if (data->next != data->buffer) {
- int n = (data->last - data->next);
-
- TRACE(("shifting buffer down by %d\n", n));
- for (i = 0; i < n; ++i) {
- data->buffer[i] = data->next[i];
- }
- data->next = data->buffer;
- data->last = data->next + n;
- }
-
-}
-
-/*
- * Insert new data into the input buffer so the next calls to morePtyData()
- * and nextPtyData() will return that.
- */
-void
-fillPtyData(TScreen * screen, PtyData * data, char *value, int length)
-{
- int size;
- int n;
-
- /* remove the used portion of the buffer */
- trimPtyData(screen, data);
-
- VTbuffer->last += length;
- size = VTbuffer->last - VTbuffer->next;
-
- /* shift the unused portion up to make room */
- for (n = size; n >= length; --n)
- VTbuffer->next[n] = VTbuffer->next[n - length];
-
- /* insert the new bytes to interpret */
- for (n = 0; n < length; n++)
- VTbuffer->next[n] = CharOf(value[n]);
-}
-
-#if OPT_WIDE_CHARS
-Char *
-convertToUTF8(Char * lp, unsigned c)
-{
- if (c < 0x80) { /* 0******* */
- *lp++ = (c);
- } else if (c < 0x800) { /* 110***** 10****** */
- *lp++ = (0xc0 | (c >> 6));
- *lp++ = (0x80 | (c & 0x3f));
- } else { /* 1110**** 10****** 10****** */
- *lp++ = (0xe0 | (c >> 12));
- *lp++ = (0x80 | ((c >> 6) & 0x3f));
- *lp++ = (0x80 | (c & 0x3f));
- }
- /*
- * UTF-8 is defined for words of up to 31 bits, but we need only 16
- * bits here, since that's all that X11R6 supports.
- */
- return lp;
-}
-
-/*
- * Write data back to the PTY
- */
-void
-writePtyData(int f, IChar * d, unsigned len)
-{
- static Char *dbuf;
- static unsigned dlen;
- unsigned n = (len << 1);
-
- if (dlen <= len) {
- dlen = n;
- dbuf = (Char *) XtRealloc((char *) dbuf, dlen);
- }
-
- for (n = 0; n < len; n++)
- dbuf[n] = d[n];
- v_write(f, dbuf, n);
-}
-#endif
diff --git a/nx-X11/programs/xterm/ptyx.h b/nx-X11/programs/xterm/ptyx.h
deleted file mode 100644
index b08f8b41d..000000000
--- a/nx-X11/programs/xterm/ptyx.h
+++ /dev/null
@@ -1,2016 +0,0 @@
-/* $XTermId: ptyx.h,v 1.390 2005/11/03 13:17:28 tom Exp $ */
-
-/*
- * $Xorg: ptyx.h,v 1.3 2000/08/17 19:55:09 cpqbld Exp $
- */
-
-/* $XFree86: xc/programs/xterm/ptyx.h,v 3.127 2005/11/03 13:17:28 dickey Exp $ */
-
-/*
- * Copyright 1999-2004,2005 by Thomas E. Dickey
- *
- * All Rights Reserved
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sublicense, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- * IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY
- * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- * Except as contained in this notice, the name(s) of the above copyright
- * holders shall not be used in advertising or otherwise to promote the
- * sale, use or other dealings in this Software without prior written
- * authorization.
- *
- *
- * Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
- *
- * All Rights Reserved
- *
- * Permission to use, copy, modify, and distribute this software and its
- * documentation for any purpose and without fee is hereby granted,
- * provided that the above copyright notice appear in all copies and that
- * both that copyright notice and this permission notice appear in
- * supporting documentation, and that the name of Digital Equipment
- * Corporation not be used in advertising or publicity pertaining to
- * distribution of the software without specific, written prior permission.
- *
- *
- * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
- * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
- * DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
- * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
- * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
- * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- * SOFTWARE.
- */
-
-#ifndef included_ptyx_h
-#define included_ptyx_h 1
-
-#ifdef HAVE_CONFIG_H
-#include <xtermcfg.h>
-#endif
-
-/* ptyx.h */
-/* @(#)ptyx.h X10/6.6 11/10/86 */
-
-#include <X11/IntrinsicP.h>
-#include <X11/Shell.h> /* for XtNdieCallback, etc. */
-#include <X11/StringDefs.h> /* for standard resource names */
-#include <X11/Xmu/Misc.h> /* For Max() and Min(). */
-#include <X11/Xfuncs.h>
-#include <X11/Xosdefs.h>
-#include <X11/Xmu/Converters.h>
-#ifdef XRENDERFONT
-#include <X11/Xft/Xft.h>
-#endif
-
-/* adapted from IntrinsicI.h */
-#define MyStackAlloc(size, stack_cache_array) \
- ((size) <= sizeof(stack_cache_array) \
- ? (XtPointer)(stack_cache_array) \
- : (XtPointer)malloc((unsigned)(size)))
-
-#define MyStackFree(pointer, stack_cache_array) \
- if ((pointer) != ((char *)(stack_cache_array))) free(pointer)
-
-/* adapted from vile (vi-like-emacs) */
-#define TypeCallocN(type,n) (type *)calloc((n), sizeof(type))
-#define TypeCalloc(type) TypeCalloc(type,1)
-
-#define TypeMallocN(type,n) (type *)malloc(sizeof(type) * (n))
-#define TypeMalloc(type) TypeMallocN(type,0)
-
-#define TypeRealloc(type,n,p) (type *)realloc(p, (n) * sizeof(type))
-
-/* use these to allocate partly-structured data */
-#define CastMallocN(type,n) (type *)malloc(sizeof(type) + (n))
-#define CastMalloc(type) CastMallocN(type,0)
-
-/*
-** System V definitions
-*/
-
-#ifdef att
-#define ATT
-#endif
-
-#ifdef SVR4
-#undef SYSV /* predefined on Solaris 2.4 */
-#define SYSV /* SVR4 is (approx) superset of SVR3 */
-#define ATT
-#endif
-
-#ifdef SYSV
-#ifdef X_NOT_POSIX
-#if !defined(CRAY) && !defined(SVR4)
-#define dup2(fd1,fd2) ((fd1 == fd2) ? fd1 : \
- (close(fd2), fcntl(fd1, F_DUPFD, fd2)))
-#endif
-#endif
-#endif /* SYSV */
-
-/*
- * Newer versions of <X11/Xft/Xft.h> have a version number. We use certain
- * features from that.
- */
-#if defined(XRENDERFONT) && defined(XFT_VERSION) && XFT_VERSION >= 20100
-#define HAVE_TYPE_FCCHAR32 1 /* compatible: XftChar16 */
-#define HAVE_TYPE_XFTCHARSPEC 1 /* new type XftCharSpec */
-#endif
-
-/*
-** Definitions to simplify ifdef's for pty's.
-*/
-#define USE_PTY_DEVICE 1
-#define USE_PTY_SEARCH 1
-
-#if defined(__osf__) || (defined(linux) && defined(__GLIBC__) && (__GLIBC__ >= 2) && (__GLIBC_MINOR__ >= 1)) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__)
-#undef USE_PTY_DEVICE
-#undef USE_PTY_SEARCH
-#define USE_PTS_DEVICE 1
-#elif defined(VMS)
-#undef USE_PTY_DEVICE
-#undef USE_PTY_SEARCH
-#elif defined(PUCC_PTYD)
-#undef USE_PTY_SEARCH
-#endif
-
-#if defined(SYSV) && defined(i386) && !defined(SVR4)
-#define ATT
-#define USE_HANDSHAKE 1
-#define USE_ISPTS_FLAG 1
-#endif
-
-#if (defined (__GLIBC__) && ((__GLIBC__ > 2) || (__GLIBC__ == 2) && (__GLIBC_MINOR__ >= 1)))
-#define USE_USG_PTYS
-#define USE_HANDSHAKE 0 /* "recent" Linux systems do not require handshaking */
-#elif (defined(ATT) && !defined(__sgi)) || defined(__MVS__) || (defined(SYSV) && defined(i386))
-#define USE_USG_PTYS
-#else
-#define USE_HANDSHAKE 1
-#endif
-
-/*
- * More systems than not require pty-handshaking.
- */
-#ifndef USE_HANDSHAKE
-#define USE_HANDSHAKE 1
-#endif
-
-/*
-** allow for mobility of the pty master/slave directories
-*/
-#ifndef PTYDEV
-#if defined(__hpux)
-#define PTYDEV "/dev/ptym/ptyxx"
-#elif defined(__MVS__)
-#define PTYDEV "/dev/ptypxxxx"
-#else
-#define PTYDEV "/dev/ptyxx"
-#endif
-#endif /* !PTYDEV */
-
-#ifndef TTYDEV
-#if defined(__hpux)
-#define TTYDEV "/dev/pty/ttyxx"
-#elif defined(__MVS__)
-#define TTYDEV "/dev/ptypxxxx"
-#elif defined(USE_PTS_DEVICE)
-#define TTYDEV "/dev/pts/0"
-#else
-#define TTYDEV "/dev/ttyxx"
-#endif
-#endif /* !TTYDEV */
-
-#ifndef PTYCHAR1
-#ifdef __hpux
-#define PTYCHAR1 "zyxwvutsrqp"
-#else /* !__hpux */
-#ifdef __UNIXOS2__
-#define PTYCHAR1 "pq"
-#else
-#define PTYCHAR1 "pqrstuvwxyzPQRSTUVWXYZ"
-#endif /* !__UNIXOS2__ */
-#endif /* !__hpux */
-#endif /* !PTYCHAR1 */
-
-#ifndef PTYCHAR2
-#ifdef __hpux
-#define PTYCHAR2 "fedcba9876543210"
-#else /* !__hpux */
-#if defined(__DragonFly__) || defined(__FreeBSD__)
-#define PTYCHAR2 "0123456789abcdefghijklmnopqrstuv"
-#else /* !__FreeBSD__ */
-#define PTYCHAR2 "0123456789abcdef"
-#endif /* !__FreeBSD__ */
-#endif /* !__hpux */
-#endif /* !PTYCHAR2 */
-
-#ifndef TTYFORMAT
-#if defined(CRAY)
-#define TTYFORMAT "/dev/ttyp%03d"
-#elif defined(__MVS__)
-#define TTYFORMAT "/dev/ttyp%04d"
-#else
-#define TTYFORMAT "/dev/ttyp%d"
-#endif
-#endif /* TTYFORMAT */
-
-#ifndef PTYFORMAT
-#ifdef CRAY
-#define PTYFORMAT "/dev/pty/%03d"
-#elif defined(__MVS__)
-#define PTYFORMAT "/dev/ptyp%04d"
-#else
-#define PTYFORMAT "/dev/ptyp%d"
-#endif
-#endif /* PTYFORMAT */
-
-#ifndef PTYCHARLEN
-#ifdef CRAY
-#define PTYCHARLEN 3
-#elif defined(__MVS__)
-#define PTYCHARLEN 8 /* OS/390 stores, e.g. ut_id="ttyp1234" */
-#else
-#define PTYCHARLEN 2
-#endif
-#endif
-
-#ifndef MAXPTTYS
-#ifdef CRAY
-#define MAXPTTYS 256
-#else
-#define MAXPTTYS 2048
-#endif
-#endif
-
-/* Until the translation manager comes along, I have to do my own translation of
- * mouse events into the proper routines. */
-
-typedef enum {NORMAL, LEFTEXTENSION, RIGHTEXTENSION} EventMode;
-
-/*
- * The origin of a screen is 0, 0. Therefore, the number of rows
- * on a screen is screen->max_row + 1, and similarly for columns.
- */
-#define MaxCols(screen) ((screen)->max_col + 1)
-#define MaxRows(screen) ((screen)->max_row + 1)
-
-typedef unsigned char Char; /* to support 8 bit chars */
-typedef Char *ScrnPtr;
-typedef ScrnPtr *ScrnBuf;
-
-#define CharOf(n) ((unsigned char)(n))
-
-/*
- * ANSI emulation, special character codes
- */
-#define INQ 0x05
-#define BEL 0x07
-#define FF 0x0C /* C0, C1 control names */
-#define LS1 0x0E
-#define LS0 0x0F
-#define NAK 0x15
-#define CAN 0x18
-#define SUB 0x1A
-#define ESC 0x1B
-#define XPOUND 0x1E /* internal mapping for '#' */
-#define US 0x1F
-#define DEL 0x7F
-#define RI 0x8D
-#define SS2 0x8E
-#define SS3 0x8F
-#define DCS 0x90
-#define SPA 0x96
-#define EPA 0x97
-#define SOS 0x98
-#define OLDID 0x9A /* ESC Z */
-#define CSI 0x9B
-#define ST 0x9C
-#define OSC 0x9D
-#define PM 0x9E
-#define APC 0x9F
-#define RDEL 0xFF
-
-#define MIN_DECID 52 /* can emulate VT52 */
-#define MAX_DECID 420 /* ...through VT420 */
-
-#ifndef DFT_DECID
-#define DFT_DECID "vt100" /* default VT100 */
-#endif
-
-#ifndef DFT_KBD_DIALECT
-#define DFT_KBD_DIALECT "B" /* default USASCII */
-#endif
-
-/* constants used for utf8 mode */
-#define UCS_REPL 0xfffd
-#define UCS_LIMIT 0x80000000U /* both limit and flag for non-UCS */
-
-#define TERMCAP_SIZE 1500 /* 1023 is standard; 'screen' exceeds */
-
-#define NMENUFONTS 9 /* font entries in fontMenu */
-
-#define NBOX 5 /* Number of Points in box */
-#define NPARAM 30 /* Max. parameters */
-
-typedef struct {
- char *opt;
- char *desc;
-} OptionHelp;
-
-typedef struct {
- unsigned char a_type; /* CSI, etc., see unparseq() */
- unsigned char a_pintro; /* private-mode char, if any */
- unsigned char a_inters; /* special (before final-char) */
- unsigned char a_final; /* final-char */
- short a_nparam; /* # of parameters */
- short a_param[NPARAM]; /* Parameters */
-} ANSI;
-
-#define TEK_FONT_LARGE 0
-#define TEK_FONT_2 1
-#define TEK_FONT_3 2
-#define TEK_FONT_SMALL 3
-#define TEKNUMFONTS 4
-
-/* Actually there are 5 types of lines, but four are non-solid lines */
-#define TEKNUMLINES 4
-
-typedef struct {
- int x;
- int y;
- int fontsize;
- unsigned linetype;
-} Tmodes;
-
-typedef struct {
- int Twidth;
- int Theight;
-} T_fontsize;
-
-typedef struct {
- short *bits;
- int x;
- int y;
- int width;
- int height;
-} BitmapBits;
-
-#define SAVELINES 64 /* default # lines to save */
-#define SCROLLLINES 1 /* default # lines to scroll */
-
-#define EXCHANGE(a,b,tmp) tmp = a; a = b; b = tmp
-
-/***====================================================================***/
-
-#if (XtSpecificationRelease < 6)
-#ifndef NO_ACTIVE_ICON
-#define NO_ACTIVE_ICON 1 /* Note: code relies on an X11R6 function */
-#endif
-#endif
-
-#ifndef OPT_AIX_COLORS
-#define OPT_AIX_COLORS 1 /* true if xterm is configured with AIX (16) colors */
-#endif
-
-#ifndef OPT_BLINK_CURS
-#define OPT_BLINK_CURS 1 /* true if xterm has blinking cursor capability */
-#endif
-
-#ifndef OPT_BLINK_TEXT
-#define OPT_BLINK_TEXT OPT_BLINK_CURS /* true if xterm has blinking text capability */
-#endif
-
-#ifndef OPT_BOX_CHARS
-#define OPT_BOX_CHARS 1 /* true if xterm can simulate box-characters */
-#endif
-
-#ifndef OPT_BROKEN_OSC
-#ifdef linux
-#define OPT_BROKEN_OSC 1 /* man console_codes, 1st paragraph - cf: ECMA-48 */
-#else
-#define OPT_BROKEN_OSC 0 /* true if xterm allows Linux's broken OSC parsing */
-#endif
-#endif
-
-#ifndef OPT_BROKEN_ST
-#define OPT_BROKEN_ST 1 /* true if xterm allows old/broken OSC parsing */
-#endif
-
-#ifndef OPT_C1_PRINT
-#define OPT_C1_PRINT 1 /* true if xterm allows C1 controls to be printable */
-#endif
-
-#ifndef OPT_CLIP_BOLD
-#define OPT_CLIP_BOLD 1 /* true if xterm uses clipping to avoid bold-trash */
-#endif
-
-#ifndef OPT_COLOR_CLASS
-#define OPT_COLOR_CLASS 1 /* true if xterm uses separate color-resource classes */
-#endif
-
-#ifndef OPT_COLOR_RES
-#define OPT_COLOR_RES 1 /* true if xterm delays color-resource evaluation */
-#undef OPT_COLOR_RES2
-#endif
-
-#ifndef OPT_COLOR_RES2
-#define OPT_COLOR_RES2 OPT_COLOR_RES /* true to avoid using extra resources */
-#endif
-
-#ifndef OPT_DABBREV
-#define OPT_DABBREV 0 /* dynamic abbreviations */
-#endif
-
-#ifndef OPT_DEC_CHRSET
-#define OPT_DEC_CHRSET 1 /* true if xterm is configured for DEC charset */
-#endif
-
-#ifndef OPT_DEC_LOCATOR
-#define OPT_DEC_LOCATOR 0 /* true if xterm supports VT220-style mouse events */
-#endif
-
-#ifndef OPT_DEC_RECTOPS
-#define OPT_DEC_RECTOPS 0 /* true if xterm is configured for VT420 rectangles */
-#endif
-
-#ifndef OPT_DEC_SOFTFONT
-#define OPT_DEC_SOFTFONT 0 /* true if xterm is configured for VT220 softfonts */
-#endif
-
-#ifndef OPT_EBCDIC
-#ifdef __MVS__
-#define OPT_EBCDIC 1
-#else
-#define OPT_EBCDIC 0
-#endif
-#endif
-
-#ifndef OPT_HP_FUNC_KEYS
-#define OPT_HP_FUNC_KEYS 0 /* true if xterm supports HP-style function keys */
-#endif
-
-#ifndef OPT_I18N_SUPPORT
-#if (XtSpecificationRelease >= 5)
-#define OPT_I18N_SUPPORT 1 /* true if xterm uses internationalization support */
-#else
-#define OPT_I18N_SUPPORT 0
-#endif
-#endif
-
-#ifndef OPT_INITIAL_ERASE
-#define OPT_INITIAL_ERASE 1 /* use pty's erase character if it's not 128 */
-#endif
-
-#ifndef OPT_INPUT_METHOD
-#if (XtSpecificationRelease >= 6)
-#define OPT_INPUT_METHOD 1 /* true if xterm uses input-method support */
-#else
-#define OPT_INPUT_METHOD 0
-#endif
-#endif
-
-#ifndef OPT_ISO_COLORS
-#define OPT_ISO_COLORS 1 /* true if xterm is configured with ISO colors */
-#endif
-
-#ifndef OPT_256_COLORS
-#define OPT_256_COLORS 0 /* true if xterm is configured with 256 colors */
-#endif
-
-#ifndef OPT_88_COLORS
-#define OPT_88_COLORS 0 /* true if xterm is configured with 88 colors */
-#endif
-
-#ifndef OPT_HIGHLIGHT_COLOR
-#define OPT_HIGHLIGHT_COLOR 1 /* true if xterm supports color highlighting */
-#endif
-
-#ifndef OPT_LOAD_VTFONTS
-#define OPT_LOAD_VTFONTS 0 /* true if xterm has load-vt-fonts() action */
-#endif
-
-#ifndef OPT_LUIT_PROG
-#define OPT_LUIT_PROG 0 /* true if xterm supports luit */
-#endif
-
-#ifndef OPT_MAXIMIZE
-#define OPT_MAXIMIZE 1 /* add actions for iconify ... maximize */
-#endif
-
-#ifndef OPT_MINI_LUIT
-#define OPT_MINI_LUIT 0 /* true if xterm supports built-in mini-luit */
-#endif
-
-#ifndef OPT_MOD_FKEYS
-#define OPT_MOD_FKEYS 1 /* modify cursor- and function-keys in normal mode */
-#endif
-
-#ifndef OPT_NUM_LOCK
-#define OPT_NUM_LOCK 1 /* use NumLock key only for numeric-keypad */
-#endif
-
-#ifndef OPT_PASTE64
-#define OPT_PASTE64 0 /* program control of select/paste via base64 */
-#endif
-
-#ifndef OPT_PC_COLORS
-#define OPT_PC_COLORS 1 /* true if xterm supports PC-style (bold) colors */
-#endif
-
-#ifndef OPT_PTY_HANDSHAKE
-#define OPT_PTY_HANDSHAKE USE_HANDSHAKE /* avoid pty races on older systems */
-#endif
-
-#ifndef OPT_PRINT_COLORS
-#define OPT_PRINT_COLORS 1 /* true if we print color information */
-#endif
-
-#ifndef OPT_READLINE
-#define OPT_READLINE 0 /* mouse-click/paste support for readline */
-#endif
-
-#ifndef OPT_RENDERFONT
-#ifdef XRENDERFONT
-#define OPT_RENDERFONT 1
-#else
-#define OPT_RENDERFONT 0
-#endif
-#endif
-
-#ifndef OPT_RENDERWIDE
-#if OPT_RENDERFONT && OPT_WIDE_CHARS && defined(HAVE_TYPE_XFTCHARSPEC)
-#define OPT_RENDERWIDE 1
-#else
-#define OPT_RENDERWIDE 0
-#endif
-#endif
-
-#ifndef OPT_SAME_NAME
-#define OPT_SAME_NAME 1 /* suppress redundant updates of title, icon, etc. */
-#endif
-
-#ifndef OPT_SCO_FUNC_KEYS
-#define OPT_SCO_FUNC_KEYS 0 /* true if xterm supports SCO-style function keys */
-#endif
-
-#ifndef OPT_SESSION_MGT
-#if defined(XtNdieCallback) && defined(XtNsaveCallback)
-#define OPT_SESSION_MGT 1
-#else
-#define OPT_SESSION_MGT 0
-#endif
-#endif
-
-#ifndef OPT_SHIFT_FONTS
-#define OPT_SHIFT_FONTS 1 /* true if xterm interprets fontsize-shifting */
-#endif
-
-#ifndef OPT_SUNPC_KBD
-#define OPT_SUNPC_KBD 1 /* true if xterm supports Sun/PC keyboard map */
-#endif
-
-#ifndef OPT_TCAP_QUERY
-#define OPT_TCAP_QUERY 0 /* true for experimental termcap query */
-#endif
-
-#ifndef OPT_TEK4014
-#define OPT_TEK4014 1 /* true if we're using tek4014 emulation */
-#endif
-
-#ifndef OPT_TOOLBAR
-#define OPT_TOOLBAR 0 /* true if xterm supports toolbar menus */
-#endif
-
-#ifndef OPT_TRACE
-#define OPT_TRACE 0 /* true if we're using debugging traces */
-#endif
-
-#ifndef OPT_VT52_MODE
-#define OPT_VT52_MODE 1 /* true if xterm supports VT52 emulation */
-#endif
-
-#ifndef OPT_WIDE_CHARS
-#define OPT_WIDE_CHARS 0 /* true if xterm supports 16-bit characters */
-#endif
-
-#ifndef OPT_XMC_GLITCH
-#define OPT_XMC_GLITCH 0 /* true if xterm supports xmc (magic cookie glitch) */
-#endif
-
-#ifndef OPT_ZICONBEEP
-#define OPT_ZICONBEEP 1 /* true if xterm supports "-ziconbeep" option */
-#endif
-
-/***====================================================================***/
-
-#if OPT_AIX_COLORS && !OPT_ISO_COLORS
-/* You must have ANSI/ISO colors to support AIX colors */
-#undef OPT_AIX_COLORS
-#define OPT_AIX_COLORS 0
-#endif
-
-#if OPT_COLOR_RES && !OPT_ISO_COLORS
-/* You must have ANSI/ISO colors to support ColorRes logic */
-#undef OPT_COLOR_RES
-#define OPT_COLOR_RES 0
-#endif
-
-#if OPT_COLOR_RES2 && !(OPT_256_COLORS || OPT_88_COLORS)
-/* You must have 88/256 colors to need fake-resource logic */
-#undef OPT_COLOR_RES2
-#define OPT_COLOR_RES2 0
-#endif
-
-#if OPT_PASTE64 && !OPT_READLINE
-/* OPT_PASTE64 uses logic from OPT_READLINE */
-#undef OPT_READLINE
-#define OPT_READLINE 1
-#endif
-
-#if OPT_PC_COLORS && !OPT_ISO_COLORS
-/* You must have ANSI/ISO colors to support PC colors */
-#undef OPT_PC_COLORS
-#define OPT_PC_COLORS 0
-#endif
-
-#if OPT_PRINT_COLORS && !OPT_ISO_COLORS
-/* You must have ANSI/ISO colors to be able to print them */
-#undef OPT_PRINT_COLORS
-#define OPT_PRINT_COLORS 0
-#endif
-
-#if OPT_256_COLORS && !OPT_ISO_COLORS
-/* You must have ANSI/ISO colors to support 256 colors */
-#undef OPT_256_COLORS
-#define OPT_256_COLORS 0
-#endif
-
-#if OPT_88_COLORS && !OPT_ISO_COLORS
-/* You must have ANSI/ISO colors to support 88 colors */
-#undef OPT_88_COLORS
-#define OPT_88_COLORS 0
-#endif
-
-#if OPT_88_COLORS && OPT_256_COLORS
-/* 256 colors supersedes 88 colors */
-#undef OPT_88_COLORS
-#define OPT_88_COLORS 0
-#endif
-
-/***====================================================================***/
-
-/*
- * Indices for menu_font_names[][]
- */
-typedef enum {
- fNorm = 0
- , fBold
-#if OPT_WIDE_CHARS
- , fWide
- , fWBold
-#endif
- , fMAX
-} VTFontEnum;
-
-/* indices for the normal terminal colors in screen.Tcolors[] */
-typedef enum {
- TEXT_FG = 0 /* text foreground */
- , TEXT_BG = 1 /* text background */
- , TEXT_CURSOR = 2 /* text cursor */
- , MOUSE_FG = 3 /* mouse foreground */
- , MOUSE_BG = 4 /* mouse background */
-#if OPT_TEK4014
- , TEK_FG = 5 /* tektronix foreground */
- , TEK_BG = 6 /* tektronix background */
-#endif
-#if OPT_HIGHLIGHT_COLOR
- , HIGHLIGHT_BG = 7 /* highlight background */
-#endif
-#if OPT_TEK4014
- , TEK_CURSOR = 8 /* tektronix cursor */
-#endif
- , NCOLORS /* total number of colors */
-} TermColors;
-
-#define COLOR_DEFINED(s,w) ((s)->which & (1<<(w)))
-#define COLOR_VALUE(s,w) ((s)->colors[w])
-#define SET_COLOR_VALUE(s,w,v) (((s)->colors[w] = (v)), ((s)->which |= (1<<(w))))
-
-#define COLOR_NAME(s,w) ((s)->names[w])
-#define SET_COLOR_NAME(s,w,v) (((s)->names[w] = (v)), ((s)->which |= (1<<(w))))
-
-#define UNDEFINE_COLOR(s,w) ((s)->which &= (~((w)<<1)))
-
-/***====================================================================***/
-
-#if OPT_ISO_COLORS
-#define if_OPT_ISO_COLORS(screen, code) if(screen->colorMode) code
-#define TERM_COLOR_FLAGS(xw) ((xw)->flags & (FG_COLOR|BG_COLOR))
-#define COLOR_0 0
-#define COLOR_1 1
-#define COLOR_2 2
-#define COLOR_3 3
-#define COLOR_4 4
-#define COLOR_5 5
-#define COLOR_6 6
-#define COLOR_7 7
-#define COLOR_8 8
-#define COLOR_9 9
-#define COLOR_10 10
-#define COLOR_11 11
-#define COLOR_12 12
-#define COLOR_13 13
-#define COLOR_14 14
-#define COLOR_15 15
-#define MIN_ANSI_COLORS 16
-
-#if OPT_256_COLORS
-# define NUM_ANSI_COLORS 256
-#elif OPT_88_COLORS
-# define NUM_ANSI_COLORS 88
-#else
-# define NUM_ANSI_COLORS MIN_ANSI_COLORS
-#endif
-
-#if NUM_ANSI_COLORS > MIN_ANSI_COLORS
-# define OPT_EXT_COLORS 1
-#else
-# define OPT_EXT_COLORS 0
-#endif
-
-#define COLOR_BD (NUM_ANSI_COLORS) /* BOLD */
-#define COLOR_UL (NUM_ANSI_COLORS+1) /* UNDERLINE */
-#define COLOR_BL (NUM_ANSI_COLORS+2) /* BLINK */
-#define COLOR_RV (NUM_ANSI_COLORS+3) /* REVERSE */
-#define MAXCOLORS (NUM_ANSI_COLORS+4)
-#ifndef DFT_COLORMODE
-#define DFT_COLORMODE TRUE /* default colorMode resource */
-#endif
-
-#define ReverseOrHilite(screen,flags,hilite) \
- (( screen->colorRVMode && hilite ) || \
- ( !screen->colorRVMode && \
- (( (flags & INVERSE) && !hilite) || \
- (!(flags & INVERSE) && hilite)) ))
-
-/* Define a fake XK code, we need it for the fake color response in
- * xtermcapKeycode(). */
-#if OPT_TCAP_QUERY
-# define XK_COLORS 0x0003
-#endif
-
-#else /* !OPT_ISO_COLORS */
-
-#define if_OPT_ISO_COLORS(screen, code) /* nothing */
-#define TERM_COLOR_FLAGS(xw) 0
-
-#define ReverseOrHilite(screen,flags,hilite) \
- (( (flags & INVERSE) && !hilite) || \
- (!(flags & INVERSE) && hilite))
-
-#endif /* OPT_ISO_COLORS */
-
-#if OPT_AIX_COLORS
-#define if_OPT_AIX_COLORS(screen, code) if(screen->colorMode) code
-#else
-#define if_OPT_AIX_COLORS(screen, code) /* nothing */
-#endif
-
-#if OPT_256_COLORS || OPT_88_COLORS
-# define if_OPT_EXT_COLORS(screen, code) if(screen->colorMode) code
-# define if_OPT_ISO_TRADITIONAL_COLORS(screen, code) /* nothing */
-#elif OPT_ISO_COLORS
-# define if_OPT_EXT_COLORS(screen, code) /* nothing */
-# define if_OPT_ISO_TRADITIONAL_COLORS(screen, code) if(screen->colorMode) code
-#else
-# define if_OPT_EXT_COLORS(screen, code) /* nothing */
-# define if_OPT_ISO_TRADITIONAL_COLORS(screen, code) /*nothing*/
-#endif
-
-#define COLOR_RES_NAME(root) "color" root
-
-#if OPT_COLOR_CLASS
-#define COLOR_RES_CLASS(root) "Color" root
-#else
-#define COLOR_RES_CLASS(root) XtCForeground
-#endif
-
-#if OPT_COLOR_RES
-#define COLOR_RES(root,offset,value) Sres(COLOR_RES_NAME(root), COLOR_RES_CLASS(root), offset.resource, value)
-#define COLOR_RES2(name,class,offset,value) Sres(name, class, offset.resource, value)
-#else
-#define COLOR_RES(root,offset,value) Cres(COLOR_RES_NAME(root), COLOR_RES_CLASS(root), offset, value)
-#define COLOR_RES2(name,class,offset,value) Cres(name, class, offset, value)
-#endif
-
-/***====================================================================***/
-
-#if OPT_DEC_CHRSET
-#define if_OPT_DEC_CHRSET(code) code
- /* Use 2 bits for encoding the double high/wide sense of characters */
-#define CSET_SWL 0
-#define CSET_DHL_TOP 1
-#define CSET_DHL_BOT 2
-#define CSET_DWL 3
-#define NUM_CHRSET 8 /* normal/bold and 4 CSET_xxx values */
- /* Use remaining bits for encoding the other character-sets */
-#define CSET_NORMAL(code) ((code) == CSET_SWL)
-#define CSET_DOUBLE(code) (!CSET_NORMAL(code) && !CSET_EXTEND(code))
-#define CSET_EXTEND(code) ((code) > CSET_DWL)
- /* for doublesize characters, the first cell in a row holds the info */
-#define SCRN_ROW_CSET(screen,row) (SCRN_BUF_CSETS((screen), row)[0])
-#define CurMaxCol(screen, row) \
- (CSET_DOUBLE(SCRN_ROW_CSET(screen, row)) \
- ? (screen->max_col / 2) \
- : (screen->max_col))
-#define CurCursorX(screen, row, col) \
- (CSET_DOUBLE(SCRN_ROW_CSET(screen, row)) \
- ? CursorX(screen, 2*(col)) \
- : CursorX(screen, (col)))
-#define CurFontWidth(screen, row) \
- (CSET_DOUBLE(SCRN_ROW_CSET(screen, row)) \
- ? 2*FontWidth(screen) \
- : FontWidth(screen))
-#else
-#define if_OPT_DEC_CHRSET(code) /*nothing*/
-#define CurMaxCol(screen, row) screen->max_col
-#define CurCursorX(screen, row, col) CursorX(screen, col)
-#define CurFontWidth(screen, row) FontWidth(screen)
-#endif
-
-#if OPT_LUIT_PROG && !OPT_WIDE_CHARS
-#error Luit requires the wide-chars configuration
-#endif
-
- /* the number of pointers per row in 'ScrnBuf' */
-#if OPT_ISO_COLORS || OPT_DEC_CHRSET || OPT_WIDE_CHARS
-#define MAX_PTRS term->num_ptrs
-#else
-#define MAX_PTRS (OFF_ATTRS+1)
-#endif
-
-#define BUF_HEAD 1
- /* the number that point to Char data */
-#define BUF_PTRS (MAX_PTRS - BUF_HEAD)
-
-/***====================================================================***/
-
-#if OPT_EBCDIC
-extern int E2A(int);
-extern int A2E(int);
-#else
-#define E2A(a) (a)
-#define A2E(a) (a)
-#endif
-
-#define CONTROL(a) (A2E(E2A(a)&037))
-
-/***====================================================================***/
-
-#if OPT_TEK4014
-#define TEK4014_ACTIVE(screen) ((screen)->TekEmu)
-#define CURRENT_EMU_VAL(screen,tek,vt) (TEK4014_ACTIVE(screen) ? tek : vt)
-#define CURRENT_EMU(screen) CURRENT_EMU_VAL(screen, (Widget)tekWidget, (Widget)term)
-#else
-#define TEK4014_ACTIVE(screen) 0
-#define CURRENT_EMU_VAL(screen,tek,vt) (vt)
-#define CURRENT_EMU(screen) ((Widget)term)
-#endif
-
-/***====================================================================***/
-
-#if OPT_TOOLBAR
-#define SHELL_OF(widget) XtParent(XtParent(widget))
-#else
-#define SHELL_OF(widget) XtParent(widget)
-#endif
-
-/***====================================================================***/
-
-#if OPT_VT52_MODE
-#define if_OPT_VT52_MODE(screen, code) if(screen->vtXX_level == 0) code
-#else
-#define if_OPT_VT52_MODE(screen, code) /* nothing */
-#endif
-
-/***====================================================================***/
-
-#if OPT_XMC_GLITCH
-#define if_OPT_XMC_GLITCH(screen, code) if(screen->xmc_glitch) code
-#define XMC_GLITCH 1 /* the character we'll show */
-#define XMC_FLAGS (INVERSE|UNDERLINE|BOLD)
-#else
-#define if_OPT_XMC_GLITCH(screen, code) /* nothing */
-#endif
-
-/***====================================================================***/
-
-#if OPT_WIDE_CHARS
-#define if_OPT_WIDE_CHARS(screen, code) if(screen->wide_chars) code
-#define PAIRED_CHARS(a,b) a,b
-typedef unsigned IChar; /* for 8 or 16-bit characters, plus flag */
-#else
-#define if_OPT_WIDE_CHARS(screen, code) /* nothing */
-#define PAIRED_CHARS(a,b) a
-typedef unsigned char IChar; /* for 8-bit characters */
-#endif
-
-/***====================================================================***/
-
-#ifndef RES_OFFSET
-#define RES_OFFSET(offset) XtOffsetOf(XtermWidgetRec, offset)
-#endif
-
-#define RES_NAME(name) name
-#define RES_CLASS(name) name
-
-#define Bres(name, class, offset, dftvalue) \
- {RES_NAME(name), RES_CLASS(class), XtRBoolean, sizeof(Boolean), \
- RES_OFFSET(offset), XtRImmediate, (XtPointer) dftvalue}
-
-#define Cres(name, class, offset, dftvalue) \
- {RES_NAME(name), RES_CLASS(class), XtRPixel, sizeof(Pixel), \
- RES_OFFSET(offset), XtRString, (XtPointer) dftvalue}
-
-#define Tres(name, class, offset, dftvalue) \
- COLOR_RES2(name, class, screen.Tcolors[offset], dftvalue) \
-
-#define Fres(name, class, offset, dftvalue) \
- {RES_NAME(name), RES_CLASS(class), XtRFontStruct, sizeof(XFontStruct *), \
- RES_OFFSET(offset), XtRString, (XtPointer) dftvalue}
-
-#define Ires(name, class, offset, dftvalue) \
- {RES_NAME(name), RES_CLASS(class), XtRInt, sizeof(int), \
- RES_OFFSET(offset), XtRImmediate, (XtPointer) dftvalue}
-
-#define Dres(name, class, offset, dftvalue) \
- {RES_NAME(name), RES_CLASS(class), XtRFloat, sizeof(float), \
- RES_OFFSET(offset), XtRString, (XtPointer) dftvalue}
-
-#define Sres(name, class, offset, dftvalue) \
- {RES_NAME(name), RES_CLASS(class), XtRString, sizeof(char *), \
- RES_OFFSET(offset), XtRString, (XtPointer) dftvalue}
-
-#define Wres(name, class, offset, dftvalue) \
- {RES_NAME(name), RES_CLASS(class), XtRWidget, sizeof(Widget), \
- RES_OFFSET(offset), XtRWidget, (XtPointer) dftvalue}
-
-/***====================================================================***/
-
-#define FRG_SIZE resource.minBufSize
-#define BUF_SIZE resource.maxBufSize
-
-typedef struct {
- Char * next;
- Char * last;
- int update; /* HandleInterpret */
-#if OPT_WIDE_CHARS
- IChar utf_data; /* resulting character */
- int utf_size; /* ...number of bytes decoded */
-#endif
- Char buffer[1];
-} PtyData;
-
-/***====================================================================***/
-
-/* The order of ifdef's matches the logic for num_ptrs in VTInitialize */
-typedef enum {
- OFF_FLAGS = 0 /* BUF_HEAD */
- , OFF_CHARS = 1 /* first (or only) byte of cell's character */
- , OFF_ATTRS = 2 /* video attributes */
-#if OPT_ISO_COLORS
-#if OPT_256_COLORS || OPT_88_COLORS
- , OFF_FGRND /* foreground color number */
- , OFF_BGRND /* background color number */
-#else
- , OFF_COLOR /* foreground+background color numbers */
-#endif
-#endif
-#if OPT_DEC_CHRSET
- , OFF_CSETS /* DEC character-set */
-#endif
-#if OPT_WIDE_CHARS
- , OFF_WIDEC /* second byte of first wide-character */
- , OFF_COM1L /* first combining character */
- , OFF_COM1H
- , OFF_COM2L /* second combining character */
- , OFF_COM2H
-#endif
-} BufOffsets;
-
- /* ScrnBuf-level macros */
-#define BUF_FLAGS(buf, row) (buf[MAX_PTRS * (row) + OFF_FLAGS])
-#define BUF_CHARS(buf, row) (buf[MAX_PTRS * (row) + OFF_CHARS])
-#define BUF_ATTRS(buf, row) (buf[MAX_PTRS * (row) + OFF_ATTRS])
-#define BUF_COLOR(buf, row) (buf[MAX_PTRS * (row) + OFF_COLOR])
-#define BUF_FGRND(buf, row) (buf[MAX_PTRS * (row) + OFF_FGRND])
-#define BUF_BGRND(buf, row) (buf[MAX_PTRS * (row) + OFF_BGRND])
-#define BUF_CSETS(buf, row) (buf[MAX_PTRS * (row) + OFF_CSETS])
-#define BUF_WIDEC(buf, row) (buf[MAX_PTRS * (row) + OFF_WIDEC])
-#define BUF_COM1L(buf, row) (buf[MAX_PTRS * (row) + OFF_COM1L])
-#define BUF_COM1H(buf, row) (buf[MAX_PTRS * (row) + OFF_COM1H])
-#define BUF_COM2L(buf, row) (buf[MAX_PTRS * (row) + OFF_COM2L])
-#define BUF_COM2H(buf, row) (buf[MAX_PTRS * (row) + OFF_COM2H])
-
- /* TScreen-level macros */
-#define SCRN_BUF_FLAGS(screen, row) BUF_FLAGS(screen->visbuf, row)
-#define SCRN_BUF_CHARS(screen, row) BUF_CHARS(screen->visbuf, row)
-#define SCRN_BUF_ATTRS(screen, row) BUF_ATTRS(screen->visbuf, row)
-#define SCRN_BUF_COLOR(screen, row) BUF_COLOR(screen->visbuf, row)
-#define SCRN_BUF_FGRND(screen, row) BUF_FGRND(screen->visbuf, row)
-#define SCRN_BUF_BGRND(screen, row) BUF_BGRND(screen->visbuf, row)
-#define SCRN_BUF_CSETS(screen, row) BUF_CSETS(screen->visbuf, row)
-#define SCRN_BUF_WIDEC(screen, row) BUF_WIDEC(screen->visbuf, row)
-#define SCRN_BUF_COM1L(screen, row) BUF_COM1L(screen->visbuf, row)
-#define SCRN_BUF_COM2L(screen, row) BUF_COM2L(screen->visbuf, row)
-#define SCRN_BUF_COM1H(screen, row) BUF_COM1H(screen->visbuf, row)
-#define SCRN_BUF_COM2H(screen, row) BUF_COM2H(screen->visbuf, row)
-
-typedef struct {
- unsigned chrset;
- unsigned flags;
- XFontStruct * fs;
- GC gc;
- char * fn;
-} XTermFonts;
-
-typedef struct {
- int top;
- int left;
- int bottom;
- int right;
-} XTermRect;
-
- /* indices into save_modes[] */
-typedef enum {
- DP_CRS_VISIBLE,
- DP_DECANM,
- DP_DECARM,
- DP_DECAWM,
- DP_DECBKM,
- DP_DECCKM,
- DP_DECCOLM, /* IN132COLUMNS */
- DP_DECOM,
- DP_DECPEX,
- DP_DECPFF,
- DP_DECSCLM,
- DP_DECSCNM,
- DP_DECTCEM,
- DP_DECTEK,
- DP_PRN_EXTENT,
- DP_PRN_FORMFEED,
- DP_X_ALTSCRN,
- DP_X_DECCOLM,
- DP_X_LOGGING,
- DP_X_MARGIN,
- DP_X_MORE,
- DP_X_MOUSE,
- DP_X_REVWRAP,
- DP_X_X10MSE,
-#if OPT_BLINK_CURS
- DP_CRS_BLINK,
-#endif
-#if OPT_TOOLBAR
- DP_TOOLBAR,
-#endif
- DP_LAST
-} SaveModes;
-
-#define DoSM(code,value) screen->save_modes[code] = value
-#define DoRM(code,value) value = screen->save_modes[code]
-
- /* index into vt_shell[] or tek_shell[] */
-typedef enum {
- noMenu = -1,
- mainMenu,
- vtMenu,
- fontMenu,
- tekMenu
-} MenuIndex;
-
-#define NUM_POPUP_MENUS 4
-
-#if OPT_COLOR_RES
-typedef struct {
- String resource;
- Pixel value;
- int mode;
-} ColorRes;
-#else
-#define ColorRes Pixel
-#endif
-
-typedef struct {
- unsigned which; /* must have NCOLORS bits */
- Pixel colors[NCOLORS];
- char *names[NCOLORS];
-} ScrnColors;
-
-typedef struct {
- Boolean saved;
- int row;
- int col;
- unsigned flags; /* VTxxx saves graphics rendition */
- char curgl;
- char curgr;
- char gsets[4];
-#if OPT_ISO_COLORS
- int cur_foreground; /* current foreground color */
- int cur_background; /* current background color */
- int sgr_foreground; /* current SGR foreground color */
- int sgr_background; /* current SGR background color */
- Boolean sgr_extended; /* SGR set with extended codes? */
-#endif
-} SavedCursor;
-
-typedef struct {
- int width; /* if > 0, width of scrollbar, */
- /* and scrollbar is showing */
- Boolean rv_cached; /* see ScrollBarReverseVideo */
- int rv_active; /* ...current reverse-video */
- Pixel bg; /* ...cached background color */
- Pixel fg; /* ...cached foreground color */
- Pixel bdr; /* ...cached border color */
- Pixmap bdpix; /* ...cached border pixmap */
-} SbInfo;
-
-#if OPT_TOOLBAR
-typedef struct {
- Widget menu_bar; /* toolbar, if initialized */
- Dimension menu_height; /* ...and its height */
- Dimension menu_border; /* ...and its border */
-} TbInfo;
-#define VT100_TB_INFO(name) screen.fullVwin.tb_info.name
-#endif
-
-struct _vtwin {
- Window window; /* X window id */
- int width; /* width of columns */
- int height; /* height of rows */
- Dimension fullwidth; /* full width of window */
- Dimension fullheight; /* full height of window */
- int f_width; /* width of fonts in pixels */
- int f_height; /* height of fonts in pixels */
- int f_ascent; /* ascent of font in pixels */
- int f_descent; /* descent of font in pixels */
- SbInfo sb_info;
- GC normalGC; /* normal painting */
- GC reverseGC; /* reverse painting */
- GC normalboldGC; /* normal painting, bold font */
- GC reverseboldGC; /* reverse painting, bold font */
-#if OPT_TOOLBAR
- Boolean active; /* true if toolbars are used */
- TbInfo tb_info; /* toolbar information */
-#endif
-};
-
-struct _tekwin {
- Window window; /* X window id */
- int width; /* width of columns */
- int height; /* height of rows */
- Dimension fullwidth; /* full width of window */
- Dimension fullheight; /* full height of window */
- double tekscale; /* scale factor Tek -> vs100 */
-};
-
-typedef struct {
-/* These parameters apply to both windows */
- Display *display; /* X display for screen */
- int respond; /* socket for responses
- (position report, etc.) */
-#if OPT_TCAP_QUERY
- int tc_query;
-#endif
- pid_t pid; /* pid of process on far side */
- uid_t uid; /* user id of actual person */
- gid_t gid; /* group id of actual person */
- GC cursorGC; /* normal cursor painting */
- GC fillCursorGC; /* special cursor painting */
- GC reversecursorGC;/* reverse cursor painting */
- GC cursoroutlineGC;/* for painting lines around */
- ColorRes Tcolors[NCOLORS]; /* terminal colors */
-#if OPT_ISO_COLORS
- ColorRes Acolors[MAXCOLORS]; /* ANSI color emulation */
- int veryBoldColors; /* modifier for boldColors */
- Boolean boldColors; /* can we make bold colors? */
- Boolean colorMode; /* are we using color mode? */
- Boolean colorULMode; /* use color for underline? */
- Boolean italicULMode; /* italic font for underline? */
- Boolean colorBDMode; /* use color for bold? */
- Boolean colorBLMode; /* use color for blink? */
- Boolean colorRVMode; /* use color for reverse? */
- Boolean colorAttrMode; /* prefer colorUL/BD to SGR */
-#endif
-#if OPT_DEC_CHRSET
- Boolean font_doublesize;/* enable font-scaling */
- int cache_doublesize;/* limit of our cache */
- Char cur_chrset; /* character-set index & code */
- int fonts_used; /* count items in double_fonts */
- XTermFonts double_fonts[NUM_CHRSET];
-#endif
-#if OPT_DEC_RECTOPS
- int cur_decsace; /* parameter for DECSACE */
-#endif
-#if OPT_WIDE_CHARS
- Boolean wide_chars; /* true when 16-bit chars */
- Boolean vt100_graphics; /* true to allow vt100-graphics */
- Boolean utf8_inparse; /* true to enable UTF-8 parser */
- int utf8_mode; /* use UTF-8 decode/encode: 0-2 */
- int latin9_mode; /* poor man's luit, latin9 */
- int unicode_font; /* font uses unicode encoding */
- int utf_count; /* state of utf_char */
- IChar utf_char; /* in-progress character */
- int last_written_col;
- int last_written_row;
-#endif
-#if OPT_BROKEN_OSC
- Boolean brokenLinuxOSC; /* true to ignore Linux palette ctls */
-#endif
-#if OPT_BROKEN_ST
- Boolean brokenStringTerm; /* true to match old OSC parse */
-#endif
-#if OPT_C1_PRINT
- Boolean c1_printable; /* true if we treat C1 as print */
-#endif
- int border; /* inner border */
- int scrollBarBorder; /* scrollBar border */
- Cursor arrow; /* arrow cursor */
- unsigned long event_mask;
- unsigned short send_mouse_pos; /* user wants mouse transition */
- /* and position information */
-#if OPT_PASTE64
- int base64_paste; /* set to send paste in base64 */
- /* _qWriteSelectionData expects these to be initialized to zero.
- * base64_flush() is the last step of the conversion, it clears these
- * variables.
- */
- int base64_accu;
- int base64_count;
- int base64_pad;
-#endif
-#if OPT_READLINE
- unsigned click1_moves;
- unsigned paste_moves;
- unsigned dclick3_deletes;
- unsigned paste_brackets;
- unsigned paste_quotes;
- unsigned paste_literal_nl;
-#endif /* OPT_READLINE */
-#if OPT_DEC_LOCATOR
- Boolean locator_reset; /* turn mouse off after 1 report? */
- Boolean locator_pixels; /* report in pixels? */
- /* if false, report in cells */
- unsigned short locator_events; /* what events to report */
- Boolean loc_filter; /* is filter rectangle active? */
- int loc_filter_top; /* filter rectangle for DEC Locator */
- int loc_filter_left;
- int loc_filter_bottom;
- int loc_filter_right;
-#endif /* OPT_DEC_LOCATOR */
- int mouse_button; /* current button pressed */
- int mouse_row; /* ...and its row */
- int mouse_col; /* ...and its column */
- int select; /* xterm selected */
- Boolean bellOnReset; /* bellOnReset */
- Boolean visualbell; /* visual bell mode */
- Boolean poponbell; /* pop on bell mode */
- Boolean allowSendEvents;/* SendEvent mode */
- Boolean allowWindowOps; /* WindowOps mode */
- Boolean allowSendEvent0;/* initial SendEvent mode */
- Boolean allowWindowOp0; /* initial WindowOps mode */
- Boolean awaitInput; /* select-timeout mode */
- Boolean grabbedKbd; /* keyboard is grabbed */
-#ifdef ALLOWLOGGING
- int logging; /* logging mode */
- int logfd; /* file descriptor of log */
- char *logfile; /* log file name */
- Char *logstart; /* current start of log buffer */
-#endif
- int inhibit; /* flags for inhibiting changes */
-
-/* VT window parameters */
- Boolean Vshow; /* VT window showing */
- struct _vtwin fullVwin;
-#ifndef NO_ACTIVE_ICON
- struct _vtwin iconVwin;
- struct _vtwin * whichVwin;
-#endif /* NO_ACTIVE_ICON */
-
- Cursor pointer_cursor; /* pointer cursor in window */
-
- String answer_back; /* response to ENQ */
- String printer_command; /* pipe/shell command string */
- Boolean printer_autoclose; /* close printer when offline */
- Boolean printer_extent; /* print complete page */
- Boolean printer_formfeed; /* print formfeed per function */
- int printer_controlmode; /* 0=off, 1=auto, 2=controller */
- int print_attributes; /* 0=off, 1=normal, 2=color */
-
- Boolean fnt_prop; /* true if proportional fonts */
- Boolean fnt_boxes; /* true if font has box-chars */
-#if OPT_BOX_CHARS
- Boolean force_box_chars;/* true if we assume that */
- Boolean force_all_chars;/* true to outline missing chars*/
-#endif
- Dimension fnt_wide;
- Dimension fnt_high;
- XFontStruct *fnt_norm; /* normal font of terminal */
- XFontStruct *fnt_bold; /* bold font of terminal */
- Boolean free_bold_box; /* same_font_size's austerity */
-#if OPT_WIDE_CHARS
- XFontStruct *fnt_dwd; /* wide font of terminal */
- XFontStruct *fnt_dwdb; /* wide bold font of terminal */
-#endif
-#ifndef NO_ACTIVE_ICON
- XFontStruct *fnt_icon; /* icon font */
-#endif /* NO_ACTIVE_ICON */
- int enbolden; /* overstrike for bold font */
- XPoint *box; /* draw unselected cursor */
-
- int cursor_state; /* ON, OFF, or BLINKED_OFF */
- int cursor_busy; /* do not redraw... */
-#if OPT_BLINK_CURS
- Boolean cursor_blink; /* cursor blink enable */
- Boolean cursor_blink_res; /* initial cursor blink value */
- Boolean cursor_blink_esc; /* cursor blink escape-state */
-#endif
-#if OPT_BLINK_TEXT
- Boolean blink_as_bold; /* text blink disable */
-#endif
-#if OPT_BLINK_CURS || OPT_BLINK_TEXT
- int blink_state; /* ON, OFF, or BLINKED_OFF */
- int blink_on; /* cursor on time (msecs) */
- int blink_off; /* cursor off time (msecs) */
- XtIntervalId blink_timer; /* timer-id for cursor-proc */
-#endif
- int cursor_GC; /* see ShowCursor() */
- int cursor_set; /* requested state */
- int cursor_col; /* previous cursor column */
- int cursor_row; /* previous cursor row */
- Boolean cursor_moved; /* scrolling makes cursor move */
- int cur_col; /* current cursor column */
- int cur_row; /* current cursor row */
- int max_col; /* rightmost column */
- int max_row; /* bottom row */
- int top_marg; /* top line of scrolling region */
- int bot_marg; /* bottom line of " " */
- Widget scrollWidget; /* pointer to scrollbar struct */
- int topline; /* line number of top, <= 0 */
- int savedlines; /* number of lines that've been saved */
- int savelines; /* number of lines off top to save */
- int scrolllines; /* number of lines to button scroll */
- Boolean scrollttyoutput; /* scroll to bottom on tty output */
- Boolean scrollkey; /* scroll to bottom on key */
-
- ScrnBuf visbuf; /* ptr to visible screen buf (main) */
- ScrnBuf allbuf; /* screen buffer (may include
- lines scrolled off top) */
- Char *sbuf_address; /* main screen memory address */
- ScrnBuf altbuf; /* alternate screen buffer */
- Char *abuf_address; /* alternate screen memory address */
- Char **save_ptr; /* workspace for save-pointers */
- size_t save_len; /* ...and its length */
- Boolean alternate; /* true if using alternate buf */
- unsigned short do_wrap; /* true if cursor in last column
- and character just output */
- int incopy; /* 0 idle; 1 XCopyArea issued;
- -1 first GraphicsExpose seen,
- but last not seen */
- int copy_src_x; /* params from last XCopyArea ... */
- int copy_src_y;
- unsigned int copy_width;
- unsigned int copy_height;
- int copy_dest_x;
- int copy_dest_y;
- Boolean c132; /* allow change to 132 columns */
- Boolean curses; /* kludge line wrap for more */
- Boolean hp_ll_bc; /* kludge HP-style ll for xdb */
- Boolean marginbell; /* true if margin bell on */
- int nmarginbell; /* columns from right margin */
- int bellarmed; /* cursor below bell margin */
- Boolean multiscroll; /* true if multi-scroll */
- int scrolls; /* outstanding scroll count,
- used only with multiscroll */
- SavedCursor sc[2]; /* data for restore cursor */
- unsigned char save_modes[DP_LAST]; /* save dec/xterm private modes */
-
- /* Improved VT100 emulation stuff. */
- String keyboard_dialect; /* default keyboard dialect */
- char gsets[4]; /* G0 through G3. */
- Char curgl; /* Current GL setting. */
- Char curgr; /* Current GR setting. */
- Char curss; /* Current single shift. */
- String term_id; /* resource for terminal_id */
- int terminal_id; /* 100=vt100, 220=vt220, etc. */
- int vtXX_level; /* 0=vt52, 1,2,3 = vt100 ... vt320 */
- int ansi_level; /* levels 1,2,3 */
- int scroll_amt; /* amount to scroll */
- int refresh_amt; /* amount to refresh */
- int protected_mode; /* 0=off, 1=DEC, 2=ISO */
- Boolean old_fkeys; /* true for compatible fkeys */
- Boolean delete_is_del; /* true for compatible Delete key */
- Boolean jumpscroll; /* whether we should jumpscroll */
- Boolean always_highlight; /* whether to highlight cursor */
- Boolean underline; /* whether to underline text */
- Boolean bold_mode; /* whether to use bold font */
-
-#if OPT_MAXIMIZE
- Boolean restore_data;
- int restore_x;
- int restore_y;
- unsigned restore_width;
- unsigned restore_height;
-#endif
-
-#if OPT_VT52_MODE
- int vt52_save_level; /* save-area for DECANM */
- char vt52_save_curgl;
- char vt52_save_curgr;
- char vt52_save_curss;
- char vt52_save_gsets[4];
-#endif
- /* Testing */
-#if OPT_XMC_GLITCH
- unsigned xmc_glitch; /* # of spaces to pad on SGR's */
- int xmc_attributes; /* attrs that make a glitch */
- Boolean xmc_inline; /* SGR's propagate only to eol */
- Boolean move_sgr_ok; /* SGR is reset on move */
-#endif
-
-#if OPT_TEK4014
-/* Tektronix window parameters */
- GC TnormalGC; /* normal painting */
- GC TcursorGC; /* normal cursor painting */
-
- Boolean Tshow; /* Tek window showing */
- Boolean waitrefresh; /* postpone refresh */
- struct _tekwin fullTwin;
-#ifndef NO_ACTIVE_ICON
- struct _tekwin iconTwin;
- struct _tekwin *whichTwin;
-#endif /* NO_ACTIVE_ICON */
-
- GC linepat[TEKNUMLINES]; /* line patterns */
- Boolean TekEmu; /* true if Tektronix emulation */
- int cur_X; /* current x */
- int cur_Y; /* current y */
- Tmodes cur; /* current tek modes */
- Tmodes page; /* starting tek modes on page */
- int margin; /* 0 -> margin 1, 1 -> margin 2 */
- int pen; /* current Tektronix pen 0=up, 1=dn */
- char *TekGIN; /* nonzero if Tektronix GIN mode*/
- int gin_terminator; /* Tek strap option */
-#endif /* OPT_TEK4014 */
-
- int multiClickTime; /* time between multiclick selects */
- int visualBellDelay; /* msecs to delay for visibleBell */
- int bellSuppressTime; /* msecs after Bell before another allowed */
- Boolean bellInProgress; /* still ringing/flashing prev bell? */
- char *charClass; /* for overriding word selection */
- Boolean cutNewline; /* whether or not line cut has \n */
- Boolean cutToBeginningOfLine; /* line cuts to BOL? */
- Boolean highlight_selection; /* controls appearance of selection */
- Boolean trim_selection; /* controls trimming of selection */
- Boolean i18nSelections;
- Boolean brokenSelections;
- Char *selection_data; /* the current selection */
- int selection_size; /* size of allocated buffer */
- int selection_length; /* number of significant bytes */
- Time selection_time; /* latest event timestamp */
- int startHRow, startHCol, /* highlighted text */
- endHRow, endHCol,
- startHCoord, endHCoord;
- Atom* selection_atoms; /* which selections we own */
- Cardinal sel_atoms_size; /* how many atoms allocated */
- Cardinal selection_count; /* how many atoms in use */
- Boolean input_eight_bits;/* use 8th bit instead of ESC prefix */
- Boolean output_eight_bits; /* honor all bits or strip */
- Boolean control_eight_bits; /* send CSI as 8-bits */
- Boolean backarrow_key; /* backspace/delete */
- Boolean meta_sends_esc; /* Meta-key sends ESC prefix */
- Pixmap menu_item_bitmap; /* mask for checking items */
- String menu_font_names[NMENUFONTS][fMAX];
-#define MenuFontName(n) menu_font_names[n][fNorm]
- long menu_font_sizes[NMENUFONTS];
- int menu_font_number;
-#if OPT_RENDERFONT
- XftFont * renderFontNorm[NMENUFONTS];
- XftFont * renderFontBold[NMENUFONTS];
- XftFont * renderFontItal[NMENUFONTS];
- XftFont * renderWideNorm[NMENUFONTS];
- XftFont * renderWideBold[NMENUFONTS];
- XftFont * renderWideItal[NMENUFONTS];
- XftDraw * renderDraw;
-#endif
-#if OPT_INPUT_METHOD
- XIM xim;
- XFontSet fs; /* fontset for XIM preedit */
- int fs_ascent; /* ascent of fs */
-#endif
- XIC xic; /* this is used even without XIM */
-#if OPT_DABBREV
- int dabbrev_working; /* nonzero during dabbrev process */
- unsigned char dabbrev_erase_char; /* used for deleting inserted completion */
-#endif
-} TScreen;
-
-typedef struct _TekPart {
- XFontStruct * Tfont[TEKNUMFONTS];
- int tobaseline[TEKNUMFONTS]; /* top-baseline, each font */
- char * initial_font; /* large, 2, 3, small */
- char * gin_terminator_str; /* ginTerminator resource */
-#if OPT_TOOLBAR
- TbInfo tb_info; /* toolbar information */
-#endif
-} TekPart;
-
-#if OPT_READLINE
-#define SCREEN_FLAG(screenp,f) (1&(screenp)->f)
-#define SCREEN_FLAG_set(screenp,f) ((screenp)->f |= 1)
-#define SCREEN_FLAG_unset(screenp,f) ((screenp)->f &= ~1L)
-#define SCREEN_FLAG_save(screenp,f) \
- ((screenp)->f = (((screenp)->f)<<1) | SCREEN_FLAG(screenp,f))
-#define SCREEN_FLAG_restore(screenp,f) ((screenp)->f = (((screenp)->f)>>1))
-#else
-#define SCREEN_FLAG(screenp,f) (0)
-#endif
-
-/* meaning of bits in screen.select flag */
-#define INWINDOW 01 /* the mouse is in one of the windows */
-#define FOCUS 02 /* one of the windows is the focus window */
-
-#define MULTICLICKTIME 250 /* milliseconds */
-
-typedef enum {
- keyboardIsLegacy, /* bogus vt220 codes for F1-F4, etc. */
- keyboardIsDefault,
- keyboardIsHP,
- keyboardIsSCO,
- keyboardIsSun,
- keyboardIsVT220
-} xtermKeyboardType;
-
-typedef enum { /* legal values for screen.utf8_mode */
- uFalse = 0,
- uTrue = 1,
- uAlways = 2,
- uDefault = 3
-} utf8ModeTypes;
-
-#if OPT_HP_FUNC_KEYS
-#define NAME_HP_KT " hp"
-#else
-#define NAME_HP_KT /*nothing*/
-#endif
-
-#if OPT_SCO_FUNC_KEYS
-#define NAME_SCO_KT " sco"
-#else
-#define NAME_SCO_KT /*nothing*/
-#endif
-
-#define NAME_SUN_KT " sun"
-
-#if OPT_SUNPC_KBD
-#define NAME_VT220_KT " vt220"
-#else
-#define NAME_VT220_KT /*nothing*/
-#endif
-
-#define KEYBOARD_TYPES NAME_HP_KT NAME_SCO_KT NAME_SUN_KT NAME_VT220_KT
-
-#if OPT_TRACE
-extern const char * visibleKeyboardType(xtermKeyboardType);
-#endif
-
-typedef struct
-{
- xtermKeyboardType type;
- unsigned flags;
-#if OPT_INITIAL_ERASE
- int reset_DECBKM; /* reset should set DECBKM */
-#endif
- int modify_cursor_keys; /* how to handle modifiers */
-} TKeyboard;
-
-typedef struct {
- char *f_n; /* the normal font */
- char *f_b; /* the bold font */
-#if OPT_WIDE_CHARS
- char *f_w; /* the normal wide font */
- char *f_wb; /* the bold wide font */
-#endif
-} VTFontNames;
-
-typedef struct _Misc {
- VTFontNames default_font;
- char *geo_metry;
- char *T_geometry;
-#if OPT_WIDE_CHARS
- Boolean cjk_width; /* true for built-in CJK wcwidth() */
- Boolean mk_width; /* true for simpler built-in wcwidth() */
-#endif
-#if OPT_LUIT_PROG
- Boolean callfilter; /* true to invoke luit */
- Boolean use_encoding; /* true to use -encoding option for luit */
- char *locale_str; /* "locale" resource */
- char *localefilter; /* path for luit */
-#endif
-#if OPT_INPUT_METHOD
- char *f_x; /* font for XIM */
-#endif
- int limit_resize;
-#ifdef ALLOWLOGGING
- Boolean log_on;
-#endif
- Boolean login_shell;
- Boolean re_verse;
- Boolean re_verse0; /* initial value of "-rv" */
- XtGravity resizeGravity;
- Boolean reverseWrap;
- Boolean autoWrap;
- Boolean logInhibit;
- Boolean signalInhibit;
-#if OPT_TEK4014
- Boolean tekInhibit;
- Boolean tekSmall; /* start tek window in small size */
-#endif
- Boolean scrollbar;
-#ifdef SCROLLBAR_RIGHT
- Boolean useRight;
-#endif
- Boolean titeInhibit;
- Boolean tiXtraScroll;
- Boolean appcursorDefault;
- Boolean appkeypadDefault;
-#if OPT_INPUT_METHOD
- char* input_method;
- char* preedit_type;
- Boolean open_im;
- Boolean cannot_im; /* true if we cannot use input-method */
-#endif
- Boolean dynamicColors;
- Boolean shared_ic;
-#ifndef NO_ACTIVE_ICON
- Boolean active_icon; /* use application icon window */
- unsigned icon_border_width;
- Pixel icon_border_pixel;
-#endif /* NO_ACTIVE_ICON */
-#if OPT_DEC_SOFTFONT
- Boolean font_loadable;
-#endif
-#if OPT_SHIFT_FONTS
- Boolean shift_fonts; /* true if we interpret fontsize-shifting */
-#endif
-#if OPT_SUNPC_KBD
- int ctrl_fkeys; /* amount to add to XK_F1 for ctrl modifier */
-#endif
-#if OPT_NUM_LOCK
- Boolean real_NumLock; /* true if we treat NumLock key specially */
- Boolean alwaysUseMods; /* true if we always want f-key modifiers */
- unsigned long num_lock; /* modifier for Num_Lock */
- unsigned long alt_left; /* modifier for Alt_L */
- unsigned long alt_right; /* modifier for Alt_R */
- Boolean meta_trans; /* true if Meta is used in translations */
- unsigned long meta_left; /* modifier for Meta_L */
- unsigned long meta_right; /* modifier for Meta_R */
-#endif
-#if OPT_RENDERFONT
- char *face_name;
- char *face_wide_name;
- float face_size;
- Boolean render_font;
-#endif
-} Misc;
-
-typedef struct {int foo;} XtermClassPart, TekClassPart;
-
-typedef struct _XtermClassRec {
- CoreClassPart core_class;
- XtermClassPart xterm_class;
-} XtermClassRec;
-
-extern WidgetClass xtermWidgetClass;
-
-#define IsXtermWidget(w) (XtClass(w) == xtermWidgetClass)
-
-#if OPT_TEK4014
-typedef struct _TekClassRec {
- CoreClassPart core_class;
- TekClassPart tek_class;
-} TekClassRec;
-#endif
-
-/* define masks for keyboard.flags */
-#define MODE_KAM 0x01 /* keyboard action mode */
-#define MODE_DECKPAM 0x02 /* keypad application mode */
-#define MODE_DECCKM 0x04 /* cursor keys */
-#define MODE_SRM 0x08 /* send-receive mode */
-#define MODE_DECBKM 0x10 /* backarrow */
-
-
-#define N_MARGINBELL 10
-
-#define TAB_BITS_SHIFT 5 /* 2**5 == 32 */
-#define TAB_BITS_WIDTH (1 << TAB_BITS_SHIFT)
-#define TAB_ARRAY_SIZE 10 /* number of ints to provide MAX_TABS bits */
-#define MAX_TABS (TAB_BITS_WIDTH * TAB_ARRAY_SIZE)
-
-typedef unsigned Tabs [TAB_ARRAY_SIZE];
-
-typedef struct _XtermWidgetRec {
- CorePart core;
- TKeyboard keyboard; /* terminal keyboard */
- TScreen screen; /* terminal screen */
- unsigned flags; /* mode flags */
- int cur_foreground; /* current foreground color */
- int cur_background; /* current background color */
- Pixel dft_foreground; /* default foreground color */
- Pixel dft_background; /* default background color */
-#if OPT_ISO_COLORS
- int sgr_foreground; /* current SGR foreground color */
- int sgr_background; /* current SGR background color */
- Boolean sgr_extended; /* SGR set with extended codes? */
-#endif
-#if OPT_ISO_COLORS || OPT_DEC_CHRSET || OPT_WIDE_CHARS
- int num_ptrs; /* number of pointers per row in 'ScrnBuf' */
-#endif
- unsigned initflags; /* initial mode flags */
- Tabs tabs; /* tabstops of the terminal */
- Misc misc; /* miscellaneous parameters */
-} XtermWidgetRec, *XtermWidget;
-
-#if OPT_TEK4014
-typedef struct _TekWidgetRec {
- CorePart core;
- TekPart tek;
-} TekWidgetRec, *TekWidget;
-#endif /* OPT_TEK4014 */
-
-/*
- * terminal flags
- * There are actually two namespaces mixed together here.
- * One is the set of flags that can go in screen->visbuf attributes
- * and which must fit in a char (see OFF_ATTRS).
- * The other is the global setting stored in
- * term->flags and screen->save_modes. This need only fit in an unsigned.
- */
-
-/* global flags and character flags (visible character attributes) */
-#define INVERSE 0x01 /* invert the characters to be output */
-#define UNDERLINE 0x02 /* true if underlining */
-#define BOLD 0x04
-#define BLINK 0x08
-/* global flags (also character attributes) */
-#define BG_COLOR 0x10 /* true if background set */
-#define FG_COLOR 0x20 /* true if foreground set */
-
-/* character flags (internal attributes) */
-#define PROTECTED 0x40 /* a character is drawn that cannot be erased */
-#define CHARDRAWN 0x80 /* a character has been drawn here on the
- screen. Used to distinguish blanks from
- empty parts of the screen when selecting */
-
-#if OPT_BLINK_TEXT
-#define BOLDATTR(screen) (BOLD | ((screen)->blink_as_bold ? BLINK : 0))
-#else
-#define BOLDATTR(screen) (BOLD | BLINK)
-#endif
-
-/* The following attributes make sense in the argument of drawXtermText() */
-#define NOBACKGROUND 0x100 /* Used for overstrike */
-#define NOTRANSLATION 0x200 /* No scan for chars missing in font */
-#define NATIVEENCODING 0x400 /* strings are in the font encoding */
-#define DOUBLEWFONT 0x800 /* The actual X-font is double-width */
-#define DOUBLEHFONT 0x1000 /* The actual X-font is double-height */
-#define CHARBYCHAR 0x2000 /* Draw chars one-by-one */
-
-/* The toplevel-call to drawXtermText() should have text-attributes guarded: */
-#define DRAWX_MASK 0xff /* text flags should be bitand'ed */
-
-/* The following attribute makes sense in the argument of xtermSpecialFont etc */
-#define NORESOLUTION 0x800000 /* find the font without resolution */
-
- /* mask: user-visible attributes */
-#define ATTRIBUTES (INVERSE|UNDERLINE|BOLD|BLINK|BG_COLOR|FG_COLOR|INVISIBLE|PROTECTED)
-
- /* mask for video-attributes only */
-#define SGR_MASK (BOLD|BLINK|UNDERLINE|INVERSE)
-
-#define WRAPAROUND 0x400 /* true if auto wraparound mode */
-#define REVERSEWRAP 0x800 /* true if reverse wraparound mode */
-#define REVERSE_VIDEO 0x1000 /* true if screen white on black */
-#define LINEFEED 0x2000 /* true if in auto linefeed mode */
-#define ORIGIN 0x4000 /* true if in origin mode */
-#define INSERT 0x8000 /* true if in insert mode */
-#define SMOOTHSCROLL 0x10000 /* true if in smooth scroll mode */
-#define IN132COLUMNS 0x20000 /* true if in 132 column mode */
-#define INVISIBLE 0x40000 /* true if writing invisible text */
-#define NATIONAL 0x100000 /* true if writing national charset */
-
-/*
- * Per-line flags
- */
-#define LINEWRAPPED 0x01 /* used once per line to indicate that it wraps
- * onto the next line so we can tell the
- * difference between lines that have wrapped
- * around and lines that have ended naturally
- * with a CR at column max_col.
- */
-/*
- * If we've set protected attributes with the DEC-style DECSCA, then we'll have
- * to use DECSED or DECSEL to erase preserving protected text. (The normal ED,
- * EL won't preserve protected-text). If we've used SPA, then normal ED and EL
- * will preserve protected-text. To keep things simple, just remember the last
- * control that was used to begin protected-text, and use that to determine how
- * erases are performed (otherwise we'd need 2 bits per protected character).
- */
-#define OFF_PROTECT 0
-#define DEC_PROTECT 1
-#define ISO_PROTECT 2
-
-#ifdef SCROLLBAR_RIGHT
-#define OriginX(screen) (((term->misc.useRight)?0:ScrollbarWidth(screen)) + screen->border)
-#else
-#define OriginX(screen) (ScrollbarWidth(screen) + screen->border)
-#endif
-
-#define OriginY(screen) (screen->border)
-
-#define CursorMoved(screen) \
- ((screen)->cursor_moved || \
- ((screen)->cursor_col != (screen)->cur_col || \
- (screen)->cursor_row != (screen)->cur_row))
-
-#define CursorX(screen,col) ((col) * FontWidth(screen) + OriginX(screen))
-#define CursorY(screen,row) ((((row) - screen->topline) * FontHeight(screen)) \
- + screen->border)
-
-/*
- * These definitions depend on whether xterm supports active-icon.
- */
-#ifndef NO_ACTIVE_ICON
-#define IsIconWin(screen,win) ((win) == &(screen)->iconVwin)
-#define IsIcon(screen) (WhichVWin(screen) == &(screen)->iconVwin)
-#define WhichVWin(screen) ((screen)->whichVwin)
-#define WhichTWin(screen) ((screen)->whichTwin)
-
-#define WhichVFont(screen,name) (IsIcon(screen) ? (screen)->fnt_icon \
- : (screen)->name)
-#define FontAscent(screen) (IsIcon(screen) ? (screen)->fnt_icon->ascent \
- : WhichVWin(screen)->f_ascent)
-#define FontDescent(screen) (IsIcon(screen) ? (screen)->fnt_icon->descent \
- : WhichVWin(screen)->f_descent)
-#else /* NO_ACTIVE_ICON */
-
-#define IsIconWin(screen,win) (False)
-#define IsIcon(screen) (False)
-#define WhichVWin(screen) (&((screen)->fullVwin))
-#define WhichTWin(screen) (&((screen)->fullTwin))
-
-#define WhichVFont(screen,name) ((screen)->name)
-#define FontAscent(screen) WhichVWin(screen)->f_ascent
-#define FontDescent(screen) WhichVWin(screen)->f_descent
-
-#endif /* NO_ACTIVE_ICON */
-
-/*
- * Macro to check if we are iconified; do not use render for that case.
- */
-#define UsingRenderFont(xw) ((xw)->misc.render_font && !IsIcon(&((xw)->screen)))
-
-/*
- * These definitions do not depend on whether xterm supports active-icon.
- */
-#define VWindow(screen) WhichVWin(screen)->window
-#define VShellWindow XtWindow(SHELL_OF(term))
-#define TWindow(screen) WhichTWin(screen)->window
-#define TShellWindow XtWindow(SHELL_OF(tekWidget))
-
-#define Width(screen) WhichVWin(screen)->width
-#define Height(screen) WhichVWin(screen)->height
-#define FullWidth(screen) WhichVWin(screen)->fullwidth
-#define FullHeight(screen) WhichVWin(screen)->fullheight
-#define FontWidth(screen) WhichVWin(screen)->f_width
-#define FontHeight(screen) WhichVWin(screen)->f_height
-
-#define NormalFont(screen) WhichVFont(screen, fnt_norm)
-#define BoldFont(screen) WhichVFont(screen, fnt_bold)
-
-#define ScrollbarWidth(screen) WhichVWin(screen)->sb_info.width
-#define NormalGC(screen) WhichVWin(screen)->normalGC
-#define ReverseGC(screen) WhichVWin(screen)->reverseGC
-#define NormalBoldGC(screen) WhichVWin(screen)->normalboldGC
-#define ReverseBoldGC(screen) WhichVWin(screen)->reverseboldGC
-
-#define TWidth(screen) WhichTWin(screen)->width
-#define THeight(screen) WhichTWin(screen)->height
-#define TFullWidth(screen) WhichTWin(screen)->fullwidth
-#define TFullHeight(screen) WhichTWin(screen)->fullheight
-#define TekScale(screen) WhichTWin(screen)->tekscale
-
-#define BorderWidth(w) ((w)->core.border_width)
-#define BorderPixel(w) ((w)->core.border_pixel)
-
-#if OPT_TOOLBAR
-#define ToolbarHeight(w) ((resource.toolBar) \
- ? (term->VT100_TB_INFO(menu_height) \
- + term->VT100_TB_INFO(menu_border) * 2) \
- : 0)
-#else
-#define ToolbarHeight(w) 0
-#endif
-
-#if OPT_TEK4014
-#define TEK_LINK_BLOCK_SIZE 1024
-
-typedef struct Tek_Link
-{
- struct Tek_Link *next; /* pointer to next TekLink in list
- NULL <=> this is last TekLink */
- unsigned short fontsize;/* character size, 0-3 */
- unsigned short count; /* number of chars in data */
- char *ptr; /* current pointer into data */
- char data [TEK_LINK_BLOCK_SIZE];
-} TekLink;
-#endif /* OPT_TEK4014 */
-
-/* flags for cursors */
-#define OFF 0
-#define ON 1
-#define BLINKED_OFF 2
-#define CLEAR 0
-#define TOGGLE 1
-
-/* flags for inhibit */
-#ifdef ALLOWLOGGING
-#define I_LOG 0x01
-#endif
-#define I_SIGNAL 0x02
-#define I_TEK 0x04
-
-/***====================================================================***/
-
-#if OPT_TRACE
-#include <trace.h>
-#undef NDEBUG /* turn on assert's */
-#else
-#ifndef NDEBUG
-#define NDEBUG /* not debugging, don't do assert's */
-#endif
-#endif
-
-#ifndef TRACE
-#define TRACE(p) /*nothing*/
-#endif
-
-#ifndef TRACE_ARGV
-#define TRACE_ARGV(tag,argv) /*nothing*/
-#endif
-
-#ifndef TRACE_CHILD
-#define TRACE_CHILD /*nothing*/
-#endif
-
-#ifndef TRACE_HINTS
-#define TRACE_HINTS(hints) /*nothing*/
-#endif
-
-#ifndef TRACE_OPTS
-#define TRACE_OPTS(opts,ress,lens) /*nothing*/
-#endif
-
-#ifndef TRACE_TRANS
-#define TRACE_TRANS(name,w) /*nothing*/
-#endif
-
-#ifndef TRACE_WM_HINTS
-#define TRACE_WM_HINTS(w) /*nothing*/
-#endif
-
-#ifndef TRACE_XRES
-#define TRACE_XRES() /*nothing*/
-#endif
-
-#ifndef TRACE2
-#define TRACE2(p) /*nothing*/
-#endif
-
-#endif /* included_ptyx_h */
diff --git a/nx-X11/programs/xterm/resize.c b/nx-X11/programs/xterm/resize.c
deleted file mode 100644
index 67cdd6e57..000000000
--- a/nx-X11/programs/xterm/resize.c
+++ /dev/null
@@ -1,600 +0,0 @@
-/* $XTermId: resize.c,v 1.97 2005/11/13 23:10:36 tom Exp $ */
-
-/*
- * $Xorg: resize.c,v 1.3 2000/08/17 19:55:09 cpqbld Exp $
- */
-
-/* $XFree86: xc/programs/xterm/resize.c,v 3.60 2005/11/13 23:10:36 dickey Exp $ */
-
-/*
- * Copyright 2003-2004,2005 by Thomas E. Dickey
- *
- * All Rights Reserved
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sublicense, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- * IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY
- * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- * Except as contained in this notice, the name(s) of the above copyright
- * holders shall not be used in advertising or otherwise to promote the
- * sale, use or other dealings in this Software without prior written
- * authorization.
- *
- *
- * Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
- *
- * All Rights Reserved
- *
- * Permission to use, copy, modify, and distribute this software and its
- * documentation for any purpose and without fee is hereby granted,
- * provided that the above copyright notice appear in all copies and that
- * both that copyright notice and this permission notice appear in
- * supporting documentation, and that the name of Digital Equipment
- * Corporation not be used in advertising or publicity pertaining to
- * distribution of the software without specific, written prior permission.
- *
- *
- * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
- * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
- * DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
- * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
- * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
- * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- * SOFTWARE.
- */
-
-/* resize.c */
-
-#include <xterm.h>
-#include <stdio.h>
-#include <ctype.h>
-#include <xstrings.h>
-#include <xterm_io.h>
-
-#ifdef APOLLO_SR9
-#define CANT_OPEN_DEV_TTY
-#endif
-
-#ifndef USE_TERMINFO /* avoid conflict with configure script */
-#if defined(__QNX__) || defined(__SCO__) || defined(linux) || defined(__OpenBSD__) || defined(__UNIXWARE__)
-#define USE_TERMINFO
-#endif
-#endif
-
-#if defined(__QNX__)
-#include <unix.h>
-#endif
-
-/*
- * Some OS's may want to use both, like SCO for example. We catch here anyone
- * who hasn't decided what they want.
- */
-#if !defined(USE_TERMCAP) && !defined(USE_TERMINFO)
-#define USE_TERMINFO
-#endif
-
-#include <signal.h>
-#include <pwd.h>
-
-#ifdef X_NOT_POSIX
-#if !defined(SYSV) && !defined(i386)
-extern struct passwd *getpwuid(); /* does ANYBODY need this? */
-#endif /* SYSV && i386 */
-#endif /* X_NOT_POSIX */
-
-#ifndef bzero
-#define bzero(s, n) memset(s, 0, n)
-#endif
-
-#ifdef __MVS__
-#define ESCAPE(string) "\047" string
-#else
-#define ESCAPE(string) "\033" string
-#endif
-
-#define EMULATIONS 2
-#define SUN 1
-#define VT100 0
-
-#define TIMEOUT 10
-
-#define SHELL_UNKNOWN 0
-#define SHELL_C 1
-#define SHELL_BOURNE 2
-/* *INDENT-OFF* */
-static struct {
- char *name;
- int type;
-} shell_list[] = {
- { "csh", SHELL_C }, /* vanilla cshell */
- { "tcsh", SHELL_C },
- { "jcsh", SHELL_C },
- { "sh", SHELL_BOURNE }, /* vanilla Bourne shell */
- { "ksh", SHELL_BOURNE }, /* Korn shell (from AT&T toolchest) */
- { "ksh-i", SHELL_BOURNE }, /* other name for latest Korn shell */
- { "bash", SHELL_BOURNE }, /* GNU Bourne again shell */
- { "jsh", SHELL_BOURNE },
- { NULL, SHELL_BOURNE } /* default (same as xterm's) */
-};
-/* *INDENT-ON* */
-
-static char *emuname[EMULATIONS] =
-{
- "VT100",
- "Sun",
-};
-static char *myname;
-static int shell_type = SHELL_UNKNOWN;
-static char *getsize[EMULATIONS] =
-{
- ESCAPE("7") ESCAPE("[r") ESCAPE("[999;999H") ESCAPE("[6n"),
- ESCAPE("[18t"),
-};
-#if defined(USE_STRUCT_TTYSIZE)
-#elif defined(USE_STRUCT_WINSIZE)
-static char *getwsize[EMULATIONS] =
-{ /* size in pixels */
- 0,
- ESCAPE("[14t"),
-};
-#endif /* USE_STRUCT_{TTYSIZE|WINSIZE} */
-static char *restore[EMULATIONS] =
-{
- ESCAPE("8"),
- 0,
-};
-static char *setname = "";
-static char *setsize[EMULATIONS] =
-{
- 0,
- ESCAPE("[8;%s;%st"),
-};
-
-#ifdef USE_ANY_SYSV_TERMIO
-static struct termio tioorig;
-#elif defined(USE_TERMIOS)
-static struct termios tioorig;
-#else
-static struct sgttyb sgorig;
-#endif /* USE_ANY_SYSV_TERMIO/USE_TERMIOS */
-
-static char *size[EMULATIONS] =
-{
- ESCAPE("[%d;%dR"),
- ESCAPE("[8;%d;%dt"),
-};
-static char sunname[] = "sunsize";
-static int tty;
-static FILE *ttyfp;
-
-#if defined(USE_STRUCT_TTYSIZE)
-#elif defined(USE_STRUCT_WINSIZE)
-static char *wsize[EMULATIONS] =
-{
- 0,
- ESCAPE("[4;%hd;%hdt"),
-};
-#endif /* USE_STRUCT_{TTYSIZE|WINSIZE} */
-
-static SIGNAL_T onintr(int sig);
-static SIGNAL_T resize_timeout(int sig);
-static int checkdigits(char *str);
-static void Usage(void);
-static void readstring(FILE *fp, char *buf, char *str);
-
-#undef US /* may conflict with curses.h */
-
-#ifdef USE_TERMCAP
-#ifdef HAVE_TERMCAP_H
-#include <termcap.h>
-#if defined(NCURSES_VERSION)
- /* The tgetent emulation function in SVr4-style curses implementations
- * (e.g., ncurses) ignores the buffer, so TERMCAP can't be set from it.
- * Instead, just use terminfo.
- */
-#undef USE_TERMCAP
-#include <curses.h>
-#endif
-#else
-#undef ERR /* workaround for glibc 2.1.3 */
-#include <curses.h>
-#ifdef NCURSES_VERSION
-#ifdef HAVE_NCURSES_TERM_H
-#include <ncurses/term.h>
-#else
-#include <term.h> /* tgetent() */
-#endif /*CYGWIN */
-#endif
-#endif /* HAVE_TERMCAP_H */
-#endif
-
-#define TERMCAP_SIZE 1500 /* 1023 is standard; 'screen' exceeds */
-
-#ifdef USE_TERMCAP
-static void
-print_termcap(const char *termcap)
-{
- int ch;
-
- putchar('\'');
- while ((ch = *termcap++) != '\0') {
- switch (ch & 0xff) {
- case 127: /* undo bug in GNU termcap */
- printf("^?");
- break;
- case '\'': /* must escape anyway (unlikely) */
- /* FALLTHRU */
- case '!': /* must escape for SunOS csh */
- putchar('\\');
- /* FALLTHRU */
- default:
- putchar(ch);
- break;
- }
- }
- putchar('\'');
-}
-#endif /* USE_TERMCAP */
-
-/*
- resets termcap string to reflect current screen size
- */
-int
-main(int argc, char **argv ENVP_ARG)
-{
- register char *ptr, *env;
- register int emu = VT100;
- char *shell;
- struct passwd *pw;
- int i;
- int rows, cols;
-#ifdef USE_ANY_SYSV_TERMIO
- struct termio tio;
-#elif defined(USE_TERMIOS)
- struct termios tio;
-#else
- struct sgttyb sg;
-#endif /* USE_ANY_SYSV_TERMIO/USE_TERMIOS */
-#ifdef USE_TERMCAP
- int ok_tcap = 1;
- char termcap[TERMCAP_SIZE];
- char newtc[TERMCAP_SIZE];
-#endif /* USE_TERMCAP */
- char buf[BUFSIZ];
-#ifdef TTYSIZE_STRUCT
- TTYSIZE_STRUCT ts;
-#endif
- char *name_of_tty;
-#ifdef CANT_OPEN_DEV_TTY
- extern char *ttyname();
-#endif
-
- myname = x_basename(argv[0]);
- if (strcmp(myname, sunname) == 0)
- emu = SUN;
- for (argv++, argc--; argc > 0 && **argv == '-'; argv++, argc--) {
- switch ((*argv)[1]) {
- case 's': /* Sun emulation */
- if (emu == SUN)
- Usage(); /* Never returns */
- emu = SUN;
- break;
- case 'u': /* Bourne (Unix) shell */
- shell_type = SHELL_BOURNE;
- break;
- case 'c': /* C shell */
- shell_type = SHELL_C;
- break;
- default:
- Usage(); /* Never returns */
- }
- }
-
- if (SHELL_UNKNOWN == shell_type) {
- /* Find out what kind of shell this user is running.
- * This is the same algorithm that xterm uses.
- */
- if (((ptr = getenv("SHELL")) == NULL || *ptr == 0) &&
- (((pw = getpwuid(getuid())) == NULL) ||
- *(ptr = pw->pw_shell) == 0))
- /* this is the same default that xterm uses */
- ptr = "/bin/sh";
-
- shell = x_basename(ptr);
-
- /* now that we know, what kind is it? */
- for (i = 0; shell_list[i].name; i++)
- if (!strcmp(shell_list[i].name, shell))
- break;
- shell_type = shell_list[i].type;
- }
-
- if (argc == 2) {
- if (!setsize[emu]) {
- fprintf(stderr,
- "%s: Can't set window size under %s emulation\n",
- myname, emuname[emu]);
- exit(1);
- }
- if (!checkdigits(argv[0]) || !checkdigits(argv[1]))
- Usage(); /* Never returns */
- } else if (argc != 0)
- Usage(); /* Never returns */
-
-#ifdef CANT_OPEN_DEV_TTY
- if ((name_of_tty = ttyname(fileno(stderr))) == NULL)
-#endif
- name_of_tty = "/dev/tty";
-
- if ((ttyfp = fopen(name_of_tty, "r+")) == NULL) {
- fprintf(stderr, "%s: can't open terminal %s\n",
- myname, name_of_tty);
- exit(1);
- }
- tty = fileno(ttyfp);
-#ifdef USE_TERMCAP
- if (!(env = getenv("TERM")) || !*env) {
- env = DFT_TERMTYPE;
- if (SHELL_BOURNE == shell_type)
- setname = "TERM=xterm;\nexport TERM;\n";
- else
- setname = "setenv TERM xterm;\n";
- }
- termcap[0] = 0; /* ...just in case we've accidentally gotten terminfo */
- if (tgetent(termcap, env) <= 0 || termcap[0] == 0)
- ok_tcap = 0;
-#endif /* USE_TERMCAP */
-#ifdef USE_TERMINFO
- if (!(env = getenv("TERM")) || !*env) {
- env = DFT_TERMTYPE;
- if (SHELL_BOURNE == shell_type)
- setname = "TERM=xterm;\nexport TERM;\n";
- else
- setname = "setenv TERM xterm;\n";
- }
-#endif /* USE_TERMINFO */
-
-#ifdef USE_ANY_SYSV_TERMIO
- ioctl(tty, TCGETA, &tioorig);
- tio = tioorig;
- tio.c_iflag &= ~(ICRNL | IUCLC);
- tio.c_lflag &= ~(ICANON | ECHO);
- tio.c_cflag |= CS8;
- tio.c_cc[VMIN] = 6;
- tio.c_cc[VTIME] = 1;
-#elif defined(USE_TERMIOS)
- tcgetattr(tty, &tioorig);
- tio = tioorig;
- tio.c_iflag &= ~ICRNL;
- tio.c_lflag &= ~(ICANON | ECHO);
- tio.c_cflag |= CS8;
- tio.c_cc[VMIN] = 6;
- tio.c_cc[VTIME] = 1;
-#else /* not USE_TERMIOS */
- ioctl(tty, TIOCGETP, &sgorig);
- sg = sgorig;
- sg.sg_flags |= RAW;
- sg.sg_flags &= ~ECHO;
-#endif /* USE_ANY_SYSV_TERMIO/USE_TERMIOS */
- signal(SIGINT, onintr);
- signal(SIGQUIT, onintr);
- signal(SIGTERM, onintr);
-#ifdef USE_ANY_SYSV_TERMIO
- ioctl(tty, TCSETAW, &tio);
-#elif defined(USE_TERMIOS)
- tcsetattr(tty, TCSADRAIN, &tio);
-#else /* not USE_TERMIOS */
- ioctl(tty, TIOCSETP, &sg);
-#endif /* USE_ANY_SYSV_TERMIO/USE_TERMIOS */
-
- if (argc == 2) {
- sprintf(buf, setsize[emu], argv[0], argv[1]);
- write(tty, buf, strlen(buf));
- }
- write(tty, getsize[emu], strlen(getsize[emu]));
- readstring(ttyfp, buf, size[emu]);
- if (sscanf(buf, size[emu], &rows, &cols) != 2) {
- fprintf(stderr, "%s: Can't get rows and columns\r\n", myname);
- onintr(0);
- }
- if (restore[emu])
- write(tty, restore[emu], strlen(restore[emu]));
-#if defined(USE_STRUCT_TTYSIZE)
- /* finally, set the tty's window size */
- if (ioctl(tty, TIOCGSIZE, &ts) != -1) {
- TTYSIZE_ROWS(ts) = rows;
- TTYSIZE_COLS(ts) = cols;
- SET_TTYSIZE(tty, ts);
- }
-#elif defined(USE_STRUCT_WINSIZE)
- /* finally, set the tty's window size */
- if (getwsize[emu]) {
- /* get the window size in pixels */
- write(tty, getwsize[emu], strlen(getwsize[emu]));
- readstring(ttyfp, buf, wsize[emu]);
- if (sscanf(buf, wsize[emu], &ts.ws_xpixel, &ts.ws_ypixel) != 2) {
- fprintf(stderr, "%s: Can't get window size\r\n", myname);
- onintr(0);
- }
- TTYSIZE_ROWS(ts) = rows;
- TTYSIZE_COLS(ts) = cols;
- SET_TTYSIZE(tty, ts);
- } else if (ioctl(tty, TIOCGWINSZ, &ts) != -1) {
- /* we don't have any way of directly finding out
- the current height & width of the window in pixels. We try
- our best by computing the font height and width from the "old"
- window-size values, and multiplying by these ratios... */
- if (TTYSIZE_COLS(ts) != 0)
- ts.ws_xpixel = cols * (ts.ws_xpixel / TTYSIZE_COLS(ts));
- if (TTYSIZE_ROWS(ts) != 0)
- ts.ws_ypixel = rows * (ts.ws_ypixel / TTYSIZE_ROWS(ts));
- TTYSIZE_ROWS(ts) = rows;
- TTYSIZE_COLS(ts) = cols;
- SET_TTYSIZE(tty, ts);
- }
-#endif /* USE_STRUCT_{TTYSIZE|WINSIZE} */
-
-#ifdef USE_ANY_SYSV_TERMIO
- ioctl(tty, TCSETAW, &tioorig);
-#elif defined(USE_TERMIOS)
- tcsetattr(tty, TCSADRAIN, &tioorig);
-#else /* not USE_TERMIOS */
- ioctl(tty, TIOCSETP, &sgorig);
-#endif /* USE_ANY_SYSV_TERMIO/USE_TERMIOS */
- signal(SIGINT, SIG_DFL);
- signal(SIGQUIT, SIG_DFL);
- signal(SIGTERM, SIG_DFL);
-
-#ifdef USE_TERMCAP
- if (ok_tcap) {
- /* update termcap string */
- /* first do columns */
- if ((ptr = x_strindex(termcap, "co#")) == NULL) {
- fprintf(stderr, "%s: No `co#'\n", myname);
- exit(1);
- }
-
- i = ptr - termcap + 3;
- strncpy(newtc, termcap, (unsigned) i);
- sprintf(newtc + i, "%d", cols);
- ptr = strchr(ptr, ':');
- strcat(newtc, ptr);
-
- /* now do lines */
- if ((ptr = x_strindex(newtc, "li#")) == NULL) {
- fprintf(stderr, "%s: No `li#'\n", myname);
- exit(1);
- }
-
- i = ptr - newtc + 3;
- strncpy(termcap, newtc, (unsigned) i);
- sprintf(termcap + i, "%d", rows);
- ptr = strchr(ptr, ':');
- strcat(termcap, ptr);
- }
-#endif /* USE_TERMCAP */
-
- if (SHELL_BOURNE == shell_type) {
-
-#ifdef USE_TERMCAP
- if (ok_tcap) {
- printf("%sTERMCAP=", setname);
- print_termcap(termcap);
- printf(";\nexport TERMCAP;\n");
- }
-#endif /* USE_TERMCAP */
-#ifdef USE_TERMINFO
- printf("%sCOLUMNS=%d;\nLINES=%d;\nexport COLUMNS LINES;\n",
- setname, cols, rows);
-#endif /* USE_TERMINFO */
-
- } else { /* not Bourne shell */
-
-#ifdef USE_TERMCAP
- if (ok_tcap) {
- printf("set noglob;\n%ssetenv TERMCAP ", setname);
- print_termcap(termcap);
- printf(";\nunset noglob;\n");
- }
-#endif /* USE_TERMCAP */
-#ifdef USE_TERMINFO
- printf("set noglob;\n%ssetenv COLUMNS '%d';\nsetenv LINES '%d';\nunset noglob;\n",
- setname, cols, rows);
-#endif /* USE_TERMINFO */
- }
- exit(0);
-}
-
-static int
-checkdigits(register char *str)
-{
- while (*str) {
- if (!isdigit(CharOf(*str)))
- return (0);
- str++;
- }
- return (1);
-}
-
-static void
-readstring(register FILE *fp, register char *buf, char *str)
-{
- register int last, c;
-#if !defined(USG) && !defined(__UNIXOS2__)
- /* What is the advantage of setitimer() over alarm()? */
- struct itimerval it;
-#endif
-
- signal(SIGALRM, resize_timeout);
-#if defined(USG) || defined(__UNIXOS2__)
- alarm(TIMEOUT);
-#else
- bzero((char *) &it, sizeof(struct itimerval));
- it.it_value.tv_sec = TIMEOUT;
- setitimer(ITIMER_REAL, &it, (struct itimerval *) NULL);
-#endif
- if ((c = getc(fp)) == 0233) { /* meta-escape, CSI */
- *buf++ = c = ESCAPE("")[0];
- *buf++ = '[';
- } else {
- *buf++ = c;
- }
- if (c != *str) {
- fprintf(stderr, "%s: unknown character, exiting.\r\n", myname);
- onintr(0);
- }
- last = str[strlen(str) - 1];
- while ((*buf++ = getc(fp)) != last) ;
-#if defined(USG) || defined(__UNIXOS2__)
- alarm(0);
-#else
- bzero((char *) &it, sizeof(struct itimerval));
- setitimer(ITIMER_REAL, &it, (struct itimerval *) NULL);
-#endif
- *buf = 0;
-}
-
-static void
-Usage(void)
-{
- fprintf(stderr, strcmp(myname, sunname) == 0 ?
- "Usage: %s [rows cols]\n" :
- "Usage: %s [-u] [-c] [-s [rows cols]]\n", myname);
- exit(1);
-}
-
-static SIGNAL_T
-resize_timeout(int sig)
-{
- fprintf(stderr, "\n%s: Time out occurred\r\n", myname);
- onintr(sig);
-}
-
-/* ARGSUSED */
-static SIGNAL_T
-onintr(int sig GCC_UNUSED)
-{
-#ifdef USE_ANY_SYSV_TERMIO
- ioctl(tty, TCSETAW, &tioorig);
-#elif defined(USE_TERMIOS)
- tcsetattr(tty, TCSADRAIN, &tioorig);
-#else /* not USE_TERMIOS */
- ioctl(tty, TIOCSETP, &sgorig);
-#endif /* USE_ANY_SYSV_TERMIO/USE_TERMIOS */
- exit(1);
-}
diff --git a/nx-X11/programs/xterm/resize.man b/nx-X11/programs/xterm/resize.man
deleted file mode 100644
index a1bdc0f45..000000000
--- a/nx-X11/programs/xterm/resize.man
+++ /dev/null
@@ -1,84 +0,0 @@
-.\" $Xorg: resize.man,v 1.3 2000/08/17 19:55:09 cpqbld Exp $
-.\"
-.\" updated by Thomas E. Dickey for XFree86, 1998-2002.
-.\"
-.\" $XFree86: xc/programs/xterm/resize.man,v 1.10 2002/08/17 19:52:27 dickey Exp $
-.TH RESIZE 1 __vendorversion__
-.SH NAME
-resize \- set TERMCAP and terminal settings to current xterm window size
-.SH SYNOPSIS
-.B resize
-[ \fB\-u\fP | \fB\-c\fP ] [ \fB\-s\fP [ \fIrow col\fP ] ]
-.SH DESCRIPTION
-.I Resize
-prints a shell command for setting the TERM and TERMCAP environment variables
-to indicate the current size of \fIxterm\fP window from which the command
-is run. For this output to take effect, \fIresize\fP must either be evaluated
-as part of the command line (usually done with a shell alias or function) or
-else redirected to a file which can then be read in. From the C shell (usually
-known as \fI/bin/csh\fP), the following alias could be defined in the
-user's \fI.cshrc\fP:
-.sp
-.nf
- % alias rs 'set noglob; eval \fC`\fPresize\fC`\fP'
-.fi
-.sp
-After resizing the window, the user would type:
-.sp
-.nf
- % rs
-.fi
-.sp
-Users of versions of the Bourne shell (usually known as \fI/bin/sh\fP) that
-don't have command
-functions will need to send the output to a temporary file and the read it back
-in with the ``.'' command:
-.sp
-.nf
- $ resize > /tmp/out
- $ .\0/tmp/out
-.fi
-.SH OPTIONS
-The following options may be used with \fIresize\fP:
-.TP 8
-.B \-u
-This option indicates that Bourne shell commands should be generated even if
-the user's current shell isn't \fI/bin/sh\fP.
-.TP 8
-.B \-c
-This option indicates that C shell commands should be generated even if the
-user's current shell isn't \fI/bin/csh\fP.
-.TP 8
-.B \-s \fR[\fIrows columns\fP]
-This option indicates that Sun console escape sequences will be used
-instead of the VT100-style \fIxterm\fP escape codes.
-If \fIrows\fP and
-\fIcolumns\fP are given, \fIresize\fP will ask the \fIxterm\fP to resize
-itself. However, the window manager may choose to disallow the change.
-.sp
-Note that the Sun console escape sequences are recognized
-by XFree86 \fIxterm\fP and
-by \fIdtterm\fP.
-The \fIresize\fP program may be installed as \fIsunsize\fP,
-which causes makes it assume the \fB\-s\fP option.
-.sp
-The \fIrows\fP and
-\fIcolumns\fP arguments must appear last; though they are normally
-associated with the \fB\-s\fP option, they are parsed separately.
-.SH FILES
-.TP 15
-/etc/termcap
-for the base termcap entry to modify.
-.TP 15
-~/.cshrc
-user's alias for the command.
-.SH "SEE ALSO"
-csh(1), tset(1), xterm(1)
-.SH AUTHORS
-Mark Vandevoorde (MIT-Athena), Edward Moy (Berkeley)
-.br
-Copyright (c) 1984, 1985 by X Consortium
-.br
-See
-.IR X (__miscmansuffix__)
-for a complete copyright notice.
diff --git a/nx-X11/programs/xterm/screen.c b/nx-X11/programs/xterm/screen.c
deleted file mode 100644
index 09712218f..000000000
--- a/nx-X11/programs/xterm/screen.c
+++ /dev/null
@@ -1,1853 +0,0 @@
-/* $XTermId: screen.c,v 1.184 2005/11/03 13:17:28 tom Exp $ */
-
-/*
- * $Xorg: screen.c,v 1.3 2000/08/17 19:55:09 cpqbld Exp $
- */
-
-/*
- * Copyright 1999-2004,2005 by Thomas E. Dickey
- *
- * All Rights Reserved
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sublicense, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- * IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY
- * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- * Except as contained in this notice, the name(s) of the above copyright
- * holders shall not be used in advertising or otherwise to promote the
- * sale, use or other dealings in this Software without prior written
- * authorization.
- *
- *
- * Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
- *
- * All Rights Reserved
- *
- * Permission to use, copy, modify, and distribute this software and its
- * documentation for any purpose and without fee is hereby granted,
- * provided that the above copyright notice appear in all copies and that
- * both that copyright notice and this permission notice appear in
- * supporting documentation, and that the name of Digital Equipment
- * Corporation not be used in advertising or publicity pertaining to
- * distribution of the software without specific, written prior permission.
- *
- *
- * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
- * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
- * DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
- * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
- * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
- * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- * SOFTWARE.
- */
-
-/* $XFree86: xc/programs/xterm/screen.c,v 3.73 2005/11/03 13:17:28 dickey Exp $ */
-
-/* screen.c */
-
-#include <stdio.h>
-#include <xterm.h>
-#include <error.h>
-#include <data.h>
-#include <xcharmouse.h>
-#include <xterm_io.h>
-
-#if OPT_WIDE_CHARS
-#include <fontutils.h>
-#include <menu.h>
-#endif
-
-#include <assert.h>
-#include <signal.h>
-
-#define getMinRow(screen) ((term->flags & ORIGIN) ? (screen)->top_marg : 0)
-#define getMaxRow(screen) ((term->flags & ORIGIN) ? (screen)->bot_marg : (screen)->max_row)
-#define getMinCol(screen) 0
-#define getMaxCol(screen) ((screen)->max_col)
-
-/*
- * Allocates memory for a 2-dimensional array of chars and returns a pointer
- * thereto. Each line is formed from a set of char arrays, with an index
- * (i.e., the ScrnBuf type). The first pointer in the index is reserved for
- * per-line flags, and does not point to data.
- *
- * After the per-line flags, we have a series of pointers to char arrays: The
- * first one is the actual character array, the second one is the attributes,
- * the third is the foreground and background colors, and the fourth denotes
- * the character set.
- *
- * We store it all as pointers, because of alignment considerations, together
- * with the intention of being able to change the total number of pointers per
- * row according to whether the user wants color or not.
- */
-ScrnBuf
-Allocate(int nrow, int ncol, Char ** addr)
-{
- ScrnBuf base;
- Char *tmp;
- int i, j, k;
- size_t entries = MAX_PTRS * nrow;
- size_t length = BUF_PTRS * nrow * ncol;
-
- if ((base = TypeCallocN(ScrnPtr, entries)) == 0)
- SysError(ERROR_SCALLOC);
-
- if ((tmp = TypeCallocN(Char, length)) == 0)
- SysError(ERROR_SCALLOC2);
-
- *addr = tmp;
- for (i = k = 0; i < nrow; i++) {
- base[k] = 0; /* per-line flags */
- k += BUF_HEAD;
- for (j = BUF_HEAD; j < MAX_PTRS; j++) {
- base[k++] = tmp;
- tmp += ncol;
- }
- }
-
- return (base);
-}
-
-/*
- * This is called when the screen is resized.
- * Returns the number of lines the text was moved down (neg for up).
- * (Return value only necessary with SouthWestGravity.)
- */
-static int
-Reallocate(ScrnBuf * sbuf,
- Char ** sbufaddr,
- int nrow,
- int ncol,
- int oldrow,
- int oldcol)
-{
- ScrnBuf base;
- Char *tmp;
- int i, j, k, minrows;
- size_t mincols;
- Char *oldbuf;
- int move_down = 0, move_up = 0;
- size_t entries = MAX_PTRS * nrow;
- size_t length = BUF_PTRS * nrow * ncol;
-
- if (sbuf == NULL || *sbuf == NULL) {
- return 0;
- }
-
- oldbuf = *sbufaddr;
-
- /*
- * Special case if oldcol == ncol - straight forward realloc and
- * update of the additional lines in sbuf
- *
- * FIXME: this is a good idea, but doesn't seem to be implemented.
- * -gildea
- */
-
- /*
- * realloc sbuf, the pointers to all the lines.
- * If the screen shrinks, remove lines off the top of the buffer
- * if resizeGravity resource says to do so.
- */
- if (nrow < oldrow
- && term->misc.resizeGravity == SouthWestGravity) {
- /* Remove lines off the top of the buffer if necessary. */
- move_up = (oldrow - nrow)
- - (term->screen.max_row - term->screen.cur_row);
- if (move_up < 0)
- move_up = 0;
- /* Overlapping memmove here! */
- memmove(*sbuf, *sbuf + (move_up * MAX_PTRS),
- MAX_PTRS * (oldrow - move_up) * sizeof((*sbuf)[0]));
- }
- *sbuf = TypeRealloc(ScrnPtr, entries, *sbuf);
- if (*sbuf == 0)
- SysError(ERROR_RESIZE);
- base = *sbuf;
-
- /*
- * create the new buffer space and copy old buffer contents there
- * line by line.
- */
- if ((tmp = TypeCallocN(Char, length)) == 0)
- SysError(ERROR_SREALLOC);
- *sbufaddr = tmp;
- minrows = (oldrow < nrow) ? oldrow : nrow;
- mincols = (oldcol < ncol) ? oldcol : ncol;
- if (nrow > oldrow
- && term->misc.resizeGravity == SouthWestGravity) {
- /* move data down to bottom of expanded screen */
- move_down = Min(nrow - oldrow, term->screen.savedlines);
- tmp += (ncol * move_down * BUF_PTRS);
- }
-
- for (i = k = 0; i < minrows; i++) {
- k += BUF_HEAD;
- for (j = BUF_HEAD; j < MAX_PTRS; j++) {
- memcpy(tmp, base[k++], mincols);
- tmp += ncol;
- }
- }
-
- /*
- * update the pointers in sbuf
- */
- for (i = k = 0, tmp = *sbufaddr; i < nrow; i++) {
- for (j = 0; j < BUF_HEAD; j++)
- base[k++] = 0;
- for (j = BUF_HEAD; j < MAX_PTRS; j++) {
- base[k++] = tmp;
- tmp += ncol;
- }
- }
-
- /* Now free the old buffer */
- free(oldbuf);
-
- return move_down ? move_down : -move_up; /* convert to rows */
-}
-
-#if OPT_WIDE_CHARS
-#if 0
-static void
-dump_screen(const char *tag,
- ScrnBuf sbuf,
- Char * sbufaddr,
- unsigned nrow,
- unsigned ncol)
-{
- unsigned y, x;
-
- TRACE(("DUMP %s, ptrs %d\n", tag, term->num_ptrs));
- TRACE((" sbuf %p\n", sbuf));
- TRACE((" sbufaddr %p\n", sbufaddr));
- TRACE((" nrow %d\n", nrow));
- TRACE((" ncol %d\n", ncol));
-
- for (y = 0; y < nrow; ++y) {
- ScrnPtr ptr = BUF_CHARS(sbuf, y);
- TRACE(("%3d:%p:", y, ptr));
- for (x = 0; x < ncol; ++x) {
- Char c = ptr[x];
- if (c == 0)
- c = '~';
- TRACE(("%c", c));
- }
- TRACE(("\n"));
- }
-}
-#else
-#define dump_screen(tag, sbuf, sbufaddr, nrow, ncol) /* nothing */
-#endif
-
-/*
- * This function reallocates memory if changing the number of Buf offsets.
- * The code is based on Reallocate().
- */
-static void
-ReallocateBufOffsets(ScrnBuf * sbuf,
- Char ** sbufaddr,
- unsigned nrow,
- unsigned ncol,
- size_t new_max_offsets)
-{
- unsigned i;
- int j, k;
- ScrnBuf base;
- Char *oldbuf, *tmp;
- size_t entries, length;
- /*
- * As there are 2 buffers (allbuf, altbuf), we cannot change num_ptrs in
- * this function. However MAX_PTRS and BUF_PTRS depend on num_ptrs so
- * change it now and restore the value when done.
- */
- int old_max_ptrs = MAX_PTRS;
-
- assert(nrow != 0);
- assert(ncol != 0);
- assert(new_max_offsets != 0);
-
- dump_screen("before", *sbuf, *sbufaddr, nrow, ncol);
-
- term->num_ptrs = new_max_offsets;
-
- entries = MAX_PTRS * nrow;
- length = BUF_PTRS * nrow * ncol;
- oldbuf = *sbufaddr;
-
- *sbuf = TypeRealloc(ScrnPtr, entries, *sbuf);
- if (*sbuf == 0)
- SysError(ERROR_RESIZE);
- base = *sbuf;
-
- if ((tmp = TypeCallocN(Char, length)) == 0)
- SysError(ERROR_SREALLOC);
- *sbufaddr = tmp;
-
- for (i = k = 0; i < nrow; i++) {
- k += BUF_HEAD;
- for (j = BUF_HEAD; j < old_max_ptrs; j++) {
- memcpy(tmp, base[k++], ncol);
- tmp += ncol;
- }
- tmp += ncol * (new_max_offsets - old_max_ptrs);
- }
-
- /*
- * update the pointers in sbuf
- */
- for (i = k = 0, tmp = *sbufaddr; i < nrow; i++) {
- for (j = 0; j < BUF_HEAD; j++)
- base[k++] = 0;
- for (j = BUF_HEAD; j < MAX_PTRS; j++) {
- base[k++] = tmp;
- tmp += ncol;
- }
- }
-
- /* Now free the old buffer and restore num_ptrs */
- free(oldbuf);
- dump_screen("after", *sbuf, *sbufaddr, nrow, ncol);
-
- term->num_ptrs = old_max_ptrs;
-}
-
-/*
- * This function dynamically adds support for wide-characters.
- */
-void
-ChangeToWide(TScreen * screen)
-{
- unsigned new_bufoffset = (OFF_COM2H + 1);
- int savelines = screen->scrollWidget ? screen->savelines : 0;
-
- if (screen->wide_chars)
- return;
-
- TRACE(("ChangeToWide\n"));
- if (xtermLoadWideFonts(term, True)) {
- if (savelines < 0)
- savelines = 0;
- ReallocateBufOffsets(&screen->allbuf, &screen->sbuf_address,
- (unsigned) (MaxRows(screen) + savelines),
- (unsigned) MaxCols(screen),
- new_bufoffset);
- if (screen->altbuf)
- ReallocateBufOffsets(&screen->altbuf, &screen->abuf_address,
- (unsigned) MaxRows(screen),
- (unsigned) MaxCols(screen),
- new_bufoffset);
- screen->wide_chars = True;
- term->num_ptrs = new_bufoffset;
- screen->visbuf = &screen->allbuf[MAX_PTRS * savelines];
- update_font_utf8_mode();
- SetVTFont(term, screen->menu_font_number, TRUE, NULL);
- }
- TRACE(("...ChangeToWide\n"));
-}
-#endif
-
-/*
- * Disown the selection and repaint the area that is highlighted so it is no
- * longer highlighted.
- */
-void
-ScrnDisownSelection(TScreen * screen)
-{
- if (ScrnHaveSelection(screen)) {
- DisownSelection(term);
- }
-}
-
-/*
- * Writes str into buf at screen's current row and column. Characters are set
- * to match flags.
- */
-void
-ScreenWrite(TScreen * screen,
- PAIRED_CHARS(Char * str, Char * str2),
- unsigned flags,
- unsigned cur_fg_bg,
- unsigned length)
-{
-#if OPT_ISO_COLORS
-#if OPT_EXT_COLORS
- Char *fbf = 0;
- Char *fbb = 0;
-#else
- Char *fb = 0;
-#endif
-#endif
-#if OPT_DEC_CHRSET
- Char *cb = 0;
-#endif
- Char *attrs;
- int avail = MaxCols(screen) - screen->cur_col;
- Char *chars;
- int wrappedbit;
-#if OPT_WIDE_CHARS
- Char starcol1, starcol2;
- Char *comb1l = 0, *comb1h = 0, *comb2l = 0, *comb2h = 0;
-#endif
- unsigned real_width = visual_width(PAIRED_CHARS(str, str2), length);
-
- if (avail <= 0)
- return;
- if (length > (unsigned) avail)
- length = avail;
- if (length == 0 || real_width == 0)
- return;
-
- chars = SCRN_BUF_CHARS(screen, screen->cur_row) + screen->cur_col;
- attrs = SCRN_BUF_ATTRS(screen, screen->cur_row) + screen->cur_col;
-
- if_OPT_WIDE_CHARS(screen, {
- comb1l = SCRN_BUF_COM1L(screen, screen->cur_row) + screen->cur_col;
- comb1h = SCRN_BUF_COM1H(screen, screen->cur_row) + screen->cur_col;
- comb2l = SCRN_BUF_COM2L(screen, screen->cur_row) + screen->cur_col;
- comb2h = SCRN_BUF_COM2H(screen, screen->cur_row) + screen->cur_col;
- });
-
- if_OPT_EXT_COLORS(screen, {
- fbf = SCRN_BUF_FGRND(screen, screen->cur_row) + screen->cur_col;
- fbb = SCRN_BUF_BGRND(screen, screen->cur_row) + screen->cur_col;
- });
- if_OPT_ISO_TRADITIONAL_COLORS(screen, {
- fb = SCRN_BUF_COLOR(screen, screen->cur_row) + screen->cur_col;
- });
- if_OPT_DEC_CHRSET({
- cb = SCRN_BUF_CSETS(screen, screen->cur_row) + screen->cur_col;
- });
-
- wrappedbit = ScrnTstWrapped(screen, screen->cur_row);
-
-#if OPT_WIDE_CHARS
- starcol1 = *chars;
- starcol2 = chars[length - 1];
-#endif
-
- /* write blanks if we're writing invisible text */
- if (flags & INVISIBLE) {
- memset(chars, ' ', length);
- } else {
- memcpy(chars, str, length); /* This can stand for the present. If it
- is wrong, we will scribble over it */
- }
-
-#if OPT_BLINK_TEXT
- if ((flags & BLINK) && !(screen->blink_as_bold)) {
- ScrnSetBlinked(screen, screen->cur_row);
- }
-#endif
-
-#define ERROR_1 0x20
-#define ERROR_2 0x00
- if_OPT_WIDE_CHARS(screen, {
-
- Char *char2;
-
- if (real_width != length) {
- Char *char1 = chars;
- char2 = SCRN_BUF_WIDEC(screen, screen->cur_row);
- char2 += screen->cur_col;
- if (screen->cur_col && starcol1 == HIDDEN_LO && *char2 == HIDDEN_HI
- && iswide(char1[-1] | (char2[-1] << 8))) {
- char1[-1] = ERROR_1;
- char2[-1] = ERROR_2;
- }
- /* if we are overwriting the right hand half of a
- wide character, make the other half vanish */
- while (length) {
- int ch = *str;
- if (str2)
- ch |= *str2 << 8;
-
- *char1 = *str;
- char1++;
- str++;
-
- if (str2) {
- *char2 = *str2;
- str2++;
- } else
- *char2 = 0;
- char2++;
- length--;
-
- if (iswide(ch)) {
- *char1 = HIDDEN_LO;
- *char2 = HIDDEN_HI;
- char1++;
- char2++;
- }
- }
-
- if (*char1 == HIDDEN_LO
- && *char2 == HIDDEN_HI
- && char1[-1] == HIDDEN_LO
- && char2[-1] == HIDDEN_HI) {
- *char1 = ERROR_1;
- *char2 = ERROR_2;
- }
- /* if we are overwriting the left hand half of a
- wide character, make the other half vanish */
- }
-
- else {
-
- if ((char2 = SCRN_BUF_WIDEC(screen, screen->cur_row)) != 0) {
- char2 += screen->cur_col;
- if (screen->cur_col && starcol1 == HIDDEN_LO && *char2 == HIDDEN_HI
- && iswide(chars[-1] | (char2[-1] << 8))) {
- chars[-1] = ERROR_1;
- char2[-1] = ERROR_2;
- }
- /* if we are overwriting the right hand half of a
- wide character, make the other half vanish */
- if (chars[length] == HIDDEN_LO && char2[length] == HIDDEN_HI &&
- iswide(starcol2 | (char2[length - 1] << 8))) {
- chars[length] = ERROR_1;
- char2[length] = ERROR_2;
- }
- /* if we are overwriting the left hand half of a
- wide character, make the other half vanish */
- if ((flags & INVISIBLE) || (str2 == 0))
- memset(char2, 0, length);
- else
- memcpy(char2, str2, length);
- }
- }
- });
-
- flags &= ATTRIBUTES;
- flags |= CHARDRAWN;
- memset(attrs, (Char) flags, real_width);
-
- if_OPT_WIDE_CHARS(screen, {
- memset(comb1l, 0, real_width);
- memset(comb2l, 0, real_width);
- memset(comb1h, 0, real_width);
- memset(comb2h, 0, real_width);
- });
- if_OPT_EXT_COLORS(screen, {
- memset(fbf, (Char) (cur_fg_bg >> 8), real_width);
- memset(fbb, (Char) (cur_fg_bg & 0xff), real_width);
- });
- if_OPT_ISO_TRADITIONAL_COLORS(screen, {
- memset(fb, cur_fg_bg, real_width);
- });
- if_OPT_DEC_CHRSET({
- memset(cb, curXtermChrSet(screen->cur_row), real_width);
- });
-
- if (wrappedbit)
- ScrnSetWrapped(screen, screen->cur_row);
- else
- ScrnClrWrapped(screen, screen->cur_row);
-
- if_OPT_WIDE_CHARS(screen, {
- screen->last_written_col = screen->cur_col + real_width - 1;
- screen->last_written_row = screen->cur_row;
- });
-
- if_OPT_XMC_GLITCH(screen, {
- Resolve_XMC(screen);
- });
-}
-
-/*
- * Saves pointers to the n lines beginning at sb + where, and clears the lines
- */
-static void
-ScrnClearLines(TScreen * screen, ScrnBuf sb, int where, unsigned n, unsigned size)
-{
- int i, j;
- size_t len = ScrnPointers(screen, n);
- int last = (n * MAX_PTRS);
-
- TRACE(("ScrnClearLines(where %d, n %d, size %d)\n", where, n, size));
-
- assert(n != 0);
- assert(size != 0);
-
- /* save n lines at where */
- memcpy((char *) screen->save_ptr,
- (char *) &sb[MAX_PTRS * where],
- len);
-
- /* clear contents of old rows */
- if (TERM_COLOR_FLAGS(term)) {
- int flags = TERM_COLOR_FLAGS(term);
- for (i = 0; i < last; i += MAX_PTRS) {
- for (j = 0; j < MAX_PTRS; j++) {
- if (j < BUF_HEAD)
- screen->save_ptr[i + j] = 0;
- else if (j == OFF_ATTRS)
- memset(screen->save_ptr[i + j], flags, size);
-#if OPT_ISO_COLORS
-#if OPT_EXT_COLORS
- else if (j == OFF_FGRND)
- memset(screen->save_ptr[i + j], term->sgr_foreground, size);
- else if (j == OFF_BGRND)
- memset(screen->save_ptr[i + j], term->cur_background, size);
-#else
- else if (j == OFF_COLOR)
- memset(screen->save_ptr[i + j], xtermColorPair(), size);
-#endif
-#endif
- else
- bzero(screen->save_ptr[i + j], size);
- }
- }
- } else {
- for (i = 0; i < last; i += MAX_PTRS) {
- for (j = 0; j < BUF_HEAD; j++)
- screen->save_ptr[i + j] = 0;
- for (j = BUF_HEAD; j < MAX_PTRS; j++)
- bzero(screen->save_ptr[i + j], size);
- }
- }
-}
-
-size_t
-ScrnPointers(TScreen * screen, size_t len)
-{
- len *= MAX_PTRS;
-
- if (len > screen->save_len) {
- if (screen->save_len)
- screen->save_ptr = TypeRealloc(ScrnPtr, len, screen->save_ptr);
- else
- screen->save_ptr = TypeMallocN(ScrnPtr, len);
- screen->save_len = len;
- if (screen->save_ptr == 0)
- SysError(ERROR_SAVE_PTR);
- }
- return len * sizeof(ScrnPtr);
-}
-
-/*
- * Inserts n blank lines at sb + where, treating last as a bottom margin.
- * size is the size of each entry in sb.
- */
-void
-ScrnInsertLine(TScreen * screen, ScrnBuf sb, int last, int where,
- unsigned n, unsigned size)
-{
- size_t len = ScrnPointers(screen, n);
-
- assert(where >= 0);
- assert(last >= (int) n);
- assert(last >= where);
-
- assert(n != 0);
- assert(size != 0);
- assert(MAX_PTRS > 0);
-
- /* save n lines at bottom */
- ScrnClearLines(screen, sb, (last -= n - 1), n, size);
-
- /*
- * WARNING, overlapping copy operation. Move down lines (pointers).
- *
- * +----|---------|--------+
- *
- * is copied in the array to:
- *
- * +--------|---------|----+
- */
- assert(last >= where);
- memmove((char *) &sb[MAX_PTRS * (where + n)],
- (char *) &sb[MAX_PTRS * where],
- MAX_PTRS * sizeof(char *) * (last - where));
-
- /* reuse storage for new lines at where */
- memcpy((char *) &sb[MAX_PTRS * where],
- (char *) screen->save_ptr,
- len);
-}
-
-/*
- * Deletes n lines at sb + where, treating last as a bottom margin.
- * size is the size of each entry in sb.
- */
-void
-ScrnDeleteLine(TScreen * screen, ScrnBuf sb, int last, int where,
- unsigned n, unsigned size)
-{
- assert(where >= 0);
- assert(last >= where + (int) n - 1);
-
- assert(n != 0);
- assert(size != 0);
- assert(MAX_PTRS > 0);
-
- ScrnClearLines(screen, sb, where, n, size);
-
- /* move up lines */
- memmove((char *) &sb[MAX_PTRS * where],
- (char *) &sb[MAX_PTRS * (where + n)],
- MAX_PTRS * sizeof(char *) * ((last -= n - 1) - where));
-
- /* reuse storage for new bottom lines */
- memcpy((char *) &sb[MAX_PTRS * last],
- (char *) screen->save_ptr,
- MAX_PTRS * sizeof(char *) * n);
-}
-
-/*
- * Inserts n blanks in screen at current row, col. Size is the size of each
- * row.
- */
-void
-ScrnInsertChar(TScreen * screen, unsigned n)
-{
- ScrnBuf sb = screen->visbuf;
- unsigned last = MaxCols(screen);
- int row = screen->cur_row;
- unsigned col = screen->cur_col;
- unsigned i;
- Char *ptr = BUF_CHARS(sb, row);
- Char *attrs = BUF_ATTRS(sb, row);
- int wrappedbit = ScrnTstWrapped(screen, row);
- int flags = CHARDRAWN | TERM_COLOR_FLAGS(term);
- size_t nbytes;
-
- if (last <= (col + n)) {
- if (last <= col)
- return;
- n = last - col;
- }
- nbytes = (last - (col + n));
-
- assert(screen->cur_col >= 0);
- assert(screen->cur_row >= 0);
- assert(n > 0);
- assert(last > n);
-
- ScrnClrWrapped(screen, row); /* make sure the bit isn't moved */
- for (i = last - 1; i >= col + n; i--) {
- unsigned j = i - n;
- assert(i >= n);
- ptr[i] = ptr[j];
- attrs[i] = attrs[j];
- }
-
- for (i = col; i < col + n; i++)
- ptr[i] = ' ';
- for (i = col; i < col + n; i++)
- attrs[i] = flags;
- if_OPT_EXT_COLORS(screen, {
- ptr = BUF_FGRND(sb, row);
- memmove(ptr + col + n, ptr + col, nbytes);
- memset(ptr + col, term->sgr_foreground, n);
- ptr = BUF_BGRND(sb, row);
- memmove(ptr + col + n, ptr + col, nbytes);
- memset(ptr + col, term->cur_background, n);
- });
- if_OPT_ISO_TRADITIONAL_COLORS(screen, {
- ptr = BUF_COLOR(sb, row);
- memmove(ptr + col + n, ptr + col, nbytes);
- memset(ptr + col, xtermColorPair(), n);
- });
- if_OPT_DEC_CHRSET({
- ptr = BUF_CSETS(sb, row);
- memmove(ptr + col + n, ptr + col, nbytes);
- memset(ptr + col, curXtermChrSet(row), n);
- });
- if_OPT_WIDE_CHARS(screen, {
- ptr = BUF_WIDEC(sb, row);
- memmove(ptr + col + n, ptr + col, nbytes);
- memset(ptr + col, 0, n);
-
- ptr = BUF_COM1L(sb, row);
- memmove(ptr + col + n, ptr + col, nbytes);
- memset(ptr + col, 0, n);
-
- ptr = BUF_COM1H(sb, row);
- memmove(ptr + col + n, ptr + col, nbytes);
- memset(ptr + col, 0, n);
-
- ptr = BUF_COM2L(sb, row);
- memmove(ptr + col + n, ptr + col, nbytes);
- memset(ptr + col, 0, n);
-
- ptr = BUF_COM2H(sb, row);
- memmove(ptr + col + n, ptr + col, nbytes);
- memset(ptr + col, 0, n);
- });
-
- if (wrappedbit)
- ScrnSetWrapped(screen, row);
- else
- ScrnClrWrapped(screen, row);
-}
-
-/*
- * Deletes n characters at current row, col.
- */
-void
-ScrnDeleteChar(TScreen * screen, unsigned n)
-{
- ScrnBuf sb = screen->visbuf;
- unsigned last = MaxCols(screen);
- unsigned row = screen->cur_row;
- unsigned col = screen->cur_col;
- Char *ptr = BUF_CHARS(sb, row);
- Char *attrs = BUF_ATTRS(sb, row);
- size_t nbytes;
-
- if (last <= (col + n)) {
- if (last <= col)
- return;
- n = last - col;
- }
- nbytes = (last - (col + n));
-
- assert(screen->cur_col >= 0);
- assert(screen->cur_row >= 0);
- assert(n > 0);
- assert(last > n);
-
- memmove(ptr + col, ptr + col + n, nbytes);
- memmove(attrs + col, attrs + col + n, nbytes);
- bzero(ptr + last - n, n);
- memset(attrs + last - n, (Char) (TERM_COLOR_FLAGS(term)), n);
-
- if_OPT_EXT_COLORS(screen, {
- ptr = BUF_FGRND(sb, row);
- memmove(ptr + col, ptr + col + n, nbytes);
- memset(ptr + last - n, term->sgr_foreground, n);
- ptr = BUF_BGRND(sb, row);
- memmove(ptr + col, ptr + col + n, nbytes);
- memset(ptr + last - n, term->cur_background, n);
- });
- if_OPT_ISO_TRADITIONAL_COLORS(screen, {
- ptr = BUF_COLOR(sb, row);
- memmove(ptr + col, ptr + col + n, nbytes);
- memset(ptr + last - n, xtermColorPair(), n);
- });
- if_OPT_DEC_CHRSET({
- ptr = BUF_CSETS(sb, row);
- memmove(ptr + col, ptr + col + n, nbytes);
- memset(ptr + last - n, curXtermChrSet(row), n);
- });
- if_OPT_WIDE_CHARS(screen, {
- ptr = BUF_WIDEC(sb, row);
- memmove(ptr + col, ptr + col + n, nbytes);
- memset(ptr + last - n, 0, n);
-
- ptr = BUF_COM1L(sb, row);
- memmove(ptr + col, ptr + col + n, nbytes);
- memset(ptr + last - n, 0, n);
-
- ptr = BUF_COM1H(sb, row);
- memmove(ptr + col, ptr + col + n, nbytes);
- memset(ptr + last - n, 0, n);
-
- ptr = BUF_COM2L(sb, row);
- memmove(ptr + col, ptr + col + n, nbytes);
- memset(ptr + last - n, 0, n);
-
- ptr = BUF_COM2H(sb, row);
- memmove(ptr + col, ptr + col + n, nbytes);
- memset(ptr + last - n, 0, n);
- });
- ScrnClrWrapped(screen, row);
-}
-
-/*
- * Repaints the area enclosed by the parameters.
- * Requires: (toprow, leftcol), (toprow + nrows, leftcol + ncols) are
- * coordinates of characters in screen;
- * nrows and ncols positive.
- * all dimensions are based on single-characters.
- */
-void
-ScrnRefresh(TScreen * screen,
- int toprow,
- int leftcol,
- int nrows,
- int ncols,
- Bool force) /* ... leading/trailing spaces */
-{
- int y = toprow * FontHeight(screen) + screen->border;
- int row;
- int topline = screen->topline;
- int maxrow = toprow + nrows - 1;
- int scrollamt = screen->scroll_amt;
- int max = screen->max_row;
- int gc_changes = 0;
-#ifdef __CYGWIN__
- static char first_time = 1;
-#endif
- static int recurse = 0;
-
- TRACE(("ScrnRefresh (%d,%d) - (%d,%d)%s\n",
- toprow, leftcol,
- nrows, ncols,
- force ? " force" : ""));
-
- if (screen->cursor_col >= leftcol
- && screen->cursor_col <= (leftcol + ncols - 1)
- && screen->cursor_row >= toprow + topline
- && screen->cursor_row <= maxrow + topline)
- screen->cursor_state = OFF;
-
- for (row = toprow; row <= maxrow; y += FontHeight(screen), row++) {
-#if OPT_ISO_COLORS
-#if OPT_EXT_COLORS
- Char *fbf = 0;
- Char *fbb = 0;
-#define ColorOf(col) (unsigned) ((fbf[col] << 8) | fbb[col])
-#else
- Char *fb = 0;
-#define ColorOf(col) (unsigned) (fb[col])
-#endif
-#endif
-#if OPT_DEC_CHRSET
- Char *cb = 0;
-#endif
-#if OPT_WIDE_CHARS
- int wideness = 0;
- Char *widec = 0;
-#define WIDEC_PTR(cell) widec ? &widec[cell] : 0
-#define BLANK_CEL(cell) ((chars[cell] == ' ') && (widec == 0 || widec[cell] == 0))
-#else
-#define BLANK_CEL(cell) (chars[cell] == ' ')
-#endif
- Char cs = 0;
- Char *chars;
- Char *attrs;
- int col = leftcol;
- int maxcol = leftcol + ncols - 1;
- int hi_col = maxcol;
- int lastind;
- unsigned flags;
- unsigned test;
- unsigned fg_bg = 0, fg = 0, bg = 0;
- int x;
- GC gc;
- Bool hilite;
-
- if (row < screen->top_marg || row > screen->bot_marg)
- lastind = row;
- else
- lastind = row - scrollamt;
-
- TRACE(("ScrnRefresh row=%d lastind=%d/%d\n", row, lastind, max));
- if (lastind < 0 || lastind > max)
- continue;
-
- chars = SCRN_BUF_CHARS(screen, lastind + topline);
- attrs = SCRN_BUF_ATTRS(screen, lastind + topline);
-
- if_OPT_DEC_CHRSET({
- cb = SCRN_BUF_CSETS(screen, lastind + topline);
- });
-
- if_OPT_WIDE_CHARS(screen, {
- widec = SCRN_BUF_WIDEC(screen, lastind + topline);
- });
-
- if_OPT_WIDE_CHARS(screen, {
- /* This fixes an infinite recursion bug, that leads
- to display anomalies. It seems to be related to
- problems with the selection. */
- if (recurse < 3) {
- /* adjust to redraw all of a widechar if we just wanted
- to draw the right hand half */
- if (leftcol > 0 &&
- (chars[leftcol] | (widec[leftcol] << 8)) == HIDDEN_CHAR &&
- iswide(chars[leftcol - 1] | (widec[leftcol - 1] << 8))) {
- leftcol--;
- ncols++;
- col = leftcol;
- }
- } else {
- fprintf(stderr, "This should not happen. Why is it so?\n");
- }
- });
-
- if (row < screen->startHRow || row > screen->endHRow ||
- (row == screen->startHRow && maxcol < screen->startHCol) ||
- (row == screen->endHRow && col >= screen->endHCol)) {
-#if OPT_DEC_CHRSET
- /*
- * Temporarily change dimensions to double-sized characters so
- * we can reuse the recursion on this function.
- */
- if (CSET_DOUBLE(*cb)) {
- col /= 2;
- maxcol /= 2;
- }
-#endif
- /*
- * If row does not intersect selection; don't hilite blanks.
- */
- if (!force) {
- while (col <= maxcol && (attrs[col] & ~BOLD) == 0 &&
- BLANK_CEL(col))
- col++;
-
- while (col <= maxcol && (attrs[maxcol] & ~BOLD) == 0 &&
- BLANK_CEL(maxcol))
- maxcol--;
- }
-#if OPT_DEC_CHRSET
- if (CSET_DOUBLE(*cb)) {
- col *= 2;
- maxcol *= 2;
- }
-#endif
- hilite = False;
- } else {
- /* row intersects selection; split into pieces of single type */
- if (row == screen->startHRow && col < screen->startHCol) {
- recurse++;
- ScrnRefresh(screen, row, col, 1, screen->startHCol - col,
- force);
- col = screen->startHCol;
- }
- if (row == screen->endHRow && maxcol >= screen->endHCol) {
- recurse++;
- ScrnRefresh(screen, row, screen->endHCol, 1,
- maxcol - screen->endHCol + 1, force);
- maxcol = screen->endHCol - 1;
- }
-
- /*
- * If we're highlighting because the user is doing cut/paste,
- * trim the trailing blanks from the highlighted region so we're
- * showing the actual extent of the text that'll be cut. If
- * we're selecting a blank line, we'll highlight one column
- * anyway.
- *
- * We don't do this if the mouse-hilite mode is set because that
- * would be too confusing.
- *
- * The default if the highlightSelection resource isn't set will
- * highlight the whole width of the terminal, which is easy to
- * see, but harder to use (because trailing blanks aren't as
- * apparent).
- */
- if (screen->highlight_selection
- && screen->send_mouse_pos != VT200_HIGHLIGHT_MOUSE) {
- hi_col = screen->max_col;
- while (hi_col > 0 && !(attrs[hi_col] & CHARDRAWN))
- hi_col--;
- }
-
- /* remaining piece should be hilited */
- hilite = True;
- }
-
- if (col > maxcol)
- continue;
-
- /*
- * Go back to double-sized character dimensions if the line has
- * double-width characters. Note that 'hi_col' is already in the
- * right units.
- */
- if_OPT_DEC_CHRSET({
- if (CSET_DOUBLE(*cb)) {
- col /= 2;
- maxcol /= 2;
- }
- cs = cb[col];
- });
-
- flags = attrs[col];
-#if OPT_WIDE_CHARS
- if (widec)
- wideness = iswide(chars[col] | (widec[col] << 8));
- else
- wideness = 0;
-#endif
- if_OPT_EXT_COLORS(screen, {
- fbf = SCRN_BUF_FGRND(screen, lastind + topline);
- fbb = SCRN_BUF_BGRND(screen, lastind + topline);
- fg_bg = ColorOf(col);
- /* this combines them, then splits them again. but
- extract_fg does more, so seems reasonable */
- fg = extract_fg(fg_bg, flags);
- bg = extract_bg(fg_bg, flags);
- });
- if_OPT_ISO_TRADITIONAL_COLORS(screen, {
- fb = SCRN_BUF_COLOR(screen, lastind + topline);
- fg_bg = ColorOf(col);
- fg = extract_fg(fg_bg, flags);
- bg = extract_bg(fg_bg, flags);
- });
-
- gc = updatedXtermGC(screen, flags, fg_bg, hilite);
- gc_changes |= (flags & (FG_COLOR | BG_COLOR));
-
- x = CurCursorX(screen, row + topline, col);
- lastind = col;
-
- for (; col <= maxcol; col++) {
- if ((attrs[col] != flags)
- || (hilite && (col > hi_col))
-#if OPT_ISO_COLORS
- || ((flags & FG_COLOR)
- && (extract_fg(ColorOf(col), attrs[col]) != fg))
- || ((flags & BG_COLOR)
- && (extract_bg(ColorOf(col), attrs[col]) != bg))
-#endif
-#if OPT_WIDE_CHARS
- || (widec
- && ((iswide(chars[col] | (widec[col] << 8))) != wideness)
- && !((chars[col] | (widec[col] << 8)) == HIDDEN_CHAR))
-#endif
-#if OPT_DEC_CHRSET
- || (cb[col] != cs)
-#endif
- ) {
- assert(col >= lastind);
- TRACE(("ScrnRefresh looping drawXtermText %d..%d:%s\n",
- lastind, col,
- visibleChars(PAIRED_CHARS(&chars[lastind],
- WIDEC_PTR(lastind)),
- (unsigned) (col - lastind))));
-
- test = flags;
- checkVeryBoldColors(test, fg);
-
- x = drawXtermText(screen, test & DRAWX_MASK, gc, x, y,
- cs,
- PAIRED_CHARS(&chars[lastind], WIDEC_PTR(lastind)),
- (unsigned) (col - lastind), 0);
-
- if_OPT_WIDE_CHARS(screen, {
- int i;
- Char *comb1l = BUF_COM1L(screen->visbuf, row + topline);
- Char *comb2l = BUF_COM2L(screen->visbuf, row + topline);
- Char *comb1h = BUF_COM1H(screen->visbuf, row + topline);
- Char *comb2h = BUF_COM2H(screen->visbuf, row + topline);
- for (i = lastind; i < col; i++) {
- int my_x = CurCursorX(screen, row + topline, i);
- int base = chars[i] | (widec[i] << 8);
- int comb1 = comb1l[i] | (comb1h[i] << 8);
- int comb2 = comb2l[i] | (comb2h[i] << 8);
-
- if (iswide(base))
- my_x = CurCursorX(screen, row + topline, i - 1);
-
- if (comb1 != 0) {
- drawXtermText(screen, (test & DRAWX_MASK)
- | NOBACKGROUND, gc, my_x, y, cs,
- PAIRED_CHARS(comb1l + i, comb1h + i),
- 1, iswide(base));
- }
-
- if (comb2 != 0) {
- drawXtermText(screen, (test & DRAWX_MASK)
- | NOBACKGROUND, gc, my_x, y, cs,
- PAIRED_CHARS(comb2l + i, comb2h + i),
- 1, iswide(base));
- }
- }
- });
-
- resetXtermGC(screen, flags, hilite);
-
- lastind = col;
-
- if (hilite && (col > hi_col))
- hilite = False;
-
- flags = attrs[col];
- if_OPT_EXT_COLORS(screen, {
- fg_bg = ColorOf(col);
- fg = extract_fg(fg_bg, flags);
- bg = extract_bg(fg_bg, flags);
- });
- if_OPT_ISO_TRADITIONAL_COLORS(screen, {
- fg_bg = ColorOf(col);
- fg = extract_fg(fg_bg, flags);
- bg = extract_bg(fg_bg, flags);
- });
- if_OPT_DEC_CHRSET({
- cs = cb[col];
- });
-#if OPT_WIDE_CHARS
- if (widec)
- wideness = iswide(chars[col] | (widec[col] << 8));
-#endif
-
- gc = updatedXtermGC(screen, flags, fg_bg, hilite);
- gc_changes |= (flags & (FG_COLOR | BG_COLOR));
- }
-
- if (chars[col] == 0) {
-#if OPT_WIDE_CHARS
- if (widec == 0 || widec[col] == 0)
-#endif
- chars[col] = ' ';
- }
- }
-
- assert(col >= lastind);
- TRACE(("ScrnRefresh calling drawXtermText %d..%d:%s\n",
- lastind, col,
- visibleChars(PAIRED_CHARS(&chars[lastind], WIDEC_PTR(lastind)),
- (unsigned) (col - lastind))));
-
- test = flags;
- checkVeryBoldColors(test, fg);
-
- drawXtermText(screen, test & DRAWX_MASK, gc, x, y,
- cs,
- PAIRED_CHARS(&chars[lastind], WIDEC_PTR(lastind)),
- (unsigned) (col - lastind), 0);
-
- if_OPT_WIDE_CHARS(screen, {
- int i;
- Char *comb1l = BUF_COM1L(screen->visbuf, row + topline);
- Char *comb2l = BUF_COM2L(screen->visbuf, row + topline);
- Char *comb1h = BUF_COM1H(screen->visbuf, row + topline);
- Char *comb2h = BUF_COM2H(screen->visbuf, row + topline);
- for (i = lastind; i < col; i++) {
- int my_x = CurCursorX(screen, row + topline, i);
- int base = chars[i] | (widec[i] << 8);
- int comb1 = comb1l[i] | (comb1h[i] << 8);
- int comb2 = comb2l[i] | (comb2h[i] << 8);
-
- if (iswide(base))
- my_x = CurCursorX(screen, row + topline, i - 1);
-
- if (comb1 != 0) {
- drawXtermText(screen, (test & DRAWX_MASK) |
- NOBACKGROUND, gc, my_x, y, cs,
- PAIRED_CHARS(comb1l + i, comb1h + i),
- 1, iswide(base));
- }
-
- if (comb2 != 0) {
- drawXtermText(screen, (test & DRAWX_MASK) |
- NOBACKGROUND, gc, my_x, y, cs,
- PAIRED_CHARS(comb2l + i, comb2h + i),
- 1, iswide(base));
- }
- }
- });
-
- resetXtermGC(screen, flags, hilite);
- }
-
- /*
- * If we're in color mode, reset the various GC's to the current
- * screen foreground and background so that other functions (e.g.,
- * ClearRight) will get the correct colors.
- */
- if_OPT_ISO_COLORS(screen, {
- if (gc_changes & FG_COLOR)
- SGR_Foreground(term->cur_foreground);
- if (gc_changes & BG_COLOR)
- SGR_Background(term->cur_background);
- });
-
-#if defined(__CYGWIN__) && defined(TIOCSWINSZ)
- if (first_time == 1) {
- TTYSIZE_STRUCT ts;
-
- first_time = 0;
- TTYSIZE_ROWS(ts) = nrows;
- TTYSIZE_COLS(ts) = ncols;
- ts.ws_xpixel = term->core.width;
- ts.ws_ypixel = term->core.height;
- SET_TTYSIZE(screen->respond, ts);
- }
-#endif
- recurse--;
-}
-
-/*
- * Call this wrapper to ScrnRefresh() when the data has changed. If the
- * refresh region overlaps the selection, we will release the primary selection.
- */
-void
-ScrnUpdate(TScreen * screen,
- int toprow,
- int leftcol,
- int nrows,
- int ncols,
- Bool force) /* ... leading/trailing spaces */
-{
- if (ScrnHaveSelection(screen)
- && (toprow <= screen->endHRow)
- && (toprow + nrows - 1 >= screen->startHRow)) {
- ScrnDisownSelection(screen);
- }
- ScrnRefresh(screen, toprow, leftcol, nrows, ncols, force);
-}
-
-/*
- * Sets the rows first though last of the buffer of screen to spaces.
- * Requires first <= last; first, last are rows of screen->buf.
- */
-void
-ClearBufRows(TScreen * screen,
- int first,
- int last)
-{
- ScrnBuf buf = screen->visbuf;
- unsigned len = MaxCols(screen);
- int row;
- int flags = TERM_COLOR_FLAGS(term);
-
- TRACE(("ClearBufRows %d..%d\n", first, last));
- for (row = first; row <= last; row++) {
- ScrnClrWrapped(screen, row);
- bzero(BUF_CHARS(buf, row), len);
- memset(BUF_ATTRS(buf, row), flags, len);
- if_OPT_EXT_COLORS(screen, {
- memset(BUF_FGRND(buf, row), term->sgr_foreground, len);
- memset(BUF_BGRND(buf, row), term->cur_background, len);
- });
- if_OPT_ISO_TRADITIONAL_COLORS(screen, {
- memset(BUF_COLOR(buf, row), xtermColorPair(), len);
- });
- if_OPT_DEC_CHRSET({
- memset(BUF_CSETS(buf, row), 0, len);
- });
- if_OPT_WIDE_CHARS(screen, {
- memset(BUF_WIDEC(buf, row), 0, len);
- memset(BUF_COM1L(buf, row), 0, len);
- memset(BUF_COM1H(buf, row), 0, len);
- memset(BUF_COM2L(buf, row), 0, len);
- memset(BUF_COM2H(buf, row), 0, len);
- });
- }
-}
-
-/*
- Resizes screen:
- 1. If new window would have fractional characters, sets window size so as to
- discard fractional characters and returns -1.
- Minimum screen size is 1 X 1.
- Note that this causes another ExposeWindow event.
- 2. Enlarges screen->buf if necessary. New space is appended to the bottom
- and to the right
- 3. Reduces screen->buf if necessary. Old space is removed from the bottom
- and from the right
- 4. Cursor is positioned as closely to its former position as possible
- 5. Sets screen->max_row and screen->max_col to reflect new size
- 6. Maintains the inner border (and clears the border on the screen).
- 7. Clears origin mode and sets scrolling region to be entire screen.
- 8. Returns 0
- */
-int
-ScreenResize(TScreen * screen,
- int width,
- int height,
- unsigned *flags)
-{
- int code, rows, cols;
- int border = 2 * screen->border;
- int move_down_by;
-#ifdef TTYSIZE_STRUCT
- TTYSIZE_STRUCT ts;
-#endif
- Window tw = VWindow(screen);
-
- TRACE(("ScreenResize %dx%d border %d font %dx%d\n",
- height, width, border,
- FontHeight(screen), FontWidth(screen)));
-
- assert(width > 0);
- assert(height > 0);
-
- /* clear the right and bottom internal border because of NorthWest
- gravity might have left junk on the right and bottom edges */
- if (width >= FullWidth(screen)) {
- XClearArea(screen->display, tw,
- FullWidth(screen), 0, /* right edge */
- 0, (unsigned) height, /* from top to bottom */
- False);
- }
- if (height >= FullHeight(screen)) {
- XClearArea(screen->display, tw,
- 0, FullHeight(screen), /* bottom */
- (unsigned) width, 0, /* all across the bottom */
- False);
- }
-
- TRACE(("..computing rows/cols: %.2f %.2f\n",
- (double) (height - border) / FontHeight(screen),
- (double) (width - border - ScrollbarWidth(screen)) / FontWidth(screen)));
-
- rows = (height - border) / FontHeight(screen);
- cols = (width - border - ScrollbarWidth(screen)) / FontWidth(screen);
- if (rows < 1)
- rows = 1;
- if (cols < 1)
- cols = 1;
-
- /* update buffers if the screen has changed size */
- if (MaxRows(screen) != rows || MaxCols(screen) != cols) {
- int savelines = (screen->scrollWidget
- ? screen->savelines
- : 0);
- int delta_rows = rows - MaxRows(screen);
-
- TRACE(("...ScreenResize chars %dx%d\n", rows, cols));
-
- if (screen->cursor_state)
- HideCursor();
- if (screen->alternate
- && term->misc.resizeGravity == SouthWestGravity)
- /* swap buffer pointers back to make all this hair work */
- SwitchBufPtrs(screen);
- if (screen->altbuf)
- (void) Reallocate(&screen->altbuf,
- &screen->abuf_address,
- rows,
- cols,
- MaxRows(screen),
- MaxCols(screen));
- move_down_by = Reallocate(&screen->allbuf,
- &screen->sbuf_address,
- rows + savelines, cols,
- MaxRows(screen) + savelines,
- MaxCols(screen));
- screen->visbuf = &screen->allbuf[MAX_PTRS * savelines];
-
- set_max_row(screen, screen->max_row + delta_rows);
- set_max_col(screen, cols - 1);
-
- if (term->misc.resizeGravity == SouthWestGravity) {
- screen->savedlines -= move_down_by;
- if (screen->savedlines < 0)
- screen->savedlines = 0;
- if (screen->savedlines > screen->savelines)
- screen->savedlines = screen->savelines;
- if (screen->topline < -screen->savedlines)
- screen->topline = -screen->savedlines;
- set_cur_row(screen, screen->cur_row + move_down_by);
- screen->cursor_row += move_down_by;
- ScrollSelection(screen, move_down_by, True);
-
- if (screen->alternate)
- SwitchBufPtrs(screen); /* put the pointers back */
- }
-
- /* adjust scrolling region */
- set_tb_margins(screen, 0, screen->max_row);
- *flags &= ~ORIGIN;
-
- if (screen->cur_row > screen->max_row)
- set_cur_row(screen, screen->max_row);
- if (screen->cur_col > screen->max_col)
- set_cur_col(screen, screen->max_col);
-
- screen->fullVwin.height = height - border;
- screen->fullVwin.width = width - border - screen->fullVwin.sb_info.width;
-
- } else if (FullHeight(screen) == height && FullWidth(screen) == width)
- return (0); /* nothing has changed at all */
-
- screen->fullVwin.fullheight = height;
- screen->fullVwin.fullwidth = width;
-
- if (screen->scrollWidget)
- ResizeScrollBar(term);
-
- ResizeSelection(screen, rows, cols);
-
-#ifndef NO_ACTIVE_ICON
- if (screen->iconVwin.window) {
- XWindowChanges changes;
- screen->iconVwin.width =
- MaxCols(screen) * screen->iconVwin.f_width;
-
- screen->iconVwin.height =
- MaxRows(screen) * screen->iconVwin.f_height;
-
- changes.width = screen->iconVwin.fullwidth =
- screen->iconVwin.width + 2 * term->misc.icon_border_width;
- changes.height = screen->iconVwin.fullheight =
- screen->iconVwin.height + 2 * term->misc.icon_border_width;
- changes.border_width = term->misc.icon_border_width;
-
- TRACE(("resizing icon window %dx%d\n", changes.height, changes.width));
- XConfigureWindow(XtDisplay(term), screen->iconVwin.window,
- CWWidth | CWHeight | CWBorderWidth, &changes);
- }
-#endif /* NO_ACTIVE_ICON */
-
-#ifdef TTYSIZE_STRUCT
- /* Set tty's idea of window size */
- TTYSIZE_ROWS(ts) = rows;
- TTYSIZE_COLS(ts) = cols;
-#ifdef USE_STRUCT_WINSIZE
- ts.ws_xpixel = width;
- ts.ws_ypixel = height;
-#endif
- code = SET_TTYSIZE(screen->respond, ts);
- TRACE(("return %d from SET_TTYSIZE %dx%d\n", code, rows, cols));
- (void) code;
-
-#if defined(SIGWINCH) && defined(USE_STRUCT_TTYSIZE)
- if (screen->pid > 1) {
- int pgrp;
-
- TRACE(("getting process-group\n"));
- if (ioctl(screen->respond, TIOCGPGRP, &pgrp) != -1) {
- TRACE(("sending SIGWINCH to process group %d\n", pgrp));
- kill_process_group(pgrp, SIGWINCH);
- }
- }
-#endif /* SIGWINCH */
-
-#else
- TRACE(("ScreenResize cannot do anything to pty\n"));
-#endif /* TTYSIZE_STRUCT */
- return (0);
-}
-
-/*
- * Return true if any character cell starting at [row,col], for len-cells is
- * nonnull.
- */
-Bool
-non_blank_line(ScrnBuf sb,
- int row,
- int col,
- int len)
-{
- int i;
- Char *ptr = BUF_CHARS(sb, row);
-
- for (i = col; i < len; i++) {
- if (ptr[i])
- return True;
- }
-
- if_OPT_WIDE_CHARS((&(term->screen)), {
- if ((ptr = BUF_WIDEC(sb, row)) != 0) {
- for (i = col; i < len; i++) {
- if (ptr[i])
- return True;
- }
- }
- });
-
- return False;
-}
-
-/*
- * Copy the rectangle boundaries into a struct, providing default values as
- * needed.
- */
-void
-xtermParseRect(TScreen * screen, int nparams, int *params, XTermRect * target)
-{
- memset(target, 0, sizeof(*target));
- target->top = (nparams > 0) ? params[0] : getMinRow(screen) + 1;
- target->left = (nparams > 1) ? params[1] : getMinCol(screen) + 1;
- target->bottom = (nparams > 2) ? params[2] : getMaxRow(screen) + 1;
- target->right = (nparams > 3) ? params[3] : getMaxCol(screen) + 1;
- TRACE(("parsed rectangle %d,%d %d,%d\n",
- target->top,
- target->left,
- target->bottom,
- target->right));
-}
-
-static Bool
-validRect(TScreen * screen, XTermRect * target)
-{
- TRACE(("comparing against screensize %dx%d\n",
- getMaxRow(screen) + 1,
- getMaxCol(screen) + 1));
- return (target != 0
- && target->top > getMinRow(screen)
- && target->left > getMinCol(screen)
- && target->top <= target->bottom
- && target->left <= target->right
- && target->top <= getMaxRow(screen) + 1
- && target->right <= getMaxCol(screen) + 1);
-}
-
-/*
- * Fills a rectangle with the given character and video-attributes.
- */
-void
-ScrnFillRectangle(TScreen * screen, XTermRect * target, int value, unsigned flags)
-{
- TRACE(("filling rectangle with '%c'\n", value));
- if (validRect(screen, target)) {
- unsigned left = target->left - 1;
- unsigned size = target->right - left;
- Char attrs = flags;
- int row;
-
- attrs &= ATTRIBUTES;
- attrs |= CHARDRAWN;
- for (row = target->bottom - 1; row >= (target->top - 1); row--) {
- TRACE(("filling %d [%d..%d]\n", row, left + 1, left + size));
- memset(SCRN_BUF_ATTRS(screen, row) + left, attrs, size);
- memset(SCRN_BUF_CHARS(screen, row) + left, (Char) value, size);
- if_OPT_WIDE_CHARS(screen, {
- bzero(SCRN_BUF_WIDEC(screen, row) + left, size);
- });
- }
- ScrnUpdate(screen,
- target->top - 1,
- target->left - 1,
- (target->bottom - target->top) + 1,
- (target->right - target->left) + 1,
- False);
- }
-}
-
-#if OPT_DEC_RECTOPS
-/*
- * Copies the source rectangle to the target location, including video
- * attributes.
- *
- * This implementation ignores page numbers.
- *
- * The reference manual does not indicate if it handles overlapping copy
- * properly - so we make a local copy of the source rectangle first, then apply
- * the target from that.
- */
-void
-ScrnCopyRectangle(TScreen * screen, XTermRect * source, int nparam, int *params)
-{
- TRACE(("copying rectangle\n"));
-
- if (validRect(screen, source)) {
- XTermRect target;
- xtermParseRect(screen,
- ((nparam > 3) ? 2 : (nparam - 1)),
- params + 1,
- &target);
- if (validRect(screen, &target)) {
- unsigned high = (source->bottom - source->top) + 1;
- unsigned wide = (source->right - source->left) + 1;
- unsigned size = (high * wide);
- int row, col, n;
-
- Char *attrs = TypeMallocN(Char, size);
- Char *chars = TypeMallocN(Char, size);
-
-#if OPT_WIDE_CHARS
- Char *widec = TypeMallocN(Char, size);
- if (widec == 0)
- return;
-#endif
- if (attrs == 0
- || chars == 0)
- return;
-
- TRACE(("OK - make copy %dx%d\n", high, wide));
- target.bottom = target.top + (high - 1);
- target.right = target.left + (wide - 1);
-
- for (row = source->top - 1; row < source->bottom; ++row) {
- for (col = source->left - 1; col < source->right; ++col) {
- n = ((1 + row - source->top) * wide) + (1 + col - source->left);
- attrs[n] = SCRN_BUF_ATTRS(screen, row)[col] | CHARDRAWN;
- chars[n] = SCRN_BUF_CHARS(screen, row)[col];
- if_OPT_WIDE_CHARS(screen, {
- widec[n] = SCRN_BUF_WIDEC(screen, row)[col];
- })
- }
- }
- for (row = target.top - 1; row < target.bottom; ++row) {
- for (col = target.left - 1; col < target.right; ++col) {
- if (row >= getMinRow(screen)
- && row <= getMaxRow(screen)
- && col >= getMinCol(screen)
- && col <= getMaxCol(screen)) {
- n = ((1 + row - target.top) * wide) + (1 + col - target.left);
- SCRN_BUF_ATTRS(screen, row)[col] = attrs[n];
- SCRN_BUF_CHARS(screen, row)[col] = chars[n];
- if_OPT_WIDE_CHARS(screen, {
- SCRN_BUF_WIDEC(screen, row)[col] = widec[n];
- })
- }
- }
- }
- free(attrs);
- free(chars);
-#if OPT_WIDE_CHARS
- free(widec);
-#endif
-
- ScrnUpdate(screen,
- (target.top - 1),
- (target.left - 1),
- (target.bottom - target.top) + 1,
- ((target.right - target.left) + 1),
- False);
- }
- }
-}
-
-/*
- * Modifies the video-attributes only - so selection is unaffected.
- */
-void
-ScrnMarkRectangle(TScreen * screen,
- XTermRect * target,
- Bool reverse,
- int nparam,
- int *params)
-{
- Bool exact = (screen->cur_decsace == 2);
-
- TRACE(("%s %s\n",
- reverse ? "reversing" : "marking",
- (exact
- ? "rectangle"
- : "region")));
-
- if (validRect(screen, target)) {
- int top = target->top - 1;
- int bottom = target->bottom - 1;
- int row, col;
- int n;
-
- for (row = top; row <= bottom; ++row) {
- int left = ((exact || (row == top))
- ? (target->left - 1)
- : getMinCol(screen));
- int right = ((exact || (row == bottom))
- ? (target->right - 1)
- : getMaxCol(screen));
-
- TRACE(("marking %d [%d..%d]\n", row, left + 1, right + 1));
- for (col = left; col <= right; ++col) {
- unsigned flags = SCRN_BUF_ATTRS(screen, row)[col];
-
- for (n = 0; n < nparam; ++n) {
-#if OPT_TRACE
- if (row == top && col == left)
- TRACE(("attr param[%d] %d\n", n + 1, params[n]));
-#endif
- if (reverse) {
- switch (params[n]) {
- case 1:
- flags ^= BOLD;
- break;
- case 4:
- flags ^= UNDERLINE;
- break;
- case 5:
- flags ^= BLINK;
- break;
- case 7:
- flags ^= INVERSE;
- break;
- }
- } else {
- switch (params[n]) {
- case 0:
- flags &= ~SGR_MASK;
- break;
- case 1:
- flags |= BOLD;
- break;
- case 4:
- flags |= UNDERLINE;
- break;
- case 5:
- flags |= BLINK;
- break;
- case 7:
- flags |= INVERSE;
- break;
- case 22:
- flags &= ~BOLD;
- break;
- case 24:
- flags &= ~UNDERLINE;
- break;
- case 25:
- flags &= ~BLINK;
- break;
- case 27:
- flags &= ~INVERSE;
- break;
- }
- }
- }
-#if OPT_TRACE
- if (row == top && col == left)
- TRACE(("first mask-change is %#x\n",
- SCRN_BUF_ATTRS(screen, row)[col] ^ flags));
-#endif
- SCRN_BUF_ATTRS(screen, row)[col] = flags;
- }
- }
- ScrnRefresh(screen,
- (target->top - 1),
- (exact ? (target->left - 1) : getMinCol(screen)),
- (target->bottom - target->top) + 1,
- (exact
- ? ((target->right - target->left) + 1)
- : (getMaxCol(screen) - getMinCol(screen) + 1)),
- False);
- }
-}
-
-/*
- * Resets characters to space, except where prohibited by DECSCA. Video
- * attributes are untouched.
- */
-void
-ScrnWipeRectangle(TScreen * screen,
- XTermRect * target)
-{
- TRACE(("wiping rectangle\n"));
-
- if (validRect(screen, target)) {
- int top = target->top - 1;
- int bottom = target->bottom - 1;
- int row, col;
-
- for (row = top; row <= bottom; ++row) {
- int left = (target->left - 1);
- int right = (target->right - 1);
-
- TRACE(("wiping %d [%d..%d]\n", row, left + 1, right + 1));
- for (col = left; col <= right; ++col) {
- if (!((screen->protected_mode == DEC_PROTECT)
- && (SCRN_BUF_ATTRS(screen, row)[col] & PROTECTED))) {
- SCRN_BUF_ATTRS(screen, row)[col] |= CHARDRAWN;
- SCRN_BUF_CHARS(screen, row)[col] = ' ';
- if_OPT_WIDE_CHARS(screen, {
- SCRN_BUF_WIDEC(screen, row)[col] = '\0';
- })
- }
- }
- }
- ScrnUpdate(screen,
- (target->top - 1),
- (target->left - 1),
- (target->bottom - target->top) + 1,
- ((target->right - target->left) + 1),
- False);
- }
-}
-#endif /* OPT_DEC_RECTOPS */
diff --git a/nx-X11/programs/xterm/scrollbar.c b/nx-X11/programs/xterm/scrollbar.c
deleted file mode 100644
index 6dccf6e56..000000000
--- a/nx-X11/programs/xterm/scrollbar.c
+++ /dev/null
@@ -1,682 +0,0 @@
-/* $XTermId: scrollbar.c,v 1.116 2005/11/03 13:17:28 tom Exp $ */
-
-/*
- * $Xorg: scrollbar.c,v 1.4 2000/08/17 19:55:09 cpqbld Exp $
- */
-
-/* $XFree86: xc/programs/xterm/scrollbar.c,v 3.45 2005/11/03 13:17:28 dickey Exp $ */
-
-/*
- * Copyright 2000-2004,2005 by Thomas E. Dickey
- *
- * All Rights Reserved
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sublicense, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- * IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY
- * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- * Except as contained in this notice, the name(s) of the above copyright
- * holders shall not be used in advertising or otherwise to promote the
- * sale, use or other dealings in this Software without prior written
- * authorization.
- *
- *
- * Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
- *
- * All Rights Reserved
- *
- * Permission to use, copy, modify, and distribute this software and its
- * documentation for any purpose and without fee is hereby granted,
- * provided that the above copyright notice appear in all copies and that
- * both that copyright notice and this permission notice appear in
- * supporting documentation, and that the name of Digital Equipment
- * Corporation not be used in advertising or publicity pertaining to
- * distribution of the software without specific, written prior permission.
- *
- *
- * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
- * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
- * DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
- * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
- * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
- * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- * SOFTWARE.
- */
-
-#include <xterm.h>
-
-#include <X11/Xatom.h>
-
-#if defined(HAVE_LIB_XAW)
-#include <X11/Xaw/Scrollbar.h>
-#elif defined(HAVE_LIB_XAW3D)
-#include <X11/Xaw3d/Scrollbar.h>
-#elif defined(HAVE_LIB_NEXTAW)
-#include <X11/neXtaw/Scrollbar.h>
-#elif defined(HAVE_LIB_XAWPLUS)
-#include <X11/XawPlus/Scrollbar.h>
-#endif
-
-#include <data.h>
-#include <error.h>
-#include <menu.h>
-#include <xcharmouse.h>
-
-/*
- * The scrollbar's border overlaps the border of the vt100 window. If there
- * is no border for the vt100, there can be no border for the scrollbar.
- */
-#define SCROLLBAR_BORDER(xw) ((xw)->screen.scrollBarBorder)
-#if OPT_TOOLBAR
-#define ScrollBarBorder(xw) (BorderWidth(xw) ? SCROLLBAR_BORDER(xw) : 0)
-#else
-#define ScrollBarBorder(xw) SCROLLBAR_BORDER(xw)
-#endif
-
-/* Event handlers */
-
-static void ScrollTextTo PROTO_XT_CALLBACK_ARGS;
-static void ScrollTextUpDownBy PROTO_XT_CALLBACK_ARGS;
-
-/* Resize the text window for a terminal screen, modifying the
- * appropriate WM_SIZE_HINTS and taking advantage of bit gravity.
- */
-void
-DoResizeScreen(XtermWidget xw)
-{
- TScreen *screen = &xw->screen;
-
- int border = 2 * xw->screen.border;
- int min_wide = border + xw->screen.fullVwin.sb_info.width;
- int min_high = border;
-#if 1 /* ndef nothack */
- XSizeHints sizehints;
- long supp;
-#endif
- XtGeometryResult geomreqresult;
- Dimension reqWidth, reqHeight, repWidth, repHeight;
-#ifndef NO_ACTIVE_ICON
- struct _vtwin *saveWin = WhichVWin(screen);
-
- /* all units here want to be in the normal font units */
- WhichVWin(screen) = &screen->fullVwin;
-#endif /* NO_ACTIVE_ICON */
-
- /*
- * I'm going to try to explain, as I understand it, why we
- * have to do XGetWMNormalHints and XSetWMNormalHints here,
- * although I can't guarantee that I've got it right.
- *
- * In a correctly written toolkit program, the Shell widget
- * parses the user supplied geometry argument. However,
- * because of the way xterm does things, the VT100 widget does
- * the parsing of the geometry option, not the Shell widget.
- * The result of this is that the Shell widget doesn't set the
- * correct window manager hints, and doesn't know that the
- * user has specified a geometry.
- *
- * The XtVaSetValues call below tells the Shell widget to
- * change its hints. However, since it's confused about the
- * hints to begin with, it doesn't get them all right when it
- * does the SetValues -- it undoes some of what the VT100
- * widget did when it originally set the hints.
- *
- * To fix this, we do the following:
- *
- * 1. Get the sizehints directly from the window, going around
- * the (confused) shell widget.
- * 2. Call XtVaSetValues to let the shell widget know which
- * hints have changed. Note that this may not even be
- * necessary, since we're going to right ahead after that
- * and set the hints ourselves, but it's good to put it
- * here anyway, so that when we finally do fix the code so
- * that the Shell does the right thing with hints, we
- * already have the XtVaSetValues in place.
- * 3. We set the sizehints directly, this fixing up whatever
- * damage was done by the Shell widget during the
- * XtVaSetValues.
- *
- * Gross, huh?
- *
- * The correct fix is to redo VTRealize, VTInitialize and
- * VTSetValues so that font processing happens early enough to
- * give back responsibility for the size hints to the Shell.
- *
- * Someday, we hope to have time to do this. Someday, we hope
- * to have time to completely rewrite xterm.
- */
-
- TRACE(("DoResizeScreen\n"));
-
-#if 1 /* ndef nothack */
- /*
- * NOTE: the hints and the XtVaSetValues() must match.
- */
- TRACE(("%s@%d -- ", __FILE__, __LINE__));
- TRACE_WM_HINTS(xw);
- if (!XGetWMNormalHints(screen->display, XtWindow(SHELL_OF(xw)),
- &sizehints, &supp))
- bzero(&sizehints, sizeof(sizehints));
-
- xtermSizeHints(xw, &sizehints, ScrollbarWidth(screen));
-
- /* These are obsolete, but old clients may use them */
- sizehints.width = MaxCols(screen) * FontWidth(screen) + sizehints.min_width;
- sizehints.height = MaxRows(screen) * FontHeight(screen) + sizehints.min_height;
-#endif
-
- XSetWMNormalHints(screen->display, XtWindow(SHELL_OF(xw)), &sizehints);
-
- reqWidth = MaxCols(screen) * FontWidth(screen) + min_wide;
- reqHeight = MaxRows(screen) * FontHeight(screen) + min_high;
-
- TRACE(("...requesting screensize chars %dx%d, pixels %dx%d\n",
- MaxRows(screen),
- MaxCols(screen),
- reqHeight, reqWidth));
-
- geomreqresult = XtMakeResizeRequest((Widget) xw, reqWidth, reqHeight,
- &repWidth, &repHeight);
- TRACE(("scrollbar.c XtMakeResizeRequest %dx%d -> %dx%d (status %d)\n",
- reqHeight, reqWidth,
- repHeight, repWidth,
- geomreqresult));
-
- if (geomreqresult == XtGeometryAlmost) {
- TRACE(("...almost, retry screensize %dx%d\n", repHeight, repWidth));
- geomreqresult = XtMakeResizeRequest((Widget) xw, repWidth,
- repHeight, NULL, NULL);
- }
-#if 1 /* ndef nothack */
- /*
- * XtMakeResizeRequest() has the undesirable side-effect of clearing
- * the window manager's hints, even on a failed request. This would
- * presumably be fixed if the shell did its own work.
- */
- if (sizehints.flags
- && repHeight
- && repWidth) {
- sizehints.height = repHeight;
- sizehints.width = repWidth;
- TRACE_HINTS(&sizehints);
- XSetWMNormalHints(screen->display, VShellWindow, &sizehints);
- }
-#endif
- XSync(screen->display, FALSE); /* synchronize */
- if (XtAppPending(app_con))
- xevents();
-
-#ifndef NO_ACTIVE_ICON
- WhichVWin(screen) = saveWin;
-#endif /* NO_ACTIVE_ICON */
-}
-
-static Widget
-CreateScrollBar(XtermWidget xw, int x, int y, int height)
-{
- Widget result;
- Arg args[6];
-
- XtSetArg(args[0], XtNx, x);
- XtSetArg(args[1], XtNy, y);
- XtSetArg(args[2], XtNheight, height);
- XtSetArg(args[3], XtNreverseVideo, xw->misc.re_verse);
- XtSetArg(args[4], XtNorientation, XtorientVertical);
- XtSetArg(args[5], XtNborderWidth, ScrollBarBorder(xw));
-
- result = XtCreateWidget("scrollbar", scrollbarWidgetClass,
- (Widget) xw, args, XtNumber(args));
- XtAddCallback(result, XtNscrollProc, ScrollTextUpDownBy, 0);
- XtAddCallback(result, XtNjumpProc, ScrollTextTo, 0);
- return (result);
-}
-
-void
-ScrollBarReverseVideo(Widget scrollWidget)
-{
- SbInfo *sb = &(term->screen.fullVwin.sb_info);
- Arg args[4];
- Cardinal nargs = XtNumber(args);
-
- /*
- * Remember the scrollbar's original colors.
- */
- if (sb->rv_cached == False) {
- XtSetArg(args[0], XtNbackground, &(sb->bg));
- XtSetArg(args[1], XtNforeground, &(sb->fg));
- XtSetArg(args[2], XtNborderColor, &(sb->bdr));
- XtSetArg(args[3], XtNborderPixmap, &(sb->bdpix));
- XtGetValues(scrollWidget, args, nargs);
- sb->rv_cached = True;
- sb->rv_active = 0;
- }
-
- sb->rv_active = !(sb->rv_active);
- XtSetArg(args[!(sb->rv_active)], XtNbackground, sb->bg);
- XtSetArg(args[(sb->rv_active)], XtNforeground, sb->fg);
- nargs = 2; /* don't set border_pixmap */
- if (sb->bdpix == XtUnspecifiedPixmap) { /* if not pixmap then pixel */
- if (sb->rv_active) { /* keep border visible */
- XtSetArg(args[2], XtNborderColor, args[1].value);
- } else {
- XtSetArg(args[2], XtNborderColor, sb->bdr);
- }
- nargs = 3;
- }
- XtSetValues(scrollWidget, args, nargs);
-}
-
-void
-ScrollBarDrawThumb(Widget scrollWidget)
-{
- TScreen *screen = &term->screen;
- int thumbTop, thumbHeight, totalHeight;
-
- thumbTop = screen->topline + screen->savedlines;
- thumbHeight = MaxRows(screen);
- totalHeight = thumbHeight + screen->savedlines;
-
- XawScrollbarSetThumb(scrollWidget,
- ((float) thumbTop) / totalHeight,
- ((float) thumbHeight) / totalHeight);
-}
-
-void
-ResizeScrollBar(XtermWidget xw)
-{
- TScreen *screen = &(xw->screen);
-
- int height = screen->fullVwin.height + screen->border * 2;
- int width = screen->scrollWidget->core.width;
- int ypos = -ScrollBarBorder(xw);
-#ifdef SCROLLBAR_RIGHT
- int xpos = ((term->misc.useRight)
- ? (screen->fullVwin.fullwidth -
- screen->scrollWidget->core.width -
- BorderWidth(screen->scrollWidget))
- : -ScrollBarBorder(xw));
-#else
- int xpos = -ScrollBarBorder(xw);
-#endif
-
- TRACE(("ResizeScrollBar at %d,%d %dx%d\n", ypos, xpos, height, width));
-
- XtConfigureWidget(
- screen->scrollWidget,
- xpos,
- ypos,
- width,
- height,
- BorderWidth(screen->scrollWidget));
- ScrollBarDrawThumb(screen->scrollWidget);
-}
-
-void
-WindowScroll(TScreen * screen, int top)
-{
- int i, lines;
- int scrolltop, scrollheight, refreshtop;
-
- if (top < -screen->savedlines)
- top = -screen->savedlines;
- else if (top > 0)
- top = 0;
- if ((i = screen->topline - top) == 0) {
- ScrollBarDrawThumb(screen->scrollWidget);
- return;
- }
-
- if (screen->cursor_state)
- HideCursor();
- lines = i > 0 ? i : -i;
- if (lines > MaxRows(screen))
- lines = MaxRows(screen);
- scrollheight = screen->max_row - lines + 1;
- if (i > 0)
- refreshtop = scrolltop = 0;
- else {
- scrolltop = lines;
- refreshtop = scrollheight;
- }
- scrolling_copy_area(screen, scrolltop, scrollheight, -i);
- screen->topline = top;
-
- ScrollSelection(screen, i, True);
-
- XClearArea(
- screen->display,
- VWindow(screen),
- OriginX(screen),
- OriginY(screen) + refreshtop * FontHeight(screen),
- (unsigned) Width(screen),
- (unsigned) lines * FontHeight(screen),
- FALSE);
- ScrnRefresh(screen, refreshtop, 0, lines, MaxCols(screen), False);
-
- ScrollBarDrawThumb(screen->scrollWidget);
-}
-
-#ifdef SCROLLBAR_RIGHT
-/*
- * Adjust the scrollbar position if we're asked to turn on scrollbars for the
- * first time (or after resizing) after the xterm is already running. That
- * makes the window grow after we've initially configured the scrollbar's
- * position. (There must be a better way).
- */
-void
-updateRightScrollbar(XtermWidget xw)
-{
- TScreen *screen = &xw->screen;
-
- if (xw->misc.useRight
- && screen->fullVwin.fullwidth < xw->core.width)
- XtVaSetValues(screen->scrollWidget,
- XtNx, screen->fullVwin.fullwidth - BorderWidth(screen->scrollWidget),
- (XtPointer) 0);
-}
-
-#endif
-void
-ScrollBarOn(XtermWidget xw, int init, int doalloc)
-{
- TScreen *screen = &xw->screen;
- int i, j, k;
-
- if (screen->fullVwin.sb_info.width || IsIcon(screen))
- return;
-
- TRACE(("ScrollBarOn\n"));
- if (init) { /* then create it only */
- if (screen->scrollWidget == 0) {
- /* make it a dummy size and resize later */
- screen->scrollWidget = CreateScrollBar(xw,
- -ScrollBarBorder(xw),
- -ScrollBarBorder(xw),
- 5);
- if (screen->scrollWidget == NULL) {
- Bell(XkbBI_MinorError, 0);
- }
- }
- } else if (!screen->scrollWidget || !XtIsRealized((Widget) term)) {
- Bell(XkbBI_MinorError, 0);
- Bell(XkbBI_MinorError, 0);
- } else {
-
- if (doalloc && screen->allbuf) {
- /* FIXME: this is not integrated well with Allocate */
- if ((screen->allbuf =
- TypeRealloc(ScrnPtr,
- MAX_PTRS * (screen->max_row + 2 + screen->savelines),
- screen->visbuf)) == NULL) {
- SysError(ERROR_SBRALLOC);
- }
- screen->visbuf = &screen->allbuf[MAX_PTRS * screen->savelines];
- memmove((char *) screen->visbuf, (char *) screen->allbuf,
- MAX_PTRS * (screen->max_row + 2) * sizeof(char *));
- for (i = k = 0; i < screen->savelines; i++) {
- k += BUF_HEAD;
- for (j = BUF_HEAD; j < MAX_PTRS; j++) {
- if ((screen->allbuf[k++] =
- TypeCallocN(Char, (unsigned) MaxCols(screen))
- ) == NULL)
- SysError(ERROR_SBRALLOC2);
- }
- }
- }
-
- ResizeScrollBar(xw);
- xtermAddInput(screen->scrollWidget);
- XtRealizeWidget(screen->scrollWidget);
- TRACE_TRANS("scrollbar", screen->scrollWidget);
-
- screen->fullVwin.sb_info.rv_cached = False;
-
- screen->fullVwin.sb_info.width = (screen->scrollWidget->core.width
- + BorderWidth(screen->scrollWidget));
-
- TRACE(("setting scrollbar width %d = %d + %d\n",
- screen->fullVwin.sb_info.width,
- screen->scrollWidget->core.width,
- BorderWidth(screen->scrollWidget)));
-
- ScrollBarDrawThumb(screen->scrollWidget);
- DoResizeScreen(xw);
-
-#ifdef SCROLLBAR_RIGHT
- updateRightScrollbar(term);
-#endif
-
- XtMapWidget(screen->scrollWidget);
- update_scrollbar();
- if (screen->visbuf) {
- XClearWindow(screen->display, XtWindow(term));
- Redraw();
- }
- }
-}
-
-void
-ScrollBarOff(TScreen * screen)
-{
- if (!screen->fullVwin.sb_info.width || IsIcon(screen))
- return;
-
- TRACE(("ScrollBarOff\n"));
- if (XtIsRealized((Widget) term)) {
- XtUnmapWidget(screen->scrollWidget);
- screen->fullVwin.sb_info.width = 0;
- DoResizeScreen(term);
- update_scrollbar();
- if (screen->visbuf) {
- XClearWindow(screen->display, XtWindow(term));
- Redraw();
- }
- } else {
- Bell(XkbBI_MinorError, 0);
- }
-}
-
-/*
- * Toggle the visibility of the scrollbars.
- */
-void
-ToggleScrollBar(XtermWidget w)
-{
- TScreen *screen = &w->screen;
-
- if (IsIcon(screen)) {
- Bell(XkbBI_MinorError, 0);
- } else {
- TRACE(("ToggleScrollBar{{\n"));
- if (screen->fullVwin.sb_info.width) {
- ScrollBarOff(screen);
- } else {
- ScrollBarOn(w, FALSE, FALSE);
- }
- update_scrollbar();
- TRACE(("...ToggleScrollBar}}\n"));
- }
-}
-
-/*ARGSUSED*/
-static void
-ScrollTextTo(
- Widget scrollbarWidget GCC_UNUSED,
- XtPointer client_data GCC_UNUSED,
- XtPointer call_data)
-{
- float *topPercent = (float *) call_data;
- TScreen *screen = &term->screen;
- int thumbTop; /* relative to first saved line */
- int newTopLine;
-
- /*
- * screen->savedlines : Number of offscreen text lines,
- * MaxRows(screen) : Number of onscreen text lines,
- * screen->topline : -Number of lines above the last screen->max_row+1 lines
- */
-
- thumbTop = (int) (*topPercent * (screen->savedlines + MaxRows(screen)));
- newTopLine = thumbTop - screen->savedlines;
- WindowScroll(screen, newTopLine);
-}
-
-/*ARGSUSED*/
-static void
-ScrollTextUpDownBy(
- Widget scrollbarWidget GCC_UNUSED,
- XtPointer client_data GCC_UNUSED,
- XtPointer call_data)
-{
- long pixels = (long) call_data;
-
- TScreen *screen = &term->screen;
- int rowOnScreen, newTopLine;
-
- rowOnScreen = pixels / FontHeight(screen);
- if (rowOnScreen == 0) {
- if (pixels < 0)
- rowOnScreen = -1;
- else if (pixels > 0)
- rowOnScreen = 1;
- }
- newTopLine = screen->topline + rowOnScreen;
- WindowScroll(screen, newTopLine);
-}
-
-/*
- * assume that b is lower case and allow plural
- */
-static int
-specialcmplowerwiths(char *a, char *b, int *modifier)
-{
- char ca, cb;
-
- *modifier = 0;
- if (!a || !b)
- return 0;
-
- while (1) {
- ca = char2lower(*a);
- cb = *b;
- if (ca != cb || ca == '\0')
- break; /* if not eq else both nul */
- a++, b++;
- }
- if (cb != '\0')
- return 0;
-
- if (ca == 's')
- ca = *++a;
-
- switch (ca) {
- case '+':
- case '-':
- *modifier = (ca == '-' ? -1 : 1) * atoi(a + 1);
- return 1;
-
- case '\0':
- return 1;
-
- default:
- return 0;
- }
-}
-
-static long
-params_to_pixels(TScreen * screen, String * params, Cardinal n)
-{
- int mult = 1;
- char *s;
- int modifier;
-
- switch (n > 2 ? 2 : n) {
- case 2:
- s = params[1];
- if (specialcmplowerwiths(s, "page", &modifier)) {
- mult = (MaxRows(screen) + modifier) * FontHeight(screen);
- } else if (specialcmplowerwiths(s, "halfpage", &modifier)) {
- mult = ((MaxRows(screen) + modifier) * FontHeight(screen)) / 2;
- } else if (specialcmplowerwiths(s, "pixel", &modifier)) {
- mult = 1;
- } else {
- /* else assume that it is Line */
- mult = FontHeight(screen);
- }
- mult *= atoi(params[0]);
- break;
- case 1:
- mult = atoi(params[0]) * FontHeight(screen); /* lines */
- break;
- default:
- mult = screen->scrolllines * FontHeight(screen);
- break;
- }
- return mult;
-}
-
-static long
-AmountToScroll(Widget gw, String * params, Cardinal nparams)
-{
- if (gw != 0) {
- if (IsXtermWidget(gw)) {
- TScreen *screen = &((XtermWidget) gw)->screen;
- if (nparams > 2
- && screen->send_mouse_pos != MOUSE_OFF)
- return 0;
- return params_to_pixels(screen, params, nparams);
- } else {
- /*
- * This may have been the scrollbar widget. Try its parent, which
- * would be the VT100 widget.
- */
- return AmountToScroll(XtParent(gw), params, nparams);
- }
- }
- return 0;
-}
-
-/*ARGSUSED*/
-void
-HandleScrollForward(
- Widget gw,
- XEvent * event GCC_UNUSED,
- String * params,
- Cardinal *nparams)
-{
- long amount;
-
- if ((amount = AmountToScroll(gw, params, *nparams)) != 0) {
- ScrollTextUpDownBy(gw, (XtPointer) 0, (XtPointer) amount);
- }
-}
-
-/*ARGSUSED*/
-void
-HandleScrollBack(
- Widget gw,
- XEvent * event GCC_UNUSED,
- String * params,
- Cardinal *nparams)
-{
- long amount;
-
- if ((amount = -AmountToScroll(gw, params, *nparams)) != 0) {
- ScrollTextUpDownBy(gw, (XtPointer) 0, (XtPointer) amount);
- }
-}
diff --git a/nx-X11/programs/xterm/sinstall.sh b/nx-X11/programs/xterm/sinstall.sh
deleted file mode 100644
index 85bca69e3..000000000
--- a/nx-X11/programs/xterm/sinstall.sh
+++ /dev/null
@@ -1,156 +0,0 @@
-#!/bin/sh
-# $XTermId: sinstall.sh,v 1.13 2005/11/03 13:17:28 tom Exp $
-# $XFree86: xc/programs/xterm/sinstall.sh,v 1.4 2005/11/03 13:17:28 dickey Exp $
-#
-# Install program setuid if the installer is running as root, and if xterm is
-# already installed on the system with setuid privilege. This is a safeguard
-# for ordinary users installing xterm for themselves on systems where the
-# setuid is not needed to access a PTY, but only for things like utmp.
-#
-# Options:
-# u+s, g+s as in chmod
-# -u, -g and -m as in install. If any options are given, $3 is ignored.
-#
-# Parameters:
-# $1 = program to invoke as "install"
-# $2 = program to install
-# $3 = previously-installed program, for reference
-# $4 = final installed-path, if different from reference
-
-trace=:
-trace=echo
-
-OPTS_SUID=
-OPTS_SGID=
-OPTS_MODE=
-OPTS_USR=
-OPTS_GRP=
-
-while test $# != 0
-do
- case $1 in
- -*)
- OPT="$1"
- shift
- if test $# != 0
- then
- case $OPT in
- -u) OPTS_USR="$1"; shift;;
- -g) OPTS_GRP="$1"; shift;;
- -m) OPTS_MODE="$1"; shift;;
- esac
- else
- break
- fi
- ;;
- u+s) shift; OPTS_SUID=4000;;
- g+s) shift; OPTS_SGID=2000;;
- *) break
- ;;
- esac
-done
-
-SINSTALL="$1"
-SRC_PROG="$2"
-REF_PROG="$3"
-DST_PROG="$4"
-
-test -z "$SINSTALL" && SINSTALL=install
-test -z "$SRC_PROG" && SRC_PROG=xterm
-test -z "$REF_PROG" && REF_PROG=/usr/bin/X11/xterm
-test -z "$DST_PROG" && DST_PROG="$REF_PROG"
-
-test -n "$OPTS_SUID" && test -n "$OPTS_USR" && REF_PROG=
-test -n "$OPTS_SGID" && test -n "$OPTS_GRP" && REF_PROG=
-
-echo checking for presumed installation-mode
-
-PROG_SUID=
-PROG_SGID=
-PROG_MODE=
-PROG_USR=
-PROG_GRP=
-
-if test -z "$REF_PROG" ; then
- $trace "... reference program not used"
-elif test -f "$REF_PROG" ; then
- cf_option="-l -L"
- MYTEMP=${TMPDIR-/tmp}/sinstall$$
-
- # Expect listing to have fields like this:
- #-r--r--r-- 1 user group 34293 Jul 18 16:29 pathname
- ls $cf_option $REF_PROG >$MYTEMP
- read cf_mode cf_links cf_usr cf_grp cf_size cf_date1 cf_date2 cf_date3 cf_rest <$MYTEMP
- $trace "... if \"$cf_rest\" is null, try the ls -g option"
- if test -z "$cf_rest" ; then
- cf_option="$cf_option -g"
- ls $cf_option $REF_PROG >$MYTEMP
- read cf_mode cf_links cf_usr cf_grp cf_size cf_date1 cf_date2 cf_date3 cf_rest <$MYTEMP
- fi
- rm -f $MYTEMP
-
- # If we have a pathname, and the date fields look right, assume we've
- # captured the group as well.
- $trace "... if \"$cf_rest\" is null, we do not look for group"
- if test -n "$cf_rest" ; then
- cf_test=`echo "${cf_date2}${cf_date3}" | sed -e 's/[0-9:]//g'`
- $trace "... if we have date in proper columns ($cf_date1 $cf_date2 $cf_date3), \"$cf_test\" is null"
- if test -z "$cf_test" ; then
- PROG_USR=$cf_usr;
- PROG_GRP=$cf_grp;
- fi
- fi
- $trace "... derived user \"$PROG_USR\", group \"$PROG_GRP\" of previously-installed $SRC_PROG"
-
- $trace "... see if mode \"$cf_mode\" has s-bit set"
- case ".$cf_mode" in #(vi
- .???s??s*) #(vi
- PROG_SUID=4000
- PROG_SGID=2000
- ;;
- .???s*) #(vi
- PROG_SUID=4000
- PROG_GRP=
- ;;
- .??????s*)
- PROG_SGID=2000
- PROG_USR=
- ;;
- esac
- PROG_MODE=`echo ".$cf_mode" | sed -e 's/^..//' -e 's/rw./7/g' -e 's/r-./5/g' -e 's/--[sxt]/1/g'`
-fi
-
-# passed-in options override the reference
-test -n "$OPTS_SUID" && PROG_SUID="$OPTS_SUID"
-test -n "$OPTS_SGID" && PROG_SGID="$OPTS_SGID"
-test -n "$OPTS_MODE" && PROG_MODE="$OPTS_MODE"
-test -n "$OPTS_USR" && PROG_USR="$OPTS_USR"
-test -n "$OPTS_GRP" && PROG_GRP="$OPTS_GRP"
-
-# we always need a mode
-test -z "$PROG_MODE" && PROG_MODE=755
-
-if test -n "${PROG_USR}${PROG_GRP}" ; then
- cf_uid=`id | sed -e 's/^[^=]*=//' -e 's/(.*$//'`
- cf_usr=`id | sed -e 's/^[^(]*(//' -e 's/).*$//'`
- cf_grp=`id | sed -e 's/^.* gid=[^(]*(//' -e 's/).*$//'`
- $trace "... installing $SRC_PROG as user \"$cf_usr\", group \"$cf_grp\""
- if test "$cf_uid" != 0 ; then
- PROG_SUID=
- PROG_SGID=
- PROG_USR=""
- PROG_GRP=""
- fi
- test "$PROG_USR" = "$cf_usr" && PROG_USR=""
- test "$PROG_GRP" = "$cf_grp" && PROG_GRP=""
-fi
-
-test -n "${PROG_SUID}${PROG_SGID}" && PROG_MODE=`expr $PROG_MODE % 1000`
-test -n "$PROG_SUID" && PROG_MODE=`expr $PROG_SUID + $PROG_MODE`
-test -n "$PROG_SGID" && PROG_MODE=`expr $PROG_SGID + $PROG_MODE`
-
-test -n "$PROG_USR" && PROG_USR="-o $PROG_USR"
-test -n "$PROG_GRP" && PROG_GRP="-g $PROG_GRP"
-
-echo "$SINSTALL -m $PROG_MODE $PROG_USR $PROG_GRP $SRC_PROG $DST_PROG"
-eval "$SINSTALL -m $PROG_MODE $PROG_USR $PROG_GRP $SRC_PROG $DST_PROG"
diff --git a/nx-X11/programs/xterm/tabs.c b/nx-X11/programs/xterm/tabs.c
deleted file mode 100644
index cfe91a0c3..000000000
--- a/nx-X11/programs/xterm/tabs.c
+++ /dev/null
@@ -1,182 +0,0 @@
-/*
- * $XFree86: xc/programs/xterm/tabs.c,v 3.12 2005/04/22 00:21:54 dickey Exp $
- */
-
-/* $Xorg: tabs.c,v 1.3 2000/08/17 19:55:09 cpqbld Exp $ */
-
-/*
- * Copyright 2000-2002,2005 by Thomas E. Dickey
- *
- * All Rights Reserved
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sublicense, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- * IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY
- * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- * Except as contained in this notice, the name(s) of the above copyright
- * holders shall not be used in advertising or otherwise to promote the
- * sale, use or other dealings in this Software without prior written
- * authorization.
- *
- * Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
- *
- * All Rights Reserved
- *
- * Permission to use, copy, modify, and distribute this software and its
- * documentation for any purpose and without fee is hereby granted,
- * provided that the above copyright notice appear in all copies and that
- * both that copyright notice and this permission notice appear in
- * supporting documentation, and that the name of Digital Equipment
- * Corporation not be used in advertising or publicity pertaining to
- * distribution of the software without specific, written prior permission.
- *
- *
- * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
- * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
- * DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
- * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
- * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
- * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- * SOFTWARE.
- */
-
-/* tabs.c */
-
-#include <xterm.h>
-#include <data.h>
-
-/*
- * This file presumes 32bits/word. This is somewhat of a crock, and should
- * be fixed sometime.
- */
-#define TAB_INDEX(n) ((n) >> 5)
-#define TAB_MASK(n) (1 << ((n) & (TAB_BITS_WIDTH-1)))
-
-#define SET_TAB(tabs,n) tabs[TAB_INDEX(n)] |= TAB_MASK(n)
-#define CLR_TAB(tabs,n) tabs[TAB_INDEX(n)] &= ~TAB_MASK(n)
-#define TST_TAB(tabs,n) tabs[TAB_INDEX(n)] & TAB_MASK(n)
-
-/*
- * places tabstops at only every 8 columns
- */
-void
-TabReset(Tabs tabs)
-{
- int i;
-
- for (i = 0; i < TAB_ARRAY_SIZE; ++i)
- tabs[i] = 0;
-
- for (i = 0; i < MAX_TABS; i += 8)
- TabSet(tabs, i);
-}
-
-/*
- * places a tabstop at col
- */
-void
-TabSet(Tabs tabs, int col)
-{
- SET_TAB(tabs, col);
-}
-
-/*
- * clears a tabstop at col
- */
-void
-TabClear(Tabs tabs, int col)
-{
- CLR_TAB(tabs, col);
-}
-
-/*
- * returns the column of the next tabstop
- * (or MAX_TABS - 1 if there are no more).
- * A tabstop at col is ignored.
- */
-static int
-TabNext(TScreen * screen, Tabs tabs, int col)
-{
- if (screen->curses && screen->do_wrap && (term->flags & WRAPAROUND)) {
- xtermIndex(screen, 1);
- set_cur_col(screen, 0);
- col = screen->do_wrap = 0;
- }
- for (++col; col < MAX_TABS; ++col)
- if (TST_TAB(tabs, col))
- return (col);
-
- return (MAX_TABS - 1);
-}
-
-/*
- * returns the column of the previous tabstop
- * (or 0 if there are no more).
- * A tabstop at col is ignored.
- */
-static int
-TabPrev(Tabs tabs, int col)
-{
- for (--col; col >= 0; --col)
- if (TST_TAB(tabs, col))
- return (col);
-
- return (0);
-}
-
-/*
- * Tab to the next stop, returning true if the cursor moved
- */
-Bool
-TabToNextStop(TScreen * screen)
-{
- int saved_column = screen->cur_col;
- int next = TabNext(screen, term->tabs, screen->cur_col);
- int max = CurMaxCol(screen, screen->cur_row);
-
- if (next > max)
- next = max;
- set_cur_col(screen, next);
-
- return (screen->cur_col > saved_column);
-}
-
-/*
- * Tab to the previous stop, returning true if the cursor moved
- */
-Bool
-TabToPrevStop(TScreen * screen)
-{
- int saved_column = screen->cur_col;
-
- set_cur_col(screen, TabPrev(term->tabs, screen->cur_col));
-
- return (screen->cur_col < saved_column);
-}
-
-/*
- * clears all tabs
- */
-void
-TabZonk(Tabs tabs)
-{
- int i;
-
- for (i = 0; i < TAB_ARRAY_SIZE; ++i)
- tabs[i] = 0;
-}
diff --git a/nx-X11/programs/xterm/tektests/aitest.tek b/nx-X11/programs/xterm/tektests/aitest.tek
deleted file mode 100644
index 254c4ec5c..000000000
--- a/nx-X11/programs/xterm/tektests/aitest.tek
+++ /dev/null
@@ -1 +0,0 @@
- 1,`g ],`g?C3`t0@$`z0@,cg-F,cj-F,`m-G,lo-G,lr-G,lu-G,mx-G,m{-G,j~-G-ka-G-kd-G-hg-H-ej-H-fm-H-gp-H-as-I-bv-I-cy-I-m{-J-n~-J.la-K.id-K.kg-K.ej-L.gm-L.ep-M.cs-M.av-N.lx-O.j{-O.h~-P/ga-P/bd-Q/`g-R/oi-R/jl-S/eo-T/dr-U/cu-U/nw-V/jz-W/e}-X0``-Y0lb-Z0he-[0gh-[0ck-\0km-]0gp-^0cs-_0hu.A0dx.B0`{.C0i}.D1e`.E1nb.F1ge.G1`h.I1hj.J1bm.K1ko.L1`r.N1it.O1cw.P1hy.R1b|.S1h~.U2ba.V2gc.W2ne.Y2`h.[2jj.\2ll.^2go._2jq/A2ls/C2cv/D2fx/F2iz/H2l|/J2`/L3ga/M3gc/O3je/Q3ng/S3ni/U3nk/W3bn/Y3cp/[3cr/]3`t0@,cg-F,cd-F,`a-G+d~-G+d{-G+dx-G+eu-G+er-G+jo-G+kl-G+ki-G+hf-H+mc-H+n`-H*o}-H*a{-I*bx-I*cu-I*er-J*fo-J*dl-K*ii-K*kf-K*mc-L*o`-L)m}-M)c{-M)ax-N)du-O)jr-O)ho-P)ol-P)bj-Q)`g-R)gd-R)ja-S(m~-T(l{-U(cy-U(fv-V(js-W(mp-X(`n-Y(dk-Z(hh-[(oe-[(cc-\(k`-]'o}-^'c{-_'hx.A'lu.B'`s.C'ip.D'mm.E'fk.F'oh.G'`f.I'hc.J'ba.K&k~.L&`|.N&iy.O&cw.P&ht.R&br.S&ho.U&bm.V&oj.W&fh.Y&`f.[&jc.\&da.^%o~._%j|/A%dz/C%cx/D%nu/F%is/H%dq/J%`o/L%ol/M%oj/O%jh/Q%ff/S%fd/U%fb/W%b`/Y$c~/[$c|/]$`z0@,ag2Y,ad2Y,`a2Y+d~2Y+d{2Y+dx2Y+gu2X+gr2X+jo2X+il2X+ii2X+hf2X+oc2W+n`2W*m}2W*c{2V*bx2V*au2V*gr2U*fo2U*dl2U*ki2T*if2T*oc2S*m`2S)o}2R)a{2R)cx2Q)du2Q)jr2P)ho2P)ml2O)bj2N)`g2N)ed2M)ja2L(o~2K(l{2K(ay2J(fv2I(js2H(op2G(`n2G(dk2F(hh2E(me2D(ac2C(i`2B'm}2A'a{2@'hx1_'lu1^'`s1]'kp1['om1Z'fk1Y'mh1X'`f1W'hc1V'ba1T&i~1S&`|1R&ky1P&aw1O&ht1N&br1L&ho1K&bm1I&mj1H&fh1F&`f1E&jc1C&da1B%m~1@%j|0^%dz0]%ax0[%nu0Y%ks0W%dq0V%`o0T%ml0R%mj0P%jh0N%ff0L%fd0J%fb0H%b`0F$a~0D$a|0B$`z0@,ag2Y,aj2Y,`m2Y,lo2Y,lr2Y,lu2Y,ox2X,o{2X,j~2X-ia2X-id2X-hg2X-gj2W-fm2W-ep2W-cs2V-bv2V-ay2V-o{2U-n~2U.la2U.kd2T.ig2T.gj2S.em2S.gp2R.as2R.cv2Q.lx2Q.j{2P.h~2P/ea2O/bd2N/`g2N/mi2M/jl2L/go2K/dr2K/au2J/nw2I/jz2H/g}2G0``2G0lb2F0he2E0eh2D0ak2C0im2B0ep2A0as2@0hu1_0dx1^0`{1]0k}1[1g`1Z1nb1Y1ee1X1`h1W1hj1V1bm1T1io1S1`r1R1kt1P1aw1O1hy1N1b|1L1h~1K2ba1I2ec1H2ne1F2`h1E2jj1C2ll1B2eo1@2jq0^2ls0]2av0[2fx0Y2kz0W2l|0V2`0T3ea0R3ec0P3je0N3ng0L3ni0J3nk0H3bn0F3ap0D3ar0B3`t0@,ag*O,aj*O,am*O,bp*O,bs*O,gv*O,dy*P,e|*P,f*P-db*Q-ee*Q-gh*Q-ek*R-gn*R-eq*S-gt*S-fw*T-ez*U-d}*V.g`*V.fc*W.ef*X.ai*Y.al*Z.ao*[.ar*\.au*].mw*^.nz*_.o}+@/h`+B/ic+C/ff+D/gi+E/al+G/co+H/mq+J/ot+K/iw+M/dz+O/b}+P0a`+R0lb+T0ke+U0gh+W0bk+Y0nm+[0jp+]0fs+_0nu,A0jx,C0g{,E0l},H1i`,J1bc,L1oe,N1eh,Q1nj,S1hm,V1bp,X1ir,[1cu,]1jw-@1`z-C1g|-E1o~-H2fa-K2jc-N2bf-Q2fh-T2jj-W2bm-Z2go-]2hq.A2ms.D2bv.G2`x.K2ez.N2k|.Q2i~.U3h`.Y3nb.\3md/@3lf/D3oh/G3oj/K3kl/O3kn/S3gp/W3gr/[3`t0@,ag*O,ad*O,aa*O+b~*O+b{*O+ow*O+lt*P+mq*P+nn*P+lk*Q+mh*Q+oe*Q+mb*R*o*R*m|*S*oy*S*nv*T*ms*U*lp*V*om*V*nj*W*mg*X*ae*Y*ab*Z)a*[)a|*\)ay*])ev*^)fs*_)gp+@)hm+B)ij+C)ng+D)od+E)ab+G(c+H(e|+J(gy+K(iv+M(ls+O(bq+P(an+R(dk+T(kh+U(oe+W(bc+Y(f`+['j}+]'nz+_'fx,A'ju,C'or,E'dp,H'im,J'bk,L'gh,N'me,Q'fc,S'h`,V&b~,X&i{,[&cy,]&jv-@&`t-C&oq-E&go-H&nl-K&jj-N&bh-Q&ne-T&jc-W&ba-Z%o~-]%h|.A%ez.D%bx.G%`v.K%ms.N%kq.Q%io.U%hm.Y%fk.\%ei/@%dg/D%ge/G%gc/K%ka/O$k/S$o}/W$o{/[$`z0@,cg5P,cd5P,ca5P+b~5P+b{5P+mw5P+lt5P+oq5O+nn5O+lk5O+oh5N+me5N+ob5M*m5M*o|5L*my5L*nv5K*os5J*lp5J*mm5I*nj5H*og5G*ce5F*cb5E)c5D)c|5C)cy5B)gv5A)fs5@)ep4_)hm4^)kj4\)ng4[)md4Z)cb4X(a4W(g|4U(ey4T(kv4R(ls4Q(bq4O(cn4M(dk4L(ih4J(me4H(bc4F(f`4D'j}4B'nz4@'fx3^'ju3\'mr3Z'dp3X'km3U'bk3S'eh3Q'oe3N'fc3L'h`3J&b~3G&k{3D&ay3B&jv2_&`t2]&mq2Z&eo2W&nl2T&jj2Q&bh2N&ne2K&jc2H&ba2E%m~2B%h|1_%gz1[%bx1X%`v1U%os1Q%iq1N%ko1J%hm1G%fk1C%gi0_%dg0\%ee0X%ec0T%ia0P$i0L$m}0H$m{0D$`z0@,cg5P,cj5P,cm5P,bp5P,bs5P,ev5P,dy5P,g|5O,f5O-db5O-ge5N-eh5N-gk5M-en5M-gq5L-et5L-fw5K-gz5J-d}5J.e`5I.fc5H.gf5G.ci5F.cl5E.co5D.cr5C.cu5B.ow5A.nz5@.m}4_/h`4^/kc4\/ff4[/ei4Z/cl4X/ao4W/oq4U/mt4T/kw4R/dz4Q/b}4O0c`4M0lb4L0ie4J0eh4H0bk4F0nm4D0jp4B0fs4@0nu3^0jx3\0e{3Z0l}3X1k`3U1bc3S1me3Q1gh3N1nj3L1hm3J1bp3G1kr3D1au3B1jw2_1`z2]1e|2Z1m~2W2fa2T2jc2Q2bf2N2fh2K2jj2H2bm2E2eo2B2hq1_2os1[2bv1X2`x1U2gz1Q2i|1N2k~1J3h`1G3nb1C3od0_3lf0\3mh0X3mj0T3il0P3in0L3ep0H3er0D3`t0@,bg'Z,gj'Z,gm'Z,hp'[,ls'[,nv'[,cz'[,e}'\-f`'\-ic']-kf']-ni'^-am'_-`p(@-gs(@-gv(A-ky(B-k|(C-o(D.lb(F.me(G.bi(H.`l(J.ao(K.gr(L.eu(N.dx(P.g{(Q.f~(S/ea(U/dd(W/dg(Y/dj([/dm(]/ep(_/es)A/cv)C/`y)F/a|)H/o~)J0ma)M0kd)O0jg)R0ej)U0`m)X0oo)Z0kr)]0gu*@0cx*C0oz*F0h}*J1e`*M1bc*P1ke*S1eh*W1oj*Z1em*^1`p+B1kr+E1bu+I1iw+M1`z+Q1d|+U1l~+Y2aa+]2ic,A2ne,E2`h,J2ij,N2ol,R2mn,W2cq,[2fs-@2du-E2hw-J2ky-N2k{-S2k}-X2k-]3ka.B3dc.H3ae.M3cg.R3lh.X3jj.]3dl/C3om/H3jo/N3aq/T3hr/Z3`t0@,bg'Z,oc'Z,o`'Z+h}'[+dz'[+fw'[+ct'[+mp'\+nm'\+ij']+kg']+fd'^+aa'_*`~(@*oz(@*ow(A*kt(B*kq(C*gn(D*dk(F*eh(G*be(H*`b(J)a(K)o{(L)mx(N)lu(P)or(Q)no(S)ml(U)li(W)lf(Y)lc([)l`(](m}(_(mz)A(cx)C(`u)F(ar)H(go)J(el)M(ki)O(jf)R(mc)U(`a)X'g~)Z'k{)]'ox*@'cv*C'gs*F'hp*J'mm*M'bk*P'kh*S'me*W'gc*Z'm`*^&`~+B&k{+E&by+I&iv+M&`t+Q&lq+U&do+Y&am+]&ij,A&fh,E&`f,J&ic,N&ga,R%e,W%c},[%nz-@%lx-E%hv-J%kt-N%kr-S%kp-X%kn-]%kl.B%lj.H%ai.M%cg.R%de.X%jc.]%la/C%g`/H$j~/N$a}/T$h{/Z$`z0@,bg8E,mc8E,m`8E+h}8E+dz8E+fw8D+at8D+op8C+nm8C+kj8B+ig8B+fd8A+ca8@*`~8@*mz7_*mw7^*it7]*iq7\*en7[*dk7Z*gh7X*be7W*`b7V)c7T)m{7S)ox7Q)lu7P)mr7N)no7L)ol7J)li7I)lf7G)lc7E)l`7C(o}7@(oz6^(ax6\(`u6Z(cr6W(eo6U(gl6R(ii6P(jf6M(oc6J(`a6H'e~6E'i{6B'mx5_'av5\'es5Y'hp5V'om5R'bk5O'ih5L'oe5H'ec5E'o`5A&`~4^&i{4Z&by4V&kv4R&`t4O&lq4K&do4G&cm4B&kj3^&fh3Z&`f3V&kc3Q&ea3M%g3H%a}3D%nz2_%lx2[%hv2V%it2Q%ir2L%ip2G%in2B%il1]%lj1X%ci1R%ag1M%de1H%jc1B%la0]%e`0W$j~0Q$c}0K$h{0F$`z0@,bg8E,ej8E,em8E,hp8E,ls8E,nv8D,az8D,g}8C-f`8C-kc8B-if8B-ni8A-cm8@-`p8@-es7_-ev7^-iy7]-i|7\-m7[.lb7Z.oe7X.bi7W.`l7V.co7T.er7S.gu7Q.dx7P.e{7N.f~7L/ga7J/dd7I/dg7G/dj7E/dm7C/gp7@/gs6^/av6\/`y6Z/c|6W/m~6U0oa6R0id6P0jg6M0gj6J0`m6H0mo6E0ir6B0eu5_0ax5\0mz5Y0h}5V1g`5R1bc5O1ie5L1gh5H1mj5E1gm5A1`p4^1ir4Z1bu4V1kw4R1`z4O1d|4K1l~4G2ca4B2kc3^2ne3Z2`h3V2kj3Q2ml3M2on3H2aq3D2fs2_2du2[2hw2V2iy2Q2i{2L2i}2G2i2B3ia1]3dc1X3ce1R3ag1M3lh1H3jj1B3dl0]3mm0W3jo0Q3cq0K3hr0F3`t0@,bg%J,jj%J,om%J,gq%J,it%K,bx%K,d{%L,j~%L-ab%M-de%N-oh%N-cl%O-ko%P-or%Q-`v%S-ey%T-n|%U.``%W.fc%X.hf%Z.oi%[.fm%].jp%_.ms&A.nv&C.bz&E.g}&G/h`&J/nc&L/of&N/bj&Q/dm&T/gp&V/fs&Y/jv&\/jy&_/j|'B/j'E0kb'H0ie'L0jh'O0hk'S0jn'V0eq'Z0dt'^0cw(A0oy(E0o|(I0k(M1gb(Q1`e(V1ng(Z1gj(^1am)C1ko)G1fr)L1mt)Q1dw)V1ly)[1d|*@1h~*E2`a*J2ec*O2ne*T2`h*Z2fj*_2dl+E2jn+J2mp+P2lr+V2ot+[2ov,A2ox,G2oz,M2h|,T2i~,Z3f`-@3cb-F3mc-M3ge-S3ag-Z3hh.A3cj.G3jk.N3nl.U3an.\3io/C3np/J3nq/Q3cs/X3`t0@,bg%J,jc%J,g`%J+o|%J+iy%K+bv%K+lr%L+jo%L+al%M+lh%N+ge%N+cb%O*k~%P*g{%Q*`x%S*mt%T*fq%U*`n%W*nj%X*hg%Z*gd%[*n`%])j}%_)ez&A)fw&C)bt&E)op&G)hm&J)fj&L)gg&N)bd&Q)l`&T(o}&V(nz&Y(jw&\(jt&_(jq'B(jn'E(kk'H(ih'L(je'O(hb'S'j'V'm|'Z'ly'^'cw(A'gt(E'gq(I'kn(M'ok(Q'`i(V'ff(Z'oc(^'aa)C&k~)G&n{)L&ey)Q&lv)V&dt)[&lq*@&ho*E&`m*J&mj*O&fh*T&`f*Z&nc*_&la+E%j+J%e}+P%d{+V%gy+[%gw,A%gu,G%gs,M%hq,T%io,Z%nm-@%cl-F%ej-M%oh-S%ag-Z%he.A%cd.G%jb.N%fa.U%a`.\$i~/C$f}/J$f|/Q$c{/X$`z0@,bg:U,jc:U,e`:U+m|:U+ky:T+bv:T+lr:T+jo:S+cl:R+lh:R+ee:Q+ab:P*i~:O*e{:N*`x:M*ot:K*fq:J*`n:I*nj:G*hg:F*ed:D*n`:B)j}:@)gz9^)fw9\)bt9Z)mp9X)hm9V)fj9S)eg9Q)bd9N)l`9L(m}9I(nz9F(jw9C(jt9@(jq8](jn8Z(ik8W(kh8S(je8P(hb8M'j8I'o|8E'ly8B'aw7^'et7Z'eq7V'in7R'mk7N'`i7J'ff7E'mc7A'ca6\&i~6X&n{6S&gy6N&lv6J&dt6E&lq6@&ho5[&`m5V&oj5P&fh5K&`f5F&nc5@&la4[%j4U%g}4O%d{4J%ey4D%ew3^%eu3X%es3R%hq3L%ko3E%nm2_%al2Y%gj2R%mh2L%cg2E%he1_%ad1X%jb1Q%fa1J%c`1C$k~0\$f}0U$f|0N$a{0G$`z0@,bg:U,jj:U,mm:U,eq:U,kt:T,bx:T,d{:T,j~:S-cb:R-de:R-mh:Q-al:P-io:O-mr:N-`v:M-gy:K-n|:J.``:I.fc:G.hf:F.mi:D.fm:B.jp:@.os9^.nv9\.bz9Z.e}9X/h`9V/nc9S/mf9Q/bj9N/dm9L/ep9I/fs9F/jv9C/jy9@/j|8]/j8Z0ib8W0ke8S0jh8P0hk8M0jn8I0gq8E0dt8B0aw7^0my7Z0m|7V0i7R1eb7N1`e7J1ng7E1ej7A1cm6\1io6X1fr6S1ot6N1dw6J1ly6E1d|6@1h~5[2`a5V2gc5P2ne5K2`h5F2fj5@2dl4[2jn4U2op4O2lr4J2mt4D2mv3^2mx3X2mz3R2h|3L2k~3E3f`2_3ab2Y3oc2R3ee2L3cg2E3hh1_3aj1X3jk1Q3nl1J3cn1C3ko0\3np0U3nq0N3as0G3`t0@,ag#@,mj#@,fn#@,cr#@,lu#A,jy#A,a}#B-l`#C-kd#C-ch#D-ok#E-ho#G-as#H-ov#I-ez#K-l}#M.ka#N.be#P.jh#R.fl#T.oo#V.ds#Y.nv#[.dz#^.o}$@/fa$C/id$F/ah$I/ik$L/nn$O/cr$R/iu$V/ox$Y/a|$]/d%A0kb%D0oe%H0oh%L0`l%Q0ao%U0fr%Y0du%^0fx&B0d{&G0g~&K1ca&P1cd&U1of&Z1ki&_1hl'E1ao'J1oq'O1it'U1cw'Z1ny(@1e|(F1m~(L2`a(R2ic(X2me(^2fh)D2kj)J2il)Q2on)W2mp)^2cs*D2bu*K2aw*R2mx*Y2lz+@2h|+G2e~+N3a`+U3ja+\3cc,C3hd,K3bf,R3hg,Z3nh-A3`j-I3gk-P3jl-X3im.@3hn.H3ho.P3kp.W3gq._3cr/G3or/O3hs/X3`t0@,ag#@,ec#@+n#@+c|#@+dx#A+jt#A+aq#B+dm#C+ki#C+cf#D+gb#E*h~#G*a{#H*gw#I*ms#K*dp#M*kl#N*bi#P*je#R*na#T)g~#V)lz#Y)fw#[)ls#^)gp$@)nl$C)ii$F)af$I)ib$L(f$O(c|$R(ix$V(gu$Y(ar$](ln%A(kk%D(gh%H(ge%L(`b%Q'a%U'n{%Y'lx%^'nu&B'lr&G'oo&K'cm&P'cj&U'gg&Z'kd&_'ha'E&a'J&g|'O&iy'U&cw'Z&ft(@&mq(F&eo(L&`m(R&ij(X&eh(^&ne)D&kc)J&ia)Q%g)W%e})^%c{*D%by*K%aw*R%eu*Y%ds+@%hq+G%mo+N%an+U%jl+\%ck,C%hi,K%bh,R%hf,Z%fe-A%`d-I%ob-P%ja-X%i`.@$h.H$h~.P$k}.W$o|._$c|/G$g{/O$hz/X$`z0@,cg<_,gc<_+n<_+a|<_+dx<_+jt<^+cq<]+dm<]+ii<\+af<[+eb<Z*h~<Y*c{<W*ew<V*os<T*dp<S*il<Q*bi<O*je<M*na<K)e~<I)lz<G)fw<D)ls<B)ep;_)nl;\)ki;Y)cf;V)kb;S(f;P(a|;M(kx;I(eu;F(cr;B(ln:_(ik:[(eh:W(ee:S(`b:O'c:J'n{:F'lx:B'nu9]'lr9Y'mo9T'am9O'aj9J'eg9E'id9@'ha8[&c8U&e|8P&ky8J&aw8E&ft7_&oq7Y&go7S&`m7N&kj7G&gh7A&ne6[&ic6U&ka6N%e6H%g}6A%a{5[%by5T%cw5M%gu5F%ds5@%hq4Y%oo4Q%cn4J%jl4C%ak3\%hi3U%bh3M%hf3F%fe2^%`d2W%mb2O%ja2G%k`1_$h1X$h~1P$i}1H$m|1@$a|0X$e{0P$hz0H$`z0@,cg<_,oj<_,fn<_,ar<_,lu<_,jy<^,c}<]-l`<]-id<\-ah<[-mk<Z-ho<Y-cs<W-mv<V-gz<T-l}<S.ia<Q.be<O.jh<M.fl<K.mo<I.ds<G.nv<D.dz<B.m};_/fa;\/kd;Y/ch;V/kk;S/nn;P/ar;M/ku;I/mx;F/c|;B/d:_0ib:[0me:W0mh:S0`l:O0co:J0fr:F0du:B0fx9]0d{9Y0e~9T1aa9O1ad9J1mf9E1ii9@1hl8[1co8U1mq8P1kt8J1aw8E1ny7_1g|7Y1o~7S2`a7N2kc7G2oe7A2fh6[2ij6U2kl6N2mn6H2op6A2as5[2bu5T2cw5M2ox5F2lz5@2h|4Y2g~4Q3c`4J3ja4C3ac3\3hd3U3bf3M3hg3F3nh2^3`j2W3ek2O3jl2G3km1_3hn1X3ho1P3ip1H3eq1@3ar0X3mr0P3hs0H3`t0@,`g ],dk ],eo ],ks ],iw ^,o{ ^,o _-bd!@-ch!A-`l!C-ep!D-gt!E-fx!G-f|!I.e`!K.fd!M.gh!O.dl!R.gp!T.et!W.ax!Z.`|!].m"@/jc"C/kg"F/ek"J/`o"N/kr"Q/fv"U/bz"Y/k}"]0`a#B0jd#F0`h#K0jk#O0ao#T0er#Y0mu#^0by$C0g|$H0d$N1jb$S1he$Y1oh$^1nk%D1jn%J1jq%P1ft%V1gw%\1ly&C1j|&I1d&P2oa&V2ed&]2lf'D2di'K2hk'R2lm'Y2`p(@2er(G2ft(N2gv(U2ex(]2gz)D2a|)L2l})T2j)[3ea*C3lb*K3dd*S3oe*Z3cg+B3kh+J3oi+R3oj+Z3`l,C3am,K3an,S3nn,[3oo-C3ip-L3bq-T3oq-\3er.E3nr.M3`s.V3is.^3os/F3ms/O3bt/W3`t0@,`g ],lb ]+m~ ]+kz ]+iv ^+gr ^+gn _+bj!@+cf!A+`b!C*m}!D*oy!E*nu!G*nq!I*mm!K*ni!M*oe!O*la!R)o}!T)my!W)av!Z)`r!])en"@)jj"C)kf"F)mb"J(`"N(k{"Q(nw"U(bt"Y(kp"](`m#B(ji#F(`f#K(jb#O'a#T'm{#Y'ex#^'bu$C'oq$H'ln$N'jk$S'hh$Y'ge$^'fb%D&j%J&j|%P&ny%V&ov%\&dt&C&jq&I&ln&P&gl&V&mi&]&dg'D&ld'K&hb'R&d`'Y%`~(@%m{(G%ny(N%ow(U%mu(]%os)D%ar)L%dp)T%jn)[%ml*C%dk*K%li*S%gh*Z%cg+B%ke+J%gd+R%gc+Z%`b,C%aa,K%a`,S$f,[$g~-C$i}-L$b}-T$g|-\$m{.E$f{.M$`{.V$iz.^$gz/F$ez/O$bz/W$`z0@,`g?C,lb?C+o~?B+iz?B+kv?A+er?A+en?@+bj>_+af>^+`b>]*o}>[*my>Z*nu>X*nq>V*om>T*ni>R*me>P*la>N)m}>K)oy>H)cv>E)`r>C)gn=_)jj=\)if=Y)ob=U(`=R(i{=N(nw=J(bt=F(ip=B(`m<^(ji<Y(`f<U(jb<P'c<K'o{<F'gx<A'bu;\'mq;W'ln;R'jk;L'hh;G'ee;A'fb:[&j:U&j|:O&ny:I&mv:C&dt9]&jq9V&ln9P&el9I&oi9B&dg8\&ld8U&hb8N&d`8G%`~8@%o{7X%ny7Q%mw7J%ou7B%ms6[%cr6S%dp6L%jn6D%ol5\%dk5U%li5M%eh5E%ag4]%ie4U%ed4M%ec4E%`b3]%ca3T%c`3L$f3D$e~2\$k}2S$b}2K$e|2C$o{1Z$f{1R$`{1J$kz1A$ez0Y$gz0P$bz0H$`z0@,`g?C,dk?C,go?B,is?B,kw?A,m{?A,m?@-bd>_-ah>^-`l>]-gp>[-et>Z-fx>X-f|>V.g`>T.fd>R.eh>P.dl>N.ep>K.gt>H.cx>E.`|>C.o=_/jc=\/ig=Y/gk=U/`o=R/ir=N/fv=J/bz=F/i}=B0`a<^0jd<Y0`h<U0jk<P0co<K0gr<F0ou<A0by;\0e|;W0d;R1jb;L1he;G1mh;A1nk:[1jn:U1jq:O1ft:I1ew:C1ly9]1j|9V1d9P2ma9I2gd9B2lf8\2di8U2hk8N2lm8G2`p8@2gr7X2ft7Q2ev7J2gx7B2ez6[2c|6S2l}6L2j6D3ga5\3lb5U3dd5M3me5E3ag4]3ih4U3mi4M3mj4E3`l3]3cm3T3cn3L3nn3D3mo2\3kp2S3bq2K3mq2C3gr1Z3nr1R3`s1J3ks1A3ms0Y3os0P3bt0H3`t0@.l}0@.o}/Z.m}/U.l}/P.o}/J.m}/E.l}/@.b~.Z.a~.U.`~.P.c~.J.a~.E.d~.@.g~-Z.f~-U.h~-P.k~-J.n~-E.m~-@.l~,[.c,U.b,P.e,K.h,F.h,A.o+[.n+V/a`+Q/e`+L/h`+G/h`+B/o`*\/ca*W/fa*R/ja*M/na*H/na*C/bb)^/fb)Y/jb)T/bc)O/fc)J/kc)E/oc)@/`d(\/dd(W/md(R/be(M/ge(H/le(D/af'_/ff'Z/of'U/ag'Q/jg'L/lg'H/eh'C/oh&^/ai&Z/ki&U/bj&Q/hj&M/bk&H/ik&D/`l&@/kl%[/bm%W/im%S/`n%O/kn%J/co%F/oo%B/gp$^/op$Z/kq$V/cr$R/lr$O/is$K/at$G/nt$C/hu$@/ev#\/cw#X/mw#U/kx#Q/ey#N/cz#J/b{#G/m{#D/h|#A/k}"])dp0@)gp/Z)ep/U)dp/P)gp/J)ep/E)dp/@)bp.Z)ap.U)`p.P)cp.J)ap.E)lo.@)oo-Z)no-U)ho-P)ko-J)fo-E)eo-@)do,[)co,U)bo,P)mn,K)hn,F)hn,A)gn+[)fn+V)an+Q)mm+L)hm+G)hm+B)gm*\)cm*W)nl*R)jl*M)fl*H)fl*C)bl)^)nk)Y)jk)T)bk)O)nj)J)kj)E)gj)@)`j(\)li(W)ei(R)bi(M)oh(H)dh(D)ah'_)ng'Z)gg'U)ag'Q)jf'L)df'H)me'C)ge&^)ae&Z)kd&U)bd&Q)hc&M)bc&H)ib&D)`b&@)ka%[)ba%W)i`%S)``%O(k%J(c%F(g~%B(o}$^(g}$Z(k|$V(c|$R(d{$O(iz$K(az$G(fy$C(hx$@(mw#\(cw#X(ev#U(ku#Q(mt#N(ct#J(bs#G(er#D(hq#A(kp"])dp0@)ep0E)gp0J)dp0P)ep0U)gp0Z)dp1@)bp1E)cp1J)`p1P)ap1U)cp1Z)lo2@)mo2E)no2J)ho2P)io2U)fo2Z)go2_)do3E)ao3J)bo3O)on3T)hn3Z)hn3_)en4D)fn4I)cn4N)om4S)hm4Y)hm4^)em5C)am5H)nl5M)jl5R)fl5W)fl5\)bl6A)nk6F)jk6K)bk6P)nj6U)ij6Z)ej6_)`j7D)li7I)gi7M)bi7R)mh7W)dh7\)ch8@)ng8E)eg8J)cg8N)jf8S)df8X)oe8\)ee9A)ce9E)id9J)bd9N)hc9S)bc9W)kb9[)`b:@)ia:D)ba:H)k`:L)``:Q(i:U(a:Y(e~:](m};A(e};E(i|;I(a|;M(d{;Q(kz;T(cz;X(fy;\(hx<@(ow<C(aw<G(gv<J(iu<N(ot<Q(at<U(bs<X(gr<[(hq<_(ip=B.l}0@.m}0E.o}0J.l}0P.m}0U.o}0Z.l}1@.b~1E.c~1J.`~1P.a~1U.c~1Z.d~2@.e~2E.f~2J.h~2P.i~2U.n~2Z.o~2_.l~3E.a3J.b3O.g3T.h3Z.h3_.m4D.n4I/c`4N/g`4S/h`4Y/h`4^/m`5C/aa5H/fa5M/ja5R/na5W/na5\/bb6A/fb6F/jb6K/bc6P/fc6U/ic6Z/mc6_/`d7D/dd7I/od7M/be7R/ee7W/le7\/cf8@/ff8E/mf8J/cg8N/jg8S/lg8X/gh8\/mh9A/ci9E/ii9J/bj9N/hj9S/bk9W/kk9[/`l:@/il:D/bm:H/km:L/`n:Q/in:U/ao:Y/mo:]/ep;A/mp;E/iq;I/ar;M/lr;Q/ks;T/ct;X/nt;\/hu<@/gv<C/aw<G/ow<J/ix<N/gy<Q/az<U/b{<X/o{<[/h|<_/i}=B1hn0@1jn/\1hn/Y1kn/U1mn/R1on/N1mn/K1ln/H1nn/D1`o/A1co.]1ao.Z1go.V1fo.S1ho.P1ko.L1mo.I1lo.F1bp.B1ep-_1gp-[1jp-X1mp-U1lp-R1bq-N1eq-K1hq-H1oq-D1br-A1er,^1ir,[1lr,X1cs,T1fs,Q1js,N1at,K1et,H1it,E1lt,B1du+_1hu+\1`v+Y1dv+V1lv+S1aw+P1iw+M1mw+J1fx+G1ox+D1cy+A1hy*_1az*\1jz*Y1`{*W1i{*T1b|*Q1h|*O1b}*L1h}*J1b~*G1h~*E1f*B1l*@2g`)]2ba)[2ia)Y2`b)W2ob)T2fc)R2bd)P2md)N2ee)L2af)J2mf)H2ig)F2fh)D2oh)B2hi)A2ej(_2bk(]2cl([2ml(Z2km(X2en(W2co(U2bp(T2mp(S2hq(R2kr(P2fs(O2ft(N&h0@&j/\&h/Y&k/U&e/R&g/N&e/K&d/H&f/D&`/A&c.]&a.Z&o~.V&n~.S&h~.P&k~.L&e~.I&d~.F&b~.B&m}-_&o}-[&j}-X&e}-U&d}-R&b}-N&m|-K&h|-H&g|-D&b|-A&m{,^&i{,[&d{,X&c{,T&nz,Q&jz,N&az,K&my,H&iy,E&dy,B&lx+_&hx+\&`x+Y&lw+V&dw+S&aw+P&iv+M&ev+J&nu+G&gu+D&cu+A&ht*_&at*\&js*Y&`s*W&ir*T&br*Q&hq*O&bq*L&hp*J&bp*G&ho*E&nn*B&dn*@&om)]&bm)[&il)Y&`l)W&gk)T&nj)R&bj)P&ei)N&mh)L&ah)J&eg)H&if)F&ne)D&ge)B&hd)A&mc(_&bc(]&cb([&ea(Z&k`(X%m(W%c(U%b~(T%e}(S%h|(R%k{(P%nz(O%ny(N&h0@&j0C&h0G&i0J&g0M&e0Q&g0T&d0X&f0[&`0_&a1B&c1E&m~1I&n~1L&h~1P&i~1S&g~1V&d~1Z&b~1]&o}2@&m}2D&j}2G&g}2J&d}2N&b}2Q&o|2T&h|2X&e|2[&b|2^&o{3A&k{3D&d{3H&a{3K&nz3N&jz3Q&cz3T&oy3W&ky3Z&dy3^&lx4A&hx4D&`x4G&lw4J&dw4M&cw4O&kv4R&gv4U&nu4X&eu4[&au4^&ht5A&ct5C&js5F&`s5I&kr5K&br5N&hq5Q&bq5S&hp5V&bp5X&ho5[&nn5]&dn6@&mm6B&bm6D&kl6F&`l6I&ek6K&nj6M&bj6O&gi6Q&oh6S&ch6U&gg6W&kf6Y&ne6[&ee6]&hd6_&oc7@&bc7B&ab7D&ga7E&i`7G%o7H%a7J%b~7K%g}7L%h|7N%i{7O%nz7P%ny7Q1hn0@1jn0C1hn0G1in0J1on0M1mn0Q1on0T1ln0X1nn0[1`o0_1ao1B1co1E1eo1I1fo1L1ho1P1io1S1oo1V1lo1Z1bp1]1gp2@1ep2D1jp2G1op2J1lp2N1bq2Q1gq2T1hq2X1mq2[1br2^1gr3A1kr3D1lr3H1as3K1fs3N1js3Q1ct3T1gt3W1kt3Z1lt3^1du4A1hu4D1`v4G1dv4J1lv4M1cw4O1kw4R1ow4U1fx4X1mx4[1ay4^1hy5A1cz5C1jz5F1`{5I1k{5K1b|5N1h|5Q1b}5S1h}5V1b~5X1h~5[1f5]1l6@2e`6B2ba6D2ka6F2`b6I2mb6K2fc6M2bd6O2od6Q2ge6S2cf6U2of6W2kg6Y2fh6[2mh6]2hi6_2gj7@2bk7B2al7D2ol7E2im7G2gn7H2ao7J2bp7K2op7L2hq7N2ir7O2fs7P2ft7Q,`l0E0,`l(E903`y/ZN$`f/ZS2lt.U2mt.Q2nt.M2nt.I2et.E2os.@2`s-\2br-W2bq-R2bp-M2jn-H2fm-C2nk,^2bj,Y2fh,T2jf,O2jd,J2jb,E2k`,@1e~+\1b|+W1ly+S1kw+N1bu+J1jr+F1bp+B1km*^1ak*[1kh*W1me*T1ec*Q1i`*N0m}*K0b{*H0dx*F0ku*C0nr*A0bp)_0fm)]0kj)[0mg)Z0ce)X0fb)W/j)V/b})U/gz)T/hw)T/bu)S/er)S/lo)S/gm)R/lj)S/dh)S/ne)S/gc)S/ba)T.i~)U.d|)V.`z)W.lw)X.lu)Y.ms)Z.kq)[.io)].om)^.mk*@.`j*B.dh*D.kf*E.ce*G.kc*I.`b*L.i`*N-f*P-c~*R-m|*U-j{*W-hz*Z-ky*\-mx*_-lw+B-bw+D-ev+G-lu+J-du+M-ot+O-ft+R-bt+U-ms+X-ms+[-is+^-is,A-ms,D-ls,G-`t,J-dt,M-lt,P-du,S-lu,V-dv,Y-`w,\-lw,_-lw,_-hx-B-hy-E-gz-G-g{-J-k|-M-j}-P-n~-S.a`-V.ha-Y.ob-[.fd-^.me.A.hg.D.ci.F.mj.I.kl.K.en.N.gp.P.ar.S.ct.U.`v.X.bx.Z.gz.\.g|.^.h~/A/l`/C/ac/E/ee/G/hg/I/li/K/gl/L/jn/N/`q/P/ks/Q/av/S/jx/T/`{/V/i}/W0b`/X0nb/Y0fe/Z0ng/[0jj/\0am/]0oo/]0fr/^0`u/_0iw/_0gz/_0o|/_0h0@1`b0@1hd0@1gg/_1ni/_1dl/_1nn/^1dq/^1ms/]1av/\1jx/[1mz/Z1a}/Y1g/W2ja/V2hc/U2ie/S2jg/Q2ki/O2gk/M2nl/K2en/I2lo/G2bq/D2cr/A2cs.^2os.[2ft.X2lt.U2nt.Q `` @*ir;P*or;M*mr;K*or;H*hr;F*fr;C*cr;@*hq:^*aq:[*jp:X*oo:U*co:R*dn:P*dm:M*el:J*ek:G*ej:D*ai:A*mg9^*if9[*`e9X*hc9U*`b9R*k`9N)n~9K)b}9H)e{9E)hy9B)ow8^)nu8[)ms8X)lq8U)oo8Q)mm8N)hk8K)fi8G)ag8D)od8@)ib7])d`7Z(n}7V(h{7S(by7O(lv7L(ft7H(lq7E(fo7A(ll6^(aj6Z(kg6V(ae6S(gb6O'l6L'f}6H'hz6E'ax6A'gu5]'mr5Z'bp5V'hm5S'nj5O'dh5L'je5H'`c5E'j`5A&l}4^&f{4Z&lx4W&gv4S&ns4P&eq4M&ln4J&kl4F&cj4C&og4@&he3^&ec3[&ba3X%`3V%o|3S%b{3Q%cy3O%dw3N%ku3L%ns3K%dr3K%bq3J%oo3J%in3K%jm3L%ml3N%bl3P%ek3S%nj3V%ij3Z%gj3^%fj4C%gj4H%ij4N%ak4T%fk4Z%`l5A%`l5A%ol5G%jm5N%jn5U%ko5\%hp6D%br6K%gs6R%mt6Z%kv7A%dx7I%bz7P%c|7W%`~7_&a`8F&eb8M&id8T&ag8[&hi9B&bl9H&ln9O&iq9U&ft9[&aw:A&ly:G&o|:L&l:R'mb:W'me:\'`i;A'cl;E'do;J'er;N'iu;R'lx;V'n{;Y'c;\(db<@(ge<B(jh<E(hk<H(in<J(mq<L(mt<N(hw<P(iz<Q(k}<R)g`<S)cc<T)ne<U)hh<V)ak<V)jm<V)cp<V)jr<V)mt<V)`w<V)by<U)g{<T)d}<T)d<S*`a<R*lb<Q*kd<O*af<N*kg<L*mh<K*gj<I*dk<H*il<F*im<D*in<B*eo<@*ap;^*lp;\*gq;Y*nq;W*ar;U*kr;R*ir;P*or;M `` @ \ No newline at end of file
diff --git a/nx-X11/programs/xterm/tektests/dmerc.tek b/nx-X11/programs/xterm/tektests/dmerc.tek
deleted file mode 100644
index 515895c54..000000000
--- a/nx-X11/programs/xterm/tektests/dmerc.tek
+++ /dev/null
@@ -1 +0,0 @@
-*hi?H*hi T*hl [-60-``?H-`` T-`c [-40.d?H.d T/db [-200lv?H0lv T0ly [ 02dn?H2dn T2dq [204hm?H4hm T4hp [407`d?H7`d T6`p [60*hi?H7`d?H7`g>Y180*ji=Q7bd=Q7bg=B200*hi;[7`d;[7`g;L220*ji:D7bd:D7bg9U240*hi8N7`d8N7`g7_260*ki6W7cd6W7cg6H280*ii5A7ad5A7ag4R300*ki3J7cd3J7cg2[320*ii1T7ad1T7ag1E340*hi/^7`d/^7`g/O 0*ki.G7cd.G7cg-X20*ii,Q7ad,Q7ag,B40*ki*Z7cd*Z7cg*K60*ii)D7ad)D7ag(U80*hi'N7`d'N7`g&_100*ji%W7bd%W7bg%H120*hi$A7`d$A7`g#R140*ji"J7bd"J7bg![160*hi T7`d T7`g E1800d.BP0f|4@0fh1PP+200f|4@1ga4@1kf4@1kk4@1lp4A1cv4@1g{4@2j`4@2me4@2dk4@2kp3_2av3_2k{3^3da3^3bg3]3nl3\3or3[3ox3Z3n~3Y4ae3X4hk3W4ar3U4ox3S4k3Q5jf3O5mm3M5cu3J5o|3G6jd3D6kl3@6cu2\6i}2X6i})K6cu)F6kl)B6hd(_5o|([5`u(Y5mm(V5hf(T4h(R4lx(P4ar(N4kk(L4ae(K3l~(J3lx(I3lr(H3ll(G3ag(F3fa(E2h{(E2av(D2hp(D2fk(C2me(C2h`(C1g{(B1cv(B1op(B1kk(B1kf(B1da(C0e|(C0bw(C0gr(C0am(D0bh(D0lb(E/o}(E/ix(F/ds(G/gn(G/ci(H/kc(I.g~(J.cy(K.hs(M.bn(N.kh(O.mb(Q-d}(S-kw(T-kq(V-hk(Y-ie([,k(],ey)@,mr)C,jl)F,cf)I+f)M+jx)Q+lq)V+oj)Z+lc*@*o|*E*`v*L*co*R*co1P*bv1W*o|1]+nc2C+oj2H+oq2M+hx2R+d2V,cf2Y,il2],mr3@,ey3C,h3F-je3H-kk3J-kq3L-kw3N-f}3P.mb3R.kh3S.an3U.js3V.cy3W.d~3Y/hc3Z/ci3Z/gn3[/fs3\/ix3]/l}3^0nb3^0`h3_0bm3_0gr3_0aw4@0f|4@/gt7US0js>O/j;_S-100js>O0jx>N0m}>M1`c>L1gh>J1im>I1lr>H1bx>F1d}>E2nb>C2ch>A2im>@2bs=^2kx=\2c~=Z3kc=X3gi=V3bo=T3`u=R3b{=O4`a=M4ag=J4em=G4ls=D4cz=@5l`<]5eg<Y5`n<U5bu<P5c|<K6bc<F6gj<@6jq;Z6ox;S7b`;L7``3_6ox3W6hq3Q6gj3J6`c3E5c|2_5`u2[5bn2V5eg2R5m`2N4cz2J4ms2G4em2D4ag2A4ba1^3c{1[3bu1Y3`o1W3gi1T3kc1R2c~1P2kx1N2`s1M2im1K2bh1I2lb1H1f}1F1`x1E1nr1C1im1B1gh1@1bc0_0m}0^0hx0]0hs0\0gn0Z0bi0Y0nc0X/j~0W/ey0V/ms0U/en0T/mh0S/ec0R.m}0Q.ax0P.fr0O.jl0N.jf0M.j`0L-fz0K-ns0J-jm0I-of0H-c`0G,ox0F,kq0E,bj0D,fb0C+fz0B+ar0A+di0@+c`/^*gv/]*el/\*fl [*ev Z+`` Y+gi W+br V+ez U,eb T,cj?F,kq?E,ox?D-c`?C-of?B-km?A-ls?A-dz?@.h`>_.hf>^.hl>].dr>\.ax>[.m}>Z/ec>Y/mh>X/en>W/ms>V/dy>U/h~>T0lc>S0ci>Q0gn>P0js>O+i`*M+i`*M+i`*M+i`*M+i`*M+i`*M+i`*M+i`*M+i`*M+i`*M+i`*M+i`*M+i`*M+i`*M+i`*M+i`*M+i`*M+i`*M+i`*M+i`*M+ge*C+mr*B,kb*K,ih*F,mv*Q,iy*M,e|*U-gd*T-fd*_-gk+C-js*_-cr+G-lr+K.fe+Y.`o+Z.gw,K/l`,R/at,U/o,^0oe,^0jh,]0ln,R0lp,I0ln,E0mr,D0ot+\0dr+X0er+S0or+X0dv+Z0gv+T0ft+P0az+U0i{+U0h+R1be+N1ef+F1oi*^1om*Z1gm*X1`p*X1ds*T1`t*V1at*O1mr*Q1es*K1es*D1dv*A1dx)_1dv)_1ot)\1fo)[1do)Z1gv)Z1kw)\1ay)\1fx)Y1nt)P1kl)M1kp)G1gq)E+i`*M+i`*M+i`*M+i`*M+i`*M+i`*M+i`*M+i`*M+i`*M+i`*M+i`*M+i`*M+i`*M+i`*M+i`*M+i`*M+i`*M+i`*M+i`*M+i`*M+ob*E+ad*@+ma)^+ge)Z+lh)V+em)S+ls)R+fy)P,hb)P,hc)T,hg)T,jg)P,hj)R,ki)V,`v)X,lx)X,hy)V-m`)U-dd)V-ii)U-lm)X-j|)Y.be)[.jm)[.nu)].l{)_/ic)^/jh)Y/dl)R/jp)N/aq)M/c})I0fe)P0if)O0ek)O0`n)R0ho)R0ap)O0et)O0lx)R0oz)G0b~)H1f`)J1cg)K1hl)I1hn)G1gq)E1gq)E1gq)E1gq)E1gq)E1gq)E1gq)E1gq)E1gq)E1gq)E1gq)E1gq)E1gq)E1gq)E1gq)E1gq)E1gq)E1gq)E1gq)E1gq)E1ap)D1hn)A1hn(_1nt(Y2b`([2cb(X2ob(T2bb(L2hj(P2dn(P2ip(Q2ir(Q2kr(I2kp(G2ll(G2bj']2jj'Y2fn'W2kr'T2lz'T2n}'U3fb'U3jg'Y3fi'[3nj'[3oj'\3cj'\3jk'_3lj(C3kk(C3oj(E3gi(E3fi(H3gi(K3nj(J3bm(H3am(M3ln(N3fl(N3am(Q3am(U3oj(V3gl(X3ei(\3kd(\3eb(^2n})A2l})C3ia)D3lj)A3ep)@3et)B3hw)G3gy)I3k{)K3k|)M3f})L3e})O3a)O4n`)L4n`)N4gb)M4gc)M4ae)M4oe)M4gh)K4ig)M4ol)M4gh)M4me)O4dc)P4hg)R4ak)S4ko)T4ko)X4dp)Z4gp)T4br)Y4cr)Z4bt)[4bs)]4bs)]4`s)_4lt)_4at)^4nu)]4iz)^4f~*H5ba*H5bd*N5cb*M5ab*Q5ca*M4g~*I4e{*K4e~*O5b`*W5ca*V5bd*[5cf*Z5bf*Y5bh*Y5bf*W5bb*W5`b*V5`c*V5`d*P5`e*P5ah*M5ch*K5bk*N5ak*M5cj*K5`l*I5bm*J5cl*K5`n*P5`p*P5aq*M5bp*H5an*D5`l*A5bf)[5bk)_5ao*B5`q*E5`q*G5du*I5fu*N5et*Q5eu*U5gt*V5gt*Z5ly+C5o{+E5e+F6ib+F6oc+G6od+C6nc+A6`f+C6bf*_6kb*\6kb*X6cf*\6fg*_6eh+B6nk*Y6dn*Z6lp*V6br*W6jt*W6ou*T6dx*V7ea*O7`d*P7lc*M7gc*L7cc*L7kb*L7gb*L7na*L7fa*L7ba*L7i`*L7e`*L6m*L6e*L6`*L6h~*L6d~*L6l}*L6g}*K6nz*H6m~*B6e*B6i*B7b`*B7j`*B7ba*B7ja*B7bb*B7jb*B7bc*B7gc*B7oc*B7bd)L7nc)L7jc)L7fc)L7bc)L7bc)L7nb)L7fb)N7fb)L7ga)I7c`)I6o~)G6ky)K6kt)M6io)M6gk)I6nj)H6dh)E6he)G6ha)G5b~)H5d{)G5ly)G5cz)E5oz)E5my)D5ly)C5m{)B5b}(_5b~)@6n`(]6ed(^6dk(_6hl(V6`m(V6ho(P6np(N6fs(J6kt(E6gs(A6iy(B6e~(@6f}']6m~']6m~'Z7a`'\7ad'\7bd!_7lb!_7mb"B7mb"B7ac"B7ac"B7ec"B7ec"B7jc"B7nc"B7nc"B7bd"B7cd"C7oc"C7nc"C7jc"C7fc"C7fc"C7bc"C7mb"C7mb"C7ib"C7eb"C7eb"C7ab"C7la"C7da"C6k"B6h}"C6`|"E6a|"F6e}"G6n~"I6j}"I6`}"K6e~"L6a}"L6e{"M6d{"N6b}"M6`"O6g}"N6i|"O6g~"R6iy"P6`v"P6es"M6fp"I6io"I6gn"I6`n"H6eo"G6km"C6`l"C6gk"@6gj"@6fk"D6`m"F6kl"F6fk"F6jl"I6cn"J6il"K6kn"L6ko"N6ip"O6op"N6as"R6et"T6iu"T6iu"S6kv"V6iy"Z6a{"Z6k|"\6k}"\6e"Z7l`"\7j`"\7ad"^7cd#A7nc#A7jc#A7jc#A7ec#A7ec#A7ac#A7lb#A7lb#A7hb#A7hb#A7ja#A7ha#C6e#@6a#B6o#C7l`#D7da#F7ic#H7kc#I7oc#I7oc#I7`d#J7cd#V7jc#Y7bd#[7ob#_7`d$C7kb$C7da$C7lb$B7c`$A6j$D6c}$G6i{$I6b{$J6j|$J6e}$I6n~$I6e}$J6d}$L6b{$L6mz$N6n{$N6f$M7``$L7e`$M6n~$N6b|$O6iz$O6hz$Q6i|$R6j}$R6m~$S6k~$S6c}$R6f}$R6bw$S6dx$R6ou$R6du$R6ds$T6mp$W6ap$V6mm$U6jm$V6bo$W6ko$X6dn$Z6il$Z6lk$Y6nj$Y6jb$W6jb$W6jb$W6jb$W6jb$W6jb$W6jb$W6jb$W6jb$W6jb$W6jb$W6jb$W6jb$W6jb$W6jb$W6jb$W6jb$W6jb$W6jb$W6jb$W6ja$U5j}$W5o|$X5g}$Y5n}$Y5i~$X5g$X5h$X6ba$W6ia$X6jb$W6fg$W6fg$W6fg$W6fg$W6fg$W6fg$W6fg$W6fg$W6fg$W6fg$W6fg$W6fg$W6fg$W6fg$W6fg$W6fg$W6fg$W6fg$W6fg$W6fg$W6mf$V6`d$U6nf$U6lf$S6ke$R6be$S6`c$S6hb$U6bb$U6fc$W6fg$W6on$X6on$X6on$X6on$X6on$X6on$X6on$X6on$X6on$X6on$X6on$X6on$X6on$X6on$X6on$X6on$X6on$X6on$X6on$X6on$X6kn$W6ml$W6al$X6fm$Y6on$X6`p$S6`p$S6`p$S6`p$S6`p$S6`p$S6`p$S6`p$S6`p$S6`p$S6`p$S6`p$S6`p$S6`p$S6`p$S6`p$S6`p$S6`p$S6`p$S6`p$S6ho$R6cm$R6gi$T6di$V6lj$V6`n$T6`p$S6ds$R6ds$R6ds$R6ds$R6ds$R6ds$R6ds$R6ds$R6ds$R6ds$R6ds$R6ds$R6ds$R6ds$R6ds$R6ds$R6ds$R6ds$R6ds$R6ds$R6gs$P6cq$P6aq$Q6ko$P6io$Q6hp$R6ds$R6bz$O6bz$O6bz$O6bz$O6bz$O6bz$O6bz$O6bz$O6bz$O6bz$O6bz$O6bz$O6bz$O6bz$O6bz$O6bz$O6bz$O6bz$O6bz$O6bz$O6kt$O6aw$Q6nw$P6ex$Q6bz$O6mu$O6mu$O6mu$O6mu$O6mu$O6mu$O6mu$O6mu$O6mu$O6mu$O6mu$O6mu$O6mu$O6mu$O6mu$O6mu$O6mu$O6mu$O6mu$O6mu$O6hv$N6mu$M6ht$N6es$M6`q$N6cp$O6ht$P6it$O6mu$O6`|"_6`|"_6`|"_6`|"_6`|"_6`|"_6`|"_6`|"_6`|"_6`|"_6`|"_6`|"_6`|"_6`|"_6`|"_6`|"_6`|"_6`|"_6`|"_6`|"_6ky"\6dz#A6b{#@6nz"_6`|"_6dx"_6dx"_6dx"_6dx"_6dx"_6dx"_6dx"_6dx"_6dx"_6dx"_6dx"_6dx"_6dx"_6dx"_6dx"_6dx"_6dx"_6dx"_6dx"_6dx"_6`y"]6bx"\6ix"[6ev"[6ew"Z6ou"X6gs"X6at"Z6hr"Z6iu"]6mu"]6nu"^6`w#@6aw"^6dx"_6`h!]6`h!]6`h!]6`h!]6`h!]6`h!]6`h!]6`h!]6`h!]6`h!]6`h!]6`h!]6`h!]6`h!]6`h!]6`h!]6`h!]6`h!]6`h!]6`h!]6mg!^6fi!_6hh"A6oj!_6mj!^6`h!]6od!Y6od!Y6od!Y6od!Y6od!Y6od!Y6od!Y6od!Y6od!Y6od!Y6od!Y6od!Y6od!Y6od!Y6od!Y6od!Y6od!Y6od!Y6od!Y6od!Y6`f!X6ke!V6jd!W6gb!T6fc!U6od!Y6`d!T6`d!T6`d!T6`d!T6`d!T6`d!T6`d!T6`d!T6`d!T6`d!T6`d!T6`d!T6`d!T6`d!T6`d!T6`d!T6`d!T6`d!T6`d!T6`d!T6kc!T6`a!R6kc!R6`d!T6k`!P6k`!P6k`!P6k`!P6k`!P6k`!P6k`!P6k`!P6k`!P6k`!P6k`!P6k`!P6k`!P6k`!P6k`!P6k`!P6k`!P6k`!P6k`!P6k`!P5e~!O6a`!O6c`!P6k`!P6c`!N6c`!N6c`!N6c`!N6c`!N6c`!N6c`!N6c`!N6c`!N6c`!N6c`!N6c`!N6c`!N6c`!N6c`!N6c`!N6c`!N6c`!N6c`!N6c`!N6d`!N5e!M5g!M6c`!N5f~!H5f~!H5f~!H5f~!H5f~!H5f~!H5f~!H5f~!H5f~!H5f~!H5f~!H5f~!H5f~!H5f~!H5f~!H5f~!H5f~!H5f~!H5f~!H5f~!H5a~!G5i}!H5a~!I5f~!H5g}!F5g}!F5g}!F5g}!F5g}!F5g}!F5g}!F5g}!F5g}!F5g}!F5g}!F5g}!F5g}!F5g}!F5g}!F5g}!F5g}!F5g}!F5g}!F5g}!F5k|!F5i|!E5b}!D5g}!F5f!D5f!D5f!D5f!D5f!D5f!D5f!D5f!D5f!D5f!D5f!D5f!D5f!D5f!D5f!D5f!D5f!D5f!D5f!D5f!D5g!C5k|!A5k|!C5f!D5h| ]5h| ]5h| ]5h| ]5h| ]5h| ]5h| ]5h| ]5h| ]5h| ]5h| ]5h| ]5h| ]5h| ]5h| ]5h| ]5h| ]5h| ]5h| ]5h| ]5fz [5k{ ]5h| ]5m{ [5m{ [5m{ [5m{ [5m{ [5m{ [5m{ [5m{ [5m{ [5m{ [5m{ [5m{ [5m{ [5m{ [5m{ [5m{ [5m{ [5m{ [5m{ [5m{ [5`{ Z5hz Z5j{ [5m{ [5m{ Y5m{ Y5m{ Y5m{ Y5m{ Y5m{ Y5m{ Y5m{ Y5m{ Y5m{ Y5m{ Y5m{ Y5m{ Y5m{ Y5m{ Y5m{ Y5m{ Y5m{ Y5m{ Y5m{ Y5e{ X5dz Y5m{ Y5oz?E5oz?E5oz?E5oz?E5oz?E5oz?E5oz?E5oz?E5oz?E5oz?E5oz?E5oz?E5oz?E5oz?E5oz?E5oz?E5oz?E5oz?E5oz?E5oz?E5fz?E5oy?F5my?G5oz?E5c|?@5c|?@5c|?@5c|?@5c|?@5c|?@5c|?@5c|?@5c|?@5c|?@5c|?@5c|?@5c|?@5c|?@5c|?@5c|?@5c|?@5c|?@5c|?@5c|?@5n{?@5k{>]5mz>_5j{?@5c|?@7ad!V7bd!V7nc!V7oc!V7lc!W7lc!W7ic!W7jc!W7jc!W7gc!W7gc!W7dc!X7ec!X7ac!X7bc!X7cc!X7cc!X7lb!Y7mb!Y7mb!Y7`d![6jy$N6jy$N6jy$N6jy$N6jy$N6jy$N6jy$N6jy$N6jy$N6jy$N6jy$N6jy$N6jy$N6jy$N6jy$N6jy$N6jy$N6jy$N6jy$N6jy$N6gy$L6kz$L6gz$J6`y$K6cy$I6lv$K6`v$R6ex$L6mv$O6jy$N5lz+G5lz+G5lz+G5lz+G5lz+G5lz+G5lz+G5lz+G5lz+G5lz+G5lz+G5lz+G5lz+G5lz+G5lz+G5lz+G5lz+G5lz+G5lz+G5lz+G5my+D5iv+B5er+@5an*\5an*^5ak*\5aj*\5`j+E5`i+E5ai+F5`j+G5bj+H5cg+E5`g+G5bj+J5cf+K5cf+M5ak+O5cm+M5`k+K5co+M5`o+K5er+M5fs+H5gr+E5dt+G5du+E5ds+C5lz+G5`h*P5`h*P5`h*P5`h*P5`h*P5`h*P5`h*P5`h*P5`h*P5`h*P5`h*P5`h*P5`h*P5`h*P5`h*P5`h*P5`h*P5`h*P5`h*P5`h*P5af*O5ae*Q5be*R5`d*T5`f*V5af*Q5`h*P2ct(V2ct(V2ct(V2ct(V2ct(V2ct(V2ct(V2ct(V2ct(V2ct(V2ct(V2ct(V2ct(V2ct(V2ct(V2ct(V2ct(V2ct(V2ct(V2ct(V2bt(Y2nt(Y2gv(\2iu(^2hr)G2bq)H2no)L2gn)I2`o)T2aq)O2mq)O2nw)A2nw([2ct(V2bg)H2bg)H2bg)H2bg)H2bg)H2bg)H2bg)H2bg)H2bg)H2bg)H2bg)H2bg)H2bg)H2bg)H2bg)H2bg)H2bg)H2bg)H2bg)H2bg)H2ff)H2ie)K2je)N2ff)N2ng)L2ng)J2bg)H2cj*G2cj*G2cj*G2cj*G2cj*G2cj*G2cj*G2cj*G2cj*G2cj*G2cj*G2cj*G2cj*G2cj*G2cj*G2cj*G2cj*G2cj*G2cj*G2cj*G2kh*G2og*I2ei*K2aj*K2jj*J2cj*G2gk)R2gk)R2gk)R2gk)R2gk)R2gk)R2gk)R2gk)R2gk)R2gk)R2gk)R2gk)R2gk)R2gk)R2gk)R2gk)R2gk)R2gk)R2gk)R2gk)R2cj)R2kh)T2hh)Z2cg)Z2ih)\2aj)\2jj)]2ei)^2di*C2gk*C2gn)\2gn)V2ll)X2hj)X2kj)V2gk)R1hn)G1hn)G1hn)G1hn)G1hn)G1hn)G1hn)G1hn)G1hn)G1hn)G1hn)G1hn)G1hn)G1hn)G1hn)G1hn)G1hn)G1hn)G1hn)G1hn)G1go)E1em)B1ck)C1jj)A1hl)A1nk(_1fm(]1kl(\1mm(\1gm(Z1mm(Z1in(Z1lr(V1gq(V1or(T1ct(T1`t(T1hu(T1jy(N1ez(O1n{(N1`{(N1l{(I1`}(G1h|(E2ic'^2nb']2ic'\2fd'[2nb'Y2lb'T2ke'K2ih'I2kh'G2kj'C2dk'C2`l'A2bo&]2fs&_2`t&_2dv&_2g|&X2d|&X2l}&X2j~&U2f&U2g&T3``&T3ka&T3ha&T3eb&S3cc&R3id&Q3af&O3nj&L3fp&J3bq&H3oq&G3oq&E3dl&G3ig&K3kd&K3`c&N3ha&N3ja&N2i~&O2o}&P2mz&Q2h{&R2ey&S2ow&R2lw&R2c}&K3o`&K3cc&I3eb&I3fe&D3de&G3bf&F3hg&G3gi&E3gi&E3ik&B3am&B3lr%_3av%^3dx%]3oz%X3lz%V3d}%V4o`%R4gb%R4ec%Q4oe%P4`e%R4hf%R4kg%R4ig%Q4kf%P4dh%N4ak%M4im%M4jn%L4fp%L4`r%N4iw%K4e}%M5`d%N5ae%M5bf%N5bi%L5`m%L5bm%N5bk%N5ak%O5ai%O5cj%P5ao%Q5ap%O5er%O5bq%N5bq%L5dr%N5du%N5eu%M5es%M5ds%L5du%L5jw%J5gu%I5jv%F5iw%I5kw%C5oy%C5m{%B5f%D5d%A6lc$_6jb$]6af$\6fg$]6gg$Z6eh$Z6bm$]6nj$Y5bn%N5bn%N5bn%N5bn%N5bn%N5bn%N5bn%N5bn%N5bn%N5bn%N5bn%N5bn%N5bn%N5bn%N5bn%N5bn%N5bn%N5bn%N5bn%N5bn%N5an%M5bp%H5bq%F5fr%F5hv%A5hw%A5iw%B5fu%F5et%I5fr%J5ap%M5bn%N4fq&L4fq&L4fq&L4fq&L4fq&L4fq&L4fq&L4fq&L4fq&L4fq&L4fq&L4fq&L4fq&L4fq&L4fq&L4fq&L4fq&L4fq&L4fq&L4fq&L4gp&K4fq&J4br&J4cs&I4ct&I4bs&J4ct&K4fq&L4d})P4d})P4d})P4d})P4d})P4d})P4d})P4d})P4d})P4d})P4d})P4d})P4d})P4d})P4d})P4d})P4d})P4d})P4d})P4d})P4jz)N4ky)I4hy)E4kz)E4f|)H4g|)I4e{)K4f})L4d~)P4d})P4cw)E4cw)E4cw)E4cw)E4cw)E4cw)E4cw)E4cw)E4cw)E4cw)E4cw)E4cw)E4cw)E4cw)E4cw)E4cw)E4cw)E4cw)E4cw)E4cw)E4mt)B4bt)A4as)@4ar(\4as(\4bs([4ct(Z4mt(\4bt(]4nt(_4lv)A4`v)C4lv)C4cw)E5cg(I5cg(I5cg(I5cg(I5cg(I5cg(I5cg(I5cg(I5cg(I5cg(I5cg(I5cg(I5cg(I5cg(I5cg(I5cg(I5cg(I5cg(I5cg(I5cg(I5lf(G5ch(G5hg(G5cg(E5gg(C5ci(E5bj(F5`k(I5al(J5cn(J5jn(L5cm(K5cn(L5am(M5hn(N5mo(M5`p(N5kn(P5ao(Q5bo(R5bl(S5kk(T5`l(V5bj(W5kf(V5ce(X5be(_5bd(_5bd)A5bb)A5`b)C4d~)C4f~)A5`a)@5`a(_4e~(_4ky(^4kx(\4g|(\4f|([4g{(Z4e{(Z4f~([5b`([5ba(Z5ia(Y5kb(V5ab(U5ca(U4h(T5h`(T4g}(R4lv(S4at(Q4`t(P4nv(N4d{(P4e|(O5aa(Q4h}(N5a`(O5jc(P5hc(R5hb(R5ad(S5ed(U5gc(V5ed(X5ke(V5ae(U5ef(U5if(S5`f(R5ff(O5eg(M5ii(O5ei(M5bh(K5cg(I5gu'V5gu'V5gu'V5gu'V5gu'V5gu'V5gu'V5gu'V5gu'V5gu'V5gu'V5gu'V5gu'V5gu'V5gu'V5gu'V5gu'V5gu'V5gu'V5gu'V5hv'X5k{'W5b}'V6e`'U6kb'T6dc'T6ld'T6be'U6jf'U6af'S6bg'S6gg'T6fh'S6gg'R6ge'R6af'P6ia'O6da'R6f`'P6a`'Q5j{'S5i}'T5b{'U5oy'T5mz'V5oy'V5hx'V5gw'V5gu'V6cb'J6cb'J6cb'J6cb'J6cb'J6cb'J6cb'J6cb'J6cb'J6cb'J6cb'J6cb'J6cb'J6cb'J6cb'J6cb'J6cb'J6cb'J6cb'J6cb'J6`a'K5k'K6i`'L5d~'M5e'N5j}'N5e}'M5a{'M5gz'O5jy'P5mw'P5`v'R5ot'Q5lt'S5mu'S5ow'R5nw'Q5kx'Q5mz'P5h}'P5e{'O5d}'O5f~'O6d`'O6ma'M6cb'J7m`&]7m`&]7m`&]7m`&]7m`&]7m`&]7m`&]7m`&]7m`&]7m`&]7m`&]7m`&]7m`&]7m`&]7m`&]7m`&]7m`&]7m`&]7m`&]7m`&]7jb&W7fa&W7o`&U7hb&V7nb&T7a`&Q6c&P6`~&N6e}&R6i~&R6o&T6f&U6n&X7f`&X7g`&[6m&\7m`&]2ik"V2ik"V2ik"V2ik"V2ik"V2ik"V2ik"V2ik"V2ik"V2ik"V2ik"V2ik"V2ik"V2ik"V2ik"V2ik"V2ik"V2ik"V2ik"V2ik"V2bl"W2cl"X2ao"W2`o"V2dn"V2im"U2bl"U2ik"V2mo"T2mo"T2mo"T2mo"T2mo"T2mo"T2mo"T2mo"T2mo"T2mo"T2mo"T2mo"T2mo"T2mo"T2mo"T2mo"T2mo"T2mo"T2mo"T2mo"T2jp"S2bq"S2`q"T2kp"T2mo"U2mo"T2mq"R2mq"R2mq"R2mq"R2mq"R2mq"R2mq"R2mq"R2mq"R2mq"R2mq"R2mq"R2mq"R2mq"R2mq"R2mq"R2mq"R2mq"R2mq"R2mq"R2jq"R2hq"T2lq"T2br"R2mq"R2`r"O2`r"O2`r"O2`r"O2`r"O2`r"O2`r"O2`r"O2`r"O2`r"O2`r"O2`r"O2`r"O2`r"O2`r"O2`r"O2`r"O2`r"O2`r"O2`r"O2lr"O2nr"P2fr"P2`r"O2gt"J2gt"J2gt"J2gt"J2gt"J2gt"J2gt"J2gt"J2gt"J2gt"J2gt"J2gt"J2gt"J2gt"J2gt"J2gt"J2gt"J2gt"J2gt"J2gt"J2lt"K2ht"L2ct"K2gt"J/hg?D/hg?D/hg?D/hg?D/hg?D/hg?D/hg?D/hg?D/hg?D/hg?D/hg?D/hg?D/hg?D/hg?D/hg?D/hg?D/hg?D/hg?D/hg?D/hg?D/kg?C/`g?C/jg?B/eg?A/de?@/fd?@/ed?A/ed?C/me?D/bg?D/hg?D-bi?D-bi?D-bi?D-bi?D-bi?D-bi?D-bi?D-bi?D-bi?D-bi?D-bi?D-bi?D-bi?D-bi?D-bi?D-bi?D-bi?D-bi?D-bi?D-bi?D-li?C-ji?A-kg>_-`h>_-ch>]-`l>]-ol>[-dj>\-mj>[-cl>Z-om>Y-fp>Y-`q>X-as>V-cs>T-op>U-oo>U-el>X-nl>Y-ok>Y-ek>Y-lh>Z-bg>Y-ad>Y-eb>W-ba>W-o`>X,c>Z,h{>Z,hz>[,f|>]-`a?@-fa>_-ac?@-mb?A-`d?B-nd?A-de?C-eg?D-ah?D-bi?D,cy>W,cy>W,cy>W,cy>W,cy>W,cy>W,cy>W,cy>W,cy>W,cy>W,cy>W,cy>W,cy>W,cy>W,cy>W,cy>W,cy>W,cy>W,cy>W,cy>W,j{>W,k{>V,c}>V,c|>T,g}>T,j}>S,l~>T,c~>R,g|>R,iz>P,mx>P,gt>L,fr>I,mp>G,io>G,lm>F,il>D,kj>B,lh>C,mh>E,ji>E,fh>F,nh>G,bh>J,hi>N,en>P,mo>P,gq>Q,fr>T,cs>T,ds>T,`t>T,mv>V,cy>W,kw<R,kw<R,kw<R,kw<R,kw<R,kw<R,kw<R,kw<R,kw<R,kw<R,kw<R,kw<R,kw<R,kw<R,kw<R,kw<R,kw<R,kw<R,kw<R,kw<R,iz<R,m|<R,h}<Q,n|<O,o|<M,m{<M,j}<I,k}<G,jz<H,mx<I,`v<J,`t<K,bs<K,gr<L,nr<M,dt<N,ft<O,`v<P,cv<P,nu<Q,et<Q,dt<R,bv<R,kw<Q,mx<R,kw<R-ej<V-ej<V-ej<V-ej<V-ej<V-ej<V-ej<V-ej<V-ej<V-ej<V-ej<V-ej<V-ej<V-ej<V-ej<V-ej<V-ej<V-ej<V-ej<V-ej<V-bi<U-jh<T-jh<R-oe<P-od<K-fd<K-fd<L-bc<L-kc<J-af<I-de<H-af<G-ag<H-dh<H-`g<F-cf<F-dd<D-ne;_-fe;^-ag;\-ej;Y-gk;Y-in;X-co;U-gp;V-js;U-jp;T-jp;Q-ar;R-oq;S-ns;S-fu;T-jv;T-ov;T-iw;U-ey;T-hw;T-mu;S-iu;R-ft;P-mr;P-ar;O-gq;O-cq;O-kq;M-br;M-fr;N-`t;N-ku;L-dx;K-hx;L-dy;L-gy;J-bz;J-jz;I-`z;I-az;H-f{;G-jz;F-lz;F-k|;C-e|;C-d|:_-j|:^-n{:[-lz:[-`z:X-az:T-jw:O-lu:N-nt:M-eu:K-gu:I-gu:E-et:C-ms:C-cs:B-bs:A-`r:A-bq9_-cq9[-cq9[-ks9X-ks9W-lv9W-mv9X-ow9X-oz9X-l{9Y-j}9X-k~9W.`e9V.li9T.dm9R.hm9R.`m9S.on9R.nn9S.em9T.gn9T.ip9S.js9R.gu9R.fv9S.ew9S.fy9S.ez9T.ax9T.jy9U.bz9U.g{9V.l}9[.n}9[.l}9\.h~:@.j~:A.d:B.n:D/ba:G/eb:I/ic:I/dd:K/of:J/aj:L/`j:M/`g:N/aj:N/ki:P/dj:P/im:R/jn:R/fo:S/hn:T/mp:T/`q:U/jp:U/hp:W/hr:W/oq:W/bq:X/kp:Y/co:Y/gn:Z/ml:Z/mm:[/in:[/jm:^/co:^/ko:]/dr:_/dr;A/fs;@/ht;A/`u;B/bv;B/lv;F/ow;F/cx;D/ox;D/fy;F/ex;G/ex;H/fw;H/dw;J/cv;M/dv;N/gv;O/ju;O/jt;P/lt;Q/cv;P/ev;Q/au;R/bt;Q/is;R/bs;Q/cs;O/bq;O/cq;O/kp;O/mo;O/fn;N/fn;N/ak;R/gk;R/di;U/di;V/ah;X/fg;X/bf;Z/lf;]/jm;_/dn;_/lq;_/kv;_/jv<@/cy<@/dz<B/ey<B/lv<C/jv<C/gu<C/ls<E/er<E/`r<E/bo<E/`o<F/jo<F/lo<G/in<I/kl<I/ej<J/di<J/ch<J/ah<K/`f<L/dd<L/eb<L/ca<N.d<S.b|<T.jy<T.fx<U.dy<V.my<V.ax<W.ax<X.jw<X.nu<X.dt<Z.ht<[.`r<].ip<].gp<].bo<^.kn<^.hj<_.of<_.dd=@.mb<_.ea<_-j<^-f~<^-az<\-ey<[-kx<[-kw<Z-js<X-aq<X-ml<V-gl<V-ej<V+h|5^+h|5^+h|5^+h|5^+h|5^+h|5^+h|5^+h|5^+h|5^+h|5^+h|5^+h|5^+h|5^+h|5^+h|5^+h|5^+h|5^+h|5^+h|5^+h|5^+j}5]+m|5[+o}5Z+i}5Z+b5Y+g{5X+jz5X+i|5Y+hz5Y+d|5Z+`|5[+k{5[+h|5^.ln3Y.ln3Y.ln3Y.ln3Y.ln3Y.ln3Y.ln3Y.ln3Y.ln3Y.ln3Y.ln3Y.ln3Y.ln3Y.ln3Y.ln3Y.ln3Y.ln3Y.ln3Y.ln3Y.ln3Y.oo3Y.hp3^.hs3_.nx4@.o}4A/l`4B/cd4C/kg4C/ei4E/il4D/il4E/ek4E/gk4E/nl4F/js4E/jv4C/kv4B/ju4B/gu4A/ls4B/mr4A/fs4@/or3_/oq4@/ip4@/io4@/`o4A/ln4@/mm3_/kn3^/hm3^/nl3^/dl3^/am3]/el3\/dj3]/aj3\/el3[/hk3Y/ej3V/mh3V/bh3U/jd3U/gc3U/ja3U/i`3V.o3U.`3V.f}3U.f}3T.m{3T.k{3S.iy3S.fx3S.ev3T.ds3T.nq3T.oo3U.do3W.in3W.ln3Y1dq6X1dq6X1dq6X1dq6X1dq6X1dq6X1dq6X1dq6X1dq6X1dq6X1dq6X1dq6X1dq6X1dq6X1dq6X1dq6X1dq6X1dq6X1dq6X1dq6X1lo6X1lo6V1kn6V1gm6V1il6V1`i6W1ag6W1df6Y1bg6Z1bi6\1jj6\1il6[1lm6[1ho6Z1gp6Y1eq6Y1dq6X3mk2V3mk2V3mk2V3mk2V3mk2V3mk2V3mk2V3mk2V3mk2V3mk2V3mk2V3mk2V3mk2V3mk2V3mk2V3mk2V3mk2V3mk2V3mk2V3mk2V3ck2U3dh2W3df2Y3nd2Y3la2[2j~2\2n{2^2hw3@2aw3A2es3C2ir3D2ir3C2bo3C2`l3D2cl3D2di3G2cf3H2cc3I2ia3J2hb3K2ab3K2n`3K2a`3M1e3M1h~3O1n}3O1h|3R1lz3S1dz3T1ky3T1ox3T1fx3S1jw3R1iw3T1ot3U1ht3W1jt3X1ku3[1ku3\1`v3^1mu4@1ev4A1bv4C1`w4G1nw4G1bx4I1kw4J1ms4I1ms4J1es4J1lr4I1kp4H1om4F1fm4E1`k4E1ci4C1`f4C1kd4A1bc4A1cb3_0m3^0k3\0o}3[0j{3W0lv3S0hs3P0`s3O0`r3O0hq3N0gp3K0ko3K0en3K0ch3F0`d3H0e`3H/c{3I/b{3K/`z3L/nx3K/aq3K/kp3K/kp3K/jo3K/io3L/in3L/jm3K/im3L/hi3M/ki3K/eg3G/ff3C/be3B.n2\.n2[.l~2[.c~2[.i|2].k{2\.e{2].jx2].ix2^.kw2].jv2^.ft2].et2^.nr2].bp2Z.go2X.im2V.fm2W.mf2V.fc2S-g}2O-c|2M-my2L-fu2F-fu2D-bt2D-bt2A-js2A-hs2@-os1^-hs1^-ks1[-os1Z-or1W-or1U-nq1T-mq1R-er1R-nr1P-os1O-fs1O-eu1O-`x1N-by1O-m{1O.k`1L.`b1L.fh1H.ll1F.bu1D.dv1D.iw1D.gx1C.k|1B.j1A/fd0^/kh0]/ai0^/lj0^/gl0^/dr1@/du1C/mw1C/hz1C/j}1A/g~1A/j~1B0l`1B0nc1@0jf0_0cg1@0fg0_0hi0^0ij0]0al0\0hn0Y0`o0Y0bo0X0hq0V0lr0V0fs0U0nt0U0lu0W0ov0V0gw0V0ew0X0fx0W0jx0X0n{0X0l|0Y0l|0Y0c~0X0h0Y1m`0X1ja0X1cb0W1la0W1kb0U1cc0U1dc0T1`c0T1cc0P1dd0P1id0M1kf0L1ch0H1lg0C1gf0@1he/^1md/\1fd/Z1ac/Y1ac/X1kd/T1jd/P1ib/J1dd/E1dg/B1ci.^1ii._1oj.\1ok.\1gl.Z1gm.Z1lm.Z1fq.Y1ir.W1ht.W1eu.V1au.U1hu.U1lu.T1cw.S1kw.R1`y.Q1b{.P1i|.Q1m}.Q1a.O2a`.O2bc.Q2be.Q2hh.S2il.R2bo.R2kq.P2`q.P2kr.O2ou.Q2`w.R2ay.S2fy.R2c}.U3k`.V3ja.W3gb.X3df.[3ig.^3ni/A3im/D3jp/C3et/E3ax/H3fy/K3h~/N3j/O3b~/Q3c~/T3e~/V3b~/Z3a/[4f`/]4da0@4ac0H4lb0I4dc0K4ob0L4nc0O4lb0Q4hc0Q4`c0S4bc0U4be0X4ce0Y4jb0Z4nc0[4oc0\4m`0[3a0[3n}0\3o|0\3o|0\3k{0[3cz0Y3gx0Z3gy0[3hx0]3jw0]3bw0^3jv1@3dv1B3mt1G3`q1I3`p1M3bm1Q3go1T3mq1S3is1S3bu1T3iu1W3av1\3at1]3mr2@3or2B3nq2C3nq2E3go2N3no2O3lo2Q3np2Q3`q2S3gp2U3el2V3el2V3el2V3el2V3el2V3el2V3el2V3el2V3el2V3el2V3el2V3el2V3el2V3el2V3el2V3el2V3el2V3el2V3el2V3el2V3gi2X3ag2X3hc2[3cf2[3kf2[3hk2]3af2\3cf2]2i}3C2h|3C2lz3D2dy3F2mu3H2`t3H2jr3H2er3H2do3J2bo3J2`o3K2kp3L2ih3O2lf3Q2gh3Q2nb3R2ab3R1b}3S1g|3S1iy3T1jy3X1k{3Z1h{3]1c|3^1f}4@1c}4A1n~4C2ma4L2cd4L2ke4R2je4S2ef4T2jg4T2ah4W2nj4X2ek4[2en4[2bp4\2jo4\2do4]2ku5@2hu5@2lx4^2`z4Y2i}4W3i`4W2dz4Q2hz4M2`z4K2jz4J2b{4I2b}4J2m4J3j`4I2h~4H2e|4H3a`4F3na4F3ie4A3ie4@3`k4A3fl4@3el4B3mm4C3lm4D3dm4D3im4C3dl4E3ml4F3`h4I3bf4I3ha4S3hc4W3hc4W3`c4Y2g4Y2d}5E2l}5V2i|5S2g|5U2bz5U2kv5Z2kv5[2aw5]2`u5Z2dp5_2mq6B2mt6C2mo6D2gn6C2lb6F1c}6H1kw6J1`o6O1nl6Q1jm6R1io6S1cp6U1kp6T1lr6V1mr6W1iw6W1jz6X1c{6W1d6Y2jb6Y2`b6Z2lb6X2dc6X2oc6[2ic6\2kd6]2ge6]2ki7B2dl7E2dn7I2gp7J2mq7J2mr7K2js7S2dv7V2gv7V2oo7Y2en7[2cn7\2ng7_2mb7^2kb8A2fe8E2kf8E2kb8G1k~8H1a|8I1i}8I1cy8J1by8J1dw8K1`r8J1`r8K1ao8I1fl8I1om8I1hg8O1dd8O0k8Q0f8Q0fz8W0gz8Y0a8W1ed8W1mi8R1bj8P1fj8O1gp8M1dp8L1g{8M1o{8P1gy8P1dy8S1dt8W1ds8X1os8X1cr8[1`n8[1nu9F1dz9H2ca9F2ki8^2bm8]2ms9F2hr9I2iq9H2nn9I2oo9J2oo9J2`q9J2hu9U2dv9V2ku9V2jv9W2bv9X2ov9X2dw9[2ey9Z2nz9_2e{9_2o{9_2m{:@2o{:@2d|:A2k|:@2k|:A2c}:A2o}:A2o}:B2j~:B2o~:B2f~:C2b:C3b`:C3n`:C3ba:D3bb:C3kb:D3ha:D3ab:E3kb:D3kc:E3cf:F3fg:G3lf:H3jf:G3gf:G3cg:H3cg:H3fh:H3di:I3ni:H3cj:H3ei:I3ek:I3nj:H3al:J3kl:H3em:H3gm:G3ol:F3ml:F3lm:F3fm:E3jm:E3km:F3hn:H3co:I3ep:I3mq:G3br:F3or:F3er:G3dr:H3nq:I3nr:I3is:H3at:H3lt:G3ez:E3h{:C3k|:B3h:E4g`:D4j`:E4b`:E4f`:F4ga:F4dc:J4hb:K4fc:K4kd:K4ae:J4od:H4bf:F4hd:D4kc:C4ic:B4id:A4le:B4kg9^4ij9^4oj:A4hm:D4cq:G4ko:J4nl:H4ni:I4em:P4em:P4el:S4ag:Q4gf:U4ec:W4mb:U3o:V3kz:U3iz:V3`{:]3n:^3m:^4hc:^4mh:[4`k:V4am:Y4kp:^4or:^4fs:^4nu;A4m;E4dw;C4hz;N5bd;U5en;[5gt;\5iw;\5c};^6cc;^6dg;[6gg;W6bd;S6eh;T6de;R6hh;R6ji;M6`s;V6ky;[6e{;\6oz;_6e|;_6g~;_7a`<B6l{<K7b`<J6e<K7a`<L7aa<L7a`<O7ca<Q7g`<Q7m`<S7jb<T7ha<X7ea<W7ga<X7na<X7ca<Z7b`<Z6j<\6d<Y6n}<Y6j<\6e~<^6k<_6o~=A6k=A6d<_7ca=C7aa=A7ad=B7nc=T7dc=T7ob=S7ab=S7ka=R7aa=R7h`=R6n=Q6d=Q6o~=P6a~=P6k}=O6a}=O6h|=O6n{=N6d{=N6dx=J6mx=I6gx=H6ev=I6iz=F6mj=E6d`=G5hz=H5dx=I5c|=L5`~=N6fb=Q6hd=Q6ch=T6oh=T6ih=V6ji=W6ml=V6ip=X6ko=Y6jp=Z6es=Z6bs=Y6nu=Z6ix=Z6fy=X6mx=X6hy=W7bd=[7`c=_7ec=_7ic=_7jc=_7oc=_7cd=_3fy;B3fy;B3fy;B3fy;B3fy;B3fy;B3fy;B3fy;B3fy;B3fy;B3fy;B3fy;B3fy;B3fy;B3fy;B3fy;B3fy;B3fy;B3fy;B3fy;B3jx;B3fw;C3`x;D3nw;D3bw;D3`w;D3ov;C3ov;D3iu;E3ls;D3gr;C3ar;C3jp;C3cq;B3jp;B3kp;B3jo;A3hp;B3cq;A3gq;A3dq;B3nq;A3aq;A3fp;A3ip;@3jp;@3gq;@3as;@3nt;A3jt;A3eu;A3iv;@3dv;@3gu;@3it;@3kt:_3ht:_3it:_3bw:^3fy;B3ky;G3ky;G3ky;G3ky;G3ky;G3ky;G3ky;G3ky;G3ky;G3ky;G3ky;G3ky;G3ky;G3ky;G3ky;G3ky;G3ky;G3ky;G3ky;G3ky;G3ix;H3ey;I3cz;I3gz;J3my;L3jx;L3lv;K3ow;I3ow;H3gu;G3`u;G3iw;F3dx;G3ky;G3ey;B3ey;B3ey;B3ey;B3ey;B3ey;B3ey;B3ey;B3ey;B3ey;B3ey;B3ey;B3ey;B3ey;B3ey;B3ey;B3ey;B3ey;B3ey;B3ey;B3jz;B3kz;C3m};G3l~;K3f~;O3l~;P3l;P4lb;R4hd;R4be;S4hc;S4ob;R4kb;S4`c;T4cd;V4df;X4bg;Y4hk;[4il;[4fm;Z4dn;[4hp;[4jp;[4`r;\4cr;\4hp;]4fq;]4lp;^4er;^4oq;_4es<@4jr;^4lr;_4ho;_4bm<@4jk<@4lh;_4hg;_4bh;^4jf;]4bc;]4n`;\3m~;]3m};\3`};\3f|;Z3i};Z3i~;[3n~;X3d};Z3m};Y3c{;W3n|;W3l|;W3`{;V3c{;R3m{;R3i|;R3h|;R3b{;Q3iz;R3ey;R3jw;O3fy;M3b{;N3i{;N3f{;M3n{;L3oy;F3jz;F3cz;E3gy;E3ey;B4ot<C4ot<C4ot<C4ot<C4ot<C4ot<C4ot<C4ot<C4ot<C4ot<C4ot<C4ot<C4ot<C4ot<C4ot<C4ot<C4ot<C4ot<C4ot<C4ot<C4ew;_4bv;]4cw;\4aw;\4nu;[4fu;\4du;]4et;^4os;]4gt;\4nr;[4ds;[4mt;[4av;Z4fw;Z4ix;\4gy;[4my;\4`y;^4`z;_4j{;^4m{;_4g;_5aa;_5bb<@4h}<D4o{<G4j}<I4k{<H4hy<J4hx<G4dx<F4hw<E4mu<D4ot<C2os:F2os:F2os:F2os:F2os:F2os:F2os:F2os:F2os:F2os:F2os:F2os:F2os:F2os:F2os:F2os:F2os:F2os:F2os:F2os:F2bv:G2gv:G2fx:H2n{:I2i|:I2c}:I2o}:H2g}:G2a}:G2cy:D2gw:D2mu:E2au:F2os:F0jr;U0jr;U0jr;U0jr;U0jr;U0jr;U0jr;U0jr;U0jr;U0jr;U0jr;U0jr;U0jr;U0jr;U0jr;U0jr;U0jr;U0jr;U0jr;U0jr;U0jp;Z0mp;[0no;]0hl<F0kl<F0cl<F0oi<J0bh<J0ah<K0lf<P0je<P0nd<P0md<N0lc<N0mc<N0kb<N0aa<Q/j<Q/d<R/a~<R/a~<T/m|<T/e|<V/n{<U/mz<X/iz<W/`z<X/hy<W/cz<U/ez<V/e{<Q/g{<P/d~<M0aa<K0db<G0ma<F0eb<E0ba<E0k`<D0a`<C/a<D/e~<D/h}<B/o};]0h`;[0``;X0``;X0b`;T0ba;U0`b;V0ob;V0mb;X0fc;W0dc;X0`d;W0kd;W0ke;V0kf;V0bh;U0ji;Y0li;R0hj;P0mj;M0bl;L0gl;J0jm;I0ok;H0kk;G0`m;G0cm;G0mm;G0lm;G0ao;F0ao;E0ko;E0ko;F0eo;G0fp;H0cp;I0mp;J0lp;F0lp;F0dr;E0bs;C0lr;C0et;A0ks;B0mt;D0`v;F0lu;G0`u;I0cu;J0es;K0gr;J0ip;K0ln;L0`p;L0bp;L0on;L0`o;M0`n;M0km;N0om;N0no;P0np;Q0jq;S0ar;S0mr;U0jr;U0lz9L0lz9L0lz9L0lz9L0lz9L0lz9L0lz9L0lz9L0lz9L0lz9L0lz9L0lz9L0lz9L0lz9L0lz9L0lz9L0lz9L0lz9L0lz9L0lz9L0a~9M0e9Q1mb9T1ec9T1id9W1oc9V1be9Y1de9X1bf9X1me9Y1ch9Z1gh9Z1oi9[1kh9[1oi9\1gh9]1bh9^1jg9^1lf9^1`g9_1df9_1hf:@1je:B1be:B1bd9_1cc:@1lb9^1o`9^0n9]0m|9_0f|9^0gy:A0`y9_0bv9]0lu9^0fr9Z0gr9Z0aq9[0cm9Y0jk9U0cm9U0mm9T0im9S0kn9Q0im9P0nm9O0am9N0ln9N0ln9J0is9I0ks9G0lv9G0lx9F0b|9G0e{9I0lz9L0of8]0of8]0of8]0of8]0of8]0of8]0of8]0of8]0of8]0of8]0of8]0of8]0of8]0of8]0of8]0of8]0of8]0of8]0of8]0of8]0ch8\0eg8\0og8Z0lf8[0of8Z0al8T0am8T0aq8P0jq8P0ls8O0lt8O0bv8M0mv8M0gw8K0c{8J0m|8H0g}8G0j~8G1n`8E1n`8D1hd8A1le8A1bf8A1`e8D1be8G1nb8I1ab8I0l~8N0d~8N0b|8P0n|8P0l|8Q0nv8X0jv8W0bv8X0au8W0dt8Z0`q8[0ip8]0cn8^0dm8^0ll8^0il8^0of8]0og:D0og:D0og:D0og:D0og:D0og:D0og:D0og:D0og:D0og:D0og:D0og:D0og:D0og:D0og:D0og:D0og:D0og:D0og:D0og:D0ai:E0gj:E0cn:D0`o:E0no:F0jo:G0en:G0om:F0cl:H0fj:H0li:J0mi:J0dj:J0oi:K0lj:L0ak:L0mk:L0hk:L0em:J0en:K0hq:N0kt:L0kt:L0bt:M0ot:M0eu:M0lt:I0bs:G0as:F0kt:E0et:E0nu:D0ov:D0`x:F0ax:E0fw:M0gw:N0cx:P0lz:S0d{:R0by:O0iy:I0fz:H0dz:G0lx:F0fy:E0dw:D0cu:C0os:B0jq:B0mo:B0no:A0fo:A0eo:A0gm:A0om:B0bl:C0gh:B0kg:C0og:D0jf8^0jf8^0jf8^0jf8^0jf8^0jf8^0jf8^0jf8^0jf8^0jf8^0jf8^0jf8^0jf8^0jf8^0jf8^0jf8^0jf8^0jf8^0jf8^0jf8^0oe9D0id9E0bd9J0de9K0he9L0nd9L0mc9P0gc9P0`c9S0kc9S0bd9T0`d9Q0jc9P0gc9P0oa9Q0ab9T0ia9U0m`9U0o`9V0aa9W0``9X/b9W0m`9U/b9U0d`9R0b`9P0ma9E0ha9E0nb8_0oc8_0dd8]0jf8^1mg:U1mg:U1mg:U1mg:U1mg:U1mg:U1mg:U1mg:U1mg:U1mg:U1mg:U1mg:U1mg:U1mg:U1mg:U1mg:U1mg:U1mg:U1mg:U1mg:U1ii:U1jj:V1dn:U1co:U1jq:S1ko:S1ko:R1on:R1go:Q1mm:Q1bn:P1cm:O1bm:O1kl:N1ll:O1gn:N1kn:M1nm:M1`n:M1cm:L1jl:J1kj:I1cj:I1ji:J1mk:K1lk:L1`k:L1ak:K1lk:M1dk:M1oj:M1`l:N1lj:P1ni:O1bi:O1bh:O1jf:R1fg:R1dg:S1`g:S1kf:R1me:S1`g:T1lg:T1mh:S1nj:T1hi:U1di:U1mg:U1by:O1by:O1by:O1by:O1by:O1by:O1by:O1by:O1by:O1by:O1by:O1by:O1by:O1by:O1by:O1by:O1by:O1by:O1by:O1by:O1jz:M1b{:M1b|:M1a}:K1e|:K1nz:K1b|:J1a}:I1`|:H1m}:F1i~:G1d:F1e~:F1f~:E1k:D2ob:C2ad:D2mb:E2gc:E2aj:F2gj:G2di:J2bj:J2di:K2jh:J2nf:J2hf:K2me:K2fc:J2gb:H2`b:I2n`:H1i}:I1n|:J1l}:K1m}:L1c}:L1o|:L1j|:M1f}:M1b|:O1d}:P1j|:P1m{:P1b|:O1e|:N1m{:N1`y:P1by:O1ay:P1ay:P1ay:P1ay:P1ay:P1ay:P1ay:P1ay:P1ay:P1ay:P1ay:P1ay:P1ay:P1ay:P1ay:P1ay:P1ay:P1ay:P1ay:P1ay:P1ow:P1mv:R1iu:Q1ev:P1gt:P1mt:Q1ns:Q1fr:Q1br:R1bs:R1jr:R1lr:S1at:R1iu:R1ku:R1cu:R1cu:S1jw:S1gy:R1ay:P1`r:K1`r:K1`r:K1`r:K1`r:K1`r:K1`r:K1`r:K1`r:K1`r:K1`r:K1`r:K1`r:K1`r:K1`r:K1`r:K1`r:K1`r:K1`r:K1`r:K1`r:K1er:L1jt:L1et:N1dt:N1lp:M1fp:M1ho:M1dq:K1`r:K1bv:O1bv:O1bv:O1bv:O1bv:O1bv:O1bv:O1bv:O1bv:O1bv:O1bv:O1bv:O1bv:O1bv:O1bv:O1bv:O1bv:O1bv:O1bv:O1bv:O1nr:O1br:N1fp:M1bv:O1nq:O1nq:O1nq:O1nq:O1nq:O1nq:O1nq:O1nq:O1nq:O1nq:O1nq:O1nq:O1nq:O1nq:O1nq:O1nq:O1nq:O1nq:O1nq:O1nq:O1br:O1gr:O1er:P1`r:Q1dq:Q1`q:O1iq:O1nq:O1gm9\1gm9\1gm9\1gm9\1gm9\1gm9\1gm9\1gm9\1gm9\1gm9\1gm9\1gm9\1gm9\1gm9\1gm9\1gm9\1gm9\1gm9\1gm9\1gm9\1ln9_1jo9_1lo:@1`q:A1mq:A1ar:B1or:B1bs:C1ks:C1av:C1ks:B1`p9_1cp9^1gm9\1cs:I1cs:I1cs:I1cs:I1cs:I1cs:I1cs:I1cs:I1cs:I1cs:I1cs:I1cs:I1cs:I1cs:I1cs:I1cs:I1cs:I1cs:I1cs:I1cs:I1mv:J1bw:I1hw:J1fv:K1hv:L1av:L1hv:M1du:M1dt:L1cs:I1n{:E1n{:E1n{:E1n{:E1n{:E1n{:E1n{:E1n{:E1n{:E1n{:E1n{:E1n{:E1n{:E1n{:E1n{:E1n{:E1n{:E1n{:E1n{:E1n{:E1`x:H1gy:H1cy:H1m{:G1n{:E4dh4C4dh4C4dh4C4dh4C4dh4C4dh4C4dh4C4dh4C4dh4C4dh4C4dh4C4dh4C4dh4C4dh4C4dh4C4dh4C4dh4C4dh4C4dh4C4dh4C4ij4C4an4D4nn4E4kn4F4lo4F4oo4D4ix3_4i{3_4d~3]4f3^5nb3_5mf4F5gh4H5dg4L5bh4L5mf4N5ib4M5ia4L5cb4J5ka4I4o4H4j~4I4e~4I4o~4F4o}4F4e}4H4g|4H4bz4I4by4I4by4J4ax4K4fw4M4gu4L4`s4M4hq4N4ep4N4fp4O4op4O4lo4P4gp4Q4cq4Q4gq4R4`s4Q4fu4P4ct4M4hq4N4jn4M4jm4M4jm4O4gm4O4il4O4bl4P4ok4N4fk4N4gk4O4li4Q4jf4P4`c4Q4na4K4jb4H4jd4F4je4C4dh4C3gp2U3gp2U3gp2U3gp2U3gp2U3gp2U3gp2U3gp2U3gp2U3gp2U3gp2U3gp2U3gp2U3gp2U3gp2U3gp2U3gp2U3gp2U3gp2U3gp2U3bn2X3fn2Z3`z3@3m{2_3l3A3l3A4`a2_4ab3@4lb3@4ja2]4jb2\4f`2Y3m2W4nb2Q4o`2P4f`2N4jb2K4oa2I4eb2J4ab2H4dc2K4`c2H4kc2H4je2G4hf2H4ig2E4ci2E4ah2F4fh2G4bi2F4ni2G4cj2F4ek2F4`l2G4ok2D4hm2E4ao2F4eo2M4io2L4dp2O4gp2M4fq2O4lq2M4hs2J4kv2H5kb2N5af2Q5`f2T5dd2V5ed2Y5ee2Y5ia2V5n`2Y4n~2X4f~2[4m~2]5``2^5h`3A5ia3A5ma2]5ce2Y5ae2]5bi3H5bg3D5ce3E5ia3C5la3B5n`3A4kw3N4is3O4cq3J4hq3I4nq3E4eu2]4bu2X4op2R4`r2M4fq2O4fq2K4kq2J4`q2J4`q2J4eq2I4cq2H4`p2H4ao2F4hm2E4mn2E4oo2F4oo2D4ip2G4eq2B4op2@4bq2@4ep1_4jp1^4`n2@4on1^4nn1^4im1_4hm1_4en1^4fn1]4fm1^4hm1]4jn1]4ko1[4jm1[4nj1]4ij1]4ek1\4oj1Z4bj1\4mi1[4dh1^4hh1^4ji1]4hi1\4ej1]4ei1^4bi1_4dg2@4cg2@4if2@4ah1_4dh1^4fg1_4ie1_4lf1^4ff1\4`f1]4ge1\4od1]4dd1]4kd1\4od1\4ge1[4kb1\4jb1\4ga1\4kb1[4ib1[4aa1[4ka1Z4gb1Z4dc1Z4fb1Y4lb1Y4nc1X4dd1Y4ef1W4eg1X4bg1X4mg1Y4if1\4lf1\4`g1]4ah1[4mg1W4kn1R4`t1S4kz1J4iz1I4d}1G4g}1G4a~1G4f1F5b`1F4k1C5cb1B5ib1C5gc1B5na0_5c`0_4f0_4i0_4b}0_4e|1@4c{1B4hw1D4jv1D4ot1F4ot1F4jt1G4nt1I4kt1I4`t1J4is1I4mr1I4`p1O4an1P4ll1P4hm1O4kn1N4co1L4eo1L4en1K4lm1K4kl1J4gl1J4fl1K4jk1L4oi1L4ni1L4li1L4`i1K4`h1K4gf1H4jf1H4ig1H4jf1B4dg1B4fg1A4ag1A4lf1A4fg1@4hf1@4cf0_4ae1@4`e1A4kc1C4kc1D4ib1E4`b1G4lb1G4jc1G4od1F4ig1H4gi1H4ih1I4lh1I4di1J4mm1H4km1G4jn1F4co1F4`p1F4ho1E4gp1D4mp1E4hp1D4ar1C4br1A4jx0Z4f|0Y4o}0U4o{0S4mz0Q4nx0N4kz0H4hx0F4jt0F4gr0C4fq0@4nk/]4cj/]4fi/]4og/\4de/\4hd/Z4gb/Y4ob/X4fb/V4db/V4ia/Q4ja/P4`b/P4b`/O3l/O4g`/M4fb/L4kb/L4`d/K4`d/K4`d/K4`d/K4`d/K4`d/K4`d/K4`d/K4`d/K4`d/K4`d/K4`d/K4`d/K4`d/K4`d/K4`d/K4`d/K4`d/K4`d/K4`d/K4`d/K4bc/H4hc/G4hc/G4fc/E4eh/F4`h/E4ei/D4jk/D4bm/E4fq/F4gu/E4mu/F4ou/E4iv/F4kv/E4dw/F4bw/E4bw/E4nw/E4kx/D4k{/H4nz/J4oz/M4`{/N4cz/Q4iz/T4ly/V4ez/V4iy/X4hz/Z4ay/Z5eb/[5ob/Z5mc/[5ce/Z5af/Y5jg/X5ch/X5ii/W5bj/W5oi/V5jk/T5`k/R5dl/Q5jl/R5bm/Q5dm/R5dm/Q5en/Q5lo/V5gn/V5on/W5ln/Z5ds/Y5cs/Z5kr/Z5lq/[5hq/^5br/^5dr/^5as/^5os/_5ct0@5`u0B5`x0B5kx0B5jz0G5a{0G5f}0I5e~0J6ga0J6aa0K6na0L6gb0L6ec0N6fc0N6jc0P6ad0Q6od0S6fe0U6cf0U6cf0U6hg0U6fh0V6hi0U6ll0U6hm0T6dn0T6ho0T6ho0T6hs0T6au0U6fu0W6dw0Y6fw0Y6gx0Z6ew0Z6jv0Z6ju0Z6`v0Z6dr0Z6br0Z6`r0[6kq0[6`q0[6mp0Z6on0Y6an0Y6`n0X6fm0X6hm0Z6el0[6`k0[6ak0Y6em0X6ck0W6bk0X6bj0Z6`j0X6hi0Y6di0Y6ch0X6lg0\6ag0\6af0[6af0]6dh1@6dh1A6bi1B6if1C6kg1B6mf1B6kf1B6mf1C6oe1D6bg1I6gh1J6li1P6ng1P6lg1S6`i1T6mj1U6bn1W6hs1W6hw1Y6ex1[6cv1\6gu1\6at1^6iu2@6f{2@6nz1_6`}1^6l1^7la2E7l`2J7mb2J7ad2M7`c2P7ad2P7bd2O7`d1^7mc1]7`d1]7`d1R7`d1R7lc1R7lc1R7lc1R7lc1R7kc1Q7kc1Q7kc1Q7gc1Q7gc1Q7gc1Q7gc1Q7cc1Q7cc1Q7cc1Q7cc1Q7ob1Q7ob1Q7ob1Q7da1S7d`1Q6l~1O6j}1N6`~1N6i|1L6`|1L6j{1K6jr1J6ap1I6fp1H6dp1F6ko1E6no1E6fn1D6hm1E6dl1D6nl1C6el1B6hl1A6hm1A6mm1A6mo1@6io1@6ap0_6ko0^6`o0]6jo0\6ao0]6dn0]6fn0[6om0[6mm0\6en0\6jl0\6el0\6jk0\6ok0\6kk0]6mj0^6ni0]6fj0\6dj0\6ki0[6mh0Z6`i0^6jh0^6fi0^6jj0_6dj1@6lj1@6gk0^6ok0_6fl0_6ll0_6om0_6am1@6im1@6io1@6mo1@6cq0_6jp1@6iq1@6oq1@6cv0^6bv0^6j{0\6l~0\7ja0Z7b`0Z6o~0Y6m~0X6az0T6iy0R6bz0O6b{0P6lz0P6j|0M6h}0M6a0M6c~0N6c~0N6`0N7b`0N7i`0N6i0L7fa0M7mb0M7`b0L7ob0K7`c0L7`c0L7`c0L7ac0L7ec0L7ec0L7fc0L7jc0L7jc0L7jc0L7kc0L7oc0L7oc0L7lc0M7`d0M7`d0M7ad0N7gc0L7kc0L7nc0L7nc0L6e|+W6i~+W6f|+Y6g|+]6h~,@7lb,@7ce+]7be+Y7ag+W7ei+W7jk+Y7kk+]7di,@6e|,D6e|,Q7mc+W7fc+W7`c+X7jb+X7gb+X7ab+Y7ka+Y7da+Z6nz,A6it,H6in,N6ci,S6hc,Y5k~,]5my-B5bu-F5jp-J5el-N5gh-Q5ed-U5f`-X4j|-[4cy-^4fu.A4br.D4in.G4dk.J4bh.L4ae.O4cb.Q3`.T3b|.V3`y.Y3ev.[3js.]3op._3`n/B3ik/D3nh/F3gf/H3oc/J3da/M2m~/O2e|/Q2my/S2jw/U2bu/W2or/Y2kp/[2`n/^2ok/_2ki0A2dg0D2`e0F2mb0H2i`0J1j~0L1g|0N1`z0Q1mw0S1mu0U1ks0W1hq0Z1eo0\1fm0^1`k1A1bi1C1lf1F1nd1H1hb1K1j`1M0e~1P0`|1S0cz1U0ow1X0cv1[0os1^0lq2B0io2E0fm2H0ak2L0oh2O0of2S0kd2W0db2\/o3@/j}3E/d{3K/ox3P/ev3W/ns3^/bq4G/dn4S/bk5G7oc.N7dc.O7ac.O7jb.O7fb.O7oa.O7ha.P7ea.P7m`.P7j`.P7c`.P6l.Q6d.Q6a.Q6n~.Q6g~.Q6c~.Q6h}.R6e}.R6kv.U6hp.Y6hj.\6`e._5o/A5nz/D5mu/G5gq/I5ml/L5kh/N5hd/Q5i`/S4n|/U4cy/W4du/Z4mq/\4hn/^4ak0@4mg0B4md0D4ja0F3j~0H3j{0J3jx0L3nu0N3bs0P3gp0R3km0T3oj0V3ch0X3ke0Z3`c0]3d`0_2m}1A2e{1C2by1E2jv1G2ct1I2lq1L2eo1N2bm1P2kj1R2eh1U2bf1W2lc1Z2ja1\1d1_1c}2A1nz2D1hx2G1dv2J1ct2L1oq2O1ho2S1em2V1fk2Y1`i2]1of3@1kd3D1gb3H1a`3M0o}3Q0h{3W0by3\0lv4C0jt4J0cr4S0eo5A7nc1F7jc1F7bc1F7nb1F6i{1G6`u1H6ln1I6lh1J6dc1K5a~1L5by1M5ct1N5ho1P5bk1Q5lf1S5mb1T4l~1V4nz1W4`w1Y4ks1Z4bp1\4il1^4di2@4cf2A4nb2C3j2E3j|2G3jy2I3jv2K3js2M3op2O3`n2R3ek2T3jh2V3le2Y3bc2[3h`2^2o}3@2f{3C2nx3F2fv3I2os3L2dq3P2on3S2fl3W2ni3[2dg4@2od4D2eb4J1n4P1e}4X1hz5C#`x6UPluto occultation"`}6UAug 19 1985 17:50 UT"`b6UDoug Mink Oct 16 1985#`d @ \ No newline at end of file
diff --git a/nx-X11/programs/xterm/tektests/fotest.tek b/nx-X11/programs/xterm/tektests/fotest.tek
deleted file mode 100644
index 557adfa98..000000000
--- a/nx-X11/programs/xterm/tektests/fotest.tek
+++ /dev/null
Binary files differ
diff --git a/nx-X11/programs/xterm/tektests/imtest.tek b/nx-X11/programs/xterm/tektests/imtest.tek
deleted file mode 100644
index 24951adb6..000000000
--- a/nx-X11/programs/xterm/tektests/imtest.tek
+++ /dev/null
@@ -1 +0,0 @@
- ` @ `?_ `?_8m?_8m?_8m @8m @ ` @!r#D(0,0) ` @8m?_ `?_8m @,p @
diff --git a/nx-X11/programs/xterm/tektests/imtesth.tek b/nx-X11/programs/xterm/tektests/imtesth.tek
deleted file mode 100644
index bdf4e9489..000000000
--- a/nx-X11/programs/xterm/tektests/imtesth.tek
+++ /dev/null
@@ -1 +0,0 @@
- `` @ c`?_ c`?_8om?_8om?_8lm @8lm @ `` @!`r#D(0,0) `` @8om?_ c`?_8lm @,`p @
diff --git a/nx-X11/programs/xterm/tektests/ocpred.tek b/nx-X11/programs/xterm/tektests/ocpred.tek
deleted file mode 100644
index 25dee0640..000000000
--- a/nx-X11/programs/xterm/tektests/ocpred.tek
+++ /dev/null
@@ -1,3 +0,0 @@
-+gd5U+fd6T+fi6T*f6T+fd6T+dd7S+di7S*d7S+dd7S+gd8Q+gi8Q*g8Q+gd8Q+ed9P+ei9P*e9P+ed9P+dd:O+di:O*d:O+dd:O+fd;M+fi;M*f;M+fd;M+ed<L+ei<L*e<L+ed<L+gd=J+gi=J*g=J+gd=J+fd>I+fi>I*f>I+fd>I+dd?H+di?H*d?H+dd?H+dd?H+gd5U,cc5U,cc5Z,cc5P,cc5U-ka5U-ka5Z-ka5P-ka5U.g`5U.g`5Z.g`5P.g`5U.o~5U.o~5Z.o~5P.o~5U/k}5U/k}5Z/k}5P/k}5U0c|5U0c|5Z0c|5P0c|5U1oz5U1oz5Z1oz5P1oz5U2gy5U2gy5Z2gy5P2gy5U3cx5U3cx5Z3cx5P3cx5U4kv5U4kv5Z4kv5P4kv5U4kv5U+gd5U+ed4W*e4W+ei4W+ed4W+fd3X*f3X+fi3X+fd3X+dd2Z*d2Z+di2Z+dd2Z+ed1[*e1[+ei1[+ed1[+gd0\*g0\+gi0\+gd0\+dd/^*d/^+di/^+dd/^+fd._*f._+fi._+fd._+gd.@*g.@+gi.@+gd.@+ed-B*e-B+ei-B+ed-B+fd,C*f,C+fi,C+fd,C+fd,C+gd5U*oe5U*oe5P*oe5Z*oe5U)cg5U)cg5P)cg5Z)cg5U(kh5U(kh5P(kh5Z(kh5U'oi5U'oi5P'oi5Z'oi5U&gk5U&gk5P&gk5Z&gk5U%kl5U%kl5P%kl5Z%kl5U$cn5U$cn5P$cn5Z$cn5U#go5U#go5P#go5Z#go5U"op5U"op5P"op5Z"op5U!cr5U!cr5P!cr5Z!cr5U!cr5U4kv5U4k{5PN+fd,C*hl,FE!cr5U cy5PS+dd?H*hl>YW%`o @,cc5U,nb5T,nb5S,mb5R,ib5Q,db5P,`b5O,oa5M,ka5L,fa5K,o`5J,k`5I,``5I+h5H+`5G+h~5F+a~5E+j}5D+c}5C+g|5B+h{5B+a{5A+fz5@+ky4_+lx4_+bx4^+gw4]+iv4]+ju4\+lt4\+bt4[+ds4[+fr4Z+dq4Z+fp4Y+eo4Y+kn4X+fm4X+el4X+`k4X+cj4W+nh4W+mg4W+if4W+ie4W+ed4W+ac4W+ab4W+m`4W*n4W*k~4W*h}4X*e|4X*f{4X*cz4X*ey4Y*fx4Y*hw4Z*jv4Z*hu4[*jt4[*ls4\*bs4\*dr4]*gq4]*jp4^*lo4_*co4_*fn5@*im5A*`m5B*gl5B*nk5C*bk5D*ij5E*`j5F*ki5F*ci5G*kh5H*ch5I*og5J*fg5K*cg5L*of5M*hf5O*df5P*af5Q*me5R*ne5S*ne5T*oe5U*le5W*le5X*me5Y*af5Z*ff5[*jf5\*of5]*cg5^*dg6@*og6@*og6@*ch6A*jh6B*bi6C*ji6D*bj6E*ij6F*`k6G*kk6G*gl6H*bm6I*im6J*dn6K*co6K*no6L*hp6M*gq6M*ar6N*`s6O*ns6O*ht6P*fu6P*dv6Q*fw6Q*dx6R*ey6R*cz6R*d{6S*e|6S*j}6S*k~6S*l6T+m`6T+ab6T+ac6T+fd6T+ie6T+if6T+mg6T+lh6T+cj6S+bk6S+el6S+dm6S+kn6R+eo6R+dp6R+bq6Q+`r6Q+bs6P+`t6P+nt6O+hu6O+fv6N+gw6M+`x6M+nx6L+ky6K+dz6K+a{6J+j{6I+g|6H+l|6H+h}6G+a~6F+j~6E+c6D+k6C,c`6B,k`6A,o`6@,da6@,ka5^,oa5],bb5\,fb5[,ib5Z,mb5Y,lb5X,lb5W,cc5U$`l?@$`l?J$`l?E%`u?E%`u?@%`u?J%`j9Y 0.1"$`t9Y 2148 km#`v9YStar position#``9Yin sky plane"`j9YFrom 2:40: 0!`t9YEach 0: 1: 0+fd,C+fi,RSUN->.ke7[.di7[.na7\.ke7[-k{8@SAA.ke7[.`b7L.me7K-g~7L.`b7L-h~6\.eb6[-oz6\-h~6\-lz6L-i~6K-cw6L-lz6L-dw5\-a{5[-ks5\-dw5\-ms5L-jw5K-`p5M-ms5L-ap4\-ns4[-dl4]-ap4\-il4L-fp4K-lh4M-il4L-ai3\-nl3[-de3]-ai3\-fe3L-ci3K-ia3M-fe3L-na2\-ke2[,a~2]-na2\,b~2L-oa2K,ez2M,b~2L,kz1\,d~1\,nv1],kz1\,cw1L,lz1L,fs1M,cw1L,ds0],aw0\,ko0],ds0],lo0M,is0L,cl0M,lo0M,dl/],ap/\,kh/],dl/],ih/M,fl/L,ld/N,ih/M,ae.],nh.\,da.^,ae.],fa.M,ce.L+i}.N,fa.M+n}-],ka-\+az-^+n}-]+gz-M+`~-M+jv-N+gz-M+kv,]+dz,]+nr,^+kv,]+`s,N+mv,M+go,N+`s,N7lv @May 4 1986 Occultation of nepklem 1026 by Triton (N1)7h` @Observed from SAAO Sutherland 74" Long= -20 48 44.3 Lat= -32 22 43.46dj @13.11-magnitude star at RA= 18h 24m 16.1231s Dec=-22d 13' 22.807"
- 5`t @ (1950) RA= 18h 22m 5.3070s Dec=-22d 14' 27.910"
- 4l} @Closest at 2:45:30 U.T. 4hg @ Radial= 4158.7 km = 0.19"3dq @ Planet= 1600.0 km = 0.07"2`{ @ ET - UT = 56.1709 sec DE-1182ld @ P.A.= 12.7 deg.1hn @ Phase = 1.5 deg = 100.0%0dx @ Alt= 75 d, Az= -36 d0`b @ Sun alt=-30 d, Az= 90 d/lk @ Sun:127.8 d, Moon: 11.9 d.hu @ V =0.0007 "/s = 14.22 km/s-d @ D = 29.619079 A.U.-`i @Doug Mink 16: 4 Nov 11 1985-`i @
diff --git a/nx-X11/programs/xterm/tektests/usmap.tek b/nx-X11/programs/xterm/tektests/usmap.tek
deleted file mode 100644
index 0e6234463..000000000
--- a/nx-X11/programs/xterm/tektests/usmap.tek
+++ /dev/null
Binary files differ
diff --git a/nx-X11/programs/xterm/termcap b/nx-X11/programs/xterm/termcap
deleted file mode 100644
index 1320f45f1..000000000
--- a/nx-X11/programs/xterm/termcap
+++ /dev/null
@@ -1,209 +0,0 @@
-# $XTermId: termcap,v 1.68 2005/11/03 13:17:28 tom Exp $
-#
-# $Xorg: termcap,v 1.3 2000/08/17 19:55:10 cpqbld Exp $
-#
-# This file is formatted using ncurses' "tic -CNx".
-#
-# Note:
-# termcap format is limited to 1023 characters. This set of descriptions
-# is a subset of the terminfo, since not all features can be fit into
-# that limit. The 'xterm' description supports color. The monochrome
-# 'xtermm' drops color in favor of additional function keys. If you need
-# both, use terminfo.
-#
-# The 1023-character limit applies to each entry after resolving the
-# "tc=" strings. Some implementations may discount all or part of the
-# formatting characters in the entry (i.e., the backslash newline tab
-# colon). GNU termcap does not have this limit.
-#
-# I checked the limits using ncurses "captoinfo -CrTUvx", which prints
-# the resolved length of each entry in a comment at the end - T.Dickey
-#
-# $XFree86: xc/programs/xterm/termcap,v 3.36 2005/11/03 13:17:28 dickey Exp $
-#
-xf|xterm-new|modern xterm:\
- :*6=\EOF:@7=\EOF:F1=\E[23~:F2=\E[24~:Km=\E[M: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~:kH=\EOF:kI=\E[2~:kN=\E[6~:\
- :kP=\E[5~:kd=\EOB:kh=\EOH:kl=\EOD:kr=\EOC:ku=\EOA:\
- :tc=xterm-basic:
-#
-# This chunk is used for building the VT220/Sun/PC keyboard variants.
-xb|xterm-basic|modern xterm common:\
- :am:bs:km:mi:ms:ut:xn:AX:\
- :Co#8:co#80:kn#12:li#24:pa#64:\
- :AB=\E[4%dm:AF=\E[3%dm:AL=\E[%dL:DC=\E[%dP:DL=\E[%dM:\
- :DO=\E[%dB:LE=\E[%dD:RI=\E[%dC:UP=\E[%dA:ae=\E(B:al=\E[L:\
- :as=\E(0:bl=^G:cd=\E[J:ce=\E[K:cl=\E[H\E[2J:\
- :cm=\E[%i%d;%dH:cs=\E[%i%d;%dr:ct=\E[3g:dc=\E[P:dl=\E[M:\
- :ei=\E[4l:ho=\E[H:im=\E[4h:is=\E[!p\E[?3;4l\E[4l\E>:\
- :kD=\E[3~:kb=^H:ke=\E[?1l\E>:ks=\E[?1h\E=:le=^H:md=\E[1m:\
- :me=\E[m:ml=\El:mr=\E[7m:mu=\Em:nd=\E[C:op=\E[39;49m:\
- :rc=\E8:rs=\E[!p\E[?3;4l\E[4l\E>:sc=\E7:se=\E[27m:sf=^J:\
- :so=\E[7m:sr=\EM:st=\EH:te=\E[?1049l:ti=\E[?1049h:\
- :ue=\E[24m:up=\E[A:us=\E[4m:ve=\E[?25h:vi=\E[?25l:
-
-# The xterm-new description has all of the features, but is not completely
-# compatible with vt220. If you are using a Sun or PC keyboard, set the
-# sunKeyboard resource to true:
-# + maps the editing keypad
-# + interprets control-function-key as a second array of keys, so a
-# 12-fkey keyboard can support vt220's 20-fkeys.
-# + maps numeric keypad "+" to ",".
-# + uses DEC-style control sequences for the application keypad.
-#
-vt|xterm-vt220|xterm emulating vt220:\
- :*6=\E[4~:@7=\E[4~:Km=\E[M:kH=\E[4~:kh=\E[1~:\
- :tc=xterm-basic:
-
-v1|xterm-24|xterms|vs100|24x80 xterm:\
- :li#24:tc=xterm:
-v2|xterm-65|65x80 xterm:\
- :li#65:tc=xterm:
-vb|xterm-bold|xterm with bold for underline:\
- :so=\E[7m:us=\E[1m:tc=xterm:
-vB|xterm-boldso|xterm with bold for standout:\
- :se=\E[m:so=\E[1m:tc=xterm:
-vm|xterm-mono|monochrome xterm:\
- :ut@:\
- :Co@:NC@:kn#20:pa@:\
- :AB@:AF@:Sb@:Sf@:op@:st@:tc=xterm:
-#
-# Alternate terminal description that "works" for interactive shells such as
-# tcsh and bash.
-xn|xterm-noapp|xterm with cursor keys in normal mode:\
- :kd=\E[B:ke=\E>:kl=\E[D:kr=\E[C:ks=\E=:ku=\E[A:te@:ti@:\
- :tc=xterm:
-#
-# This should work for the commonly used "color xterm" variations (XFree86
-# xterm, color_xterm, nxterm, rxvt). Note that it does not set 'bce', so for
-# XFree86 and rxvt, some applications that use colors will be less efficient,
-# and in a few special cases (with "smart" optimization) the wrong color will
-# be painted in spots.
-vc|xterm-color|generic "ANSI" color xterm:\
- :Co#8:NC@:pa#64:\
- :AB=\E[4%dm:AF=\E[3%dm:ac=:op=\E[m:tc=xterm-r6:
-#
-# These aliases are for compatibility with the terminfo; termcap cannot provide
-# the extra features such as color initialization, but termcap applications
-# still want the names. Note that AF/AB really should be Sf/Sb, but there are
-# applications which expect the former. The terminfo contains both strings.
-x1|xterm-16color|xterm alias:\
- :tc=xterm-new:
-
-x2|xterm-88color|xterm alias:\
- :Co#88:pa#7744:tc=xterm-256color:
-
-x3|xterm-256color|xterm alias:\
- :Co#256:pa#32767:\
- :AB=\E[48;5;%dm:AF=\E[38;5;%dm:tc=xterm-new:
-
-xi|xterm-nrc|xterm alias:\
- :tc=xterm:
-xr|xterm-rep|xterm alias:\
- :tc=xterm:
-xx|xterm-xmc|xterm alias:\
- :sg#1:tc=xterm:
-#
-# An 8-bit description is doable with termcap, but there are probably no
-# termcap (or BSD curses) applications that are able to use it.
-x8|xterm-8bit|xterm terminal emulator 8-bit controls (X Window System):\
- :am:km:mi:ms:xn:\
- :co#80:it#8:li#24:\
- :AL=\233%dL:DC=\233%dP:DL=\233%dM:DO=\233%dB:IC=\233%d@:\
- :Km=\233M:LE=\233%dD:RI=\233%dC:UP=\233%dA:ae=\E(B:\
- :al=\233L:as=\E(0:bl=^G:bt=\233Z:cd=\233J:ce=\233K:\
- :cl=\233H\2332J:cm=\233%i%d;%dH:cr=^M:cs=\233%i%d;%dr:\
- :ct=\2333g:dc=\233P:dl=\233M:do=^J:ei=\2334l:ho=\233H:\
- :im=\2334h:\
- :is=\E[62"p\E G\233m\233?7h\E>\E7\233?1;3;4;6l\2334l\233r\E8:\
- :k1=\23311~:k2=\23312~:k3=\23313~:k4=\23314~:k5=\23315~:\
- :k6=\23317~:k7=\23318~:k8=\23319~:k9=\23320~:kD=\2333~:\
- :kI=\2332~:kN=\2336~:kP=\2335~:kb=^H:kd=\217B:\
- :ke=\233?1l\E>:kh=\2331~:kl=\217D:kr=\217C:ks=\233?1h\E=:\
- :ku=\217A:le=^H:mb=\2335m:md=\2331m:me=\233m:\
- :mr=\2337m:nd=\233C:rc=\E8:sc=\E7:se=\23327m:sf=^J:\
- :so=\2337m:sr=\215:st=\210:ta=^I:te=\233?1049l:\
- :ti=\233?1049h:ue=\23324m:up=\233A:us=\2334m:\
- :vb=\233?5h\233?5l:ve=\233?25h:vi=\233?25l:
-#
-hp|xterm-hp|xterm with hpterm function keys:\
- :@7=\EF:k1=\Ep:k2=\Eq:k3=\Er:k4=\Es:k5=\Et:k6=\Eu:k7=\Ev:\
- :k8=\Ew:kC=\EJ:kD=\EP:kI=\EQ:kN=\ES:kP=\ET:kd=\EB:kh=\Eh:\
- :kl=\ED:kr=\EC:ku=\EA:tc=xterm-basic:
-#
-xS|xterm-sco|xterm with SCO function keys:\
- :@7=\E[F:F1=\E[W:F2=\E[X:F3=\E[Y:F5=\E[a:F6=\E[b:F7=\E[c:\
- :F8=\E[d:F9=\E[e:FA=\E[f:FB=\E[g:FC=\E[h:FD=\E[i:FE=\E[j:\
- :FF=\E[k:ac=:k1=\E[M:k2=\E[N:k3=\E[O:k4=\E[P:k5=\E[Q:\
- :k6=\E[R:k7=\E[S:k8=\E[T:k9=\E[U:k;=\E[V:kI=\E[L:kN=\E[G:\
- :kP=\E[I:kd=\E[B:kh=\E[H:kl=\E[D:kr=\E[C:ku=\E[A:\
- :tc=xterm-basic:
-#
-v5|xterm-vt52|xterm emulating vt52:\
- :bs:\
- :co#80:it#8:li#24:\
- :ae=\EG:as=\EF:bl=^G:cd=\EJ:ce=\EK:cl=\EH\EJ:cm=\EY%+ %+ :\
- :cr=^M:do=\EB:ho=\EH:kb=^H:kd=\EB:kl=\ED:kr=\EC:ku=\EA:\
- :le=\ED:nd=\EC:nw=^M^J:sf=^J:sr=\EI:ta=^I:up=\EA:
-#
-xs|xterm-sun|xterm with Sun functionkeys:\
- :%1=\E[196z:&8=\E[195z:@0=\E[200z:@5=\E[197z:@7=\E[220z:\
- :F1=\E[192z:F2=\E[193z:Km=\E[M:k1=\E[224z:k2=\E[225z:\
- :k3=\E[226z:k4=\E[227z:k5=\E[228z:k6=\E[229z:k7=\E[230z:\
- :k8=\E[231z:k9=\E[232z:k;=\E[233z:kD=\177:kI=\E[2z:\
- :kN=\E[222z:kP=\E[216z:kh=\E[214z:tc=xterm-basic:
-#
-# vi may work better with this entry, because vi doesn't use insert mode much.
-# |xterm-ic|xterm-vi|xterm with insert character instead of insert mode:\
-vi|xterm-ic|xterm-vi|xterm with insert char:\
- :mi@:\
- :IC=\E[%d@:ei@:ic=\E[@:im@:tc=xterm:
-#
-# Compatible with the X11R6.3 xterm
-r6|xterm-r6|xterm-old|X11R6 xterm:\
- :am:bs:km:mi:ms:pt:xn:\
- :co#80:kn#20:li#24:\
- :*6=\E[4~:@0=\E[1~:@7=\E[4~:AL=\E[%dL:DC=\E[%dP:DL=\E[%dM:\
- :DO=\E[%dB:F1=\E[23~:F2=\E[24~:F3=\E[25~:F4=\E[26~:\
- :F5=\E[28~:F6=\E[29~:F7=\E[31~:F8=\E[32~:F9=\E[33~:\
- :FA=\E[34~:LE=\E[%dD:RI=\E[%dC:UP=\E[%dA:ae=^O:al=\E[L:\
- :as=^N:bl=^G:cd=\E[J:ce=\E[K:cl=\E[H\E[2J:cm=\E[%i%d;%dH:\
- :cs=\E[%i%d;%dr:ct=\E[3g:dc=\E[P:dl=\E[M:eA=\E)0:ei=\E[4l:\
- :ho=\E[H:im=\E[4h:\
- :is=\E[m\E[?7h\E[4l\E>\E7\E[r\E[?1;3;4;6l\E8:\
- :k1=\E[11~:k2=\E[12~:k3=\E[13~:k4=\E[14~:k5=\E[15~:\
- :k6=\E[17~:k7=\E[18~:k8=\E[19~:k9=\E[20~:k;=\E[21~:\
- :kD=\177:kI=\E[2~:kN=\E[6~:kP=\E[5~:kb=^H:kd=\EOB:\
- :ke=\E[?1l\E>:kh=\E[1~:kl=\EOD:kr=\EOC:ks=\E[?1h\E=:\
- :ku=\EOA:md=\E[1m:me=\E[m:ml=\El:mr=\E[7m:mu=\Em:nd=\E[C:\
- :rc=\E8:rs=\E[m\E[?7h\E[4l\E>\E7\E[r\E[?1;3;4;6l\E8:\
- :sc=\E7:se=\E[m:sf=^J:so=\E[7m:sr=\EM:te=\E[2J\E[?47l\E8:\
- :ti=\E7\E[?47h:ue=\E[m:up=\E[A:us=\E[4m:
-#
-# Compatible with the R5 xterm
-r5|xterm-r5|X11R5 xterm X11R5:\
- :am:bs:km:mi:ms:pt:xn:\
- :co#80:kn#4:li#24:\
- :@7=\E[4~:AL=\E[%dL:DC=\E[%dP:DL=\E[%dM:DO=\E[%dB:\
- :IC=\E[%d@:UP=\E[%dA:al=\E[L:cd=\E[J:ce=\E[K:cl=\E[H\E[2J:\
- :cm=\E[%i%d;%dH:cs=\E[%i%d;%dr:ct=\E[3g:dc=\E[P:dl=\E[M:\
- :ei=\E[4l:ho=\E[H:im=\E[4h:\
- :is=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;3;4;6l\E[4l:\
- :k1=\E[11~:k2=\E[12~:k3=\E[13~:k4=\E[14~:kb=^H:kd=\EOB:\
- :ke=\E[?1l\E>:kh=\E[1~:kl=\EOD:kr=\EOC:ks=\E[?1h\E=:\
- :ku=\EOA:md=\E[1m:me=\E[m:mr=\E[7m:nd=\E[C:rc=\E8:\
- :rs=\E>\E[?1;3;4;5;6l\E[4l\E[?7h\E[m\E[r\E[2J\E[H:\
- :sc=\E7:se=\E[m:sf=^J:so=\E[7m:sr=\EM:te=\E[2J\E[?47l\E8:\
- :ti=\E7\E[?47h:ue=\E[m:up=\E[A:us=\E[4m:
-#
-# Customization begins here.
-x0|xterm-xfree86|xterm terminal emulator (XFree86):\
- :tc=xterm-new:
-#
-# This is the only entry which you should have to customize, since "xterm"
-# is widely used for a variety of incompatible terminal emulations including
-# color_xterm and rxvt.
-v0|xterm|X11 terminal emulator:\
- :tc=xterm-new:
-# :tc=xterm-r6:
diff --git a/nx-X11/programs/xterm/terminfo b/nx-X11/programs/xterm/terminfo
deleted file mode 100644
index f0b5f4d3a..000000000
--- a/nx-X11/programs/xterm/terminfo
+++ /dev/null
@@ -1,1012 +0,0 @@
-# $XTermId: terminfo,v 1.111 2005/11/03 13:17:28 tom Exp $
-#
-# $Xorg: terminfo,v 1.3 2000/08/17 19:55:10 cpqbld Exp $
-#
-# meml locks memory above the cursor; memu unlocks (ala HP terminals)
-#
-# XFree86 updates/notes/new entries (including xterm-8bit, xterm-16color)
-# - Thomas E. Dickey
-#
-# $XFree86: xc/programs/xterm/terminfo,v 3.57 2005/11/03 13:17:28 dickey Exp $
-#
-# Special Capabilities:
-# --------------------
-# ich has a corresponding capability that inserts a single blank. We could
-# have used ich1=\E[@, which works with ncurses, but that is not standard
-# behavior. If it is set, then SVr4 vi (e.g., Solaris 2.6) emits both
-# smir/rmir and ich1.
-# meml locks memory above the cursor; memu unlocks (ala HP terminals). This
-# is not recognized by some older (e.g., SVr3) tic programs, but none
-# do more than warn about it. Ignore the warning.
-# smcup clears memory before switching to the alternate screen. The older
-# (deprecated) \E[?47h did not do this, requiring applications to
-# embed a \E[2J in the rmcup string. However, that behavior cannot
-# be disabled via titeInhibit, making that resource not function as
-# intended on systems with terminfo.
-# rs2/is2 are shorter with XFree86 xterm because it supports DECSTR. We
-# use the shorter sequence for compatibility with the termcap, which
-# is trimmed to keep it shorter than 1023 characters. It (escape \E[!p)
-# replaces these in the conventional vt100 reset-string:
-# \E7 - save cursor (fixes origin-mode side-effect)
-# \E[r - reset scrolling margins
-# \E[m - reset SGR (including color)
-# \E[?7h - reset wraparound mode (DECAWM)
-# \E[?1l - reset application cursor keys (DECCKM)
-# \E[?6l - reset origin mode (DECOM)
-# \E8 - restore cursor
-# DECSTR is recognized by XFree86 xterm even in vt52 mode.
-#
-# Editing Keypad:
-# --------------
-# XFree86 xterm emulates vt220 if the decTerminalID resource is set to 200 or
-# higher. Otherwise it emulates a vt100 or vt52 depending on the value of the
-# resource. When emulating a vt220, we support the editing keypad. Sun and PC
-# keyboards have an editing keypad which is similar to the vt220:
-#
-# VT220 editing keypad
-# ----------------------------
-# Find Insert Remove
-# Select Prev Next
-# ----------------------------
-#
-# Sun/PC editing keypad
-# ----------------------------
-# Insert Home PageUp
-# Delete End PageDn
-# ----------------------------
-#
-# If the sunKeyboard resource is true, we map it this way (adjusting the values
-# of Home, End and Delete):
-# VT220 Sun/PC
-# ----------------------------
-# Find Home
-# Select End
-# Insert Insert
-# Remove Delete
-# Prev PageUp
-# Next PageDn
-# ----------------------------
-#
-# Note that all of the keys on the editing keypad transmit escape sequences. A
-# vt220 does this only when in vt220 mode; when emulating a vt100 the editing
-# keypad is inactive.
-#
-# Alternative keycodes:
-# --------------------
-# Several of the function keys have alternative names, depending on the type of
-# host which your xterm is connected to. DEC (i.e., the VMS system) uses F15
-# as the HELP key, F16 as the DO key. Unix applications generally do not do
-# this. Curses applications in particular, assign a unique keycode to each
-# capability string. These terminal descriptions do not have conflicting
-# definitions, to ensure that Unix curses applications use a consistent set of
-# keycodes. To get a VMS-bias, make these substitutions:
-# 1. change khome to kfnd
-# 2. change kend to kslt
-# The original xterm-r6 entry does in fact have a VMS bias.
-#
-# Some legacy applications using the termcap emulation may expect kll where
-# we have specified kend.
-#
-# Function keys with modifiers (Sun/PC):
-# -------------------------------------
-# Shift-Fx - kf{12+x}
-# Control-Fx - kf{24+x}
-# Shift-Control-Fx - kf{36+x}
-#
-# The terminfo defines some special keys which are documented as "shifted",
-# e.g., kDC is shifted-delete-character.
-#
-# Note however, that even though the terminfo says a key might be sent, there
-# may be conflicts which prevent this. For example, it is common to use
-# shifted pageup and pagedown for window manager functions. The default
-# translation for xterm since X11R4 has overridden shifted Insert, Select,
-# PageUp and PageDown, which correspond to terminfo kIC, kEND, kPRV and kNXT
-# respectively.
-#
-xterm-new|modern xterm terminal emulator,
- npc,
- indn=\E[%p1%dS,
- kDC=\E[3;2~,
- kEND=\E[1;2F,
- kHOM=\E[1;2H,
- kIC=\E[2;2~,
- kLFT=\E[1;2D,
- kNXT=\E[6;2~,
- kPRV=\E[5;2~,
- kRIT=\E[1;2C,
- kb2=\EOE,
- kcbt=\E[Z,
- kcub1=\EOD,
- kcud1=\EOB,
- kcuf1=\EOC,
- kcuu1=\EOA,
- kend=\EOF,
- kent=\EOM,
- khome=\EOH,
- kich1=\E[2~,
- kind=\E[1;2B,
- kmous=\E[M,
- knp=\E[6~,
- kpp=\E[5~,
- kri=\E[1;2A,
- rin=\E[%p1%dT,
- use=xterm+pcfkeys,
- use=xterm-basic,
-# Encode modifiers using parameters (see ctlseqs.msg).
-# Note that this is unrelated to PCTERM.
-#
-# Some names are extensions allowed by ncurses:
-# kDN, kDN5, kDN6, kLFT5, kLFT6, kRIT5, kRIT6, kUP, kUP5, kUP6
-xterm+pcfkeys|fragment for PC-style keys,
- kf1=\EOP,
- kf10=\E[21~,
- kf11=\E[23~,
- kf12=\E[24~,
- kf13=\EO2P,
- kf14=\EO2Q,
- kf15=\EO2R,
- kf16=\EO2S,
- kf17=\E[15;2~,
- kf18=\E[17;2~,
- kf19=\E[18;2~,
- kf2=\EOQ,
- kf20=\E[19;2~,
- kf21=\E[20;2~,
- kf22=\E[21;2~,
- kf23=\E[23;2~,
- kf24=\E[24;2~,
- kf25=\EO5P,
- kf26=\EO5Q,
- kf27=\EO5R,
- kf28=\EO5S,
- kf29=\E[15;5~,
- kf3=\EOR,
- kf30=\E[17;5~,
- kf31=\E[18;5~,
- kf32=\E[19;5~,
- kf33=\E[20;5~,
- kf34=\E[21;5~,
- kf35=\E[23;5~,
- kf36=\E[24;5~,
- kf37=\EO6P,
- kf38=\EO6Q,
- kf39=\EO6R,
- kf4=\EOS,
- kf40=\EO6S,
- kf41=\E[15;6~,
- kf42=\E[17;6~,
- kf43=\E[18;6~,
- kf44=\E[19;6~,
- kf45=\E[20;6~,
- kf46=\E[21;6~,
- kf47=\E[23;6~,
- kf48=\E[24;6~,
- kf49=\EO3P,
- kf5=\E[15~,
- kf50=\EO3Q,
- kf51=\EO3R,
- kf52=\EO3S,
- kf53=\E[15;3~,
- kf54=\E[17;3~,
- kf55=\E[18;3~,
- kf56=\E[19;3~,
- kf57=\E[20;3~,
- kf58=\E[21;3~,
- kf59=\E[23;3~,
- kf6=\E[17~,
- kf60=\E[24;3~,
- kf61=\EO4P,
- kf62=\EO4Q,
- kf63=\EO4R,
- kf7=\E[18~,
- kf8=\E[19~,
- kf9=\E[20~,
- kDN=\E[1;2B,
- kDN5=\E[1;5B,
- kDN6=\E[1;6B,
- kLFT5=\E[1;5D,
- kLFT6=\E[1;6D,
- kRIT5=\E[1;5C,
- kRIT6=\E[1;6C,
- kUP=\E[1;2A,
- kUP5=\E[1;5A,
- kUP6=\E[1;6A,
-#
-# This chunk is used for building the VT220/Sun/PC keyboard variants.
-xterm-basic|modern xterm terminal emulator - common,
- am,
- bce,
- km,
- mc5i,
- mir,
- msgr,
- xenl,
- colors#8,
- cols#80,
- it#8,
- lines#24,
- pairs#64,
- acsc=``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
- bel=^G,
- blink=\E[5m,
- bold=\E[1m,
- cbt=\E[Z,
- civis=\E[?25l,
- clear=\E[H\E[2J,
- cnorm=\E[?12l\E[?25h,
- cr=^M,
- csr=\E[%i%p1%d;%p2%dr,
- cub=\E[%p1%dD,
- cub1=^H,
- cud=\E[%p1%dB,
- cud1=^J,
- cuf=\E[%p1%dC,
- cuf1=\E[C,
- cup=\E[%i%p1%d;%p2%dH,
- cuu=\E[%p1%dA,
- cuu1=\E[A,
- cvvis=\E[?12;25h,
- dch=\E[%p1%dP,
- dch1=\E[P,
- dl=\E[%p1%dM,
- dl1=\E[M,
- ech=\E[%p1%dX,
- ed=\E[J,
- el=\E[K,
- el1=\E[1K,
- flash=\E[?5h$<100/>\E[?5l,
- home=\E[H,
- hpa=\E[%i%p1%dG,
- ht=^I,
- hts=\EH,
- ich=\E[%p1%d@,
- il=\E[%p1%dL,
- il1=\E[L,
- ind=^J,
- invis=\E[8m,
- is2=\E[!p\E[?3;4l\E[4l\E>,
- kbs=^H,
- kdch1=\E[3~,
- mc0=\E[i,
- mc4=\E[4i,
- mc5=\E[5i,
- meml=\El,
- memu=\Em,
- op=\E[39;49m,
- rc=\E8,
- rev=\E[7m,
- ri=\EM,
- rmacs=\E(B,
- rmam=\E[?7l,
- rmcup=\E[?1049l,
- rmir=\E[4l,
- rmkx=\E[?1l\E>,
- rmso=\E[27m,
- rmul=\E[24m,
- rs1=\Ec,
- rs2=\E[!p\E[?3;4l\E[4l\E>,
- sc=\E7,
- setab=\E[4%p1%dm,
- setaf=\E[3%p1%dm,
- setb=\E[4%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}%=%t3%e%p1%d%;m,
- setf=\E[3%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}%=%t3%e%p1%d%;m,
- sgr=\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;%?%p7%t;8%;m%?%p9%t\E(0%e\E(B%;,
- sgr0=\E[m\E(B,
- smacs=\E(0,
- smam=\E[?7h,
- smcup=\E[?1049h,
- smir=\E[4h,
- smkx=\E[?1h\E=,
- smso=\E[7m,
- smul=\E[4m,
- tbc=\E[3g,
- u6=\E[%i%d;%dR,
- u7=\E[6n,
- u8=\E[?1;2c,
- u9=\E[c,
- vpa=\E[%i%p1%dd,
-#
-# The xterm-new description has all of the features, but is not completely
-# compatible with vt220. If you are using a Sun or PC keyboard, set the
-# sunKeyboard resource to true:
-# + maps the editing keypad
-# + interprets control-function-key as a second array of keys, so a
-# 12-fkey keyboard can support vt220's 20-fkeys.
-# + maps numeric keypad "+" to ",".
-# + uses DEC-style control sequences for the application keypad.
-#
-# Some packagers modify xterm's resource definitions to provide extra function
-# keys by using the shift-modifier in the translations resource. However, that
-# interferes with the DECUDK functionality.
-#
-xterm-vt220|xterm emulating vt220,
- ka1=\EOw,
- ka3=\EOy,
- kb2=\EOu,
- kc1=\EOq,
- kc3=\EOs,
- kcbt=\E[Z,
- kcub1=\EOD,
- kcud1=\EOB,
- kcuf1=\EOC,
- kcuu1=\EOA,
- kend=\E[4~,
- kent=\EOM,
- kf1=\EOP,
- kf10=\E[21~,
- kf11=\E[23~,
- kf12=\E[24~,
- kf13=\E[25~,
- kf14=\E[26~,
- kf15=\E[28~,
- kf16=\E[29~,
- kf17=\E[31~,
- kf18=\E[32~,
- kf19=\E[33~,
- kf2=\EOQ,
- kf20=\E[34~,
- kf3=\EOR,
- kf4=\EOS,
- kf5=\E[15~,
- kf6=\E[17~,
- kf7=\E[18~,
- kf8=\E[19~,
- kf9=\E[20~,
- khome=\E[1~,
- kich1=\E[2~,
- kmous=\E[M,
- knp=\E[6~,
- kpp=\E[5~,
- use=xterm-basic,
-#
-xterm-vt52|xterm emulating dec vt52,
- cols#80,
- it#8,
- lines#24,
- acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
- bel=^G,
- clear=\EH\EJ,
- cr=^M,
- cub1=\ED,
- cud1=\EB,
- cuf1=\EC,
- cup=\EY%p1%' '%+%c%p2%' '%+%c,
- cuu1=\EA,
- ed=\EJ,
- el=\EK,
- home=\EH,
- ht=^I,
- ind=^J,
- kbs=^H,
- kcub1=\ED,
- kcud1=\EB,
- kcuf1=\EC,
- kcuu1=\EA,
- nel=^M^J,
- ri=\EI,
- rmacs=\EG,
- smacs=\EF,
-#
-# kf30-kf45 are keysyms XK_R1 through XK_R15 on the Sun keyboard.
-xterm-sun|xterm with sun function keys,
- kb2=\E[218z,
- kcpy=\E[197z,
- kcub1=\EOD,
- kcud1=\EOB,
- kcuf1=\EOC,
- kcuu1=\EOA,
- kdch1=\177,
- kend=\E[220z,
- kent=\EOM,
- kf1=\E[224z,
- kf10=\E[233z,
- kf11=\E[192z,
- kf12=\E[193z,
- kf13=\E[194z,
- kf14=\E[195z,
- kf15=\E[196z,
- kf17=\E[198z,
- kf18=\E[199z,
- kf19=\E[200z,
- kf2=\E[225z,
- kf20=\E[201z,
- kf3=\E[226z,
- kf31=\E[208z,
- kf32=\E[209z,
- kf33=\E[210z,
- kf34=\E[211z,
- kf35=\E[212z,
- kf36=\E[213z,
- kf38=\E[215z,
- kf4=\E[227z,
- kf40=\E[217z,
- kf42=\E[219z,
- kf44=\E[221z,
- kf5=\E[228z,
- kf6=\E[229z,
- kf7=\E[230z,
- kf8=\E[231z,
- kf9=\E[232z,
- kfnd=\E[200z,
- khlp=\E[196z,
- khome=\E[214z,
- kich1=\E[2z,
- kmous=\E[M,
- knp=\E[222z,
- kpp=\E[216z,
- kund=\E[195z,
- use=xterm-basic,
-#
-xterm-hp|xterm with hpterm function keys,
- kclr=\EJ,
- kcub1=\ED,
- kcud1=\EB,
- kcuf1=\EC,
- kcuu1=\EA,
- kdch1=\EP,
- kend=\EF,
- kf1=\Ep,
- kf2=\Eq,
- kf3=\Er,
- kf4=\Es,
- kf5=\Et,
- kf6=\Eu,
- kf7=\Ev,
- kf8=\Ew,
- khome=\Eh,
- kich1=\EQ,
- knp=\ES,
- kpp=\ET,
- use=xterm-basic,
-xterm-sco|xterm with SCO function keys,
- kcub1=\E[D,
- kcud1=\E[B,
- kcuf1=\E[C,
- kcuu1=\E[A,
- kend=\E[F,
- kf1=\E[M,
- kf10=\E[V,
- kf11=\E[W,
- kf12=\E[X,
- kf13=\E[Y,
- kf15=\E[a,
- kf16=\E[b,
- kf17=\E[c,
- kf18=\E[d,
- kf19=\E[e,
- kf2=\E[N,
- kf20=\E[f,
- kf21=\E[g,
- kf22=\E[h,
- kf23=\E[i,
- kf24=\E[j,
- kf25=\E[k,
- kf26=\E[l,
- kf27=\E[m,
- kf28=\E[n,
- kf29=\E[o,
- kf3=\E[O,
- kf30=\E[p,
- kf31=\E[q,
- kf32=\E[r,
- kf33=\E[s,
- kf34=\E[t,
- kf35=\E[u,
- kf4=\E[P,
- kf5=\E[Q,
- kf6=\E[R,
- kf7=\E[S,
- kf8=\E[T,
- kf9=\E[U,
- khome=\E[H,
- kich1=\E[L,
- knp=\E[G,
- kpp=\E[I,
- use=xterm-basic,
-#
-# Other variants:
-xterm-24|xterms|vs100|xterm terminal emulator (X Window System),
- lines#24,
- use=xterm,
-xterm-65|xterm with tall window 65x80 (X Window System),
- lines#65,
- use=xterm,
-xterm-bold|xterm with bold instead of underline (X Window System),
- smso=\E[7m,
- smul=\E[1m,
- use=xterm,
-xterm-boldso|xterm with bold for standout (X Window System),
- rmso=\E[m,
- smso=\E[1m,
- use=xterm,
-xterm-mono|monochrome xterm,
- bce@,
- colors@,
- ncv@,
- pairs@,
- op@,
- setab@,
- setaf@,
- setb@,
- setf@,
- sgr@,
- use=xterm,
-#
-# VTxxx terminals are usually set up so that full-screen applications will use
-# the cursor application mode strings. This is good for full-screen
-# applications, including legacy applications which may have hard-coded
-# behavior, but bad for interactive shells (e.g., tcsh, bash) which use arrow
-# keys to scroll through a history of command strings.
-#
-# To see the difference between normal/application modes, consider this example:
-# + In normal (non-application) mode, the terminal transmits a down-arrow
-# as \E[C, which happens to echo as a down-arrow.
-# + In application mode the terminal transmits \EOC, which echoes as C.
-# That is because the \EO is the SS3 control, which says to use the
-# character from the G3 character set for the next cell.
-#
-# One example of hard-coded behavior would be for applications written to work
-# with VT52 and VT100 terminals. If the application's parser ignores 'O' and
-# '?' characters after the escape, then the cursor and keypad strings for the
-# two terminals are the same. (Indeed, one of the first curses applications
-# which I used did something like this to cover "ANSI" terminals -TD).
-#
-# To make this work (leaving the cursor keys in normal mode), we have to adjust
-# the terminal initialization sequences:
-#
-# smkx/rmkx set/reset the cursor and keypad application modes. We retain
-# the latter (otherwise many applications fail).
-#
-# smcup/rmcup set/restore cursor-addressing mode for full-screen
-# applications. For xterm, this normally means the alternate
-# screen, which is not compatible with interactive shells. Some
-# programs are "smart" and disable these.
-#
-xterm-noapp|xterm with cursor keys in normal mode,
- kcub1=\E[D,
- kcud1=\E[B,
- kcuf1=\E[C,
- kcuu1=\E[A,
- rmcup@,
- rmkx=\E>,
- smcup@,
- smkx=\E=,
- use=xterm,
-#
-# This should work for the commonly used "color xterm" variations (XFree86
-# xterm, color_xterm, nxterm, rxvt). Note that it does not set 'bce', so for
-# XFree86 and and rxvt, some applications that use colors will be less
-# efficient, and in a few special cases (with "smart" optimization) the wrong
-# color will be painted in spots.
-xterm-color|generic "ANSI" color xterm (X Window System),
- colors#8,
- ncv@,
- pairs#64,
- op=\E[m,
- setab=\E[4%p1%dm,
- setaf=\E[3%p1%dm,
- use=xterm-r6,
-#
-# vi may work better with this entry, because vi
-# doesn't use insert mode much
-xterm-ic|xterm-vi|xterm with insert character instead of insert mode,
- mir@,
- ich=\E[%p1%d@,
- ich1=\E[@,
- rmir@,
- smir@,
- use=xterm,
-#
-# This is used only for testing (it's not relevant to DEC VTxxx terminals, but
-# to ncurses).
-xterm-xmc|xterm with magic-cookie glitch,
- xmc#1,
- use=xterm-new,
-#
-# This one also is primarily for testing ncurses; while the ISO 6429 defines
-# the REP control, none of the DEC VTxxx terminals (VT52 through VT420) support
-# it.
-xterm-rep|xterm with repeat-character control,
- rep=%p1%c\E[%p2%{1}%-%db,
- use=xterm-new,
-#
-# This is mainly for testing xterm; the real VT220 will not let you switch
-# character sets without first altering the keyboard language in the setup
-# screen. Some emulators allow this anyway. (Note that these strings are
-# normally used only for printers). The parameter to csnm and scs is the same
-# in both cases: the keyboard language parameter returned by CSI ? 2 6 n.
-xterm-nrc|xterm with VT220 national replacement character sets,
- csnm=%?%p1%{1}%=%tNorth American%e%p1%{2}%=%tBritish%e%p1%{3}%=%tFlemish%e%p1%{4}%=%tFrench Canadian%e%p1%{5}%=%tDanish%e%p1%{6}%=%tFinnish%e%p1%{7}%=%tGerman%e%p1%{8}%=%tDutch%e%p1%{9}%=%tItalian%e%p1%{10}%=%tSwiss (French)%e%p1%{11}%=%tSwiss (German)%e%p1%{12}%=%tSwedish%e%p1%{13}%=%tNorwegian%e%p1%{14}%=%tFrench/Belgian%e%p1%{15}%=%tSpanish%;,
- scs=%?%p1%{1}%=%t\E(B%e%p1%{2}%=%t\E(A%e%p1%{3}%=%t\E(R%e%p1%{4}%=%t\E(9%e%p1%{5}%=%t\E(E%e%p1%{6}%=%t\E(5%e%p1%{7}%=%t\E(K%e%p1%{8}%=%t\E(4%e%p1%{9}%=%t\E(Y%e%p1%{10}%=%t\E(=%e%p1%{11}%=%t\E(=%e%p1%{12}%=%t\E(7%e%p1%{13}%=%t\E(E%e%p1%{14}%=%t\E(R%e%p1%{15}%=%t\E(Z%;,
- use=xterm-new,
-#
-# Foreground 0-15 maps (with toggles) into 30-37 & 90-97
-# Background 0-15 maps (with toggles) into 40-47 & 100-107
-#
-# Originally I suppressed setaf/setab, since ANSI specifies only 8 colors, but
-# Stephen Marley persuaded me to allow the "ANSI" color controls to extend to
-# 16 colors. (Note that ncurses 4.2 uses setf/setb from this description;
-# however 5.0 selects either according to their availability). - T.Dickey
-#
-# SVr4 curses does not use more than 8 colors anyway, so using 16 colors is
-# either for terminfo-level applications or via ncurses.
-xterm-16color|xterm with 16 colors,
- colors#16,
- ncv#32,
- pairs#256,
- setab=\E[%?%p1%{8}%<%t%p1%{40}%+%e%p1%{92}%+%;%dm,
- setaf=\E[%?%p1%{8}%<%t%p1%{30}%+%e%p1%{82}%+%;%dm,
- setb=%p1%{8}%/%{6}%*%{4}%+\E[%d%p1%{8}%m%Pa%?%ga%{1}%=%t4%e%ga%{3}%=%t6%e%ga%{4}%=%t1%e%ga%{6}%=%t3%e%ga%d%;m,
- setf=%p1%{8}%/%{6}%*%{3}%+\E[%d%p1%{8}%m%Pa%?%ga%{1}%=%t4%e%ga%{3}%=%t6%e%ga%{4}%=%t1%e%ga%{6}%=%t3%e%ga%d%;m,
- use=xterm-new,
-#
-# This uses RGB values 0..1000
-#
-# 256 colors should give 65536 pairs, but terminfo stores numbers in a signed
-# short. Most people will not notice problems with only 32767 pairs.
-xterm-256color|xterm with 256 colors,
- 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=xterm-new,
-xterm-88color|xterm with 88 colors,
- colors#88,
- pairs#7744,
- use=xterm-256color,
-#
-# This is an 8-bit version of xterm, which emulates DEC vt220 with ANSI color.
-# To use it, your decTerminalID resource must be set to 200 or above, and the
-# sunKeyboard resource set to true.
-#
-# HTS \E H \210
-# RI \E M \215
-# SS3 \E O \217
-# CSI \E [ \233
-#
-xterm-8bit|xterm terminal emulator with 8-bit controls (X Window System),
- am,
- bce,
- km,
- mc5i,
- mir,
- msgr,
- npc,
- xenl,
- colors#8,
- cols#80,
- it#8,
- lines#24,
- pairs#64,
- acsc=``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
- bel=^G,
- blink=\2335m,
- bold=\2331m,
- cbt=\233Z,
- civis=\233?25l,
- clear=\233H\2332J,
- cnorm=\233?25l\233?25h,
- cr=^M,
- csr=\233%i%p1%d;%p2%dr,
- cub=\233%p1%dD,
- cub1=^H,
- cud=\233%p1%dB,
- cud1=^J,
- cuf=\233%p1%dC,
- cuf1=\233C,
- cup=\233%i%p1%d;%p2%dH,
- cuu=\233%p1%dA,
- cuu1=\233A,
- cvvis=\233?12;25h,
- dch=\233%p1%dP,
- dch1=\233P,
- dl=\233%p1%dM,
- dl1=\233M,
- ech=\233%p1%dX,
- ed=\233J,
- el=\233K,
- el1=\2331K,
- flash=\233?5h$<100/>\233?5l,
- home=\233H,
- hpa=\233%i%p1%dG,
- ht=^I,
- hts=\210,
- ich=\233%p1%d@,
- il=\233%p1%dL,
- il1=\233L,
- ind=^J,
- invis=\2338m,
- is2=\E[62"p\E G\233m\233?7h\E>\E7\233?1;3;4;6l\2334l\233r\E8,
- ka1=\217w,
- ka3=\217u,
- kb2=\217y,
- kbeg=\217E,
- kbs=^H,
- kc1=\217q,
- kc3=\217s,
- kcbt=\233Z,
- kcub1=\217D,
- kcud1=\217B,
- kcuf1=\217C,
- kcuu1=\217A,
- kdch1=\2333~,
- kend=\2334~,
- kent=\217M,
- kf1=\23311~,
- kf10=\23321~,
- kf11=\23323~,
- kf12=\23324~,
- kf13=\23325~,
- kf14=\23326~,
- kf15=\23328~,
- kf16=\23329~,
- kf17=\23331~,
- kf18=\23332~,
- kf19=\23333~,
- kf2=\23312~,
- kf20=\23334~,
- kf3=\23313~,
- kf4=\23314~,
- kf5=\23315~,
- kf6=\23317~,
- kf7=\23318~,
- kf8=\23319~,
- kf9=\23320~,
- khome=\2331~,
- kich1=\2332~,
- kmous=\233M,
- knp=\2336~,
- kpp=\2335~,
- mc0=\233i,
- mc4=\2334i,
- mc5=\2335i,
- meml=\El,
- memu=\Em,
- op=\23339;49m,
- rc=\E8,
- rev=\2337m,
- ri=\215,
- rmacs=\E(B,
- rmam=\233?7l,
- rmcup=\233?1049l,
- rmir=\2334l,
- rmkx=\233?1l\E>,
- rmso=\23327m,
- rmul=\23324m,
- rs1=\Ec,
- rs2=\E[62"p\E G\233m\233?7h\E>\E7\233?1;3;4;6l\2334l\233r\E8,
- sc=\E7,
- setab=\2334%p1%dm,
- setaf=\2333%p1%dm,
- setb=\2334%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}%=%t3%e%p1%d%;m,
- setf=\2333%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}%=%t3%e%p1%d%;m,
- sgr=\2330%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;%?%p7%t;8%;m%?%p9%t\E(0%e\E(B%;,
- sgr0=\233m\E(B,
- smacs=\E(0,
- smam=\233?7h,
- smcup=\233?1049h,
- smir=\2334h,
- smkx=\233?1h\E=,
- smso=\2337m,
- smul=\2334m,
- tbc=\2333g,
- u6=\233[%i%d;%dR,
- u7=\E[6n,
- u8=\233[?1;2c,
- u9=\E[c,
- vpa=\233%i%p1%dd,
-#
-# Compatible with the R6 xterm, with the following changes:
-# + added acsc (perhaps some versions of tic assume the standard vt100
-# alternate character set)
-# + added u6, u7, u8, u9 strings for Daniel Weaver's tack program.
-# + added kmous string for ncurses.
-# + added khome/kend strings (which conflict with kfnd/kslt, see note).
-xterm-r6|xterm-old|xterm X11R6 version,
- am,
- km,
- mir,
- msgr,
- xenl,
- cols#80,
- it#8,
- lines#24,
- acsc=``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
- bel=^G,
- blink@,
- bold=\E[1m,
- clear=\E[H\E[2J,
- cr=^M,
- csr=\E[%i%p1%d;%p2%dr,
- cub=\E[%p1%dD,
- cub1=^H,
- cud=\E[%p1%dB,
- cud1=^J,
- cuf=\E[%p1%dC,
- cuf1=\E[C,
- cup=\E[%i%p1%d;%p2%dH,
- cuu=\E[%p1%dA,
- cuu1=\E[A,
- dch=\E[%p1%dP,
- dch1=\E[P,
- dl=\E[%p1%dM,
- dl1=\E[M,
- ed=\E[J,
- el=\E[K,
- enacs=\E)0,
- home=\E[H,
- ht=^I,
- il=\E[%p1%dL,
- il1=\E[L,
- ind=^J,
- is2=\E[m\E[?7h\E[4l\E>\E7\E[r\E[?1;3;4;6l\E8,
- kbs=^H,
- kcub1=\EOD,
- kcud1=\EOB,
- kcuf1=\EOC,
- kcuu1=\EOA,
- kdch1=\177,
- kend=\E[4~,
- kf1=\E[11~,
- kf10=\E[21~,
- kf11=\E[23~,
- kf12=\E[24~,
- kf13=\E[25~,
- kf14=\E[26~,
- kf15=\E[28~,
- kf16=\E[29~,
- kf17=\E[31~,
- kf18=\E[32~,
- kf19=\E[33~,
- kf2=\E[12~,
- kf20=\E[34~,
- kf3=\E[13~,
- kf4=\E[14~,
- kf5=\E[15~,
- kf6=\E[17~,
- kf7=\E[18~,
- kf8=\E[19~,
- kf9=\E[20~,
- khome=\E[1~,
- kich1=\E[2~,
- kmous=\E[M,
- knp=\E[6~,
- kpp=\E[5~,
- meml=\El,
- memu=\Em,
- rc=\E8,
- rev=\E[7m,
- ri=\EM,
- rmacs=^O,
- rmcup=\E[2J\E[?47l\E8,
- rmir=\E[4l,
- rmkx=\E[?1l\E>,
- rmso=\E[m,
- rmul=\E[m,
- rs2=\E[m\E[?7h\E[4l\E>\E7\E[r\E[?1;3;4;6l\E8,
- sc=\E7,
- sgr0=\E[m,
- smacs=^N,
- smcup=\E7\E[?47h,
- smir=\E[4h,
- smkx=\E[?1h\E=,
- smso=\E[7m,
- smul=\E[4m,
- tbc=\E[3g,
- u6=\E[%i%d;%dR,
- u7=\E[6n,
- u8=\E[?1;2c,
- u9=\E[c,
-#
-# Compatible with the R5 xterm, with the following changes:
-# + changed 'blink=@', to 'blink@' (the former meant that "@" would start
-# a blink, the latter that it is not supported).
-# + changed kf1 through kf4 to correspond with actual usage. Though X
-# supports keypad symbols for PF1 to PF4, and xterm interprets these
-# correctly, the F1 to F4 codes are commonly (but incorrectly) used.
-# + moved reset string from rs1 to rs2, to correlate better with termcap.
-# + make khome consistent with other entries.
-# + use rmul/smul, rmir/smir from termcap, but not rmcup/smcup because
-# not everyone wants the alternate screen.
-# + added u6, u7, u8, u9 strings for Daniel Weaver's tack program.
-# + added kmous string for ncurses.
-xterm-r5|xterm R5 version,
- am,
- km,
- msgr,
- xenl,
- cols#80,
- it#8,
- lines#24,
- bel=^G,
- blink@,
- bold=\E[1m,
- clear=\E[H\E[2J,
- cr=^M,
- csr=\E[%i%p1%d;%p2%dr,
- cub=\E[%p1%dD,
- cub1=^H,
- cud=\E[%p1%dB,
- cud1=^J,
- cuf=\E[%p1%dC,
- cuf1=\E[C,
- cup=\E[%i%p1%d;%p2%dH,
- cuu=\E[%p1%dA,
- cuu1=\E[A,
- dch=\E[%p1%dP,
- dch1=\E[P,
- dl=\E[%p1%dM,
- dl1=\E[M,
- ed=\E[J,
- el=\E[K,
- home=\E[H,
- ht=^I,
- hts=\EH,
- ich=\E[%p1%d@,
- ich1=\E[@,
- il=\E[%p1%dL,
- il1=\E[L,
- ind=^J,
- kbs=^H,
- kcub1=\EOD,
- kcud1=\EOB,
- kcuf1=\EOC,
- kcuu1=\EOA,
- kdch1=\177,
- kdl1=\E[31~,
- kel=\E[8~,
- kend=\E[4~,
- kf0=\EOq,
- kf1=\E[11~,
- kf10=\E[21~,
- kf11=\E[23~,
- kf12=\E[24~,
- kf2=\E[12~,
- kf3=\E[13~,
- kf4=\E[14~,
- kf5=\E[15~,
- kf6=\E[17~,
- kf7=\E[18~,
- kf8=\E[19~,
- kf9=\E[20~,
- khome=\E[1~,
- kich1=\E[2~,
- kil1=\E[30~,
- kmous=\E[M,
- knp=\E[6~,
- kpp=\E[5~,
- rc=\E8,
- rev=\E[7m,
- ri=\EM,
- rmir=\E[4l,
- rmkx=\E[?1l\E>,
- rmso=\E[m,
- rmul=\E[m,
- rs2=\E>\E[?1;3;4;5;6l\E[4l\E[?7h\E[m\E[r\E[2J\E[H,
- sc=\E7,
- sgr=\E[%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p6%t;1%;m,
- sgr0=\E[m,
- smir=\E[4h,
- smkx=\E[?1h\E=,
- smso=\E[7m,
- smul=\E[4m,
- tbc=\E[3g,
- u6=\E[%i%d;%dR,
- u7=\E[6n,
- u8=\E[?1;2c,
- u9=\E[c,
-#
-# Customization begins here.
-xterm-xfree86|xterm terminal emulator (XFree86),
- use=xterm-new,
-#
-# This is the only entry which you should have to customize, since "xterm"
-# is widely used for a variety of incompatible terminal emulations including
-# color_xterm and rxvt.
-xterm|X11 terminal emulator,
- use=xterm-new,
-# use=xterm-r6,
diff --git a/nx-X11/programs/xterm/testxmc.c b/nx-X11/programs/xterm/testxmc.c
deleted file mode 100644
index 60c1f14b4..000000000
--- a/nx-X11/programs/xterm/testxmc.c
+++ /dev/null
@@ -1,226 +0,0 @@
-/* $XTermId: testxmc.c,v 1.30 2005/08/05 01:25:40 tom Exp $ */
-
-/*
- * $XFree86: xc/programs/xterm/testxmc.c,v 3.13 2005/08/05 01:25:40 dickey Exp $
- */
-
-/************************************************************
-
-Copyright 1997-2004,2005 by Thomas E. Dickey
-
- All Rights Reserved
-
-Permission is hereby granted, free of charge, to any person obtaining a
-copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name(s) of the above copyright
-holders shall not be used in advertising or otherwise to promote the
-sale, use or other dealings in this Software without prior written
-authorization.
-
-********************************************************/
-
-/*
- * This module provides test support for curses applications that must work
- * with terminals that have the xmc (magic cookie) glitch. The xmc_glitch
- * resource denotes the number of spaces that are emitted when switching to or
- * from standout (reverse) mode. Some terminals implement this by storing the
- * attribute controls in the character cell that is skipped. So if the cell is
- * overwritten by text, then the attribute change in the cell is cancelled,
- * causing attributes to the left of the change to propagate.
- *
- * We implement the glitch by writing a character that won't be mistaken for
- * other normal characters (and mapping normal writes to that character to a
- * different one).
- *
- * Since xmc isn't normally part of xterm, we document it here rather than in
- * the man-page. This module is driven by resources rather than by the
- * termcap/terminfo description to make it a little more flexible for testing
- * purposes.
- *
- * Resources:
- *
- * xmcGlitch (class XmcGlitch)
- * When true, enables this extension. The default is `0', which disables
- * the module. (termcap sg, terminfo xmc).
- *
- * xmcAttributes (class XmcAttributes)
- * The attributes for which we'll generate a glitch, as a bitmask.
- *
- * INVERSE 1
- * UNDERLINE 2
- * BOLD 4
- * BLINK 8
- *
- * The default is `1' (INVERSE). Some terminals emit glitches for
- * underline. Just for completeness, we recognize all of the video
- * attributes.
- *
- * xmcInline (class XmcInline)
- * When true, limits the extent of an SGR change to the current line.
- * The default is `false'. (No termcap or terminfo equivalent, though
- * there are comments in some entries relating to this issue).
- *
- * xmcMoveSGR (class XmcMoveSGR)
- * When false, a cursor movement will leave a glitch when SGR's are
- * active. The default is `true'. (termcap ms, terminfo msgr).
- *
- * TODO:
- * When xmc is active, the terminfo max_attributes (ma) capability is
- * assumed to be 1.
- *
- * The xmcAttributes resource should also apply to alternate character
- * sets and to color.
- */
-
-#include <xterm.h>
-#include <data.h>
-
-#define MARK_ON(a) (my_attrs & a) != 0 && (term->flags & (whichone = a)) == 0
-#define MARK_OFF(a) (my_attrs & a) != 0 && (term->flags & (whichone = a)) != 0
-
-void
-Mark_XMC(TScreen * screen, int param)
-{
- static IChar *glitch;
- Bool found = False;
- Char my_attrs = (screen->xmc_attributes & XMC_FLAGS);
- Char whichone = 0;
-
- if (glitch == 0) {
- unsigned len = screen->xmc_glitch;
- glitch = TypeMallocN(IChar, len);
- while (len--)
- glitch[len] = XMC_GLITCH;
- }
- switch (param) {
- case -1: /* DEFAULT */
- case 0: /* FALLTHRU */
- found = MARK_OFF((term->flags & XMC_FLAGS));
- break;
- case 1:
- found = MARK_ON(BOLD);
- break;
- case 4:
- found = MARK_ON(UNDERLINE);
- break;
- case 5:
- found = MARK_ON(BLINK);
- break;
- case 7:
- found = MARK_ON(INVERSE);
- break;
- case 22:
- found = MARK_OFF(BOLD);
- break;
- case 24:
- found = MARK_OFF(UNDERLINE);
- break;
- case 25:
- found = MARK_OFF(BLINK);
- break;
- case 27:
- found = MARK_OFF(INVERSE);
- break;
- }
-
- /*
- * Write a glitch with the attributes temporarily set to the new(er)
- * ones.
- */
- if (found) {
- unsigned save = term->flags;
- term->flags ^= whichone;
- TRACE(("XMC Writing glitch (%d/%d) after SGR %d\n", my_attrs,
- whichone, param));
- dotext(screen, '?', glitch, screen->xmc_glitch);
- term->flags = save;
- }
-}
-
-/*
- * Force a glitch on cursor movement when we're in standout mode and not at the
- * end of a line.
- */
-void
-Jump_XMC(TScreen * screen)
-{
- if (!screen->move_sgr_ok
- && screen->cur_col <= CurMaxCol(screen, screen->cur_row)) {
- Mark_XMC(screen, -1);
- }
-}
-
-/*
- * After writing text to the screen, resolve mismatch between the current
- * location and any attributes that would have been set by preceding locations.
- */
-void
-Resolve_XMC(TScreen * screen)
-{
- Bool changed = False;
- Char start;
- Char my_attrs = (screen->xmc_attributes & XMC_FLAGS);
- int row = screen->cur_row;
- int col = screen->cur_col;
-
- /* Find the preceding cell.
- */
- if (getXtermCell(screen, row, col) != XMC_GLITCH) {
- if (col != 0) {
- col--;
- } else if (!screen->xmc_inline && row != 0) {
- row--;
- col = CurMaxCol(screen, row);
- }
- }
- start = (SCRN_BUF_ATTRS(screen, row)[col] & my_attrs);
-
- /* Now propagate the starting state until we reach a cell which holds
- * a glitch.
- */
- for (;;) {
- if (col < CurMaxCol(screen, row)) {
- col++;
- } else if (!screen->xmc_inline && row < screen->max_row) {
- row++;
- col = 0;
- } else
- break;
- if (getXtermCell(screen, row, col) == XMC_GLITCH)
- break;
- if ((SCRN_BUF_ATTRS(screen, row)[col] & my_attrs) != start) {
- SCRN_BUF_ATTRS(screen, row)[col] = start |
- (SCRN_BUF_ATTRS(screen, row)[col] & ~my_attrs);
- changed = True;
- }
- }
-
- TRACE(("XMC %s (%s:%d/%d) from %d,%d to %d,%d\n",
- changed ? "Ripple" : "Nochange",
- BtoS(term->flags & my_attrs),
- my_attrs, start,
- screen->cur_row, screen->cur_col,
- row, col));
-
- if (changed) {
- ScrnUpdate(screen, screen->cur_row, 0, row + 1 - screen->cur_row,
- MaxCols(screen), True);
- }
-}
diff --git a/nx-X11/programs/xterm/trace.c b/nx-X11/programs/xterm/trace.c
deleted file mode 100644
index abaaf634f..000000000
--- a/nx-X11/programs/xterm/trace.c
+++ /dev/null
@@ -1,490 +0,0 @@
-/* $XTermId: trace.c,v 1.63 2005/09/18 23:48:13 tom Exp $ */
-
-/*
- * $XFree86: xc/programs/xterm/trace.c,v 3.23 2005/09/18 23:48:13 dickey Exp $
- */
-
-/************************************************************
-
-Copyright 1997-2004,2005 by Thomas E. Dickey
-
- All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and its
-documentation for any purpose and without fee is hereby granted,
-provided that the above copyright notice appear in all copies and that
-both that copyright notice and this permission notice appear in
-supporting documentation, and that the name of the above listed
-copyright holder(s) not be used in advertising or publicity pertaining
-to distribution of the software without specific, written prior
-permission.
-
-THE ABOVE LISTED COPYRIGHT HOLDER(S) DISCLAIM ALL WARRANTIES WITH REGARD
-TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
-AND FITNESS, IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE
-LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
-ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
-OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-
-********************************************************/
-
-/*
- * debugging support via TRACE macro.
- */
-
-#include <xterm.h> /* for definition of GCC_UNUSED */
-#include <data.h>
-#include <trace.h>
-
-#include <time.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <sys/types.h>
-#include <stdio.h>
-#include <stdarg.h>
-
-#ifdef HAVE_X11_TRANSLATEI_H
-#include <X11/TranslateI.h>
-#else
-#ifdef __cplusplus
-extern "C" {
-#endif
-
- extern String _XtPrintXlations(Widget w,
- XtTranslations xlations,
- Widget accelWidget,
- _XtBoolean includeRHS);
-#ifdef __cplusplus
-}
-#endif
-#endif
-char *trace_who = "parent";
-
-void
-Trace(char *fmt,...)
-{
- static FILE *fp;
- static char *trace_out;
- va_list ap;
-
- if (fp != 0
- && trace_who != trace_out) {
- fclose(fp);
- fp = 0;
- }
- trace_out = trace_who;
-
- if (!fp) {
- char name[BUFSIZ];
-#if 0 /* usually I do not want unique names */
- int unique;
- for (unique = 0;; ++unique) {
- if (unique)
- sprintf(name, "Trace-%s.out-%d", trace_who, unique);
- else
- sprintf(name, "Trace-%s.out", trace_who);
- if ((fp = fopen(name, "r")) == 0) {
- break;
- }
- fclose(fp);
- }
-#else
- sprintf(name, "Trace-%s.out", trace_who);
-#endif
- fp = fopen(name, "w");
- if (fp != 0) {
- time_t now = time((time_t *) 0);
- fprintf(fp, "%s\n", xtermVersion());
-#ifdef HAVE_UNISTD_H
- fprintf(fp, "process %d real (%u/%u) effective (%u/%u) -- %s",
- getpid(),
- (unsigned) getuid(), (unsigned) getgid(),
- (unsigned) geteuid(), (unsigned) getegid(),
- ctime(&now));
-#else
- fprintf(fp, "process %d -- %s",
- getpid(),
- ctime(&now));
-#endif
- }
- }
- if (!fp)
- abort();
-
- va_start(ap, fmt);
- if (fmt != 0) {
- vfprintf(fp, fmt, ap);
- (void) fflush(fp);
- } else {
- (void) fclose(fp);
- (void) fflush(stdout);
- (void) fflush(stderr);
- }
- va_end(ap);
-}
-
-char *
-visibleChars(PAIRED_CHARS(Char * buf, Char * buf2), unsigned len)
-{
- static char *result;
- static unsigned used;
- unsigned limit = ((len + 1) * 8) + 1;
- char *dst;
-
- if (limit > used) {
- used = limit;
- result = XtRealloc(result, used);
- }
- dst = result;
- while (len--) {
- unsigned value = *buf++;
-#if OPT_WIDE_CHARS
- if (buf2 != 0) {
- value |= (*buf2 << 8);
- buf2++;
- }
- if (value > 255)
- sprintf(dst, "\\u+%04X", value);
- else
-#endif
- if (E2A(value) < 32 || (E2A(value) >= 127 && E2A(value) < 160))
- sprintf(dst, "\\%03o", value);
- else
- sprintf(dst, "%c", CharOf(value));
- dst += strlen(dst);
- }
- return result;
-}
-
-char *
-visibleIChar(IChar * buf, unsigned len)
-{
- static char *result;
- static unsigned used;
- unsigned limit = ((len + 1) * 6) + 1;
- char *dst;
-
- if (limit > used) {
- used = limit;
- result = XtRealloc(result, used);
- }
- dst = result;
- while (len--) {
- unsigned value = *buf++;
-#if OPT_WIDE_CHARS
- if (value > 255)
- sprintf(dst, "\\u+%04X", value);
- else
-#endif
- if (E2A(value) < 32 || (E2A(value) >= 127 && E2A(value) < 160))
- sprintf(dst, "\\%03o", value);
- else
- sprintf(dst, "%c", CharOf(value));
- dst += strlen(dst);
- }
- return result;
-}
-
-#define CASETYPE(name) case name: result = #name; break;
-
-const char *
-visibleKeyboardType(xtermKeyboardType type)
-{
- const char *result = "?";
- switch (type) {
- CASETYPE(keyboardIsLegacy); /* bogus vt220 codes for F1-F4, etc. */
- CASETYPE(keyboardIsDefault);
- CASETYPE(keyboardIsHP);
- CASETYPE(keyboardIsSCO);
- CASETYPE(keyboardIsSun);
- CASETYPE(keyboardIsVT220);
- }
- return result;
-}
-
-void
-TraceSizeHints(XSizeHints * hints)
-{
- TRACE(("size hints:\n"));
- if (hints->flags & (USPosition | PPosition))
- TRACE((" position %d,%d%s%s\n", hints->y, hints->x,
- hints->flags & USPosition ? " user" : "",
- hints->flags & PPosition ? " prog" : ""));
- if (hints->flags & (USSize | PSize))
- TRACE((" size %d,%d%s%s\n", hints->height, hints->width,
- hints->flags & USSize ? " user" : "",
- hints->flags & PSize ? " prog" : ""));
- if (hints->flags & PMinSize)
- TRACE((" min %d,%d\n", hints->min_height, hints->min_width));
- if (hints->flags & PMaxSize)
- TRACE((" max %d,%d\n", hints->max_height, hints->max_width));
- if (hints->flags & PResizeInc)
- TRACE((" inc %d,%d\n", hints->height_inc, hints->width_inc));
- if (hints->flags & PAspect)
- TRACE((" min aspect %d/%d\n", hints->min_aspect.y, hints->min_aspect.y));
- if (hints->flags & PAspect)
- TRACE((" max aspect %d/%d\n", hints->max_aspect.y, hints->max_aspect.y));
- if (hints->flags & PBaseSize)
- TRACE((" base %d,%d\n", hints->base_height, hints->base_width));
- if (hints->flags & PWinGravity)
- TRACE((" gravity %d\n", hints->win_gravity));
-}
-
-void
-TraceWMSizeHints(XtermWidget xw)
-{
- XSizeHints sizehints;
- long supp = 0;
-
- bzero(&sizehints, sizeof(sizehints));
- if (!XGetWMNormalHints(xw->screen.display, XtWindow(SHELL_OF(xw)),
- &sizehints, &supp))
- bzero(&sizehints, sizeof(sizehints));
- TraceSizeHints(&sizehints);
-}
-
-/*
- * Some calls to XGetAtom() will fail, and we don't want to stop. So we use
- * our own error-handler.
- */
-static int
-no_error(Display * dpy GCC_UNUSED, XErrorEvent * event GCC_UNUSED)
-{
- return 1;
-}
-
-void
-TraceTranslations(const char *name, Widget w)
-{
- String result;
- XErrorHandler save = XSetErrorHandler(no_error);
- XtTranslations xlations;
- Widget xcelerat;
-
- TRACE(("TraceTranslations for %s (widget %#lx)\n", name, (long) w));
- if (w) {
- XtVaGetValues(w,
- XtNtranslations, &xlations,
- XtNaccelerators, &xcelerat,
- (XtPointer) 0);
- TRACE(("... xlations %#08lx\n", (long) xlations));
- TRACE(("... xcelerat %#08lx\n", (long) xcelerat));
- result = _XtPrintXlations(w, xlations, xcelerat, True);
- TRACE(("%s\n", result != 0 ? result : "(null)"));
- if (result)
- XFree(result);
- } else {
- TRACE(("none (widget is null)\n"));
- }
- XSetErrorHandler(save);
-}
-
-#define XRES_S(name) Trace(#name " = %s\n", NonNull(resp->name))
-#define XRES_B(name) Trace(#name " = %s\n", BtoS(resp->name))
-#define XRES_I(name) Trace(#name " = %d\n", resp->name)
-
-void
-TraceXtermResources(void)
-{
- XTERM_RESOURCE *resp = &resource;
-
- Trace("XTERM_RESOURCE settings:\n");
- XRES_S(xterm_name);
- XRES_S(icon_geometry);
- XRES_S(title);
- XRES_S(icon_name);
- XRES_S(term_name);
- XRES_S(tty_modes);
- XRES_B(hold_screen);
- XRES_B(utmpInhibit);
- XRES_B(utmpDisplayId);
- XRES_B(messages);
- XRES_B(sunFunctionKeys);
-#if OPT_SUNPC_KBD
- XRES_B(sunKeyboard);
-#endif
-#if OPT_HP_FUNC_KEYS
- XRES_B(hpFunctionKeys);
-#endif
-#if OPT_SCO_FUNC_KEYS
- XRES_B(scoFunctionKeys);
-#endif
-#if OPT_INITIAL_ERASE
- XRES_B(ptyInitialErase);
- XRES_B(backarrow_is_erase);
-#endif
- XRES_B(wait_for_map);
- XRES_B(useInsertMode);
-#if OPT_ZICONBEEP
- XRES_I(zIconBeep);
-#endif
-#if OPT_PTY_HANDSHAKE
- XRES_B(ptyHandshake);
-#endif
-#if OPT_SAME_NAME
- XRES_B(sameName);
-#endif
-#if OPT_SESSION_MGT
- XRES_B(sessionMgt);
-#endif
-}
-
-void
-TraceArgv(const char *tag, char **argv)
-{
- int n = 0;
-
- TRACE(("%s:\n", tag));
- while (*argv != 0) {
- TRACE((" %d:%s\n", n++, *argv++));
- }
-}
-
-static char *
-parse_option(char *dst, char *src, int first)
-{
- char *s;
-
- if (!strncmp(src, "-/+", 3)) {
- dst[0] = first;
- strcpy(dst + 1, src + 3);
- } else {
- strcpy(dst, src);
- }
- for (s = dst; *s != '\0'; s++) {
- if (*s == '#' || *s == '%' || *s == 'S') {
- s[1] = '\0';
- } else if (*s == ' ') {
- *s = '\0';
- break;
- }
- }
- return dst;
-}
-
-static Bool
-same_option(OptionHelp * opt, XrmOptionDescRec * res)
-{
- char temp[BUFSIZ];
- return !strcmp(parse_option(temp, opt->opt, res->option[0]), res->option);
-}
-
-static Bool
-standard_option(char *opt)
-{
- static const char *table[] =
- {
- "+rv",
- "+synchronous",
- "-background",
- "-bd",
- "-bg",
- "-bordercolor",
- "-borderwidth",
- "-bw",
- "-display",
- "-fg",
- "-fn",
- "-font",
- "-foreground",
- "-geometry",
- "-iconic",
- "-name",
- "-reverse",
- "-rv",
- "-selectionTimeout",
- "-synchronous",
- "-title",
- "-xnllanguage",
- "-xrm",
- "-xtsessionID",
- };
- Cardinal n;
- char temp[BUFSIZ];
-
- opt = parse_option(temp, opt, '-');
- for (n = 0; n < XtNumber(table); n++) {
- if (!strcmp(opt, table[n]))
- return True;
- }
- return False;
-}
-
-/*
- * Analyse the options/help messages for inconsistencies.
- */
-void
-TraceOptions(OptionHelp * options, XrmOptionDescRec * resources, Cardinal res_count)
-{
- OptionHelp *opt_array = sortedOpts(options, resources, res_count);
- size_t j, k;
- XrmOptionDescRec *res_array = sortedOptDescs(resources, res_count);
- Bool first, found;
-
- TRACE(("Checking options-tables for inconsistencies:\n"));
-
-#if 0
- TRACE(("Options listed in help-message:\n"));
- for (j = 0; options[j].opt != 0; j++)
- TRACE(("%5d %-28s %s\n", j, opt_array[j].opt, opt_array[j].desc));
- TRACE(("Options listed in resource-table:\n"));
- for (j = 0; j < res_count; j++)
- TRACE(("%5d %-28s %s\n", j, res_array[j].option, res_array[j].specifier));
-#endif
-
- /* list all options[] not found in resources[] */
- for (j = 0, first = True; options[j].opt != 0; j++) {
- found = False;
- for (k = 0; k < res_count; k++) {
- if (same_option(&opt_array[j], &res_array[k])) {
- found = True;
- break;
- }
- }
- if (!found) {
- if (first) {
- TRACE(("Options listed in help, not found in resource list:\n"));
- first = False;
- }
- TRACE((" %-28s%s\n", opt_array[j].opt,
- standard_option(opt_array[j].opt) ? " (standard)" : ""));
- }
- }
-
- /* list all resources[] not found in options[] */
- for (j = 0, first = True; j < res_count; j++) {
- found = False;
- for (k = 0; options[k].opt != 0; k++) {
- if (same_option(&opt_array[k], &res_array[j])) {
- found = True;
- break;
- }
- }
- if (!found) {
- if (first) {
- TRACE(("Resource list items not found in options-help:\n"));
- first = False;
- }
- TRACE((" %s\n", res_array[j].option));
- }
- }
-
- TRACE(("Resource list items that will be ignored by XtOpenApplication:\n"));
- for (j = 0; j < res_count; j++) {
- switch (res_array[j].argKind) {
- case XrmoptionSkipArg:
- TRACE((" %-28s {param}\n", res_array[j].option));
- break;
- case XrmoptionSkipNArgs:
- TRACE((" %-28s {%ld params}\n", res_array[j].option, (long)
- res_array[j].value));
- break;
- case XrmoptionSkipLine:
- TRACE((" %-28s {remainder of line}\n", res_array[j].option));
- break;
- default:
- break;
- }
- }
-}
diff --git a/nx-X11/programs/xterm/trace.h b/nx-X11/programs/xterm/trace.h
deleted file mode 100644
index 9ddfb4650..000000000
--- a/nx-X11/programs/xterm/trace.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/* $XTermId: trace.h,v 1.35 2005/09/18 23:48:13 tom Exp $ */
-
-/*
- * $XFree86: xc/programs/xterm/trace.h,v 3.17 2005/09/18 23:48:13 dickey Exp $
- */
-
-/************************************************************
-
-Copyright 1997-2004,2005 by Thomas E. Dickey
-
- All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and its
-documentation for any purpose and without fee is hereby granted,
-provided that the above copyright notice appear in all copies and that
-both that copyright notice and this permission notice appear in
-supporting documentation, and that the name of the above listed
-copyright holder(s) not be used in advertising or publicity pertaining
-to distribution of the software without specific, written prior
-permission.
-
-THE ABOVE LISTED COPYRIGHT HOLDER(S) DISCLAIM ALL WARRANTIES WITH REGARD
-TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
-AND FITNESS, IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE
-LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
-ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
-OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-
-********************************************************/
-
-/*
- * Common/useful definitions for XTERM application
- */
-#ifndef included_trace_h
-#define included_trace_h
-
-#include <xterm.h>
-
-#if OPT_TRACE
-
-extern void Trace ( char *, ... )
-#ifdef GCC_PRINTF
- __attribute__ ((format(printf,1,2)))
-#endif
- ;
-#define TRACE(p) Trace p
-
-#if OPT_TRACE > 1
-#define TRACE2(p) Trace p
-#endif
-
-extern char * visibleChars (PAIRED_CHARS(Char *buf, Char *buf2), unsigned len);
-extern char * visibleIChar (IChar *, unsigned);
-
-extern void TraceArgv(const char *tag, char **argv);
-#define TRACE_ARGV(tag,argv) TraceArgv(tag,argv)
-
-extern char *trace_who;
-#define TRACE_CHILD int tracing_child = (trace_who = "child") != 0;
-
-extern void TraceSizeHints(XSizeHints *);
-#define TRACE_HINTS(hints) TraceSizeHints(hints)
-
-extern void TraceOptions(OptionHelp *options, XrmOptionDescRec *resources, Cardinal count);
-#define TRACE_OPTS(opts,ress,lens) TraceOptions(opts,ress,lens)
-
-extern void TraceTranslations(const char *, Widget);
-#define TRACE_TRANS(name,w) TraceTranslations(name,w)
-
-extern void TraceWMSizeHints(XtermWidget);
-#define TRACE_WM_HINTS(w) TraceWMSizeHints(w)
-
-extern void TraceXtermResources(void);
-#define TRACE_XRES() TraceXtermResources()
-
-#endif
-
-#endif /* included_trace_h */
diff --git a/nx-X11/programs/xterm/unicode/README b/nx-X11/programs/xterm/unicode/README
deleted file mode 100644
index a6b4fb1db..000000000
--- a/nx-X11/programs/xterm/unicode/README
+++ /dev/null
@@ -1,24 +0,0 @@
--- $XTermId: README,v 1.10 2004/12/01 01:27:49 tom Exp $
--- $XFree86: xc/programs/xterm/unicode/README,v 1.5 2004/12/01 01:27:49 dickey Exp $
--- Thomas E. Dickey
-
-These are some scripts and datafiles used for generating tables used in the
-experimental UTF-8 implementation in xterm.
-
-To run the convmap.pl script, you will need a copy of UnicodeData-Latest.txt
-which is currently available as
-
- ftp://ftp.unicode.org/Public/UNIDATA/UnicodeData.txt
-
-It is a large file (~877kb), so it is not included in this distribution.
-
-convmap.pl is used to generate ../keysym2ucs.c, e.g.,
-
- ./convmap.pl >../keysym2ucs.c
-
-keysym.map is input data for convmap.pl
-
-
-The make-precompose.sh script makes the precompose.c file, which is used to
-handle canonical composition. This also needs UnicodeData-Latest.txt. It uses
-precompose.c.head and precompose.c.tail as templates.
diff --git a/nx-X11/programs/xterm/unicode/convmap.pl b/nx-X11/programs/xterm/unicode/convmap.pl
deleted file mode 100644
index aa85b6fb7..000000000
--- a/nx-X11/programs/xterm/unicode/convmap.pl
+++ /dev/null
@@ -1,177 +0,0 @@
-#!/usr/bin/perl
-# Generate keysym2ucs.c file
-#
-# $XFree86: xc/programs/xterm/unicode/convmap.pl,v 1.5 2000/01/24 22:22:05 dawes Exp $
-
-sub utf8 ($) {
- my $c = shift(@_);
-
- if ($c < 0x80) {
- return sprintf("%c", $c);
- } elsif ($c < 0x800) {
- return sprintf("%c%c", 0xc0 | ($c >> 6), 0x80 | ($c & 0x3f));
- } elsif ($c < 0x10000) {
- return sprintf("%c%c%c",
- 0xe0 | ($c >> 12),
- 0x80 | (($c >> 6) & 0x3f),
- 0x80 | ( $c & 0x3f));
- } elsif ($c < 0x200000) {
- return sprintf("%c%c%c%c",
- 0xf0 | ($c >> 18),
- 0x80 | (($c >> 12) & 0x3f),
- 0x80 | (($c >> 6) & 0x3f),
- 0x80 | ( $c & 0x3f));
- } elsif ($c < 0x4000000) {
- return sprintf("%c%c%c%c%c",
- 0xf8 | ($c >> 24),
- 0x80 | (($c >> 18) & 0x3f),
- 0x80 | (($c >> 12) & 0x3f),
- 0x80 | (($c >> 6) & 0x3f),
- 0x80 | ( $c & 0x3f));
-
- } elsif ($c < 0x80000000) {
- return sprintf("%c%c%c%c%c%c",
- 0xfe | ($c >> 30),
- 0x80 | (($c >> 24) & 0x3f),
- 0x80 | (($c >> 18) & 0x3f),
- 0x80 | (($c >> 12) & 0x3f),
- 0x80 | (($c >> 6) & 0x3f),
- 0x80 | ( $c & 0x3f));
- } else {
- return utf8(0xfffd);
- }
-}
-
-$unicodedata = "UnicodeData-Latest.txt";
-
-# read list of all Unicode names
-if (!open(UDATA, $unicodedata) && !open(UDATA, "$unicodedata")) {
- die ("Can't open Unicode database '$unicodedata':\n$!\n\n" .
- "Please make sure that you have downloaded the file\n" .
- "ftp://ftp.unicode.org/Public/UNIDATA/UnicodeData-Latest.txt\n");
-}
-while (<UDATA>) {
- if (/^([0-9,A-F]{4});([^;]*);([^;]*);([^;]*);([^;]*);([^;]*);([^;]*);([^;]*);([^;]*);([^;]*);([^;]*);([^;]*);([^;]*);([^;]*);([^;]*)$/) {
- $name{hex($1)} = $2;
- } else {
- die("Syntax error in line '$_' in file '$unicodedata'");
- }
-}
-close(UDATA);
-
-# read mapping (from http://wsinwp07.win.tue.nl:1234/unicode/keysym.map)
-open(LIST, "<keysym.map") || die ("Can't open map file:\n$!\n");
-while (<LIST>) {
- if (/^0x([0-9a-f]{4})\s+U([0-9a-f]{4})\s*(\#.*)?$/){
- $keysym = hex($1);
- $ucs = hex($2);
- $keysym_to_ucs{$keysym} = $ucs;
- } elsif (/^\s*\#/ || /^\s*$/) {
- } else {
- die("Syntax error in 'list' in line\n$_\n");
- }
-}
-close(LIST);
-
-# read entries in keysymdef.h
-open(LIST, "</usr/include/X11/keysymdef.h") || die ("Can't open keysymdef.h:\n$!\n");
-while (<LIST>) {
- if (/^\#define\s+XK_([A-Za-z_0-9]+)\s+0x([0-9a-fA-F]+)\s*(\/.*)?$/) {
- next if /\/\* deprecated \*\//;
- $keysymname = $1;
- $keysym = hex($2);
- $keysym_to_keysymname{$keysym} = $keysymname;
- }
-}
-close(LIST);
-
-print <<EOT;
-/* \$XFree86\$
- * This module converts keysym values into the corresponding ISO 10646-1
- * (UCS, Unicode) values.
- *
- * The array keysymtab[] contains pairs of X11 keysym values for graphical
- * characters and the corresponding Unicode value. The function
- * keysym2ucs() maps a keysym onto a Unicode value using a binary search,
- * therefore keysymtab[] must remain SORTED by keysym value.
- *
- * The keysym -> UTF-8 conversion will hopefully one day be provided
- * by Xlib via XmbLookupString() and should ideally not have to be
- * done in X applications. But we are not there yet.
- *
- * We allow to represent any UCS character in the range U+00000000 to
- * U+00FFFFFF by a keysym value in the range 0x01000000 to 0x01ffffff.
- * This admittedly does not cover the entire 31-bit space of UCS, but
- * it does cover all of the characters up to U+10FFFF, which can be
- * represented by UTF-16, and more, and it is very unlikely that higher
- * UCS codes will ever be assigned by ISO. So to get Unicode character
- * U+ABCD you can directly use keysym 0x1000abcd.
- *
- * NOTE: The comments in the table below contain the actual character
- * encoded in UTF-8, so for viewing and editing best use an editor in
- * UTF-8 mode.
- *
- * Author: Markus G. Kuhn <mkuhn\@acm.org>, University of Cambridge, June 1999
- *
- * Special thanks to Richard Verhoeven <river\@win.tue.nl> for preparing
- * an initial draft of the mapping table.
- *
- * This software is in the public domain. Share and enjoy!
- */
-
-#include <keysym2ucs.h>
-
-struct codepair {
- unsigned short keysym;
- unsigned short ucs;
-} keysymtab[] = {
-EOT
-
-for $keysym (sort {$a <=> $b} keys(%keysym_to_keysymname)) {
- $ucs = $keysym_to_ucs{$keysym};
- next if $keysym >= 0xf000 || $keysym < 0x100;
- if ($ucs) {
- printf(" { 0x%04x, 0x%04x }, /*%28s %s %s */\n",
- $keysym, $ucs, $keysym_to_keysymname{$keysym}, utf8($ucs),
- defined($name{$ucs}) ? $name{$ucs} : "???" );
- } else {
- printf("/* 0x%04x %39s ? ??? */\n",
- $keysym, $keysym_to_keysymname{$keysym});
- }
-}
-
-print <<EOT;
-};
-
-long keysym2ucs(KeySym keysym)
-{
- int min = 0;
- int max = sizeof(keysymtab) / sizeof(struct codepair) - 1;
- int mid;
-
- /* first check for Latin-1 characters (1:1 mapping) */
- if ((keysym >= 0x0020 && keysym <= 0x007e) ||
- (keysym >= 0x00a0 && keysym <= 0x00ff))
- return keysym;
-
- /* also check for directly encoded 24-bit UCS characters */
- if ((keysym & 0xff000000) == 0x01000000)
- return keysym & 0x00ffffff;
-
- /* binary search in table */
- while (max >= min) {
- mid = (min + max) / 2;
- if (keysymtab[mid].keysym < keysym)
- min = mid + 1;
- else if (keysymtab[mid].keysym > keysym)
- max = mid - 1;
- else {
- /* found it */
- return keysymtab[mid].ucs;
- }
- }
-
- /* no matching Unicode value found */
- return -1;
-}
-EOT
diff --git a/nx-X11/programs/xterm/unicode/keysym.map b/nx-X11/programs/xterm/unicode/keysym.map
deleted file mode 100644
index 6e587bdc0..000000000
--- a/nx-X11/programs/xterm/unicode/keysym.map
+++ /dev/null
@@ -1,1062 +0,0 @@
-# This list can be used to convert X11 Keysyms to Unicode 2.1 character.
-# The list is not checked for correctness by Unicode officials. Use it
-# at your own risk and the creator is not responsable for any damage that
-# occured due to using this list.
-#
-# The list is created by looking at the Keysym names and the Unicode data
-# file. Other mapping tables were used as a reference where needed.
-# Due to a lack of knowledge of the Hebrew, Thai and Hangul symbols,
-# expect errors in these sections. The mapping of the keypad keys
-# might also require some adjustments.
-#
-# The following fields are used:
-# 1 The X11 keysym numbers from the include file keysymdef.h
-# 2 The Unicode (2.1) position (U0000 means unknown Unicode position)
-# #
-# 3 the name of the X11 keysym (without XK_)
-#
-# Authors: Richard Verhoeven, TUE, <river@win.tue.nl>
-# Markus Kuhn, University of Cambridge, <mkuhn@acm.org>
-#
-# You are free to use and modify this table. If you introduce errors
-# in the table, please remove the copyright line. If you remove errors,
-# please let me know, so I can update my version.
-#
-# $XFree86: xc/programs/xterm/unicode/keysym.map,v 1.1 1999/06/12 15:37:24 dawes Exp $
-#
-0x0020 U0020 # space
-0x0021 U0021 # exclam
-0x0022 U0022 # quotedbl
-0x0023 U0023 # numbersign
-0x0024 U0024 # dollar
-0x0025 U0025 # percent
-0x0026 U0026 # ampersand
-0x0027 U0027 # apostrophe
-0x0027 U0027 # quoteright /* deprecated */
-0x0028 U0028 # parenleft
-0x0029 U0029 # parenright
-0x002a U002a # asterisk
-0x002b U002b # plus
-0x002c U002c # comma
-0x002d U002d # minus
-0x002e U002e # period
-0x002f U002f # slash
-0x0030 U0030 # 0
-0x0031 U0031 # 1
-0x0032 U0032 # 2
-0x0033 U0033 # 3
-0x0034 U0034 # 4
-0x0035 U0035 # 5
-0x0036 U0036 # 6
-0x0037 U0037 # 7
-0x0038 U0038 # 8
-0x0039 U0039 # 9
-0x003a U003a # colon
-0x003b U003b # semicolon
-0x003c U003c # less
-0x003d U003d # equal
-0x003e U003e # greater
-0x003f U003f # question
-0x0040 U0040 # at
-0x0041 U0041 # A
-0x0042 U0042 # B
-0x0043 U0043 # C
-0x0044 U0044 # D
-0x0045 U0045 # E
-0x0046 U0046 # F
-0x0047 U0047 # G
-0x0048 U0048 # H
-0x0049 U0049 # I
-0x004a U004a # J
-0x004b U004b # K
-0x004c U004c # L
-0x004d U004d # M
-0x004e U004e # N
-0x004f U004f # O
-0x0050 U0050 # P
-0x0051 U0051 # Q
-0x0052 U0052 # R
-0x0053 U0053 # S
-0x0054 U0054 # T
-0x0055 U0055 # U
-0x0056 U0056 # V
-0x0057 U0057 # W
-0x0058 U0058 # X
-0x0059 U0059 # Y
-0x005a U005a # Z
-0x005b U005b # bracketleft
-0x005c U005c # backslash
-0x005d U005d # bracketright
-0x005e U005e # asciicircum
-0x005f U005f # underscore
-0x0060 U0060 # grave
-0x0060 U0060 # quoteleft /* deprecated */
-0x0061 U0061 # a
-0x0062 U0062 # b
-0x0063 U0063 # c
-0x0064 U0064 # d
-0x0065 U0065 # e
-0x0066 U0066 # f
-0x0067 U0067 # g
-0x0068 U0068 # h
-0x0069 U0069 # i
-0x006a U006a # j
-0x006b U006b # k
-0x006c U006c # l
-0x006d U006d # m
-0x006e U006e # n
-0x006f U006f # o
-0x0070 U0070 # p
-0x0071 U0071 # q
-0x0072 U0072 # r
-0x0073 U0073 # s
-0x0074 U0074 # t
-0x0075 U0075 # u
-0x0076 U0076 # v
-0x0077 U0077 # w
-0x0078 U0078 # x
-0x0079 U0079 # y
-0x007a U007a # z
-0x007b U007b # braceleft
-0x007c U007c # bar
-0x007d U007d # braceright
-0x007e U007e # asciitilde
-0x00a0 U00a0 # nobreakspace
-0x00a1 U00a1 # exclamdown
-0x00a2 U00a2 # cent
-0x00a3 U00a3 # sterling
-0x00a4 U00a4 # currency
-0x00a5 U00a5 # yen
-0x00a6 U00a6 # brokenbar
-0x00a7 U00a7 # section
-0x00a8 U00a8 # diaeresis
-0x00a9 U00a9 # copyright
-0x00aa U00aa # ordfeminine
-0x00ab U00ab # guillemotleft /* left angle quotation mark */
-0x00ac U00ac # notsign
-0x00ad U00ad # hyphen
-0x00ae U00ae # registered
-0x00af U00af # macron
-0x00b0 U00b0 # degree
-0x00b1 U00b1 # plusminus
-0x00b2 U00b2 # twosuperior
-0x00b3 U00b3 # threesuperior
-0x00b4 U00b4 # acute
-0x00b5 U00b5 # mu
-0x00b6 U00b6 # paragraph
-0x00b7 U00b7 # periodcentered
-0x00b8 U00b8 # cedilla
-0x00b9 U00b9 # onesuperior
-0x00ba U00ba # masculine
-0x00bb U00bb # guillemotright /* right angle quotation mark */
-0x00bc U00bc # onequarter
-0x00bd U00bd # onehalf
-0x00be U00be # threequarters
-0x00bf U00bf # questiondown
-0x00c0 U00c0 # Agrave
-0x00c1 U00c1 # Aacute
-0x00c2 U00c2 # Acircumflex
-0x00c3 U00c3 # Atilde
-0x00c4 U00c4 # Adiaeresis
-0x00c5 U00c5 # Aring
-0x00c6 U00c6 # AE
-0x00c7 U00c7 # Ccedilla
-0x00c8 U00c8 # Egrave
-0x00c9 U00c9 # Eacute
-0x00ca U00ca # Ecircumflex
-0x00cb U00cb # Ediaeresis
-0x00cc U00cc # Igrave
-0x00cd U00cd # Iacute
-0x00ce U00ce # Icircumflex
-0x00cf U00cf # Idiaeresis
-0x00d0 U00d0 # ETH
-0x00d0 U00d0 # Eth /* deprecated */
-0x00d1 U00d1 # Ntilde
-0x00d2 U00d2 # Ograve
-0x00d3 U00d3 # Oacute
-0x00d4 U00d4 # Ocircumflex
-0x00d5 U00d5 # Otilde
-0x00d6 U00d6 # Odiaeresis
-0x00d7 U00d7 # multiply
-0x00d8 U00d8 # Ooblique
-0x00d9 U00d9 # Ugrave
-0x00da U00da # Uacute
-0x00db U00db # Ucircumflex
-0x00dc U00dc # Udiaeresis
-0x00dd U00dd # Yacute
-0x00de U00de # THORN
-0x00de U00de # Thorn /* deprecated */
-0x00df U00df # ssharp
-0x00e0 U00e0 # agrave
-0x00e1 U00e1 # aacute
-0x00e2 U00e2 # acircumflex
-0x00e3 U00e3 # atilde
-0x00e4 U00e4 # adiaeresis
-0x00e5 U00e5 # aring
-0x00e6 U00e6 # ae
-0x00e7 U00e7 # ccedilla
-0x00e8 U00e8 # egrave
-0x00e9 U00e9 # eacute
-0x00ea U00ea # ecircumflex
-0x00eb U00eb # ediaeresis
-0x00ec U00ec # igrave
-0x00ed U00ed # iacute
-0x00ee U00ee # icircumflex
-0x00ef U00ef # idiaeresis
-0x00f0 U00f0 # eth
-0x00f1 U00f1 # ntilde
-0x00f2 U00f2 # ograve
-0x00f3 U00f3 # oacute
-0x00f4 U00f4 # ocircumflex
-0x00f5 U00f5 # otilde
-0x00f6 U00f6 # odiaeresis
-0x00f7 U00f7 # division
-0x00f8 U00f8 # oslash
-0x00f9 U00f9 # ugrave
-0x00fa U00fa # uacute
-0x00fb U00fb # ucircumflex
-0x00fc U00fc # udiaeresis
-0x00fd U00fd # yacute
-0x00fe U00fe # thorn
-0x00ff U00ff # ydiaeresis
-0x01a1 U0104 # Aogonek
-0x01a2 U02d8 # breve
-0x01a3 U0141 # Lstroke
-0x01a5 U013d # Lcaron
-0x01a6 U015a # Sacute
-0x01a9 U0160 # Scaron
-0x01aa U015e # Scedilla
-0x01ab U0164 # Tcaron
-0x01ac U0179 # Zacute
-0x01ae U017d # Zcaron
-0x01af U017b # Zabovedot
-0x01b1 U0105 # aogonek
-0x01b2 U02db # ogonek
-0x01b3 U0142 # lstroke
-0x01b5 U013e # lcaron
-0x01b6 U015b # sacute
-0x01b7 U02c7 # caron
-0x01b9 U0161 # scaron
-0x01ba U015f # scedilla
-0x01bb U0165 # tcaron
-0x01bc U017a # zacute
-0x01bd U02dd # doubleacute
-0x01be U017e # zcaron
-0x01bf U017c # zabovedot
-0x01c0 U0154 # Racute
-0x01c3 U0102 # Abreve
-0x01c5 U0139 # Lacute
-0x01c6 U0106 # Cacute
-0x01c8 U010c # Ccaron
-0x01ca U0118 # Eogonek
-0x01cc U011a # Ecaron
-0x01cf U010e # Dcaron
-0x01d0 U0110 # Dstroke
-0x01d1 U0143 # Nacute
-0x01d2 U0147 # Ncaron
-0x01d5 U0150 # Odoubleacute
-0x01d8 U0158 # Rcaron
-0x01d9 U016e # Uring
-0x01db U0170 # Udoubleacute
-0x01de U0162 # Tcedilla
-0x01e0 U0155 # racute
-0x01e3 U0103 # abreve
-0x01e5 U013a # lacute
-0x01e6 U0107 # cacute
-0x01e8 U010d # ccaron
-0x01ea U0119 # eogonek
-0x01ec U011b # ecaron
-0x01ef U010f # dcaron
-0x01f0 U0111 # dstroke
-0x01f1 U0144 # nacute
-0x01f2 U0148 # ncaron
-0x01f5 U0151 # odoubleacute
-0x01f8 U0159 # rcaron
-0x01f9 U016f # uring
-0x01fb U0171 # udoubleacute
-0x01fe U0163 # tcedilla
-0x01ff U02d9 # abovedot
-0x02a1 U0126 # Hstroke
-0x02a6 U0124 # Hcircumflex
-0x02a9 U0130 # Iabovedot
-0x02ab U011e # Gbreve
-0x02ac U0134 # Jcircumflex
-0x02b1 U0127 # hstroke
-0x02b6 U0125 # hcircumflex
-0x02b9 U0131 # idotless
-0x02bb U011f # gbreve
-0x02bc U0135 # jcircumflex
-0x02c5 U010a # Cabovedot
-0x02c6 U0108 # Ccircumflex
-0x02d5 U0120 # Gabovedot
-0x02d8 U011c # Gcircumflex
-0x02dd U016c # Ubreve
-0x02de U015c # Scircumflex
-0x02e5 U010b # cabovedot
-0x02e6 U0109 # ccircumflex
-0x02f5 U0121 # gabovedot
-0x02f8 U011d # gcircumflex
-0x02fd U016d # ubreve
-0x02fe U015d # scircumflex
-0x03a2 U0138 # kra
-0x03a3 U0156 # Rcedilla
-0x03a5 U0128 # Itilde
-0x03a6 U013b # Lcedilla
-0x03aa U0112 # Emacron
-0x03ab U0122 # Gcedilla
-0x03ac U0166 # Tslash
-0x03b3 U0157 # rcedilla
-0x03b5 U0129 # itilde
-0x03b6 U013c # lcedilla
-0x03ba U0113 # emacron
-0x03bb U0123 # gcedilla
-0x03bc U0167 # tslash
-0x03bd U014a # ENG
-0x03bf U014b # eng
-0x03c0 U0100 # Amacron
-0x03c7 U012e # Iogonek
-0x03cc U0116 # Eabovedot
-0x03cf U012a # Imacron
-0x03d1 U0145 # Ncedilla
-0x03d2 U014c # Omacron
-0x03d3 U0136 # Kcedilla
-0x03d9 U0172 # Uogonek
-0x03dd U0168 # Utilde
-0x03de U016a # Umacron
-0x03e0 U0101 # amacron
-0x03e7 U012f # iogonek
-0x03ec U0117 # eabovedot
-0x03ef U012b # imacron
-0x03f1 U0146 # ncedilla
-0x03f2 U014d # omacron
-0x03f3 U0137 # kcedilla
-0x03f9 U0173 # uogonek
-0x03fd U0169 # utilde
-0x03fe U016b # umacron
-0x13bc U0152 # OE
-0x13bd U0153 # oe
-0x13be U0178 # Ydiaeresis
-0x047e U203e # overline
-0x04a1 U3002 # kana_fullstop
-0x04a2 U300c # kana_openingbracket
-0x04a3 U300d # kana_closingbracket
-0x04a4 U3001 # kana_comma
-0x04a5 U30fb # kana_conjunctive
-0x04a6 U30f2 # kana_WO
-0x04a7 U30a1 # kana_a
-0x04a8 U30a3 # kana_i
-0x04a9 U30a5 # kana_u
-0x04aa U30a7 # kana_e
-0x04ab U30a9 # kana_o
-0x04ac U30e3 # kana_ya
-0x04ad U30e5 # kana_yu
-0x04ae U30e7 # kana_yo
-0x04af U30c3 # kana_tsu
-0x04b0 U30fc # prolongedsound
-0x04b1 U30a2 # kana_A
-0x04b2 U30a4 # kana_I
-0x04b3 U30a6 # kana_U
-0x04b4 U30a8 # kana_E
-0x04b5 U30aa # kana_O
-0x04b6 U30ab # kana_KA
-0x04b7 U30ad # kana_KI
-0x04b8 U30af # kana_KU
-0x04b9 U30b1 # kana_KE
-0x04ba U30b3 # kana_KO
-0x04bb U30b5 # kana_SA
-0x04bc U30b7 # kana_SHI
-0x04bd U30b9 # kana_SU
-0x04be U30bb # kana_SE
-0x04bf U30bd # kana_SO
-0x04c0 U30bf # kana_TA
-0x04c1 U30c1 # kana_CHI
-0x04c2 U30c4 # kana_TSU
-0x04c3 U30c6 # kana_TE
-0x04c4 U30c8 # kana_TO
-0x04c5 U30ca # kana_NA
-0x04c6 U30cb # kana_NI
-0x04c7 U30cc # kana_NU
-0x04c8 U30cd # kana_NE
-0x04c9 U30ce # kana_NO
-0x04ca U30cf # kana_HA
-0x04cb U30d2 # kana_HI
-0x04cc U30d5 # kana_FU
-0x04cd U30d8 # kana_HE
-0x04ce U30db # kana_HO
-0x04cf U30de # kana_MA
-0x04d0 U30df # kana_MI
-0x04d1 U30e0 # kana_MU
-0x04d2 U30e1 # kana_ME
-0x04d3 U30e2 # kana_MO
-0x04d4 U30e4 # kana_YA
-0x04d5 U30e6 # kana_YU
-0x04d6 U30e8 # kana_YO
-0x04d7 U30e9 # kana_RA
-0x04d8 U30ea # kana_RI
-0x04d9 U30eb # kana_RU
-0x04da U30ec # kana_RE
-0x04db U30ed # kana_RO
-0x04dc U30ef # kana_WA
-0x04dd U30f3 # kana_N
-0x04de U309b # voicedsound
-0x04df U309c # semivoicedsound
-0x05ac U060c # Arabic_comma
-0x05bb U061b # Arabic_semicolon
-0x05bf U061f # Arabic_question_mark
-0x05c1 U0621 # Arabic_hamza
-0x05c2 U0622 # Arabic_maddaonalef
-0x05c3 U0623 # Arabic_hamzaonalef
-0x05c4 U0624 # Arabic_hamzaonwaw
-0x05c5 U0625 # Arabic_hamzaunderalef
-0x05c6 U0626 # Arabic_hamzaonyeh
-0x05c7 U0627 # Arabic_alef
-0x05c8 U0628 # Arabic_beh
-0x05c9 U0629 # Arabic_tehmarbuta
-0x05ca U062a # Arabic_teh
-0x05cb U062b # Arabic_theh
-0x05cc U062c # Arabic_jeem
-0x05cd U062d # Arabic_hah
-0x05ce U062e # Arabic_khah
-0x05cf U062f # Arabic_dal
-0x05d0 U0630 # Arabic_thal
-0x05d1 U0631 # Arabic_ra
-0x05d2 U0632 # Arabic_zain
-0x05d3 U0633 # Arabic_seen
-0x05d4 U0634 # Arabic_sheen
-0x05d5 U0635 # Arabic_sad
-0x05d6 U0636 # Arabic_dad
-0x05d7 U0637 # Arabic_tah
-0x05d8 U0638 # Arabic_zah
-0x05d9 U0639 # Arabic_ain
-0x05da U063a # Arabic_ghain
-0x05e0 U0640 # Arabic_tatweel
-0x05e1 U0641 # Arabic_feh
-0x05e2 U0642 # Arabic_qaf
-0x05e3 U0643 # Arabic_kaf
-0x05e4 U0644 # Arabic_lam
-0x05e5 U0645 # Arabic_meem
-0x05e6 U0646 # Arabic_noon
-0x05e7 U0647 # Arabic_ha
-0x05e8 U0648 # Arabic_waw
-0x05e9 U0649 # Arabic_alefmaksura
-0x05ea U064a # Arabic_yeh
-0x05eb U064b # Arabic_fathatan
-0x05ec U064c # Arabic_dammatan
-0x05ed U064d # Arabic_kasratan
-0x05ee U064e # Arabic_fatha
-0x05ef U064f # Arabic_damma
-0x05f0 U0650 # Arabic_kasra
-0x05f1 U0651 # Arabic_shadda
-0x05f2 U0652 # Arabic_sukun
-0x06a1 U0452 # Serbian_dje
-0x06a2 U0453 # Macedonia_gje
-0x06a3 U0451 # Cyrillic_io
-0x06a4 U0454 # Ukrainian_ie
-0x06a5 U0455 # Macedonia_dse
-0x06a6 U0456 # Ukrainian_i
-0x06a7 U0457 # Ukrainian_yi
-0x06a8 U0458 # Cyrillic_je
-0x06a9 U0459 # Cyrillic_lje
-0x06aa U045a # Cyrillic_nje
-0x06ab U045b # Serbian_tshe
-0x06ac U045c # Macedonia_kje
-0x06ae U045e # Byelorussian_shortu
-0x06af U045f # Cyrillic_dzhe
-0x06b0 U2116 # numerosign
-0x06b1 U0402 # Serbian_DJE
-0x06b2 U0403 # Macedonia_GJE
-0x06b3 U0401 # Cyrillic_IO
-0x06b4 U0404 # Ukrainian_IE
-0x06b5 U0405 # Macedonia_DSE
-0x06b6 U0406 # Ukrainian_I
-0x06b7 U0407 # Ukrainian_YI
-0x06b8 U0408 # Cyrillic_JE
-0x06b9 U0409 # Cyrillic_LJE
-0x06ba U040a # Cyrillic_NJE
-0x06bb U040b # Serbian_TSHE
-0x06bc U040c # Macedonia_KJE
-0x06be U040e # Byelorussian_SHORTU
-0x06bf U040f # Cyrillic_DZHE
-0x06c0 U044e # Cyrillic_yu
-0x06c1 U0430 # Cyrillic_a
-0x06c2 U0431 # Cyrillic_be
-0x06c3 U0446 # Cyrillic_tse
-0x06c4 U0434 # Cyrillic_de
-0x06c5 U0435 # Cyrillic_ie
-0x06c6 U0444 # Cyrillic_ef
-0x06c7 U0433 # Cyrillic_ghe
-0x06c8 U0445 # Cyrillic_ha
-0x06c9 U0438 # Cyrillic_i
-0x06ca U0439 # Cyrillic_shorti
-0x06cb U043a # Cyrillic_ka
-0x06cc U043b # Cyrillic_el
-0x06cd U043c # Cyrillic_em
-0x06ce U043d # Cyrillic_en
-0x06cf U043e # Cyrillic_o
-0x06d0 U043f # Cyrillic_pe
-0x06d1 U044f # Cyrillic_ya
-0x06d2 U0440 # Cyrillic_er
-0x06d3 U0441 # Cyrillic_es
-0x06d4 U0442 # Cyrillic_te
-0x06d5 U0443 # Cyrillic_u
-0x06d6 U0436 # Cyrillic_zhe
-0x06d7 U0432 # Cyrillic_ve
-0x06d8 U044c # Cyrillic_softsign
-0x06d9 U044b # Cyrillic_yeru
-0x06da U0437 # Cyrillic_ze
-0x06db U0448 # Cyrillic_sha
-0x06dc U044d # Cyrillic_e
-0x06dd U0449 # Cyrillic_shcha
-0x06de U0447 # Cyrillic_che
-0x06df U044a # Cyrillic_hardsign
-0x06e0 U042e # Cyrillic_YU
-0x06e1 U0410 # Cyrillic_A
-0x06e2 U0411 # Cyrillic_BE
-0x06e3 U0426 # Cyrillic_TSE
-0x06e4 U0414 # Cyrillic_DE
-0x06e5 U0415 # Cyrillic_IE
-0x06e6 U0424 # Cyrillic_EF
-0x06e7 U0413 # Cyrillic_GHE
-0x06e8 U0425 # Cyrillic_HA
-0x06e9 U0418 # Cyrillic_I
-0x06ea U0419 # Cyrillic_SHORTI
-0x06eb U041a # Cyrillic_KA
-0x06ec U041b # Cyrillic_EL
-0x06ed U041c # Cyrillic_EM
-0x06ee U041d # Cyrillic_EN
-0x06ef U041e # Cyrillic_O
-0x06f0 U041f # Cyrillic_PE
-0x06f1 U042f # Cyrillic_YA
-0x06f2 U0420 # Cyrillic_ER
-0x06f3 U0421 # Cyrillic_ES
-0x06f4 U0422 # Cyrillic_TE
-0x06f5 U0423 # Cyrillic_U
-0x06f6 U0416 # Cyrillic_ZHE
-0x06f7 U0412 # Cyrillic_VE
-0x06f8 U042c # Cyrillic_SOFTSIGN
-0x06f9 U042b # Cyrillic_YERU
-0x06fa U0417 # Cyrillic_ZE
-0x06fb U0428 # Cyrillic_SHA
-0x06fc U042d # Cyrillic_E
-0x06fd U0429 # Cyrillic_SHCHA
-0x06fe U0427 # Cyrillic_CHE
-0x06ff U042a # Cyrillic_HARDSIGN
-0x07a1 U0386 # Greek_ALPHAaccent
-0x07a2 U0388 # Greek_EPSILONaccent
-0x07a3 U0389 # Greek_ETAaccent
-0x07a4 U038a # Greek_IOTAaccent
-0x07a5 U03aa # Greek_IOTAdiaeresis
-0x07a7 U038c # Greek_OMICRONaccent
-0x07a8 U038e # Greek_UPSILONaccent
-0x07a9 U03ab # Greek_UPSILONdieresis
-0x07ab U038f # Greek_OMEGAaccent
-0x07ae U0385 # Greek_accentdieresis
-0x07af U2015 # Greek_horizbar
-0x07b1 U03ac # Greek_alphaaccent
-0x07b2 U03ad # Greek_epsilonaccent
-0x07b3 U03ae # Greek_etaaccent
-0x07b4 U03af # Greek_iotaaccent
-0x07b5 U03ca # Greek_iotadieresis
-0x07b6 U0390 # Greek_iotaaccentdieresis
-0x07b7 U03cc # Greek_omicronaccent
-0x07b8 U03cd # Greek_upsilonaccent
-0x07b9 U03cb # Greek_upsilondieresis
-0x07ba U03b0 # Greek_upsilonaccentdieresis
-0x07bb U03ce # Greek_omegaaccent
-0x07c1 U0391 # Greek_ALPHA
-0x07c2 U0392 # Greek_BETA
-0x07c3 U0393 # Greek_GAMMA
-0x07c4 U0394 # Greek_DELTA
-0x07c5 U0395 # Greek_EPSILON
-0x07c6 U0396 # Greek_ZETA
-0x07c7 U0397 # Greek_ETA
-0x07c8 U0398 # Greek_THETA
-0x07c9 U0399 # Greek_IOTA
-0x07ca U039a # Greek_KAPPA
-0x07cb U039b # Greek_LAMBDA
-0x07cb U039b # Greek_LAMDA
-0x07cc U039c # Greek_MU
-0x07cd U039d # Greek_NU
-0x07ce U039e # Greek_XI
-0x07cf U039f # Greek_OMICRON
-0x07d0 U03a0 # Greek_PI
-0x07d1 U03a1 # Greek_RHO
-0x07d2 U03a3 # Greek_SIGMA
-0x07d4 U03a4 # Greek_TAU
-0x07d5 U03a5 # Greek_UPSILON
-0x07d6 U03a6 # Greek_PHI
-0x07d7 U03a7 # Greek_CHI
-0x07d8 U03a8 # Greek_PSI
-0x07d9 U03a9 # Greek_OMEGA
-0x07e1 U03b1 # Greek_alpha
-0x07e2 U03b2 # Greek_beta
-0x07e3 U03b3 # Greek_gamma
-0x07e4 U03b4 # Greek_delta
-0x07e5 U03b5 # Greek_epsilon
-0x07e6 U03b6 # Greek_zeta
-0x07e7 U03b7 # Greek_eta
-0x07e8 U03b8 # Greek_theta
-0x07e9 U03b9 # Greek_iota
-0x07ea U03ba # Greek_kappa
-0x07eb U03bb # Greek_lambda
-0x07ec U03bc # Greek_mu
-0x07ed U03bd # Greek_nu
-0x07ee U03be # Greek_xi
-0x07ef U03bf # Greek_omicron
-0x07f0 U03c0 # Greek_pi
-0x07f1 U03c1 # Greek_rho
-0x07f2 U03c3 # Greek_sigma
-0x07f3 U03c2 # Greek_finalsmallsigma
-0x07f4 U03c4 # Greek_tau
-0x07f5 U03c5 # Greek_upsilon
-0x07f6 U03c6 # Greek_phi
-0x07f7 U03c7 # Greek_chi
-0x07f8 U03c8 # Greek_psi
-0x07f9 U03c9 # Greek_omega
-0x08a1 U0000 # leftradical
-0x08a2 U0000 # topleftradical
-0x08a3 U0000 # horizconnector
-0x08a4 U2320 # topintegral
-0x08a5 U2321 # botintegral
-0x08a6 U2502 # vertconnector
-0x08a7 U0000 # topleftsqbracket
-0x08a8 U0000 # botleftsqbracket
-0x08a9 U0000 # toprightsqbracket
-0x08aa U0000 # botrightsqbracket
-0x08ab U0000 # topleftparens
-0x08ac U0000 # botleftparens
-0x08ad U0000 # toprightparens
-0x08ae U0000 # botrightparens
-0x08af U0000 # leftmiddlecurlybrace
-0x08b0 U0000 # rightmiddlecurlybrace
-0x08b1 U0000 # topleftsummation
-0x08b2 U0000 # botleftsummation
-0x08b3 U0000 # topvertsummationconnector
-0x08b4 U0000 # botvertsummationconnector
-0x08b5 U0000 # toprightsummation
-0x08b6 U0000 # botrightsummation
-0x08b7 U0000 # rightmiddlesummation
-0x08bc U2264 # lessthanequal
-0x08bd U2260 # notequal
-0x08be U2265 # greaterthanequal
-0x08bf U222b # integral
-0x08c0 U2234 # therefore
-0x08c1 U221d # variation
-0x08c2 U221e # infinity
-0x08c5 U2207 # nabla
-0x08c8 U2245 # approximate
-0x08c9 U0000 # similarequal
-0x08cd U21d4 # ifonlyif
-0x08ce U21d2 # implies
-0x08cf U2261 # identical
-0x08d6 U221a # radical
-0x08da U2282 # includedin
-0x08db U2283 # includes
-0x08dc U2229 # intersection
-0x08dd U222a # union
-0x08de U2227 # logicaland
-0x08df U2228 # logicalor
-0x08ef U2202 # partialderivative
-0x08f6 U0192 # function
-0x08fb U2190 # leftarrow
-0x08fc U2191 # uparrow
-0x08fd U2192 # rightarrow
-0x08fe U2193 # downarrow
-0x09df U2422 # blank
-0x09e0 U25c6 # soliddiamond
-0x09e1 U2592 # checkerboard
-0x09e2 U2409 # ht
-0x09e3 U240c # ff
-0x09e4 U240d # cr
-0x09e5 U240a # lf
-0x09e8 U2424 # nl
-0x09e9 U240b # vt
-0x09ea U2518 # lowrightcorner
-0x09eb U2510 # uprightcorner
-0x09ec U250c # upleftcorner
-0x09ed U2514 # lowleftcorner
-0x09ee U253c # crossinglines
-0x09ef U0000 # horizlinescan1
-0x09f0 U0000 # horizlinescan3
-0x09f1 U2500 # horizlinescan5
-0x09f2 U0000 # horizlinescan7
-0x09f3 U0000 # horizlinescan9
-0x09f4 U251c # leftt
-0x09f5 U2524 # rightt
-0x09f6 U2534 # bott
-0x09f7 U252c # topt
-0x09f8 U2502 # vertbar
-0xfe50 U0300 # dead_grave
-0xfe51 U0301 # dead_acute
-0xfe52 U0302 # dead_circumflex
-0xfe53 U0303 # dead_tilde
-0xfe54 U0304 # dead_macron
-0xfe55 U0306 # dead_breve
-0xfe56 U0307 # dead_abovedot
-0xfe57 U0308 # dead_diaeresis
-0xfe58 U030a # dead_abovering
-0xfe59 U030b # dead_doubleacute
-0xfe5a U030c # dead_caron
-0xfe5b U0327 # dead_cedilla
-0xfe5c U0328 # dead_ogonek
-0xfe5d U0345 # dead_iota
-0xfe5e U3099 # dead_voiced_sound
-0xfe5f U309a # dead_semivoiced_sound
-0xff08 U0008 # BackSpace /* back space, back char */
-0xff09 U0009 # Tab
-0xff0a U000a # Linefeed /* Linefeed, LF */
-0xff0b U000b # Clear
-0xff0d U000d # Return /* Return, enter */
-0xff13 U0013 # Pause /* Pause, hold */
-0xff14 U0014 # Scroll_Lock
-0xff15 U0015 # Sys_Req
-0xff1b U001b # Escape
-0xff80 U0032 # KP_Space /* space */
-0xff89 U0009 # KP_Tab
-0xff8d U000d # KP_Enter /* enter */
-0xffaa U002a # KP_Multiply
-0xffab U002b # KP_Add
-0xffac U002c # KP_Separator /* separator, often comma */
-0xffad U002d # KP_Subtract
-0xffae U002e # KP_Decimal
-0xffaf U002f # KP_Divide
-0xffb0 U0030 # KP_0
-0xffb1 U0031 # KP_1
-0xffb2 U0032 # KP_2
-0xffb3 U0033 # KP_3
-0xffb4 U0034 # KP_4
-0xffb5 U0035 # KP_5
-0xffb6 U0036 # KP_6
-0xffb7 U0037 # KP_7
-0xffb8 U0038 # KP_8
-0xffb9 U0039 # KP_9
-0xffbd U003d # KP_Equal /* equals */
-0x0aa1 U2003 # emspace
-0x0aa2 U2002 # enspace
-0x0aa3 U2004 # em3space
-0x0aa4 U2005 # em4space
-0x0aa5 U2007 # digitspace
-0x0aa6 U2008 # punctspace
-0x0aa7 U2009 # thinspace
-0x0aa8 U200a # hairspace
-0x0aa9 U2014 # emdash
-0x0aaa U2013 # endash
-0x0aac U0000 # signifblank
-0x0aae U2026 # ellipsis
-0x0aaf U0000 # doubbaselinedot
-0x0ab0 U2153 # onethird
-0x0ab1 U2154 # twothirds
-0x0ab2 U2155 # onefifth
-0x0ab3 U2156 # twofifths
-0x0ab4 U2157 # threefifths
-0x0ab5 U2158 # fourfifths
-0x0ab6 U2159 # onesixth
-0x0ab7 U215a # fivesixths
-0x0ab8 U2105 # careof
-0x0abb U2012 # figdash
-0x0abc U2329 # leftanglebracket
-0x0abd U002e # decimalpoint
-0x0abe U232a # rightanglebracket
-0x0abf U0000 # marker
-0x0ac3 U215b # oneeighth
-0x0ac4 U215c # threeeighths
-0x0ac5 U215d # fiveeighths
-0x0ac6 U215e # seveneighths
-0x0ac9 U2122 # trademark
-0x0aca U2613 # signaturemark
-0x0acb U0000 # trademarkincircle
-0x0acc U25c1 # leftopentriangle
-0x0acd U25b7 # rightopentriangle
-0x0ace U25cb # emopencircle
-0x0acf U25a1 # emopenrectangle
-0x0ad0 U2018 # leftsinglequotemark
-0x0ad1 U2019 # rightsinglequotemark
-0x0ad2 U201c # leftdoublequotemark
-0x0ad3 U201d # rightdoublequotemark
-0x0ad4 U211e # prescription
-0x0ad6 U2032 # minutes
-0x0ad7 U2033 # seconds
-0x0ad9 U271d # latincross
-0x0ada U0000 # hexagram
-0x0adb U25ac # filledrectbullet
-0x0adc U25c0 # filledlefttribullet
-0x0add U25b6 # filledrighttribullet
-0x0ade U25cf # emfilledcircle
-0x0adf U25a0 # emfilledrect
-0x0ae0 U25e6 # enopencircbullet
-0x0ae1 U25ab # enopensquarebullet
-0x0ae2 U25ad # openrectbullet
-0x0ae3 U25b3 # opentribulletup
-0x0ae4 U25bd # opentribulletdown
-0x0ae5 U2606 # openstar
-0x0ae6 U2022 # enfilledcircbullet
-0x0ae7 U25aa # enfilledsqbullet
-0x0ae8 U25b2 # filledtribulletup
-0x0ae9 U25bc # filledtribulletdown
-0x0aea U261c # leftpointer
-0x0aeb U261e # rightpointer
-0x0aec U2663 # club
-0x0aed U2666 # diamond
-0x0aee U2665 # heart
-0x0af0 U2720 # maltesecross
-0x0af1 U2020 # dagger
-0x0af2 U2021 # doubledagger
-0x0af3 U2713 # checkmark
-0x0af4 U2717 # ballotcross
-0x0af5 U266f # musicalsharp
-0x0af6 U266d # musicalflat
-0x0af7 U2642 # malesymbol
-0x0af8 U2640 # femalesymbol
-0x0af9 U260e # telephone
-0x0afa U2315 # telephonerecorder
-0x0afb U2117 # phonographcopyright
-0x0afc U2038 # caret
-0x0afd U201a # singlelowquotemark
-0x0afe U201e # doublelowquotemark
-0x0aff U0000 # cursor
-0x0ba3 U003c # leftcaret
-0x0ba6 U003e # rightcaret
-0x0ba8 U2228 # downcaret
-0x0ba9 U2227 # upcaret
-0x0bc0 U00af # overbar
-0x0bc2 U22a4 # downtack
-0x0bc3 U2229 # upshoe
-0x0bc4 U230a # downstile
-0x0bc6 U005f # underbar
-0x0bca U2218 # jot
-0x0bcc U2395 # quad
-0x0bce U22a5 # uptack
-0x0bcf U25cb # circle
-0x0bd3 U2308 # upstile
-0x0bd6 U222a # downshoe
-0x0bd8 U2283 # rightshoe
-0x0bda U2282 # leftshoe
-0x0bdc U22a3 # lefttack
-0x0bfc U22a2 # righttack
-0x0cdf U2017 # hebrew_doublelowline
-0x0ce0 U05d0 # hebrew_aleph
-0x0ce1 U05d1 # hebrew_bet
-0x0ce1 U05d1 # hebrew_beth /* deprecated */
-0x0ce2 U05d2 # hebrew_gimel
-0x0ce2 U05d2 # hebrew_gimmel /* deprecated */
-0x0ce3 U05d3 # hebrew_dalet
-0x0ce3 U05d3 # hebrew_daleth /* deprecated */
-0x0ce4 U05d4 # hebrew_he
-0x0ce5 U05d5 # hebrew_waw
-0x0ce6 U05d6 # hebrew_zain
-0x0ce6 U05d6 # hebrew_zayin /* deprecated */
-0x0ce7 U05d7 # hebrew_chet
-0x0ce7 U05d7 # hebrew_het /* deprecated */
-0x0ce8 U05d8 # hebrew_tet
-0x0ce8 U05d8 # hebrew_teth /* deprecated */
-0x0ce9 U05d9 # hebrew_yod
-0x0cea U05da # hebrew_finalkaph
-0x0ceb U05db # hebrew_kaph
-0x0cec U05dc # hebrew_lamed
-0x0ced U05dd # hebrew_finalmem
-0x0cee U05de # hebrew_mem
-0x0cef U05df # hebrew_finalnun
-0x0cf0 U05e0 # hebrew_nun
-0x0cf1 U05e1 # hebrew_samech
-0x0cf1 U05e1 # hebrew_samekh /* deprecated */
-0x0cf2 U05e2 # hebrew_ayin
-0x0cf3 U05e3 # hebrew_finalpe
-0x0cf4 U05e4 # hebrew_pe
-0x0cf5 U05e5 # hebrew_finalzade
-0x0cf5 U05e5 # hebrew_finalzadi /* deprecated */
-0x0cf6 U05e6 # hebrew_zade
-0x0cf6 U05e6 # hebrew_zadi /* deprecated */
-0x0cf7 U05e7 # hebrew_kuf /* deprecated */
-0x0cf7 U05e7 # hebrew_qoph
-0x0cf8 U05e8 # hebrew_resh
-0x0cf9 U05e9 # hebrew_shin
-0x0cfa U05ea # hebrew_taf /* deprecated */
-0x0cfa U05ea # hebrew_taw
-0x0da1 U0e01 # Thai_kokai
-0x0da2 U0e02 # Thai_khokhai
-0x0da3 U0e03 # Thai_khokhuat
-0x0da4 U0e04 # Thai_khokhwai
-0x0da5 U0e05 # Thai_khokhon
-0x0da6 U0e06 # Thai_khorakhang
-0x0da7 U0e07 # Thai_ngongu
-0x0da8 U0e08 # Thai_chochan
-0x0da9 U0e09 # Thai_choching
-0x0daa U0e0a # Thai_chochang
-0x0dab U0e0b # Thai_soso
-0x0dac U0e0c # Thai_chochoe
-0x0dad U0e0d # Thai_yoying
-0x0dae U0e0e # Thai_dochada
-0x0daf U0e0f # Thai_topatak
-0x0db0 U0e10 # Thai_thothan
-0x0db1 U0e11 # Thai_thonangmontho
-0x0db2 U0e12 # Thai_thophuthao
-0x0db3 U0e13 # Thai_nonen
-0x0db4 U0e14 # Thai_dodek
-0x0db5 U0e15 # Thai_totao
-0x0db6 U0e16 # Thai_thothung
-0x0db7 U0e17 # Thai_thothahan
-0x0db8 U0e18 # Thai_thothong
-0x0db9 U0e19 # Thai_nonu
-0x0dba U0e1a # Thai_bobaimai
-0x0dbb U0e1b # Thai_popla
-0x0dbc U0e1c # Thai_phophung
-0x0dbd U0e1d # Thai_fofa
-0x0dbe U0e1e # Thai_phophan
-0x0dbf U0e1f # Thai_fofan
-0x0dc0 U0e20 # Thai_phosamphao
-0x0dc1 U0e21 # Thai_moma
-0x0dc2 U0e22 # Thai_yoyak
-0x0dc3 U0e23 # Thai_rorua
-0x0dc4 U0e24 # Thai_ru
-0x0dc5 U0e25 # Thai_loling
-0x0dc6 U0e26 # Thai_lu
-0x0dc7 U0e27 # Thai_wowaen
-0x0dc8 U0e28 # Thai_sosala
-0x0dc9 U0e29 # Thai_sorusi
-0x0dca U0e2a # Thai_sosua
-0x0dcb U0e2b # Thai_hohip
-0x0dcc U0e2c # Thai_lochula
-0x0dcd U0e2d # Thai_oang
-0x0dce U0e2e # Thai_honokhuk
-0x0dcf U0e2f # Thai_paiyannoi
-0x0dd0 U0e30 # Thai_saraa
-0x0dd1 U0e31 # Thai_maihanakat
-0x0dd2 U0e32 # Thai_saraaa
-0x0dd3 U0e33 # Thai_saraam
-0x0dd4 U0e34 # Thai_sarai
-0x0dd5 U0e35 # Thai_saraii
-0x0dd6 U0e36 # Thai_saraue
-0x0dd7 U0e37 # Thai_sarauee
-0x0dd8 U0e38 # Thai_sarau
-0x0dd9 U0e39 # Thai_sarauu
-0x0dda U0e3a # Thai_phinthu
-0x0dde U0e3e # Thai_maihanakat_maitho
-0x0ddf U0e3f # Thai_baht
-0x0de0 U0e40 # Thai_sarae
-0x0de1 U0e41 # Thai_saraae
-0x0de2 U0e42 # Thai_sarao
-0x0de3 U0e43 # Thai_saraaimaimuan
-0x0de4 U0e44 # Thai_saraaimaimalai
-0x0de5 U0e45 # Thai_lakkhangyao
-0x0de6 U0e46 # Thai_maiyamok
-0x0de7 U0e47 # Thai_maitaikhu
-0x0de8 U0e48 # Thai_maiek
-0x0de9 U0e49 # Thai_maitho
-0x0dea U0e4a # Thai_maitri
-0x0deb U0e4b # Thai_maichattawa
-0x0dec U0e4c # Thai_thanthakhat
-0x0ded U0e4d # Thai_nikhahit
-0x0df0 U0e50 # Thai_leksun
-0x0df1 U0e51 # Thai_leknung
-0x0df2 U0e52 # Thai_leksong
-0x0df3 U0e53 # Thai_leksam
-0x0df4 U0e54 # Thai_leksi
-0x0df5 U0e55 # Thai_lekha
-0x0df6 U0e56 # Thai_lekhok
-0x0df7 U0e57 # Thai_lekchet
-0x0df8 U0e58 # Thai_lekpaet
-0x0df9 U0e59 # Thai_lekkao
-0x0ea1 U3131 # Hangul_Kiyeog
-0x0ea2 U3132 # Hangul_SsangKiyeog
-0x0ea3 U3133 # Hangul_KiyeogSios
-0x0ea4 U3134 # Hangul_Nieun
-0x0ea5 U3135 # Hangul_NieunJieuj
-0x0ea6 U3136 # Hangul_NieunHieuh
-0x0ea7 U3137 # Hangul_Dikeud
-0x0ea8 U3138 # Hangul_SsangDikeud
-0x0ea9 U3139 # Hangul_Rieul
-0x0eaa U313a # Hangul_RieulKiyeog
-0x0eab U313b # Hangul_RieulMieum
-0x0eac U313c # Hangul_RieulPieub
-0x0ead U313d # Hangul_RieulSios
-0x0eae U313e # Hangul_RieulTieut
-0x0eaf U313f # Hangul_RieulPhieuf
-0x0eb0 U3140 # Hangul_RieulHieuh
-0x0eb1 U3141 # Hangul_Mieum
-0x0eb2 U3142 # Hangul_Pieub
-0x0eb3 U3143 # Hangul_SsangPieub
-0x0eb4 U3144 # Hangul_PieubSios
-0x0eb5 U3145 # Hangul_Sios
-0x0eb6 U3146 # Hangul_SsangSios
-0x0eb7 U3147 # Hangul_Ieung
-0x0eb8 U3148 # Hangul_Jieuj
-0x0eb9 U3149 # Hangul_SsangJieuj
-0x0eba U314a # Hangul_Cieuc
-0x0ebb U314b # Hangul_Khieuq
-0x0ebc U314c # Hangul_Tieut
-0x0ebd U314d # Hangul_Phieuf
-0x0ebe U314e # Hangul_Hieuh
-0x0ebf U314f # Hangul_A
-0x0ec0 U3150 # Hangul_AE
-0x0ec1 U3151 # Hangul_YA
-0x0ec2 U3152 # Hangul_YAE
-0x0ec3 U3153 # Hangul_EO
-0x0ec4 U3154 # Hangul_E
-0x0ec5 U3155 # Hangul_YEO
-0x0ec6 U3156 # Hangul_YE
-0x0ec7 U3157 # Hangul_O
-0x0ec8 U3158 # Hangul_WA
-0x0ec9 U3159 # Hangul_WAE
-0x0eca U315a # Hangul_OE
-0x0ecb U315b # Hangul_YO
-0x0ecc U315c # Hangul_U
-0x0ecd U315d # Hangul_WEO
-0x0ece U315e # Hangul_WE
-0x0ecf U315f # Hangul_WI
-0x0ed0 U3160 # Hangul_YU
-0x0ed1 U3161 # Hangul_EU
-0x0ed2 U3162 # Hangul_YI
-0x0ed3 U3163 # Hangul_I
-0x0ed4 U11a8 # Hangul_J_Kiyeog
-0x0ed5 U11a9 # Hangul_J_SsangKiyeog
-0x0ed6 U11aa # Hangul_J_KiyeogSios
-0x0ed7 U11ab # Hangul_J_Nieun
-0x0ed8 U11ac # Hangul_J_NieunJieuj
-0x0ed9 U11ad # Hangul_J_NieunHieuh
-0x0eda U11ae # Hangul_J_Dikeud
-0x0edb U11af # Hangul_J_Rieul
-0x0edc U11b0 # Hangul_J_RieulKiyeog
-0x0edd U11b1 # Hangul_J_RieulMieum
-0x0ede U11b2 # Hangul_J_RieulPieub
-0x0edf U11b3 # Hangul_J_RieulSios
-0x0ee0 U11b4 # Hangul_J_RieulTieut
-0x0ee1 U11b5 # Hangul_J_RieulPhieuf
-0x0ee2 U11b6 # Hangul_J_RieulHieuh
-0x0ee3 U11b7 # Hangul_J_Mieum
-0x0ee4 U11b8 # Hangul_J_Pieub
-0x0ee5 U11b9 # Hangul_J_PieubSios
-0x0ee6 U11ba # Hangul_J_Sios
-0x0ee7 U11bb # Hangul_J_SsangSios
-0x0ee8 U11bc # Hangul_J_Ieung
-0x0ee9 U11bd # Hangul_J_Jieuj
-0x0eea U11be # Hangul_J_Cieuc
-0x0eeb U11bf # Hangul_J_Khieuq
-0x0eec U11c0 # Hangul_J_Tieut
-0x0eed U11c1 # Hangul_J_Phieuf
-0x0eee U11c2 # Hangul_J_Hieuh
-0x0eef U316d # Hangul_RieulYeorinHieuh
-0x0ef0 U3171 # Hangul_SunkyeongeumMieum
-0x0ef1 U3178 # Hangul_SunkyeongeumPieub
-0x0ef2 U317f # Hangul_PanSios
-0x0ef3 U0000 # Hangul_KkogjiDalrinIeung
-0x0ef4 U3184 # Hangul_SunkyeongeumPhieuf
-0x0ef5 U3186 # Hangul_YeorinHieuh
-0x0ef6 U318d # Hangul_AraeA
-0x0ef7 U318e # Hangul_AraeAE
-0x0ef8 U11eb # Hangul_J_PanSios
-0x0ef9 U0000 # Hangul_J_KkogjiDalrinIeung
-0x0efa U11f9 # Hangul_J_YeorinHieuh
-0x0eff U20a9 # Korean_Won
-0x20a0 U20a0 # EcuSign
-0x20a1 U20a1 # ColonSign
-0x20a2 U20a2 # CruzeiroSign
-0x20a3 U20a3 # FFrancSign
-0x20a4 U20a4 # LiraSign
-0x20a5 U20a5 # MillSign
-0x20a6 U20a6 # NairaSign
-0x20a7 U20a7 # PesetaSign
-0x20a8 U20a8 # RupeeSign
-0x20a9 U20a9 # WonSign
-0x20aa U20aa # NewSheqelSign
-0x20ab U20ab # DongSign
-0x20ac U20ac # EuroSign
diff --git a/nx-X11/programs/xterm/unicode/make-precompose.sh b/nx-X11/programs/xterm/unicode/make-precompose.sh
deleted file mode 100644
index 747866c4d..000000000
--- a/nx-X11/programs/xterm/unicode/make-precompose.sh
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/bin/sh
-# $XTermId: make-precompose.sh,v 1.5 2005/04/03 16:58:30 tom Exp $
-# $XFree86: xc/programs/xterm/unicode/make-precompose.sh,v 1.4 2005/03/29 04:00:32 tsi Exp $
-cat precompose.c.head | sed -e's/@/$/g'
-cut UnicodeData.txt -d ";" -f 1,6 | \
- grep ";[0-9,A-F]" | grep " " | \
- sed -e "s/ /, 0x/;s/^/{ 0x/;s/;/, 0x/;s/$/},/" | (sort -k 3 || sort +2)
-cat precompose.c.tail
diff --git a/nx-X11/programs/xterm/unicode/precompose.c.head b/nx-X11/programs/xterm/unicode/precompose.c.head
deleted file mode 100644
index c51f752d7..000000000
--- a/nx-X11/programs/xterm/unicode/precompose.c.head
+++ /dev/null
@@ -1,16 +0,0 @@
-/*
- * Canonical Compositions
- *
- * DO NOT EDIT BY HAND! This is generated by the script
- * unicode/make-precompose.sh
- */
-/* @XTermId@ */
-/* @XFree86@ */
-
-#include <precompose.h>
-
-static struct {
- int replacement;
- int base;
- int comb;
-} precompositions[] = {
diff --git a/nx-X11/programs/xterm/unicode/precompose.c.tail b/nx-X11/programs/xterm/unicode/precompose.c.tail
deleted file mode 100644
index 0ceca9b6c..000000000
--- a/nx-X11/programs/xterm/unicode/precompose.c.tail
+++ /dev/null
@@ -1,23 +0,0 @@
-};
-
-int do_precomposition(int base, int comb) {
- int min = 0;
- int max = sizeof(precompositions) / sizeof(precompositions[0]) - 1;
- int mid;
- unsigned int sought = ((unsigned)base << 16) | (unsigned)comb, that;
-
- /* binary search */
- while (max >= min) {
- mid = (min + max) / 2;
- that = ((unsigned)precompositions[mid].base << 16) | ((unsigned)precompositions[mid].comb);
- if (that < sought) {
- min = mid + 1;
- } else if (that > sought) {
- max = mid - 1;
- } else {
- return precompositions[mid].replacement;
- }
- }
- /* no match */
- return -1;
-}
diff --git a/nx-X11/programs/xterm/util.c b/nx-X11/programs/xterm/util.c
deleted file mode 100644
index 84feac48f..000000000
--- a/nx-X11/programs/xterm/util.c
+++ /dev/null
@@ -1,2951 +0,0 @@
-/* $XTermId: util.c,v 1.255 2005/09/18 23:48:13 tom Exp $ */
-
-/*
- * $Xorg: util.c,v 1.3 2000/08/17 19:55:10 cpqbld Exp $
- */
-
-/* $XFree86: xc/programs/xterm/util.c,v 3.93 2005/09/18 23:48:13 dickey Exp $ */
-
-/*
- * Copyright 1999-2004,2005 by Thomas E. Dickey
- *
- * All Rights Reserved
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sublicense, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- * IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY
- * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- * Except as contained in this notice, the name(s) of the above copyright
- * holders shall not be used in advertising or otherwise to promote the
- * sale, use or other dealings in this Software without prior written
- * authorization.
- *
- *
- * Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
- *
- * All Rights Reserved
- *
- * Permission to use, copy, modify, and distribute this software and its
- * documentation for any purpose and without fee is hereby granted,
- * provided that the above copyright notice appear in all copies and that
- * both that copyright notice and this permission notice appear in
- * supporting documentation, and that the name of Digital Equipment
- * Corporation not be used in advertising or publicity pertaining to
- * distribution of the software without specific, written prior permission.
- *
- *
- * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
- * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
- * DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
- * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
- * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
- * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- * SOFTWARE.
- */
-
-/* util.c */
-
-#include <xterm.h>
-
-#include <data.h>
-#include <error.h>
-#include <menu.h>
-#include <fontutils.h>
-#include <xstrings.h>
-
-#if OPT_WIDE_CHARS
-#if defined(HAVE_WCHAR_H) && defined(HAVE_WCWIDTH)
-#include <wchar.h>
-#endif
-#include <wcwidth.h>
-#endif
-
-#include <stdio.h>
-#include <ctype.h>
-#include <assert.h>
-
-static int ClearInLine(TScreen * screen, int row, int col, unsigned len);
-static int handle_translated_exposure(TScreen * screen,
- int rect_x,
- int rect_y,
- int rect_width,
- int rect_height);
-static void ClearLeft(TScreen * screen);
-static void CopyWait(TScreen * screen);
-static void horizontal_copy_area(TScreen * screen,
- int firstchar,
- int nchars,
- int amount);
-static void vertical_copy_area(TScreen * screen,
- int firstline,
- int nlines,
- int amount);
-
-#if OPT_WIDE_CHARS
-int (*my_wcwidth) (wchar_t);
-#endif
-
-/*
- * These routines are used for the jump scroll feature
- */
-void
-FlushScroll(TScreen * screen)
-{
- int i;
- int shift = -screen->topline;
- int bot = screen->max_row - shift;
- int refreshtop;
- int refreshheight;
- int scrolltop;
- int scrollheight;
-
- if (screen->cursor_state)
- HideCursor();
- if (screen->scroll_amt > 0) {
- refreshheight = screen->refresh_amt;
- scrollheight = screen->bot_marg - screen->top_marg -
- refreshheight + 1;
- if ((refreshtop = screen->bot_marg - refreshheight + 1 + shift) >
- (i = screen->max_row - screen->scroll_amt + 1))
- refreshtop = i;
- if (screen->scrollWidget && !screen->alternate
- && screen->top_marg == 0) {
- scrolltop = 0;
- if ((scrollheight += shift) > i)
- scrollheight = i;
- if ((i = screen->bot_marg - bot) > 0 &&
- (refreshheight -= i) < screen->scroll_amt)
- refreshheight = screen->scroll_amt;
- if ((i = screen->savedlines) < screen->savelines) {
- if ((i += screen->scroll_amt) >
- screen->savelines)
- i = screen->savelines;
- screen->savedlines = i;
- ScrollBarDrawThumb(screen->scrollWidget);
- }
- } else {
- scrolltop = screen->top_marg + shift;
- if ((i = bot - (screen->bot_marg - screen->refresh_amt +
- screen->scroll_amt)) > 0) {
- if (bot < screen->bot_marg)
- refreshheight = screen->scroll_amt + i;
- } else {
- scrollheight += i;
- refreshheight = screen->scroll_amt;
- if ((i = screen->top_marg + screen->scroll_amt -
- 1 - bot) > 0) {
- refreshtop += i;
- refreshheight -= i;
- }
- }
- }
- } else {
- refreshheight = -screen->refresh_amt;
- scrollheight = screen->bot_marg - screen->top_marg -
- refreshheight + 1;
- refreshtop = screen->top_marg + shift;
- scrolltop = refreshtop + refreshheight;
- if ((i = screen->bot_marg - bot) > 0)
- scrollheight -= i;
- if ((i = screen->top_marg + refreshheight - 1 - bot) > 0)
- refreshheight -= i;
- }
- scrolling_copy_area(screen, scrolltop + screen->scroll_amt,
- scrollheight, screen->scroll_amt);
- ScrollSelection(screen, -(screen->scroll_amt), False);
- screen->scroll_amt = 0;
- screen->refresh_amt = 0;
- if (refreshheight > 0) {
- ClearCurBackground(screen,
- (int) refreshtop * FontHeight(screen) + screen->border,
- (int) OriginX(screen),
- (unsigned) refreshheight * FontHeight(screen),
- (unsigned) Width(screen));
- ScrnRefresh(screen, refreshtop, 0, refreshheight,
- MaxCols(screen), False);
- }
- return;
-}
-
-int
-AddToRefresh(TScreen * screen)
-{
- int amount = screen->refresh_amt;
- int row = screen->cur_row;
-
- if (amount == 0) {
- return (0);
- } else if (amount > 0) {
- int bottom;
-
- if (row == (bottom = screen->bot_marg) - amount) {
- screen->refresh_amt++;
- return (1);
- }
- return (row >= bottom - amount + 1 && row <= bottom);
- } else {
- int top;
-
- amount = -amount;
- if (row == (top = screen->top_marg) + amount) {
- screen->refresh_amt--;
- return (1);
- }
- return (row <= top + amount - 1 && row >= top);
- }
-}
-
-/*
- * If we're scrolling, leave the selection intact if possible.
- * If it will bump into one of the extremes of the saved-lines, truncate that.
- * If the selection is not contained within the scrolled region, clear it.
- */
-static void
-adjustHiliteOnFwdScroll(TScreen * screen, int amount, Boolean all_lines)
-{
- int lo_row = (all_lines
- ? (screen->bot_marg - screen->savelines)
- : screen->top_marg);
- int hi_row = screen->bot_marg;
-
- TRACE2(("adjustSelection FWD %s by %d (%s)\n",
- screen->alternate ? "alternate" : "normal",
- amount,
- all_lines ? "all" : "visible"));
- TRACE2((" before highlite %d.%d .. %d.%d\n",
- screen->startHRow,
- screen->startHCol,
- screen->endHRow,
- screen->endHCol));
- TRACE2((" margins %d..%d\n", screen->top_marg, screen->bot_marg));
- TRACE2((" limits %d..%d\n", lo_row, hi_row));
-
- if (screen->startHRow >= lo_row
- && screen->startHRow - amount < lo_row) {
- /* truncate the selection because its start would move out of region */
- if (lo_row + amount <= screen->endHRow) {
- TRACE2(("truncate selection by changing start %d.%d to %d.%d\n",
- screen->startHRow,
- screen->startHCol,
- lo_row + amount,
- 0));
- screen->startHRow = lo_row + amount;
- screen->startHCol = 0;
- } else {
- TRACE2(("deselect because %d.%d .. %d.%d shifted %d is outside margins %d..%d\n",
- screen->startHRow,
- screen->startHCol,
- screen->endHRow,
- screen->endHCol,
- -amount,
- lo_row,
- hi_row));
- ScrnDisownSelection(screen);
- }
- } else if (screen->startHRow <= hi_row && screen->endHRow > hi_row) {
- ScrnDisownSelection(screen);
- } else if (screen->startHRow < lo_row && screen->endHRow > lo_row) {
- ScrnDisownSelection(screen);
- }
-
- TRACE2((" after highlite %d.%d .. %d.%d\n",
- screen->startHRow,
- screen->startHCol,
- screen->endHRow,
- screen->endHCol));
-}
-
-/*
- * This is the same as adjustHiliteOnFwdScroll(), but reversed. In this case,
- * only the visible lines are affected.
- */
-static void
-adjustHiliteOnBakScroll(TScreen * screen, int amount)
-{
- int lo_row = screen->top_marg;
- int hi_row = screen->bot_marg;
-
- TRACE2(("adjustSelection BAK %s by %d (%s)\n",
- screen->alternate ? "alternate" : "normal",
- amount,
- "visible"));
- TRACE2((" before highlite %d.%d .. %d.%d\n",
- screen->startHRow,
- screen->startHCol,
- screen->endHRow,
- screen->endHCol));
- TRACE2((" margins %d..%d\n", screen->top_marg, screen->bot_marg));
-
- if (screen->endHRow >= hi_row
- && screen->endHRow + amount > hi_row) {
- /* truncate the selection because its start would move out of region */
- if (hi_row - amount >= screen->startHRow) {
- TRACE2(("truncate selection by changing start %d.%d to %d.%d\n",
- screen->startHRow,
- screen->startHCol,
- hi_row - amount,
- 0));
- screen->endHRow = hi_row - amount;
- screen->endHCol = 0;
- } else {
- TRACE2(("deselect because %d.%d .. %d.%d shifted %d is outside margins %d..%d\n",
- screen->startHRow,
- screen->startHCol,
- screen->endHRow,
- screen->endHCol,
- amount,
- lo_row,
- hi_row));
- ScrnDisownSelection(screen);
- }
- } else if (screen->endHRow >= lo_row && screen->startHRow < lo_row) {
- ScrnDisownSelection(screen);
- } else if (screen->endHRow > hi_row && screen->startHRow > hi_row) {
- ScrnDisownSelection(screen);
- }
-
- TRACE2((" after highlite %d.%d .. %d.%d\n",
- screen->startHRow,
- screen->startHCol,
- screen->endHRow,
- screen->endHCol));
-}
-
-/*
- * scrolls the screen by amount lines, erases bottom, doesn't alter
- * cursor position (i.e. cursor moves down amount relative to text).
- * All done within the scrolling region, of course.
- * requires: amount > 0
- */
-void
-xtermScroll(TScreen * screen, int amount)
-{
- int i = screen->bot_marg - screen->top_marg + 1;
- int shift;
- int bot;
- int refreshtop = 0;
- int refreshheight;
- int scrolltop;
- int scrollheight;
- Boolean scroll_all_lines = (screen->scrollWidget
- && !screen->alternate
- && screen->top_marg == 0);
-
- TRACE(("xtermScroll count=%d\n", amount));
-
- screen->cursor_busy += 1;
- screen->cursor_moved = True;
-
- if (screen->cursor_state)
- HideCursor();
-
- if (amount > i)
- amount = i;
-
- if (ScrnHaveSelection(screen))
- adjustHiliteOnFwdScroll(screen, amount, scroll_all_lines);
-
- if (screen->jumpscroll) {
- if (screen->scroll_amt > 0) {
- if (screen->refresh_amt + amount > i)
- FlushScroll(screen);
- screen->scroll_amt += amount;
- screen->refresh_amt += amount;
- } else {
- if (screen->scroll_amt < 0)
- FlushScroll(screen);
- screen->scroll_amt = amount;
- screen->refresh_amt = amount;
- }
- refreshheight = 0;
- } else {
- ScrollSelection(screen, -(amount), False);
- if (amount == i) {
- ClearScreen(screen);
- screen->cursor_busy -= 1;
- return;
- }
-
- shift = -screen->topline;
- bot = screen->max_row - shift;
- scrollheight = i - amount;
- refreshheight = amount;
-
- if ((refreshtop = screen->bot_marg - refreshheight + 1 + shift) >
- (i = screen->max_row - refreshheight + 1))
- refreshtop = i;
-
- if (scroll_all_lines) {
- scrolltop = 0;
- if ((scrollheight += shift) > i)
- scrollheight = i;
- if ((i = screen->savedlines) < screen->savelines) {
- if ((i += amount) > screen->savelines)
- i = screen->savelines;
- screen->savedlines = i;
- ScrollBarDrawThumb(screen->scrollWidget);
- }
- } else {
- scrolltop = screen->top_marg + shift;
- if ((i = screen->bot_marg - bot) > 0) {
- scrollheight -= i;
- if ((i = screen->top_marg + amount - 1 - bot) >= 0) {
- refreshtop += i;
- refreshheight -= i;
- }
- }
- }
-
- if (screen->multiscroll && amount == 1 &&
- screen->topline == 0 && screen->top_marg == 0 &&
- screen->bot_marg == screen->max_row) {
- if (screen->incopy < 0 && screen->scrolls == 0)
- CopyWait(screen);
- screen->scrolls++;
- }
-
- scrolling_copy_area(screen, scrolltop + amount, scrollheight, amount);
-
- if (refreshheight > 0) {
- ClearCurBackground(screen,
- (int) refreshtop * FontHeight(screen) + screen->border,
- (int) OriginX(screen),
- (unsigned) refreshheight * FontHeight(screen),
- (unsigned) Width(screen));
- if (refreshheight > shift)
- refreshheight = shift;
- }
- }
-
- if (amount > 0) {
- if (scroll_all_lines) {
- ScrnDeleteLine(screen,
- screen->allbuf,
- screen->bot_marg + screen->savelines,
- 0,
- (unsigned) amount,
- (unsigned) MaxCols(screen));
- } else {
- ScrnDeleteLine(screen,
- screen->visbuf,
- screen->bot_marg,
- screen->top_marg,
- (unsigned) amount,
- (unsigned) MaxCols(screen));
- }
- }
-
- if (refreshheight > 0) {
- ScrnRefresh(screen, refreshtop, 0, refreshheight,
- MaxCols(screen), False);
- }
-
- screen->cursor_busy -= 1;
- return;
-}
-
-/*
- * Reverse scrolls the screen by amount lines, erases top, doesn't alter
- * cursor position (i.e. cursor moves up amount relative to text).
- * All done within the scrolling region, of course.
- * Requires: amount > 0
- */
-void
-RevScroll(TScreen * screen, int amount)
-{
- int i = screen->bot_marg - screen->top_marg + 1;
- int shift;
- int bot;
- int refreshtop;
- int refreshheight;
- int scrolltop;
- int scrollheight;
-
- TRACE(("RevScroll count=%d\n", amount));
-
- screen->cursor_busy += 1;
- screen->cursor_moved = True;
-
- if (screen->cursor_state)
- HideCursor();
-
- if (amount > i)
- amount = i;
-
- if (ScrnHaveSelection(screen))
- adjustHiliteOnBakScroll(screen, amount);
-
- if (screen->jumpscroll) {
- if (screen->scroll_amt < 0) {
- if (-screen->refresh_amt + amount > i)
- FlushScroll(screen);
- screen->scroll_amt -= amount;
- screen->refresh_amt -= amount;
- } else {
- if (screen->scroll_amt > 0)
- FlushScroll(screen);
- screen->scroll_amt = -amount;
- screen->refresh_amt = -amount;
- }
- } else {
- shift = -screen->topline;
- bot = screen->max_row - shift;
- refreshheight = amount;
- scrollheight = screen->bot_marg - screen->top_marg -
- refreshheight + 1;
- refreshtop = screen->top_marg + shift;
- scrolltop = refreshtop + refreshheight;
- if ((i = screen->bot_marg - bot) > 0)
- scrollheight -= i;
- if ((i = screen->top_marg + refreshheight - 1 - bot) > 0)
- refreshheight -= i;
-
- if (screen->multiscroll && amount == 1 &&
- screen->topline == 0 && screen->top_marg == 0 &&
- screen->bot_marg == screen->max_row) {
- if (screen->incopy < 0 && screen->scrolls == 0)
- CopyWait(screen);
- screen->scrolls++;
- }
-
- scrolling_copy_area(screen, scrolltop - amount, scrollheight, -amount);
-
- if (refreshheight > 0) {
- ClearCurBackground(screen,
- (int) refreshtop * FontHeight(screen) + screen->border,
- (int) OriginX(screen),
- (unsigned) refreshheight * FontHeight(screen),
- (unsigned) Width(screen));
- }
- }
- if (amount > 0) {
- ScrnInsertLine(screen,
- screen->visbuf,
- screen->bot_marg,
- screen->top_marg,
- (unsigned) amount,
- (unsigned) MaxCols(screen));
- }
- screen->cursor_busy -= 1;
- return;
-}
-
-/*
- * If cursor not in scrolling region, returns. Else,
- * inserts n blank lines at the cursor's position. Lines above the
- * bottom margin are lost.
- */
-void
-InsertLine(TScreen * screen, int n)
-{
- int i;
- int shift;
- int bot;
- int refreshtop;
- int refreshheight;
- int scrolltop;
- int scrollheight;
-
- if (!ScrnIsLineInMargins(screen, screen->cur_row - screen->topline))
- return;
-
- TRACE(("InsertLine count=%d\n", n));
-
- if (screen->cursor_state)
- HideCursor();
-
- if (ScrnHaveSelection(screen)
- && ScrnAreLinesInSelection(screen, screen->top_marg, screen->bot_marg)) {
- ScrnDisownSelection(screen);
- }
-
- screen->do_wrap = 0;
- if (n > (i = screen->bot_marg - screen->cur_row + 1))
- n = i;
- if (screen->jumpscroll) {
- if (screen->scroll_amt <= 0 &&
- screen->cur_row <= -screen->refresh_amt) {
- if (-screen->refresh_amt + n > MaxRows(screen))
- FlushScroll(screen);
- screen->scroll_amt -= n;
- screen->refresh_amt -= n;
- } else if (screen->scroll_amt)
- FlushScroll(screen);
- }
- if (!screen->scroll_amt) {
- shift = -screen->topline;
- bot = screen->max_row - shift;
- refreshheight = n;
- scrollheight = screen->bot_marg - screen->cur_row - refreshheight + 1;
- refreshtop = screen->cur_row + shift;
- scrolltop = refreshtop + refreshheight;
- if ((i = screen->bot_marg - bot) > 0)
- scrollheight -= i;
- if ((i = screen->cur_row + refreshheight - 1 - bot) > 0)
- refreshheight -= i;
- vertical_copy_area(screen, scrolltop - n, scrollheight, -n);
- if (refreshheight > 0) {
- ClearCurBackground(screen,
- (int) refreshtop * FontHeight(screen) + screen->border,
- (int) OriginX(screen),
- (unsigned) refreshheight * FontHeight(screen),
- (unsigned) Width(screen));
- }
- }
- if (n > 0) {
- ScrnInsertLine(screen,
- screen->visbuf,
- screen->bot_marg,
- screen->cur_row,
- (unsigned) n,
- (unsigned) MaxCols(screen));
- }
-}
-
-/*
- * If cursor not in scrolling region, returns. Else, deletes n lines
- * at the cursor's position, lines added at bottom margin are blank.
- */
-void
-DeleteLine(TScreen * screen, int n)
-{
- int i;
- int shift;
- int bot;
- int refreshtop;
- int refreshheight;
- int scrolltop;
- int scrollheight;
-
- if (!ScrnIsLineInMargins(screen, screen->cur_row - screen->topline))
- return;
-
- TRACE(("DeleteLine count=%d\n", n));
-
- if (screen->cursor_state)
- HideCursor();
-
- if (ScrnHaveSelection(screen)
- && ScrnAreLinesInSelection(screen, screen->top_marg, screen->bot_marg)) {
- ScrnDisownSelection(screen);
- }
-
- screen->do_wrap = 0;
- if (n > (i = screen->bot_marg - screen->cur_row + 1))
- n = i;
- if (screen->jumpscroll) {
- if (screen->scroll_amt >= 0 && screen->cur_row == screen->top_marg) {
- if (screen->refresh_amt + n > MaxRows(screen))
- FlushScroll(screen);
- screen->scroll_amt += n;
- screen->refresh_amt += n;
- } else if (screen->scroll_amt)
- FlushScroll(screen);
- }
- if (!screen->scroll_amt) {
-
- shift = -screen->topline;
- bot = screen->max_row - shift;
- scrollheight = i - n;
- refreshheight = n;
- if ((refreshtop = screen->bot_marg - refreshheight + 1 + shift) >
- (i = screen->max_row - refreshheight + 1))
- refreshtop = i;
- if (screen->scrollWidget && !screen->alternate && screen->cur_row == 0) {
- scrolltop = 0;
- if ((scrollheight += shift) > i)
- scrollheight = i;
- if ((i = screen->savedlines) < screen->savelines) {
- if ((i += n) > screen->savelines)
- i = screen->savelines;
- screen->savedlines = i;
- ScrollBarDrawThumb(screen->scrollWidget);
- }
- } else {
- scrolltop = screen->cur_row + shift;
- if ((i = screen->bot_marg - bot) > 0) {
- scrollheight -= i;
- if ((i = screen->cur_row + n - 1 - bot) >= 0) {
- refreshheight -= i;
- }
- }
- }
- vertical_copy_area(screen, scrolltop + n, scrollheight, n);
- if (refreshheight > 0) {
- ClearCurBackground(screen,
- (int) refreshtop * FontHeight(screen) + screen->border,
- (int) OriginX(screen),
- (unsigned) refreshheight * FontHeight(screen),
- (unsigned) Width(screen));
- }
- }
- /* adjust screen->buf */
- if (n > 0) {
- if (screen->scrollWidget
- && !screen->alternate
- && screen->cur_row == 0)
- ScrnDeleteLine(screen,
- screen->allbuf,
- screen->bot_marg + screen->savelines,
- 0,
- (unsigned) n,
- (unsigned) MaxCols(screen));
- else
- ScrnDeleteLine(screen,
- screen->visbuf,
- screen->bot_marg,
- screen->cur_row,
- (unsigned) n,
- (unsigned) MaxCols(screen));
- }
-}
-
-/*
- * Insert n blanks at the cursor's position, no wraparound
- */
-void
-InsertChar(TScreen * screen, unsigned n)
-{
- unsigned limit;
- int row = screen->cur_row - screen->topline;
-
- if (screen->cursor_state)
- HideCursor();
-
- TRACE(("InsertChar count=%d\n", n));
-
- if (ScrnHaveSelection(screen)
- && ScrnIsLineInSelection(screen, row)) {
- ScrnDisownSelection(screen);
- }
- screen->do_wrap = 0;
-
- assert(screen->cur_col <= screen->max_col);
- limit = MaxCols(screen) - screen->cur_col;
-
- if (n > limit)
- n = limit;
-
- assert(n != 0);
- if (row <= screen->max_row) {
- if (!AddToRefresh(screen)) {
- int col = MaxCols(screen) - n;
- if (screen->scroll_amt)
- FlushScroll(screen);
-
-#if OPT_DEC_CHRSET
- if (CSET_DOUBLE(SCRN_BUF_CSETS(screen, screen->cur_row)[0])) {
- col = MaxCols(screen) / 2 - n;
- }
-#endif
- /*
- * prevent InsertChar from shifting the end of a line over
- * if it is being appended to
- */
- if (non_blank_line(screen->visbuf, screen->cur_row,
- screen->cur_col, MaxCols(screen)))
- horizontal_copy_area(screen, screen->cur_col,
- col - screen->cur_col,
- (int) n);
-
- ClearCurBackground(screen,
- CursorY(screen, screen->cur_row),
- CurCursorX(screen, screen->cur_row, screen->cur_col),
- (unsigned) FontHeight(screen),
- n * CurFontWidth(screen, screen->cur_row));
- }
- }
- /* adjust screen->buf */
- ScrnInsertChar(screen, n);
-}
-
-/*
- * Deletes n chars at the cursor's position, no wraparound.
- */
-void
-DeleteChar(TScreen * screen, unsigned n)
-{
- unsigned limit;
- int row = screen->cur_row - screen->topline;
-
- if (screen->cursor_state)
- HideCursor();
-
- TRACE(("DeleteChar count=%d\n", n));
-
- if (ScrnHaveSelection(screen)
- && ScrnIsLineInSelection(screen, row)) {
- ScrnDisownSelection(screen);
- }
- screen->do_wrap = 0;
-
- assert(screen->cur_col <= screen->max_col);
- limit = MaxCols(screen) - screen->cur_col;
-
- if (n > limit)
- n = limit;
-
- assert(n != 0);
- if (row <= screen->max_row) {
- if (!AddToRefresh(screen)) {
- int col = MaxCols(screen) - n;
- if (screen->scroll_amt)
- FlushScroll(screen);
-
-#if OPT_DEC_CHRSET
- if (CSET_DOUBLE(SCRN_BUF_CSETS(screen, screen->cur_row)[0])) {
- col = MaxCols(screen) / 2 - n;
- }
-#endif
- horizontal_copy_area(screen,
- (int) (screen->cur_col + n),
- col - screen->cur_col,
- -((int) n));
-
- ClearCurBackground(screen,
- CursorY(screen, screen->cur_row),
- CurCursorX(screen, screen->cur_row, col),
- (unsigned) FontHeight(screen),
- n * CurFontWidth(screen, screen->cur_row));
- }
- }
- if (n > 0) {
- /* adjust screen->buf */
- ScrnDeleteChar(screen, (unsigned) n);
- }
-}
-
-/*
- * Clear from cursor position to beginning of display, inclusive.
- */
-static void
-ClearAbove(TScreen * screen)
-{
- if (screen->protected_mode != OFF_PROTECT) {
- int row;
- unsigned len = MaxCols(screen);
-
- assert(screen->max_col >= 0);
- for (row = 0; row <= screen->max_row; row++)
- ClearInLine(screen, row, 0, len);
- } else {
- int top, height;
-
- if (screen->cursor_state)
- HideCursor();
- if ((top = -screen->topline) <= screen->max_row) {
- if (screen->scroll_amt)
- FlushScroll(screen);
- if ((height = screen->cur_row + top) > screen->max_row)
- height = screen->max_row;
- if ((height -= top) > 0) {
- ClearCurBackground(screen,
- top * FontHeight(screen) + screen->border,
- OriginX(screen),
- (unsigned) (height * FontHeight(screen)),
- (unsigned) (Width(screen)));
- }
- }
- ClearBufRows(screen, 0, screen->cur_row - 1);
- }
-
- if (screen->cur_row - screen->topline <= screen->max_row)
- ClearLeft(screen);
-}
-
-/*
- * Clear from cursor position to end of display, inclusive.
- */
-static void
-ClearBelow(TScreen * screen)
-{
- ClearRight(screen, -1);
-
- if (screen->protected_mode != OFF_PROTECT) {
- int row;
- unsigned len = MaxCols(screen);
-
- assert(screen->max_col >= 0);
- for (row = screen->cur_row + 1; row <= screen->max_row; row++)
- ClearInLine(screen, row, 0, len);
- } else {
- int top;
-
- if ((top = screen->cur_row - screen->topline) <= screen->max_row) {
- if (screen->scroll_amt)
- FlushScroll(screen);
- if (++top <= screen->max_row) {
- ClearCurBackground(screen,
- top * FontHeight(screen) + screen->border,
- OriginX(screen),
- (unsigned) ((screen->max_row - top + 1)
- * FontHeight(screen)),
- (unsigned) (Width(screen)));
- }
- }
- ClearBufRows(screen, screen->cur_row + 1, screen->max_row);
- }
-}
-
-/*
- * Clear the given row, for the given range of columns, returning 1 if no
- * protected characters were found, 0 otherwise.
- */
-static int
-ClearInLine(TScreen * screen, int row, int col, unsigned len)
-{
- int rc = 1;
- int flags = TERM_COLOR_FLAGS(term);
-
- TRACE(("ClearInLine(row=%d, col=%d, len=%d) vs %d..%d\n",
- row, col, len,
- screen->startHRow,
- screen->startHCol));
-
- if (ScrnHaveSelection(screen)
- && ScrnIsLineInSelection(screen, row)) {
- ScrnDisownSelection(screen);
- }
-
- /*
- * If we're clearing to the end of the line, we won't count this as
- * "drawn" characters. We'll only do cut/paste on "drawn" characters,
- * so this has the effect of suppressing trailing blanks from a
- * selection.
- */
- if (col + (int) len < MaxCols(screen)) {
- flags |= CHARDRAWN;
- } else {
- len = MaxCols(screen) - col;
- }
-
- /* If we've marked protected text on the screen, we'll have to
- * check each time we do an erase.
- */
- if (screen->protected_mode != OFF_PROTECT) {
- unsigned n;
- Char *attrs = SCRN_BUF_ATTRS(screen, row) + col;
- int saved_mode = screen->protected_mode;
- Bool done;
-
- /* disable this branch during recursion */
- screen->protected_mode = OFF_PROTECT;
-
- do {
- done = True;
- for (n = 0; n < len; n++) {
- if (attrs[n] & PROTECTED) {
- rc = 0; /* found a protected segment */
- if (n != 0)
- ClearInLine(screen, row, col, n);
- while ((n < len)
- && (attrs[n] & PROTECTED))
- n++;
- done = False;
- break;
- }
- }
- /* setup for another segment, past the protected text */
- if (!done) {
- attrs += n;
- col += n;
- len -= n;
- }
- } while (!done);
-
- screen->protected_mode = saved_mode;
- if (len <= 0)
- return 0;
- }
- /* fall through to the final non-protected segment */
-
- if (screen->cursor_state)
- HideCursor();
- screen->do_wrap = 0;
-
- if (row - screen->topline <= screen->max_row) {
- if (!AddToRefresh(screen)) {
- if (screen->scroll_amt)
- FlushScroll(screen);
- ClearCurBackground(screen,
- CursorY(screen, row),
- CurCursorX(screen, row, col),
- (unsigned) FontHeight(screen),
- len * CurFontWidth(screen, row));
- }
- }
-
- memset(SCRN_BUF_CHARS(screen, row) + col, ' ', len);
- memset(SCRN_BUF_ATTRS(screen, row) + col, flags, len);
-
- if_OPT_EXT_COLORS(screen, {
- memset(SCRN_BUF_FGRND(screen, row) + col, term->sgr_foreground, len);
- memset(SCRN_BUF_BGRND(screen, row) + col, term->cur_background, len);
- });
- if_OPT_ISO_TRADITIONAL_COLORS(screen, {
- memset(SCRN_BUF_COLOR(screen, row) + col, xtermColorPair(), len);
- });
- if_OPT_DEC_CHRSET({
- memset(SCRN_BUF_CSETS(screen, row) + col,
- curXtermChrSet(screen->cur_row), len);
- });
- if_OPT_WIDE_CHARS(screen, {
- memset(SCRN_BUF_WIDEC(screen, row) + col, 0, len);
- memset(SCRN_BUF_COM1L(screen, row) + col, 0, len);
- memset(SCRN_BUF_COM1H(screen, row) + col, 0, len);
- memset(SCRN_BUF_COM2L(screen, row) + col, 0, len);
- memset(SCRN_BUF_COM2H(screen, row) + col, 0, len);
- });
-
- return rc;
-}
-
-/*
- * Clear the next n characters on the cursor's line, including the cursor's
- * position.
- */
-void
-ClearRight(TScreen * screen, int n)
-{
- unsigned len = (MaxCols(screen) - screen->cur_col);
-
- assert(screen->max_col >= 0);
- assert(screen->max_col >= screen->cur_col);
-
- if (n < 0) /* the remainder of the line */
- n = MaxCols(screen);
- if (n == 0) /* default for 'ECH' */
- n = 1;
-
- if (len > (unsigned) n)
- len = n;
-
- (void) ClearInLine(screen, screen->cur_row, screen->cur_col, len);
-
- /* with the right part cleared, we can't be wrapping */
- ScrnClrWrapped(screen, screen->cur_row);
-}
-
-/*
- * Clear first part of cursor's line, inclusive.
- */
-static void
-ClearLeft(TScreen * screen)
-{
- unsigned len = screen->cur_col + 1;
- assert(screen->cur_col >= 0);
-
- (void) ClearInLine(screen, screen->cur_row, 0, len);
-}
-
-/*
- * Erase the cursor's line.
- */
-static void
-ClearLine(TScreen * screen)
-{
- unsigned len = MaxCols(screen);
-
- assert(screen->max_col >= 0);
- (void) ClearInLine(screen, screen->cur_row, 0, len);
-}
-
-void
-ClearScreen(TScreen * screen)
-{
- int top;
-
- if (screen->cursor_state)
- HideCursor();
-
- ScrnDisownSelection(screen);
- screen->do_wrap = 0;
- if ((top = -screen->topline) <= screen->max_row) {
- if (screen->scroll_amt)
- FlushScroll(screen);
- ClearCurBackground(screen,
- top * FontHeight(screen) + screen->border,
- OriginX(screen),
- (unsigned) ((screen->max_row - top + 1)
- * FontHeight(screen)),
- (unsigned) Width(screen));
- }
- ClearBufRows(screen, 0, screen->max_row);
-}
-
-/*
- * If we've written protected text DEC-style, and are issuing a non-DEC
- * erase, temporarily reset the protected_mode flag so that the erase will
- * ignore the protected flags.
- */
-void
-do_erase_line(TScreen * screen, int param, int mode)
-{
- int saved_mode = screen->protected_mode;
-
- if (saved_mode == DEC_PROTECT
- && saved_mode != mode)
- screen->protected_mode = OFF_PROTECT;
-
- switch (param) {
- case -1: /* DEFAULT */
- case 0:
- ClearRight(screen, -1);
- break;
- case 1:
- ClearLeft(screen);
- break;
- case 2:
- ClearLine(screen);
- break;
- }
- screen->protected_mode = saved_mode;
-}
-
-/*
- * Just like 'do_erase_line()', except that this intercepts ED controls. If we
- * clear the whole screen, we'll get the return-value from ClearInLine, and
- * find if there were any protected characters left. If not, reset the
- * protected mode flag in the screen data (it's slower).
- */
-void
-do_erase_display(TScreen * screen, int param, int mode)
-{
- int saved_mode = screen->protected_mode;
-
- if (saved_mode == DEC_PROTECT
- && saved_mode != mode)
- screen->protected_mode = OFF_PROTECT;
-
- switch (param) {
- case -1: /* DEFAULT */
- case 0:
- if (screen->cur_row == 0
- && screen->cur_col == 0) {
- screen->protected_mode = saved_mode;
- do_erase_display(screen, 2, mode);
- saved_mode = screen->protected_mode;
- } else
- ClearBelow(screen);
- break;
-
- case 1:
- if (screen->cur_row == screen->max_row
- && screen->cur_col == screen->max_col) {
- screen->protected_mode = saved_mode;
- do_erase_display(screen, 2, mode);
- saved_mode = screen->protected_mode;
- } else
- ClearAbove(screen);
- break;
-
- case 2:
- /*
- * We use 'ClearScreen()' throughout the remainder of the
- * program for places where we don't care if the characters are
- * protected or not. So we modify the logic around this call
- * on 'ClearScreen()' to handle protected characters.
- */
- if (screen->protected_mode != OFF_PROTECT) {
- int row;
- int rc = 1;
- unsigned len = MaxCols(screen);
-
- assert(screen->max_col >= 0);
- for (row = 0; row <= screen->max_row; row++)
- rc &= ClearInLine(screen, row, 0, len);
- if (rc != 0)
- saved_mode = OFF_PROTECT;
- } else {
- ClearScreen(screen);
- }
- break;
-
- case 3:
- /* xterm addition - erase saved lines. */
- screen->savedlines = 0;
- ScrollBarDrawThumb(screen->scrollWidget);
- break;
- }
- screen->protected_mode = saved_mode;
-}
-
-static void
-CopyWait(TScreen * screen)
-{
- XEvent reply;
- XEvent *rep = &reply;
-
- while (1) {
- XWindowEvent(screen->display, VWindow(screen),
- ExposureMask, &reply);
- switch (reply.type) {
- case Expose:
- HandleExposure(screen, &reply);
- break;
- case NoExpose:
- case GraphicsExpose:
- if (screen->incopy <= 0) {
- screen->incopy = 1;
- if (screen->scrolls > 0)
- screen->scrolls--;
- }
- if (reply.type == GraphicsExpose)
- HandleExposure(screen, &reply);
-
- if ((reply.type == NoExpose) ||
- ((XExposeEvent *) rep)->count == 0) {
- if (screen->incopy <= 0 && screen->scrolls > 0)
- screen->scrolls--;
- if (screen->scrolls == 0) {
- screen->incopy = 0;
- return;
- }
- screen->incopy = -1;
- }
- break;
- }
- }
-}
-
-/*
- * used by vertical_copy_area and and horizontal_copy_area
- */
-static void
-copy_area(TScreen * screen,
- int src_x,
- int src_y,
- unsigned width,
- unsigned height,
- int dest_x,
- int dest_y)
-{
- if (width != 0 && height != 0) {
- /* wait for previous CopyArea to complete unless
- multiscroll is enabled and active */
- if (screen->incopy && screen->scrolls == 0)
- CopyWait(screen);
- screen->incopy = -1;
-
- /* save for translating Expose events */
- screen->copy_src_x = src_x;
- screen->copy_src_y = src_y;
- screen->copy_width = width;
- screen->copy_height = height;
- screen->copy_dest_x = dest_x;
- screen->copy_dest_y = dest_y;
-
- XCopyArea(screen->display,
- VWindow(screen), VWindow(screen),
- NormalGC(screen),
- src_x, src_y, width, height, dest_x, dest_y);
- }
-}
-
-/*
- * use when inserting or deleting characters on the current line
- */
-static void
-horizontal_copy_area(TScreen * screen,
- int firstchar, /* char pos on screen to start copying at */
- int nchars,
- int amount) /* number of characters to move right */
-{
- int src_x = CurCursorX(screen, screen->cur_row, firstchar);
- int src_y = CursorY(screen, screen->cur_row);
-
- copy_area(screen, src_x, src_y,
- (unsigned) nchars * CurFontWidth(screen, screen->cur_row),
- (unsigned) FontHeight(screen),
- src_x + amount * CurFontWidth(screen, screen->cur_row), src_y);
-}
-
-/*
- * use when inserting or deleting lines from the screen
- */
-static void
-vertical_copy_area(TScreen * screen,
- int firstline, /* line on screen to start copying at */
- int nlines,
- int amount) /* number of lines to move up (neg=down) */
-{
- if (nlines > 0) {
- int src_x = OriginX(screen);
- int src_y = firstline * FontHeight(screen) + screen->border;
-
- copy_area(screen, src_x, src_y,
- (unsigned) Width(screen),
- (unsigned) (nlines * FontHeight(screen)),
- src_x, src_y - amount * FontHeight(screen));
- }
-}
-
-/*
- * use when scrolling the entire screen
- */
-void
-scrolling_copy_area(TScreen * screen,
- int firstline, /* line on screen to start copying at */
- int nlines,
- int amount) /* number of lines to move up (neg=down) */
-{
-
- if (nlines > 0) {
- vertical_copy_area(screen, firstline, nlines, amount);
- }
-}
-
-/*
- * Handler for Expose events on the VT widget.
- * Returns 1 iff the area where the cursor was got refreshed.
- */
-int
-HandleExposure(TScreen * screen, XEvent * event)
-{
- XExposeEvent *reply = (XExposeEvent *) event;
-
-#ifndef NO_ACTIVE_ICON
- if (reply->window == screen->iconVwin.window) {
- WhichVWin(screen) = &screen->iconVwin;
- TRACE(("HandleExposure - icon"));
- } else {
- WhichVWin(screen) = &screen->fullVwin;
- TRACE(("HandleExposure - normal"));
- }
- TRACE((" event %d,%d %dx%d\n",
- reply->y,
- reply->x,
- reply->height,
- reply->width));
-#endif /* NO_ACTIVE_ICON */
-
- /* if not doing CopyArea or if this is a GraphicsExpose, don't translate */
- if (!screen->incopy || event->type != Expose)
- return handle_translated_exposure(screen, reply->x, reply->y,
- reply->width,
- reply->height);
- else {
- /* compute intersection of area being copied with
- area being exposed. */
- int both_x1 = Max(screen->copy_src_x, reply->x);
- int both_y1 = Max(screen->copy_src_y, reply->y);
- int both_x2 = Min(screen->copy_src_x + screen->copy_width,
- (unsigned) (reply->x + reply->width));
- int both_y2 = Min(screen->copy_src_y + screen->copy_height,
- (unsigned) (reply->y + reply->height));
- int value = 0;
-
- /* was anything copied affected? */
- if (both_x2 > both_x1 && both_y2 > both_y1) {
- /* do the copied area */
- value = handle_translated_exposure
- (screen, reply->x + screen->copy_dest_x - screen->copy_src_x,
- reply->y + screen->copy_dest_y - screen->copy_src_y,
- reply->width, reply->height);
- }
- /* was anything not copied affected? */
- if (reply->x < both_x1 || reply->y < both_y1
- || reply->x + reply->width > both_x2
- || reply->y + reply->height > both_y2)
- value = handle_translated_exposure(screen, reply->x, reply->y,
- reply->width, reply->height);
-
- return value;
- }
-}
-
-/*
- * Called by the ExposeHandler to do the actual repaint after the coordinates
- * have been translated to allow for any CopyArea in progress.
- * The rectangle passed in is pixel coordinates.
- */
-static int
-handle_translated_exposure(TScreen * screen,
- int rect_x,
- int rect_y,
- int rect_width,
- int rect_height)
-{
- int toprow, leftcol, nrows, ncols;
- int x0, x1;
- int y0, y1;
-
- TRACE(("handle_translated_exposure at %d,%d size %dx%d\n",
- rect_y, rect_x, rect_height, rect_width));
-
- x0 = (rect_x - OriginX(screen));
- x1 = (x0 + rect_width);
-
- y0 = (rect_y - OriginY(screen));
- y1 = (y0 + rect_height);
-
- toprow = y0 / FontHeight(screen);
- if (toprow < 0)
- toprow = 0;
-
- leftcol = x0 / CurFontWidth(screen, screen->cur_row);
- if (leftcol < 0)
- leftcol = 0;
-
- nrows = (y1 - 1) / FontHeight(screen) - toprow + 1;
- ncols = (x1 - 1) / FontWidth(screen) - leftcol + 1;
- toprow -= screen->scrolls;
- if (toprow < 0) {
- nrows += toprow;
- toprow = 0;
- }
- if (toprow + nrows > MaxRows(screen))
- nrows = MaxRows(screen) - toprow;
- if (leftcol + ncols > MaxCols(screen))
- ncols = MaxCols(screen) - leftcol;
-
- if (nrows > 0 && ncols > 0) {
- ScrnRefresh(screen, toprow, leftcol, nrows, ncols, False);
- if (waiting_for_initial_map) {
- first_map_occurred();
- }
- if (screen->cur_row >= toprow &&
- screen->cur_row < toprow + nrows &&
- screen->cur_col >= leftcol &&
- screen->cur_col < leftcol + ncols)
- return (1);
-
- }
- return (0);
-}
-
-/***====================================================================***/
-
-void
-GetColors(XtermWidget tw, ScrnColors * pColors)
-{
- TScreen *screen = &tw->screen;
- int n;
-
- pColors->which = 0;
- for (n = 0; n < NCOLORS; ++n) {
- SET_COLOR_VALUE(pColors, n, T_COLOR(screen, n));
- }
-}
-
-void
-ChangeColors(XtermWidget tw, ScrnColors * pNew)
-{
- TScreen *screen = &tw->screen;
-#if OPT_TEK4014
- Window tek = TWindow(screen);
-#endif
-
- TRACE(("ChangeColors\n"));
-
- if (COLOR_DEFINED(pNew, TEXT_CURSOR)) {
- T_COLOR(screen, TEXT_CURSOR) = COLOR_VALUE(pNew, TEXT_CURSOR);
- TRACE(("... TEXT_CURSOR: %#lx\n", T_COLOR(screen, TEXT_CURSOR)));
- } else if ((T_COLOR(screen, TEXT_CURSOR) == T_COLOR(screen, TEXT_FG)) &&
- (COLOR_DEFINED(pNew, TEXT_FG))) {
- T_COLOR(screen, TEXT_CURSOR) = COLOR_VALUE(pNew, TEXT_FG);
- TRACE(("... TEXT_CURSOR: %#lx\n", T_COLOR(screen, TEXT_CURSOR)));
- }
-
- if (COLOR_DEFINED(pNew, TEXT_FG)) {
- Pixel fg = COLOR_VALUE(pNew, TEXT_FG);
- T_COLOR(screen, TEXT_FG) = fg;
- TRACE(("... TEXT_FG: %#lx\n", T_COLOR(screen, TEXT_FG)));
- XSetForeground(screen->display, NormalGC(screen), fg);
- XSetBackground(screen->display, ReverseGC(screen), fg);
- XSetForeground(screen->display, NormalBoldGC(screen), fg);
- XSetBackground(screen->display, ReverseBoldGC(screen), fg);
- }
-
- if (COLOR_DEFINED(pNew, TEXT_BG)) {
- Pixel bg = COLOR_VALUE(pNew, TEXT_BG);
- T_COLOR(screen, TEXT_BG) = bg;
- TRACE(("... TEXT_BG: %#lx\n", T_COLOR(screen, TEXT_BG)));
- XSetBackground(screen->display, NormalGC(screen), bg);
- XSetForeground(screen->display, ReverseGC(screen), bg);
- XSetBackground(screen->display, NormalBoldGC(screen), bg);
- XSetForeground(screen->display, ReverseBoldGC(screen), bg);
- XSetWindowBackground(screen->display, VWindow(screen),
- T_COLOR(screen, TEXT_BG));
- }
-#if OPT_HIGHLIGHT_COLOR
- if (COLOR_DEFINED(pNew, HIGHLIGHT_BG)) {
- T_COLOR(screen, HIGHLIGHT_BG) = COLOR_VALUE(pNew, HIGHLIGHT_BG);
- TRACE(("... HIGHLIGHT_BG: %#lx\n", T_COLOR(screen, HIGHLIGHT_BG)));
- }
-#endif
-
- if (COLOR_DEFINED(pNew, MOUSE_FG) || (COLOR_DEFINED(pNew, MOUSE_BG))) {
- if (COLOR_DEFINED(pNew, MOUSE_FG)) {
- T_COLOR(screen, MOUSE_FG) = COLOR_VALUE(pNew, MOUSE_FG);
- TRACE(("... MOUSE_FG: %#lx\n", T_COLOR(screen, MOUSE_FG)));
- }
- if (COLOR_DEFINED(pNew, MOUSE_BG)) {
- T_COLOR(screen, MOUSE_BG) = COLOR_VALUE(pNew, MOUSE_BG);
- TRACE(("... MOUSE_BG: %#lx\n", T_COLOR(screen, MOUSE_BG)));
- }
-
- recolor_cursor(screen->pointer_cursor,
- T_COLOR(screen, MOUSE_FG),
- T_COLOR(screen, MOUSE_BG));
- recolor_cursor(screen->arrow,
- T_COLOR(screen, MOUSE_FG),
- T_COLOR(screen, MOUSE_BG));
- XDefineCursor(screen->display, VWindow(screen),
- screen->pointer_cursor);
-
-#if OPT_TEK4014
- if (tek)
- XDefineCursor(screen->display, tek, screen->arrow);
-#endif
- }
-#if OPT_TEK4014
- if (COLOR_DEFINED(pNew, TEK_FG) ||
- COLOR_DEFINED(pNew, TEK_BG) ||
- COLOR_DEFINED(pNew, TEK_CURSOR)) {
- ChangeTekColors(screen, pNew);
- }
-#endif
- set_cursor_gcs(screen);
- XClearWindow(screen->display, VWindow(screen));
- ScrnRefresh(screen, 0, 0, MaxRows(screen),
- MaxCols(screen), False);
-#if OPT_TEK4014
- if (screen->Tshow) {
- XClearWindow(screen->display, tek);
- TekExpose((Widget) NULL, (XEvent *) NULL, (Region) NULL);
- }
-#endif
-}
-
-void
-ChangeAnsiColors(XtermWidget tw)
-{
- TScreen *screen = &tw->screen;
-
- XClearWindow(screen->display, VWindow(screen));
- ScrnRefresh(screen, 0, 0,
- MaxRows(screen),
- MaxCols(screen), False);
-}
-
-/***====================================================================***/
-
-void
-ReverseVideo(XtermWidget termw)
-{
- TScreen *screen = &termw->screen;
- GC tmpGC;
- Pixel tmp;
-#if OPT_TEK4014
- Window tek = TWindow(screen);
-#endif
-
- /*
- * Swap SGR foreground and background colors. By convention, these are
- * the colors assigned to "black" (SGR #0) and "white" (SGR #7). Also,
- * SGR #8 and SGR #15 are the bold (or bright) versions of SGR #0 and
- * #7, respectively.
- *
- * We don't swap colors that happen to match the screen's foreground
- * and background because that tends to produce bizarre effects.
- */
- if_OPT_ISO_COLORS(screen, {
- ColorRes tmp2;
- EXCHANGE(screen->Acolors[0], screen->Acolors[7], tmp2);
- EXCHANGE(screen->Acolors[8], screen->Acolors[15], tmp2);
- });
-
- tmp = T_COLOR(screen, TEXT_BG);
- if (T_COLOR(screen, TEXT_CURSOR) == T_COLOR(screen, TEXT_FG))
- T_COLOR(screen, TEXT_CURSOR) = tmp;
- T_COLOR(screen, TEXT_BG) = T_COLOR(screen, TEXT_FG);
- T_COLOR(screen, TEXT_FG) = tmp;
-
- EXCHANGE(T_COLOR(screen, MOUSE_FG), T_COLOR(screen, MOUSE_BG), tmp);
- EXCHANGE(NormalGC(screen), ReverseGC(screen), tmpGC);
- EXCHANGE(NormalBoldGC(screen), ReverseBoldGC(screen), tmpGC);
-#ifndef NO_ACTIVE_ICON
- tmpGC = screen->iconVwin.normalGC;
- screen->iconVwin.normalGC = screen->iconVwin.reverseGC;
- screen->iconVwin.reverseGC = tmpGC;
-
- tmpGC = screen->iconVwin.normalboldGC;
- screen->iconVwin.normalboldGC = screen->iconVwin.reverseboldGC;
- screen->iconVwin.reverseboldGC = tmpGC;
-#endif /* NO_ACTIVE_ICON */
-
- recolor_cursor(screen->pointer_cursor,
- T_COLOR(screen, MOUSE_FG),
- T_COLOR(screen, MOUSE_BG));
- recolor_cursor(screen->arrow,
- T_COLOR(screen, MOUSE_FG),
- T_COLOR(screen, MOUSE_BG));
-
- termw->misc.re_verse = !termw->misc.re_verse;
-
- if (XtIsRealized((Widget) termw)) {
- XDefineCursor(screen->display, VWindow(screen), screen->pointer_cursor);
- }
-#if OPT_TEK4014
- if (tek)
- XDefineCursor(screen->display, tek, screen->arrow);
-#endif
-
- if (screen->scrollWidget)
- ScrollBarReverseVideo(screen->scrollWidget);
-
- if (XtIsRealized((Widget) termw)) {
- XSetWindowBackground(screen->display, VWindow(screen),
- T_COLOR(screen, TEXT_BG));
-
- /* the shell-window's background will be used in the first repainting
- * on resizing
- */
- XSetWindowBackground(screen->display, VShellWindow,
- T_COLOR(screen, TEXT_BG));
- }
-#if OPT_TEK4014
- TekReverseVideo(screen);
-#endif
- if (XtIsRealized((Widget) termw)) {
- XClearWindow(screen->display, VWindow(screen));
- ScrnRefresh(screen, 0, 0, MaxRows(screen),
- MaxCols(screen), False);
- }
-#if OPT_TEK4014
- if (screen->Tshow) {
- XClearWindow(screen->display, tek);
- TekExpose((Widget) NULL, (XEvent *) NULL, (Region) NULL);
- }
-#endif
- ReverseOldColors();
- update_reversevideo();
-}
-
-void
-recolor_cursor(Cursor cursor, /* X cursor ID to set */
- unsigned long fg, /* pixel indexes to look up */
- unsigned long bg) /* pixel indexes to look up */
-{
- TScreen *screen = &term->screen;
- Display *dpy = screen->display;
- XColor colordefs[2]; /* 0 is foreground, 1 is background */
-
- colordefs[0].pixel = fg;
- colordefs[1].pixel = bg;
- XQueryColors(dpy, DefaultColormap(dpy, DefaultScreen(dpy)),
- colordefs, 2);
- XRecolorCursor(dpy, cursor, colordefs, colordefs + 1);
- return;
-}
-
-#if OPT_RENDERFONT
-static XftColor *
-getColor(Pixel pixel)
-{
-#define CACHE_SIZE 4
- static struct {
- XftColor color;
- int use;
- } cache[CACHE_SIZE];
- static int use;
- int i;
- int oldest, oldestuse;
- XColor color;
-
- oldestuse = 0x7fffffff;
- oldest = 0;
- for (i = 0; i < CACHE_SIZE; i++) {
- if (cache[i].use) {
- if (cache[i].color.pixel == pixel) {
- cache[i].use = ++use;
- return &cache[i].color;
- }
- }
- if (cache[i].use < oldestuse) {
- oldestuse = cache[i].use;
- oldest = i;
- }
- }
- i = oldest;
- color.pixel = pixel;
- XQueryColor(term->screen.display, term->core.colormap, &color);
- cache[i].color.color.red = color.red;
- cache[i].color.color.green = color.green;
- cache[i].color.color.blue = color.blue;
- cache[i].color.color.alpha = 0xffff;
- cache[i].color.pixel = pixel;
- cache[i].use = ++use;
- return &cache[i].color;
-}
-
-/*
- * fontconfig/Xft combination prior to 2.2 has a problem with
- * CJK truetype 'double-width' (bi-width/monospace) fonts leading
- * to the 's p a c e d o u t' rendering. Consequently, we can't
- * rely on XftDrawString8/16 when one of those fonts is used.
- * Instead, we need to roll out our own using XftDrawCharSpec.
- * A patch in the same spirit (but in a rather different form)
- * was applied to gnome vte and gtk2 port of vim.
- * See http://bugzilla.mozilla.org/show_bug.cgi?id=196312
- */
-static void
-xtermXftDrawString(TScreen * screen,
- unsigned flags GCC_UNUSED,
- XftColor * color,
- XftFont * font,
- int x,
- int y,
- PAIRED_CHARS(Char * text, Char * text2),
- int len,
- int fwidth,
- int *deltax)
-{
-#if OPT_RENDERWIDE
- XftFont *wfont;
- int n;
- int ncells = 0; /* # of 'half-width' charcells */
- static XftCharSpec *sbuf;
- static int slen = 0;
- XftFont *lastFont = 0;
- XftFont *currFont = 0;
- int start = 0;
- int charWidth;
- FcChar32 wc;
- int fontnum = screen->menu_font_number;
-
- if (len == 0 || !(*text || *text2)) {
- return;
- }
-#if OPT_ISO_COLORS
- if ((flags & UNDERLINE)
- && screen->italicULMode
- && screen->renderWideItal[fontnum]) {
- wfont = screen->renderWideItal[fontnum];
- } else
-#endif
- if ((flags & BOLDATTR(screen))
- && screen->renderWideBold[fontnum]) {
- wfont = screen->renderWideBold[fontnum];
- } else {
- wfont = screen->renderWideNorm[fontnum];
- }
-
- if ((int) slen < len) {
- slen = (len + 1) * 2;
- sbuf = (XftCharSpec *) XtRealloc((char *) sbuf,
- slen * sizeof(XftCharSpec));
- }
-
- for (n = 0; n < len; n++) {
- if (text2)
- wc = *text++ | (*text2++ << 8);
- else
- wc = *text++;
- sbuf[n].ucs4 = wc;
- sbuf[n].x = x + fwidth * ncells;
- sbuf[n].y = y;
- charWidth = my_wcwidth((int) wc);
- currFont = (charWidth == 2 && wfont != 0) ? wfont : font;
- ncells += charWidth;
- if (lastFont != currFont) {
- if (lastFont != 0) {
- XftDrawCharSpec(screen->renderDraw,
- color,
- lastFont,
- sbuf + start,
- n - start);
- }
- start = n;
- lastFont = currFont;
- }
- }
- XftDrawCharSpec(screen->renderDraw,
- color,
- lastFont,
- sbuf + start,
- n - start);
-
- if (deltax)
- *deltax = ncells * fwidth;
-#else
-
- XftDrawString8(screen->renderDraw,
- color,
- font,
- x, y, (unsigned char *) text, len);
- if (deltax)
- *deltax = len * fwidth;
-#endif
-}
-#endif /* OPT_RENDERFONT */
-
-#define DrawX(col) x + (col * (font_width))
-#define DrawSegment(first,last) (void)drawXtermText(screen, flags|NOTRANSLATION, gc, DrawX(first), y, chrset, PAIRED_CHARS(text+first, text2+first), (unsigned)(last - first), on_wide)
-
-#if OPT_WIDE_CHARS
-/*
- * Actually this should be called "groff_workaround()" - for the places where
- * groff stomps on compatibility. Still, if enough people get used to it,
- * this might someday become a quasi-standard.
- */
-static int
-ucs_workaround(TScreen * screen,
- unsigned ch,
- unsigned flags,
- GC gc,
- int x,
- int y,
- int chrset,
- int on_wide)
-{
- int fixed = False;
-
- if (screen->wide_chars && screen->utf8_mode && ch > 256) {
- switch (ch) {
- case 0x2010: /* groff "-" */
- case 0x2011:
- case 0x2012:
- case 0x2013:
- case 0x2014:
- case 0x2015:
- case 0x2212: /* groff "\-" */
- ch = '-';
- fixed = True;
- break;
- case 0x2018: /* groff "`" */
- ch = '`';
- fixed = True;
- break;
- case 0x2019: /* groff ' */
- ch = '\'';
- fixed = True;
- break;
- case 0x201C: /* groff lq */
- case 0x201D: /* groff rq */
- ch = '"';
- fixed = True;
- break;
- }
- if (fixed) {
- Char text[2];
- Char text2[2];
-
- text[0] = ch;
- text2[0] = 0;
- drawXtermText(screen,
- flags,
- gc,
- x,
- y,
- chrset,
- PAIRED_CHARS(text, text2),
- 1,
- on_wide);
- }
- }
- return fixed;
-}
-#endif
-
-#if OPT_CLIP_BOLD
-/*
- * This special case is a couple of percent slower, but avoids a lot of pixel
- * trash in rxcurses' hanoi.cmd demo (e.g., 10x20 font).
- */
-#define beginClipping(screen,gc,pwidth,plength) \
- if (pwidth > 2) { \
- XRectangle clip; \
- int clip_x = x; \
- int clip_y = y - FontHeight(screen) + FontDescent(screen); \
- clip.x = 0; \
- clip.y = 0; \
- clip.height = FontHeight(screen); \
- clip.width = pwidth * plength; \
- XSetClipRectangles(screen->display, gc, \
- clip_x, clip_y, \
- &clip, 1, Unsorted); \
- }
-#define endClipping(screen,gc) \
- XSetClipMask(screen->display, gc, None)
-#else
-#define beginClipping(screen,gc,pwidth,plength) /* nothing */
-#define endClipping(screen,gc) /* nothing */
-#endif /* OPT_CLIP_BOLD */
-
-/*
- * Draws text with the specified combination of bold/underline. The return
- * value is the updated x position.
- */
-int
-drawXtermText(TScreen * screen,
- unsigned flags,
- GC gc,
- int x,
- int y,
- int chrset,
- PAIRED_CHARS(Char * text, Char * text2),
- Cardinal len,
- int on_wide)
-{
- int real_length = len;
- int underline_len;
- /* Intended width of the font to draw (as opposed to the actual width of
- the X font, and the width of the default font) */
- int font_width = ((flags & DOUBLEWFONT) ? 2 : 1) * screen->fnt_wide;
- Bool did_ul = False;
-
-#if OPT_WIDE_CHARS
- /*
- * It's simpler to pass in a null pointer for text2 in places where
- * we only use codes through 255. Fix text2 here so we can increment
- * it, etc.
- */
- if (text2 == 0) {
- static Char *dbuf;
- static unsigned dlen;
- if (dlen <= len) {
- dlen = (len + 1) * 2;
- dbuf = (Char *) XtRealloc((char *) dbuf, dlen);
- memset(dbuf, 0, dlen);
- }
- text2 = dbuf;
- }
-#endif
-#if OPT_DEC_CHRSET
- if (CSET_DOUBLE(chrset)) {
- /* We could try drawing double-size characters in the icon, but
- * given that the icon font is usually nil or nil2, there
- * doesn't seem to be much point.
- */
- GC gc2 = ((!IsIcon(screen) && screen->font_doublesize)
- ? xterm_DoubleGC((unsigned) chrset, flags, gc)
- : 0);
-
- TRACE(("DRAWTEXT%c[%4d,%4d] (%d) %d:%.*s\n",
- screen->cursor_state == OFF ? ' ' : '*',
- y, x, chrset, len, (int) len, text));
-
- if (gc2 != 0) { /* draw actual double-sized characters */
- /* Update the last-used cache of double-sized fonts */
- int inx = xterm_Double_index((unsigned) chrset, flags);
- XFontStruct *fs = screen->double_fonts[inx].fs;
- XRectangle rect, *rp = &rect;
- int nr = 1;
- int adjust;
-
- font_width *= 2;
- flags |= DOUBLEWFONT;
-
- rect.x = 0;
- rect.y = 0;
- rect.width = len * font_width;
- rect.height = FontHeight(screen);
-
- switch (chrset) {
- case CSET_DHL_TOP:
- rect.y = -(rect.height / 2);
- y -= rect.y;
- flags |= DOUBLEHFONT;
- break;
- case CSET_DHL_BOT:
- rect.y = (rect.height / 2);
- y -= rect.y;
- flags |= DOUBLEHFONT;
- break;
- default:
- nr = 0;
- break;
- }
-
- /*
- * Though it is the right "size", a given bold font may
- * be shifted up by a pixel or two. Shift it back into
- * the clipping rectangle.
- */
- if (nr != 0) {
- adjust = fs->ascent
- + fs->descent
- - (2 * FontHeight(screen));
- rect.y -= adjust;
- y += adjust;
- }
-
- if (nr)
- XSetClipRectangles(screen->display, gc2,
- x, y, rp, nr, YXBanded);
- else
- XSetClipMask(screen->display, gc2, None);
-
- /* Call ourselves recursively with the new gc */
-
- /*
- * If we're trying to use proportional font, or if the
- * font server didn't give us what we asked for wrt
- * width, position each character independently.
- */
- if (screen->fnt_prop
- || (fs->min_bounds.width != fs->max_bounds.width)
- || (fs->min_bounds.width != 2 * FontWidth(screen))) {
- /* It is hard to fall-through to the main
- branch: in a lot of places the check
- for the cached font info is for
- normal/bold fonts only. */
- while (len--) {
- x = drawXtermText(screen, flags, gc2,
- x, y, 0,
- PAIRED_CHARS(text++, text2++),
- 1, on_wide);
- x += FontWidth(screen);
- }
- } else {
- x = drawXtermText(screen, flags, gc2,
- x, y, 0,
- PAIRED_CHARS(text, text2),
- len, on_wide);
- x += len * FontWidth(screen);
- }
-
- TRACE(("drawtext [%4d,%4d]\n", y, x));
- } else { /* simulate double-sized characters */
-#if OPT_WIDE_CHARS
- Char *wide = 0;
-#endif
- unsigned need = 2 * len;
- Char *temp = TypeMallocN(Char, need);
- unsigned n = 0;
- if_OPT_WIDE_CHARS(screen, {
- wide = TypeMallocN(Char, need);
- });
- while (len--) {
- if_OPT_WIDE_CHARS(screen, {
- wide[n] = *text2++;
- wide[n + 1] = 0;
- });
- temp[n++] = *text++;
- temp[n++] = ' ';
- }
- x = drawXtermText(screen,
- flags,
- gc,
- x, y,
- 0,
- PAIRED_CHARS(temp, wide),
- n,
- on_wide);
- free(temp);
- if_OPT_WIDE_CHARS(screen, {
- free(wide);
- });
- }
- return x;
- }
-#endif
-#if OPT_RENDERFONT
- if (UsingRenderFont(term)) {
- Display *dpy = screen->display;
- XftFont *font;
- XGCValues values;
- int fontnum = screen->menu_font_number;
-
- if (!screen->renderDraw) {
- int scr;
- Drawable draw = VWindow(screen);
- Visual *visual;
-
- scr = DefaultScreen(dpy);
- visual = DefaultVisual(dpy, scr);
- screen->renderDraw = XftDrawCreate(dpy, draw, visual,
- DefaultColormap(dpy, scr));
- }
-#if OPT_ISO_COLORS
- if ((flags & UNDERLINE)
- && screen->italicULMode
- && screen->renderFontItal[fontnum]) {
- font = screen->renderFontItal[fontnum];
- did_ul = True;
- } else
-#endif
- if ((flags & BOLDATTR(screen))
- && screen->renderFontBold[fontnum]) {
- font = screen->renderFontBold[fontnum];
- } else {
- font = screen->renderFontNorm[fontnum];
- }
- XGetGCValues(dpy, gc, GCForeground | GCBackground, &values);
- if (!(flags & NOBACKGROUND))
- XftDrawRect(screen->renderDraw,
- getColor(values.background),
- x, y,
- len * FontWidth(screen),
- (unsigned) FontHeight(screen));
-
- y += font->ascent;
-#if OPT_BOX_CHARS
- if (!screen->force_box_chars) {
- /* adding code to substitute simulated line-drawing characters */
- int last, first = 0;
- Dimension old_wide, old_high = 0;
- int curX = x;
-
- for (last = 0; last < (int) len; last++) {
- unsigned ch = text[last];
- int deltax = 0;
-
- /*
- * If we're reading UTF-8 from the client, we may have a
- * line-drawing character. Translate it back to our box-code
- * if it is really a line-drawing character (since the
- * fonts used by Xft generally do not have correct glyphs),
- * or if Xft can tell us that the glyph is really missing.
- */
- if_OPT_WIDE_CHARS(screen, {
- unsigned full = (ch | (text2[last] << 8));
- unsigned part = ucs2dec(full);
- if (xtermIsDecGraphic(part) &&
- (xtermIsLineDrawing(part)
- || xtermXftMissing(term, font, full)))
- ch = part;
- else
- ch = full;
- });
- /*
- * If we have one of our box-codes, draw it directly.
- */
- if (xtermIsDecGraphic(ch)) {
- /* line drawing character time */
- if (last > first) {
- xtermXftDrawString(screen, flags,
- getColor(values.foreground),
- font, curX, y,
- PAIRED_CHARS(text + first,
- text2 + first),
- last - first,
- FontWidth(screen),
- &deltax);
- curX += deltax;
- }
- old_wide = screen->fnt_wide;
- old_high = screen->fnt_high;
- screen->fnt_wide = FontWidth(screen);
- screen->fnt_high = FontHeight(screen);
- xtermDrawBoxChar(term, ch, flags, gc,
- curX, y - FontAscent(screen));
- curX += FontWidth(screen);
- screen->fnt_wide = old_wide;
- screen->fnt_high = old_high;
- first = last + 1;
- }
- }
- if (last > first) {
- xtermXftDrawString(screen, flags,
- getColor(values.foreground),
- font, curX, y,
- PAIRED_CHARS(text + first, text2 + first),
- last - first,
- FontWidth(screen),
- NULL);
- }
- } else
-#endif /* OPT_BOX_CHARS */
- {
- xtermXftDrawString(screen, flags,
- getColor(values.foreground),
- font, x, y, PAIRED_CHARS(text, text2),
- (int) len, FontWidth(screen), NULL);
- }
-
- if ((flags & UNDERLINE) && screen->underline && !did_ul) {
- if (FontDescent(screen) > 1)
- y++;
- XDrawLine(screen->display, VWindow(screen), gc,
- x, y,
- x + (int) len * FontWidth(screen) - 1,
- y);
- }
- return x + len * FontWidth(screen);
- }
-#endif /* OPT_RENDERFONT */
- /*
- * If we're asked to display a proportional font, do this with a fixed
- * pitch. Yes, it's ugly. But we cannot distinguish the use of xterm
- * as a dumb terminal vs its use as in fullscreen programs such as vi.
- * Hint: do not try to use a proportional font in the icon.
- */
- if (!IsIcon(screen) && !(flags & CHARBYCHAR) && screen->fnt_prop) {
- int adj, width;
- GC fillGC = gc; /* might be cursorGC */
- XFontStruct *fs = ((flags & BOLDATTR(screen))
- ? BoldFont(screen)
- : NormalFont(screen));
-
-#define GC_PAIRS(a,b) \
- if (gc == a) fillGC = b; \
- if (gc == b) fillGC = a
-
- /*
- * Fill the area where we'll write the characters, otherwise
- * we'll get gaps between them. The cursor is a special case,
- * because the XFillRectangle call only uses the foreground,
- * while we've set the cursor color in the background. So we
- * need a special GC for that.
- */
- if (gc == screen->cursorGC
- || gc == screen->reversecursorGC)
- fillGC = screen->fillCursorGC;
- GC_PAIRS(NormalGC(screen), ReverseGC(screen));
- GC_PAIRS(NormalBoldGC(screen), ReverseBoldGC(screen));
-
- if (!(flags & NOBACKGROUND))
- XFillRectangle(screen->display, VWindow(screen), fillGC,
- x, y,
- len * FontWidth(screen),
- (unsigned) FontHeight(screen));
-
- while (len--) {
- width = XTextWidth(fs, (char *) text, 1);
- adj = (FontWidth(screen) - width) / 2;
- (void) drawXtermText(screen, flags | NOBACKGROUND | CHARBYCHAR,
- gc, x + adj, y, chrset,
- PAIRED_CHARS(text++, text2++), 1, on_wide);
- x += FontWidth(screen);
- }
- return x;
- }
-#if OPT_BOX_CHARS
- /* If the font is incomplete, draw some substitutions */
- if (!IsIcon(screen)
- && !(flags & NOTRANSLATION)
- && (!screen->fnt_boxes || screen->force_box_chars)) {
- /* Fill in missing box-characters.
- Find regions without missing characters, and draw
- them calling ourselves recursively. Draw missing
- characters via xtermDrawBoxChar(). */
- XFontStruct *font = ((flags & BOLD)
- ? BoldFont(screen)
- : NormalFont(screen));
- int last, first = 0;
- for (last = 0; last < (int) len; last++) {
- unsigned ch = text[last];
- Bool isMissing;
-#if OPT_WIDE_CHARS
- if (text2 != 0)
- ch |= (text2[last] << 8);
- isMissing = (ch != HIDDEN_CHAR)
- && (xtermMissingChar(term, ch,
- ((on_wide || iswide((int) ch))
- && screen->fnt_dwd)
- ? screen->fnt_dwd
- : font));
-#else
- isMissing = xtermMissingChar(term, ch, font);
-#endif
- if (isMissing) {
- if (last > first)
- DrawSegment(first, last);
-#if OPT_WIDE_CHARS
- if (!ucs_workaround(screen, ch, flags, gc, DrawX(last), y,
- chrset, on_wide))
-#endif
- xtermDrawBoxChar(term, ch, flags, gc, DrawX(last), y);
- first = last + 1;
- }
- }
- if (last <= first) {
- return x + real_length * FontWidth(screen);
- }
- text += first;
-#if OPT_WIDE_CHARS
- text2 += first;
-#endif
- len = last - first;
- flags |= NOTRANSLATION;
- if (DrawX(first) != x) {
- return drawXtermText(screen,
- flags,
- gc,
- DrawX(first),
- y,
- chrset,
- PAIRED_CHARS(text, text2),
- len,
- on_wide);
- }
- }
-#endif /* OPT_BOX_CHARS */
- /*
- * Behave as if the font has (maybe Unicode-replacements for) drawing
- * characters in the range 1-31 (either we were not asked to ignore them,
- * or the caller made sure that there is none). The only translation we do
- * in this branch is the removal of HIDDEN_CHAR (for the wide-char case).
- */
- TRACE(("drawtext%c[%4d,%4d] (%d) %d:%s\n",
- screen->cursor_state == OFF ? ' ' : '*',
- y, x, chrset, len,
- visibleChars(PAIRED_CHARS(text, text2), len)));
- y += FontAscent(screen);
-
-#if OPT_WIDE_CHARS
- if (screen->wide_chars || screen->unicode_font) {
- int ascent_adjust = 0;
- static XChar2b *sbuf;
- static Cardinal slen;
- int n;
- unsigned ch = text[0] | (text2[0] << 8);
- int wideness = (!IsIcon(screen)
- && ((on_wide || iswide((int) ch) != 0)
- && (screen->fnt_dwd != NULL)));
- unsigned char *endtext = text + len;
- if (slen < len) {
- slen = (len + 1) * 2;
- sbuf = (XChar2b *) XtRealloc((char *) sbuf, slen * sizeof(*sbuf));
- }
- for (n = 0; n < (int) len; n++) {
- sbuf[n].byte2 = *text;
- sbuf[n].byte1 = *text2;
-#if OPT_MINI_LUIT
-#define UCS2SBUF(n,value) sbuf[n].byte2 = (value & 0xff);\
- sbuf[n].byte1 = (value >> 8)
-#define Map2Sbuf(n,from,to) (*text == from) { UCS2SBUF(n,to); }
- if (screen->latin9_mode && !screen->utf8_mode && *text2 == 0) {
-
- /* see http://www.cs.tut.fi/~jkorpela/latin9.html */
- /* *INDENT-OFF* */
- if Map2Sbuf(n, 0xa4, 0x20ac)
- else if Map2Sbuf(n, 0xa6, 0x0160)
- else if Map2Sbuf(n, 0xa8, 0x0161)
- else if Map2Sbuf(n, 0xb4, 0x017d)
- else if Map2Sbuf(n, 0xb8, 0x017e)
- else if Map2Sbuf(n, 0xbc, 0x0152)
- else if Map2Sbuf(n, 0xbd, 0x0153)
- else if Map2Sbuf(n, 0xbe, 0x0178)
- /* *INDENT-ON* */
-
- }
- if (screen->unicode_font
- && *text2 == 0
- && (*text == 0x7f || *text < 0x20)) {
- int ni = dec2ucs(*text == 0x7f ? 0 : *text);
- UCS2SBUF(n, ni);
- }
-#endif /* OPT_MINI_LUIT */
- text++;
- text2++;
- if (wideness) {
- /* filter out those pesky fake characters. */
- while (text < endtext
- && *text == HIDDEN_HI
- && *text2 == HIDDEN_LO) {
- text++;
- text2++;
- len--;
- }
- }
- }
- /* This is probably wrong. But it works. */
- underline_len = len;
-
- /* Set the drawing font */
- if (flags & (DOUBLEHFONT | DOUBLEWFONT)) {
- ; /* Do nothing: font is already set */
- } else if (wideness
- && (screen->fnt_dwd->fid || screen->fnt_dwdb->fid)) {
- underline_len = real_length = len * 2;
- if ((flags & BOLDATTR(screen)) != 0
- && screen->fnt_dwdb->fid) {
- XSetFont(screen->display, gc, screen->fnt_dwdb->fid);
- ascent_adjust = (screen->fnt_dwdb->ascent
- - NormalFont(screen)->ascent);
- } else {
- XSetFont(screen->display, gc, screen->fnt_dwd->fid);
- ascent_adjust = (screen->fnt_dwd->ascent
- - NormalFont(screen)->ascent);
- }
- /* fix ascent */
- } else if ((flags & BOLDATTR(screen)) != 0
- && BoldFont(screen)->fid) {
- XSetFont(screen->display, gc, BoldFont(screen)->fid);
- } else {
- XSetFont(screen->display, gc, NormalFont(screen)->fid);
- }
-
- if (flags & NOBACKGROUND)
- XDrawString16(screen->display,
- VWindow(screen), gc,
- x, y + ascent_adjust,
- sbuf, n);
- else
- XDrawImageString16(screen->display,
- VWindow(screen), gc,
- x, y + ascent_adjust,
- sbuf, n);
-
- if ((flags & BOLDATTR(screen)) && screen->enbolden) {
- beginClipping(screen, gc, font_width, len);
- XDrawString16(screen->display, VWindow(screen), gc,
- x + 1, y + ascent_adjust, sbuf, n);
- endClipping(screen, gc);
- }
-
- } else
-#endif /* OPT_WIDE_CHARS */
- {
- int length = len; /* X should have used unsigned */
-
- if (flags & NOBACKGROUND)
- XDrawString(screen->display, VWindow(screen), gc,
- x, y, (char *) text, length);
- else
- XDrawImageString(screen->display, VWindow(screen), gc,
- x, y, (char *) text, length);
- underline_len = length;
- if ((flags & BOLDATTR(screen)) && screen->enbolden) {
- beginClipping(screen, gc, font_width, length);
- XDrawString(screen->display, VWindow(screen), gc,
- x + 1, y, (char *) text, length);
- endClipping(screen, gc);
- }
- }
-
- if ((flags & UNDERLINE) && screen->underline && !did_ul) {
- if (FontDescent(screen) > 1)
- y++;
- XDrawLine(screen->display, VWindow(screen), gc,
- x, y, x + underline_len * font_width - 1, y);
- }
-
- return x + real_length * FontWidth(screen);
-}
-
-/* set up size hints for window manager; min 1 char by 1 char */
-void
-xtermSizeHints(XtermWidget xw, XSizeHints * sizehints, int scrollbarWidth)
-{
- TScreen *screen = &xw->screen;
-
- TRACE(("xtermSizeHints\n"));
- TRACE((" border %d\n", xw->core.border_width));
- TRACE((" scrollbar %d\n", scrollbarWidth));
-
- sizehints->base_width = 2 * screen->border + scrollbarWidth;
- sizehints->base_height = 2 * screen->border;
-
-#if OPT_TOOLBAR
- TRACE((" toolbar %d\n", ToolbarHeight(xw)));
-
- sizehints->base_height += ToolbarHeight(xw);
- sizehints->base_height += xw->core.border_width * 2;
- sizehints->base_width += xw->core.border_width * 2;
-#endif
-
- sizehints->width_inc = FontWidth(screen);
- sizehints->height_inc = FontHeight(screen);
- sizehints->min_width = sizehints->base_width + sizehints->width_inc;
- sizehints->min_height = sizehints->base_height + sizehints->height_inc;
-
- sizehints->width = MaxCols(screen) * FontWidth(screen) + sizehints->min_width;
- sizehints->height = MaxRows(screen) * FontHeight(screen) + sizehints->min_height;
-
- sizehints->flags |= (PSize | PBaseSize | PMinSize | PResizeInc);
-
- TRACE_HINTS(sizehints);
-}
-
-/*
- * Returns a GC, selected according to the font (reverse/bold/normal) that is
- * required for the current position (implied). The GC is updated with the
- * current screen foreground and background colors.
- */
-GC
-updatedXtermGC(TScreen * screen, unsigned flags, unsigned fg_bg, Bool hilite)
-{
- int my_fg = extract_fg(fg_bg, flags);
- int my_bg = extract_bg(fg_bg, flags);
- Pixel fg_pix = getXtermForeground(flags, my_fg);
- Pixel bg_pix = getXtermBackground(flags, my_bg);
- Pixel xx_pix;
-#if OPT_HIGHLIGHT_COLOR
- Pixel hi_pix = T_COLOR(screen, HIGHLIGHT_BG);
-#endif
- GC gc;
-
- checkVeryBoldColors(flags, my_fg);
-
- if (ReverseOrHilite(screen, flags, hilite)) {
- if (flags & BOLDATTR(screen))
- gc = ReverseBoldGC(screen);
- else
- gc = ReverseGC(screen);
-
-#if OPT_HIGHLIGHT_COLOR
- if (hi_pix != T_COLOR(screen, TEXT_FG)
- && hi_pix != fg_pix
- && hi_pix != bg_pix
- && hi_pix != term->dft_foreground) {
- bg_pix = fg_pix;
- fg_pix = hi_pix;
- }
-#endif
- xx_pix = bg_pix;
- bg_pix = fg_pix;
- fg_pix = xx_pix;
- } else {
- if (flags & BOLDATTR(screen))
- gc = NormalBoldGC(screen);
- else
- gc = NormalGC(screen);
-
- }
-
-#if OPT_BLINK_TEXT
- if ((screen->blink_state == ON) && (!screen->blink_as_bold) && (flags & BLINK)) {
- fg_pix = bg_pix;
- }
-#endif
-
- XSetForeground(screen->display, gc, fg_pix);
- XSetBackground(screen->display, gc, bg_pix);
- return gc;
-}
-
-/*
- * Resets the foreground/background of the GC returned by 'updatedXtermGC()'
- * to the values that would be set in SGR_Foreground and SGR_Background. This
- * duplicates some logic, but only modifies 1/4 as many GC's.
- */
-void
-resetXtermGC(TScreen * screen, unsigned flags, Bool hilite)
-{
- Pixel fg_pix = getXtermForeground(flags, term->cur_foreground);
- Pixel bg_pix = getXtermBackground(flags, term->cur_background);
- GC gc;
-
- checkVeryBoldColors(flags, term->cur_foreground);
-
- if (ReverseOrHilite(screen, flags, hilite)) {
- if (flags & BOLDATTR(screen))
- gc = ReverseBoldGC(screen);
- else
- gc = ReverseGC(screen);
-
- XSetForeground(screen->display, gc, bg_pix);
- XSetBackground(screen->display, gc, fg_pix);
-
- } else {
- if (flags & BOLDATTR(screen))
- gc = NormalBoldGC(screen);
- else
- gc = NormalGC(screen);
-
- XSetForeground(screen->display, gc, fg_pix);
- XSetBackground(screen->display, gc, bg_pix);
- }
-}
-
-#if OPT_ISO_COLORS
-/*
- * Extract the foreground-color index from a one-byte color pair. If we've got
- * BOLD or UNDERLINE color-mode active, those will be used.
- */
-unsigned
-extract_fg(unsigned color, unsigned flags)
-{
- unsigned fg = ExtractForeground(color);
-
- if (term->screen.colorAttrMode
- || (fg == ExtractBackground(color))) {
- if (term->screen.colorULMode && (flags & UNDERLINE))
- fg = COLOR_UL;
- if (term->screen.colorBDMode && (flags & BOLD))
- fg = COLOR_BD;
- if (term->screen.colorBLMode && (flags & BLINK))
- fg = COLOR_BL;
- }
- return fg;
-}
-
-/*
- * Extract the background-color index from a one-byte color pair.
- * If we've got INVERSE color-mode active, that will be used.
- */
-unsigned
-extract_bg(unsigned color, unsigned flags)
-{
- unsigned bg = ExtractBackground(color);
-
- if (term->screen.colorAttrMode
- || (bg == ExtractForeground(color))) {
- if (term->screen.colorRVMode && (flags & INVERSE))
- bg = COLOR_RV;
- }
- return bg;
-}
-
-/*
- * Combine the current foreground and background into a single 8-bit number.
- * Note that we're storing the SGR foreground, since cur_foreground may be set
- * to COLOR_UL, COLOR_BD or COLOR_BL, which would make the code larger than 8
- * bits.
- *
- * This assumes that fg/bg are equal when we override with one of the special
- * attribute colors.
- */
-unsigned
-makeColorPair(int fg, int bg)
-{
- unsigned my_bg = (bg >= 0) && (bg < NUM_ANSI_COLORS) ? (unsigned) bg : 0;
- unsigned my_fg = (fg >= 0) && (fg < NUM_ANSI_COLORS) ? (unsigned) fg : my_bg;
-#if OPT_EXT_COLORS
- return (my_fg << 8) | my_bg;
-#else
- return (my_fg << 4) | my_bg;
-#endif
-}
-
-/*
- * Using the "current" SGR background, clear a rectangle.
- */
-void
-ClearCurBackground(TScreen * screen,
- int top,
- int left,
- unsigned height,
- unsigned width)
-{
- XSetWindowBackground(screen->display,
- VWindow(screen),
- getXtermBackground(term->flags, term->cur_background));
-
- XClearArea(screen->display, VWindow(screen),
- left, top, width, height, False);
-
- XSetWindowBackground(screen->display,
- VWindow(screen),
- getXtermBackground(term->flags, MAXCOLORS));
-}
-#endif /* OPT_ISO_COLORS */
-
-/*
- * Returns a single 8/16-bit number for the given cell
- */
-unsigned
-getXtermCell(TScreen * screen, int row, int col)
-{
- unsigned ch = SCRN_BUF_CHARS(screen, row)[col];
- if_OPT_WIDE_CHARS(screen, {
- ch |= (SCRN_BUF_WIDEC(screen, row)[col] << 8);
- });
- return ch;
-}
-
-/*
- * Sets a single 8/16-bit number for the given cell
- */
-void
-putXtermCell(TScreen * screen, int row, int col, int ch)
-{
- SCRN_BUF_CHARS(screen, row)[col] = ch;
- if_OPT_WIDE_CHARS(screen, {
- SCRN_BUF_WIDEC(screen, row)[col] = (ch >> 8);
- SCRN_BUF_COM1L(screen, row)[col] = 0;
- SCRN_BUF_COM1H(screen, row)[col] = 0;
- SCRN_BUF_COM2L(screen, row)[col] = 0;
- SCRN_BUF_COM2H(screen, row)[col] = 0;
- });
-}
-
-#if OPT_WIDE_CHARS
-unsigned
-getXtermCellComb1(TScreen * screen, int row, int col)
-{
- unsigned ch = SCRN_BUF_COM1L(screen, row)[col];
- ch |= (SCRN_BUF_COM1H(screen, row)[col] << 8);
- return ch;
-}
-
-unsigned
-getXtermCellComb2(TScreen * screen, int row, int col)
-{
- unsigned ch = SCRN_BUF_COM2L(screen, row)[col];
- ch |= (SCRN_BUF_COM2H(screen, row)[col] << 8);
- return ch;
-}
-
-/*
- * Add a combining character for the given cell
- */
-void
-addXtermCombining(TScreen * screen, int row, int col, unsigned ch)
-{
- if (!SCRN_BUF_COM1L(screen, row)[col]
- && !SCRN_BUF_COM1H(screen, row)[col]) {
- SCRN_BUF_COM1L(screen, row)[col] = ch & 0xff;
- SCRN_BUF_COM1H(screen, row)[col] = ch >> 8;
- } else if (!SCRN_BUF_COM2H(screen, row)[col]) {
- SCRN_BUF_COM2L(screen, row)[col] = ch & 0xff;
- SCRN_BUF_COM2H(screen, row)[col] = ch >> 8;
- }
-}
-#endif
-
-#ifdef HAVE_CONFIG_H
-#ifdef USE_MY_MEMMOVE
-char *
-my_memmove(char *s1, char *s2, size_t n)
-{
- if (n != 0) {
- if ((s1 + n > s2) && (s2 + n > s1)) {
- static char *bfr;
- static size_t length;
- size_t j;
- if (length < n) {
- length = (n * 3) / 2;
- bfr = ((bfr != 0)
- ? TypeRealloc(char, length, bfr)
- : TypeMallocN(char, length));
- if (bfr == NULL)
- SysError(ERROR_MMALLOC);
- }
- for (j = 0; j < n; j++)
- bfr[j] = s2[j];
- s2 = bfr;
- }
- while (n-- != 0)
- s1[n] = s2[n];
- }
- return s1;
-}
-#endif /* USE_MY_MEMMOVE */
-
-#ifndef HAVE_STRERROR
-char *
-my_strerror(int n)
-{
- extern char *sys_errlist[];
- extern int sys_nerr;
- if (n > 0 && n < sys_nerr)
- return sys_errlist[n];
- return "?";
-}
-#endif
-#endif
-
-int
-char2lower(int ch)
-{
- if (isascii(ch) && isupper(ch)) { /* lowercasify */
-#ifdef _tolower
- ch = _tolower(ch);
-#else
- ch = tolower(ch);
-#endif
- }
- return ch;
-}
-
-void
-update_keyboard_type(void)
-{
- update_delete_del();
- update_old_fkeys();
- update_hp_fkeys();
- update_sco_fkeys();
- update_sun_fkeys();
- update_sun_kbd();
-}
-
-void
-set_keyboard_type(xtermKeyboardType type, Bool set)
-{
- xtermKeyboardType save = term->keyboard.type;
-
- TRACE(("set_keyboard_type(%s, %s) currently %s\n",
- visibleKeyboardType(type),
- BtoS(set),
- visibleKeyboardType(term->keyboard.type)));
- if (set) {
- term->keyboard.type = type;
- } else {
- term->keyboard.type = keyboardIsDefault;
- }
-
- if (save != term->keyboard.type) {
- update_keyboard_type();
- }
-}
-
-void
-toggle_keyboard_type(xtermKeyboardType type)
-{
- xtermKeyboardType save = term->keyboard.type;
-
- TRACE(("toggle_keyboard_type(%s) currently %s\n",
- visibleKeyboardType(type),
- visibleKeyboardType(term->keyboard.type)));
- if (term->keyboard.type == type) {
- term->keyboard.type = keyboardIsDefault;
- } else {
- term->keyboard.type = type;
- }
-
- if (save != term->keyboard.type) {
- update_keyboard_type();
- }
-}
-
-void
-init_keyboard_type(xtermKeyboardType type, Bool set)
-{
- static Bool wasSet = False;
-
- TRACE(("init_keyboard_type(%s, %s) currently %s\n",
- visibleKeyboardType(type),
- BtoS(set),
- visibleKeyboardType(term->keyboard.type)));
- if (set) {
- if (wasSet) {
- fprintf(stderr, "Conflicting keyboard type option (%u/%u)\n",
- term->keyboard.type, type);
- }
- term->keyboard.type = type;
- wasSet = True;
- update_keyboard_type();
- }
-}
-
-/*
- * If the keyboardType resource is set, use that, overriding the individual
- * boolean resources for different keyboard types.
- */
-void
-decode_keyboard_type(XTERM_RESOURCE * rp)
-{
-#define DATA(n, t, f) { n, t, XtOffsetOf(XTERM_RESOURCE, f) }
-#define FLAG(n) *(Boolean *)(((char *)rp) + table[n].offset)
- static struct {
- const char *name;
- xtermKeyboardType type;
- unsigned offset;
- } table[] = {
-#if OPT_HP_FUNC_KEYS
- DATA(NAME_HP_KT, keyboardIsHP, hpFunctionKeys),
-#endif
-#if OPT_SCO_FUNC_KEYS
- DATA(NAME_SCO_KT, keyboardIsSCO, scoFunctionKeys),
-#endif
- DATA(NAME_SUN_KT, keyboardIsSun, sunFunctionKeys),
-#if OPT_SUNPC_KBD
- DATA(NAME_VT220_KT, keyboardIsVT220, sunKeyboard),
-#endif
- };
- Cardinal n;
-
- if (x_strcasecmp(rp->keyboardType, "unknown")) {
- Bool found = False;
- for (n = 0; n < XtNumber(table); ++n) {
- if (!x_strcasecmp(rp->keyboardType, table[n].name + 1)) {
- FLAG(n) = True;
- found = True;
- init_keyboard_type(table[n].type, FLAG(n));
- } else {
- FLAG(n) = False;
- }
- }
- if (!found) {
- fprintf(stderr,
- "KeyboardType resource \"%s\" not found\n",
- rp->keyboardType);
- }
- } else {
- for (n = 0; n < XtNumber(table); ++n)
- init_keyboard_type(table[n].type, FLAG(n));
- }
-#undef DATA
-#undef FLAG
-}
-
-#if OPT_WIDE_CHARS
-#if defined(HAVE_WCHAR_H) && defined(HAVE_WCWIDTH)
-/*
- * If xterm is running in a UTF-8 locale, it is still possible to encounter
- * old runtime configurations which yield incomplete or inaccurate data.
- */
-static Bool
-systemWcwidthOk(void)
-{
- wchar_t n;
- int oops = 0;
- int last = 1024;
-
- for (n = 0; n < last; ++n) {
- int system_code = wcwidth(n);
- int intern_code = mk_wcwidth(n);
-
- /*
- * Since mk_wcwidth() is designed to check for nonspacing characters,
- * and has rough range-checks for double-width characters, it will
- * generally not detect cases where a code has not been assigned.
- *
- * Some experimentation with GNU libc suggests that up to 1/4 of the
- * codes would differ, simply because the runtime library would have a
- * table listing the unassigned codes, and return -1 for those. If
- * mk_wcwidth() has no information about a code, it returns 1. On the
- * other hand, if the runtime returns a positive number, the two should
- * agree.
- *
- * The "up to" is measured for 4k, 8k, 16k of data. With only 1k, the
- * number of differences was only 77. However, that is only one
- * system, and this is only a sanity check to avoid using broken
- * libraries.
- */
- if ((system_code < 0 && intern_code >= 1)
- || (system_code >= 0 && intern_code != system_code)) {
- ++oops;
- }
- }
- TRACE(("systemWcwidthOk: %d/%d mismatches\n", oops, last));
- return (oops < (last / 4));
-}
-#endif /* HAVE_WCWIDTH */
-
-void
-decode_wcwidth(int mode)
-{
- switch (mode) {
- default:
-#if defined(HAVE_WCHAR_H) && defined(HAVE_WCWIDTH)
- if (xtermEnvUTF8() && systemWcwidthOk()) {
- my_wcwidth = wcwidth;
- TRACE(("using system wcwidth() function\n"));
- break;
- }
- /* FALLTHRU */
- case 2:
-#endif
- my_wcwidth = &mk_wcwidth;
- TRACE(("using MK wcwidth() function\n"));
- break;
- case 3:
- case 4:
- my_wcwidth = &mk_wcwidth_cjk;
- TRACE(("using MK-CJK wcwidth() function\n"));
- break;
- }
-}
-#endif
diff --git a/nx-X11/programs/xterm/uxterm b/nx-X11/programs/xterm/uxterm
deleted file mode 100644
index 6e8f72032..000000000
--- a/nx-X11/programs/xterm/uxterm
+++ /dev/null
@@ -1,82 +0,0 @@
-#!/bin/sh
-# $XTermId: uxterm,v 1.20 2005/08/05 01:25:40 tom Exp $
-# $XFree86: xc/programs/xterm/uxterm,v 1.11 2005/08/05 01:25:40 dickey Exp $
-# wrapper script to setup xterm with UTF-8 locale
-
-program=xterm
-
-# Check if there is a workable locale program. If there is not, we will read
-# something via the standard error. Ignore whatever is written to the
-# standard output.
-locale=`sh -c "LC_ALL=C LC_CTYPE=C LANG=C locale >/dev/null" 2>&1`
-found=no
-
-# Check for -version and -help options, to provide a simple return without
-# requiring the program to create a window:
-if test $# = 1
-then
- case $1 in
- -v|-ver*|-h|-he*)
- $program "$@"
- exit $?
- ;;
- esac
-fi
-
-# Check environment variables that xterm does, in the same order:
-for name in LC_ALL LC_CTYPE LANG
-do
- eval 'value=$'$name
- if test -n "$value" ; then
- case $value in
- *.utf8|*.UTF8|*.utf-8|*.UTF-8)
- found=yes
- ;;
- *.utf8@*|*.UTF8@*|*.utf-8@*|*.UTF-8@*)
- found=yes
- ;;
- C|POSIX)
- # Yes, I know this is not the same - but why are you
- # here then?
- value=en_US
- ;;
- esac
- break
- fi
-done
-
-# If we didn't find one that used UTF-8, modify the safest one. Not everyone
-# has a UTF-8 locale installed (and there appears to be no trivial/portable way
-# to determine whether it is, from a shell script). We could check if the
-# user's shell does not reset unknown locale specifiers, but not all shells do.
-if test $found != yes ; then
- if test -n "$value" ; then
- value=`echo ${value} |sed -e 's/[.@].*//'`.UTF-8
- else
- name="LC_CTYPE"
- value="en_US.UTF-8"
- fi
- eval save=\$${name}
- eval ${name}=${value}
- eval export ${name}
- if test -z "$locale" ; then
- # The 'locale' program tries to do a sanity check.
- check=`sh -c "locale >/dev/null" 2>&1`
- if test -n "$check" ; then
- eval ${name}=${save}
- eval export ${name}
-
- echo "uxterm tried to use locale $value by setting \$$name" >&2
- xmessage -file - <<EOF
-uxterm tried unsuccessfully to use locale $value
-by setting \$$name to "${value}".
-EOF
- exit 1
- fi
- fi
-fi
-
-# for testing:
-#test -f ./xterm && program=./xterm
-
-exec $program -class UXTerm -title 'uxterm' -u8 "$@"
diff --git a/nx-X11/programs/xterm/version.h b/nx-X11/programs/xterm/version.h
deleted file mode 100644
index 5165798f9..000000000
--- a/nx-X11/programs/xterm/version.h
+++ /dev/null
@@ -1,14 +0,0 @@
-/* $XTermId: version.h,v 1.254 2005/11/13 23:10:36 tom Exp $ */
-/* $XFree86: xc/programs/xterm/version.h,v 3.118 2005/11/13 23:10:36 dickey Exp $ */
-
-/*
- * These definitions are used to build the string that's printed in response to
- * "xterm -version", or embedded in "xterm -help". It usually indicates the
- * version of X to which this version of xterm has been built. The number in
- * parentheses is my patch number (T.Dickey).
- */
-#define XTERM_PATCH 207
-
-#ifndef __vendorversion__
-#define __vendorversion__ "XTerm"
-#endif
diff --git a/nx-X11/programs/xterm/vms.c b/nx-X11/programs/xterm/vms.c
deleted file mode 100644
index 155cdb41b..000000000
--- a/nx-X11/programs/xterm/vms.c
+++ /dev/null
@@ -1,725 +0,0 @@
-/* $XFree86: xc/programs/xterm/vms.c,v 1.2 2003/10/27 01:07:58 dickey Exp $ */
-
-/* vms.c
- *
- * This module contains the VMS version of the routine SPAWN (from the module
- * MAIN.C) and the routines that do IO to the pseudo terminal.
- *
- * Modification History:
- * Stephan Jansen 1-Mar-1990 Original version
- * Hal R. Brand 5-Sep-1990 Added code to propagate DECW$DISPLAY
- * Aaron Leonard 11-Sep-1990 Fix string descriptor lengths
- * Stephan Jansen 2-Dec-1991 Modify to use new Pseudo terminal drivers
- * (patterned after photo.c by Forrest A. Kenney)
- * Patrick Mahan 7-Jan-1991 Removed reference to <dvidef.h> from VMS.C
- * Forced device type to be VT102 since that is
- * what we are emulating.
- */
-
-#include <libdef.h>
-#include <lnmdef.h>
-
-#include <stdio.h>
-#include <string.h>
-
-#include "xterm.h"
-#include "data.h"
-#include "vms.h"
-
-#define PTD$C_SEND_XON 0 /* Pseudo Terminal Driver event */
-#define PTD$C_SEND_BELL 1
-#define PTD$C_SEND_XOFF 2
-#define PTD$C_STOP_OUTPUT 3
-#define PTD$C_RESUME_OUTPUT 4
-#define PTD$C_CHAR_CHANGED 5
-#define PTD$C_ABORT_OUTPUT 6
-#define PTD$C_START_READ 7
-#define PTD$C_MIDDLE_READ 8
-#define PTD$C_END_READ 9
-#define PTD$C_ENABLE_READ 10
-#define PTD$C_DISABLE_READ 11
-#define PTD$C_MAX_EVENTS 12
-
-#define BUFFERS 6
-#define PAGE 512
-
-typedef struct tt_buffer
-{
-unsigned int flink;
-unsigned int blink;
-short int status;
-short int length;
-char data[VMS_TERM_BUFFER_SIZE];
-} TT_BUF_STRUCT;
-
-TT_BUF_STRUCT *tt_w_buff;
-struct q_head _align(QUADWORD) buffer_queue = (0,0);
-struct q_head _align(QUADWORD) read_queue = (0,0);
-
-static char tt_name[64];
-static $DESCRIPTOR (tt_name_desc, &tt_name);
-
-static char ws_name[64];
-static $DESCRIPTOR (ws_name_desc, &ws_name);
-
-static struct tt_char {
- char class;
- char type;
- short int page_width;
- char characteristics[3];
- char length;
- int extended;
- } tt_mode, tt_chars, orig_tt_chars;
-
-struct mem_region
-{
- TT_BUF_STRUCT *start;
- TT_BUF_STRUCT *end;
-} ret_addr;
-
-int read_stopped = FALSE;
-int write_stopped = FALSE;
-
-int tt_width;
-int tt_length;
-int tt_changed;
-int tt_pasting=FALSE; /* drm */
-int tt_new_output=FALSE; /* Cleared by flushlog(), set whenever something new
- goes to the screen through tt_write */
-
-int trnlnm(char *in,int id,char *out);
-int tt_write(char *tt_write_buf,int size);
-void spawn (void);
-
-static void tt_echo_ast(TT_BUF_STRUCT *buff_addr);
-static void tt_read_ast(TT_BUF_STRUCT *buff_addr);
-
-/*
-static void tt_start_read(void);
-*/
-void tt_start_read(void);
-int tt_read(char *buffer);
-static void send_xon(void);
-static void send_xoff(void);
-static void send_bell(void);
-static void char_change(void);
-static void freeBuff (TT_BUF_STRUCT *buff_addr);
-TT_BUF_STRUCT *getBuff(void);
-static void CloseDown(int exit_status);
-static void mbx_read_ast(void);
-static void mbx_read(void);
-
-
-
-#define DESCRIPTOR(name,string) struct dsc$descriptor_s name = \
-{ strlen(string), DSC$K_DTYPE_T, DSC$K_CLASS_S, string }
-
-int trnlnm(char *in, int id, char *out)
-{
- int status, num, len, attr = LNM$M_CASE_BLIND, foo = id;
- short outlen;
- struct itemlist
- {
- short buffer_length;
- short item_code;
- char *buffer_addr;
- int *return_length;
- } itmlst[] =
- {
- 4 , LNM$_INDEX , &foo, 0,
- 255, LNM$_STRING , out , &outlen,
- 4 , LNM$_MAX_INDEX, &num, &len,
- 0 , 0
- };
- DESCRIPTOR(lognam,in);
- DESCRIPTOR(tabnam,"LNM$DCL_LOGICAL");
-
- status = sys$trnlnm(&attr,&tabnam,&lognam,0,itmlst);
- if(status != SS$_NORMAL) return(-1); /* error status */
- out[outlen] = 0; /* terminate the output string */
- return(++num); /* return number of translations */
-}
-
-static int pty;
-static int Xsocket;
-
-void spawn (void)
-{
- int status;
- static $DESCRIPTOR (dtime, "0 00:00:00.01");
- static int delta[2];
- register TScreen *screen = &term->screen;
- static struct IOSB iosb;
- static unsigned int flags;
- static unsigned int uic;
- static char imagename[64];
- static int privs;
- static $DESCRIPTOR(device, "FTA0:");
- static int type;
- static int class;
- static int devdepend;
- static int mem_size;
- int i;
-
- /* if pid and mbx_chan are nonzero then close them in CloseDown() */
- pid = 0;
- mbx_chan = 0;
-
- status = SYS$EXPREG (BUFFERS, &ret_addr, 0, 0);
- if(!(status & SS$_NORMAL)) lib$signal(status);
-
- tt_w_buff = (char *)ret_addr.end - PAGE + 1;
-
- /* use one buffer for writing, the reset go in the free buffer queue */
- for(i=0; i < BUFFERS-1; i++)
- {
- freeBuff((char *)ret_addr.start +i*PAGE);
- }
-
- /* avoid double MapWindow requests, for wm's that care... */
- XtSetMappedWhenManaged( screen->TekEmu ? XtParent(tekWidget) :
- XtParent(term), False );
- /* Realize the Tek or VT widget, depending on which mode we're in.
- If VT mode, this calls VTRealize (the widget's Realize proc) */
- XtRealizeWidget (screen->TekEmu ? XtParent(tekWidget) :
- XtParent(term));
-
- /* get the default device characteristics of the pseudo terminal */
-
- itemlist[0].buflen = 4;
- itemlist[0].code = DVI$_DEVTYPE;
- itemlist[0].buffer = &type;
- itemlist[0].return_addr = &tt_name_desc.dsc$w_length;
-
- itemlist[1].buflen = 4;
- itemlist[1].code = DVI$_DEVCLASS;
- itemlist[1].buffer = &class;
- itemlist[1].return_addr = &tt_name_desc.dsc$w_length;
-
- itemlist[2].buflen = 4;
- itemlist[2].code = DVI$_DEVDEPEND;
- itemlist[2].buffer = &devdepend;
- itemlist[2].return_addr = &tt_name_desc.dsc$w_length;
-
- itemlist[3].buflen = 4;
- itemlist[3].code = DVI$_DEVDEPEND2;
- itemlist[3].buffer = &tt_chars.extended;
- itemlist[3].return_addr = &tt_name_desc.dsc$w_length;
-
- itemlist[4].buflen = 0;
- itemlist[4].code = 0;
-
-
- status = sys$getdviw(0,0,&device,&itemlist,&iosb,0,0,0);
- if(!(status & SS$_NORMAL)) lib$signal(status);
- if(!(iosb.status & SS$_NORMAL)) lib$signal(iosb.status);
-
- tt_chars.type = DT$_VT102; /* XTerm supports VT102 mode */
- tt_chars.class = class;
- tt_chars.page_width = screen->max_col+1;
- tt_chars.length = screen->max_row+1;
-
- /* copy the default char's along with the created window size */
-
- bcopy(&devdepend, &tt_chars.characteristics, 3);
-
- tt_chars.extended |= TT2$M_ANSICRT | TT2$M_AVO | TT2$M_DECCRT;
-
-
- /* create the pseudo terminal with the proper char's */
- status = ptd$create(&tt_chan,0,&tt_chars,12,0,0,0,&ret_addr);
- if(!(status & SS$_NORMAL)) lib$signal(status);
-
-
- /* get the device name of the Pseudo Terminal */
-
- itemlist[0].buflen = 64;
- itemlist[0].code = DVI$_DEVNAM;
- itemlist[0].buffer = &tt_name;
- itemlist[0].return_addr = &tt_name_desc.dsc$w_length;
-
- /* terminate the list */
- itemlist[1].buflen = 0;
- itemlist[1].code = 0;
-
- status = sys$getdviw(0,tt_chan,0,&itemlist,&iosb,0,0,0);
- if(!(status & SS$_NORMAL)) CloseDown(status);
- if(!(iosb.status & SS$_NORMAL)) CloseDown(iosb.status);
-
- /*
- * set up AST's for XON, XOFF, BELL and characteristics change.
- */
-
- status = ptd$set_event_notification(tt_chan,&send_xon,0,0,PTD$C_SEND_XON);
- if(!(status & SS$_NORMAL)) CloseDown(status);
-
- status = ptd$set_event_notification(tt_chan,&send_xoff,0,0,PTD$C_SEND_XOFF);
- if(!(status & SS$_NORMAL)) CloseDown(status);
-
- status = ptd$set_event_notification(tt_chan,&send_bell,0,0,PTD$C_SEND_BELL);
- if(!(status & SS$_NORMAL)) CloseDown(status);
-
- status = ptd$set_event_notification(tt_chan,&char_change,0,0,PTD$C_CHAR_CHANGED);
- if(!(status & SS$_NORMAL)) CloseDown(status);
-
- /* create a mailbox for the detached process to detect hangup */
-
- status = sys$crembx(0,&mbx_chan,ACC$K_TERMLEN,0,255,0,0);
- if(!(status & SS$_NORMAL)) CloseDown(status);
-
-
- /*
- * get the device unit number for created process completion
- * status to be sent to.
- */
-
- itemlist[0].buflen = 4;
- itemlist[0].code = DVI$_UNIT;
- itemlist[0].buffer = &mbxunit;
- itemlist[0].return_addr = 0;
-
- /* terminate the list */
- itemlist[1].buflen = 0;
- itemlist[1].code = 0;
-
- status = sys$getdviw(0,mbx_chan,0,&itemlist,&iosb,0,0,0);
- if(!(status & SS$_NORMAL)) CloseDown(status);
- if(!(iosb.status & SS$_NORMAL)) CloseDown(iosb.status);
-
-
- tt_start_read();
-
- /*
- * find the current process's UIC so that it can be used in the
- * call to sys$creprc
- */
- itemlist[0].buflen = 4;
- itemlist[0].code = JPI$_UIC;
- itemlist[0].buffer = &uic;
- itemlist[0].return_addr = 0;
-
- /* terminate the list */
- itemlist[1].buflen = 0;
- itemlist[1].code = 0;
-
- status = sys$getjpiw(0,0,0,&itemlist,0,0,0);
- if(!(status & SS$_NORMAL)) CloseDown(status);
-
- /* Complete a descriptor for the WS (DECW$DISPLAY) device */
-
- trnlnm("DECW$DISPLAY",0,ws_name);
- ws_name_desc.dsc$w_length = strlen(ws_name);
-
- /* create the process */
- /* Set sys$error to be the WS (DECW$DISPLAY) device. LOGINOUT */
- /* has special code for DECWINDOWS that will: */
- /* 1) do a DEFINE/JOB DECW$DISPLAY 'f$trnlnm(sys$error)' */
- /* 2) then redefine SYS$ERROR to match SYS$OUTPUT! */
- /* This will propogate DECW$DISPLAY to the XTERM process!!! */
- /* Thanks go to Joel M Snyder who posted this info to INFO-VAX */
-
- flags = PRC$M_INTER | PRC$M_NOPASSWORD | PRC$M_DETACH;
- status = sys$creprc(&pid,&image,&tt_name_desc,&tt_name_desc,
- &ws_name_desc,0,0,0,4,uic,mbxunit,flags);
- if(!(status & SS$_NORMAL)) CloseDown(status);
-
-
- /* hang a read on the mailbox waiting for completion */
- mbx_read();
-
-
-/* set time value and schedule a periodic wakeup (every 1/100 of a second)
- * this is used to prevent the controlling process from using up all the
- * CPU. The controlling process will hibernate at strategic points in
- * the program when it is just waiting for input.
- */
-
- status = sys$bintim(&dtime,&delta);
- if (!(status & SS$_NORMAL)) CloseDown(status);
-
- status = sys$schdwk(0,0,&delta,&delta);
- if (!(status & SS$_NORMAL)) CloseDown(status);
-
-
- /*
- * This is rather funky, but it saves me from having to totally
- * rewrite some parts of the code (namely in_put in module CHARPROC.C)
- */
- pty = 1;
- screen->respond = pty;
- pty_mask = 1 << pty;
- Select_mask = pty_mask;
- X_mask = 1 << Xsocket;
-
-}
-
-
-/*
- * This routine handles completion of write with echo. It takes the
- * echo buffer and puts it on the read queue. It will then be processed
- * by the routine tt_read. If the echo buffer is empty, it is put back
- * on the free buffer queue.
- */
-
-static void tt_echo_ast(TT_BUF_STRUCT *buff_addr)
-{
- int status;
-
- if (buff_addr->length != 0)
- {
- status = LIB$INSQTI(buff_addr, &read_queue);
- if((status != SS$_NORMAL) && (status != LIB$_ONEENTQUE))
- {
- CloseDown(status);
- }
- }
- else
- {
- freeBuff(buff_addr);
- }
-}
-
-
-/*
- * This routine writes to the pseudo terminal. If there is a free
- * buffer then write with an echo buffer completing asyncronously, else
- * write syncronously using the buffer reserved for writing. All errors
- * are fatal, except DATAOVERUN and DATALOST,these errors can be ignored.
-
- CAREFUL! Whatever calls this must NOT pass more than VMS_TERM_BUFFER_SIZE
- bytes at a time. This definition has been moved to VMS.H
-
- */
-
-int tt_write(char *tt_write_buf, int size)
-{
- int status;
- TT_BUF_STRUCT *echoBuff;
-
- /* if writing stopped, return 0 until Xon */
- if(write_stopped) return (0);
-
- memmove(&tt_w_buff->data,tt_write_buf,size);
-
- echoBuff = getBuff();
- if (echoBuff != LIB$_QUEWASEMP)
- {
- status = PTD$WRITE (tt_chan, &tt_echo_ast, echoBuff,
- &tt_w_buff->status, size,
- &echoBuff->status, VMS_TERM_BUFFER_SIZE);
- }
- else
- {
- status = PTD$WRITE (tt_chan, 0, 0, &tt_w_buff->status, size, 0, 0);
- }
- if (status & SS$_NORMAL)
- {
- if ((tt_w_buff->status != SS$_NORMAL) &&
- (tt_w_buff->status != SS$_DATAOVERUN) &&
- (tt_w_buff->status != SS$_DATALOST))
- {
- CloseDown(tt_w_buff->status);
- }
- }
- else
- {
- CloseDown(status);
- }
-
- return(size);
-}
-
-
-/*
- * This routine is called when a read to the pseudo terminal completes.
- * Put the newly read buffer onto the read queue. It will be processed
- * and freed in the routine tt_read.
- */
-
-static void tt_read_ast(TT_BUF_STRUCT *buff_addr)
-{
- int status;
-
- if (buff_addr->status & SS$_NORMAL)
- {
- status = LIB$INSQTI(buff_addr, &read_queue);
- if ((status != SS$_NORMAL) && (status != LIB$_ONEENTQUE))
- {
- CloseDown(status);
- }
- }
- else
- CloseDown(buff_addr->status);
-
- tt_start_read();
- sys$wake(0,0);
- return;
-}
-
-
-/*
- * If there is a free buffer on the buffer queue then Start a read from
- * the pseudo terminal, otherwise set a flag, the reading will be restarted
- * in the routine freeBuff when a buffer is freed.
- */
-
-void tt_start_read(void)
-{
- int status;
- static int size;
- TT_BUF_STRUCT *buff_addr;
-
- buff_addr = getBuff();
- if (buff_addr != LIB$_QUEWASEMP)
- {
- if(!tt_pasting){
- status = PTD$READ (0, tt_chan, &tt_read_ast, buff_addr,
- &buff_addr->status, VMS_TERM_BUFFER_SIZE);
- if ((status & SS$_NORMAL) != SS$_NORMAL)
- {
- CloseDown(status);
- }
- }
- }
- else
- {
- read_stopped = TRUE;
- }
- return;
-}
-
-
-/*
- * Get data from the pseudo terminal. Return the data from the first item
- * on the read queue, and put that buffer back onto the free buffer queue.
- * Return the length or zero if the read queue is empty.
- *
- */
-
-int tt_read(char *buffer)
-{
- TT_BUF_STRUCT *read_buff;
- int status;
- int len;
-
- status = LIB$REMQHI(&read_queue, &read_buff);
- if(status == LIB$_QUEWASEMP){
- return(0);
- }
- else if (status & SS$_NORMAL)
- {
- len = read_buff->length;
- memmove(buffer,&read_buff->data,len);
- freeBuff(read_buff);
- tt_new_output=TRUE; /* DRM something will be written */
- }
- else
- CloseDown(status);
-
- return(len);
-}
-
-
-/*
- * if xon then it is safe to start writing again.
- */
-
-static void send_xon(void)
-{
- write_stopped = FALSE;
-}
-
-
-/*
- * If Xoff then stop writing to the pseudo terminal until you get Xon.
- */
-static void send_xoff(void)
-{
- write_stopped = TRUE;
-}
-
-
-
-/*
- * Beep the terminal to let the user know data will be lost because
- * of too much data.
- */
-
-static void send_bell(void)
-{
- Bell();
-}
-
-/*
- * if the pseudo terminal's characteristics change, check to see if the
- * page size changed. If it did, resize the widget, otherwise, ignore
- * it! This routine just gets the new term dimensions and sets a flag
- * to indicate the term chars have changed. The widget gets resized in
- * the routine in_put in the module CHARPROC.C. You cant resize the
- * widget in this routine because this is an AST and X is not reenterent.
- */
-
-static void char_change(void)
-{
- int status;
-
- /*
- * Dont do anything if in Tek mode
- */
-
- if(!(term->screen.TekEmu))
- {
- status = sys$qiow(0,tt_chan,IO$_SENSEMODE,0,0,0,&tt_mode,8,0,0,0,0);
- if(!(status & SS$_NORMAL)) CloseDown(status);
-
- if((term->screen.max_row != tt_mode.length) ||
- (term->screen.max_col != tt_mode.page_width))
- {
- tt_length = tt_mode.length;
- tt_width = tt_mode.page_width;
-
- tt_changed = TRUE;
-
- }
- }
-}
-
-
-/*
- * Put a free buffer back onto the buffer queue. If reading was
- * stopped for lack of free buffers, start reading again.
- */
-
-static void freeBuff (TT_BUF_STRUCT *buff_addr)
-{
- int ast_stat;
- int status;
-
- ast_stat = SYS$SETAST(0);
- if (!read_stopped)
- {
- LIB$INSQHI(buff_addr, &buffer_queue);
- }
- else
- {
- status = PTD$READ (0, tt_chan, &tt_read_ast, buff_addr,
- &buff_addr->status, VMS_TERM_BUFFER_SIZE);
- if (status & SS$_NORMAL)
- {
- read_stopped = FALSE;
- }
- else
- {
- CloseDown(status);
- }
- }
- if (ast_stat == SS$_WASSET) ast_stat = SYS$SETAST(1);
-}
-
-
-/*
- * return a free buffer from the buffer queue.
- */
-
-TT_BUF_STRUCT *getBuff(void)
-{
- int status;
- TT_BUF_STRUCT *buff_addr;
-
- status = LIB$REMQHI(&buffer_queue, &buff_addr);
- if (status & SS$_NORMAL)
- {
- return(buff_addr);
- }
- else
- {
- return(status);
- }
-}
-
-
-/*
- * Close down and exit. Kill the detached process (if it still
- * exists), deassign mailbox channell (if assigned), cancel any
- * waiting IO to the pseudo terminal and delete it, exit with any
- * status information.
- */
-
-static void CloseDown(int exit_status)
-{
- int status;
-
- /* if process has not terminated, do so now! */
- if(pid != 0)
- {
- status = sys$forcex(&pid,0,0);
- if(!(status & SS$_NORMAL)) lib$signal(status);
- }
-
- /* if mbx_chan is assigned, deassign it */
- if(mbx_chan != 0)
- {
- sys$dassgn(mbx_chan);
- }
-
- /* cancel pseudo terminal IO requests */
- status = ptd$cancel(tt_chan);
- if(!(status & SS$_NORMAL)) lib$signal(status);
-
- /* delete pseudo terminal */
- status = ptd$delete(tt_chan);
- if(!(status & SS$_NORMAL)) lib$signal(status);
-
- if(!(exit_status & SS$_NORMAL)) lib$signal(exit_status);
-
- exit(1);
-
-}
-
-
-/*
- * This routine gets called when the detached process terminates (for
- * whatever reason). The mailbox buffer has final exit status. Close
- * down and exit.
- */
-
-static void mbx_read_ast(void)
-{
- int status;
-
- pid = 0;
-
- status = mbx_read_iosb.status;
- if (!(status & SS$_NORMAL)) CloseDown(status);
-
- status = (unsigned long int) mbx_buf.acc$l_finalsts;
- if (!(status & SS$_NORMAL)) CloseDown(status);
-
- CloseDown(1);
-
-}
-
-
-/*
- * This routine starts a read on the mailbox associated with the detached
- * process. The AST routine gets called when the detached process terminates.
- */
-
-static void mbx_read(void)
-{
-int status;
-static int size;
-
- size = ACC$K_TERMLEN;
- status = sys$qio(0,mbx_chan,
- IO$_READVBLK,
- &mbx_read_iosb,
- &mbx_read_ast,
- 0,
- &mbx_buf,
- size,0,0,0,0);
-
- if (!(status & SS$_NORMAL)) CloseDown(status);
-
- return;
-}
diff --git a/nx-X11/programs/xterm/vms.h b/nx-X11/programs/xterm/vms.h
deleted file mode 100644
index 86f338eb9..000000000
--- a/nx-X11/programs/xterm/vms.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/* $XFree86: xc/programs/xterm/vms.h,v 1.1 2000/02/08 17:19:45 dawes Exp $ */
-
-/* vms.h
- */
-#include <ssdef.h>
-#include <iodef.h>
-#include <msgdef.h>
-#include <descrip.h>
-#include <dvidef.h>
-#include <jpidef.h>
-#include <prcdef.h>
-#include <dcdef.h>
-#include <ttdef.h>
-#include <tt2def.h>
-#include <accdef.h>
-#include <prvdef.h>
-
-struct IOSB
-{
- short int status;
- short int len;
- int unused;
-} mbx_read_iosb,iosb;
-
-#define MAXITEMLIST 5
-
-short int tt_chan; /* channel to the Pseudo terminal */
-short int mbx_chan; /* channel to the mailbox */
-struct accdef mbx_buf; /* mailbox buffer */
-short int mbxunit; /* mailbox unit number */
-int pid; /* PID of created process */
-static $DESCRIPTOR (image, "SYS$SYSTEM:LOGINOUT.EXE");
-
-static struct items {
- short int buflen;
- short int code;
- int buffer;
- int return_addr;
-} itemlist[MAXITEMLIST];
diff --git a/nx-X11/programs/xterm/vttests/16colors.sh b/nx-X11/programs/xterm/vttests/16colors.sh
deleted file mode 100644
index f47337577..000000000
--- a/nx-X11/programs/xterm/vttests/16colors.sh
+++ /dev/null
@@ -1,90 +0,0 @@
-#!/bin/sh
-# $XFree86: xc/programs/xterm/vttests/16colors.sh,v 1.5 2003/05/19 00:52:30 dickey Exp $
-#
-# -- Thomas Dickey (1999/3/27)
-# Show a simple 16-color test pattern. It is a little more confusing than
-# 8colors.sh, since everything is abbreviated to fit on an 80-column line.
-# The high (8-15) combinations for foreground or background are marked with
-# a '+' sign.
-
-ESC=""
-CMD='echo'
-OPT='-n'
-SUF=''
-TMP=/tmp/xterm$$
-eval '$CMD $OPT >$TMP || echo fail >$TMP' 2>/dev/null
-( test ! -f $TMP || test -s $TMP ) &&
-for verb in printf print ; do
- rm -f $TMP
- eval '$verb "\c" >$TMP || echo fail >$TMP' 2>/dev/null
- if test -f $TMP ; then
- if test ! -s $TMP ; then
- CMD="$verb"
- OPT=
- SUF='\c'
- break
- fi
- fi
-done
-rm -f $TMP
-
-if ( trap "echo exit" EXIT 2>/dev/null ) >/dev/null
-then
- trap '$CMD ""; exit' EXIT HUP INT TRAP TERM
-else
- trap '$CMD ""; exit' 0 1 2 5 15
-fi
-
-echo ""
-while true
-do
- for AT in 0 1 4 7
- do
- case $AT in
- 0) attr=" ";;
- 1) attr="BO ";;
- 4) attr="UN ";;
- 7) attr="RV ";;
- esac
- for FG in 0 1 2 3 4 5 6 7
- do
- case $FG in
- 0) fcolor="BLK ";;
- 1) fcolor="RED ";;
- 2) fcolor="GRN ";;
- 3) fcolor="YEL ";;
- 4) fcolor="BLU ";;
- 5) fcolor="MAG ";;
- 6) fcolor="CYN ";;
- 7) fcolor="WHT ";;
- esac
- for HI in 3 9
- do
- if test $HI = 3 ; then
- color=" $fcolor"
- else
- color="+$fcolor"
- fi
- $CMD $OPT "[0;${AT}m$attr$SUF"
- $CMD $OPT "[${HI}${FG}m$color$SUF"
- for BG in 1 2 3 4 5 6 7
- do
- case $BG in
- 0) bcolor="BLK ";;
- 1) bcolor="RED ";;
- 2) bcolor="GRN ";;
- 3) bcolor="YEL ";;
- 4) bcolor="BLU ";;
- 5) bcolor="MAG ";;
- 6) bcolor="CYN ";;
- 7) bcolor="WHT ";;
- esac
- $CMD $OPT "[4${BG}m$bcolor$SUF"
- $CMD $OPT "[10${BG}m+$bcolor$SUF"
- done
- echo ""
- done
- done
- sleep 1
- done
-done
diff --git a/nx-X11/programs/xterm/vttests/256colors.pl b/nx-X11/programs/xterm/vttests/256colors.pl
deleted file mode 100644
index b053b94fc..000000000
--- a/nx-X11/programs/xterm/vttests/256colors.pl
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/usr/bin/perl
-# $XFree86: xc/programs/xterm/vttests/256colors.pl,v 1.1 1999/07/11 08:49:54 dawes Exp $
-
-for ($bg = 0; $bg < 256; $bg++) {
- print "\x1b[9;1H\x1b[2J";
- for ($fg = 0; $fg < 256; $fg++) {
- print "\x1b[48;5;${bg}m\x1b[38;5;${fg}m";
- printf "%03.3d/%03.3d ", $fg, $bg;
- }
- sleep 1;
- print "\n";
-}
diff --git a/nx-X11/programs/xterm/vttests/256colors2.pl b/nx-X11/programs/xterm/vttests/256colors2.pl
deleted file mode 100644
index c97c2be9d..000000000
--- a/nx-X11/programs/xterm/vttests/256colors2.pl
+++ /dev/null
@@ -1,63 +0,0 @@
-#!/usr/bin/perl
-# Author: Todd Larason <jtl@molehill.org>
-# $XFree86: xc/programs/xterm/vttests/256colors2.pl,v 1.2 2002/03/26 01:46:43 dickey Exp $
-
-# use the resources for colors 0-15 - usually more-or-less a
-# reproduction of the standard ANSI colors, but possibly more
-# pleasing shades
-
-# colors 16-231 are a 6x6x6 color cube
-for ($red = 0; $red < 6; $red++) {
- for ($green = 0; $green < 6; $green++) {
- for ($blue = 0; $blue < 6; $blue++) {
- printf("\x1b]4;%d;rgb:%2.2x/%2.2x/%2.2x\x1b\\",
- 16 + ($red * 36) + ($green * 6) + $blue,
- ($red ? ($red * 40 + 55) : 0),
- ($green ? ($green * 40 + 55) : 0),
- ($blue ? ($blue * 40 + 55) : 0));
- }
- }
-}
-
-# colors 232-255 are a grayscale ramp, intentionally leaving out
-# black and white
-for ($gray = 0; $gray < 24; $gray++) {
- $level = ($gray * 10) + 8;
- printf("\x1b]4;%d;rgb:%2.2x/%2.2x/%2.2x\x1b\\",
- 232 + $gray, $level, $level, $level);
-}
-
-
-# display the colors
-
-# first the system ones:
-print "System colors:\n";
-for ($color = 0; $color < 8; $color++) {
- print "\x1b[48;5;${color}m ";
-}
-print "\x1b[0m\n";
-for ($color = 8; $color < 16; $color++) {
- print "\x1b[48;5;${color}m ";
-}
-print "\x1b[0m\n\n";
-
-# now the color cube
-print "Color cube, 6x6x6:\n";
-for ($green = 0; $green < 6; $green++) {
- for ($red = 0; $red < 6; $red++) {
- for ($blue = 0; $blue < 6; $blue++) {
- $color = 16 + ($red * 36) + ($green * 6) + $blue;
- print "\x1b[48;5;${color}m ";
- }
- print "\x1b[0m ";
- }
- print "\n";
-}
-
-
-# now the grayscale ramp
-print "Grayscale ramp:\n";
-for ($color = 232; $color < 256; $color++) {
- print "\x1b[48;5;${color}m ";
-}
-print "\x1b[0m\n";
diff --git a/nx-X11/programs/xterm/vttests/88colors.pl b/nx-X11/programs/xterm/vttests/88colors.pl
deleted file mode 100644
index a645fc3d4..000000000
--- a/nx-X11/programs/xterm/vttests/88colors.pl
+++ /dev/null
@@ -1,13 +0,0 @@
-#!/usr/bin/perl
-# $XFree86: xc/programs/xterm/vttests/88colors.pl,v 1.1 1999/09/25 14:38:51 dawes Exp $
-# Made from 256colors.pl
-
-for ($bg = 0; $bg < 88; $bg++) {
- print "\x1b[9;1H\x1b[48;5;${bg}m\x1b[2J";
- for ($fg = 0; $fg < 88; $fg++) {
- print "\x1b[38;5;${fg}m";
- printf "%03.3d/%03.3d ", $fg, $bg;
- }
- sleep 1;
- print "\n";
-}
diff --git a/nx-X11/programs/xterm/vttests/88colors2.pl b/nx-X11/programs/xterm/vttests/88colors2.pl
deleted file mode 100644
index 0e4c8f529..000000000
--- a/nx-X11/programs/xterm/vttests/88colors2.pl
+++ /dev/null
@@ -1,66 +0,0 @@
-#!/usr/bin/perl
-# Author: Steve Wall <swall@redcom.com>
-# $XFree86: xc/programs/xterm/vttests/88colors2.pl,v 1.1 1999/09/25 14:38:51 dawes Exp $
-# Made from 256colors2.pl
-
-# use the resources for colors 0-15 - usually more-or-less a
-# reproduction of the standard ANSI colors, but possibly more
-# pleasing shades
-
-# colors 16-79 are a 4x4x4 color cube
-@steps=(0,139,205,255);
-for ($red = 0; $red < 4; $red++) {
- for ($green = 0; $green < 4; $green++) {
- for ($blue = 0; $blue < 4; $blue++) {
- printf("\x1b]4;%d;rgb:%2.2x/%2.2x/%2.2x\x1b\\",
- 16 + ($red * 16) + ($green * 4) + $blue,
- int (@steps[$red]),
- int (@steps[$green]),
- int (@steps[$blue]));
- }
- }
-}
-
-# colors 80-87 are a grayscale ramp, intentionally leaving out
-# black and white
-for ($gray = 0; $gray < 8; $gray++) {
- $level = ($gray * 23.18181818) + 46.36363636;
- if( $gray > 0 ) { $level += 23.18181818; }
- printf("\x1b]4;%d;rgb:%2.2x/%2.2x/%2.2x\x1b\\",
- 80 + $gray, int($level), int($level), int($level));
-}
-
-
-# display the colors
-
-# first the system ones:
-print "System colors:\n";
-for ($color = 0; $color < 8; $color++) {
- print "\x1b[48;5;${color}m ";
-}
-print "\x1b[0m\n";
-for ($color = 8; $color < 16; $color++) {
- print "\x1b[48;5;${color}m ";
-}
-print "\x1b[0m\n\n";
-
-# now the color cube
-print "Color cube, 4x4x4:\n";
-for ($green = 0; $green < 4; $green++) {
- for ($red = 0; $red < 4; $red++) {
- for ($blue = 0; $blue < 4; $blue++) {
- $color = 16 + ($red * 16) + ($green * 4) + $blue;
- print "\x1b[48;5;${color}m ";
- }
- print "\x1b[0m ";
- }
- print "\n";
-}
-
-
-# now the grayscale ramp
-print "Grayscale ramp:\n";
-for ($color = 80; $color < 88; $color++) {
- print "\x1b[48;5;${color}m ";
-}
-print "\x1b[0m\n";
diff --git a/nx-X11/programs/xterm/vttests/8colors.sh b/nx-X11/programs/xterm/vttests/8colors.sh
deleted file mode 100644
index 10865f730..000000000
--- a/nx-X11/programs/xterm/vttests/8colors.sh
+++ /dev/null
@@ -1,78 +0,0 @@
-#!/bin/sh
-# $XFree86: xc/programs/xterm/vttests/8colors.sh,v 1.5 2003/05/19 00:52:30 dickey Exp $
-#
-# -- Thomas Dickey (1999/3/27)
-# Show a simple 8-color test pattern
-
-ESC=""
-CMD='echo'
-OPT='-n'
-SUF=''
-TMP=/tmp/xterm$$
-eval '$CMD $OPT >$TMP || echo fail >$TMP' 2>/dev/null
-( test ! -f $TMP || test -s $TMP ) &&
-for verb in printf print ; do
- rm -f $TMP
- eval '$verb "\c" >$TMP || echo fail >$TMP' 2>/dev/null
- if test -f $TMP ; then
- if test ! -s $TMP ; then
- CMD="$verb"
- OPT=
- SUF='\c'
- break
- fi
- fi
-done
-rm -f $TMP
-
-if ( trap "echo exit" EXIT 2>/dev/null ) >/dev/null
-then
- trap '$CMD $OPT ""; exit' EXIT HUP INT TRAP TERM
-else
- trap '$CMD $OPT ""; exit' 0 1 2 5 15
-fi
-
-echo ""
-while true
-do
- for AT in 0 1 4 7
- do
- case $AT in
- 0) attr="normal ";;
- 1) attr="bold ";;
- 4) attr="under ";;
- 7) attr="reverse ";;
- esac
- for FG in 0 1 2 3 4 5 6 7
- do
- case $FG in
- 0) fcolor="black ";;
- 1) fcolor="red ";;
- 2) fcolor="green ";;
- 3) fcolor="yellow ";;
- 4) fcolor="blue ";;
- 5) fcolor="magenta ";;
- 6) fcolor="cyan ";;
- 7) fcolor="white ";;
- esac
- $CMD $OPT "[0;${AT}m$attr"
- $CMD $OPT "[3${FG}m$fcolor"
- for BG in 1 2 3 4 5 6 7
- do
- case $BG in
- 0) bcolor="black ";;
- 1) bcolor="red ";;
- 2) bcolor="green ";;
- 3) bcolor="yellow ";;
- 4) bcolor="blue ";;
- 5) bcolor="magenta ";;
- 6) bcolor="cyan ";;
- 7) bcolor="white ";;
- esac
- $CMD $OPT "[4${BG}m$bcolor"
- done
- echo ""
- done
- sleep 1
- done
-done
diff --git a/nx-X11/programs/xterm/vttests/acolors.sh b/nx-X11/programs/xterm/vttests/acolors.sh
deleted file mode 100644
index ea19a38f4..000000000
--- a/nx-X11/programs/xterm/vttests/acolors.sh
+++ /dev/null
@@ -1,64 +0,0 @@
-#!/bin/sh
-# $XFree86: xc/programs/xterm/vttests/acolors.sh,v 1.2 2003/05/19 00:52:30 dickey Exp $
-#
-# -- Thomas Dickey (1999/3/27)
-# Demonstrate the use of the control sequence for changing ANSI colors.
-
-ESC=""
-CMD='echo'
-OPT='-n'
-SUF=''
-TMP=/tmp/xterm$$
-eval '$CMD $OPT >$TMP || echo fail >$TMP' 2>/dev/null
-( test ! -f $TMP || test -s $TMP ) &&
-for verb in printf print ; do
- rm -f $TMP
- eval '$verb "\c" >$TMP || echo fail >$TMP' 2>/dev/null
- if test -f $TMP ; then
- if test ! -s $TMP ; then
- CMD="$verb"
- OPT=
- SUF='\c'
- break
- fi
- fi
-done
-rm -f $TMP
-
-LIST="00 30 80 d0 ff"
-
-exec </dev/tty
-old=`stty -g`
-stty raw -echo min 0 time 5
-
-$CMD $OPT "${ESC}]4;4;?${SUF}" > /dev/tty
-read original
-stty $old
-original=${original}${SUF}
-
-if ( trap "echo exit" EXIT 2>/dev/null ) >/dev/null
-then
- trap '$CMD $OPT "$original" >/dev/tty; exit' EXIT HUP INT TRAP TERM
-else
- trap '$CMD $OPT "$original" >/dev/tty; exit' 0 1 2 5 15
-fi
-
-$CMD "${ESC}[0;1;34mThis message is BLUE"
-$CMD "${ESC}[0;1;31mThis message is RED ${ESC}[0;31m(sometimes)"
-$CMD "${ESC}[0;1;32mThis message is GREEN${ESC}[0m"
-while true
-do
- for R in $LIST
- do
- for G in $LIST
- do
- for B in $LIST
- do
- # color "9" is bold-red
- test $R != 00 && test $G = 00 && test $B = 00 && $CMD $OPT "" >/dev/tty
- $CMD $OPT "${ESC}]4;9;rgb:$R/$G/$B${SUF}" >/dev/tty
- sleep 1
- done
- done
- done
-done
diff --git a/nx-X11/programs/xterm/vttests/doublechars.sh b/nx-X11/programs/xterm/vttests/doublechars.sh
deleted file mode 100644
index dd032ae46..000000000
--- a/nx-X11/programs/xterm/vttests/doublechars.sh
+++ /dev/null
@@ -1,87 +0,0 @@
-#!/bin/sh
-# $XFree86: xc/programs/xterm/vttests/doublechars.sh,v 1.5 2003/05/19 00:52:30 dickey Exp $
-#
-# -- Thomas Dickey (1999/7/7)
-# Illustrate the use of double-size characters by drawing successive lines in
-# the commonly used video attributes.
-#
-# Use the -w option to force the output to wrap. It will look ugly, because
-# the double-high lines will be split.
-
-ESC=""
-CMD='echo'
-OPT='-n'
-SUF=''
-TMP=/tmp/xterm$$
-eval '$CMD $OPT >$TMP || echo fail >$TMP' 2>/dev/null
-( test ! -f $TMP || test -s $TMP ) &&
-for verb in printf print ; do
- rm -f $TMP
- eval '$verb "\c" >$TMP || echo fail >$TMP' 2>/dev/null
- if test -f $TMP ; then
- if test ! -s $TMP ; then
- CMD="$verb"
- OPT=
- SUF='\c'
- break
- fi
- fi
-done
-rm -f $TMP
-
-SAVE=yes
-WRAP=no
-if test $# != 0 ; then
- while test $# != 0
- do
- case $1 in
- -n) SAVE=no ;;
- -w) WRAP=yes ;;
- esac
- shift
- done
-fi
-
-if test $SAVE = yes ; then
- exec </dev/tty
- old=`stty -g`
- stty raw -echo min 0 time 5
-
- $CMD $OPT "${ESC}[18t${SUF}" > /dev/tty
- IFS=';' read junk high wide
-
- stty $old
-
- wide=`echo $wide|sed -e 's/t.*//'`
- original=${ESC}[8\;${high}\;${wide}t${SUF}
-
- if ( trap "echo exit" EXIT 2>/dev/null ) >/dev/null
- then
- trap '$CMD $OPT "$original" >/dev/tty; exit' EXIT HUP INT TRAP TERM
- else
- trap '$CMD $OPT "$original" >/dev/tty; exit' 0 1 2 5 15
- fi
-
-fi
-
-if test $WRAP = yes ; then
- # turn on wrapping and force the screen to 80 columns
- $CMD $OPT "${ESC}[?7h" >/dev/tty
- $CMD $OPT "${ESC}[?40l" >/dev/tty
-else
- # force the screen to 132 columns
- $CMD $OPT "${ESC}[?40h" >/dev/tty
- $CMD $OPT "${ESC}[?3h" >/dev/tty
-fi
-
-for SGR in 0 1 4 5 7
-do
- $CMD $OPT "${ESC}[0;${SGR}m" >/dev/tty
- for DBL in 5 3 4 6 5
- do
- $CMD $OPT "${ESC}#${DBL}" >/dev/tty
- echo "The quick brown fox jumps over the lazy dog" >/dev/tty
- done
- echo
-done
-$CMD $OPT "${ESC}[0m" >/dev/tty
diff --git a/nx-X11/programs/xterm/vttests/dynamic.sh b/nx-X11/programs/xterm/vttests/dynamic.sh
deleted file mode 100644
index e68ebbc6c..000000000
--- a/nx-X11/programs/xterm/vttests/dynamic.sh
+++ /dev/null
@@ -1,60 +0,0 @@
-#!/bin/sh
-# $XFree86: xc/programs/xterm/vttests/dynamic.sh,v 1.5 2003/05/19 00:52:30 dickey Exp $
-#
-# -- Thomas Dickey (1999/3/27)
-# Demonstrate the use of dynamic colors by setting the background successively
-# to different values.
-
-ESC=""
-CMD='echo'
-OPT='-n'
-SUF=''
-TMP=/tmp/xterm$$
-eval '$CMD $OPT >$TMP || echo fail >$TMP' 2>/dev/null
-( test ! -f $TMP || test -s $TMP ) &&
-for verb in printf print ; do
- rm -f $TMP
- eval '$verb "\c" >$TMP || echo fail >$TMP' 2>/dev/null
- if test -f $TMP ; then
- if test ! -s $TMP ; then
- CMD="$verb"
- OPT=
- SUF='\c'
- break
- fi
- fi
-done
-rm -f $TMP
-
-LIST="00 30 80 d0 ff"
-
-exec </dev/tty
-old=`stty -g`
-stty raw -echo min 0 time 5
-
-$CMD $OPT "${ESC}]11;?${SUF}" > /dev/tty
-read original
-stty $old
-original=${original}${SUF}
-
-if ( trap "echo exit" EXIT 2>/dev/null ) >/dev/null
-then
- trap '$CMD $OPT "$original" >/dev/tty; exit' EXIT HUP INT TRAP TERM
-else
- trap '$CMD $OPT "$original" >/dev/tty; exit' 0 1 2 5 15
-fi
-
-while true
-do
- for R in $LIST
- do
- for G in $LIST
- do
- for B in $LIST
- do
- $CMD $OPT "${ESC}]11;rgb:$R/$G/$B${SUF}" >/dev/tty
- sleep 1
- done
- done
- done
-done
diff --git a/nx-X11/programs/xterm/vttests/fonts.sh b/nx-X11/programs/xterm/vttests/fonts.sh
deleted file mode 100644
index 5dd9e29f0..000000000
--- a/nx-X11/programs/xterm/vttests/fonts.sh
+++ /dev/null
@@ -1,59 +0,0 @@
-#!/bin/sh
-# $XFree86: xc/programs/xterm/vttests/fonts.sh,v 1.4 2003/05/19 00:52:30 dickey Exp $
-#
-# -- Thomas Dickey (1999/3/27)
-# Demonstrate the use of dynamic colors by setting the background successively
-# to different values.
-
-ESC=""
-CMD='echo'
-OPT='-n'
-SUF=''
-TMP=/tmp/xterm$$
-eval '$CMD $OPT >$TMP || echo fail >$TMP' 2>/dev/null
-( test ! -f $TMP || test -s $TMP ) &&
-for verb in printf print ; do
- rm -f $TMP
- eval '$verb "\c" >$TMP || echo fail >$TMP' 2>/dev/null
- if test -f $TMP ; then
- if test ! -s $TMP ; then
- CMD="$verb"
- OPT=
- SUF='\c'
- break
- fi
- fi
-done
-rm -f $TMP
-
-exec </dev/tty
-old=`stty -g`
-stty raw -echo min 0 time 5
-
-$CMD $OPT "${ESC}]50;?${SUF}" > /dev/tty
-read original
-
-stty $old
-original="${original}${SUF}"
-
-if ( trap "echo exit" EXIT 2>/dev/null ) >/dev/null
-then
- trap '$CMD $OPT "$original" >/dev/tty; exit' EXIT HUP INT TRAP TERM
-else
- trap '$CMD $OPT "$original" >/dev/tty; exit' 0 1 2 5 15
-fi
-
-F=1
-D=1
-T=6
-while true
-do
- $CMD $OPT "${ESC}]50;#$F${SUF}" >/dev/tty
- #sleep 1
- if test .$D = .1 ; then
- test $F = $T && D=-1
- else
- test $F = 1 && D=1
- fi
- F=`expr $F + $D`
-done
diff --git a/nx-X11/programs/xterm/vttests/resize.pl b/nx-X11/programs/xterm/vttests/resize.pl
deleted file mode 100755
index 21a18beea..000000000
--- a/nx-X11/programs/xterm/vttests/resize.pl
+++ /dev/null
@@ -1,100 +0,0 @@
-#!/usr/bin/perl
-# $XFree86: xc/programs/xterm/vttests/resize.pl,v 1.1 2004/03/04 02:21:58 dickey Exp $
-#
-# -- Thomas Dickey (2004/3/3)
-# resize.sh rewritten into Perl for comparison.
-# See also Term::ReadKey.
-
-use IO::Handle;
-
-sub write_tty {
- open TTY, "+</dev/tty" or die("Cannot open /dev/tty\n");
- autoflush TTY 1;
- print TTY @_;
- close TTY;
-}
-
-sub get_reply {
- open TTY, "+</dev/tty" or die("Cannot open /dev/tty\n");
- autoflush TTY 1;
- $old=`stty -g`;
- system "stty raw -echo min 0 time 5";
-
- print TTY @_;
- my $reply=<TTY>;
- close TTY;
- system "stty $old";
- return $reply;
-}
-
-sub csi_field {
- my $first = @_[0];
- my $second = @_[1];
- $first =~ s/^[^0-9]+//;
- while ( --$second > 0 ) {
- $first =~ s/^[\d]+//;
- $first =~ s/^[^\d]+//;
- }
- $first =~ s/[^\d]+.*$//;
- return $first;
-}
-
-$original=get_reply("\x1b[18t");
-if ( $original =~ /\x1b\[8;\d+;\d+t/ ) {
- $high=csi_field($original,2);
- $wide=csi_field($original,3);
- printf "parsed terminal size $high,$wide\n";
-} else {
- die "Cannot get terminal size via escape sequence\n";
-}
-#
-$maximize=get_reply("\x1b[19t");
-if ( $maximize =~ /\x1b\[9;\d+;\d+t/ ) {
- $maxhigh=csi_field($maximize,2);
- $maxwide=csi_field($maximize,3);
- $maxhigh != 0 or $maxhigh = $high * 2;
- $maxwide != 0 or $maxwide = $wide * 2;
- printf "parsed terminal maxsize $maxhigh,$maxwide\n";
-} else {
- die "Cannot get terminal size via escape sequence\n";
-}
-
-sub catch_zap {
- $zapped++;
-}
-$SIG{INT} = \&catch_zap;
-$SIG{QUIT} = \&catch_zap;
-$SIG{KILL} = \&catch_zap;
-$SIG{HUP} = \&catch_zap;
-$SIG{TERM} = \&catch_zap;
-
-$w=$wide;
-$h=$high;
-$a=1;
-$zapped=0;
-while ( $zapped == 0 )
-{
-# sleep 1
- printf "resizing to $h by $w\n";
- write_tty("\x1b[8;$h;$w" . "t");
- if ( $a == 1 ) {
- if ( $w == $maxwide ) {
- $h += $a;
- if ( $h = $maxhigh ) {
- $a = -1;
- }
- } else {
- $w += $a;
- }
- } else {
- if ( $w == $wide ) {
- $h += $a;
- if ( $h = $high ) {
- $a=1;
- }
- } else {
- $w += $a;
- }
- }
-}
-write_tty($original);
diff --git a/nx-X11/programs/xterm/vttests/resize.sh b/nx-X11/programs/xterm/vttests/resize.sh
deleted file mode 100644
index 004574949..000000000
--- a/nx-X11/programs/xterm/vttests/resize.sh
+++ /dev/null
@@ -1,82 +0,0 @@
-#!/bin/sh
-# $XFree86: xc/programs/xterm/vttests/resize.sh,v 1.5 2003/05/19 00:52:30 dickey Exp $
-#
-# -- Thomas Dickey (1999/3/27)
-# Obtain the current screen size, then resize the terminal to the nominal
-# screen width/height, and restore the size.
-
-ESC=""
-CMD='echo'
-OPT='-n'
-SUF=''
-TMP=/tmp/xterm$$
-eval '$CMD $OPT >$TMP || echo fail >$TMP' 2>/dev/null
-( test ! -f $TMP || test -s $TMP ) &&
-for verb in printf print ; do
- rm -f $TMP
- eval '$verb "\c" >$TMP || echo fail >$TMP' 2>/dev/null
- if test -f $TMP ; then
- if test ! -s $TMP ; then
- CMD="$verb"
- OPT=
- SUF='\c'
- break
- fi
- fi
-done
-rm -f $TMP
-
-exec </dev/tty
-old=`stty -g`
-stty raw -echo min 0 time 5
-
-$CMD $OPT "${ESC}[18t${SUF}" > /dev/tty
-IFS=';' read junk high wide
-
-$CMD $OPT "${ESC}[19t${SUF}" > /dev/tty
-IFS=';' read junk maxhigh maxwide
-
-stty $old
-
-wide=`echo $wide|sed -e 's/t.*//'`
-maxwide=`echo $maxwide|sed -e 's/t.*//'`
-original=${ESC}[8\;${high}\;${wide}t${SUF}
-
-test $maxwide = 0 && maxwide=`expr $wide \* 2`
-test $maxhigh = 0 && maxhigh=`expr $high \* 2`
-
-if ( trap "echo exit" EXIT 2>/dev/null ) >/dev/null
-then
- trap '$CMD $OPT "$original" >/dev/tty; exit' EXIT HUP INT TRAP TERM
-else
- trap '$CMD $OPT "$original" >/dev/tty; exit' 0 1 2 5 15
-fi
-
-w=$wide
-h=$high
-a=1
-while true
-do
-# sleep 1
- echo resizing to $h by $w
- $CMD $OPT "${ESC}[8;${h};${w}t" >/dev/tty
- if test $a = 1 ; then
- if test $w = $maxwide ; then
- h=`expr $h + $a`
- if test $h = $maxhigh ; then
- a=-1
- fi
- else
- w=`expr $w + $a`
- fi
- else
- if test $w = $wide ; then
- h=`expr $h + $a`
- if test $h = $high ; then
- a=1
- fi
- else
- w=`expr $w + $a`
- fi
- fi
-done
diff --git a/nx-X11/programs/xterm/vttests/tcapquery.pl b/nx-X11/programs/xterm/vttests/tcapquery.pl
deleted file mode 100755
index 0cd5d9f64..000000000
--- a/nx-X11/programs/xterm/vttests/tcapquery.pl
+++ /dev/null
@@ -1,162 +0,0 @@
-#!/usr/bin/perl
-# $XFree86: xc/programs/xterm/vttests/tcapquery.pl,v 1.2 2005/09/18 23:48:14 dickey Exp $
-#
-# -- Thomas Dickey (2004/3/3)
-# Test the tcap-query option of xterm.
-
-use strict;
-
-use IO::Handle;
-
-sub write_tty {
- open TTY, "+</dev/tty" or die("Cannot open /dev/tty\n");
- autoflush TTY 1;
- print TTY @_;
- close TTY;
-}
-
-sub get_reply {
- open TTY, "+</dev/tty" or die("Cannot open /dev/tty\n");
- autoflush TTY 1;
- my $old=`stty -g`;
- system "stty raw -echo min 0 time 5";
-
- print TTY @_;
- my $reply=<TTY>;
- close TTY;
- system "stty $old";
- return $reply;
-}
-
-sub csi_field {
- my $first = @_[0];
- my $second = @_[1];
- $first =~ s/^[^0-9]+//;
- while ( --$second > 0 ) {
- $first =~ s/^[\d]+//;
- $first =~ s/^[^\d]+//;
- }
- $first =~ s/[^\d]+.*$//;
- return $first;
-}
-
-sub hexified {
- my $value = @_[0];
- my $result = "";
- my $n;
-
- for ( $n = 0; $n < length($value); ++$n) {
- $result .= sprintf("%02X", ord substr($value,$n,1));
- }
- return $result;
-}
-
-sub query_tcap {
- my $tcap = @_[0];
- my $tinfo = @_[1];
- my $param1 = hexified($tcap);
- my $param2 = hexified($tinfo);
-
- # uncomment one of the following lines
- my $reply=get_reply("\x1bP+q" . $param1 . ";" . $param2 . "\x1b\\");
- #my $reply=get_reply("\x1bP+q" . $param2 . "\x1b\\");
-
- if ( $reply =~ /\x1bP1\+r[[:xdigit:]]+=[[:xdigit:]]*.*/ ) {
- my $value = $reply;
- my $n;
-
- $value =~ s/^\x1bP1\+r//;
- $value =~ s/\x1b\\//;
-
- my $result = "";
- for ( $n = 0; $n < length($value); ) {
- my $c = substr($value,$n,1);
- # handle semicolon and equals
- if ( $c =~ /[[:punct:]]/ ) {
- $n += 1;
- $result .= $c;
- } else {
- # handle hex-data
- my $k = hex substr($value,$n,2);
- if ( $k == 0x1b ) {
- $result .= "\\E";
- } elsif ( $k == 0x7f ) {
- $result .= "^?";
- } elsif ( $k == 32 ) {
- $result .= "\\s";
- } elsif ( $k < 32 ) {
- $result .= sprintf("^%c", $k + 64);
- } elsif ( $k > 128 ) {
- $result .= sprintf("\\%03o", $k);
- } else {
- $result .= chr($k);
- }
- $n += 2;
- }
- }
-
- printf "$result\n";
- }
-}
-
-# See xtermcapKeycode()
-query_tcap( "#2", "kHOM");
-query_tcap( "#4", "kLFT");
-query_tcap( "%1", "khlp");
-query_tcap( "%i", "kRIT");
-query_tcap( "*6", "kslt");
-query_tcap( "*7", "kEND");
-query_tcap( "@0", "kfnd");
-query_tcap( "@7", "kend");
-query_tcap( "F1", "kf11");
-query_tcap( "F2", "kf12");
-query_tcap( "F3", "kf13");
-query_tcap( "F4", "kf14");
-query_tcap( "F5", "kf15");
-query_tcap( "F6", "kf16");
-query_tcap( "F7", "kf17");
-query_tcap( "F8", "kf18");
-query_tcap( "F9", "kf19");
-query_tcap( "FA", "kf20");
-query_tcap( "FB", "kf21");
-query_tcap( "FC", "kf22");
-query_tcap( "FD", "kf23");
-query_tcap( "FE", "kf24");
-query_tcap( "FF", "kf25");
-query_tcap( "FG", "kf26");
-query_tcap( "FH", "kf27");
-query_tcap( "FI", "kf28");
-query_tcap( "FJ", "kf29");
-query_tcap( "FK", "kf30");
-query_tcap( "FL", "kf31");
-query_tcap( "FM", "kf32");
-query_tcap( "FN", "kf33");
-query_tcap( "FO", "kf34");
-query_tcap( "FP", "kf35");
-query_tcap( "FQ", "kf36");
-query_tcap( "FR", "kf37");
-query_tcap( "K1", "ka1");
-query_tcap( "K4", "kc1");
-query_tcap( "k1", "kf1");
-query_tcap( "k2", "kf2");
-query_tcap( "k3", "kf3");
-query_tcap( "k4", "kf4");
-query_tcap( "k5", "kf5");
-query_tcap( "k6", "kf6");
-query_tcap( "k7", "kf7");
-query_tcap( "k8", "kf8");
-query_tcap( "k9", "kf9");
-query_tcap( "k;", "kf10");
-query_tcap( "kB", "kcbt");
-query_tcap( "kC", "kclr");
-query_tcap( "kD", "kdch1");
-query_tcap( "kI", "kich1");
-query_tcap( "kN", "knp");
-query_tcap( "kP", "kpp");
-query_tcap( "kb", "kbs");
-query_tcap( "kd", "kcud1");
-query_tcap( "kh", "khome");
-query_tcap( "kl", "kcub1");
-query_tcap( "kr", "kcuf1");
-query_tcap( "ku", "kcuu1");
-query_tcap( "Co", "colors");
diff --git a/nx-X11/programs/xterm/vttests/title.sh b/nx-X11/programs/xterm/vttests/title.sh
deleted file mode 100644
index af3807783..000000000
--- a/nx-X11/programs/xterm/vttests/title.sh
+++ /dev/null
@@ -1,55 +0,0 @@
-#!/bin/sh
-# $XFree86: xc/programs/xterm/vttests/title.sh,v 1.6 2003/05/19 00:52:30 dickey Exp $
-#
-# -- Thomas Dickey (1999/3/27)
-# Obtain the current title of the window, set up a simple clock which runs
-# until this script is interrupted, then restore the title.
-
-ESC=""
-CMD='echo'
-OPT='-n'
-SUF=''
-TMP=/tmp/xterm$$
-eval '$CMD $OPT >$TMP || echo fail >$TMP' 2>/dev/null
-( test ! -f $TMP || test -s $TMP ) &&
-for verb in printf print ; do
- rm -f $TMP
- eval '$verb "\c" >$TMP || echo fail >$TMP' 2>/dev/null
- if test -f $TMP ; then
- if test ! -s $TMP ; then
- CMD="$verb"
- OPT=
- SUF='\c'
- break
- fi
- fi
-done
-rm -f $TMP
-
-exec </dev/tty
-old=`stty -g`
-stty raw -echo min 0 time 5
-
-$CMD $OPT "${ESC}[21t${SUF}" > /dev/tty
-read original
-
-stty $old
-
-# We actually get this terminated by an <esc>backslash, but the backslash
-# is lost. We may lose doublequote characters when restoring the title,
-# depending on the shell.
-original=`echo "$original" |sed -e 's/^...//' -e 's/.$//'`
-original=${ESC}]2\;"${original}"${SUF}
-
-if ( trap "echo exit" EXIT 2>/dev/null ) >/dev/null
-then
- trap '$CMD $OPT "$original" >/dev/tty; exit' EXIT HUP INT TRAP TERM
-else
- trap '$CMD $OPT "$original" >/dev/tty; exit' 0 1 2 5 15
-fi
-
-while true
-do
- sleep 1
- $CMD $OPT "${ESC}]2;`date`" >/dev/tty
-done
diff --git a/nx-X11/programs/xterm/wcwidth.c b/nx-X11/programs/xterm/wcwidth.c
deleted file mode 100644
index d74c7a870..000000000
--- a/nx-X11/programs/xterm/wcwidth.c
+++ /dev/null
@@ -1,306 +0,0 @@
-/* $XFree86: xc/programs/xterm/wcwidth.c,v 1.7 2005/05/03 00:38:25 dickey Exp $ */
-/*
- * This is an implementation of wcwidth() and wcswidth() (defined in
- * IEEE Std 1002.1-2001) for Unicode.
- *
- * http://www.opengroup.org/onlinepubs/007904975/functions/wcwidth.html
- * http://www.opengroup.org/onlinepubs/007904975/functions/wcswidth.html
- *
- * In fixed-width output devices, Latin characters all occupy a single
- * "cell" position of equal width, whereas ideographic CJK characters
- * occupy two such cells. Interoperability between terminal-line
- * applications and (teletype-style) character terminals using the
- * UTF-8 encoding requires agreement on which character should advance
- * the cursor by how many cell positions. No established formal
- * standards exist at present on which Unicode character shall occupy
- * how many cell positions on character terminals. These routines are
- * a first attempt of defining such behavior based on simple rules
- * applied to data provided by the Unicode Consortium.
- *
- * For some graphical characters, the Unicode standard explicitly
- * defines a character-cell width via the definition of the East Asian
- * FullWidth (F), Wide (W), Half-width (H), and Narrow (Na) classes.
- * In all these cases, there is no ambiguity about which width a
- * terminal shall use. For characters in the East Asian Ambiguous (A)
- * class, the width choice depends purely on a preference of backward
- * compatibility with either historic CJK or Western practice.
- * Choosing single-width for these characters is easy to justify as
- * the appropriate long-term solution, as the CJK practice of
- * displaying these characters as double-width comes from historic
- * implementation simplicity (8-bit encoded characters were displayed
- * single-width and 16-bit ones double-width, even for Greek,
- * Cyrillic, etc.) and not any typographic considerations.
- *
- * Much less clear is the choice of width for the Not East Asian
- * (Neutral) class. Existing practice does not dictate a width for any
- * of these characters. It would nevertheless make sense
- * typographically to allocate two character cells to characters such
- * as for instance EM SPACE or VOLUME INTEGRAL, which cannot be
- * represented adequately with a single-width glyph. The following
- * routines at present merely assign a single-cell width to all
- * neutral characters, in the interest of simplicity. This is not
- * entirely satisfactory and should be reconsidered before
- * establishing a formal standard in this area. At the moment, the
- * decision which Not East Asian (Neutral) characters should be
- * represented by double-width glyphs cannot yet be answered by
- * applying a simple rule from the Unicode database content. Setting
- * up a proper standard for the behavior of UTF-8 character terminals
- * will require a careful analysis not only of each Unicode character,
- * but also of each presentation form, something the author of these
- * routines has avoided to do so far.
- *
- * http://www.unicode.org/unicode/reports/tr11/
- *
- * Markus Kuhn -- 2003-05-20 (Unicode 4.0)
- *
- * Permission to use, copy, modify, and distribute this software
- * for any purpose and without fee is hereby granted. The author
- * disclaims all warranties with regard to this software.
- *
- * Latest version: http://www.cl.cam.ac.uk/~mgk25/ucs/wcwidth.c
- */
-
-#include <wcwidth.h>
-
-struct interval {
- int first;
- int last;
-};
-
-/* auxiliary function for binary search in interval table */
-static int bisearch(wchar_t 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;
-}
-
-
-/* The following two functions define the column width of an ISO 10646
- * character as follows:
- *
- * - The null character (U+0000) has a column width of 0.
- *
- * - Other C0/C1 control characters and DEL will lead to a return
- * value of -1.
- *
- * - Non-spacing and enclosing combining characters (general
- * category code Mn or Me in the Unicode database) have a
- * column width of 0.
- *
- * - SOFT HYPHEN (U+00AD) has a column width of 1.
- *
- * - Other format characters (general category code Cf in the Unicode
- * database) and ZERO WIDTH SPACE (U+200B) have a column width of 0.
- *
- * - Hangul Jamo medial vowels and final consonants (U+1160-U+11FF)
- * have a column width of 0.
- *
- * - Spacing characters in the East Asian Wide (W) or East Asian
- * Full-width (F) category as defined in Unicode Technical
- * Report #11 have a column width of 2.
- *
- * - All remaining characters (including all printable
- * ISO 8859-1 and WGL4 characters, Unicode control characters,
- * etc.) have a column width of 1.
- *
- * This implementation assumes that wchar_t characters are encoded
- * in ISO 10646.
- */
-
-int mk_wcwidth(wchar_t ucs)
-{
- /* sorted list of non-overlapping intervals of non-spacing characters */
- /* generated by "uniset +cat=Me +cat=Mn +cat=Cf -00AD +1160-11FF +200B c" */
- static const struct interval combining[] = {
- { 0x0300, 0x036F }, { 0x0483, 0x0486 }, { 0x0488, 0x0489 },
- { 0x0591, 0x05B9 }, { 0x05BB, 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 }, { 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 },
- { 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 },
- { 0x1DC0, 0x1DC3 }, { 0x200B, 0x200F }, { 0x202A, 0x202E },
- { 0x2060, 0x2063 }, { 0x206A, 0x206F }, { 0x20D0, 0x20EB },
- { 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 }
- };
-
- /* test for 8-bit control characters */
- if (ucs == 0)
- return 0;
- if (ucs < 32 || (ucs >= 0x7f && ucs < 0xa0))
- return -1;
-
- /* binary search in table of non-spacing characters */
- if (bisearch(ucs, combining,
- sizeof(combining) / sizeof(struct interval) - 1))
- return 0;
-
- /* if we arrive here, ucs is not a combining or C0/C1 control character */
-
- return 1 +
- (ucs >= 0x1100 &&
- (ucs <= 0x115f || /* Hangul Jamo init. consonants */
- ucs == 0x2329 || ucs == 0x232a ||
- (ucs >= 0x2e80 && ucs <= 0xa4cf &&
- ucs != 0x303f) || /* CJK ... Yi */
- (ucs >= 0xac00 && ucs <= 0xd7a3) || /* Hangul Syllables */
- (ucs >= 0xf900 && ucs <= 0xfaff) || /* CJK Compatibility Ideographs */
- (ucs >= 0xfe30 && ucs <= 0xfe6f) || /* CJK Compatibility Forms */
- (ucs >= 0xff00 && ucs <= 0xff60) || /* Fullwidth Forms */
- (ucs >= 0xffe0 && ucs <= 0xffe6) ||
- (ucs >= 0x20000 && ucs <= 0x2fffd) ||
- (ucs >= 0x30000 && ucs <= 0x3fffd)));
-}
-
-
-int mk_wcswidth(const wchar_t *pwcs, size_t n)
-{
- int w, width = 0;
-
- for (;*pwcs && n-- > 0; pwcs++)
- if ((w = mk_wcwidth(*pwcs)) < 0)
- return -1;
- else
- width += w;
-
- return width;
-}
-
-
-/*
- * The following functions are the same as mk_wcwidth() and
- * mk_wcwidth_cjk(), except that spacing characters in the East Asian
- * Ambiguous (A) category as defined in Unicode Technical Report #11
- * have a column width of 2. This variant might be useful for users of
- * CJK legacy encodings who want to migrate to UCS without changing
- * the traditional terminal character-width behaviour. It is not
- * otherwise recommended for general use.
- */
-int mk_wcwidth_cjk(wchar_t ucs)
-{
- /* sorted list of non-overlapping intervals of East Asian Ambiguous
- * characters, generated by "uniset +WIDTH-A -cat=Me -cat=Mn -cat=Cf c" */
- static const struct interval ambiguous[] = {
- { 0x00A1, 0x00A1 }, { 0x00A4, 0x00A4 }, { 0x00A7, 0x00A8 },
- { 0x00AA, 0x00AA }, { 0x00AE, 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 }, { 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 },
- { 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 }, { 0x2614, 0x2615 },
- { 0x261C, 0x261C }, { 0x261E, 0x261E }, { 0x2640, 0x2640 },
- { 0x2642, 0x2642 }, { 0x2660, 0x2661 }, { 0x2663, 0x2665 },
- { 0x2667, 0x266A }, { 0x266C, 0x266D }, { 0x266F, 0x266F },
- { 0x273D, 0x273D }, { 0x2776, 0x277F }, { 0xE000, 0xF8FF },
- { 0xFFFD, 0xFFFD }, { 0xF0000, 0xFFFFD }, { 0x100000, 0x10FFFD }
- };
-
- /* binary search in table of non-spacing characters */
- if (bisearch(ucs, ambiguous,
- sizeof(ambiguous) / sizeof(struct interval) - 1))
- return 2;
-
- return mk_wcwidth(ucs);
-}
-
-
-int mk_wcswidth_cjk(const wchar_t *pwcs, size_t n)
-{
- int w, width = 0;
-
- for (;*pwcs && n-- > 0; pwcs++)
- if ((w = mk_wcwidth_cjk(*pwcs)) < 0)
- return -1;
- else
- width += w;
-
- return width;
-}
diff --git a/nx-X11/programs/xterm/wcwidth.h b/nx-X11/programs/xterm/wcwidth.h
deleted file mode 100644
index b4eb51af4..000000000
--- a/nx-X11/programs/xterm/wcwidth.h
+++ /dev/null
@@ -1,14 +0,0 @@
-/* $XFree86: xc/programs/xterm/wcwidth.h,v 1.5 2005/05/03 00:38:25 dickey Exp $ */
-
-#ifndef included_wcwidth_h
-#define included_wcwidth_h 1
-
-#include <stddef.h>
-
-extern int mk_wcswidth(const wchar_t * pwcs, size_t n);
-extern int mk_wcswidth_cjk(const wchar_t * pwcs, size_t n);
-extern int mk_wcwidth(wchar_t ucs);
-extern int mk_wcwidth_cjk(wchar_t ucs);
-extern int wcswidth_cjk(const wchar_t * pwcs, size_t n);
-
-#endif /* included_wcwidth_h */
diff --git a/nx-X11/programs/xterm/xcharmouse.h b/nx-X11/programs/xterm/xcharmouse.h
deleted file mode 100644
index c1f257e96..000000000
--- a/nx-X11/programs/xterm/xcharmouse.h
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * $XFree86: xc/programs/xterm/xcharmouse.h,v 1.3 2002/08/24 18:54:39 dickey Exp $
- */
-
-/************************************************************
-
-Copyright 1998 by Jason Bacon <acadix@execpc.com>
-
- All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and its
-documentation for any purpose and without fee is hereby granted,
-provided that the above copyright notice appear in all copies and that
-both that copyright notice and this permission notice appear in
-supporting documentation, and that the name of the above listed
-copyright holder(s) not be used in advertising or publicity pertaining
-to distribution of the software without specific, written prior
-permission.
-
-THE ABOVE LISTED COPYRIGHT HOLDER(S) DISCLAIM ALL WARRANTIES WITH REGARD
-TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
-AND FITNESS, IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE
-LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
-ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
-OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-
-********************************************************/
-
-#ifndef included_xcharmouse_h
-#define included_xcharmouse_h
-
-/*
- * Macros for dpmodes
- * J. Bacon, acadix@execpc.com, June 1998
- * Steve Wall, September 1999
- * Ilya Zakharevich, August 2002
- */
-
-/* DECSET arguments for turning on mouse reporting modes */
-#define SET_X10_MOUSE 9
-#define SET_VT200_MOUSE 1000
-#define SET_VT200_HIGHLIGHT_MOUSE 1001
-#define SET_BTN_EVENT_MOUSE 1002
-#define SET_ANY_EVENT_MOUSE 1003
-
-#define SET_BUTTON1_MOVE_POINT 2001 /* click1 emit Esc seq to move point*/
-#define SET_BUTTON2_MOVE_POINT 2002 /* press2 emit Esc seq to move point*/
-#define SET_DBUTTON3_DELETE 2003 /* Double click-3 deletes */
-#define SET_PASTE_IN_BRACKET 2004 /* Surround paste by escapes */
-#define SET_PASTE_QUOTE 2005 /* Quote each char during paste */
-#define SET_PASTE_LITERAL_NL 2006 /* Paste "\n" as C-j */
-
-#if OPT_DEC_LOCATOR
-
-/* Bit fields for screen->locator_events */
-#define LOC_BTNS_DN 0x1
-#define LOC_BTNS_UP 0x2
-
-/* Special values for screen->loc_filter_* */
-#define LOC_FILTER_POS -1
-
-#endif /* OPT_DEC_LOCATOR */
-
-/* Values for screen->send_mouse_pos */
-enum {
- MOUSE_OFF
- ,X10_MOUSE
- ,VT200_MOUSE
- ,VT200_HIGHLIGHT_MOUSE
- ,BTN_EVENT_MOUSE
- ,ANY_EVENT_MOUSE
- ,DEC_LOCATOR
-};
-
-#endif /* included_xcharmouse_h */
diff --git a/nx-X11/programs/xterm/xstrings.c b/nx-X11/programs/xterm/xstrings.c
deleted file mode 100644
index 1bc2d522e..000000000
--- a/nx-X11/programs/xterm/xstrings.c
+++ /dev/null
@@ -1,146 +0,0 @@
-/* $XTermId: xstrings.c,v 1.22 2005/01/14 01:50:03 tom Exp $ */
-
-/* $XFree86: xc/programs/xterm/xstrings.c,v 1.9 2005/01/14 01:50:03 dickey Exp $ */
-
-/************************************************************
-
-Copyright 2000-2004,2005 by Thomas E. Dickey
-
- All Rights Reserved
-
-Permission is hereby granted, free of charge, to any person obtaining a
-copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name(s) of the above copyright
-holders shall not be used in advertising or otherwise to promote the
-sale, use or other dealings in this Software without prior written
-authorization.
-
-********************************************************/
-
-#include <xterm.h>
-
-#include <sys/types.h>
-#include <string.h>
-#include <ctype.h>
-
-#include <xstrings.h>
-
-char *
-x_basename(char *name)
-{
- char *cp;
-
- cp = strrchr(name, '/');
-#ifdef __UNIXOS2__
- if (cp == 0)
- cp = strrchr(name, '\\');
-#endif
- return (cp ? cp + 1 : name);
-}
-
-int
-x_strcasecmp(const char *s1, const char *s2)
-{
- unsigned len = strlen(s1);
-
- if (len != strlen(s2))
- return 1;
-
- while (len-- != 0) {
- int c1 = toupper(CharOf(*s1));
- int c2 = toupper(CharOf(*s2));
- if (c1 != c2)
- return 1;
- s1++, s2++;
- }
-
- return 0;
-}
-
-/*
- * Allocates a copy of a string
- */
-char *
-x_strdup(const char *s)
-{
- char *result = 0;
-
- if (s != 0) {
- char *t = CastMallocN(char, strlen(s));
- if (t != 0) {
- strcpy(t, s);
- }
- result = t;
- }
- return result;
-}
-
-/*
- * Returns a pointer to the first occurrence of s2 in s1,
- * or NULL if there are none.
- */
-char *
-x_strindex(char *s1, char *s2)
-{
- char *s3;
- size_t s2len = strlen(s2);
-
- while ((s3 = strchr(s1, *s2)) != NULL) {
- if (strncmp(s3, s2, s2len) == 0)
- return (s3);
- s1 = ++s3;
- }
- return (NULL);
-}
-
-/*
- * Trims leading/trailing spaces from the string, returns a copy of it if it
- * is modified.
- */
-char *
-x_strtrim(char *s)
-{
- char *base = s;
- char *d;
-
- if (s != 0 && *s != '\0') {
- char *t = x_strdup(base);
- s = t;
- d = s;
- while (isspace(CharOf(*s))) {
- ++s;
- }
- while ((*d++ = *s++) != '\0') {
- ;
- }
- if (*t != '\0') {
- s = t + strlen(t);
- while (s != t && isspace(CharOf(s[-1]))) {
- *--s = '\0';
- }
- }
- if (!strcmp(t, base)) {
- free(t);
- } else {
- base = t;
- }
- }
- return base;
-}
diff --git a/nx-X11/programs/xterm/xstrings.h b/nx-X11/programs/xterm/xstrings.h
deleted file mode 100644
index fb7886e25..000000000
--- a/nx-X11/programs/xterm/xstrings.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/* $XFree86: xc/programs/xterm/xstrings.h,v 1.4 2002/08/17 19:52:27 dickey Exp $ */
-
-/************************************************************
-
-Copyright 2000-2001,2002 by Thomas E. Dickey
-
- All Rights Reserved
-
-Permission is hereby granted, free of charge, to any person obtaining a
-copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name(s) of the above copyright
-holders shall not be used in advertising or otherwise to promote the
-sale, use or other dealings in this Software without prior written
-authorization.
-
-********************************************************/
-
-#ifndef included_xstrings_h
-#define included_xstrings_h 1
-
-extern char *x_basename(char *name);
-extern char *x_strdup(const char *s);
-extern char *x_strindex(char *s1, char *s2);
-extern char *x_strtrim(char *s);
-extern int x_strcasecmp(const char *s1, const char *s2);
-
-#endif /* included_xstrings_h */
diff --git a/nx-X11/programs/xterm/xterm.dat b/nx-X11/programs/xterm/xterm.dat
deleted file mode 100644
index 6ae28ca42..000000000
--- a/nx-X11/programs/xterm/xterm.dat
+++ /dev/null
@@ -1,160 +0,0 @@
-! $XFree86: xc/programs/xterm/xterm.dat,v 1.5 2005/07/07 00:46:14 dickey Exp $
-!
-*title: Xterm
-*iconName: Xterm
-*c132: TRUE
-*scrollBar: on
-*saveLines: 1000
-
-! This is nonsense: if the xterm has no session management capabilities,
-! it is useless, and if it does, it is harmful.
-!XTerm.JoinSession:False
-
-! turn off NumLock support - there is some conflict or problem on VMS
-*numLock: false
-
-*SimpleMenu*BackingStore: NotUseful
-*SimpleMenu*menuLabel.font: -adobe-helvetica-bold-r-normal--*-120-*-*-*-*-iso*-*
-*SimpleMenu*menuLabel.vertSpace: 100
-*SimpleMenu*HorizontalMargins: 16
-*SimpleMenu*Sme.height: 16
-*SimpleMenu*Cursor: left_ptr
-
-*mainMenu.Label: Main Options
-*mainMenu*securekbd*Label: Secure Keyboard
-*mainMenu*allowsends*Label: Allow SendEvents
-*mainMenu*logging*Label: Log to File
-*mainMenu*print*Label: Print Window
-*mainMenu*redraw*Label: Redraw Window
-*mainMenu*8-bit control*Label: 8-Bit Controls
-*mainMenu*backarrow key*Label: Backarrow Key
-*mainMenu*num-lock*Label: Alt/NumLock Modifiers
-*mainMenu*meta-esc*Label: Meta Sends Escape
-*mainMenu*sunFunction-keys*Label: Sun Function-Keys
-*mainMenu*sunKeyboard*Label: VT220 Keyboard
-*mainMenu*hp function-keys*Label: HP Function-Keys
-*mainMenu*suspend*Label: Send STOP Signal
-*mainMenu*suspend*Sensitive: FALSE
-*mainMenu*continue*Label: Send CONT Signal
-*mainMenu*continue*Sensitive: FALSE
-*mainMenu*interrupt*Label: Send INT Signal
-*mainMenu*interrupt*Sensitive: FALSE
-*mainMenu*hangup*Label: Send HUP Signal
-*mainMenu*hangup*Sensitive: FALSE
-*mainMenu*terminate*Label: Send TERM Signal
-*mainMenu*terminate*Sensitive: FALSE
-*mainMenu*kill*Label: Send KILL Signal
-*mainMenu*kill*Sensitive: FALSE
-*mainMenu*quit*Label: Quit
-
-*vtMenu.Label: VT Options
-*vtMenu*scrollbar*Label: Enable Scrollbar
-*vtMenu*jumpscroll*Label: Enable Jump Scroll
-*vtMenu*reversevideo*Label: Enable Reverse Video
-*vtMenu*autowrap*Label: Enable Auto Wraparound
-*vtMenu*reversewrap*Label: Enable Reverse Wraparound
-*vtMenu*autolinefeed*Label: Enable Auto Linefeed
-*vtMenu*appcursor*Label: Enable Application Cursor Keys
-*vtMenu*appkeypad*Label: Enable Application Keypad
-*vtMenu*scrollkey*Label: Scroll to Bottom on Key Press
-*vtMenu*scrollttyoutput*Label: Scroll to Bottom on Tty Output
-*vtMenu*allow132*Label: Allow 80/132 Column Switching
-*vtMenu*cursesemul*Label: Enable Curses Emulation
-*vtMenu*visualbell*Label: Enable Visual Bell
-*vtMenu*poponbell*Label: Enable Pop on Bell
-*vtMenu*marginbell*Label: Enable Margin Bell
-*vtMenu*cursorblink*Label: Enable Blinking Cursor
-*vtMenu*titeInhibit*Label: Enable Alternate Screen Switching
-*vtMenu*activeicon*Label: Enable Active Icon
-*vtMenu*softreset*Label: Do Soft Reset
-*vtMenu*hardreset*Label: Do Full Reset
-*vtMenu*clearsavedlines*Label: Reset and Clear Saved Lines
-*vtMenu*tekshow*Label: Show Tek Window
-*vtMenu*tekmode*Label: Switch to Tek Mode
-*vtMenu*vthide*Label: Hide VT Window
-*vtMenu*altscreen*Label: Show Alternate Screen
-
-*fontMenu.Label: VT Fonts
-*fontMenu*fontdefault*Label: Default
-*VT100*font: -bitstream-terminal-medium-r-normal-gs-18-180-75-75-c-110-iso8859-1
-*fontMenu*font1*Label: Tiny
-*VT100*font1: -misc-fixed-medium-r-normal--8-60-*-*-c-50-iso8859-1
-*fontMenu*font2*Label: Small
-*VT100*font2: -misc-fixed-medium-r-normal--10-70-*-*-c-60-iso8859-1
-*fontMenu*font3*Label: Medium
-*VT100*font3: -misc-fixed-medium-r-normal--13-120-*-*-c-70-iso8859-1
-*fontMenu*font4*Label: Large
-*VT100*font4: -bitstream-terminal-medium-r-normal-gs-18-180-75-75-c-110-iso8859-1
-*fontMenu*font5*Label: Huge
-*VT100*font5: -bitstream-terminal-medium-r-normal-gs-36-280-100-100-c-220-iso8859-1
-*fontMenu*font6*Label: Large-Narrow
-*VT100*font6: -bitstream-terminal-medium-r-narrow--18-180-75-75-c-70-iso8859-1
-*fontMenu*fontescape*Label: Escape Sequence
-*fontMenu*fontsel*Label: Selection
-!fontescape and fontsel overridden by application
-*fontMenu*font-doublesize*Label: Doublesized Characters
-*fontMenu*font-loadable*Label: VT220 Soft Fonts
-
-*tekMenu.Label: Tek Options
-*tekMenu*tektextlarge*Label: Large Characters
-*tekMenu*tektext2*Label: #2 Size Characters
-*tekMenu*tektext3*Label: #3 Size Characters
-*tekMenu*tektextsmall*Label: Small Characters
-*tekMenu*tekpage*Label: PAGE
-*tekMenu*tekreset*Label: RESET
-*tekMenu*tekcopy*Label: COPY
-*tekMenu*vtshow*Label: Show VT Window
-*tekMenu*vtmode*Label: Switch to VT Mode
-*tekMenu*tekhide*Label: Hide Tek Window
-
-*tek4014*fontLarge: -misc-fixed-medium-r-normal--15-140-*-*-c-90-iso8859-1
-*tek4014*font2: -misc-fixed-medium-r-normal--13-120-*-*-c-70-iso8859-1
-*tek4014*font3: -misc-fixed-medium-r-normal--10-100-*-*-c-60-iso8859-1
-*tek4014*fontSmall: -misc-fixed-medium-r-normal--8-80-*-*-c-50-iso8859-1
-
-! Enable Colour by default.
-
-*VT100*colorMode: on
-*VT100*boldColors: on
-*VT100*dynamicColors: on
-
-*VT100*highlightColor: red
-*VT100*cursorColor: white
-!bold text color
-*VT100*colorBDMode: on
-*VT100*colorBD: green
-!blinking text color
-*VT100*colorBLMode: on
-*VT100*colorBL: red
-
-
-! Uncomment this use color for underline attribute
-!*VT100*colorULMode: on
-!*VT100*italicULMode: on
-!*VT100*underLine: off
-
-! Uncomment this to use color for the bold attribute
-*VT100*colorBDMode: on
-
-! Uncomment this to use the bold/underline colors in preference to other colors
-*VT100*colorAttrMode: on
-
-*VT100*color0: black
-*VT100*color1: red3
-*VT100*color2: green3
-*VT100*color3: yellow3
-*VT100*color4: blue3
-*VT100*color5: magenta3
-*VT100*color6: cyan3
-*VT100*color7: gray90
-*VT100*color8: gray30
-*VT100*color9: red
-*VT100*color10: green
-*VT100*color11: yellow
-*VT100*color12: blue
-*VT100*color13: magenta
-*VT100*color14: cyan
-*VT100*color15: white
-*VT100*colorUL: yellow
-*VT100*colorBD: white
-
diff --git a/nx-X11/programs/xterm/xterm.h b/nx-X11/programs/xterm/xterm.h
deleted file mode 100644
index 1e4ff56ab..000000000
--- a/nx-X11/programs/xterm/xterm.h
+++ /dev/null
@@ -1,1101 +0,0 @@
-/* $XTermId: xterm.h,v 1.357 2005/11/03 13:17:28 tom Exp $ */
-
-/* $XFree86: xc/programs/xterm/xterm.h,v 3.109 2005/11/03 13:17:28 dickey Exp $ */
-
-/************************************************************
-
-Copyright 1999-2004,2005 by Thomas E. Dickey
-
- All Rights Reserved
-
-Permission is hereby granted, free of charge, to any person obtaining a
-copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name(s) of the above copyright
-holders shall not be used in advertising or otherwise to promote the
-sale, use or other dealings in this Software without prior written
-authorization.
-
-********************************************************/
-
-/*
- * Common/useful definitions for XTERM application.
- *
- * This is also where we put the fallback definitions if we do not build using
- * the configure script.
- */
-#ifndef included_xterm_h
-#define included_xterm_h
-
-#ifdef HAVE_CONFIG_H
-#include <xtermcfg.h>
-#endif
-
-#ifndef GCC_UNUSED
-#define GCC_UNUSED /* nothing */
-#endif
-
-#ifndef GCC_NORETURN
-#define GCC_NORETURN /* nothing */
-#endif
-
-#include <X11/Xos.h>
-
-#ifndef HAVE_CONFIG_H
-
-#define HAVE_LIB_XAW 1
-
-#ifdef CSRG_BASED
-/* Get definition of BSD */
-#include <sys/param.h>
-#endif
-
-#ifndef HAVE_X11_DECKEYSYM_H
-#define HAVE_X11_DECKEYSYM_H 1
-#endif
-
-#ifndef HAVE_X11_SUNKEYSYM_H
-#define HAVE_X11_SUNKEYSYM_H 1
-#endif
-
-#ifndef DFT_TERMTYPE
-#define DFT_TERMTYPE "xterm"
-#endif
-
-#ifndef X_NOT_POSIX
-#define HAVE_WAITPID 1
-#define HAVE_SYS_WAIT_H 1
-#define HAVE_UNISTD_H 1
-#endif
-
-#define HAVE_STDLIB_H 1
-#define DECL_ERRNO 1
-
-#ifndef NOPUTENV
-#define HAVE_PUTENV 1
-#endif
-
-#if defined(CSRG_BASED) || defined(__GNU__)
-#define USE_POSIX_TERMIOS 1
-#endif
-
-#ifdef __NetBSD__
-#include <sys/param.h>
-#if __NetBSD_Version__ >= 106030000 /* 1.6C */
-#define BSD_UTMPX 1
-#define ut_xtime ut_tv.tv_sec
-#endif
-#endif
-
-#if defined(hpux) && !defined(__hpux)
-#define __hpux 1 /* HPUX 11.0 does not define this */
-#endif
-
-#if !defined(__SCO__) && (defined(SCO) || defined(sco) || defined(SCO325))
-#define __SCO__ 1
-#endif
-
-#ifdef USE_POSIX_TERMIOS
-#define HAVE_TERMIOS_H 1
-#define HAVE_TCGETATTR 1
-#endif
-
-#if defined(__UNIXOS2__) || defined(__SCO__) || defined(__UNIXWARE__)
-#define USE_TERMCAP 1
-#endif
-
-#if defined(UTMP)
-#define HAVE_UTMP 1
-#endif
-
-#if (defined(__MVS__) || defined(SVR4) || defined(__SCO__) || defined(BSD_UTMPX)) && !defined(__CYGWIN__)
-#define UTMPX_FOR_UTMP 1
-#endif
-
-#if !defined(ISC) && !defined(__QNX__)
-#define HAVE_UTMP_UT_HOST 1
-#endif
-
-#if defined(UTMPX_FOR_UTMP) && !(defined(__MVS__) || defined(__hpux))
-#define HAVE_UTMP_UT_SESSION 1
-#endif
-
-#if !(defined(linux) && (!defined(__GLIBC__) || (__GLIBC__ < 2))) && !defined(SVR4)
-#define ut_xstatus ut_exit.e_exit
-#endif
-
-#if defined(SVR4) || defined(__SCO__) || defined(BSD_UTMPX) || (defined(linux) && defined(__GLIBC__) && (__GLIBC__ >= 2) && !(defined(__powerpc__) && (__GLIBC__ == 2) && (__GLIBC_MINOR__ == 0)))
-#define HAVE_UTMP_UT_XTIME 1
-#endif
-
-#if defined(linux) || defined(__CYGWIN__)
-#define USE_LASTLOG
-#define HAVE_LASTLOG_H
-#elif defined(BSD) && (BSD >= 199103)
-#ifdef BSD_UTMPX
-#define USE_LASTLOGX
-#else
-#define USE_LASTLOG
-#endif
-#endif
-
-#if defined(__OpenBSD__)
-#define DEFDELETE_DEL TRUE
-#define DEF_BACKARO_ERASE TRUE
-#define DEF_INITIAL_ERASE TRUE
-#endif
-
-#if defined(__SCO__) || defined(__UNIXWARE__)
-#define DEFDELETE_DEL TRUE
-#define OPT_SCO_FUNC_KEYS 1
-#endif
-
-#if defined(__SCO__) || defined(SVR4) || defined(_POSIX_SOURCE) || defined(__QNX__) || defined(__hpux) || (defined(BSD) && (BSD >= 199103)) || defined(__CYGWIN__)
-#define USE_POSIX_WAIT
-#endif
-
-#if defined(AIXV3) || defined(CRAY) || defined(__SCO__) || defined(SVR4) || (defined(SYSV) && defined(i386)) || defined(__MVS__) || defined(__hpux) || defined(__osf__) || defined(linux) || defined(macII) || defined(BSD_UTMPX)
-#define USE_SYSV_UTMP
-#endif
-
-#if defined(__GNU__) || defined(__MVS__) || defined(__osf__)
-#define USE_TTY_GROUP
-#endif
-
-#if defined(__CYGWIN__)
-#define HAVE_NCURSES_TERM_H 1
-#endif
-
-#ifdef __osf__
-#define TTY_GROUP_NAME "terminal"
-#endif
-
-#if defined(__MVS__)
-#undef ut_xstatus
-#define ut_name ut_user
-#define ut_xstatus ut_exit.ut_e_exit
-#define ut_xtime ut_tv.tv_sec
-#endif
-
-#if defined(ut_xstatus)
-#define HAVE_UTMP_UT_XSTATUS 1
-#endif
-
-#if defined(XKB)
-#define HAVE_XKBBELL 1
-#endif
-
-#endif /* HAVE_CONFIG_H */
-
-/***====================================================================***/
-
-/* if compiling with gcc -ansi -pedantic, we must fix POSIX definitions */
-#if defined(SVR4) && defined(sun)
-#ifndef __EXTENSIONS__
-#define __EXTENSIONS__ 1
-#endif
-#ifndef _POSIX_C_SOURCE
-#define _POSIX_C_SOURCE 1
-#endif
-#endif
-
-/***====================================================================***/
-
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#else
-extern char *calloc();
-extern char *getenv();
-extern char *malloc();
-extern char *realloc();
-extern void exit();
-extern void free();
-#endif
-
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#ifdef HAVE_SYS_WAIT_H
-#include <sys/wait.h>
-#endif
-
-#include <errno.h>
-#if defined(DECL_ERRNO) && !defined(errno)
-extern int errno;
-#endif
-
-/*
- * FIXME: Toggling logging from xterm hangs under Linux 2.0.29 with libc5 if
- * we use 'waitpid()', while 'wait()' seems to work properly.
- */
-#ifdef linux
-#undef HAVE_WAITPID
-#endif
-
-#ifndef OPT_WIDE_CHARS
-#define OPT_WIDE_CHARS 0
-#endif
-
-#if OPT_WIDE_CHARS
-#define HIDDEN_HI 0xff
-#define HIDDEN_LO 0xff
-#define HIDDEN_CHAR 0xffff
-#endif
-
-/***====================================================================***/
-
-#include <proto.h>
-#include <ptyx.h>
-
-#if (XtSpecificationRelease >= 6) && !defined(NO_XPOLL_H) && !defined(sun)
-#include <X11/Xpoll.h>
-#define USE_XPOLL_H 1
-#else
-#define Select(n,r,w,e,t) select(n,(fd_set*)r,(fd_set*)w,(fd_set*)e,(struct timeval *)t)
-#define XFD_COPYSET(src,dst) memcpy((dst)->fds_bits, (src)->fds_bits, sizeof(fd_set))
-#if defined(__MVS__) && !defined(TIME_WITH_SYS_TIME)
-#define TIME_WITH_SYS_TIME
-#endif
-#endif
-
-#ifdef TIME_WITH_SYS_TIME
-# include <sys/time.h>
-# include <time.h>
-#else
-# ifdef HAVE_SYS_TIME_H
-# include <sys/time.h>
-# else
-# include <time.h>
-# endif
-#endif
-
-/* these may be needed for sig_atomic_t */
-#include <sys/types.h>
-#include <signal.h>
-
-#ifdef USE_SYS_SELECT_H
-
-#if defined(USE_XPOLL_H) && defined(AIXV3) && defined(NFDBITS)
-#undef NFDBITS /* conflict between X11/Xpoll.h and sys/select.h */
-#endif
-
-#include <sys/select.h>
-
-#endif /* USE_SYS_SELECT_H */
-
-#include <setjmp.h>
-
-#if defined(__UNIXOS2__) && !defined(XTERM_MAIN)
-#define environ gblenvp /* circumvent a bug */
-#endif
-
-#if !defined(VMS) && !(defined(linux) && defined(__USE_GNU))
-extern char **environ;
-#endif
-
-/***====================================================================***/
-
-#define XtNallowC1Printable "allowC1Printable"
-#define XtNallowSendEvents "allowSendEvents"
-#define XtNallowWindowOps "allowWindowOps"
-#define XtNalwaysHighlight "alwaysHighlight"
-#define XtNalwaysUseMods "alwaysUseMods"
-#define XtNanswerbackString "answerbackString"
-#define XtNappcursorDefault "appcursorDefault"
-#define XtNappkeypadDefault "appkeypadDefault"
-#define XtNautoWrap "autoWrap"
-#define XtNawaitInput "awaitInput"
-#define XtNbackarrowKey "backarrowKey"
-#define XtNbellOnReset "bellOnReset"
-#define XtNbellSuppressTime "bellSuppressTime"
-#define XtNboldColors "boldColors"
-#define XtNboldFont "boldFont"
-#define XtNboldMode "boldMode"
-#define XtNbrokenLinuxOSC "brokenLinuxOSC"
-#define XtNbrokenSelections "brokenSelections"
-#define XtNbrokenStringTerm "brokenStringTerm"
-#define XtNc132 "c132"
-#define XtNcacheDoublesize "cacheDoublesize"
-#define XtNcharClass "charClass"
-#define XtNcjkWidth "cjkWidth"
-#define XtNcolorAttrMode "colorAttrMode"
-#define XtNcolorBDMode "colorBDMode"
-#define XtNcolorBLMode "colorBLMode"
-#define XtNcolorMode "colorMode"
-#define XtNcolorRVMode "colorRVMode"
-#define XtNcolorULMode "colorULMode"
-#define XtNctrlFKeys "ctrlFKeys"
-#define XtNcurses "curses"
-#define XtNcursorBlink "cursorBlink"
-#define XtNcursorColor "cursorColor"
-#define XtNcursorOffTime "cursorOffTime"
-#define XtNcursorOnTime "cursorOnTime"
-#define XtNcutNewline "cutNewline"
-#define XtNcutToBeginningOfLine "cutToBeginningOfLine"
-#define XtNdecTerminalID "decTerminalID"
-#define XtNdeleteIsDEL "deleteIsDEL"
-#define XtNdynamicColors "dynamicColors"
-#define XtNeightBitControl "eightBitControl"
-#define XtNeightBitInput "eightBitInput"
-#define XtNeightBitOutput "eightBitOutput"
-#define XtNfaceName "faceName"
-#define XtNfaceNameDoublesize "faceNameDoublesize"
-#define XtNfaceSize "faceSize"
-#define XtNfont1 "font1"
-#define XtNfont2 "font2"
-#define XtNfont3 "font3"
-#define XtNfont4 "font4"
-#define XtNfont5 "font5"
-#define XtNfont6 "font6"
-#define XtNfontDoublesize "fontDoublesize"
-#define XtNfontStyle "fontStyle"
-#define XtNforceBoxChars "forceBoxChars"
-#define XtNfreeBoldBox "freeBoldBox"
-#define XtNhighlightColor "highlightColor"
-#define XtNhighlightSelection "highlightSelection"
-#define XtNhpLowerleftBugCompat "hpLowerleftBugCompat"
-#define XtNi18nSelections "i18nSelections"
-#define XtNinternalBorder "internalBorder"
-#define XtNitalicULMode "italicULMode"
-#define XtNjumpScroll "jumpScroll"
-#define XtNkeyboardDialect "keyboardDialect"
-#define XtNlimitResize "limitResize"
-#define XtNlocale "locale"
-#define XtNlocaleFilter "localeFilter"
-#define XtNlogFile "logFile"
-#define XtNlogInhibit "logInhibit"
-#define XtNlogging "logging"
-#define XtNloginShell "loginShell"
-#define XtNmarginBell "marginBell"
-#define XtNmenuBar "menuBar"
-#define XtNmenuHeight "menuHeight"
-#define XtNmetaSendsEscape "metaSendsEscape"
-#define XtNmkWidth "mkWidth"
-#define XtNmodifyCursorKeys "modifyCursorKeys"
-#define XtNmultiClickTime "multiClickTime"
-#define XtNmultiScroll "multiScroll"
-#define XtNnMarginBell "nMarginBell"
-#define XtNnumLock "numLock"
-#define XtNoldXtermFKeys "oldXtermFKeys"
-#define XtNpointerColor "pointerColor"
-#define XtNpointerColorBackground "pointerColorBackground"
-#define XtNpointerShape "pointerShape"
-#define XtNpopOnBell "popOnBell"
-#define XtNprintAttributes "printAttributes"
-#define XtNprinterAutoClose "printerAutoClose"
-#define XtNprinterCommand "printerCommand"
-#define XtNprinterControlMode "printerControlMode"
-#define XtNprinterExtent "printerExtent"
-#define XtNprinterFormFeed "printerFormFeed"
-#define XtNrenderFont "renderFont"
-#define XtNresizeGravity "resizeGravity"
-#define XtNreverseWrap "reverseWrap"
-#define XtNrightScrollBar "rightScrollBar"
-#define XtNsaveLines "saveLines"
-#define XtNscrollBar "scrollBar"
-#define XtNscrollBarBorder "scrollBarBorder"
-#define XtNscrollKey "scrollKey"
-#define XtNscrollLines "scrollLines"
-#define XtNscrollPos "scrollPos"
-#define XtNscrollTtyOutput "scrollTtyOutput"
-#define XtNshiftFonts "shiftFonts"
-#define XtNshowBlinkAsBold "showBlinkAsBold"
-#define XtNshowMissingGlyphs "showMissingGlyphs"
-#define XtNsignalInhibit "signalInhibit"
-#define XtNtekGeometry "tekGeometry"
-#define XtNtekInhibit "tekInhibit"
-#define XtNtekSmall "tekSmall"
-#define XtNtekStartup "tekStartup"
-#define XtNtiXtraScroll "tiXtraScroll"
-#define XtNtiteInhibit "titeInhibit"
-#define XtNtoolBar "toolBar"
-#define XtNtrimSelection "trimSelection"
-#define XtNunderLine "underLine"
-#define XtNutf8 "utf8"
-#define XtNveryBoldColors "veryBoldColors"
-#define XtNvisualBell "visualBell"
-#define XtNvisualBellDelay "visualBellDelay"
-#define XtNvt100Graphics "vt100Graphics"
-#define XtNwideBoldFont "wideBoldFont"
-#define XtNwideChars "wideChars"
-#define XtNwideFont "wideFont"
-#define XtNximFont "ximFont"
-#define XtNxmcAttributes "xmcAttributes"
-#define XtNxmcGlitch "xmcGlitch"
-#define XtNxmcInline "xmcInline"
-#define XtNxmcMoveSGR "xmcMoveSGR"
-
-#define XtCAllowC1Printable "AllowC1Printable"
-#define XtCAllowSendEvents "AllowSendEvents"
-#define XtCAllowWindowOps "AllowWindowOps"
-#define XtCAlwaysHighlight "AlwaysHighlight"
-#define XtCAlwaysUseMods "AlwaysUseMods"
-#define XtCAnswerbackString "AnswerbackString"
-#define XtCAppcursorDefault "AppcursorDefault"
-#define XtCAppkeypadDefault "AppkeypadDefault"
-#define XtCAutoWrap "AutoWrap"
-#define XtCAwaitInput "AwaitInput"
-#define XtCBackarrowKey "BackarrowKey"
-#define XtCBellOnReset "BellOnReset"
-#define XtCBellSuppressTime "BellSuppressTime"
-#define XtCBoldFont "BoldFont"
-#define XtCBoldMode "BoldMode"
-#define XtCBrokenLinuxOSC "BrokenLinuxOSC"
-#define XtCBrokenSelections "BrokenSelections"
-#define XtCBrokenStringTerm "BrokenStringTerm"
-#define XtCC132 "C132"
-#define XtCCacheDoublesize "CacheDoublesize"
-#define XtCCharClass "CharClass"
-#define XtCCjkWidth "CjkWidth"
-#define XtCColorAttrMode "ColorAttrMode"
-#define XtCColorMode "ColorMode"
-#define XtCColumn "Column"
-#define XtCCtrlFKeys "CtrlFKeys"
-#define XtCCurses "Curses"
-#define XtCCursorBlink "CursorBlink"
-#define XtCCursorOffTime "CursorOffTime"
-#define XtCCursorOnTime "CursorOnTime"
-#define XtCCutNewline "CutNewline"
-#define XtCCutToBeginningOfLine "CutToBeginningOfLine"
-#define XtCDecTerminalID "DecTerminalID"
-#define XtCDeleteIsDEL "DeleteIsDEL"
-#define XtCDynamicColors "DynamicColors"
-#define XtCEightBitControl "EightBitControl"
-#define XtCEightBitInput "EightBitInput"
-#define XtCEightBitOutput "EightBitOutput"
-#define XtCFaceName "FaceName"
-#define XtCFaceNameDoublesize "FaceNameDoublesize"
-#define XtCFaceSize "FaceSize"
-#define XtCFont1 "Font1"
-#define XtCFont2 "Font2"
-#define XtCFont3 "Font3"
-#define XtCFont4 "Font4"
-#define XtCFont5 "Font5"
-#define XtCFont6 "Font6"
-#define XtCFontDoublesize "FontDoublesize"
-#define XtCFontStyle "FontStyle"
-#define XtCForceBoxChars "ForceBoxChars"
-#define XtCFreeBoldBox "FreeBoldBox"
-#define XtCHighlightSelection "HighlightSelection"
-#define XtCHpLowerleftBugCompat "HpLowerleftBugCompat"
-#define XtCI18nSelections "I18nSelections"
-#define XtCJumpScroll "JumpScroll"
-#define XtCKeyboardDialect "KeyboardDialect"
-#define XtCLimitResize "LimitResize"
-#define XtCLocale "Locale"
-#define XtCLocaleFilter "LocaleFilter"
-#define XtCLogInhibit "LogInhibit"
-#define XtCLogfile "Logfile"
-#define XtCLogging "Logging"
-#define XtCLoginShell "LoginShell"
-#define XtCMarginBell "MarginBell"
-#define XtCMenuBar "MenuBar"
-#define XtCMenuHeight "MenuHeight"
-#define XtCMetaSendsEscape "MetaSendsEscape"
-#define XtCMkWidth "MkWidth"
-#define XtCModifyCursorKeys "ModifyCursorKeys"
-#define XtCMultiClickTime "MultiClickTime"
-#define XtCMultiScroll "MultiScroll"
-#define XtCNumLock "NumLock"
-#define XtCOldXtermFKeys "OldXtermFKeys"
-#define XtCPopOnBell "PopOnBell"
-#define XtCPrintAttributes "PrintAttributes"
-#define XtCPrinterAutoClose "PrinterAutoClose"
-#define XtCPrinterCommand "PrinterCommand"
-#define XtCPrinterControlMode "PrinterControlMode"
-#define XtCPrinterExtent "PrinterExtent"
-#define XtCPrinterFormFeed "PrinterFormFeed"
-#define XtCRenderFont "RenderFont"
-#define XtCResizeGravity "ResizeGravity"
-#define XtCReverseWrap "ReverseWrap"
-#define XtCRightScrollBar "RightScrollBar"
-#define XtCSaveLines "SaveLines"
-#define XtCScrollBar "ScrollBar"
-#define XtCScrollBarBorder "ScrollBarBorder"
-#define XtCScrollCond "ScrollCond"
-#define XtCScrollLines "ScrollLines"
-#define XtCScrollPos "ScrollPos"
-#define XtCShiftFonts "ShiftFonts"
-#define XtCShowBlinkAsBold "ShowBlinkAsBold"
-#define XtCShowMissingGlyphs "ShowMissingGlyphs"
-#define XtCSignalInhibit "SignalInhibit"
-#define XtCTekInhibit "TekInhibit"
-#define XtCTekSmall "TekSmall"
-#define XtCTekStartup "TekStartup"
-#define XtCTiXtraScroll "TiXtraScroll"
-#define XtCTiteInhibit "TiteInhibit"
-#define XtCToolBar "ToolBar"
-#define XtCTrimSelection "TrimSelection"
-#define XtCUnderLine "UnderLine"
-#define XtCUtf8 "Utf8"
-#define XtCVT100Graphics "VT100Graphics"
-#define XtCVeryBoldColors "VeryBoldColors"
-#define XtCVisualBell "VisualBell"
-#define XtCVisualBellDelay "VisualBellDelay"
-#define XtCWideBoldFont "WideBoldFont"
-#define XtCWideChars "WideChars"
-#define XtCWideFont "WideFont"
-#define XtCXimFont "XimFont"
-#define XtCXmcAttributes "XmcAttributes"
-#define XtCXmcGlitch "XmcGlitch"
-#define XtCXmcInline "XmcInline"
-#define XtCXmcMoveSGR "XmcMoveSGR"
-
-#if defined(NO_ACTIVE_ICON) && !defined(XtNgeometry)
-#define XtNgeometry "geometry"
-#define XtCGeometry "Geometry"
-#endif
-
-#if OPT_COLOR_CLASS
-#define XtCCursorColor "CursorColor"
-#define XtCPointerColor "PointerColor"
-#define XtCHighlightColor "HighlightColor"
-#else
-#define XtCCursorColor XtCForeground
-#define XtCPointerColor XtCForeground
-#define XtCHighlightColor XtCForeground
-#endif
-
-/***====================================================================***/
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-struct XTERM_RESOURCE;
-
-/* Tekproc.c */
-extern int TekInit (void);
-extern int TekPtyData(void);
-extern void ChangeTekColors (TScreen *screen, ScrnColors *pNew);
-extern void TCursorToggle (int toggle);
-extern void TekCopy (void);
-extern void TekEnqMouse (int c);
-extern void TekExpose (Widget w, XEvent *event, Region region);
-extern void TekGINoff (void);
-extern void TekReverseVideo (TScreen *screen);
-extern void TekRun (void);
-extern void TekSetFontSize (int newitem);
-extern void TekSimulatePageButton (Bool reset);
-extern void dorefresh (void);
-
-/* button.c */
-#define MotionOff( s, t ) { \
- (s)->event_mask |= ButtonMotionMask; \
- (s)->event_mask &= ~PointerMotionMask; \
- XSelectInput(XtDisplay((t)), XtWindow((t)), (long) (s)->event_mask); }
-
-#define MotionOn( s, t ) { \
- (s)->event_mask &= ~ButtonMotionMask; \
- (s)->event_mask |= PointerMotionMask; \
- XSelectInput(XtDisplay((t)), XtWindow((t)), (long) (s)->event_mask); }
-
-extern Bool SendMousePosition (Widget w, XEvent* event);
-extern void DiredButton PROTO_XT_ACTIONS_ARGS;
-extern void DisownSelection (XtermWidget termw);
-extern void HandleGINInput PROTO_XT_ACTIONS_ARGS;
-extern void HandleInsertSelection PROTO_XT_ACTIONS_ARGS;
-extern void HandleKeyboardSelectEnd PROTO_XT_ACTIONS_ARGS;
-extern void HandleKeyboardSelectExtend PROTO_XT_ACTIONS_ARGS;
-extern void HandleKeyboardSelectStart PROTO_XT_ACTIONS_ARGS;
-extern void HandleKeyboardStartExtend PROTO_XT_ACTIONS_ARGS;
-extern void HandleSecure PROTO_XT_ACTIONS_ARGS;
-extern void HandleSelectEnd PROTO_XT_ACTIONS_ARGS;
-extern void HandleSelectExtend PROTO_XT_ACTIONS_ARGS;
-extern void HandleSelectSet PROTO_XT_ACTIONS_ARGS;
-extern void HandleSelectStart PROTO_XT_ACTIONS_ARGS;
-extern void HandleStartExtend PROTO_XT_ACTIONS_ARGS;
-extern void ReadLineButton PROTO_XT_ACTIONS_ARGS;
-extern void ResizeSelection (TScreen *screen, int rows, int cols);
-extern void ScrollSelection (TScreen* screen, int amount, Bool);
-extern void TrackMouse (int func, int startrow, int startcol, int firstrow, int lastrow);
-extern void TrackText (int frow, int fcol, int trow, int tcol);
-extern void ViButton PROTO_XT_ACTIONS_ARGS;
-
-#if OPT_DEC_LOCATOR
-extern Bool SendLocatorPosition (Widget w, XEvent* event);
-extern void CheckLocatorPosition (Widget w, XEvent *event);
-extern void GetLocatorPosition (XtermWidget w);
-extern void InitLocatorFilter (XtermWidget w);
-#endif /* OPT_DEC_LOCATOR */
-
-#if OPT_PASTE64
-extern void AppendToSelectionBuffer (TScreen *screen, unsigned c);
-extern void ClearSelectionBuffer (void);
-extern void CompleteSelection (char **args, Cardinal len);
-extern void xtermGetSelection (Widget w, Time ev_time, String *params, Cardinal num_params, Atom *targets);
-#endif
-
-#if OPT_WIDE_CHARS
-extern Bool iswide(int i);
-#endif
-
-/* charproc.c */
-extern int VTInit (void);
-extern int v_write (int f, Char *d, unsigned len);
-extern void FindFontSelection (char *atom_name, Bool justprobe);
-extern void HideCursor (void);
-extern void ShowCursor (void);
-extern void SwitchBufPtrs (TScreen *screen);
-extern void ToggleAlternate (TScreen *screen);
-extern void VTReset (int full, int saved);
-extern void VTRun (void);
-extern void dotext (TScreen *screen, int charset, IChar *buf, Cardinal len);
-extern void resetCharsets (TScreen *screen);
-extern void set_cursor_gcs (TScreen *screen);
-extern void set_max_col(TScreen * screen, int cols);
-extern void set_max_row(TScreen * screen, int rows);
-extern void set_tb_margins (TScreen *screen, int top, int bottom);
-extern void unparseputc (int c, int fd);
-extern void unparseputc1 (int c, int fd);
-extern void unparseputs (char *s, int fd);
-extern void unparseseq (ANSI *ap, int fd);
-extern void xtermAddInput(Widget w);
-
-#if OPT_BLINK_CURS
-extern void ToggleCursorBlink(TScreen *screen);
-#endif
-
-#if OPT_ISO_COLORS
-extern void SGR_Background (int color);
-extern void SGR_Foreground (int color);
-#endif
-
-/* charsets.c */
-extern unsigned xtermCharSetIn (unsigned code, int charset);
-extern int xtermCharSetOut (IChar *buf, IChar *ptr, int charset);
-
-/* cursor.c */
-extern void CarriageReturn (TScreen *screen);
-extern void CursorBack (TScreen *screen, int n);
-extern void CursorDown (TScreen *screen, int n);
-extern void CursorForward (TScreen *screen, int n);
-extern void CursorNextLine (TScreen *screen, int count);
-extern void CursorPrevLine (TScreen *screen, int count);
-extern void CursorRestore (XtermWidget tw);
-extern void CursorSave (XtermWidget tw);
-extern void CursorSet (TScreen *screen, int row, int col, unsigned flags);
-extern void CursorUp (TScreen *screen, int n);
-extern void RevIndex (TScreen *screen, int amount);
-extern void xtermIndex (TScreen *screen, int amount);
-
-#if OPT_TRACE
-extern int set_cur_col(TScreen *screen, int value);
-extern int set_cur_row(TScreen *screen, int value);
-#else
-#define set_cur_col(screen, value) screen->cur_col = value
-#define set_cur_row(screen, value) screen->cur_row = value
-#endif
-
-/* doublechr.c */
-extern void xterm_DECDHL (Bool top);
-extern void xterm_DECSWL (void);
-extern void xterm_DECDWL (void);
-#if OPT_DEC_CHRSET
-extern int xterm_Double_index(unsigned chrset, unsigned flags);
-extern GC xterm_DoubleGC(unsigned chrset, unsigned flags, GC old_gc);
-#endif
-
-/* input.c */
-extern Bool xtermDeleteIsDEL (void);
-extern void Input (TKeyboard *keyboard, TScreen *screen, XKeyEvent *event, Bool eightbit);
-extern void StringInput (TScreen *screen, Char *string, size_t nbytes);
-
-#if OPT_NUM_LOCK
-extern void VTInitModifiers(void);
-#endif
-
-#if OPT_TCAP_QUERY
-extern int xtermcapKeycode(char **params, unsigned *state);
-#endif
-
-/* main.c */
-#ifndef __UNIXOS2__
-#define ENVP_ARG /**/
-#else
-#define ENVP_ARG , char **envp
-#endif
-
-extern int main (int argc, char **argv ENVP_ARG);
-extern int GetBytesAvailable (int fd);
-extern int kill_process_group (int pid, int sig);
-extern int nonblocking_wait (void);
-extern void first_map_occurred (void);
-
-#ifdef SIGNAL_T
-extern SIGNAL_T Exit (int n);
-#endif
-
-#ifndef SIG_ATOMIC_T
-#define SIG_ATOMIC_T int
-#endif
-
-#if OPT_WIDE_CHARS
-extern int (*my_wcwidth)(wchar_t);
-#endif
-
-/* menu.c */
-extern void do_hangup PROTO_XT_CALLBACK_ARGS;
-extern void repairSizeHints (void);
-extern void show_8bit_control (Bool value);
-
-/* misc.c */
-extern Bool AllocateTermColor(XtermWidget, ScrnColors *, int, const char *);
-extern Cursor make_colored_cursor (unsigned cursorindex, unsigned long fg, unsigned long bg);
-extern OptionHelp * sortedOpts(OptionHelp *, XrmOptionDescRec *, Cardinal);
-extern Window WMFrameWindow(XtermWidget termw);
-extern XrmOptionDescRec * sortedOptDescs(XrmOptionDescRec *, Cardinal);
-extern char *SysErrorMsg (int n);
-extern char *udk_lookup (int keycode, int *len);
-extern char *xtermEnvEncoding (void);
-extern char *xtermEnvLocale (void);
-extern char *xtermFindShell(char *leaf, Bool warning);
-extern char *xtermVersion(void);
-extern int XStrCmp (char *s1, char *s2);
-extern int creat_as (uid_t uid, gid_t gid, Bool append, char *pathname, int mode);
-extern int open_userfile (uid_t uid, gid_t gid, char *path, Bool append);
-extern int xerror (Display *d, XErrorEvent *ev);
-extern int xioerror (Display *dpy);
-extern void Bell (int which, int percent);
-extern void ChangeXprop (char *name);
-extern void Changename (char *name);
-extern void Changetitle (char *name);
-extern void Cleanup (int code);
-extern void HandleBellPropertyChange PROTO_XT_EV_HANDLER_ARGS;
-extern void HandleEightBitKeyPressed PROTO_XT_ACTIONS_ARGS;
-extern void HandleEnterWindow PROTO_XT_EV_HANDLER_ARGS;
-extern void HandleFocusChange PROTO_XT_EV_HANDLER_ARGS;
-extern void HandleInterpret PROTO_XT_ACTIONS_ARGS;
-extern void HandleKeyPressed PROTO_XT_ACTIONS_ARGS;
-extern void HandleLeaveWindow PROTO_XT_EV_HANDLER_ARGS;
-extern void HandleStringEvent PROTO_XT_ACTIONS_ARGS;
-extern void Panic (char *s, int a);
-extern void Redraw (void);
-extern void ReverseOldColors (void);
-extern void SysError (int i) GCC_NORETURN;
-extern void VisualBell (void);
-extern void do_dcs (Char *buf, size_t len);
-extern void do_osc (Char *buf, unsigned len, int final);
-extern void do_xevents (void);
-extern void end_tek_mode (void);
-extern void end_vt_mode (void);
-extern void hide_tek_window (void);
-extern void hide_vt_window (void);
-extern void reset_decudk (void);
-extern void set_tek_visibility (Bool on);
-extern void set_vt_visibility (Bool on);
-extern void switch_modes (Bool tovt);
-extern void timestamp_filename(char *dst, const char *src);
-extern void xevents (void);
-extern void xt_error (String message);
-extern void xtermSetenv (char *var, char *value);
-
-#if OPT_DABBREV
-extern void HandleDabbrevExpand PROTO_XT_ACTIONS_ARGS;
-#endif
-
-#if OPT_MAXIMIZE
-extern int QueryMaximize (XtermWidget termw, unsigned *width, unsigned *height);
-extern void HandleDeIconify PROTO_XT_ACTIONS_ARGS;
-extern void HandleIconify PROTO_XT_ACTIONS_ARGS;
-extern void HandleMaximize PROTO_XT_ACTIONS_ARGS;
-extern void HandleRestoreSize PROTO_XT_ACTIONS_ARGS;
-extern void RequestMaximize (XtermWidget termw, int maximize);
-#endif
-
-#if OPT_WIDE_CHARS
-extern Bool xtermEnvUTF8(void);
-#else
-#define xtermEnvUTF8() False
-#endif
-
-#ifdef ALLOWLOGGING
-extern void StartLog (TScreen *screen);
-extern void CloseLog (TScreen *screen);
-extern void FlushLog (TScreen *screen);
-#else
-#define FlushLog(screen) /*nothing*/
-#endif
-
-/* print.c */
-extern Bool xtermHasPrinter (void);
-extern int xtermPrinterControl (int chr);
-extern void setPrinterControlMode (int mode);
-extern void xtermAutoPrint (int chr);
-extern void xtermMediaControl (int param, int private_seq);
-extern void xtermPrintScreen (Bool use_DECPEX);
-
-/* ptydata.c */
-#ifdef VMS
-#define PtySelect int
-#else
-#define PtySelect fd_set
-#endif
-
-extern int readPtyData (TScreen *screen, PtySelect *select_mask, PtyData *data);
-extern void fillPtyData (TScreen *screen, PtyData *data, char *value, int length);
-extern void initPtyData (PtyData **data);
-extern void trimPtyData (TScreen *screen, PtyData *data);
-
-#if OPT_WIDE_CHARS
-extern Bool morePtyData (TScreen *screen, PtyData *data);
-extern Char *convertToUTF8 (Char *lp, unsigned c);
-extern IChar nextPtyData (TScreen *screen, PtyData *data);
-extern void switchPtyData (TScreen *screen, int f);
-extern void writePtyData (int f, IChar *d, unsigned len);
-#else
-#define morePtyData(screen, data) ((data)->last > (data)->next)
-#define nextPtyData(screen, data) (*((data)->next++) & \
- (screen->output_eight_bits \
- ? 0xff \
- : 0x7f))
-#define writePtyData(f,d,len) v_write(f,d,len)
-#endif
-
-/* screen.c */
-extern Bool non_blank_line (ScrnBuf sb, int row, int col, int len);
-extern ScrnBuf Allocate (int nrow, int ncol, Char **addr);
-extern int ScreenResize (TScreen *screen, int width, int height, unsigned *flags);
-extern size_t ScrnPointers (TScreen *screen, size_t len);
-extern void ClearBufRows (TScreen *screen, int first, int last);
-extern void ScreenWrite (TScreen *screen, PAIRED_CHARS(Char *str, Char *str2), unsigned flags, unsigned cur_fg_bg, unsigned length);
-extern void ScrnDeleteChar (TScreen *screen, unsigned n);
-extern void ScrnDeleteLine (TScreen *screen, ScrnBuf sb, int n, int last, unsigned size, unsigned where);
-extern void ScrnFillRectangle (TScreen *, XTermRect *, int, unsigned);
-extern void ScrnInsertChar (TScreen *screen, unsigned n);
-extern void ScrnInsertLine (TScreen *screen, ScrnBuf sb, int last, int where, unsigned n, unsigned size);
-extern void ScrnRefresh (TScreen *screen, int toprow, int leftcol, int nrows, int ncols, Bool force);
-extern void ScrnUpdate (TScreen *screen, int toprow, int leftcol, int nrows, int ncols, Bool force);
-extern void ScrnDisownSelection (TScreen *screen);
-extern void xtermParseRect (TScreen *, int, int *, XTermRect *);
-
-#define ScrnClrFlag(screen, row, flag) \
- SCRN_BUF_FLAGS(screen, row + screen->topline) = \
- (Char *)((long)SCRN_BUF_FLAGS(screen, row + screen->topline) & ~ (flag))
-
-#define ScrnSetFlag(screen, row, flag) \
- SCRN_BUF_FLAGS(screen, row + screen->topline) = \
- (Char *)(((long)SCRN_BUF_FLAGS(screen, row + screen->topline) | (flag)))
-
-#define ScrnTstFlag(screen, row, flag) \
- ((row + screen->savelines + screen->topline) >= 0 && ((long)SCRN_BUF_FLAGS(screen, row + screen->topline) & (flag)) != 0)
-
-#define ScrnClrBlinked(screen, row) ScrnClrFlag(screen, row, BLINK)
-#define ScrnSetBlinked(screen, row) ScrnSetFlag(screen, row, BLINK)
-#define ScrnTstBlinked(screen, row) ScrnTstFlag(screen, row, BLINK)
-
-#define ScrnClrWrapped(screen, row) ScrnClrFlag(screen, row, LINEWRAPPED)
-#define ScrnSetWrapped(screen, row) ScrnSetFlag(screen, row, LINEWRAPPED)
-#define ScrnTstWrapped(screen, row) ScrnTstFlag(screen, row, LINEWRAPPED)
-
-#define ScrnHaveSelection(screen) \
- ((screen)->startHRow != (screen)->endHRow \
- || (screen)->startHCol != (screen)->endHCol)
-
-#define ScrnAreLinesInSelection(screen, first, last) \
- ((last) >= (screen)->startHRow && (first) <= (screen)->endHRow)
-
-#define ScrnIsLineInSelection(screen, line) \
- ((line) >= (screen)->startHRow && (line) <= (screen)->endHRow)
-
-#define ScrnHaveLineMargins(screen) \
- ((screen)->top_marg != 0 \
- || ((screen)->bot_marg != screen->max_row))
-
-#define ScrnIsLineInMargins(screen, line) \
- ((line) >= (screen)->top_marg && (line) <= (screen)->bot_marg)
-
-#if OPT_DEC_RECTOPS
-extern void ScrnCopyRectangle (TScreen *, XTermRect *, int, int *);
-extern void ScrnMarkRectangle (TScreen *, XTermRect *, Bool, int, int *);
-extern void ScrnWipeRectangle (TScreen *, XTermRect *);
-#endif
-
-#if OPT_WIDE_CHARS
-extern void ChangeToWide(TScreen * screen);
-#endif
-
-/* scrollbar.c */
-extern void DoResizeScreen (XtermWidget xw);
-extern void HandleScrollBack PROTO_XT_ACTIONS_ARGS;
-extern void HandleScrollForward PROTO_XT_ACTIONS_ARGS;
-extern void ResizeScrollBar (XtermWidget xw);
-extern void ScrollBarDrawThumb (Widget scrollWidget);
-extern void ScrollBarOff (TScreen *screen);
-extern void ScrollBarOn (XtermWidget xw, int init, int doalloc);
-extern void ScrollBarReverseVideo (Widget scrollWidget);
-extern void ToggleScrollBar (XtermWidget w);
-extern void WindowScroll (TScreen *screen, int top);
-
-#ifdef SCROLLBAR_RIGHT
-extern void updateRightScrollbar(XtermWidget xw);
-#else
-#define updateRightScrollbar(xw) /* nothing */
-#endif
-
-/* tabs.c */
-extern Bool TabToNextStop (TScreen *screen);
-extern Bool TabToPrevStop (TScreen *screen);
-extern void TabClear (Tabs tabs, int col);
-extern void TabReset (Tabs tabs);
-extern void TabSet (Tabs tabs, int col);
-extern void TabZonk (Tabs tabs);
-
-/* util.c */
-extern GC updatedXtermGC (TScreen *screen, unsigned flags, unsigned fg_bg, Bool hilite);
-extern int AddToRefresh (TScreen *screen);
-extern int HandleExposure (TScreen *screen, XEvent *event);
-extern int char2lower (int ch);
-extern int drawXtermText (TScreen *screen, unsigned flags, GC gc, int x, int y, int chrset, PAIRED_CHARS(Char *text, Char *text2), Cardinal len, int on_wide);
-extern void ChangeAnsiColors (XtermWidget tw);
-extern void ChangeColors (XtermWidget tw, ScrnColors *pNew);
-extern void ClearRight (TScreen *screen, int n);
-extern void ClearScreen (TScreen *screen);
-extern void DeleteChar (TScreen *screen, unsigned n);
-extern void DeleteLine (TScreen *screen, int n);
-extern void FlushScroll (TScreen *screen);
-extern void GetColors (XtermWidget tw, ScrnColors *pColors);
-extern void InsertChar (TScreen *screen, unsigned n);
-extern void InsertLine (TScreen *screen, int n);
-extern void RevScroll (TScreen *screen, int amount);
-extern void ReverseVideo (XtermWidget termw);
-extern void decode_keyboard_type (struct XTERM_RESOURCE *rp);
-extern void decode_wcwidth (int mode);
-extern void do_erase_display (TScreen *screen, int param, int mode);
-extern void do_erase_line (TScreen *screen, int param, int mode);
-extern void init_keyboard_type (xtermKeyboardType, Bool set);
-extern void recolor_cursor (Cursor cursor, unsigned long fg, unsigned long bg);
-extern void resetXtermGC (TScreen *screen, unsigned flags, Bool hilite);
-extern void scrolling_copy_area (TScreen *screen, int firstline, int nlines, int amount);
-extern void set_keyboard_type (xtermKeyboardType type, Bool set);
-extern void toggle_keyboard_type (xtermKeyboardType type);
-extern void update_keyboard_type (void);
-extern void xtermScroll (TScreen *screen, int amount);
-extern void xtermSizeHints (XtermWidget xw, XSizeHints *sizehints, int scrollbarWidth);
-
-#if OPT_ISO_COLORS
-
-extern unsigned extract_fg (unsigned color, unsigned flags);
-extern unsigned extract_bg (unsigned color, unsigned flags);
-extern unsigned makeColorPair (int fg, int bg);
-extern void ClearCurBackground (TScreen *screen, int top, int left, unsigned height, unsigned width);
-
-#define xtermColorPair() makeColorPair(term->sgr_foreground, term->sgr_background)
-
-#define getXtermForeground(flags, color) \
- (((flags) & FG_COLOR) && ((int)(color) >= 0 && (color) < MAXCOLORS) \
- ? GET_COLOR_RES(term->screen.Acolors[color]) \
- : T_COLOR(&(term->screen), TEXT_FG))
-
-#define getXtermBackground(flags, color) \
- (((flags) & BG_COLOR) && ((int)(color) >= 0 && (color) < MAXCOLORS) \
- ? GET_COLOR_RES(term->screen.Acolors[color]) \
- : T_COLOR(&(term->screen), TEXT_BG))
-
-#if OPT_COLOR_RES
-#define GET_COLOR_RES(res) xtermGetColorRes(&(res))
-#define SET_COLOR_RES(res,color) (res)->value = color
-#define T_COLOR(v,n) (v)->Tcolors[n].value
-extern Pixel xtermGetColorRes(ColorRes *res);
-#else
-#define GET_COLOR_RES(res) res
-#define SET_COLOR_RES(res,color) *res = color
-#define T_COLOR(v,n) (v)->Tcolors[n]
-#endif
-
-#if OPT_EXT_COLORS
-#define ExtractForeground(color) ((color >> 8) & 0xff)
-#define ExtractBackground(color) (color & 0xff)
-#else
-#define ExtractForeground(color) ((color >> 4) & 0xf)
-#define ExtractBackground(color) (color & 0xf)
-#endif
-
-#define checkVeryBoldAttr(flags, fg, code, attr) \
- if ((flags & FG_COLOR) != 0 \
- && (screen->veryBoldColors & attr) == 0 \
- && (flags & attr) != 0 \
- && (fg == code)) \
- flags &= ~(attr)
-
-#define checkVeryBoldColors(flags, fg) \
- checkVeryBoldAttr(flags, fg, COLOR_RV, INVERSE); \
- checkVeryBoldAttr(flags, fg, COLOR_UL, UNDERLINE); \
- checkVeryBoldAttr(flags, fg, COLOR_BD, BOLD); \
- checkVeryBoldAttr(flags, fg, COLOR_BL, BLINK)
-
-#else /* !OPT_ISO_COLORS */
-
-#define ClearCurBackground(screen, top, left, height, width) \
- XClearArea (screen->display, VWindow(screen), \
- left, top, width, height, FALSE)
-
-#define extract_fg(color, flags) term->cur_foreground
-#define extract_bg(color, flags) term->cur_background
-
- /* FIXME: Reverse-Video? */
-#define T_COLOR(v,n) (v)->Tcolors[n]
-#define getXtermBackground(flags, color) T_COLOR(&(term->screen), TEXT_BG)
-#define getXtermForeground(flags, color) T_COLOR(&(term->screen), TEXT_FG)
-#define makeColorPair(fg, bg) 0
-#define xtermColorPair() 0
-
-#define checkVeryBoldColors(flags, fg) /* nothing */
-
-#endif /* OPT_ISO_COLORS */
-
-#if OPT_DEC_CHRSET
-#define curXtermChrSet(row) \
- ((CSET_DOUBLE(SCRN_ROW_CSET((&term->screen), row))) \
- ? SCRN_ROW_CSET((&term->screen), row) \
- : (term->screen).cur_chrset)
-#else
-#define curXtermChrSet(row) 0
-#endif
-
-extern unsigned getXtermCell (TScreen *screen, int row, int col);
-extern void putXtermCell (TScreen *screen, int row, int col, int ch);
-
-#if OPT_WIDE_CHARS
-extern unsigned getXtermCellComb1 (TScreen *screen, int row, int col);
-extern unsigned getXtermCellComb2 (TScreen *screen, int row, int col);
-extern void addXtermCombining (TScreen *screen, int row, int col, unsigned ch);
-#endif
-
-#if OPT_XMC_GLITCH
-extern void Mark_XMC (TScreen *screen, int param);
-extern void Jump_XMC (TScreen *screen);
-extern void Resolve_XMC (TScreen *screen);
-#endif
-
-#if OPT_WIDE_CHARS
-unsigned visual_width(PAIRED_CHARS(Char *str, Char *str2), Cardinal len);
-#else
-#define visual_width(a, b) (b)
-#endif
-
-#define BtoS(b) ((b) ? "on" : "off")
-#define NonNull(s) ((s) ? (s) : "<null>")
-
-#ifdef __cplusplus
- }
-#endif
-
-#endif /* included_xterm_h */
diff --git a/nx-X11/programs/xterm/xterm.log.html b/nx-X11/programs/xterm/xterm.log.html
deleted file mode 100644
index d9628696d..000000000
--- a/nx-X11/programs/xterm/xterm.log.html
+++ /dev/null
@@ -1,6641 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<!--
- *****************************************************************************
- * Copyright 1996-2004,2005 by Thomas E. Dickey *
- * All Rights Reserved. *
- * *
- * Permission to use, copy, modify, and distribute this software and its *
- * documentation for any purpose and without fee is hereby granted, provided *
- * that the above copyright notice appear in all copies and that both that *
- * copyright notice and this permission notice appear in supporting *
- * documentation, and that the name of the above listed copyright holder(s) *
- * not be used in advertising or publicity pertaining to distribution of the *
- * software without specific, written prior permission. *
- * *
- * THE ABOVE LISTED COPYRIGHT HOLDER(S) DISCLAIM ALL WARRANTIES WITH REGARD *
- * TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND *
- * FITNESS, IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE *
- * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES *
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN *
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF *
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. *
- *****************************************************************************
- $XTermId: xterm.log.html,v 1.347 2005/11/13 23:10:36 tom Exp $
- $XFree86: xc/programs/xterm/xterm.log.html,v 1.143 2005/11/13 23:10:36 dickey Exp $
- -->
-<HTML>
-<HEAD>
-<TITLE>XTERM - Change Log</TITLE>
-<LINK REV=MADE HREF="mailto:dickey@invisible-island.net">
-<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-</HEAD>
-<BODY>
-<HR>
-Copyright 1997-2004,2005 by <A
-HREF="mailto:dickey@invisible-island.net">Thomas E. Dickey</A>
-<HR>
-<H1>Contents</H1>
-This file contains a list of the changes that I have made for xterm,
-from the notes that I add when submitting a patch.
-<P>
-You should note that other changes have been made as well, by other people,
-to fix bugs and correct ifdef's for portability.
-Most of these are summarized in the XFree86 CHANGELOG
-(found in the unbundled tree, xc/programs/Xserver/hw/xfree86).
-<a href="http://invisible-island.net/xterm/xterm.log.html">Here</a>
-is the latest version of this file.
-
-<UL>
-<LI><A HREF="#xterm_207">Patch #207 - 2005/11/13 - XFree86 4.5.99.16</A>
-<LI><A HREF="#xterm_206">Patch #206 - 2005/11/3 - XFree86 4.5.99.15</A>
-<LI><A HREF="#xterm_205">Patch #205 - 2005/9/18 - XFree86 4.5.99.12</A>
-<LI><A HREF="#xterm_204">Patch #204 - 2005/8/4 - XFree86 4.5.99.9</A>
-<LI><A HREF="#xterm_203">Patch #203 - 2005/7/6 - XFree86 4.5.99.7</A>
-<LI><A HREF="#xterm_202">Patch #202 - 2005/5/2 - XFree86 4.5.99.3</A>
-<LI><A HREF="#xterm_201">Patch #201 - 2005/4/21 - XFree86 4.5.99.2</A>
-<LI><A HREF="#xterm_200">Patch #200 - 2005/2/6 - XFree86 4.4.99.23</A>
-<LI><A HREF="#xterm_199">Patch #199 - 2005/1/17 - XFree86 4.4.99.22</A>
-<LI><A HREF="#xterm_198">Patch #198 - 2005/1/13 - XFree86 4.4.99.21</A>
-<LI><A HREF="#xterm_197">Patch #197 - 2004/11/30 - XFree86 4.4.99.19</A>
-<LI><A HREF="#xterm_196">Patch #196 - 2004/8/15 - XFree86 4.4.99.12</A>
-<LI><A HREF="#xterm_195">Patch #195 - 2004/8/8 - XFree86 4.4.99.11</A>
-<LI><A HREF="#xterm_194">Patch #194 - 2004/7/27 - XFree86 4.4.99.11</A>
-<LI><A HREF="#xterm_193">Patch #193 - 2004/7/19 - XFree86 4.4.99.10</A>
-<LI><A HREF="#xterm_192">Patch #192 - 2004/7/12 - XFree86 4.4.99.9</A>
-<LI><A HREF="#xterm_191">Patch #191 - 2004/6/6 - XFree86 4.4.99.7</A>
-<LI><A HREF="#xterm_190">Patch #190 - 2004/5/25 - XFree86 4.4.99.6</A>
-<LI><A HREF="#xterm_189">Patch #189 - 2004/5/16 - XFree86 4.4.99.6</A>
-<LI><A HREF="#xterm_188">Patch #188 - 2004/5/12 - XFree86 4.4.99.6</A>
-<LI><A HREF="#xterm_187">Patch #187 - 2004/4/27 - XFree86 4.4.99.4</A>
-<LI><A HREF="#xterm_186">Patch #186 - 2004/4/18 - XFree86 4.4.99.4</A>
-<LI><A HREF="#xterm_185">Patch #185 - 2004/3/3 - XFree86 4.4</A>
-<LI><A HREF="#xterm_184">Patch #184 - 2003/12/31 - XFree86 4.3.99.903</A>
-<LI><A HREF="#xterm_183">Patch #183 - 2003/12/26 - XFree86 4.3.99.903</A>
-<LI><A HREF="#xterm_182">Patch #182 - 2003/12/2 - XFree86 4.3.99.901</A>
-<LI><A HREF="#xterm_181">Patch #181 - 2003/10/26 - XFree86 4.3.99.15</A>
-<LI><A HREF="#xterm_180">Patch #180 - 2003/10/12 - XFree86 4.3.99.15</A>
-<LI><A HREF="#xterm_179">Patch #179 - 2003/5/21 - XFree86 4.3.99.5</A>
-<LI><A HREF="#xterm_178">Patch #178 - 2003/5/18 - XFree86 4.3.99.5</A>
-<LI><A HREF="#xterm_177">Patch #177 - 2003/3/23 - XFree86 4.3.0</A>
-<LI><A HREF="#xterm_176">Patch #176 - 2003/3/22 - XFree86 4.3.0</A>
-<LI><A HREF="#xterm_175">Patch #175 - 2003/3/9 - XFree86 4.3.0</A>
-<LI><A HREF="#xterm_174">Patch #174 - 2003/2/25 - XFree86 4.2.99.903</A>
-<LI><A HREF="#xterm_173">Patch #173 - 2003/2/6 - XFree86 4.2.99.902</A>
-<LI><A HREF="#xterm_172">Patch #172 - 2002/12/27 - XFree86 4.2.99.3</A>
-<LI><A HREF="#xterm_171">Patch #171 - 2002/12/12 - XFree86 4.2.99.3</A>
-<LI><A HREF="#xterm_170">Patch #170 - 2002/10/13 - XFree86 4.2.1</A>
-<LI><A HREF="#xterm_169">Patch #169 - 2002/10/5 - XFree86 4.2.1</A>
-<LI><A HREF="#xterm_168">Patch #168 - 2002/9/29 - XFree86 4.2.1</A>
-<LI><A HREF="#xterm_167">Patch #167 - 2002/8/24 - XFree86 4.2.0</A>
-<LI><A HREF="#xterm_166">Patch #166 - 2002/3/25 - XFree86 4.2.0</A>
-<LI><A HREF="#xterm_165">Patch #165 - 2002/1/5 - XFree86 4.1.0</A>
-<LI><A HREF="#xterm_164">Patch #164 - 2001/11/13 - XFree86 4.1.0</A>
-<LI><A HREF="#xterm_163">Patch #163 - 2001/11/04 - XFree86 4.1.0</A>
-<LI><A HREF="#xterm_162">Patch #162 - 2001/10/23 - XFree86 4.1.0</A>
-<LI><A HREF="#xterm_161">Patch #161 - 2001/10/10 - XFree86 4.1.0</A>
-<LI><A HREF="#xterm_160">Patch #160 - 2001/10/7 - XFree86 4.1.0</A>
-<LI><A HREF="#xterm_159">Patch #159 - 2001/9/19 - XFree86 4.1.0</A>
-<LI><A HREF="#xterm_158">Patch #158 - 2001/9/8 - XFree86 4.1.0</A>
-<LI><A HREF="#xterm_157">Patch #157 - 2001/6/18 - XFree86 4.1.0</A>
-<LI><A HREF="#xterm_156">Patch #156 - 2001/4/28 - XFree86 4.0.3</A>
-<LI><A HREF="#xterm_155">Patch #155 - 2001/4/20 - XFree86 4.0.3</A>
-<LI><A HREF="#xterm_154">Patch #154 - 2001/4/11 - XFree86 4.0.3</A>
-<LI><A HREF="#xterm_153">Patch #153 - 2001/3/29 - XFree86 4.0.3</A>
-<LI><A HREF="#xterm_152">Patch #152 - 2001/3/13 - XFree86 4.0.2</A>
-<LI><A HREF="#xterm_151">Patch #151 - 2001/3/10 - XFree86 4.0.2</A>
-<LI><A HREF="#xterm_150">Patch #150 - 2000/12/29 - XFree86 4.0.2</A>
-<LI><A HREF="#xterm_149">Patch #149 - 2000/12/6 - XFree86 4.0.1h</A>
-<LI><A HREF="#xterm_148">Patch #148 - 2000/10/31 - XFree86 4.0.1d</A>
-<LI><A HREF="#xterm_147">Patch #147 - 2000/10/26 - XFree86 4.0.1c</A>
-<LI><A HREF="#xterm_146">Patch #146 - 2000/9/12 - XFree86 4.0.1c</A>
-<LI><A HREF="#xterm_145">Patch #145 - 2000/9/11 - XFree86 4.0.1c</A>
-<LI><A HREF="#xterm_144">Patch #144 - 2000/8/23 - XFree86 4.0.1b</A>
-<LI><A HREF="#xterm_143">Patch #143 - 2000/8/19 - XFree86 4.0.1b</A>
-<LI><A HREF="#xterm_142">Patch #142 - 2000/8/18 - XFree86 4.0.1b</A>
-<LI><A HREF="#xterm_141">Patch #141 - 2000/7/14 - XFree86 4.0.1b</A>
-<LI><A HREF="#xterm_140">Patch #140 - 2000/7/23 - XFree86 4.0.1</A>
-<LI><A HREF="#xterm_139">Patch #139 - 2000/6/17 - XFree86 4.0d</A>
-<LI><A HREF="#xterm_138">Patch #138 - 2000/6/15 - XFree86 4.0c</A>
-<LI><A HREF="#xterm_137">Patch #137 - 2000/6/10 - XFree86 4.0b</A>
-<LI><A HREF="#xterm_136">Patch #136 - 2000/6/3 - XFree86 4.0b</A>
-<LI><A HREF="#xterm_135">Patch #135 - 2000/5/29 - XFree86 4.0b</A>
-<LI><A HREF="#xterm_134">Patch #134 - 2000/5/28 - XFree86 4.0b</A>
-<LI><A HREF="#xterm_133">Patch #133 - 2000/5/2 - XFree86 4.0a</A>
-<LI><A HREF="#xterm_132">Patch #132 - 2000/4/11 - XFree86 4.0a</A>
-<LI><A HREF="#xterm_131">Patch #131 - 2000/3/3 - XFree86 3.9.18b</A>
-<LI><A HREF="#xterm_130">Patch #130 - 2000/3/1 - XFree86 3.9.18a</A>
-<LI><A HREF="#xterm_129">Patch #129 - 2000/2/26 - XFree86 3.9.18a</A>
-<LI><A HREF="#xterm_128">Patch #128 - 2000/2/17 - XFree86 3.9.18</A>
-<LI><A HREF="#xterm_127">Patch #127 - 2000/2/12 - XFree86 3.9.17e</A>
-<LI><A HREF="#xterm_126">Patch #126 - 2000/2/8 - XFree86 3.9.17c</A>
-<LI><A HREF="#xterm_125">Patch #125 - 2000/1/31 - XFree86 3.9.17c</A>
-<LI><A HREF="#xterm_124">Patch #124 - 2000/1/27 - XFree86 3.9.17b</A>
-<LI><A HREF="#xterm_123">Patch #123 - 2000/1/22 - XFree86 3.9.17a</A>
-<LI><A HREF="#xterm_122">Patch #122 - 1999/12/28 - XFree86 3.9.16f</A>
-<LI><A HREF="#xterm_121">Patch #121 - 1999/11/14 - XFree86 3.9.16c</A>
-<LI><A HREF="#xterm_120">Patch #120 - 1999/10/28 - XFree86 3.9.16c</A>
-<LI><A HREF="#xterm_119">Patch #119 - 1999/10/16 - XFree86 3.9.16c</A>
-<LI><A HREF="#xterm_118">Patch #118 - 1999/10/5 - XFree86 3.9.16b</A>
-<LI><A HREF="#xterm_117">Patch #117 - 1999/9/29 - XFree86 3.9.16b</A>
-<LI><A HREF="#xterm_116">Patch #116 - 1999/9/25 - XFree86 3.9.16a</A>
-<LI><A HREF="#xterm_115">Patch #115 - 1999/9/18 - XFree86 3.9.16a</A>
-<LI><A HREF="#xterm_114">Patch #114 - 1999/9/15 - XFree86 3.9.16</A>
-<LI><A HREF="#xterm_113">Patch #113 - 1999/8/15 - XFree86 3.9.15b</A>
-<LI><A HREF="#xterm_112">Patch #112 - 1999/7/17 - XFree86 3.9Pw</A>
-<LI><A HREF="#xterm_111">Patch #111 - 1999/7/10 - XFree86 3.9Pw</A>
-<LI><A HREF="#xterm_110">Patch #110 - 1999/6/29 - XFree86 3.9Pu</A>
-<LI><A HREF="#xterm_109">Patch #109 - 1999/6/23 - XFree86 3.9Pt</A>
-<LI><A HREF="#xterm_108">Patch #108 - 1999/6/19 - XFree86 3.9Ps</A>
-<LI><A HREF="#xterm_107">Patch #107 - 1999/6/12 - XFree86 3.9Pq</A>
-<LI><A HREF="#xterm_106">Patch #106 - 1999/6/9 - XFree86 3.9Pq</A>
-<LI><A HREF="#xterm_105">Patch #105 - 1999/6/5 - XFree86 3.9Pp</A>
-<LI><A HREF="#xterm_104">Patch #104 - 1999/5/30 - XFree86 3.9Pn</A>
-<LI><A HREF="#xterm_103">Patch #103 - 1999/5/14 - XFree86 3.9Pm</A>
-<LI><A HREF="#xterm_102">Patch #102 - 1999/5/12 - XFree86 3.9Pm</A>
-<LI><A HREF="#xterm_101">Patch #101 - 1999/5/10 - XFree86 3.9Pm</A>
-<LI><A HREF="#xterm_100">Patch #100 - 1999/5/3 - XFree86 3.9Pl</A>
-<LI><A HREF="#xterm_99">Patch #99 - 1999/5/2 - XFree86 3.9Pk</A>
-<LI><A HREF="#xterm_98">Patch #98 - 1999/4/26 - XFree86 3.9Pk</A>
-<LI><A HREF="#xterm_97">Patch #97 - 1999/4/25 - XFree86 3.9Pk</A>
-<LI><A HREF="#xterm_96">Patch #96 - 1999/4/19 - XFree86 3.9Pj</A>
-<LI><A HREF="#xterm_95">Patch #95 - 1999/4/5 - XFree86 3.9Ph</A>
-<LI><A HREF="#xterm_94">Patch #94 - 1999/3/27 - XFree86 3.9Pf</A>
-<LI><A HREF="#xterm_93">Patch #93 - 1999/3/14 - XFree86 3.9Pd</A>
-<LI><A HREF="#xterm_92">Patch #92 - 1999/2/5 - XFree86 3.9Nz</A>
-<LI><A HREF="#xterm_91">Patch #91 - 1999/1/21 - XFree86 3.9Nw</A>
-<LI><A HREF="#xterm_90">Patch #90 - 1998/12/13 - XFree86 3.9Nq</A>
-<LI><A HREF="#xterm_89">Patch #89 - 1998/11/20 - XFree86 3.9Nm</A>
-<LI><A HREF="#xterm_88">Patch #88 - 1998/10/31 - XFree86 3.9Nk and 3.3.2h</A>
-<LI><A HREF="#xterm_87">Patch #87 - 1998/10/21 - XFree86 3.9Nj and 3.3.2f</A>
-<LI><A HREF="#xterm_86">Patch #86 - 1998/10/14 - XFree86 3.9Nj and 3.3.2e</A>
-<LI><A HREF="#xterm_85">Patch #85 - 1998/10/12 - XFree86 3.9Nj and 3.3.2e</A>
-<LI><A HREF="#xterm_84">Patch #84 - 1998/10/9 - XFree86 3.9Ni and 3.3.2e</A>
-<LI><A HREF="#sync_83">Resync #83 - 1998/10/7 - XFree86 3.3.2e</A>
-<LI><A HREF="#xterm_83">Patch #83 - 1998/8/25 - XFree86 3.9Nb</A>
-<LI><A HREF="#xterm_82">Patch #82 - 1998/7/15 - XFree86 3.9Aj</A>
-<LI><A HREF="#xterm_81">Patch #81 - 1998/7/14 - XFree86 3.9Aj</A>
-<LI><A HREF="#xterm_80">Patch #80 - 1998/6/29 - XFree86 3.9Ai</A>
-<LI><A HREF="#xterm_79">Patch #79 - 1998/6/28 - XFree86 3.9Ai</A>
-<LI><A HREF="#xterm_78">Patch #78 - 1998/6/3 - XFree86 3.9Ah and 3.3.2</A>
-<LI><A HREF="#xterm_77">Patch #77 - 1998/5/26 - XFree86 3.9Ah and 3.3.2</A>
-<LI><A HREF="#xterm_76">Patch #76 - 1998/5/8 - XFree86 3.9Ah and 3.3.2</A>
-<LI><A HREF="#xterm_75">Patch #75 - 1998/5/7 - XFree86 3.9Ah and 3.3.2</A>
-<LI><A HREF="#xterm_74">Patch #74 - 1998/4/27 - XFree86 3.9Ag and 3.3.2</A>
-<LI><A HREF="#xterm_73">Patch #73 - 1998/4/25 - XFree86 3.9Ag and 3.3.2</A>
-<LI><A HREF="#xterm_72">Patch #72 - 1998/4/17 - XFree86 3.9Ag and 3.3.2</A>
-<LI><A HREF="#xterm_71">Patch #71 - 1998/4/12 - XFree86 3.9Ag and 3.3.2</A>
-<LI><A HREF="#xterm_70">Patch #70 - 1998/3/29 - XFree86 3.9Af and 3.3.2</A>
-<LI><A HREF="#xterm_69">Patch #69 - 1998/3/16 - XFree86 3.9Ad and 3.3.2</A>
-<LI><A HREF="#xterm_68">Patch #68 - 1998/3/4 - XFree86 3.9Ad and 3.3.1z</A>
-<LI><A HREF="#xterm_67">Patch #67 - 1998/2/23 - XFree86 3.9Ad and 3.3.1e</A>
-<LI><A HREF="#xterm_66">Patch #66 - 1998/2/16 - XFree86 3.9Ad and 3.3.1d</A>
-<LI><A HREF="#xterm_65">Patch #65 - 1998/2/14 - XFree86 3.9Ad and 3.3.1c</A>
-<LI><A HREF="#xterm_64">Patch #64 - 1998/2/8 - XFree86 3.9Ad</A>
-<LI><A HREF="#xterm_63">Patch #63 - 1998/2/5 - XFree86 3.9Ad</A>
-<LI><A HREF="#xterm_62">Patch #62 - 1998/1/23 - XFree86 3.9Ac</A>
-<LI><A HREF="#xterm_61">Patch #61 - 1998/1/17 - XFree86 3.9Ac</A>
-<LI><A HREF="#xterm_60">Patch #60 - 1998/1/10 - XFree86 3.9Ab</A>
-<LI><A HREF="#xterm_59">Patch #59 - 1998/1/5 - XFree86 3.9Ab</A>
-<LI><A HREF="#xterm_58">Patch #58 - 1998/1/3 - XFree86 3.9Ab</A>
-<LI><A HREF="#xterm_57">Patch #57 - 1997/12/26 - XFree86 3.9Aa</A>
-<LI><A HREF="#xterm_56">Patch #56 - 1997/11/28 - XFree86 3.9x</A>
-<LI><A HREF="#xterm_55">Patch #55 - 1997/11/25 - XFree86 3.9x</A>
-<LI><A HREF="#xterm_54">Patch #54 - 1997/10/17 - XFree86 3.9s</A>
-<LI><A HREF="#xterm_53">Patch #53 - 1997/10/12 - XFree86 3.9r</A>
-<LI><A HREF="#xterm_52">Patch #52 - 1997/9/29 - XFree86 3.9q</A>
-<LI><A HREF="#xterm_51">Patch #51 - 1997/9/15 - XFree86 3.9p</A>
-<LI><A HREF="#xterm_50">Patch #50 - 1997/8/22 - XFree86 3.9m</A>
-<LI><A HREF="#xterm_49">Patch #49 - 1997/8/10 - XFree86 3.9k</A>
-<LI><A HREF="#xterm_48">Patch #48 - 1997/7/26 - XFree86 3.9j</A>
-<LI><A HREF="#xterm_47">Patch #47 - 1997/7/13 - XFree86 3.9i</A>
-<LI><A HREF="#xterm_46">Patch #46 - 1997/7/4 - XFree86 3.9h</A>
-<LI><A HREF="#xterm_45">Patch #45 - 1997/7/2 - XFree86 3.9h</A>
-<LI><A HREF="#xterm_44">Patch #44 - 1997/6/22 - XFree86 3.9g</A>
-<LI><A HREF="#xterm_43">Patch #43 - 1997/6/10 - XFree86 3.9d</A>
-<LI><A HREF="#xterm_42">Patch #42 - 1997/6/8 - XFree86 3.2Xl</A>
-<LI><A HREF="#xterm_41">Patch #41 - 1997/5/28 - XFree86 3.2Xl</A>
-<LI><A HREF="#xterm_40">Patch #40 - 1997/5/26 - XFree86 3.2Xl</A>
-<LI><A HREF="#xterm_39">Patch #39 - 1997/5/24 - XFree86 3.2Xl</A>
-<LI><A HREF="#xterm_38">Patch #38 - 1997/5/22 - XFree86 3.2Xh</A>
-<LI><A HREF="#xterm_37">Patch #37 - 1997/5/7 - XFree86 3.9a</A>
-<LI><A HREF="#xterm_36">Patch #36 - 1997/1/16 - XFree86 3.2r</A>
-<LI><A HREF="#xterm_35">Patch #35 - 1997/1/7 - XFree86 3.2o</A>
-<LI><A HREF="#xterm_34">Patch #34 - 1997/1/5 - XFree86 3.2o</A>
-<LI><A HREF="#xterm_33">Patch #33 - 1996/11/24 - XFree86 3.2</A>
-<LI><A HREF="#xterm_32">Patch #32 - 1996/11/21 - XFree86 3.2</A>
-<LI><A HREF="#xterm_31">Patch #31 - 1996/11/16 - XFree86 3.2</A>
-<LI><A HREF="#xterm_30">Patch #30 - 1996/11/16 - XFree86 3.2</A>
-<LI><A HREF="#xterm_29">Patch #29 - 1996/9/15 - XFree86 3.1.2Gb</A>
-<LI><A HREF="#xterm_28">Patch #28 - 1996/8/31 - XFree86 3.1.2F</A>
-<LI><A HREF="#xterm_27">Patch #27 - 1996/8/21 - XFree86 3.1.2Ek</A>
-<LI><A HREF="#xterm_26">Patch #26 - 1996/8/20 - XFree86 3.1.2Ei</A>
-<LI><A HREF="#xterm_25">Patch #25 - 1996/8/18 - XFree86 3.1.2Ei</A>
-<LI><A HREF="#xterm_24">Patch #24 - 1996/8/11 - XFree86 3.1.2Ee</A>
-<LI><A HREF="#xterm_23">Patch #23 - 1996/7/31 - XFree86 3.1.2Ec</A>
-<LI><A HREF="#xterm_22">Patch #22 - 1996/7/26 - XFree86 3.1.2Ec</A>
-<LI><A HREF="#xterm_21">Patch #21 - 1996/7/24 - XFree86 3.1.2Ec</A>
-<LI><A HREF="#xterm_20">Patch #20 - 1996/7/24 - XFree86 3.1.2Ec</A>
-<LI><A HREF="#xterm_19">Patch #19 - 1996/7/21 - XFree86 3.1.2Ec</A>
-<LI><A HREF="#xterm_18">Patch #18 - 1996/7/18 - XFree86 3.1.2Ec</A>
-<LI><A HREF="#xterm_17">Patch #17 - 1996/7/2 - XFree86 3.1.2Eb</A>
-<LI><A HREF="#xterm_16">Patch #16 - 1996/6/25 - XFree86 3.1.2Ea</A>
-<LI><A HREF="#xterm_15">Patch #15 - 1996/5/29 - XFree86 3.1.2E</A>
-<LI><A HREF="#xterm_14">Patch #14 - 1996/5/12 - XFree86 3.1.2Dj</A>
-<LI><A HREF="#xterm_13">Patch #13 - 1996/4/23 - XFree86 3.1.2Df</A>
-<LI><A HREF="#xterm_12">Patch #12 - 1996/3/16 - XFree86 3.1.2Dc</A>
-<LI><A HREF="#xterm_11">Patch #11 - 1996/3/5 - XFree86 3.1.2Db</A>
-<LI><A HREF="#xterm_10">Patch #10 - 1996/2/14 - XFree86 3.1.2Cd</A>
-<LI><A HREF="#xterm_09">Patch #9 - 1996/2/10 - XFree86 3.1.2Cb</A>
-<LI><A HREF="#xterm_08">Patch #8 - 1996/2/9 - XFree86 3.1.2Cb</A>
-<LI><A HREF="#xterm_07">Patch #7 - 1996/1/28 - XFree86 3.1.2n</A>
-<LI><A HREF="#xterm_06">Patch #6 - 1996/1/8</A>
-<LI><A HREF="#xterm_05">Patch #5 - 1996/1/7</A>
-<LI><A HREF="#xterm_04">Patch #4 - 1996/1/7</A>
-<LI><A HREF="#xterm_03">Patch #3 - 1996/1/7</A>
-<LI><A HREF="#xterm_02">Patch #2 - 1996/1/7</A>
-<LI><A HREF="#xterm_01">Patch #1 - 1996/1/6</A>
-</UL>
-
-<H1><A NAME="xterm_207">Patch #207 - 2005/11/13 - XFree86 4.5.99.16</A></H1>
-<ul>
- <li>enable <code>lastlogx</code> support for NetBSD (was added, but
- not enabled in <a href="#xterm_186">patch #186</a>).
-
- <li>work around broken <code>lastlog.h</code> in glibc 2.3.5, which
- includes <code>utmp.h</code>.
-
- <li>revert part of recent XFree86 Imakefile change, restoring the
- <code>-I.</code> needed for <code>xmkmf</code> builds of xterm
- (XFree86 Bugzilla #1633, reports by Alexander Pohoyda and Matthieu
- Herrb).
-
- <li>change compiled-in default for <code>printerCommand</code>
- resource to an empty string. People who want to use the
- printer should be able to read the manual (Debian #311490).
-
- <li>modify <code>Imakefile</code> to work around old problems in
- <code>imake</code> configuration to allow test-builds using
- <code>xmkmf</code> on Linux. (This was not noticed since several
- releases had broken definitions relating to Xft which were harder
- to work around).
-
- <li>link <code>resize</code> for SCO platforms (Kean Johnston).
-</ul>
-
-<H1><A NAME="xterm_206">Patch #206 - 2005/11/3 - XFree86 4.5.99.15</A></H1>
-<ul>
- <li>add configure <code>--with-app-defaults</code> option to allow
- app-defaults directory for install-rules to be customized.
-
- <li>remove default translations for <code>dabbrev-expand()</code>
- due to conflicts with existing keyboard arrangements.
-
- <li>remove redundant check for <code>_NET_WM_PID</code>
- (report by Emanuele Giaquinta).
-
- <li>set icon border width explicitly to work around fvwm problem
- with active icon resizing (report by Steve Morris, analysis
- by Dominik Vogt).
-
- <li>modify resource files to make the font-resources a little
- more specific, e.g., changing "*VT100*" to "*VT100.", to
- make the distinction between VT100.font and VT100.utf8Fonts.font
- sharper, in case a packager modifies one of those.
-
- <li>expanded comments in <code>UXTerm.ad</code> regarding the
- font resources (Debian #319179).
-
- <li>add <code>--enable-narrowproto</code> configure option to
- accommodate Xorg "modular" build (report by Stephan Hermann,
- GenToo #17220).
-
- <li>fix typo in xterm.man description of <code>+wf</code> (patch
- by Tobias Stoeckmann).
-
- <li>add <code>scrollBarBorder</code> resource (request by Floyd L
- Davidson).
-
- <li>modify <code>xterm-new</code> terminfo entry to use capabilities
- for shifted scroll forward/reverse as shifted cursor up/down.
-
- <li>correct updating of checkmark for toolbar entry in popup menu
- (report by Emanuele Giaquinta).
-
- <li>fix ifdef's to allow compiling with toolbar and without tek4014
- (patch by Emanuele Giaquinta).
-
- <li>use <code>openpty()</code> for Darwin port (patch by Emanuele
- Giaquinta).
-
- <li>fix GenToo #90697 a different way, postponing the logic in
- <code>SetupToolbar</code> until the toolbar is actually needed,
- i.e., the <code>+tb</code> option is handled as expected.
-
- <li>revert fix made in <a href="#xterm_203">patch #203</a> for GenToo
- #90697. That introduced a problem with the control mouse
- click-popups, while most of the performance problems can be
- resolved by restricting the menu fonts (report by Emanuele
- Giaquinta).
-
- <li>fix a file-descriptor leak when calling <code>openpty()</code>
- (OpenBSD system/4561).
-
- <li>make a special case of resizing work like vt100: a hard reset
- also resets the 132/80 mode. The code to support this was
- present since X11R5, but not used because the corresponding
- initial state of the <code>-132</code> option was not saved.
-
- <li>restore window manager hints after <code>XtMakeResizeRequest()</code>
- calls. One instance from <a href="#xterm_205">patch #205</a>
- resulted in the window manager displaying pixels rather than
- than characters after selecting a different font size (FreeBSD
- ports/87424).
-
- <li>remove special case for Darwin in CF_XOPEN_SOURCE
- (Emanuele Giaquinta).
-
- <li>modify parsing of control sequence <code>CSI&nbsp;T</code>
- to allow scroll-down
- to be sent while mouse tracking is enabled (request by
- D Hugh Redelmeier).
-
- <li>correct termcap "me" (mode-end) string so it does not modify the
- alternate character set (report by Andrey Chernov).
-
- <li>correct size-comparison in HandleInterpret() broken in changes
- from <a href="#xterm_201">patch #201</a> to allocate input
- buffer (Debian #334317).
-
- <li>amend adjustments for scrollbar layout from
- <a href="#xterm_204">patch #204</a> to make
- this apply only to the toolbar configuration. In the non-toolbar
- configuration, the resulting scrollbar was shifted by its
- borderwidth (report by Matthieu Herrb).
-
- <li>add select-cursor-extend() action.
-
- <li>fix some broken href's in xterm.log.html, and typo in the
- INSTALL file (report/patch by David Mart&#237;nez Moreno).
-
- <li>modify <code>Imakefile</code> to use setgid mode for installing
- with Linux, OpenBSD and FreeBSD.
-
- <li>add configure --with-setuid and --with-reference options to
- allow packagers more flexibility in customizing install
- permissions.
-
- <li>generalize and make optional (configure --with-utmp-setgid)
- the change made for XFree86 Bugzilla #878 in
- <a href="#xterm_205">patch #205</a>
- (FreeBSD bug report #ports/86663).
-</ul>
-
-<H1><A NAME="xterm_205">Patch #205 - 2005/9/18 - XFree86 4.5.99.12</A></H1>
-<ul>
- <li>correct a typo in CF_FUNC_TGETENT introduced in <a
- href="#xterm_198">patch #198</a> fix for Gentoo #69926.
-
- <li>implement logic in termcap query to process multiple parameters
- as documented in ctlseqs.ms
-
- <li>fix buffer size used for termcap query, which was not long enough
- for the terminfo "colors" name (patch by Bradd W. Szonye).
-
- <li>add configure option --enable-readline-mouse, which turns on the
- experimental OPT_READLINE code (patch by Ilya Zakharevich).
-
- <li>for FreeBSD, drop setuid privileges after startup
- (XFree86 Bugzilla #878, report/patch by Alexander Pohoyda)
-
- <li>add menu entry (alt-esc) and corresponding action (alt-sends-esc)
- to toggle the <code>eightBitInput</code> resource setting.
-
- <li>generate configure script with autoconf 2.52 (patched) to use
- the feature therein which forces the script's locale to POSIX
- (Gentoo Bugzilla #105369).
-
- <li>modify computation of rows/columns on resize to avoid extending
- beyond the given limits, e.g., if resizing in response to a
- "maximize" in Gnome or KDE which do not use the window manager
- hints for this case (Debian #289123, Novell #61153).
-
- <li>modifications to work with z/OS 1.4 (Paul Giordano).
-
- <li>improve error-reporting when chown/chmod of the pseudo-terminal
- fails, e.g., if a copy of xterm which was designed to work with
- old-style pseudo-terminals is not installed setuid or setgid
- (report by Jeremy C. Reed).
-
- <li>patches from Emanuele Giaquinta:
- <ul>
- <li>ctlseqs.ms says that primary and secondary DA accept a
- nonzero parameter, which is incorrect. Also modify code
- to agree with this.
-
- <li>correct a comment in 88colres.pl
-
- <li>ctlseqs.ms says that the DEC Set/Reset control sequences for
- the backarrow key make it send DEL/BS, respectively, while it's
- the opposite.
-
- <li>update the menu entries for the metaSendsEscape, deleteIsDEL
- and numLock resources when changing them with the corresponding
- DEC Set/Reset control sequences.
- </ul>
-
- <li>fixes for configure script:
- <ul>
- <li>add special case for QNX, defining _QNX_SOURCE.
- <li>check for preprocessors which do not perform -U and -D options
- in the given order.
- <li>improve macro to determine gcc version
- <li>improve check for Intel compiler and related warning options
- </ul>
-
- <li>update config.guess, config.sub
-
- <li>improve fix from <a href="#xterm_198">patch #198</a> for
- <code>Cleanup()</code> by ensuring it is not called from the
- SIGCHLD handler (patch from OpenBSD by Todd Miller).
-
- <li>eliminate a retry for a better-matching bold font, to work around
- recent font server changes.
-
- <li>fixes for Novell #113277:
- <ul>
- <li>specify weight for wide font which may be derived from
- normal fontname.
- <li>cache the derived wide- and widebolt-fontnames.
- </ul>
-
- <li>workaround for GenToo Bugzilla #100728.
-
- <li>add menubar's border width to layout computation. Normally this
- is zero, but patterns such as <code>XTerm*borderWidth:1</code>
- would give poor layout for the toolbar configuration.
-</ul>
-
-<H1><A NAME="xterm_204">Patch #204 - 2005/8/4 - XFree86 4.5.99.9</A></H1>
-<ul>
- <li>work around quirk in shell which allowed user to "run" uxterm
- script when there was no UTF-8 locale installed by entering
- "sh -x uxterm". Also popup an xmessage to show the problem
- for users who run this via a GUI (Debian #318513).
-
- <li>disallow changes to fonts, toolbar and scrollbar when the vt100
- window is iconified, to simplify management of the active icon.
-
- <li>fixes to make <code>-geom</code> option work properly with the
- toolbar configuration (Gentoo Bugzilla #90717, #91967).
-
- <li>minor improvements to scrollbar layout: ensure that the scrollbar
- border is zero if the vt100 border is zero.
-
- <li>improve initialization due to <code>utf8</code> resource by
- loading the <code>utf8Fonts</code> resource in the case where
- <code>locale</code> resource is false. Also in this case, do
- not disable switching UTF-8 mode on/off.
-
- <li>minor optimization of TrueType font-loading, loads italic font
- only when needed.
-
- <li>correct variable used to store temporary result from lookup of bold
- font, when initializing the wide-bold-font data and no immediate
- match is found by asking for a bold variant of the wide-font. The
- result was to use overstriking rather than the actual bold font
- (Debian #318162, patch by Eugene Konev).
-
- <li>add checks to ensure vt100 widget is realized when it might be
- updated via actions handled from a tek4014-only configuration.
-</ul>
-
-<H1><A NAME="xterm_203">Patch #203 - 2005/7/6 - XFree86 4.5.99.7</A></H1>
-<ul>
- <li>modify initialization of <code>allowSendEvents</code> and
- <code>allowWindowOps</code> to prevent modification with the
- editres protocol.
-
- <li>fix compiler warning for NetBSD by including util.h in main.c
- (XFree86 Bugzilla #1596).
-
- <li>fix to build on Darwin 8.x, which no longer provides
- <code>setpgrp()</code> (patch by Min Sik Kim).
-
- <li>adapted fixes for Legend (SCO) from diffs attached to
- Freedesktop.Org Bugzilla #3180.
-
- <li>fix typo in xterm manpage description of <code>-ls</code> option
- (Freedesktop.Org Bugzilla #3543).
-
- <li>add support for interpreting the underline attribute as an italic
- font in Xft mode (patch by Chuck Blake).
-
- <li>improve initialization of toolbar so that individual pulldown
- menus are initialized on demand, as they are in the scenario
- where they are invoked as popup menus (GenToo Bugzilla #90697).
-
- <li>fix logic in <code>find_utmp</code>, which did not reset result
- in <code>getutid()</code>, causing an infinite loop in some
- conditions (report by Emil Mikulic).
-
- <li>set the <code>_NET_WM_PID</code> property (GenToo Bugzilla #91008).
-
- <li>modify ifdef's in ptyx.h and xterm_io.h to build with DragonFly
- (patch by Jeroen Ruigrok).
-
- <li>change default values for <code>minBufSize</code> and
- <code>maxBufSize</code> to 4096 and 32768 respectively so that the
- initial read request will match the value from before changes to
- use <code>sched_yield()</code>.
-
- <li>make paste of UTF-8 faster for Western character sets by checking
- range of incoming data (patch by Joe Allen).
-
- <li>adapted patch by Joe Allen to add experimental option to allow
- applications to get or set the selection data.
-
- <li>fix an off-by-one error parsing <code>-S/nn</code> option
- (Debian #311438, report/fix by Peter Chubb).
-
- <li>fix an initialization bug from
- <a href="#xterm_201">patch #201</a> that broke logging
- (report by Rodney Thayer).
-
- <li>amend change to command-line processing in
- <a href="#xterm_201">patch #201</a> to avoid
- conflict with <code>-e</code> option (report by Servatius Brandt).
-
- <li>suppress configure check for <code>_XOPEN_SOURCE</code> on
- darwin.
-
- <li>update config.guess, config.sub
-</ul>
-
-<H1><A NAME="xterm_202">Patch #202 - 2005/5/2 - XFree86 4.5.99.3</A></H1>
-<ul>
- <li>add extended shift- and control-modifier cursor keys to
- "xterm+pcfkeys" terminfo entry to correspond to ncurses 20050430
- patch.
-
- <li>fix a rare case where text would be written with the wrong colors
- because output of scrolled text would reset the colors and the
- new text would be written with the same colors (report/testcase
- by Thomas Glanzmann).
-
- <li>rename <code>$CMD</code> variable in <code>plink.sh</code> because
- it is a reserved symbol in bash 3.00.16 (report by Ted Taylor).
-
- <li>add environment variables $XTERM_SHELL and $XTERM_VERSION
- (request by Zdenek Sekera).
-
- <li>corrected workaround for background color of menubar, which gave
- a too-broad expression, coloring the background of the VT100
- widget unless overridden by another resource setting.
-
- <li>correct an error in the logic which decides when
- <code>sched_yield()</code> is run; it would occasionally hang when
- contending with other pseudo-terminal applications such as screen
- (report by Kirill Ponomarew).
-
- <li>modify initialization to decide whether to default to built-in
- <code>wcwidth()</code> versus system's version based on the
- starting locale and whether the system's version is poor quality
- (suggested by Bram Moolenaar).
-
- <li>update table for <code>mk_width()</code> from UnicodeData 4.1.0
- using Markus Kuhn's <code>uniset</code> script.
-</ul>
-
-<H1><A NAME="xterm_201">Patch #201 - 2005/4/21 - XFree86 4.5.99.2</A></H1>
-<ul>
- <li>improve resource files to show how the menubar and popup menus can
- be colored (prompted by report by Joe Wells).
-
- <li>modify parsing of OSC (and SOS, etc), strings so their contents
- are not interpreted as UTF-8. This allows non-ASCII title strings
- to be set, provided that the window manager complies (report by
- Thomas Wolff).
-
- <li>improved some of the built-in line-drawing glyphs.
-
- <li>correct color of "box" character drawn for line-drawing glyph 1
- (report by Nicolas George).
-
- <li>improve behavior when switching to UTF-8 mode after startup so
- xterm will check if the current fonts are already wide
- (ISO10646-1). If they are not, xterm will use the
- <code>utf8Fonts</code> subresource to load appropriate fonts
- (request by Bram Moolenaar).
-
- <li>modify logic for setting title-string so it applies to the current
- widget rather than the vt100 widget.
-
- <li>modify initialization for wide-bold fontname, to search for one
- if none is given (report by Michael Schroeder).
-
- <li>add resource <code>mkWidth</code> and command-line option
- <code>-mk_width</code> to control whether xterm uses the built-in
- version of wcwidth().
-
- <li>add resource settings for minimum/maximum input buffer size, and
- call to <code>sched_yield</code> to improve performance with newer
- Linux kernels (adapted from patch by Nicolas George).
-
- <li>correct computation of width for wide characters with the invisible
- attribute (report by Thomas Wolff).
-
- <li>modify interaction between <code>+u8</code> and <code>locale</code>
- resource to allow the command-line option to override the resource
- (requested by Thomas Wolff).
-
- <li>add a limit check for scrolling margins in a one-line screen,
- overlooked in fixes for
- <a href="#xterm_198">patch #198</a> (Debian #297430).
-
- <li>correct treatment of <code>iconBorderWidth</code> for resizing
- an active-icon, and its description in manpage (Debian #296592).
-
- <li>modify configure script <code>--disable-imake</code> to use the
- script's definitions anyway if it cannot detect imake (prompted
- by FreeBSD bug 77408).
-
- <li>ignore error in the I/O initialization that tries to set the
- tty to 7-bit input for the case where <code>eightBitInput</code>
- resource is false (Debian #298551).
-
- <li>modify command-processing to accept an optional parameter that
- tells xterm which shell program to use (request by Zdenek Sekera).
-
- <li>add simpler resource <code>keyboardType</code> which, when set,
- overrides the individual keyboard-type resources and eliminates
- the possibility of conflict between them.
-
- <li>add initialization for <code>scoFunctionKeys</code> resource
- (report by Rick K).
-
- <li>correct logic of <code>ReallocateBufOffsets()</code> which did not
- copy the content of the old screen buffer to the proper location,
- making a repaint clear after switching to wide-character mode
- (report by Bram Moolenaar):
-
- <li>implement the remaining pieces to make xterm allocate cells for
- wide-characters when the "UTF-8" menu entry is selected. Also,
- load the UTF-8 font when that menu entry is selected, or the escape
- sequence for UTF-8 mode is received (report by Bram Moolenaar):
-
- <li>add command-line options (<code>-tb</code>, <code>+tb</code>) and
- resource <code>toolBar</code> to allow menu/toolbar to disabled or
- enabled at startup (prompted by reports by Joe Wells).
-
- <li>correct typo in configure script's --enable-dec-locator option
- (report by Bram Moolenaar).
-</ul>
-
-<H1><A NAME="xterm_200">Patch #200 - 2005/2/6 - XFree86 4.4.99.23</A></H1>
-<ul>
- <li>increase color pairs value for xterm-256color and xterm-88color to
- match ncurses, which has an experimental option to support this.
-
- <li>modify ifdef's to make AIX use termios rather than termio; the
- struct sizes for the two were not the same.
-
- <li>improve CF_WITH_IMAKE_CFLAGS configure macro script for
- OSMAJORVERSION and OSMINORVERSION values, e.g., for Tru64 and AIX.
-
- <li>modify ifdef to define USE_POSIX_TERMIOS for Darwin (patch by Min
- Sik Kim).
-
- <li>modify find_utmp() to initialize the whole utmpx struct (except
- ut_id), since that is needed for OSF1 4.0D to prevent an infinite
- loop on exit.
-
- <li>add configure check before adding -D_POSIX_SOURCE since some
- platforms predefine it, e.g., cygwin.
-
- <li>add simplified sed expressions in CF_IMAKE_CFLAGS configure script
- macro to ensure value for PROJECTROOT is quoted on Solaris, i.e.,
- when nested <code>\(</code> and <code>\)</code> are not interpreted
- correctly.
-
- <li>correct DEC rectangle operations to reset state after completing
- the operations.
-
- <li>modify CASE_ST handling in charproc.c to ensure that the parse
- state is reset even if xterm is not currently processing an OSC or
- other string (patch by Johnny Billquist forwarded by Matthias
- Scheler, NetBSD xsrc/29003).
-
- <li>fix OS/2 build for innotek_libc (patch by David Yeo).
-
- <li>fix a regression from <a href="#xterm_197">patch #197</a> fix for
- Debian #277832 which disowned the selection if it was scrolled,
- e.g., by the user pressing return at the bottom of the screen
- (Debian #291787).
-
- <li>move the warning/exit for missing $DISPLAY into the error handler
- in case <code>-display</code> is given, and the connect fails for
- some other reason.
-</ul>
-
-<H1><A NAME="xterm_199">Patch #199 - 2005/1/17 - XFree86 4.4.99.22</A></H1>
-<ul>
- <li>instead of setting <code>$DISPLAY</code>, check for the unset
- variable and warn/exit on this condition (comments by H Merijn
- Brand and Bernhard R Link).
-
- <li>fix a typo in Imakefile from <a href="#xterm_198">patch #198</a>
- (reports/patches by Stefan Dirsch, and Mike Castle).
-</ul>
-
-<H1><A NAME="xterm_198">Patch #198 - 2005/1/13 - XFree86 4.4.99.21</A></H1>
-<ul>
- <li>set <code>$DISPLAY</code> to ":0" if it is not set.
-
- <li>add <code>utmpDisplayId</code> resource to allow users to control
- whether the display identifier (display number and screen number)
- are retained in the connection information recorded in utmp
- (discussion with Edoardo Tirtarahardja).
-
- <li>add <code>bellOnReset</code> resource to allow users to disable
- bell which sounds on hard reset since <a href="#xterm_183">patch
- #183</a> changes to DECSCL (discussion with Danek Duvall).
-
- <li>improve <code>$WINDOWID</code> for configuration with toolbar by
- making it refer to the top-level shell rather than the parent of
- the current window. For that case, the parent is a form widget,
- which does not have a name, which made the <code>$WINDOWID</code>
- not very useful as a parameter for <code>xwininfo</code>
- (suggested by Dave Bodenstab).
-
- <li>fix a typo in WhichVFont() macro
- from <a href="#xterm_197">patch #197</a> changes
- which broke the --disable-active-icon configuration
- (report by Ralf S. Engelschall).
-
- <li>improve some limit checks (Gentoo Bugzilla #75604).
-
- <li>add --disable-setuid option to configure script (Gentoo Bugzilla
- #76543).
-
- <li>add --disable-full-tgetent option to configure script, allowing one
- to ignore a termcap library in favor of ncurses/curses (Gentoo
- Bugzilla #69926).
-
- <li>modify configure script to choose useful warning options for Intel
- version 8.0 compiler.
-
- <li>update config.guess, config.sub
-
- <li>make active-icon work properly when TrueType fonts are used
- (Debian #286068).
-
- <li>correct change from <a href="#xterm_157">patch #157</a> which uses
- getlogin() to check for an alias; the storage used for the related
- getpwuid() call was overwritten by the data used for comparison
- (patch by Per Hedeland).
-
- <li>correct case of SCS for character set 0 (line-drawing) to allow it
- to be selected into GR.
-
- <li>fix a file-descriptor leak (Redhat Bugzilla #139597).
-
- <li>modify <code>creat_as()</code> to only fork if xterm is actually
- running as setuid and/or setgid. This works around a Cygwin bug
- which hangs when logging is enabled and makes xterm a little
- faster for systems using interfaces such as utempter (report by
- Al Goodman).
-
- <li>modify <code>Cleanup()</code> to avoid operations such as X calls
- that might use unsafe functions when it is called by a signal
- handler (report by Michiel Boland).
-
- <li>fix bugs in <a href="#xterm_191">patch #191</a> and in SRM changes
- from <a href="#xterm_197">patch #197</a> that
- broke DECSET 38: switch to Tek4014 emulation (report by Dave
- Bodenstab).
-
- <li>fix for manpage escapes (Marc La France).
-
- <li>improve on IRIX-specific change for Imakefile in XFree86 CVS versus
- resize linking against termcap library to reflect definitions for
- USE_TERMCAP in resize.c
-</ul>
-
-<H1><A NAME="xterm_197">Patch #197 - 2004/11/30 - XFree86 4.4.99.19</A></H1>
-<ul>
- <li>modify configure script to remove empty "-DPROJECTROOT=" definition
- which resulted unusable values for luit's default path.
-
- <li>update precompose.c based on Unicode 4.0.1
-
- <li>several minor fixes based on Intel compiler warnings.
-
- <li>change default translations so a <code>BtnDown</code> which is
- not recognized is simply ignored rather than emitting a bell.
- That makes it less obtrusive when the user tries to use a mouse
- which provides more capabilities than the X mouse driver supports,
- e.g., one with a horizontal scroll wheel (Debian #265133).
-
- <li>note in xterm's manpage that <code>translations</code> is not
- specific to xterm (Debian #278897).
-
- <li>modify uxterm script to use locale program to verify if the
- derived locale is installed (Debian #246398).
-
- <li>correct font handling for active icon when in UTF-8 mode (report
- by Paolo Liberatore).
-
- <li>make active-icon and toolbar configurations work together.
-
- <li>modify the criteria for disowning primary selection. Previously,
- this happened anytime the cursor was moved before the end of the
- selection. That would ensure that any insert/delete of char or
- line, as well as scrolling, would disown the selection. The
- new criteria change this to checking if the operations would
- modify the data which is highlighted (Debian #277832).
-
- <li>reimplement <code>DECALN</code> with functions for vt420 rectangles,
- fixes selection for this case.
-
- <li>implement vt420 rectangle operations.
-
- <li>add parsing, for debug/test of vt220 soft-fonts.
-
- <li>add menu entry, actions and escape sequence to allow
- enabling/disabling toolbars at runtime.
-
- <li>improve rendering for Xft, allow it to draw non-linedrawing
- characters such as "pi", which were drawn from internal tables
- with <a href="#xterm_180">patch #180</a>
- (Freedesktop.org Bugzilla #1260).
-
- <li>add configure option <code>--enable-mini-luit</code>, ifdef'd the
- mini-luit feature with <code>OPT_MINI_LUIT</code>.
-
- <li>add mini-luit feature, which supports Latin9 directly rather than
- via luit, provided that Unicode fonts are used (Freedesktop.org
- Bugzilla #1571, request by Stefan Dirsch, patch by Michael
- Schroeder).
-
- <li>for Linux, if IUTF8 is defined, e.g., on recent 2.6.x kernels,
- set the corresponding flag for the slave pty, to enable UTF-8
- interpretation of backspace in cooked mode (Freedesktop.org
- Bugzilla #1578, request by Stefan Dirsch).
-
- <li>modify <code>faceSize</code> resource to use a floating-point
- internal value (adapted from patch by Sam Stephenson).
-
- <li>correct handling selection of tabs over cleared space in UTF-8
- mode. In this special case, xterm represents the whitespace with
- a null rather than a space character (Debian #276447).
-
- <li>amend fix for infinite loop from <a href="#xterm_192">patch
- #192</a> to check if there is wrapped text to output in a following
- iteration (Debian #273202).
-
- <li>fixes ifdef'd with <code>__INTERIX</code> to allow building with
- Interix (Windows Services for UNIX) 3.5 using the xlibs libraries
- from freedesktop.org (patch by Min Sik Kim).
-
- <li>amend solution for Debian #252873, #260471 from <a
- href="#xterm_194">patch #194</a> by making the cursor not
- explicitly colored if only the foreground color is set, and the
- cursor is on a blank space (Debian #275473).
-
- <li>correct logic for send/receive mode (SRM) with regard to control
- characters.
-
- <li>fix masking of invisible text in wide-character mode, which did
- not work for line-drawing characters.
-
- <li>incorporate CF_XOPEN_SOURCE into configure script, replacing
- CF_GNU_SOURCE.
-</ul>
-
-<H1><A NAME="xterm_196">Patch #196 - 2004/8/15 - XFree86 4.4.99.12</A></H1>
-<ul>
- <li>add a special case to configure script to ignore NetBSD's
- <code>grantpt()</code> which was recently added (but not part of a
- release), until someone is able to ensure that xterm can use it
- (report by Min Sik Kim).
-
- <li>clear the buffer returned by getutid(). This fixes an infinite
- loop on some platforms introduced in <a href="#xterm_193">patch
- #193</a> by Debian #256468 fix (report by David Ellement).
-</ul>
-
-<H1><A NAME="xterm_195">Patch #195 - 2004/8/8 - XFree86 4.4.99.11</A></H1>
-<ul>
- <li>correct length used for blinking text, make the last column blink
- (patch by Alexander V Lukyanov).
-
- <li>start changes to make doublesize characters work with TrueType
- fonts (see <a href="#xterm_44">patch #44</a>).
-
- <li>trim leading/trailing blanks from color resources as done for
- other strings in <a href="#xterm_167">patch #167</a>.
-
- <li>fixes for <code>showBlinkAsBold</code> resource (report by
- Christoph Berg).
-</ul>
-
-<H1><A NAME="xterm_194">Patch #194 - 2004/7/27 - XFree86 4.4.99.11</A></H1>
-<ul>
- <li>change clearing operations so foreground color attribute is not
- set. Usually this is benign, but in some cases when the cursor
- color is not set explicitly, the cursor would show this color
- (Debian #252873, #260471).
-
- <li>add extra state (cursor-moved) to guard against deciding that the
- cursor did not require repainting after an indexing operation
- that leaves the cursor in the same location on the screen.
-
- <li>fix a case where a full-screen indexing operation would
- not restore the cursor-busy state.
-
- <li>fix a repainting bug introduced in
- <a href="#xterm_180">patch #180</a>: when using a font
- lacking line-drawing characters, a repaint of the screen could
- skip horizontally an extra amount after filling in the missing
- character (reports by Nicolas George, Hans de Goede, Redhat
- Bugzilla #128341).
-
- <li>rename terminfo fragment "xterm-pc-fkeys" to "xterm+pcfkeys" for
- consistency with ncurses.
-</ul>
-
-<H1><A NAME="xterm_193">Patch #193 - 2004/7/19 - XFree86 4.4.99.10</A></H1>
-<ul>
- <li>fix for wide-character selection from OpenBSD CVS
- (report/patch by Matthieu Herrb).
-
- <li>modify initialization and cleanup of utmp data to also compare
- the <code>ut_line</code> member (Debian #256468).
-
- <li>modify check on focus-change to ignore <code>FocusOut</code> events
- generated by <code>XGrabKeyboard</code>. This fixes a case where
- the text cursor would act as if focus were lost when selecting the
- "Secure Keyboard" menu option.
-
- <li>add <code>gen-pc-fkeys.pl</code> script, use that to generate
- terminfo fragment corresponding to the pc-style function keys.
-
- <li>fix a case where the checkmark by the "VT220 Keyboard" menu entry
- was not set on startup.
-
- <li>separated two methods for making the cursor blink (menu and
- escape sequence) by using the menu as the primary method and
- XOR'ing the state of the escape sequence against that.
-
- <li>modify logic for enabling blinking cursor via escape sequence as
- well as the related save/restore operations so this is only
- available if the <code>cursorBlink</code> resource was set on
- startup.
-</ul>
-
-<H1><A NAME="xterm_192">Patch #192 - 2004/7/12 - XFree86 4.4.99.9</A></H1>
-<ul>
- <li>change resource settings for color4 and color12, add some discussion
- in <code>XTerm-col.ad</code> (Debian #241717).
-
- <li>add a note in xterm manpage discussing the difference between
- alt- and meta-keys, and the way the latter is used in the
- <code>eightBitInput</code> resource.
-
- <li>add a note in xterm manpage regarding possible conflict between
- resource settings for <code>xterm.vt100.font</code> and
- <code>xterm.vt100.utf8Fonts.font</code> (Debian #254650).
-
- <li>add compile-time customization of <code>backarrowKeyIsErase</code>
- and <code>ptyInitialErase</code> default resource values
- (adapted from OpenBSD CVS).
-
- <li>change parameter of <code>FIONREAD</code> <code>ioctl()</code> call
- from long to int
- (discussion on tech-x11@netbsd.org regarding LP64 by
- John Heasley and Matthias Scheler).
-
- <li>modify configure script options for Athena widgets to work as
- expected for "--without-Xaw3d", etc., (GenToo Bugzilla #53455).
-
- <li>add case to uxterm to accommodate locales ending with "@euro",
- e.g., fr_FR.UTF-8@euro (Debian #255197, report/analysis by
- Matthieu Lagouge).
-
- <li>add special case for VT100 graphic's "box" character (discussion
- with Ben Armstrong).
-
- <li>add missing initialization for bitmap-font sizes needed to make
- fonts menu work with TrueType fonts (report by Ben Armstrong).
-
- <li>save the fontnames for bold fonts that are derived from normal
- fonts, or from the <code>boldFont</code> resource, so the same
- value is restored when switching with the VT Fonts menu (Debian
- #256086).
-
- <li>fix manpage preprocessing (Marc La France).
-
- <li>fix typo in manpage's description of character classes (Debian
- #257073).
-
- <li>modify terminfo to accommodate luit, which relies on G1 being used
- via an ISO-2022 escape sequence (Debian #254316, analysis by
- Juliusz Chroboczek).
-
- <li>modify Makefile.in rule for ctlseqs.txt to work around groff SGR
- misfeature.
-
- <li>modify <code>XTerm.ad</code> to set <code>saveLines</code> default
- to 1024 (Redhat Bugzilla #127132).
-
- <li>add a limit-check in <code>dotext()</code> to prevent infinite
- loop in a corner case of UTF-8 configuration.
-
- <li>update config.guess, config.sub
-</ul>
-
-<H1><A NAME="xterm_191">Patch #191 - 2004/6/6 - XFree86 4.4.99.7</A></H1>
-<ul>
- <li>correct options parsing for <code>-into</code> option so it
- can be combined with <code>-e</code> (Redhat Bugzilla #124518,
- report/patch by James Armstrong).
-
- <li>fix ifdef's for <code>OPT_COLOR_RES2</code>
- so that the fake resource table introduced in
- <a href="#xterm_188">patch #188</a>
- is not compiled if it is empty.
- This happened to work with gcc (report by Joel Konkle-Parker).
-
- <li>reorganize ptydata.c to use one input buffer shared between
- the VTxxx and tek4014 emulators. In the new scheme, UTF-8
- decoding is performed on characters as they are needed by the
- state machine rather than on buffers as they are read.
-
- <li>work around change in quoting of PROJECTROOT symbol when using
- configure script, from changes made in
- <a href="#xterm_187">patch #187</a> for CF_IMAKE_CFLAGS
- (GenToo Bugzilla #50982).
-</ul>
-
-<H1><A NAME="xterm_190">Patch #190 - 2004/5/25 - XFree86 4.4.99.6</A></H1>
-<ul>
- <li>correct state for values in the range 128-159 after translating
- from UTF-8: this should be ignored unless the user overrides it
- with the <code>allowC1Printable</code> resource (reported by
- Simon Strandgaard).
-
- <li>add configure-script check for nl_langinfo(CODESET), use this to
- replace check of environment variables for UTF-8.
-
- <li>change Makefile.in rules for 256colres.h and 88colres.h so they
- are only made if they do not exist. The maintainer-clean rule
- will remove these files; they require perl to be made.
-
- <li>remove check in configure script --enable-toolbar that suppressed
- this option when building with Xaw7.
-
- <li>apply fixes to Tektronix widget used for VT100 widget to make
- toolbar work with Xaw7 (XFree86 4.x).
-</ul>
-
-<H1><A NAME="xterm_189">Patch #189 - 2004/5/16 - XFree86 4.4.99.6</A></H1>
-<ul>
- <li>do not call xim_real_init() if <code>openIm</code> resource is
- false (Debian #249025).
-
- <li>minor improvements to built-in line-drawing.
-
- <li>fix a few portability issues with dynamic abbreviation support,
- i.e., did not compile on Tru64.
-
- <li>modify constraints in form used to layout toolbar, to work with
- newer Xaw in XFree86 4.x.
-</ul>
-
-<H1><A NAME="xterm_188">Patch #188 - 2004/5/12 - XFree86 4.4.99.6</A></H1>
-<ul>
- <li>correct table entry for DEL in the ground state, which marked it
- as a printable character from <a href="#xterm_171">patch #171</a>
- (report by D Hugh Redelmeier).
-
- <li>improve fix in <a href="#xterm_186">patch #186</a> for failure in
- xim_real_init() by adding a sleep.
-
- <li>fix a typo in os2main.c
- (XFree86 Bugzilla #1358, report/patch by Frank Giessler).
-
- <li>make escape sequence reporting dynamic colors consistent with the
- logic that sets it; choosing the opposite color when reverse
- video is set (XFree86 Bugzilla #1361, reported by Bradd W Szonye).
-
- <li>modify initialization of 256- and 88-colors so that colors beyond
- 16 are normally not X resources. This works around a hard-coded
- limit in Xt which breaks xterm when 256-colors and luit are both
- configured (report by Noah Friedman).
-
- <li>remove <code>ncv</code> from <code>xterm-256color</code> terminfo
- entry since it is no longer needed (report by Eli Zaretskii).
-
- <li>add "erase2" and "eol2" keywords to <code>ttyModes</code> resource,
- for recent/current FreeBSD.
-
- <li>improve ifdef's for utempter library to omit direct calls to
- <code>setutent()</code> or <code>getutent()</code> (adapted from
- patch by Christian Biere).
-
- <li>add dynamic abbreviation support like Emacs (patch by Tomasz
- Cholewo). This is ifdef'd with <code>OPT_DABBREV</code>, and
- enabled via the configure script <code>--enable-dabbrev</code>
- option.
-
- <li>fix problem responding to session management events, e.g., which
- would make logging out very slow (patch by Eddy De Greef, Debian
- #233883).
-
- <li>work around a newer bug in toolbar with XFree86 by forcing menus
- to be fully initialized at startup. In older versions of XFree86
- and X11R6, it was possible to delay initialization of the menu
- contents until it was popped up. (The longstanding bug with
- XFree86 4.x layout for toolbar still exists, though).
-
- <li>modify <code>xtermAddInput</code> to work around core dump on
- IRIX64 when initializing scrollbar translations if toolbar is
- compiled-in.
-
- <li>fix some minor conflicts in the 2-character entry names in the
- termcap file.
-</ul>
-
-<H1><A NAME="xterm_187">Patch #187 - 2004/4/27 - XFree86 4.4.99.4</A></H1>
-<ul>
- <li>change xterm version string to use <code>__vendorversion__</code>
- where that is available, and "XTerm" otherwise.
-
- <li>improve description of <code>utf8</code> resource in manpage
- (Debian #179407).
-
- <li>modify configure macros CF_IMAKE_CFLAGS and CF_ADD_CFLAGS to
- handle <code>-D</code> options that define string values, e.g.,
- for <code>XVENDORNAME</code>.
-
- <li>modify configure macro CF_IMAKE_CFLAGS to allow (if
- <code>$PATH</code> is set accordingly) to use the
- <code>xmkmf</code> script within an X build tree.
-
- <li>add missing <code>#undef OPT_SESSION_MGT</code> to xtermcfg.hin
- to make the configure script's --disable-session-mgt option work.
-
- <li>update config.guess, config.sub
-</ul>
-
-<H1><A NAME="xterm_186">Patch #186 - 2004/4/18 - XFree86 4.4.99.4</A></H1>
-<ul>
- <li>change reset on <code>DECSCL</code> to a soft-reset (appears some
- DEC manuals have errors).
-
- <li>add a section to ctlseqs.ms elaborating on normal/alternate screens.
-
- <li>modify initialization of Acolors[] so that any XtDefaultForeground
- or XtDefaultBackground values are translated as in the Tcolors[],
- to use the window's foreground/background colors. This affects
- the <code>colorBD</code> and similar resources which normally have
- no explicit color assigned.
-
- <li>modify initialization of Tektronix window so that control sequences
- setting its color before the window is popped up will apply to
- its initial colors.
-
- <li>add control sequence to set Tektronix window's text-cursor.
-
- <li>modify initialization of terminal colors, e.g., mouse pointer and
- text cursor, to treat <code>XtDefaultForeground</code> and
- <code>XtDefaultBackground</code> values as the actual foreground
- and background colors of the terminal rather than white and black
- (Debian #241717).
-
- <li>remove an incorrect comparison against <code>PTYCHARLEN</code> in
- parsing the <code>-S</code> option (report by Michael B Taylor).
-
- <li>minor restructuring of terminfo/termcap files, having noted some
- packager's customizations which caused the structure to be
- confused.
-
- <li>eliminate an isolated use of MIN/MAX in charproc.c
-
- <li>replace <code>XtExtdefaultfont</code> and
- <code>XtExtdefaultbackground</code> by their more familiar
- equivalents
- <code>XtDefaultFont</code> and
- <code>XtDefaultBackground</code>.
-
- <li>replace ifdef's using <code>SCO</code>, <code>sco</code> and
- <code>SCO325</code> with <code>__SCO__</code>
- (XFree86 Bugzilla #1301, Kean Johnston).
- But ensure that it still builds on platforms where this symbol
- is not defined.
-
- <li>add <code>scoFunctionKeys</code> resource, to match manpage.
-
- <li>update manpage discussion of menus and related resources.
-
- <li>enable utmpx support for NetBSD 1.6C and newer (patch by
- Matthias Scheler).
-
- <li>add a note in the manpage discussing xterm's treatment of open
- file-descriptors (request by Dan Shearer).
-
- <li>modify <code>Help()</code> to make "xterm -h" write to standard
- output rather than standard error (patch by Bram Moolenaar).
-
- <li>check for type of failure in xim_real_init() to avoid looping when
- the problem is an unsupported input method rather than a failure
- to connect to the XIM server. Problem was introduced in
- <a href="#xterm_175">patch #175</a> (XFree86 Bugzilla #1306).
-
- <li>modify <code>Imakefile</code> to remove dependency of "install"
- target on the <code>xterm</code> executable to make installs from
- tree without attempting to rebuild anything (David Dawes, based on
- a patch and report from Lee Olsen).
-
- <li>remove call to <code>ShowCursor</code> from
- <code>SetCursorBlink()</code> since that is redundant,
- and can cause display glitches if the cursor is already
- blinking (XFree86 Bugzilla #1158, patch/report by Andreas Schwab).
-</ul>
-
-<H1><A NAME="xterm_185">Patch #185 - 2004/3/3 - XFree86 4.4</A></H1>
-<ul>
- <li>fix tcap-query logic for the backspace key (XFree86 Bugzilla #1233,
- report/patch by Anton Kovalenko).
-
- <li>add test-scripts resize.pl and tcapquery.pl
-
- <li>add translation to ASCII of commonly-used characters that groff
- translates to Unicode, when the font in use does not provide the
- corresponding glyphs (Debian #219551).
-
- <li>modify RequestMaximize(), which performs maximize/restore via
- control sequences, to account for window-frame (patch by
- Jess Thrysoee).
-
- <li>improve pattern used in <code>uxterm</code> to check for UTF-8
- locale, e.g., for HPUX (patch by H Merijn Brand).
-
- <li>add <code>-fd</code> option and resource
- <code>faceNameDoublesize</code> to specify double-wide fonts with
- Xft (adapted from patch by Zarick Lau).
-
- <li>change a couple of resource classes from "Boolean" to specific
- values: <code>freeBoldBox</code>, <code>forceBoxChars</code>.
-
- <li>add resource <code>showMissingGlyphs</code> to outline places on
- the screen where a font lacks the corresponding glyph.
-
- <li>add resource <code>showBlinkAsBold</code> to control whether
- blinking text should be shown as bold or actual blinking text.
-
- <li>improve logic in ShowCursor() to avoid repainting the cursor when
- it is already visible, e.g., in response to the DECTCEM escape
- sequence. This also addresses XFree86 Bugzilla #1158.
-
- <li>implement blinking text, using the timer for blinking cursor.
-
- <li>modify FreeType support to allow resizing the font, in the same
- ways the window can be resized if fixed fonts are used. The
- relative font sizes are derived from the fixed font sizes.
-
- <li>add menu items and corresponding actions for switching on/off
- the UTF-8 mode and Xft (TrueType) support.
-
- <li>add logic to handle switching UTF-8 mode on/off. It worked if
- the escape sequences were flushed, but if data was mixed in with
- the same write, some were not handled properly (report by
- Nicolas George).
-
- <li>modify to allow turning UTF-8 mode on/off via escape sequence even
- if <code>-wc</code> option was not given at startup (patch by Peter
- Berg Larsen).
-
- <li>amend fix for XFree86 Bugzilla #981, adjusting for savedlines value
- (report by Tim Adye).
-
- <li>fix a typo in computing relative font size (Jess Thrysoee).
-</ul>
-
-<H1><A NAME="xterm_184">Patch #184 - 2003/12/31 - XFree86 4.3.99.903</A></H1>
-<ul>
- <li>improve configure-script checks for FreeType and related libraries,
- using <code>xft-config</code> or <code>freetype-config</code>
- scripts when available.
-
- <li>fix configure-script check for <code>SYSV</code> definition by
- ensuring whether <code>sys_errlist[]</code> is declared, and by
- modifying the test program to include <code>X11/Intrinsic.h</code>
- to check that <code>wchar_t</code> is declared consistently (report
- by H Merijn Brand).
-</ul>
-
-<H1><A NAME="xterm_183">Patch #183 - 2003/12/26 - XFree86 4.3.99.903</A></H1>
-<ul>
- <li>correct logic for configurations that may attempt to open both
- old/new-style pseudoterminals. In this case, the old-style are
- preferred. Logic was broken in <a href="#xterm_145">patch #145</a>
- (XFree86 Bugzilla #997, report/patch by Kean Johnston).
-
- <li>modify handling of <code>eightBitInput</code> resource in UTF-8
- mode to translate the value into UTF-8. Otherwise an illegal
- UTF-8 code is sent to the application (report by Bram Moolenaar).
-
- <li>modify <code>uxterm</code> script to interpret help and version
- options so xterm does not always create a window when the user
- requests this information (Debian #223926).
-
- <li>add a limit check to ScrnTstWrapped() (XFree86 Bugzilla #981).
-
- <li>modify DECSCL to perform a hard reset (RIS) as per DEC manuals.
- Extended DECSCL to accept parameters for vt4XX and vt5xx terminals.
-
- <li>correct logic for ANSI conformance level escape sequences, which
- were confused with DEC conformance level escape sequences.
-
- <li>correct state for vt52 shift-in/shift-out, which was not reset
- properly after <a href="#xterm_171">patch #171</a>.
-
- <li>correct handling of graphics characters for vt52 mode, which did
- not display line-drawing characters after G1 fix from
- <a href="#xterm_182">patch #182</a>.
-
- <li>fixes for configure script to work with current Cygwin headers
- and libraries.
-
- <li>modify <code>Imakefile</code> to put the current directory at the
- beginning of the include searchpath (David Dawes).
-</ul>
-
-<H1><A NAME="xterm_182">Patch #182 - 2003/12/2 - XFree86 4.3.99.901</A></H1>
-<ul>
- <li>correct logic for <code>metaSendsEscape</code> resource to allow
- for the meta-right key to be tested. Improve check for meta/alt
- modifiers by dropping the assumption that a keysym is associated
- with only one modifier, and by ignoring NoSymbol entries in the
- xmodmap data (XFree86 Bugzilla #924, patch by David Dawes).
-
- <li>correct wrapping logic for line-drawing characters written in
- non-UTF-8 mode of xterm build for wide-characters (XFree86 Bugzilla
- #918, report/patch by J&#x00fc;rgen Keil).
-
- <li>improve manpage description of resources, in particular the
- <code>utf8Fonts</code> class (XFree86 Bugzilla #905).
-
- <li>add definitions to compile with glibc-based GNU/Hurd, GNU/KFreeBSD
- and GNU/KNetBSD (XFree86 Bugzilla #893).
-
- <li>compiler-warning fixes (patch by Christian Biere).
-
- <li>add README.i18n (Tomohiro KUBOTA).
-
- <li>correct initialization of G1 character set mapping, which used
- line-drawing set as a result of confusion between "DEC Supplemental
- Graphic" and "DEC Special Graphic" character sets
- (see <a href="#xterm_34">patch #34</a> regarding DECSTR).
-
- <li>correct ifdef in main.c for variable utret (patch by
- Bernhard Rosenkraenzer).
-
- <li>document in xterm's manpage how to use XFree86 ":unscaled" keyword
- to suppress scaling of bold fonts.
-
- <li>when deriving bold fontname from normal fontname, use the normal
- font's average width to avoid for example selecting 7x13bold
- from an 8x13 normal font (Debian #107769).
-</ul>
-
-<H1><A NAME="xterm_181">Patch #181 - 2003/10/26 - XFree86 4.3.99.15</A></H1>
-<ul>
- <li>implement <code>boldMode</code> for wide-character logic in
- <code>drawXtermText()</code> (report by Michael Schroeder).
-
- <li>modify <code>UXTerm.ad</code> resource file to include
- "XTerm-color" rather than "XTerm", in case the latter file contains
- no color resource definitions, e.g., after <a
- href="#xterm_180">patch #180</a>.
-
- <li>add action <code>load-vt-fonts()</code> and configure option
- <code>--enable-load-vt-fonts</code> which allows users to define
- additional sets of VT-fonts which can be loaded at runtime.
-
- <li>add logic to wide-character support which attempts to load fonts
- specified by <code>utf8Fonts</code> subresources at startup. The
- subresources have the same names as the fonts which they replace,
- e.g., <code>font</code>, <code>font1</code>, etc., so that the
- ISO-10646-1 fonts can be specified in the <code>XTerm</code>
- app-defaults file (this is an adaptation of a patch by Tomohiro
- KUBOTA).
-
- <li>improve Set Font escape string handling by making the relative
- settings apply to the size of the font, as in shift keypad
- plus/minus rather than the menu index.
-
- <li>simplify parameter passing for the <code>set-vt-font</code> action
- and related code.
-
- <li>cleanup some include-ordering, moving some recently-added hardcoded
- stuff into xterm.h where it will not interfere with the configure
- script.
-
- <li>modify <code>xtermAddInput()</code> (see note on augmentation in <a
- href="#xterm_158">patch #158</a>) to use the complete set of
- default keyboard translations so that one can use shifted pageup,
- wheel mouse, etc., while the mouse pointer is over the scrollbar.
- (Debian #178812).
-
- <li>make save/restore mode controls apply to show/blink cursor states.
-
- <li>add escape sequence to start/stop blinking cursor, which allows
- implementing <code>cvvis</code> terminfo capability (request by
- Nate Bargmann).
-
- <li>add <code>indp</code> and <code>rin</code> to terminfo entry.
-
- <li>fix an out-of-bounds array reference in ScrnRefresh() for wide
- characters (report by Dan Harnett, patch by Todd Miller, bug dates
- from <a href="#xterm_141">patch #141</a>).
-</ul>
-
-<H1><A NAME="xterm_180">Patch #180 - 2003/10/12 - XFree86 4.3.99.15</A></H1>
-<ul>
- <li>several fixes for rendering using Xft (option <code>-fa</code>):
- <ul>
- <li>translate Unicode values (from UTF-8 output to xterm) for
- line-drawing to xterm's internal code, etc., since TrueType fonts
- generally do not have either set of line-drawing glyphs. xterm
- can draw these directly (report by Abigail Brady).
- <li>pass 16-bit values rather than 8-bit values to
- xtermXftDrawString() to allow for wide-characters.
- <li>remove spurious check for <code>colorBDMode</code> resource in
- logic that does bold fonts.
- <li>implement underlining.
- </ul>
-
- <li>patches by Ilya Zakharevich:
- <ul>
- <li>improve drawXtermText() by making the recursive calls
- communicate through arguments, and not through saving/restoring
- global variables.
-
- <li>make double-width characters work with <code>-u8</code> option.
-
- <li>modify lookup of double-sized fonts by checking for a match
- ignoring x/y resolution if the first check fails.
- </ul>
-
- <li>make height of TrueType fonts match ascent+descent (patch by
- Keith Packard).
-
- <li>correct configure-script check for imake $CFLAGS, which did not
- check properly if imake was not available.
-
- <li>correct install rule in Makefile.in for <code>uxterm</code>, which
- was attempting to strip the script (newsgroup posting by Fernan
- Aguero).
-
- <li>correct AF/AB strings in termcap for xterm-256color and
- xterm-88color entries (report by Josh Howard).
-
- <li>update wcwidth.c to incorporate changes from Markus Kuhn's
- 2003-05-20 (Unicode 4.0) version of that file.
-
- <li>modify <code>scroll-back</code> and <code>scroll-forw</code>
- actions to accept an adjustment value, e.g.,
- <pre>
- <code>scroll-back(1, page-2)</code></pre>
- to scroll back by 2 lines less than a page (patch by Greg
- Klanderman).
-
- <li>use color resource setting from Debian package for xterm VT100 widget,
- since the choice of blues provides better contrast.
-
- <li>remove color resources from <code>XTerm.ad</code>, leaving them
- only in <code>XTerm-col.ad</code> (prompted by Debian package for
- xterm).
-
- <li>correct configure script option --enable-pty-handshake (report by
- Paul Gilmartin).
-
- <li>add <code>visualBellDelay</code> resource to modify the length of
- time used for visual bell, for very slow displays or very fast
- computers (reports by Ingo van Lil and Doug Toppin).
-
- <li>correct logic for initializing dynamic highlight color (patch by
- Jess Thrysoee).
-
- <li>add a check for non-zero size in call to <code>XCopyArea()</code>
- to accommodate a Solaris bug.
-
- <li>correct typo in example for character classes in xterm manpage
- (Debian #198910).
-
- <li>link xterm with bind_on_load option on Darwin to work around a
- deadlock in the dynamic loader when a signal is received while
- the dynamic loader is looking up symbols (patches by Rob Braun,
- Torrey Lyons).
-
- <li>modify configure script to avoid using "head -1".
-
- <li>update config.guess, config.sub
-
- <li>modify ifdef's to work around inclusion of types FcChar32 and
- XftCharSpec with FreeType 2.0 (see <a href="#xterm_175">patch #175</a>).
-
- <li>modify the predictable version of the generated logfile name (see
- <a href="#xterm_171">patch #171</a>) to append the process-id rather
- than a random value.
-
- <li>resync with XFree86 CVS:
- <ul>
- <li>Enable SCO function keys in xterm
- <li>Make Delete key send DEL by default on SCO in xterm
- </ul>
-</ul>
-
-<H1><A NAME="xterm_179">Patch #179 - 2003/5/21 - XFree86 4.3.99.5</A></H1>
-<ul>
- <li>modify ifdef's for WTMPX_FILE to allow building on cygwin again.
-
- <li>change the default of pty-handshaking configure option (and related
- default for imake) to assume this feature is needed.
-
- <li>add ifdef's so configure option for XawPlus library works (patch
- by Pavel Roskin).
-
- <li>add <code>$(MAIN_DEFINES)</code> to the variables checked by the
- configure script that may contain information set by imake. This
- allows xterm to build/run properly using the configure script on
- IRIX64.
-
- <li>add configure check for ".exe" suffix on cygwin.
-</ul>
-
-<H1><A NAME="xterm_178">Patch #178 - 2003/5/18 - XFree86 4.3.99.5</A></H1>
-<ul>
- <li>modify default for configure <code>--enable-pty-handshake</code>
- option to enable it for Solaris (report by Nelson Beebe).
-
- <li>modify <code>in_put()</code> function to call
- <code>PreeditPosition()</code> only when the cursor's position has
- changed. This addresses report by Stefan Baums of high CPU usage
- while xterm with chinput are running in the background (patch by
- Yong Li).
-
- <li>improved explanation of <code>-ls</code> conflict with
- <code>-e</code> option in xterm manpage (adapted from comments by
- Henning Makholm).
-
- <li>correct comment in terminfo file regarding modifier used for
- <code>kDC</code> (Debian #189764, report by Henning Makholm).
-
- <li>correct/extend some of the keypad description in ctlseqs.ms
- (report by Henning Makholm).
-
- <li>correct keypad-mapping table in input.c so <code>XK_KP_Equal</code>
- works (report by Henning Makholm).
-
- <li>modified to work with CJK double-width (bi-width/monospace) fonts.
- They're similar to Roman Czbora and David Starner's gnuunifonts in
- that Latin letters and numbers have all the same width which is
- exactly the half of the width of East Asian characters. (patch by
- Jungshik Shin &lt;jshin@mailaps.org&gt;).
-
- <li>add configure option <code>--enable-broken-osc</code> and resource
- <code>brokenLinuxOSC</code> to accommodate scripts which do not
- distinguish between running in the Linux console and running in X.
- Linux console recognizes malformed control strings which start
- with an <code>OSC</code>, but are fixed-length, with no terminator.
-
- <li>add configure option <code>--enable-broken-st</code> and resource
- <code>brokenStringTerm</code> to allow
- user to revert one part of the parsing table corrections from
- <a href="#xterm_171">patch #171</a>. (reports by
- Matthias Scheler and
- Kirill Ponomarew indicate that someone's
- network firmware sends an <code>&lt;escape&gt;X</code>).
-
- <li>modify configure <code>--disable-imake</code> to provide values
- for <code>OSMAJORVERSION</code>, <code>OSMINORVERSION</code>,
- <code>FUNCPROTO</code> and <code>NARROWPROTO</code> (report by
- Heiko Schlichting).
-
- <li>correct <code>vttests/16colors.sh</code>, which omitted the
- <code>$SUF</code> variable in output strings (patch by Paul
- Gilmartin).
-
- <li>modify shell scripts in <code>vttests</code> directory to attempt
- to use named signals in the <code>trap</code> statement, making
- this portable to OS/390 (report by Paul Gilmartin). Tested on
- SunOS 4.1.4, which implements only numbers.
-</ul>
-
-<H1><A NAME="xterm_177">Patch #177 - 2003/3/23 - XFree86 4.3.0</A></H1>
-<ul>
- <li>fix definition of <code>USE_HANDSHAKE</code>, must be numeric
- (reported by Jens Schleusener).
-</ul>
-
-<H1><A NAME="xterm_176">Patch #176 - 2003/3/22 - XFree86 4.3.0</A></H1>
-<ul>
- <li>add configure option <code>--enable-pty-handshake</code> to allow
- one to compile-in support for the pty handshaking logic, and
- resource <code>ptyHandshake</code> to enable or disable it
- (suggested by Ian Collier).
-
- <li>restore <code>USE_HANDSHAKE</code> ifdef removed in
- <a href="#xterm_159">patch #159</a>
- to address Debian #39964.
-
- <li>move ifdef's for ttysize/winsize into xterm_io.h
-
- <li>simplify loop on <code>tgetent</code>, check if the successive
- entries in the lookup table are the same. That makes xterm do
- one less lookup if there is no "xterm" entry in the termcap file
- (report by Derek Martin).
-
- <li>correct manpage discussion of <code>$TERM</code> and
- <code>$TERMCAP</code> variables, which omitted the Tektronix
- emulation and a note of the final "dumb" fallback.
-
- <li>broaden ifdef for <code>XRegisterIMInstantiateCallback()</code>
- from <a href="#xterm_175">patch #175</a> (XIM fix) to exclude
- non-XFree86 (report by Nelson Beebe indicates this breaks for
- Solaris, IRIX and OSF/1).
-
- <li>correct resource-size for <code>iconFont</code> (this was added
- by X11R6.3).
-
- <li>improve configure check for XKB bell extension, to work around
- inconsistent implementation of this feature (reports by Nelson
- Beebe, Kriston Rehberg and David Ellement).
-
- <li>modify configure-check for <code>tty</code> group to be less
- strict in batch mode (report by Nelson Beebe).
-
- <li>modify to allow building with g++, to use its compiler warnings
- (suggested by Nelson Beebe).
-
- <li>modify <code>dec2ucs[]</code> table to reflect newer codes
- available for scanlines 1, 3, 7, 9 (report by Michael Schroeder).
-
- <li>add configure option for XawPlus library.
-</ul>
-
-<H1><A NAME="xterm_175">Patch #175 - 2003/3/9 - XFree86 4.3.0</A></H1>
-<ul>
- <li>fix a SIGSEGV which could occur if xterm is connecting to XIM
- server, and the XIM server is destroyed (patch by Nam SungHyun).
-
- <li>modify to use built-in line-drawing characters for Xft fonts
- (patch by Andrew Tipton).
-
- <li>make menu reflect the state of the <code>tekInhibit</code>
- resource.
-
- <li>make <code>signalInhibit</code> resource work, i.e., disable the
- menu entries that would send signals to, or exit xterm. This was
- probably broken in X11R5 when logging was disabled (report by Sven
- Mascheck).
-
- <li>changed classes of <code>colorBDMode</code> and similar
- resources that override colors when a video attribute is
- set to <code>ColorAttrMode</code>, to make them distinct
- from <code>ColorMode</code>. This avoids an unexpected
- rendering of reverse video, for example (report by Paul Fox).
-
- <li>changed class of <code>veryBoldColors</code> to
- <code>VeryBoldColors</code>, since
- <code>ColorMode</code> is associated with boolean resources.
-
- <li>add option <code>-k8</code> and resource
- <code>allowC1Printable</code> to allow users of non-VTxxx
- character sets such as KOI-8 to treat the C1 control area
- (character codes 128-159) as printable rather than control
- characters.
-
- <li>add a null-pointer check for return-value of <code>ptsname()</code>
- in HPUX-specific code (report by David Ellement).
-
- <li>revise the ifdef's used for <code>XKB</code> bell support. The
- code was using a nonstandard call <code>XkbStdBell()</code>.
- Changed to use <code>XkbBell()</code> (based on patch by
- &lt;derek@signalmarketing.com&gt;).
-
- <li>add a null-pointer check in <code>xtermLoadFont()</code> in case
- there is no wide-bold font (Nam SungHyun).
-
- <li>change <code>Makefile.in</code> to use autoconf's
- <code>bindir</code>, <code>libdir</code> and <code>mandir</code>
- variables (report by Nam SungHyun).
-
- <li>add <code>le</code> to termcap <code>xterm-basic</code> entry.
- Though missing from older termcaps for xterm, some applications
- check for it (report by Matthias Buelow).
-
- <li>modify <code>uxterm</code> script to strip modifiers such as "@euro"
- from the locale setting before adding ".UTF-8" (Debian #179929).
-
- <li>modify the remaining places where tek4014 emulation uses
- <code>XDefineCursor()</code>, to make it work as originally
- implemented, e.g., when switching back to alpha mode.
- Added test-screen in vttest to test this feature properly.
-</ul>
-
-<H1><A NAME="xterm_174">Patch #174 - 2003/2/25 - XFree86 4.2.99.903</A></H1>
-<ul>
- <li>work-around for XFree86 bug which made <code>XDefineCursor()</code>
- on a shell-window no longer work. The tek4014 emulation used this.
- Use the next lower window (report by Karl Rudolf Bauchspiess).
-
- <li>add a resource setting <code>allowWindowOps</code> to control
- whether the extended window operations should be allowed, e.g.,
- resize, iconify, report window attributes. This is to accommodate
- people who are not capable of using a pager to view log-files.
-</ul>
-
-<H1><A NAME="xterm_173">Patch #173 - 2003/2/6 - XFree86 4.2.99.902</A></H1>
-<ul>
- <li>reset mouse mode to normal on a full reset. This does not apply
- to mouse hilite tracking mode, of course (see ctlseqs.ms).
-
- <li>add a time-delay at the point where mouse hilite tracking mode
- choses to not handle X events, to avoid runaway CPU usage
- (report by D Hugh Redelmeier).
-
- <li>check for illegal character in DECUDK string, quit if detected.
-</ul>
-
-<H1><A NAME="xterm_172">Patch #172 - 2002/12/27 - XFree86 4.2.99.3</A></H1>
-<ul>
- <li>fixes to make repainting of 256-color example work properly
- (reports by Abigail Brady and Scott A Crosby).
- <ul>
- <li>set flag in <code>AllocateAnsiColor()</code> to ensure the color
- is allocated once only.
- <li>fix check in <code>ScrnRefresh</code>, which was comparing
- background colors only if the ANSI foreground colors also were set.
- </ul>
-
- <li>merge <code>Error()</code> calls and some <code>exit()</code> calls
- into <code>SysError()</code>, and change that to add the brief
- explanation for each error code which is provided in the manpage.
- Change a few <code>SysError()</code>, calls to avoid using code 1, to
- avoid confusion with exit status from places that do not use
- <code>SysError()</code>.
-
- <li>simplify logic used to open a debug logfile as the standard error.
-
- <li>modify the <code>-e</code> option so that if it fails, xterm will
- check if only one argument follows, e.g., it was quoted, and then
- retry using <code>sh&nbsp;-c</code>.
-
- <li>modify parsing of DECUDK string parameter to allow a comma between
- pairs of hexadecimal digits (Ray Neuman &lt;raymond@one.com.au&gt;
- reports that "real" terminals accept this; perhaps they simply
- ignore unexpected characters).
-
- <li>fix a few problems with the <code>$TERMCAP</code> string generated
- by <code>resize</code>:
- <ul>
- <li>for Bourne shell, add an <code>export</code> command.
- This was missing as far back as X11R5.
- <li>escape exclamation marks, used in xterm's reset string.
- <li>translate literal <code>\177\</code> to "^?".
- </ul>
-
- <li>improve configure check for <code>tgetent()</code> to work when
- <code>$TERMCAP</code> has been set to a specific entry.
-
- <li>modify <code>minstall.sh</code> to use "%" rather than "@",
- to avoid problems with AFS (report by Zdenek Sekera).
-
- <li>list fatal error codes from <code>error.h</code> in the manpage,
- remove unused codes in <code>error.h</code>.
-
- <li>use more explicit wording for manpage list of color resources,
- since at least one user confused the generic names such as "black"
- with the names in rgb.txt (the latter are now used).
-
- <li>minor fix to description of 1003 mouse mode in ctlseqs.ms
- (Larry Riedel).
-</ul>
-
-<H1><A NAME="xterm_171">Patch #171 - 2002/12/12 - XFree86 4.2.99.3</A></H1>
-<ul>
- <li>modify parser tables to improve detection of malformed control
- sequences, making xterm behave more like a real DEC terminal
- (patch by Paul Williams).
-
- <li>update comment in <code>input.c</code> to document
- <code>Meta</code> as a modifier for escape sequences (patch by D
- Roland Walker).
-
- <li>add ifdef'd code for logging option which adds the hostname and a
- timestamp to the generated logfile name. The ifdef's are setup
- with the configure script (patch by Nelson Beebe).
-
- <li>remove <code>xevents()</code> call from the end of
- <code>BlinkCursor()</code>, to fix an occasional problem
- which caused xterm to pause until a key was pressed.
- The reason for this was that there was no check to ensure that
- there really were events for <code>xevents()</code> to process.
- (patch by Semen A Ustimenko &lt;semenu@FreeBSD.org&gt;).
-
- <li>remove unused mode-params from <code>open()</code> calls that do
- not create a file.
-
- <li>modify configure script to put new items first on
- <code>$CPPFLAGS</code> and <code>$CFLAGS</code> to avoid conflict
- with environment's <em>-I</em> and <em>-D</em> options.
-
- <li>update config.guess, config.sub
-
- <li>resync with XFree86 CVS:
- <ul>
- <li>fix va_args glitches for xterm/libfontconfig: 0 == (void*)0
- isn't true for all platforms (Egbert Eich).
- <li>initialise ProgramName in xterm's main before referencing it
- (#5473, Peter Valchev).
- <li>some cleanup of Imakefile ifdef's (Marc La France).
- </ul>
-</ul>
-
-<H1><A NAME="xterm_170">Patch #170 - 2002/10/13 - XFree86 4.2.1</A></H1>
-<ul>
- <li>correct an off-by-one allocating data for sorted help message.
-
- <li>modify configure script to check for Xpm library, on which XFree86
- Xaw library depends.
-
- <li>update config.guess, config.sub
-</ul>
-
-<H1><A NAME="xterm_169">Patch #169 - 2002/10/5 - XFree86 4.2.1</A></H1>
-<ul>
- <li>modify wording of some options in help message to make them use
- <code>-/+</code> consistently with respect to "on/off" or "off/on".
-
- <li>sort options list which is displayed in help- and syntax-messages
- at runtime to simplify maintenance.
-
- <li>remove support for Amoeba and Minix (Juliusz Chroboczek noted it
- was removed from XFree86 server; there have been no users since
- 1996).
-
- <li>add configure script option <code>--disable-session-mgt</code>
- to control whether the session management code should be compiled-in
- (request by H Merijn Brand).
-
- <li>ifdef'd the session-management changes with
- <code>OPT_SESSION_MGT</code>, to accommodate X11R5 which predates
- the related definitions.
-
- <li>fix <code>decode_keyvalue()</code>, which did not properly parse
- multiple settings as needed for the <code>ttyModes</code> resource,
- since it did not skip over the parsed data.
-
- <li>fix an option-parsing conflict between <code>-class</code> and
- <code>-cjk_width</code> (Nam SungHyun)
-
- <li>add a missing null in <code>XtVaSetValues()</code> call used in
- <code>Cleanup()</code> (Nam SungHyun)
-</ul>
-
-<H1><A NAME="xterm_168">Patch #168 - 2002/9/29 - XFree86 4.2.1</A></H1>
-<ul>
- <li>improve data reported for control sequence that requests window
- position by taking into account the window decorations, e.g.,
- border and title (patch by Jess Thrysoee &lt;jess@thrysoee.dk&gt;).
-
- <li>add <code>-cjk_width</code> and corresponding resource
- <code>cjkWidth</code> (patch by Jungshik Shin
- &lt;jshin@mailaps.org&gt;).
-
- <li>add <code>-into</code> option, for embedding xterm in a Tcl/Tk
- application (patch by George Peter Staplin &lt;georgeps@xmission.com&gt;).
-
- <li>add simple session management (XSM) client capabilities to xterm.
- So a session manager such as, e.g., xsm, should be able to respawn or
- kill xterms without the help of an SM proxy (like smproxy), which is
- a hack and almost always buggy (patch by David Madore).
-
- <li>fix conflict between ifdef's for <code>OPT_DEC_LOCATOR</code> and
- <code>OPT_READLINE</code> in button.c (reported by Ilya Zakharevich).
-
- <li>fix for inconsistent use of <code>struct utmp</code> versus
- <code>struct utmpx</code> introduced in <a href="#xterm_167">patch #167</a>
- (patches by Paul Gilmartin, Marc La France).
-
- <li>modify logic for <code>metaSendsEscape</code> to allow it to work
- in a setup where the Meta-key is not recognized as a modifier by
- the key-translations logic (from a discussion of eightBitInput
- with H.J.Lu, however Vincent Lefevre reported this in January).
-
- <li>use null pointer values consistently, rather than literal "0", for
- ending variable-length argument lists, e.g., for
- <code>execlp()</code> (based on patch by Matthieu Herrb).
-
- <li>correct logic of <code>ChangeAnsiColorRequest()</code>, which would
- do a screen repaint after replying to a request for information.
-
- <li>improve scripts in vttests to work with systems whose shells support
- <code>echo -n</code> and have, as does Debian, an unrelated
- <code>print</code> utility.
-
- <li>add vttests/acolors.sh to demonstrate OSC 4, which queries or
- sets ANSI colors.
-
- <li>fixes for ctlseqs.ms (Pavel Roskin, Ilya Zakharevich).
-
- <li>typos in xterm manpage (Jens Schweikhardt)
-
- <li>remove a redundant GCC_UNUSED from InitPopup() (Nam SungHyun)
-</ul>
-
-<H1><A NAME="xterm_167">Patch #167 - 2002/8/24 - XFree86 4.2.0</A></H1>
-<ul>
- <li>correct ifdef's for <code>USE_TERMCAP</code> to match cygwin
- configuration.
-
- <li>fix several places in ctlseqs.ms which had no boxes around the
- literal text (report by Ilya Zakharevich).
-
- <li>integrated patch from Ilya Zakharevich to extend mouse support for
- readline (ifdef'd with OPT_READLINE).
-
- <li>modify terminfo description to match default for
- <code>modifyCursorKeys</code> resource.
-
- <li>add <code>modifyCursorKeys</code> resource to control how the
- shift- and similar modifiers are used to make a cursor escape
- sequence. The default makes a modified escape sequence always start
- with CSI and puts the modifier as the second parameter, to avoid
- confusing applications that would interpret the first parameter as a
- repeat count. The original behavior can be obtained by setting the
- resource to 0 (from newsgroup discussion with Stephen J Turnbull
- and Jeffrey Altman).
-
- <li>correct missing initializations for <code>appdefaultCursor</code>
- and <code>appdefaultKeypad</code> resources.
-
- <li>add configure option <code>--enable-luit</code> and ifdef'd the
- luit-related code with OPT_LUIT_PROG.
-
- <li>integrate patch by Tomohiro KUBOTA from
- http://www.xfree86.org/pipermail/i18n/2002-July/003378.html which
- modifies xterm to invoke luit.
-
- <li>update wcwidth.c to match Markus Kuhn's 2002-05-18 version.
-
- <li>correct limit-checking in <code>ComputeSelect()</code> to handle
- selections that extend off the visible area; rather
- than modify the parameters to <code>TrackText()</code>, use
- <code>ScrollSelection()</code> to update the highlighting limits.
- (reported by Yegappan Lakshmanan and Nelson Beebe,
- patch by Alexander V Lukyanov).
-
- <li>correct manpage description of <code>tiXtraScroll</code> resource
- (reported by Tony Finch).
-
- <li>changes from OpenBSD:
- <ul>
- <li>Make xterm setgid utmp to be able to update utmp even
- with root privileges revoked.
- <li>If not updating utmp, revoke group privileges totally too.
- </ul>
-
- <li>changes from NetBSD:
- <ul>
- <li>Check that the return value from ttyslot() is greater than 0
- before writing the utmp file.
- Fixes w's "w: Stale utmp entry: &lt;user&gt; &lt;tty&gt; &lt;pty&gt;" errors.
- <li>Use openpty() to deal with new pty naming scheme.
- </ul>
-
- <li>add <code>print-redir</code> action and menu entry to allow user to
- switch terminal in/out of printer controller mode. It appears from
- the manual that a real vt220 would not switch back to normal mode, so
- another mechanism is used (addresses Debian #37517).
-
- <li>check if <code>printerCommand</code> resource string is empty, use
- this to allow user to disable printer function.
-
- <li>trim trailing blanks from resource strings.
-
- <li>check return value from <code>ptsname()</code>, which may return
- null for example if someone has changed the permissions of /dev/pts
- to zero (Debian #121899).
-
- <li>modify OS/2 version to use <code>__UNIXOS2__</code> definition
- rather than <code>__EMX__</code>, related cleanup (patch by Holger
- Veit).
-
- <li>used modified indent 2.0
- (patch <a href="ftp://invisible-island.net/gnu-patches/">20020428</a>)
- to reformat most of the C source files, to simplify maintenance.
-
- <li>fix a couple of places where there were leading tabs on
- symbol-definition lines in Imakefile (Marc La France from report by
- Tony Finch)
-
- <li>add imake variable (TraceXTerm) to allow building debug version
- (Egbert Eich).
-</ul>
-
-<H1><A NAME="xterm_166">Patch #166 - 2002/03/25 - XFree86 4.2.0</A></H1>
-<ul>
- <li>correct a bug in selection: double clicking on a word which
- was partly scrolled off the screen may select that text (report
- by Vincent Lefevre &lt;vincent@vinc17.org&gt;).
-
- <li>implement <code>veryBoldColors</code> resource to control whether
- the corresponding video attribute such as <code>bold</code> is
- displayed when using <code>colorBDMode</code>, etc. (request by Josh
- Howard &lt;jrh@vicor-nb.com&gt;).
-
- <li>define escape sequences for function keys F21-F35 (patch by Steve Wall).
-
- <li>change the colors for the 256-color model, making them less skewed
- toward black (patch by Steve Wall).
-
- <li>add <code>vt100Graphics</code> resource
- (see <a href="#xterm_115">patch #115</a>,
- based on discussion with Glenn Maynard).
-
- <li>ifdef'd Xaw/Xaw3d/neXtaw includes separately to avoid potential
- incompatibilities between these flavors of Athena widgets.
-
- <li>add configure check for XFree86 4.x Xaw library, whose geometry
- management is broken, to avoid trying to use it for toolbar
- configuration.
-
- <li>updates to configure script from vile and lynx to allow
- configure.in to be compiled with autoconf 2.5x
-
- <li>add a check for null pointer return by <code>ptsname()</code>
- (newsgroup posting from Mike Silva &lt;mikesilva@lucent.com&gt;).
-
- <li>fill in a few details needed to allow UTF-8 mode to switch on/off
- after startup. This requires that <code>wideChars</code> resource be
- set. (based on comments in 4 Aug 2001 by Alexey Marinichev
- &lt;lyosha@lyosha.2y.net&gt;).
-
- <li>remove duplicate install rules that make directories, e.g., so installing
- manpage will not create app-defaults directory.
-
- <li>add comment in in <code>do_osc()</code>, reserving cases 30 and 31
- for for Konsole (request by Stephan Binner
- &lt;Stephan.Binner@gmx.de&gt;).
-
- <li>fixes for ctlseqs.ms and xterm.man
- (patch by Werner LEMBERG &lt;wl@gnu.org&gt;).
-
- <li>add check for monochrome display, disabling colorMode in that
- case (fixes Debian #134130).
-
- <li>resync with XFree86 CVS:
- <ul>
- <li>Fix some xterm build warnings on *BSD (David Dawes).
- <li>Only use SA_RESTART in xterm when it's available (Frank Liu).
- <li>Fix incorrect code in signal handlers in most of the clients,
- xterm and xdm not done yet (Matthieu Herrb).
- </ul>
-</ul>
-
-<H1><A NAME="xterm_165">Patch #165 - 2002/01/05 - XFree86 4.1.0</A></H1>
-<ul>
- <li>modify <code>uxterm</code> script to strip encoding part from
- environment variable before adding ".UTF-8" (based on Debian
- #125947, but using a more portable solution).
-
- <li>add an assignment statement in VTInitialize() to make
- <code>awaitInput</code> resource work.
-
- <li>use new macros init_Bres(), etc., in VTInitialize() to add trace of
- the initialization of resources.
-
- <li>modify checks for $LC_ALL, related environment variables to ensure
- the resulting strings are nonempty (report by Markus Kuhn).
-
- <li>add an ifdef in charproc.c for num_ptrs variable in case all
- configure options are disabled.
-
- <li>modify definition of getXtermBackground() to avoid negative array
- index warning on Tru64 (report by Jeremie Petit).
-
- <li>improve fix from patch #165 (still Debian #117184, report by Matt
- Zimmerman &lt;mdz@debian.org&gt;)
-
- <li>correct install rule for uxterm in Makefile.in, to handle the
- case where building in a different directory than xterm's source
- (patch by Paul Gilmartin).
-
- <li>documented ANSI.SYS-style cursor save/restore escape sequences
- in ctlseqs.ms, which are in xterm since X11R5.
-
- <li>correct two entries in the default charClass table, which did not
- follow the manpage comment about the character number corresponding
- to the class (patch by Marc Bevand &lt;bevand_m@epita.fr&gt;).
-
- <li>fix a couple of typos in comments in the app-defaults files
- (David Krause &lt;xfree86@davidkrause.com&gt;).
-
- <li>resync with XFree86 CVS:
- <ul>
- <li>update language of copyrights in some files to reflect the fact
- that they were reassigned from X Consortium to The Open Group in
- 1998. Note that this xterm source is derived from the 1996
- version from X Consortium, does not incorporate changes made by X
- Consortium or The Open Group after that date, hence we do not add
- The Open Group's 1998 copyright date to related files.
-
- <li>save/restore <code>errno</code> in signal catcher (Matthieu Herrb).
-
- <li>modify UXTerm.ad's font5 resource so that xterm can display double
- width characters using a font distributed with XFree86 (Tomohiro KUBOTA).
- </ul>
-</ul>
-
-<H1><A NAME="xterm_164">Patch #163 - 2001/11/13 - XFree86 4.1.0</A></H1>
-<ul>
- <li>correct a case where <code>ptyInitialErase</code> and
- <code>backarrowKeyIsErase</code> resources combine to set
- <code>DECBKM</code> mode, but a <code>reset</code> command would not
- reset xterm to that state, making the erase character revert to ^H
- (Debian #117184)
-</ul>
-
-<H1><A NAME="xterm_163">Patch #163 - 2001/11/04 - XFree86 4.1.0</A></H1>
-<ul>
- <li>correct ifdef's for <code>__QNX__</code> and
- <code>USE_SYSV_PGRP</code> in main.c call to <code>tcsetpgrp</code>,
- which broke bash behavior around <a href="#xterm_140">patch #140</a>
- (report/patch by Frank Liu &lt;fliu@mail.vipstage.com&gt;).
-
- <li>modify trace.c to fix missing definition of GCC_UNUSED for
- compilers other than gcc when configured for trace code (report/patch
- by Paul Gilmartin).
-
- <li>change format in TraceOptions() to use long rather than int, since
- the latter could lose precision on 64-bit machines (report/patch by
- Nelson Beebe).
-
- <li>modify xterm manual page and minstall.sh to allow imake rules
- to define location of app-defaults directory (Debian #87611).
-
- <li>review/update list of conflicting preprocesor symbols to remove
- from $CPPFLAGS at the end of the configure script. In particular,
- this allows one to configure xterm without the utempter library on
- Redhat 7.1 (report/patch by Adam Sulmicki).
-</ul>
-
-<H1><A NAME="xterm_162">Patch #162 - 2001/10/23 - XFree86 4.1.0</A></H1>
-<ul>
- <li>correct logic that processes <code>-class</code> option, so that
- a following <code>-e</code> option is handled (Debian #116297).
-
- <li>improve options-decoding to allow <code>-version</code> and
- <code>-help</code> options to be combined (Debian #110226).
-
- <li>add a 10 millisecond delay in event loop when processing
- <code>-hold</code> option, to avoid using too much CPU time
- (Debian #116213).
-
- <li>prefix final program execution in <code>uxterm</code> with "exec"
- to avoid a useless shell hanging around (Christian Weisgerber).
-</ul>
-
-<H1><A NAME="xterm_161">Patch #161 - 2001/10/10 - XFree86 4.1.0</A></H1>
-<ul>
- <li>modify logic that resets keypad application mode to avoid doing
- this if there is no modifier associated with the Num_Lock keysym
- (report by John E Davis &lt;davis@space.mit.edu&gt; and Alan W Irwin
- &lt;irwin@beluga.phys.uvic.ca&gt;).
-
- <li>add built-in translation for Control/KP_Separator to KP_Subtract,
- to accommodate users who wish to use xmodmap to reassign the top
- row of the numeric keypad.
-
- <li>correct Imakefile install-rule for <code>uxname</code> script
- (reported by Nam SungHyun &lt;namsh@lge.com&gt;).
-
- <li>resync with XFree86 CVS: correct typo in <code>&lt;ncurses/term.h&gt;</code>
- ifdef.
-</ul>
-
-<H1><A NAME="xterm_160">Patch #160 - 2001/10/7 - XFree86 4.1.0</A></H1>
-<ul>
- <li>modify logic in main.c
- (see <a href="#xterm_145">patch #145</a>) to avoid generating the
- same identifier, for example, for /dev/tty1 and /dev/pts/1, which
- is used to denote an entry in the utmp file (Debian bug report
- #84676), A similar fix was also sent by Jerome Borsboom
- &lt;borsboom@westbrabant.net&gt; in May, but I overlooked it when
- reviewing bug reports.
-
- <li>add configure check for <code>&lt;ncurses/term.h&gt;</code> to get
- rid of hardcoded <code>__CYGWIN__</code> ifdef in resize.c
- <p>
- NOTE: The CYGWIN port should not be linking <code>resize</code>
- with ncurses. It appears that the only reason it is, is because
- both the ncurses and termcap ports on that platform are badly
- misconfigured (essential pieces have been removed, etc). Checking
- for <code>&lt;ncurses/term.h&gt;</code> does not hurt anything,
- since there are some correct installations that are set up that
- way.
-
- <li>add a sample <code>uxterm</code> script, which uses the
- <code>UXTerm</code> application defaults for UTF-8 environments.
-
- <li>undo change to xterm application defaults, since this introduced an
- unnecessary incompatibility. The intended functionality was
- already addressed by the <a href="#xterm_141">UXTerm</a>
- app-defaults file.
-
- <li>resync with XFree86 CVS:
- <ul>
- <li>Modified xterm app default to use LFD fontnames instead of old type
- (Michael Schroeder).
- <li>Fix xterm when XIM is disabled - caused a segfault
- (Tomohiro Kubota).
- </ul>
-</ul>
-
-<H1><A NAME="xterm_159">Patch #159 - 2001/9/19 - XFree86 4.1.0</A></H1>
-<ul>
- <li>remove an ifdef for <code>USE_HANDSHAKE</code> added in patch
- #158 from the second <code>TIOCSSIZE</code> ioctl call in the
- initialization code. Paul Gilmartin reports that for Solaris 2.6
- (sparc), stty does not show that xterm sets rows and columns unless
- the second ioctl is executed.
-
- <li>correct treatment of empty parameter list for some OSC strings
- (report by Sami Farin &lt;sfarin@ratol.fi&gt;).
-</ul>
-
-<H1><A NAME="xterm_158">Patch #158 - 2001/9/8 - XFree86 4.1.0</A></H1>
-<ul>
- <li>augment key translations for scrollbar widget to ensure that
- keystrokes intended for the text area are not lost if the mouse
- pointer happens to fall on the scrollbar. This can happen, for
- instance, if the user's <code>app-defaults</code> or
- <code>.Xdefaults</code> file contains a translations resource,
- though it may also happen through unrelated resource settings:
- probably a bug in libXt (reported by Paul Fox
- &lt;pgf@foxharp.boston.ma.us&gt; and Dmitry Yu. Bolkhovityanov
- &lt;D.Yu.Bolkhovityanov@inp.nsk.su&gt;).
-
- <li>widen ifdef's in xterm.h to define <code>__EXTENSIONS__</code> on
- Solaris, for compilers other than gcc. This was added along
- <code>_POSIX_C_SOURCE</code> with in <a href="#xterm_151">patch
- #151</a>, but is not sufficient since Sun's compiler does not define
- <code>__STDC__</code> by default (report by Matthias Scheler
- &lt;tron@zhadum.de&gt;).
-
- <li>modify xterm to obtain the closest matching color if an exact color
- is not available, e.g., on 8-bit displays (patch by Steve Wall)
-
- <li>patch by Tomohiro KUBOTA &lt;tkubota@riken.go.jp&gt; to implement
- "OverTheSpot" preedit type of XIM input:
- <ul>
- <li>This preedit type is a reasonable compromise between
- simpleness of implementation and usefulness. "Root" preedit
- type is easy to implement but not useful; "OnTheSpot" preedit
- type is the best in the point of view of user interface but
- very complex. And more, "OverTheSpot" is the preedit type
- which the most XIM servers support. Thus, to achieve reasonable
- usability, support of "OverTheSpot" preedit type is needed.
-
- <li>In "OverTheSpot" preedit type, the preedit (preconversion)
- string is displayed at the position of the cursor. On the
- other hand, it is XIM server's responsibility to display
- the preedit string. Thus, it is needed for XIM client (here
- XTerm) to inform the XIM server of the cursor position.
- And more, to achieve good visual proportion, preedit string
- must be written using proper font. Thus, it is XIM client's
- responsibility to inform the XIM server of the proper font.
- The font must be supplied by "fontset". Fontset is a set of
- fonts with charsets which are specified by the current locale.
- Since XTerm uses ISO10646 fonts regardless of the current locale,
- the fonts for XIM must be prepared separately. It is difficult
- to prepare fonts which are similar to XTerm font. Thus, my
- patch uses a simple way - the default font is "*" which matches
- every fonts and X library will automatically choose fonts with
- proper charsets. I added "-fx" command option and "ximFont"
- resource to override this default font setting.
-
- <li>changed the definition of "OverTheSpot" preedit type
- from XIMPreeditPosition|XIMStatusArea
- to XIMPreeditPosition|XIMStatusNothing.
- This matches the behavior of other programs such as
- Rxvt, Kterm, Gedit.
-
- <li>A tiny XIM bugfix is also included. By calling XSetLocaleModifiers()
- with parameter of "", it can consier XMODIFIERS environmental
- variable which is a standard way for users to specify XIM server
- to be used.
- </ul>
-
- <li>adjust configure script to accommodate repackaging of keysym2ucs.c
- as include-file for xutf8.c (patch by Tomohiro KUBOTA
- &lt;kubota@debian.org&gt;).
-
- <li>add the <code>UXTerm</code> app-defaults file to makefile install
- rules (request by Juliusz Chroboczek).
-
- <li>correct logic in <code>get_termcap()</code>, which returned false
- if the <code>tgetent()</code> call indicated that xterm was linked
- with terminfo. Although the <code>$TERMCAP</code> variable cannot be
- adjusted in this case, xterm still needs information from this call
- to extract data to initialize the erase-mode when the
- <code>ptyInitialErase</code> resource is false.
-
- <li>modify <code>ScrollbarReverseVideo()</code> function to cache the
- original border color, so it can restore that when an application
- flashes the screen (Bugzilla #38872).
-
- <li>resync with XFree86 CVS:
- <ul>
- <li>remove ifdef's for X_NOT_STDC_ENV (David Dawes).
- <li>add Cygwin to special errno handling case in ptydata.c (Alan Hourihane)
- <li>set screen size earlier in initialization, to address a race
- with window manager resizing its clients (Keith Packard).
- </ul>
-</ul>
-
-<H1><A NAME="xterm_157">Patch #157 - 2001/6/18 - XFree86 4.1.0</A></H1>
-<ul>
- <li>patch by Juliusz Chroboczek to clean up button.c and input.c. The
- basic idea is to use a single set of APIs in the XTerm core, and put
- a set of workarounds in a separate file. As you will notice, this
- drastically simplifies parts of the code; in particular, the only
- remaining ifdefs related to the differences between Xutf8 and legacy
- systems are related to the selection provider logic.
-
- This defines two new files, xutf8.h and xutf8.c, provide some
- half-hearted but fully portable emulation for the three Xutf8*
- functions that XTerm uses.
-
- Putting these in a separate file will allow people to experiment with
- more complex versions without making the core of XTerm more difficult
- to maintain.
-
- The functionality of the emulation is as follows.
- <ul>
- <li>Xutf8TextListToTextProperty fully handles XStringstyle and
- XUTF8StringStyle. It will only generate STRING for XStdICCTextStyle,
- and wil only generate Latin-1 in XCompoundTextStyle (but label it as
- COMPOUND_TEXT, as the spec requires). (I have hesitated to make this
- function fail for XStdICCTextStyle and XCompoundTextStyle; this might
- be a smart thing to do, in the hope that the selection requestor will
- try UTF8_STRING afterwards; opinions?)
-
- <li>Xutf8TextPropertyToTextList fully handles STRING and UTF8_STRING.
- It systematically fails for COMPOUND_TEXT.
-
- <li>Xutf8LookupString will properly handle single-keystroke input for
- the keysyms covered by Markus' keysym2ucs function. It will not
- handle either compose key input or external input methods.
- </ul>
-
- <li>add an ifdef for <code>SunXK_F36</code>, used in
- <code>xtermcapKeycode()</code> (patch by Mark Waggoner
- &lt;waggoner@ichips.intel.com&gt;).
-
- <li>modify check for login name to try <code>getlogin()</code> and
- $LOGNAME, $USER environment variables to detect if the user has
- logged in under an alias, i.e., an account with the same user id
- but a different name (Debian bug report #70084).
-
- <li>add resource <code>tiXtraScroll</code>, which can be used to
- preserve the screen contents in the scrollback rather than erasing
- it when starting a fullscreen application such as <code>vi</code>
- (patch by Ken Martin &lt;fletcher@catsreach.org&gt;).
-
- <li>two patches by Denis Zaitsev &lt;zzz@cd-club.ru&gt;:
- <ul>
- <li>added <code>forceBoxChars</code> resource to control the
- "line-drawing characters" option.
-
- <li>added <code>freeBoldBox</code> resource, which, when set true,
- suppresses check in <code>same_font_size()</code>, so xterm does
- not attempt to ensure that the bold font is the same size as
- the normal font.
- </ul>
-
- <li>change the color class for ANSI colors and similar ones such as
- bold-color, etc., to follow the convention that the classname is the
- instance name with a leading capital (e.g., <code>color0</code> and
- <code>Color0</code> rather than <code>color0</code> and
- <code>Foreground</code>). There was little use for Foreground as a
- class other than to create occasional confusion and bug reports, most
- recently by Nelson Beebe who reports that it disables colors in xterm
- but not on Linux, which is probably due to a difference in resource
- evaluation order. A configure script option (--disable-color-class)
- is provided for anyone who did use the older behavior.
-
- <li>fix a signal-handling bug. When running xterm with
- <code>ksh</code> or similar shell such as bash 2.05, xterm will hang
- and not respond to keystrokes after the user types
- <code>suspend</code>. Additionally the popup menus do not respond,
- so it is not possible to send SIGCONT to the shell.
- What is happening is that the shell is sending itself SIGSTOP, and it
- is being stopped. Per specification it also means that the operating
- system is sending SIGCHLD to parent to the bash (XTERM).
- Now the issue is that xterm assumes it cannot happen and it expects
- to receive SIGCHLD only upon <em>termination</em> of its children.
- This causes a deadlock with xterm waiting for the child to
- die, and the child waiting for SIGCONT.
- (report/patch by Adam Sulmicki), analysis/testing by Sven Mascheck
- &lt;sven.mascheck@student.uni-ulm.de&gt;).
-
- <li>correct some inconsistent checks for <code>XtReleaseGC()</code>
- calls in <code>xtermLoadFont()</code> (patch by Nam SungHyun
- &lt;namsh@lge.com&gt;).
-
- <li>updated wcwidth.c and keysym2ucs.c to versions dated 2001/1/12
- and 2001/4/18, respectively from
- http://www.cl.cam.ac.uk/~mgk25/ucs/
-
- <li>correction to change from <a href="#xterm_90">patch #90</a>,
- which was intended to
- reset the saved cursor position for normal/alternate screens
- on a soft reset, but actually wiped out all of the saved cursor
- information. Just reset the saved position for the current screen
- (report by Michael Schroeder).
-
- <li>modify ShowCursor() and HideCursor() so that if the cursor points
- to the second part of a wide character, make the show/hide operate on
- the first position of the wide character (patch by Sven Verdoolaege).
-
- <li>scrolling in the alternate screen just before switching back to the
- main screen can cause extra blank lines to be inserted into the
- scrollback buffer (patch by Paul Vojta
- &lt;vojta@math.berkeley.edu&gt;).
-
- <li>resync with XFree86 4.1.0:
- <ul>
- <li>Use TermcapLibrary as -lncurses instead of -ltermcap, fixes
- problem building xterm/resize on Cygwin/XFree86 (Harold Hunt).
- <li>Install xterm.termcap and xterm.terminfo when installing xterm
- (Torrey T. Lyons).
- <li>Fix some build issues on Cygwin/XFree86 (Suhaib Siddiqi).
- <li>Define CBAUD, when it's missing in xterm, on LynxOS
- (Stuart Lissaman).
- </ul>
-</ul>
-
-<H1><A NAME="xterm_156">Patch #156 - 2001/4/28 - XFree86 4.0.3</A></H1>
-<ul>
- <li>change order of selection-target types to make 8-bit xterm prefer
- UTF8_STRING to COMPOUND_TEXT (patch by Juliusz Chroboczek).
-
- <li>document <code>-fa</code>, <code>-fs</code> command-line options
- and <code>faceName</code>, <code>faceSize</code>
- resources which are used by the freetype library support.
-
- <li>if configure script finds freetype libraries, but imake definitions
- do not have the XRENDERFONT definition, define it anyway.
-
- <li>modify configure script check for freetype libraries to include
- <code>&lt;Xlib.h&gt;</code>, since an older version of the related
- headers relies on this (patch by Adam Sulmicki).
-</ul>
-
-<H1><A NAME="xterm_155">Patch #155 - 2001/4/20 - XFree86 4.0.3</A></H1>
-<ul>
- <li>correct return type of in_put() from <a href="#xterm_155">patch #153</a>
- changes, which left it not wide enough for UTF-8 (patch by Bruno Haible).
-</ul>
-
-<H1><A NAME="xterm_154">Patch #154 - 2001/4/11 - XFree86 4.0.3</A></H1>
-<ul>
- <li>undo check for return value from <code>pututline</code> (used for
- debugging) since that function does not return a value on Slackware
- 3.6.
-
- <li>correct length in ScreenWrite, when rendering invisible text
- (patch by Sven Verdoolaege &lt;skimo@kotnet.org&gt;).
-
- <li>fixes/improvements for the <code>i18nSelection</code> resource
- from patch #153, by Bruno Haible:
-
- <ul>
- <li>add missing initialization for <code>i18nSelection</code>
- resource.
-
- <li>split-out the non-ICCM aspect of the
- <code>i18nSelection</code> resource as a new resource,
- <code>brokenSelections</code>.
- </ul>
-
- <li>add configure check for <code>&lt;time.h&gt;</code> and
- <code>&lt;sys/time.h&gt;</code>, to allow for Unixware&nbsp;7,
- which requires both. If the configure script is not used, only
- <code>&lt;time.h&gt;</code> will be included as before (report
- by Thanh Ma).
-
- <li>fix redefinition of <code>dup2</code>, <code>getutent</code>,
- <code>getutid</code>, <code>getutline</code> and <code>sleep</code>
- functions on Unixware&nbsp;7 (report by Thanh Ma
- &lt;Thanh.Ma@casi-rusco.com&gt;)
-
- <li>add a fall-back definition for <code>__hpux</code>, which is
- apparently not defined in some compilers on HPUX 11.0 (reported
- by Clint Olsen).
-
- <li>change VAL_INITIAL_ERASE, which is used as a fallback for the
- <code>"kb"</code> termcap string to 8, since that matches the
- xterm terminal description (request by Alexander V Lukyanov).
-
- <li>correct an off-by-one in <code>ClearInLine</code>, which caused
- the erase-characters (ECH) control to display incorrectly
- (patch by Alexander V Lukyanov).
-
- <li>correct escape sequences shown in terminfo for shifted editing
- keys. The modifier code was for the control key rather than
- the shift key.
-</ul>
-
-<H1><A NAME="xterm_153">Patch #153 - 2001/3/29 - XFree86 4.0.3</A></H1>
-<ul>
- <li>increase PTYCHARLEN to 8 for os390, add some debugging traces
- for UTMP functions (patch by Paul Gilmartin).
-
- <li>correct an misplaced brace in <code>SelectionReceived()</code>
- (patch by Bruno Haible).
-
- <li>correct an assignment dropped in <code>SelectionReceived()</code>
- which made it not compile for wide-characters combined with debug
- traces.
-
- <li>correct typo, clarify description of 88- and 256-color controls
- (report by Bram Moolenaar).
-
- <li>correct a typo in ctlseqs.ms which caused DEC Locator control
- sequences using single quote "'" display grave "`" instead (reported
- by Paul Williams, apparently in patch #114).
-</ul>
-
-<H1><A NAME="xterm_152">Patch #152 - 2001/3/13 - XFree86 4.0.2</A></H1>
-<ul>
- <li>correct index in inner loop in <code>VTInitI18N()</code> from
- patch #151 changes, which resulted in infinite loop under some
- conditions (report/analysis by Paul Gilmartin).
-
- <li>remove spurious "%|" from terminfo sgr capabilities
- (report/analysis by Adam M Costello, Debian bug #89222).
-
- <li>add shell script to adjust list of dynamic libraries linked by
- <code>resize</code> when building with the standalone configure
- script. Otherwise it uses the same list as for xterm, which is
- excessive.
-
- <li>fix a few compiler warnings reported by the 20010305 gcc snapshot.
-</ul>
-
-<H1><A NAME="xterm_151">Patch #151 - 2001/3/10 - XFree86 4.0.2</A></H1>
-<ul>
- <li>patch from Juliusz Chroboczek &lt;jch@pps.jussieu.fr&gt; which
- alters the behaviour of selections in XTerm.
- It is believed to follow the ICCCM + UTF8_STRING to the letter, both
- in UTF-8 and in eight-bit mode. From his description:
- <ul>
- <li>When compiled against XFree86 4.0.2, the patched XTerm will make
- the selection available as COMPOUND_TEXT, STRING or UTF8_STRING in
- both modes. It will request selections in the following order:
- <p>
- UTF-8 mode: UTF8_STRING, TEXT, COMPOUND_TEXT, STRING.<br>
- eight-bit mode: TEXT, COMPOUND_TEXT, UTF8_STRING, STRING.
-
- <li>When compiled against an earlier version of XFree86 (or compiled with
- OPT_UTF8_API=0), it will still obey the ICCCM, but will neither
- request nor provide UTF8_STRING in eight-bit mode, and neither TEXT
- nor COMPOUND_TEXT in UTF-8 mode.
- <li>For compatibility with previous versions of XTerm, a resource
- <code>i18nSelections</code> is provided, please see the manpage for
- details. However, due to an unexpected combination of ICCCM
- extensions by various bits and pieces of the libraries, interacting
- with previous versions of XTerm will work in many locales even
- without this flag. (Please do not set this resource to true by
- default, as this would violate the ICCCM.)
- </ul>
-
- <li>improved error checking/reporting in VTInitI18N(), ensuring that
- lack of input method styles is treated distinctly from a mismatch.
-
- <li>remove an incorrect ifdef from patch #141 which suppressed
- overstriking to simulate bold font when xterm was compiled to support
- wide characters (report/analysis by Adam M Costello
- &lt;amc@cs.berkeley.edu&gt;, fixes Debian bugs #76404, #77575).
-
- <li>modify <code>RequestResize()</code> function to save/restore window
- manager hints. Its call to <code>XtMakeResizeRequest()</code> had
- the undesirable side-effect of clearing window manager hints, e.g.,
- when switching to 132-columns via DECCOLM escape sequence. Window
- manager hints make it simple to resize xterm in terms of character
- cells rather than pixels (reported by Christian Weisgerber as well
- as Debian bug #79939).
- <p>
- This applies to the normal configuration. When built with toolbar
- support, the hints are applied to a different widget level (more
- work will be needed to make hints work with the toolbar).
-
- <li>fix a redefinition warning for resize.c on OpenBSD (patch by
- Christian Weisgerber).
-
- <li>change resource corresponding to <code>-T</code> option to match
- Xt library's <code>-title</code>, i.e., <code>.title</code>
- rather than <code>*title</code> so the command-line options are
- interchangeable as documented (Debian bug report #68843).
-
- <li>add script used from autoconf'd makefile for installing manpages,
- since recent XFree86 changing the way section numbers are represented
- makes the install dependent on extra scripts.
-
- <li>add configure check for freetype libraries and configure option
- --disable-freetype to override this feature.
-
- <li>modify some configure script macros to avoid using changequote(),
- which has been rendered useless in the latest autoconf alpha 2.49c
-
- <li>update config.guess, config.sub to 2001-2-13
-
- <li>remove redundant/contradictory __CYGWIN__ definitions from resize.c
-
- <li>correct manpage typo introduced by X11R6.5 resync.
-</ul>
- Changes from XFree86 4.0.2:
-<ul>
- <li>add definition of <code>_POSIX_C_SOURCE</code> for Solaris to
- make this compile with <code>gcc -ansi -pedantic</code> (report
- by &lt;mark@zang.com&gt;.
-</ul>
-
-<H1><A NAME="xterm_150">Patch #150 - 2000/12/29 - XFree86 4.0.2</A></H1>
-<ul>
- <li>move the binding for shifted keypad plus/minus, which invokes the
- <code>larger-vt-font()</code> and <code>smaller-vt-font()</code>
- actions, respectively, into the translations resource (suggested by
- Marius Gedminas &lt;mgedmin@puni.osf.lt&gt;).
-
- <li>modify configure script to support the
- <code>--program-prefix</code>, <code>--program-suffix</code> and
- <code>--program-transform-name</code> options (request by Alison
- Winters &lt;alison@mirrabooka.com&gt;).
-
- <li>patch from Robert Brady
- <ul>
- <li>fix a scrolling / combining characters display anomaly
-
- <li>fix a problem with double-width characters where if the primary
- font had no box-drawing characters, the right hand half of
- double-width characters was erased (reported by Yao Zhang
- &lt;yzhang@sharemedia.com&gt;).
-
- <li>fix special case of null byte for key handling in UTF-8 locales.
- </ul>
-
- <li>modify logic that compares sizes of normal and bold fonts to be
- more forgiving of the font server's choice of bold font which must
- match the normal font's size. Now <code>same_font_size()</code>
- compares the height of the fonts rather than individually ascent and
- descent, and allows the bold font to be one pixel smaller than the
- normal font (addresses a report by Alan Citterman
- &lt;alan@mticket.com&gt;, who says that something in patches #146 to
- #148 made xterm more likely to overstrike bold fonts, and indirectly
- Debian bug report #76404, which reports the opposite).
-
- <li>make configure script use $CFLAGS and $CPPFLAGS consistently,
- including removing a chunk from configure.in which attempted to
- save/restore $CPPFLAGS while processing value set by the --x-includes
- option, but lost values set in an intervening AC_CHECK_HEADERS. This
- change modifies macros CF_ADD_CFLAGS, CF_ANSI_CC_CHECK and
- CF_X_TOOLKIT, as well as removing variables IMAKE_CFLAGS and X_CFLAGS
- from the generated makefile (the AC_CHECK_HEADERS problem was
- reported by Albert Chin-A-Young &lt;china@thewrittenword.com&lt;).
-
- <li>correct a comparison in SELECTWORD case of ComputeSelect(), which
- resulted in a word-selection wrapping past the first column without
- checking the first column's character class (reported by Christian
- Lacunza &lt;celacunza@netscape.net&gt;
-
- <li>correct a logic in UTF-8 mode for selecting double-width characters;
- a combining character was omitted (patch by Markus Kuhn).
-
- <li>add feature to pop (raise) window when a bell is received
- (patch by Gael Roualland &lt;gael.roualland@dial.oleane.com&gt;).
-
- <li>add __NetBSD__ and __OpenBSD__ to special-case in xterm_io.h
- for USE_POSIX_TERMIOS definition (patch by Christian Weisgerber).
-
- <li>move special-case HPUX include for &lt;sys/bsdtty.h&gt; to
- xterm_io.h to define TIOCSLTC, making HAS_LTCHARS defined for HPUX
- 10.20 (report by Bruno Betro).
-</ul>
-
-<H1><A NAME="xterm_149">Patch #149 - 2000/12/6 - XFree86 4.0.1h</A></H1>
-<ul>
- <li>restructured includes for <code>termios.h</code>,
- <code>termio.h</code> and related definitions for main.c, os2main.c,
- screen.c and resize.c so they will share equivalent definitions in a
- new header <code>xterm_io.h</code>. This is intended to solve some
- problems mainly for HPUX which appear to arise from inconsistent
- definitions for SIGWINCH- and HAS_LTCHARS-related symbols (reports
- by Bruno Betro, Jeremie Petit and Clint Olsen).
-
- <li>improve usability of double-width fonts by allowing normal fonts
- to be given as double-width (from a patch by Fabrice Bellard
- &lt;bellard@email.enst.fr&gt;).
-
- <li>correct a few compiler warnings in TRACE() macros for
- signed/unsigned variable differences (reported by Clint Olsen).
-
- <li>make configure script use $CFLAGS and $CPPFLAGS more consistently,
- i.e., by using CF_ADD_CFLAGS in CF_ANSI_CC macro.
-
- <li>expanded description of environment variables in manual-page.
-
- <li>modify OPT_TCAP_QUERY feature to always return the termcap or
- terminfo capability string in the response, and to read/write the
- names in hexadecimal form to allow for the special case of termcap's
- <code>k;</code> name (patch by Bram Moolenaar).
-
- <li>add OPT_SAME_NAME and OPT_TCAP_QUERY to xtermcfg.hin, so the
- corresponding configure options work (patch by Bram Moolenaar).
-
- <li>resync with XFree86 4.0.1g:
- <ul>
- <li>Rewrite Xft library for Render extension/core text and font management
- Change xterm to use new interface (Keith Packard).
- </ul>
-</ul>
-
-<H1><A NAME="xterm_148">Patch #148 - 2000/10/31 - XFree86 4.0.1d</A></H1>
-<ul>
- <li>document logfile options in man-page.
-
- <li>correct spelling of <code>-samename</code> option in help message.
-
- <li>add configure script option <code>--enable-tcap-query</code>
- (request by Bram Moolenaar).
-
- <li>patch by Bram Moolenaar to add a
- "Co" or "colors" entry to the OPT_TCAP_QUERY feature.
- <li>patch by Kiyokazu SUTO &lt;suto@ks-and-ks.ne.jp&gt;:
- <ul>
- <li>add support for bold font for double width characters.
- The font name may be specified with the command line option
- <code>-fwb</code> or with resource
- <code>wideBoldFont</code> (class <code>WideBoldFont</code>).
- <li>correct underlining of double width character string, which
- was drawn only half width.
- <li>correct binary search of precomposed character table, which
- may return wrong result when <code>int</code> is just 32 bits.
- </ul>
-
- <li>some changes to align terminfo with ncurses 5.2:
- <ul>
- <li>remove xtermm description, retaining xterm-mono since the former
- conflicts with ncurses.
- <li>modify initialization and reset strings to avoid putting the
- save/restore cursor operations bracketing changes to video
- attributes, since the changes could be lost when the cursor is
- restored. This affects xterm-r6 and xterm-8bit (the xterm-xfree86
- entry uses the soft-reset feature which resets scrolling margins
- and origin mode without requiring us to save/restore the cursor
- position).
- <li>make a few entries explicitly inherit from xterm-xfree86 rather
- than xterm: xterm-rep, xterm-xmc, xterm-nrc
- </ul>
-
- <li>ensure that sign-extension does not affect <code>ctype</code>
- macros by using <code>CharOf()</code> macro to coerce the parameter
- to an unsigned char.
-
- <li>resync with XFree86 4.0.1d:
- <ul>
- <li>Add primitive support in xterm for Xft based fonts (Keith Packard).
- The changes are ifdef'd with <code>-DXRENDERFONT</code>.
- </ul>
-</ul>
-
-<H1><A NAME="xterm_147">Patch #147 - 2000/10/26 - XFree86 4.0.1c</A></H1>
-<ul>
- <li>correct implementation of <code>ptyInitialErase</code>: the
- value assigned to <code>initial_erase</code> was for the control
- terminal, which is correct as far as it goes. But there was no
- following test for the pseudo-terminal's erase value, which would
- overwrite the default obtained from the control terminal
- (reported by Christian Weisgerber &lt;naddy@mips.inka.de&gt;).
-
- <li>modify check for printable-characters in OSC string to use xterm's
- ansi_table rather than isprint() macro, to isolate this check from
- locale settings. This fixes a problem using 8-bit characters to
- set the title (reported by Ricardas Cepas &lt;rch@richard.eu.org&gt;).
-
- <li>modify sample scripts to check for printf before print, since the
- latter is not as well standardized (e.g., on Linux).
-
- <li>updated config.sub, config.guess to reflect changes on
- subversions.gnu.org
-</ul>
-
-<H1><A NAME="xterm_146">Patch #146 - 2000/9/12 - XFree86 4.0.1c</A></H1>
-<ul>
- <li>correct two instances overlooked from patch #141 which assumed
- UTF-8 mode without checking, causing a core dump in non-UTF-8 mode
- (one instance was reported by Tommi Virtanen &lt;tv@debian.org&gt;).
-
- <li>correct a problem selecting from the scrollback buffer in UTF-8
- mode by changing remaining getXtermCell() calls to XTERM_CELL() as in
- the non-UTF-8 cases (report by Markus Kuhn, patch by Robert Brady).
-</ul>
-
-<H1><A NAME="xterm_145">Patch #145 - 2000/9/11 - XFree86 4.0.1c</A></H1>
-<ul>
- <li>several changes from Robert Brady for UTF-8 configuration:
- <ul>
- <li>doublewide characters don't lose their accents when the cursor
- moves onto or from them (a visual bug)
-
- <li>fix logic in addXtermCombining, which mean that if the low byte
- of a cell's first combining char was 0, a following combining char
- would go into combining slot 1, not 2.
-
- <li>modify logic for cut-buffers so UTF-8 data is first converted
- to Latin1.
-
- <li>collapse surrogates, 0xfffe, 0xffff to UCS_REPL.
-
- <li>modify to allow xterm to to show combining characters
- attached to doublewidth characters.
-
- <li>correct bug in linewrap with -u8 option (reported by
- Andreas Koenig &lt;andreas.koenig@anima.de&gt;).
- </ul>
-
- <li>several changes to PTY logic (based on request by Tim Ryan
- &lt;timryan@nortelnetworks.com&gt;).
- <ul>
- <li>modify treatment of <code>-S</code> option to to make it work with
- Unix98 PTY's.
-
- <li>restore sense of IsPts flag in <code>get_pty()</code>, which was
- lost in Unix98 changes.
-
- <li>use new functions <code>my_pty_id()</code> and
- <code>my_pty_name()</code> to simplify/fix strings used for utmp,
- wtmp identifiers.
-
- <li>simplify <code>get_pty()</code> function, making it have a single
- return point so its inputs/outputs can be identified.
- </ul>
-
- <li>update config.guess and config.sub and scripts to my 20000819 patch,
- adding cases for OS/2 EMX.
-
- <li>add special case for os390 compiler options to configure script
- (patch by Paul Gilmartin)
-
- <li>fix some unused-variable compiler warnings (reported by
- Zdenek Sekera).
-
- <li>split-out some string functions into xstrings.c, to use them
- more consistently among main.c, os2main.c and resize.c
-
- <li>align termcap/terminfo files, adding entries to make them match.
- The termcap entries are necessarily less complete than the terminfo,
- to fit within 1023 character per entry.
-
- <li>add terminfo entry for xterm-sco (SCO function keys).
-
- <li>modify <code>same_font_name()</code> to properly handle wildcard
- introduced in <code>bold_font_name()</code>, making comparison for
- different fonts succeed when only the normal font is specified. This
- is needed to decide if 1-pixel offset should be used. (reported
- in a newsgroup by Bart Oldeman &lt;enbeo@enbeo.resnet.bris.ac.uk&gt;)
-
- <li>correct preprocessor line for OPT_WIDE_CHARS in drawXtermText()
- from patch #141 which resulted in overstriking for bold fonts not
- working.
-
- <li>correct Imakefile from 4.0.1c resync so UTF-8 modules are in
- UTF8SRC, UTF8OBJ lists, allowing build without UTF-8 support.
-</ul>
-
-<H1><A NAME="xterm_144">Patch #144 - 2000/8/23 - XFree86 4.0.1b</A></H1>
-<ul>
- <li>remove a spurious assignment in ScreenWrite() from Robert Brady's
- patch which set a null at the "end" of the buffer to be written.
- That made the autowrap feature write a blank in the first column for
- the non-UTF-8 configuration, rather than the actual character
- (reported by Alan Citterman &lt;alan@mticket.com&gt;).
-</ul>
-
-<H1><A NAME="xterm_143">Patch #143 - 2000/8/19 - XFree86 4.0.1b</A></H1>
-<ul>
- <li>add a check to ensure that <code>-class</code> command-line option
- is not confused with <code>-c</code> (reported by Paul Townsend
- &lt;aab@aab.cc.purdue.edu&gt;).
-</ul>
-
-<H1><A NAME="xterm_142">Patch #142 - 2000/8/18 - XFree86 4.0.1b</A></H1>
-<ul>
- <li>correction to precompose scripts, so 0061 + 0300 will now be really
- be displayed as 00C0 (patch by Robert Brady
- &lt;robert@susu.org.uk&gt;).
-
- <li>correct macro ClassSelects() in button.c, used to hide ifdef's for
- OPT_WIDE_CHARS in patch #141 (reported by Andreas Paul
- &lt;paula@informatik.tu-muenchen.de&gt;).
-
- <li>change wcwidth.h to include stddef.h rather than wchar.h, which is
- not present on OpenBSD and FreeBSD (reported by Christian
- Weisgerber and Bram Moolenaar).
-
- <li>newer config.sub and config.guess, from lynx 2.8.4dev.7
-</ul>
-
-<H1><A NAME="xterm_141">Patch #141 - 2000/8/14 - XFree86 4.0.1b</A></H1>
-<ul>
- <li>Most of this patch is an integration of Robert Brady's patch #11
- for doublewidth and combining characters, from
- http://www.ecs.soton.ac.uk/~rwb197/xterm/. In this context,
- doublewidth refers to 16-bit character sets which may have glyphs
- occupying two cells.
-
- <li>add command-line option <code>-class</code>, which allows one
- to override xterm's resource class. Also add resource file
- <code>UXTerm.ad</code>, which simplifies using xterm for both
- 8-bit character sets and UTF-8.
-
- <li>fixes/improvements to OPT_TCAP_QUERY logic (patches by Bram
- Moolenaar, Steve Wall).
-</ul>
-
-<H1><A NAME="xterm_140">Patch #140 - 2000/7/23 - XFree86 4.0.1</A></H1>
-<ul>
- <li>modify Makefile.in to circumvent GNU make's built-in suffix rule
- for ".sh" which confuses install.sh with the "make install" target
- (report/patch by Paul Gilmartin).
-
- <li>implement an experimental control sequence which an application may
- use to query the terminal to determine what sequence of characters it
- would send for a given function key. This is ifdef'd with
- OPT_TCAP_QUERY (request by Bram Moolenaar).
-
- <li>add /usr/local to search path in CF_X_ATHENA configure macro
- to build with Xaw3d on OpenBSD (patch by Christian Weisgerber).
-
- <li>add missing <code>#undef HAVE_TERMIO_C_ISPEED</code> to
- xtermcfg.hin, omitted in patch #133 fix for IRIX 6.5 baudrate (report
- by Alain Filbois &lt;Alain.Filbois@loria.fr&gt;).
-
- <li>correct a few errors in xterm.man: font in filename example for
- Tektronix emulation, and description of -nul/+nul command-line
- options (report by Eric Fischer &lt;enf@pobox.com&gt;).
-
- <li>update config.guess and config.sub (from tin and lynx)
-</ul>
-
-<H1><A NAME="xterm_139">Patch #139 - 2000/6/17 - XFree86 4.0d</A></H1>
-<ul>
- <li>back out change to <code>-name</code> command-line option,
- restoring its original behavior (as noted by David Madore, the
- correct interpretation of this option is the application instance
- rather than the application class).
-</ul>
-
-<H1><A NAME="xterm_138">Patch #138 - 2000/6/15 - XFree86 4.0c</A></H1>
-<ul>
- <li>workaround for fixed fonts which are generated from Unicode fonts:
- they omit glyphs for some xterm's less-used line-drawing characters,
- which caused xterm to set a flag telling it to use only its internal
- line-drawing characters. Do not set the flag (it can be set from the
- popup menu), and xterm will generate only the line-drawing glyphs
- which actually are missing.
- <br>
- Otherwise, when used for large fonts, xterm may generate a 2-pixel
- wide line, which can leave dots on the screen.
-
- <li>restore first line of 256colres.pl, omitted in 4.0c diffs.
-</ul>
-<H1><A NAME="xterm_137">Patch #137 - 2000/6/10 - XFree86 4.0b</A></H1>
-<ul>
- <li>make command-line <code>-name</code> option work as documented.
- Apparently this was lost in X11R5 when coding to use
- <code>XtAppInitialize</code>.
-
- <li>limit numeric parameters of control sequences to 65535 to
- simplify checks for numeric overflow.
-
- <li>change index into UDK list to unsigned to guard against numeric
- overflow making the index negative (Taneli Huuskonen
- &lt;huuskone@cc.helsinki.fi&gt;).
-
- <li>change <code>sun&nbsp;function-keys</code> resource name to
- <code>sunFunctionKeys</code> to work around redefinition of the
- token <code>sun</code> by xrdb on Solaris. Similarly, renamed
- resource <code>sun&nbsp;keyboard</code> to <code>sunKeyboard</code>
- (Steve Wall).
-
- <li>change similar resource names for HP and SCO to avoid potential
- conflict with xrdb symbols on other systems, as well as for
- consistency.
-
- <li>reorganized the install targets in the autoconf'd Makefile, adding
- install-app, install-bin, install-dirs and install-man. The
- app-defaults class can be overridden by setting the make variable
- 'CLASS', simplifying customization of xterm as a Unicode terminal,
- e.g., CLASS=UXTerm.
-
- <li>add limit checks to <code>ClearInLine()</code>,
- <code>ScrnInsertChar()</code>, <code>ScrnDeleteChar()</code> to
- correct potential out-of-bounds indexing (prompted by Debian bug
- report #64713, which reported a problem with ICH escape sequences).
-
- <li>updates to config.sub and config.guess
- Kevin Buettner &lt;kev@primenet.com&gt; for elf64_ia64
- Bernd Kuemmerlen &lt;bkuemmer@mevis.de&gt; and MacOS X.
-
- <li>patch from Paul Gilmartin for os390 to check for errno set to
- ENODEV on failure to open /dev/tty when there is no controlling
- terminal.
-
- <li>patch from H Merijn Brand &lt;h.m.brand@hccnet.nl&gt; for
- building on Digital Unix 4.0 and AIX 4.2.
-
- <li>modify DECRQSS reply for DECSCL to additionally report if the
- terminal is set for 8-bit controls.
-</ul>
-
-<H1><A NAME="xterm_136">Patch #136 - 2000/6/3 - XFree86 4.0b</A></H1>
-<ul>
- <li>add a resource (<code>limitResize</code>)
- limiting resizing via the CSI 4 t and CSI 8 t sequences.
-
- <li>ignore out-of-bounds resize requests, i.e., where sign-extension
- or truncation of the parameters would occur.
-</ul>
-
-<H1><A NAME="xterm_135">Patch #135 - 2000/5/29 - XFree86 4.0b</A></H1>
-<ul>
- <li>remove code introduced in #134 which made some backgrounds bold.
-
- <li>minor correction to format of updated $TERMCAP when adding
- <code>kb</code> capability for <code>ptyInitialErase</code> logic.
-
- <li>improved test for SVR4 definition.
-</ul>
-
-<H1><A NAME="xterm_134">Patch #134 - 2000/5/28 - XFree86 4.0b</A></H1>
-<ul>
- <li>update URL's and mailing addresses, moved to http://dickey.his.com
- and dickey@herndon4.his.com
-
- <li>correct missing quotes in CF_TTY_GROUP configure script macro in
- case the script is run in batch mode.
-
- <li>modify ownership-check of log file to ignore the group ownership.
- Otherwise xterm cannot create logfiles in directories with set-gid
- permissions.
-
- <li>simplify the logic that reads termcap data.
-
- <li>add fallback definition for B9600 in case line speed definition
- for 38400 is missing (report by Jack J Woehr &lt;jwoehr@ibm.net&gt;,
- for OpenBSD 2.6).
-
- <li>fix: Set highlightColor, and select a region containing the text
- cursor. If the window loses focus, the cursor becomes hollow, with
- the region inside the cursor being background/foreground, unlike the
- rest of the selection, which is foreground/highlight
- (patch by Ross Paterson &lt;ross@soi.city.ac.uk&gt;).
-
- <li>add configure script tests to define SVR4, SYSV and USE_POSIX_WAIT,
- which enables xterm to compile on Solaris 7 and SCO Openserver
- without imake, though there are still a few features for the latter
- which require <code>sco</code> to be predefined.
-
- <li>patches from Steve Wall:
- <ul>
- <li>add support for two Sun-specific function keys. These keys are
- labeled F11 and F12 on Sun Type 5 keyboards, but return SunXK_F36 and
- SunXK_F37. Support will only be compiled in if the header file
- &lt;X11/Sunkeysym.h&gt; exists and contains the appropriate symbol
- definitions. The keycodes for the DEC keycodes were arbitrary unused
- codes, but the ones for the Sun keycodes are what cmdtool and
- shelltool actually send.
-
- <li>add <code>colorRV</code> and <code>colorRVMode</code> resources to
- allow specifying a color to use for reverse video, similar to the
- existing UL, BD, and BL modes.
-
- <li>add <code>alwaysUseMods</code> resource, to override check if
- <code>alt</code> or <code>meta</code> modifiers are used in
- <code>translations</code> resource. Revamped the code to calculate
- the modifier value, and included Meta if alwaysUseMods is TRUE, using
- values 9-16.
- </ul>
-
- <li>patches from Paul Gilmartin for os390:
- <ul>
- <li>regularize the definition of CONTROL() and remove an
- acknowledged "trial and error" table.
-
- <li>translate "^?" into A2E(0177) which is the EBCDIC "DEL"
- rather than plain 0177 which is the EBCDIC quotation mark.
-
- <li>modify <code>xtermMissingChar()</code> so that EBCDIC codes 128-159
- are not rendered as blanks by X server running on Solaris, which sees
- those as control characters.
-
- <li>make debugging traces (configure --enable-trace)
- work properly with EBCDIC.
- </ul>
-</ul>
-
-<H1><A NAME="xterm_133">Patch #133 - 2000/5/2 - XFree86 4.0a</A></H1>
-<ul>
- <li>add substitutions in autoconf'd Makefile for CPPFLAGS, LDFLAGS and
- AWK (reported by Neil Bird).
-
- <li>correct uninitialized <code>childstat</code> variable from patch
- #131 in <code>creat_as()</code> function, which caused logging to not
- work on Solaris, whose <code>waitpid()</code> function does not
- initialize its parameter. Add check for EINTR on return from
- <code>waitpid()</code> as well (reported by Neil Bird
- &lt;neil.bird@rdel.co.uk&gt;).
-
- <li>remove a redundant check for working <code>setuid()</code> function
- introduced in patch #132 (Greg Smith reports that this does not work
- as intended on os390).
-
- <li>change line speed from 9600bd to 38400bd, to accommodate people who
- mistakenly use $TERM set to <em>vt100</em>, to reduce the effect of
- padding associated with this terminal type.
-
- <li>add configure script check for IRIX 6.5's redefinition of baud
- rates associated with <code>struct termio</code>, to correct a
- situation where the baud rate was initialized to zero (reported by
- Andrew Isaacson &lt;adi@lcse.umn.edu&gt;).
-
- <li>remove unused configure script check for VDISABLE.
-</ul>
-
-<H1><A NAME="xterm_132">Patch #132 - 2000/4/11 - XFree86 4.0a</A></H1>
-<ul>
- <li>undo an incorrect change from patch #113 caused the right scrollbar
- to be positioned incorrectly when re-enabling it (analysis by
- D Roland Walker).
-
- <li>add ctrlFKeys resource, replacing constant for adjusting
- control-F1 to control-F12 to VT220-style F10-F20. The resource
- changes the constant 12 to a default value of 10 (request by
- Jim Knoble &lt;jmknoble@pobox.com&gt;).
-
- <li>correct ifdef'ing for conflict between definitions in AIX's
- &lt;sys/select.h&gt; and &lt;X11/XPoll.h&gt; (reported by Clint
- Olsen).
-
- <li>add checks for return-values of getutid(), initgroups() and
- setuid() in main.c, as well as modifying ifdef's for __osf__ to
- include tty-group and WTMP logic (adapted from patch by Paul Szabo
- &lt;psz@maths.usyd.edu.au&gt;)
-
- <li>modify resize.c to build and work on os390 (uses EBCDIC)
- (adapted from patch by Phil Sidler &lt;Phil.Sidler@airborne.com&gt;)
-
- <li>use Ires(), Bres() and Sres() macros to simplify resource list in
- charproc.c
-
- <li>resync with XFree86 4.0a:
- <ul>
- <li>correct a typo in os2main.c (Holger Veit, from 4.0a).
- </ul>
-</ul>
-
-<H1><A NAME="xterm_131">Patch #131 - 2000/3/3 - XFree86 3.9.18b</A></H1>
-<ul>
- <li>integrate patch by Branden Robinson for improving logfile
- security:
- <ul>
- <li>make the <code>creat_as()</code> function more strict by using
- O_EXCL rather than O_APPEND.
- <li>fixes to make DEBUG ifdef's compile/run, including making the
- debug logfile more unique by appending a timestamp to its name.
- <li>include &lt;term.h&gt; in resize.c, to fix a missing-prototype
- warning.
- </ul>
-
- <li>modified <code>creat_as()</code> a little more, retaining the
- ability to append to a logfile If the user specifies the name.
- Also, check if the opened file (which patch #130 ensures is
- owned by the effective user) is not writable by other users.
-
- <li>use <code>creat_as()</code> logic to make tek4014 screen-copy
- more secure (noted by Branden Robinson).
-
- <li>ifdef'd some of Branden's changes to build/work on older machines.
-
- <li>correct missing initialization of the <code>.mode</code> flag in
- <code>ColorRes</code> struct, from patch #129. This worked on Linux
- because <code>malloc()</code> zeroes memory on that platform
- (reported by Christian Weisgerber).
-
- <li>modify logic for <code>deleteIsDEL</code> resource so it has
- internally 3 states: unspecified, true and false. If unspecified,
- the keyboard type determines whether the Delete key transmits
- <code>&lt;esc&gt;[3~</code> or <code>\177</code>, and the popup menu
- entry reflects the internal state. Otherwise, the popup menu entry
- overrides the keyboard type (suggested by Dr Werner Fink, to make it
- simpler to set resources that imitate the legacy X11R6 xterm).
-</ul>
-
-<H1><A NAME="xterm_130">Patch #130 - 2000/3/1 - XFree86 3.9.18a</A></H1>
-<ul>
- <li>modify <code>scroll-forw()</code> and <code>scroll-back()</code>
- actions, adding a third parameter which will direct xterm to ignore
- the action when mouse reporting is enabled. This is needed for
- the wheel mouse to be used to report to the application rather than
- scroll the window.
-
- <li>add menu entry and action to allow disabling xterm's assumption
- that the current font contains line-drawing characters if the
- font cells 1-31 are nonempty. Some fonts may have other characters
- (reported by Bruno Betro &lt;bruno@iami.mi.cnr.it&gt;).
-
- <li>add a check in <code>creat_as()</code> to ensure that the user
- really owns the logfile that has been opened.
-
- <li>add logic to implement SCO function-keys. (This is really
- incomplete, since I intend to revisit this and make xterm able to
- emulate scoansi better than just the function-keys).
-
- <li>add configure script option --enable-sco-fkeys, minor related fixes
- (patch by Dr Werner Fink).
-
- <li>fix typos in ctlseqs.ms (reported by Bram Moolenaar)
-
- <li>fix typo in sinstall.sh default for $TST_PROG (reported by
- Paul Gilmartin &lt;pg@sweng.stortek.com&gt;)
-</ul>
-
-<H1><A NAME="xterm_129">Patch #129 - 2000/2/26 - XFree86 3.9.18a</A></H1>
-<ul>
- <li>improve initialization of ANSI colors by delaying allocation until
- each color is first used.
-
- <li>remove ifdef that prevented colorBD/colorUL/colorBL resources from
- working when 256-color configuration was built (reported by
- Todd Larason).
-
- <li>fix some minor inconsistencies in terminfo (Debian #58530).
-</ul>
-
-<H1><A NAME="xterm_128">Patch #128 - 2000/2/17 - XFree86 3.9.18</A></H1>
-<ul>
- <li>correct logic for <code>oldXtermFKeys</code> resource, fixes a core
- dump when attempting to set it from the command-line (reported by Dr
- Werner Fink).
- <li>correct ifdef for meta-sends-escap so configure --disable-num-lock
- builds.
-</ul>
-
-<H1><A NAME="xterm_127">Patch #127 - 2000/2/12 - XFree86 3.9.17e</A></H1>
-<ul>
- <li>add resource, popup menu entry and control sequence to allow
- changing the Delete key to send either DEL or the VT220-style
- Remove escape sequence.
-
- <li>remove logic for metaSendsEscape that would allow xterm to send
- <code>&lt;esc&gt;[3~</code> before a function key that would begin
- with <code>&lt;esc&gt;[3~</code> (request by Christian Weisgerber).
-
- <li>add missing action and documentation for meta-sends-escape.
-
- <li>correct a few typos in ctlseqs.ms (incorrect code for Cyan color)
-</ul>
-
-<H1><A NAME="xterm_126">Patch #126 - 2000/2/8 - XFree86 3.9.17c</A></H1>
-<ul>
- <li>patch by Markus Kuhn:
- ensure that xterm will automatically activate the UTF-8 mode whenever
- the name of the locale environment variable suggests that a UTF-8
- locale is in use. This will help that by simply setting LC_CTYPE an
- entire system can be switched over to UTF-8, without users having to
- remember the UTF-8 command line options ("-u8", etc.) of the various
- applications. Command line options and X resource entries can still
- be used to override this default choice.
-
- <li>add old function-keys control sequences and popup menu entry, for
- compatibility with legacy X11R6 xterm.
-
- <li>revert translation of editing keypad "Delete" key to legacy \177.
-
- <li>simplify the color-resource data expressions with macro COLOR_RES,
- for later use in restructuring color initialization.
-
- <li>change encoding of wheel mouse (buttons 4 and 5) to avoid conflict
- with legacy mouse modifiers (suggested by Bram Moolenaar).
-</ul>
-
-<H1><A NAME="xterm_125">Patch #125 - 2000/1/31 - XFree86 3.9.17c</A></H1>
-<ul>
- <li>integrate patch by David Mathog
- &lt;mathog@seqaxp.bio.caltech.edu&gt; to make this work on OpenVMS
-
- <li>rename some functions, e.g., <code>Index</code> to
- <code>xtermIndex</code> so that ports such as VMS which link
- externals ignoring case will not have library conflicts (reported by
- David Mathog).
-
- <li>correct logic of <code>do_reversevideo()</code>, which did not
- update the corresponding popup menu check mark (reported by David
- Mathog, this was a detail overlooked in patch #94).
-
- <li>change TRACE macro so semicolon is not within definition, making
- <em>indent</em> and similar programs work better.
-
- <li>add <code>depend</code> rule to Makefile.in
-
- <li>modify logic of boldColors resource to suppress it if an extended
- color control has been used, e.g., for 88-color or 256-color mode
- (patch by Todd Larason).
-
- <li>revise logic that handles menus and input translation for keyboard
- type so only one can be selected at a time.
-
- <li>restore kdch1=\177 for the Sun function-key type, and make the
- the Delete key send DEL (\177) if the oldXtermFKeys resource is set.
-
- <li>rephrase logic and ifdef's for POSIX VDISABLE to avoid preprocessor
- expression that will not compile on NetBSD/x86 1.4.1 (reported by
- Takaaki Nomura &lt;amadeus@yk.rim.or.jp&gt;).
-
-</ul>
-
-<H1><A NAME="xterm_124">Patch #124 - 2000/1/27 - XFree86 3.9.17b</A></H1>
-<ul>
- <li>change coding of editing keypad's "Delete" key to
- &lt;escape&gt;[3~, in the default (Sun/PC) keyboard mode.
- This makes the terminfo kdch1 capability independent of the
- coding of the backarrow key, which sends either backspace (8)
- or DEL (127). The reason for doing this (compatibility with
- the <em>screen</em> program) outweighs the choice of DEL (127)
- which was used in X11R5/X11R6 xterms. The <em>screen</em>
- program translates whatever matches kdch1 into &lt;escape&gt;[3~,
- even if it happens to be the stty erase character.
-
- <li>add encoding for control/?, to work around xmodmap or key
- translations which may confuse backspace and delete. A control/?
- will send DEL (127), and a control/H will of course send backspace
- (8).
-
- <li>add encoding for kcbt to &lt;escape&gt;[Z (fixes Debian #54840).
-
- <li>minor correction to logic that encodes Sun and DEC function keys
- to avoid sending an escape sequence if the key symbol is not found
- in xterm's lookup table.
-
- <li>simplify ifdef's in main.c for POSIX VDISABLE so the "^-" pattern
- is more likely to be implemented when <em>imake</em> configures xterm
- (fixes Debian #55105).
-
- <li>change manpage to make it clearer what codes are sent by the
- backarrow key.
-</ul>
-
-<H1><A NAME="xterm_123">Patch #123 - 2000/1/22 - XFree86 3.9.17a</A></H1>
-<ul>
- <li>add a note reserving OSC 51 for use in Emacs shell (request by
- Rob Mayoff &lt;mayoff@dqd.com&gt;).
-
- <li>correct a missing backslash in xterm-vt220 termcap.
-
- <li>cleanup remaining quoted includes, preferring bracketed form.
-
- <li>minor configure-script macro updates from tin and vile.
-
- <li>add configure-script option for using utempter library, adapted
- from Redhat 6.1 patch for XFree86 3.3.5
-
- <li>resync with XFree86 3.9.17a:
- <ul>
- <li>correction to QNX support (Frank Guangxin Liu)
- <li>some cosmetic changes that did not correct any reported problems.
- </ul>
-</ul>
-
-<H1><A NAME="xterm_122">Patch #122 - 1999/12/28 - XFree86 3.9.16f</A></H1>
-<ul>
- <li>move the suggested wheel-mouse button translations into charproc.c
- to simplify customization. Correct some minor logic errors in the
- support for buttons 4 and 5, used for wheel mice (reported by
- Bram Moolenaar).
-
- <li>implement <em>metaSendsEscape</em> resource, with corresponding
- control sequence and menu entry. Like <em>eightBitInput</em>, this
- causes xterm to send ESC prefixing the given key, but applies to
- all keys and is independent of the 8-bit/7-bit terminal setting.
- (requests by Alexander V Lukyanov and Marc Feeley).
-
- <li>correct potential indexing with negative subscript in udk_lookup(),
- (reported by Ian Collier &lt;Ian.Collier@comlab.ox.ac.uk&gt;).
-
- <li>modify configure script that sets TERMINFO_DIR to use ${prefix}
- rather than /usr if the --prefix option was specified (request by
- Zdenek Sekera &lt;zs@sgi.com&gt;).
-
- <li>modify checks for repeat-character control sequence to test the
- character class against xterm's state table, rather than the
- isprint() macro (patch by Alexander V Lukyanov).
-
- <li>change several functions to macros to improve speed
-
- <li>two corrections to simulation of bold font via overstriking:
- <ul>
- <li>use clipping to avoid leaving trash at end of the text, and
- <li>add brackets so wide-character logic does not fall-through
- into the overstriking logic (reported by
- Marc Feeley &lt;feeley@IRO.UMontreal.CA&gt;)
- </ul>
-
- <li>add several entries to termcap file to make it have the same set
- of aliases as the terminfo file.
-
- <li>scale the color values used for xterm-256color terminfo entry to
- 0..1000, as expected by ncurses.
-
- <li>change xterm-r6 terminfo definitions for F1-F4 to match program.
-
- <li>Add QNX/Neutrino support (Frank Guangxin Liu
- &lt;frank@ctcqnx4.ctc.cummins.com&gt;)
-</ul>
-<H1><A NAME="xterm_121">Patch #121 - 1999/11/14 - XFree86 3.9.16c</A></H1>
-<ul>
- <li>change label on "Sun/PC Keyboard" popup menu entry to "VT220
- Keyboard", since the checked state corresponds to VT220 rather than
- Sun/PC.
-
- <li>add configure test CF_UTMP_UT_XSTATUS to handle the variants of
- utmp exit status (reports by Dave Ellement, Jeremie Petit, Tomas
- Vanhala).
-
- <li>amend treatment of ALT key
- (see <a href="#xterm_94">patch #94</a>) so that if ALT is used
- as a modifier in key translations, then no parameter will be sent
- in escape sequences for Sun/PC function keys (request by Dr Werner Fink).
-
- <li>modify default for OPT_I18N_SUPPORT to assume that
- <code>XtSetLanguageProc()</code> is available in X11R5.
- <p>
- Caveat: <code>XtSetLanguageProc()</code> was
- added fairly late in the X11R5 patches, and some vendors shipped
- buggy versions of this function (request by Tomas Vanhala).
-
- <li>correct configure macro CF_SYSV_UTMP to test-link with functions
- consistent with the header, e.g., getutent() for utmp.h and
- getutxent() for utmpx.h (reported by Greg Smith).
-
- <li>modify terminfo entry for <code>xterm-xfree86</code> to reflect
- modifiers for shift and control which (from a patch by Alexander V
- Lukyanov).
-
- <li>modify terminfo entry for <code>xterm-sun</code> to match the
- function-key definitions in ncurses. The pageup/pagedown and
- related function keys correspond to the Sun keyboard, which does
- not necessarily correspond with X's notion of those keys.
-
- <li>modify treatment of XK_Delete keysym so it transmits parameterized
- VT220-style <code>&lt;esc&gt;[3~</code> if modifiers (shift, control
- alt) are given (request by Alexander V Lukyanov).
-
- <li>corrected misspelled resource name in command-line option for
- HP function keys.
-</ul>
-
-<H1><A NAME="xterm_120">Patch #120 - 1999/10/28 - XFree86 3.9.16c</A></H1>
-<ul>
- <li>refine the change to <code>SGR_Background()</code> in patch #119,
- by not flushing the pending scrolling operation if the background
- color is not actually changing. This combination occurs when using
- color-ls to display a long listing, since each line ends with an SGR0
- which affects only the foreground color. The unnecessary flushing
- made it noticeably slower (reported by D Roland Walker
- &lt;walker@pobox.com&gt;).
-
- <li>remove obsolete documentation about modifiers which can be returned
- in mouse tracking mode, and modify logic to ignore modifiers other
- than the existing ones, e.g., NumLock (prompted by discussions with
- Christian Weisgerber and Brad Pepers &lt;brad@linuxcanada.com&gt;).
-
- <li>use free bit from obsolete shift-modifier coding of mouse tracking
- button events to encode buttons 4 and 5, e.g., for a wheel mouse
- (requests by Brad Pepers and Bram Moolenaar).
-
- <li>correct a place where the ptyInitialErase logic did not set the
- backarrowKey state, and modify it further to use tgetstr() rather
- than parse the termcap data returned from tgetent() so the
- ptyInitialErase logic will work when xterm is linked with a terminfo
- library (based on a patch by Dr Werner Fink &lt;werner@suse.de&gt;).
-
- <li>fix definition of HAVE_UTMP_UT_HOST for ISC configuration (patch by
- &lt;michael.rohleder@stadt-frankfurt.de&gt;)
-
- <li>improve configure script's utmp tests (based on reports by Greg
- Smith for os390, and David Ellement for HPUX).
-
- <li>modify sinstall.sh to use uid=0 rather than 'root' to determine if
- the installer is privileged. This is needed on some systems since
- more than one account may be privileged (report by Greg Smith).
-
- <li>add an application resource, <code>messages</code> (and a
- corresponding -/+mesg option) which controls the initial permission
- on the terminal: if messages is set to true (the default), behavior
- is as without the patch; if it is set to false (as per -mesg), the
- terminal is opened in mode 0600, thus producing the effect of the
- <code>mesg n</code> command. This is useful for users who want to
- redirect all their messages to one particular xterm: it is more
- pleasant to do this with xterm resources than with explicit calls to
- the <code>mesg</code> program (patch, description by David Madore
- &lt;david.madore@ens.fr&gt;).
-</ul>
-
-<H1><A NAME="xterm_119">Patch #119 - 1999/10/16 - XFree86 3.9.16c</A></H1>
-<ul>
- <li>add responses (DA and DSR) for DEC locator mode
-
- <li>add coding for ANSI color to DA response
-
- <li>implement UTF-8 translation for Media Copy (print) operations.
-
- <li>implement vt320 control sequences for Print Composed Main Display
- and for Print All Pages. The latter directs xterm to print the
- current screen as well as the scrollback buffer.
-
- <li>correct error in _GNU_SOURCE configure test, which left it always
- defined.
-
- <li>add more information, i.e., with strerror for some system calls in
- the main program which may fail due to insufficient permissions
- (prompted by a problem report for <code>-C</code> by Jeremie Petit
- &lt;Jeremie.Petit@digital.com&gt;).
-
- <li>add workaround for conflict between &lt;X11/XPoll.h&gt; and
- &lt;sys/select.h&gt; on AIX 4.3 (Richard Griswold
- &lt;griswold@acm.org&gt;).
-
- <li>add configure script test to resolve conflict between between
- &lt;X11/XPoll.h&gt; and &lt;sys/select.h&gt;
-
- <li>modify translation of UTF-8 sequences to reject "overly long"
- variations (patch by Markus Kuhn).
-
- <li>remove <code>utf8controls</code> resource, since Markus' change
- removes the corresponding logic.
-
- <li>correct a case where colors were not rendered properly. This
- happened when an application inserted several lines, then changed
- colors. If this was done all in one write, then there would be no
- intervening refresh, and the new color was applied to the pending
- scrolling operation which was awaiting the next refresh (reported
- by Stephane Chazelas &lt;Stephane_Chazelas@Raytheon.com&gt;).
-
-</ul>
-
-<H1><A NAME="xterm_118">Patch #118 - 1999/10/5 - XFree86 3.9.16b</A></H1>
-<ul>
- <li>refine configure test for utmp versus utmpx, to build on HP-UX 10.x
- (reported by David Ellement).
-
- <li>move the configure check for <code>const</code> after the check
- for ANSI C compiler options, since those may be required to make
- it work properly on HP-UX.
-
- <li>add configure test for defining <code>_GNU_SOURCE</code>
-
- <li>correction to <em>-hold</em> option, ensure that if data is already
- in the output buffer that it will be displayed before closing the
- PTY.
-
- <li>move the configure checks for setuid install of xterm into a script
- to avoid installing it setuid'd to a non-root user (reported by
- Adam Sulmicki &lt;adam@cfar.umd.edu&gt;).
-
- <li>correct configure script's check for termcap.h to avoid using
- ncurses' version of it on systems that have a working
- <code>tgetent()</code> function. This is needed to make
- <code>resize</code> work properly.
-
- <li>fix some typography in ctlseqs.ms description of DEC locator events
- (reported by Steve Wall).
-</ul>
-
-<H1><A NAME="xterm_117">Patch #117 - 1999/9/29 - XFree86 3.9.16b</A></H1>
-<ul>
- <li>change order of tests in configure script for utmp and utmpx
- to test utmpx first, to compile on Solaris (reported by
- Leena Heino &lt;liinu@uta.fi&gt;
- and Patrik Hagglund &lt;patha@ida.liu.se&gt;).
-
- <li>add a configure test for utmp.ut_xtime, needed for SCO Openserver,
- and for lastlog, needed for Redhat 6.0, to refine the utmp/utmpx
- auto-configure.
-
- <li>remove a spurious comma in an #undef (reported by
- David Green &lt;greendjf@cvhp152.marconicomms.com&gt; and
- David Ellement &lt;ellement@sdd.hp.com&gt; both on HP-UX, whose
- compiler does care about syntax).
-
- <li>change ifdef's using __CYGWIN32__ to __CYGWIN__ (reported by Suhaib
- M. Siddiqi &lt;Ssiddiqi@InspirePharm.Com&gt;, who is told that the
- next Cygnus release will drop that symbol in their next release).
-
- <li>minor cleanup of ifdef's for makeColorPair (patch by Steve Wall).
-
- <li>patch by Alexander V Lukyanov to work around problem observed
- in XFree86 3.3.5, reported as bug #5419 to Mozilla. From the
- problem report:
- <blockquote>
- xterm consumes cpu when selecting text with mouse (holding
- down left mouse button) and when a program working under the
- xterm outputs something to stdout.
- <p>
- Easy way to reproduce:<br>
- <code>while :; do echo aaa; sleep 1; done</code><br>
- (while this runs, select text and hold down left mouse button)
- watch cpu load.<br>
- release left mouse button - spinning stops.
- </blockquote>
-</ul>
-
-<H1><A NAME="xterm_116">Patch #116 - 1999/9/25 - XFree86 3.9.16a</A></H1>
-<ul>
- <li>modify warning if change-ownership of PTY fails; some
- configurations may not happen to have old-style pty's (reported by
- Bob Maynard).
-
- <li>improve check in configure script for group ownership of installed
- xterm; some platforms use the -g option of ls to toggle group off
- rather than on (reported by Greg Smith).
-
- <li>minor improvement to toolbar geometry, to make it not resizable.
- This still is not satisfactory (but is usable) since the toolbar
- overlaps the xterm widget if the window is resized to make it
- smaller. It appears that some work is needed for the xterm widget's
- geometry management to make it function properly.
-
- <li>implement configure script tests for utmp, tty group.
-
- <li>implement <em>-hold</em> option, allowing users to retain the
- window after a shell has exited (this is recently an FAQ, but
- prompted by a comment by Joachim Plaettner-Hochwarth
- &lt;plaettner@aem.umn.edu&gt; in comp.unix.programmer, that the IRIX
- winterm provides this option).
-
- <li>integrated change by Steve Wall to
- add support for DEC Locator control sequences for xterm:
- <pre>
-
- DECEFR - Enable Filter Rectangle
- DECELR - Enable Locator Reports
- DECSLE - Select Locator Events
- DECRQLP - Request Locator Position
- </pre>
- This allows the xterm mouse to be used with applications that use the
- DEC Locator sequences, such as VAX Tpu, or SMG$ based applications.
-
- <li>patch from Matthias Baake &lt;Matthias.Baake@gmx.de&gt;, for print
- action. From his notes:
- <ul>
- <li>Bug 1:
- Underlined text is preceded by ESC [0;2m . This should be ESC [0;4m , ESC
- [2m doesn't seem to have any effect. (print.c/send_SGR)
-
- <li>Bug 2:
- The check for the last non-empty column (while (last &gt; 0) ... in
- print.c/printLine) omits the rightmost column of the screen, the loop must
- start with last = screen-&gt;max_col+1 instead of last = screen-&gt;max_col.
-
- <li>Bug 3:
- Any attributes of the first character (and of all immediately following
- characters with the same attributes) are ignored. The variable attr
- (print.c/printLine) should be initialized with 0, not with *a &amp; SGR_MASK.
- </ul>
-</ul>
-
-<H1><A NAME="xterm_115">Patch #115 - 1999/9/18 - XFree86 3.9.16a</A></H1>
-<ul>
- <li>integrated changes by Steve Wall to implement an 88-color model
- for systems where 256-colors cannot be allocated.
-
- <li>when 256-color configuration is compiled, colored bold and
- underlining is not available; ifdef'd to avoid possible odd effects
- in this case (reported by Steve Wall).
-
- <li>add resource <em>cacheDoublesize</em>, to limit the caching of font
- information for double-sized characters. This addresses a problem
- reported by Aryeh Koenigsberg for X terminals with limited font
- memory.
-
- <li>modify treatment of line-drawing characters in UTF-8 mode so that
- the Unicode values are used rather than the C0 codes for storing the
- translated characters (request by Markus Kuhn).
-</ul>
-
-<H1><A NAME="xterm_114">Patch #114 - 1999/9/15 - XFree86 3.9.16</A></H1>
-<ul>
-
- <li>add configure script checks for Athena headers and libraries under
- /usr/contrib to work on HPUX (reported by several people:
- David Nixon &lt;djn@csc.liv.ac.uk&gt;
- Aryeh Koenigsberg &lt;aryeh.koenigsberg@telrad.co.il&gt;
- Johannes M&#x00E4;hner &lt;johanm@camline.com&gt;
- Andrew Gaylard &lt;andrew.gaylard@bsw.co.za&gt;).
-
- <li>add check to configure script if xterm is installed setgid rather
- than setuid, since wtmp and utmp may be installed with group-writable
- permissions other than root (based on Debian bug report #7112 by Bo
- Branten &lt;bosse@ing.umu.se&gt;).
-
- <li>rewrote logic that removes data from termcap entry, e.g., for
- titeInhibit, to make it less likely to remove the wrong data.
-
- <li>correct logic which checks for missing characters used for line
- drawing. The 0 character was tested unnecessarily, leading to
- some inefficiency when rendering.
-
- <li>change termcap capability which is used as input or output of
- ptyInitialErase logic from <em>kD</em> to <em>kb</em>.
- Christian Weisgerber &lt;naddy@mips.rhein-neckar.de&gt; pointed out
- in effect that <em>kD</em> (in terminfo <em>kdch1</em>) should
- correspond to the control sequence for <em>dch1</em>, which deletes
- from the current position toward the right.
-
- <li>check for failure to change ownership of the PTY device and warn
- when xterm is running setuid'd to root. This was reported to happen
- on the FreeBSD/NetBSD/OpenBSD systems as a result of the chflags()
- call.
-
- <li>add xterm-noapp terminfo entry to illustate a nominally
- bash-compatible terminal description.
-</ul>
-
-<H1><A NAME="xterm_113">Patch #113 - 1999/8/15 - XFree86 3.9.15b</A></H1>
-Several fixes. The main one is a first draft of pulldown menus. It's not
-complete (I have some minor/annoying geometry problems to correct), but is
-usable. Once it's complete I plan to add a menu to support additional
-selections that won't fit on the current popup menus. Also, this fits into my
-longterm plan to allow configuring with Motif libraries.
-
-<ul>
- <li>correct error in input conversion for NRC mode (reported by
- Stefan Traby &lt;stefan@sime.com&gt;).
-
- <li>fix initialization of num_lock data in Misc struct (since those
- fields of the reference widget aren't initialized), and add logic to
- deal with XVision whose NumLock key does not transmit but does alter
- keypad state.
-
- <li>correct a missing return-value in get_pty(), for SCO
-
- <li>add E2A fix for backspace (Greg Smith), i.e.,<br>
- #define VAL_INITIAL_ERASE A2E(127)
-
- <li>correct foreground color within cursor outline when the
- window is unfocused (reported by Stephane Chazelas).
-
- <li>corrected position of scrollbar set in ResizeScrollBar(), which
- left it positioned incorrectly if the right scrollbar were enabled
- from the popup menu but was not initially enabled.
-
- <p>
- I have noticed some additional problems with right-scrollbar on
- X11R5 which I will correct later.
-
- <li>integrate changes by Jean-Claude Michot for QNX from XFree86 3.3.4c
-
- <li>add resources menuBar/MenuBar, menuHeight/MenuHeight for later
- use in toolbar geometry.
-
- <li>add configure option --enable-toolbar
-
- <li>add missing definition to make ziconbeep logic not compile-in when
- configure script disables it.
-
- <li>add configure-check for input-method support in X libraries
-</ul>
-
-<H1><A NAME="xterm_112">Patch #112 - 1999/7/17 - XFree86 3.9Pw</A></H1>
-<ul>
- <li>add null-pointer check to FlushLog(), fixes a core dump when both
- -l and -lf options are used when xterm is configured with wide-character
- support.
-
- <li>remove "ISO" case for SD, which was due to a typographical error in
- ECMA-48 (reported by Paul Williams &lt;paul@celigne.co.uk&gt; for
- vttest).
-
- <li>add "FILES" section to manpage.
-
- <li>generate header file to initialize default resources for colors
- 16-255.
-
- <li>patches by Greg Smith for os390:
- <ul>
- <li>add README.os390
-
- <li>use the pty_search() function to find an available pty/tty pair.
-
- <li>move E2A() call out of getXtermCell() to SaveText() function
- so it will be available in all configurations.
- </ul>
-
- <li>patches by Todd Larason:
- <ul>
- <li>enable SGR 48 5 in ISO color mode, not just 256 color mode
-
- <li>change configure's --disable-256-color option to
- --enable-256-color, to match its effect
-
- <li>fix OSC 4 xx ? (report ansi color) to report a string which can
- actually be used to set the color back
-
- <li>fix OSC 4 xx yy (change ansi color) to not allow setting colors &gt;
- 15 in 16 color mode
-
- <li>simplify the COLOR_ settings a bit in ptyx.h, along with setting
- NUM_ANSI_COLORS needed for #1 and #4 above
-
- <li>correct string-terminator code passed for reference to OSC
- responses; when in 7-bit mode, only the final byte of ST was seen.
-
- <li>Allow multiple color #;name pairs in OSC 4,
- and document changes to match.
- </ul>
-</ul>
-
-<H1><A NAME="xterm_111">Patch #111 - 1999/7/10 - XFree86 3.9Pw</A></H1>
-<ul>
- <li>add control sequences for specifying the RGB value of the ANSI
- colors, and for configuring with 256 colors (patch by Todd Larason
- &lt;jtl@molehill.org&gt;). I made the default configuration to
- 16-colors, because xterm uses the default color map (which has only
- 256 colors).
-
- <li>correct an error in DCS $ q m reporting for colors 8-15 (Todd
- Larason).
-
- <li>add test/demo script for double size characters. Used this to
- test/correct display of double size characters that should wrap,
- underlined double size characters.
-
- <li>increased cache size for double size fonts to 8, to allow for both
- normal and bold fonts (from discussion with Aryeh Koenigsberg
- &lt;aryeh.koenigsberg@telrad.co.il&gt;).
-
- <li>integrated patch from Greg Smith &lt;rys@epaibm.rtpnc.epa.gov&gt;
- for port to OS390 (aka MVS). OS390 uses EBCDIC rather than ASCII.
-
- <li>correct an off-by-one in binary search limits in keysym2ucs.c (Markus
- Kuhn).
-
- <li>implement logging for UTF-8 mode. The output is written in UTF-8 form.
-</ul>
-
-<H1><A NAME="xterm_110">Patch #110 - 1999/6/29 - XFree86 3.9Pu</A></H1>
-<ul>
- <li>If colorMode is enabled by default, compile-in default resources to
- match the colors listed in XTerm-col.ad (this should fix a
- longstanding FAQ).
-
- <li>added new OSC&nbsp;3&nbsp;;&nbsp;PROPNAME=VALUE&nbsp;ST escape
- sequence to set an arbitrary X property on the top level xterm X11
- window. Omit "=VALUE" to delete the X property (patch by Greg Badros
- &lt;gjb@cs.washington.edu&gt;).
-
- <li>change internal flag used for <em>utf8controls</em> resource
- so we allow 31-bit range of characters (suggested by Thomas Wolff).
-
- <li>add check for 16-bit characters in OSC strings, change them to '?'
- (reported by Thomas Wolff).
-
- <li>modify logic of same_font_name() to avoid trying to interpret both
- parameters as wildcard patterns. That does not (cannot) work, and in
- some instances the font server will return unresolved wildcards for
- the normal or bold fontnames, making them match inadvertently,
- triggering the fallback overstrike logic (reported by Tim Adye).
-</ul>
-
-<H1><A NAME="xterm_109">Patch #109 - 1999/6/23 - XFree86 3.9Pt</A></H1>
-<ul>
- <li>correct range-check from patch #108, which resulted in not being
- able to select from the scrollback buffer (reported by Tim Adye
- &lt;T.J.Adye@rl.ac.uk&gt;)
-
- <li>correct "no available ptys" problem with Cygwin B20.1 (patch by Tim
- Adye).
-
- <li>modified install-ti rule in Makefile.in to allow override of the
- terminfo directory when doing a "make install", i.e., by assigning
- to TERMINFO_DIR (request by Zdenek Sekera &lt;zs@sgi.com&gt;).
-
- <li>added install-full rule to Makefile.in
-
- <li>resync mkdirs.sh and install.sh scripts against current autoconf
-
- <li>implement $(DESTDIR) in Makefile.in, making it simple to install
- xterm and associated files into a directory just for packaging a
- binary release (suggested by CaT &lt;cat@zip.com.au&gt;).
-
- <li>change IChar type to unsigned, rather than unsigned short, making
- room for a flag to keep with 16-bit characters to prevent them from
- being interpreted as C0 or C1 controls (reported by Thomas Wolff).
-
- <li>correct a typo from patch #107, incorrect array name, in the
- filterUTF8 function (patch by Bruno Haible &lt;haible@ilog.fr&gt;)
-
- <li>add <em>utf8controls</em> resource to specify whether xterm should
- interpret 16-bit characters unpacked from UTF-8 form as control
- characters if they happen to fall into that range. This behavior
- is left unspecified by the Unicode standard (request by Thomas Wolff).
-
- <li>modify handling of OSC to recover if application sends 16-bit
- characters with codes above 255. We cannot display them as is, but
- translate out-of-range characters to a '?' (reported by Thomas
- Wolff).
-</ul>
-
-<H1><A NAME="xterm_108">Patch #108 - 1999/6/19 - XFree86 3.9Ps</A></H1>
-<ul>
- <li>add a range-check to LastTextCol(), to guard against indexing
- before the beginning of the scrollback buffer. This appears to
- happen with certain fonts under X11R5 (reported by Stephane Chazelas
- &lt;Stephane_Chazelas@Raytheon.com&gt;).
-
- <li>implement resource <em>boldMode</em>, to allow disabling the
- simulation of bold fonts when the bold and normal fonts are not
- different (requested by Will Day &lt;willday@rom.oit.gatech.edu&gt;).
-
- <li>change the atom "UTF-8" to "UTF8_STRING", and fixes a few bugs in
- the UTF-8 selection (patch by Juliusz Chroboczek).
-
- <li>correct logic of binary-search in keysym2ucs.c (patch by Markus
- Kuhn).
-
- <li>add special interpretation of keysym codes above 0x1000000 as
- the corresponding UCS value plus 0x1000000 (patch by Markus Kuhn).
-</ul>
-
-<H1><A NAME="xterm_107">Patch #107 - 1999/6/12 - XFree86 3.9Pq</A></H1>
-<ul>
- <li>Two changes from Stephen P Wall.
- From his description:
- <blockquote>
- The first change is simple - I added ESC[3J to erase the stored lines
- above the screen. That's what the changes to util.c and ctlseqs.ms
- are.
- <p>
- The second change is to get the blinking cursor working. I took out
- the cursorBlinkTime resource, and put in cursorBlink (Boolean),
- cursorOnTime (time cursor is on in msecs) and cursorOffTime, and added
- a cursorblink item to the vtMenu to enable/disable it.
- </blockquote>
-
- <li>Integrated a patch from Juliusz Chroboczek &lt;jec@dcs.ed.ac.uk&gt;.
- From his description:
- <blockquote>
- With this patch, selection conversion works properly:
-<pre>
- ISO 8859-1 xterm -&gt; ISO 8859-1 xterm (transferred as STRING);
- ISO 8859-1 xterm -&gt; UTF-8 xterm (transferred as STRING);
- UTF-8 xterm -&gt; ISO 8859-1 xterm (transferred as STRING);
- UTF-8 xterm -&gt; UTF-8 xterm (transferred as UTF-8).
-</pre>
- It will not work properly if one xterm is in, say, ISO 8859-2.
- Actually, for this case xterm breaks the ICCCM routinely (sending ISO
- 8859-2 data as STRING), so I wouldn't worry too much about it. I have
- not changed the behaviour in eight-bit mode in any way.
- </blockquote>
-</ul>
-
-<H1><A NAME="xterm_106">Patch #106 - 1999/6/9 - XFree86 3.9Pq</A></H1>
-<ul>
- <li>remove duplicate fix for OpenBSD in resize.c
-
- <li>correct logic in ScreenWrite, which did not reset the high bytes
- of 16-bit characters when overwriting them with a 8-bit character
- string (reported by Thomas Wolff).
-
- <li>integrate patch by Markus Kuhn to provide limited support for
- input of UTF-8 16-bit data by a lookup table.
-
- <li>correct check in non_blank_line to ensure we're in wide-character
- mode before looking at the high bytes, for InsertChar.
-</ul>
-<H1><A NAME="xterm_105">Patch #105 - 1999/6/5 - XFree86 3.9Pp</A></H1>
-<ul>
- <li>implement new resource <em>trimSelection</em>, which allows xterm
- to trim trailing blanks from selected lines. This does not affect
- the highlighting. (reported by several people using <em>mutt</em>,
- including
- Hans Morten Kind &lt;edphk@uib.no&gt;,
- Jeremy &lt;jeremy@exit109.com&gt;
- and (Michael Fuller &lt;msf@mds.rmit.edu.au&gt;).
-
- <li>add patch by Matthieu Herrb to include term.h in resize for OpenBSD.
-
- <li>correct logic for UTF-8 in functions that hide and show the cursor;
- it was displaying a space whenever the low byte of the character at
- the cursor position was zero (reported by Thomas Wolff
- &lt;Thomas.Wolff@icn.siemens.de&gt;).
-</ul>
-
-<H1><A NAME="xterm_104">Patch #104 - 1999/5/30 - XFree86 3.9Pn</A></H1>
-This is a resync patch against XFree86 3.9Pn, reflecting changes which were
-submitted by Branden Robinson, who worked with
-Wichert Akkerman &lt;wichert@cs.leidenuniv.nl&gt;
-to set up ifdef's to handle GNU libc 2.1,
-and use getpt() which lets xterm avoid having to know the actual PTY name.
-<p>
-I have also added a few fixes for signed/unsigned mismatches, and corrected
-a problem in the configure script (the UTF-8 code was always configured since
-the Imakefile defines this).
-
-<H1><A NAME="xterm_103">Patch #103 - 1999/5/14 - XFree86 3.9Pm</A></H1>
-<ul>
- <li>correct selection logic: I omitted an offset that accounts for
- the distance into the scrollback buffer when rewriting this for
- patch #101. Also fixed a similar problem for selecting double
- size characters from the scrollback buffer (first was reported
- by D Roland Walker &lt;walker@pobox.com&gt;).
-
- <li>improved support for Unix98 PTY's, using patch in Debian bug report
- #35650, by J.H.M. Dassen &lt;jdassen@wi.leidenuniv.nl&gt;. From
- the patch description:
- <blockquote>
- <ul>
- <li>No longer links xterm against libutil on a glibc2.1 system.
- libutil is a compatibility library and should only be used when
- necessary. Rather than having get_pty() use openpty() from this
- compatibility library, use the real UNIX98 pty support in get_pty()
- (open()ing the master pty, through getpt() if available (glibc
- extension)). Use openpty() only under glibc2.0.
- <li>GNU libc2 is not Linux-specific; already it runs on the Hurd. It
- provides the UNIX98 pty functions (plus the getpt() extension),
- regardless of the underlying OS. Changed two constructs to look for
- GNU libc2 only, not GNU libc2 on Linux.
- </ul>
- </blockquote>
-
- <li>improve font configuration, by checking if the user's resource
- settings for normal and bold fonts give the same font sizes
- (fixes problem reported by Peter Waltenberg &lt;peterw@dascom.com&gt;).
-</ul>
-
-<H1><A NAME="xterm_102">Patch #102 - 1999/5/12 - XFree86 3.9Pm</A></H1>
-<ul>
- <li>revert change to openpty call in patch #101; this causes xterm to
- fail on DEC-Alpha OSF/1 4.0B (reported by H Merijn Brand).
-
- <li>modify print.c to move include of stdio.h after the autoconf'd
- xtermcfg.h since HP's ANSI C compiler otherwise sees inconsistent
- prototype for getopt, probably due to problem with const (reported by
- H Merijn Brand).
-</ul>
-
-<H1><A NAME="xterm_101">Patch #101 - 1999/5/10 - XFree86 3.9Pm</A></H1>
-<ul>
- <li>moved includes and definitions for 'select' from data.h to xterm.h
- to fix problem introduced by prototype for getPtyData, part of UTF-8
- changes (reported by Jens Schleusener &lt;Jens.Schleusener@dlr.de&gt;)
-
- <li>added "Meta &lt;Btn2Down&gt;:clear-saved-lines()" default
- translation (patch by H Merijn Brand)
-
- <li>fixes to configure script and ifdef's in main.c to build on a
- HP9000/D390 (hppa-2.0w) running HP-UX 11.00 (64 bit) with egcs 1.1.2
- and HP's ANSI C compiler (patch by H Merijn Brand
- &lt;PROCURA_BV@CompuServe.com&gt;)
-
- <li>add more parentheses in ifdef's (patch by Bob Maynard).
-
- <li>eliminate conflicting definitions for USE_TERMINFO in resize.c
- (reported by Jeremy Buhler).
-
- <li>change openpty call to pass NULL rather than ttydev parameter,
- since that was used only to estimate the length of the
- corresponding data, and may not really be long enough
- (reported by Andreas Jaeger)
-
- <li>update description in xterm manpage for character class table,
- which said it handles only 7-bit codes.
-
- <li>correct a typo in ScrnDeleteChar() which made it not clear the
- high byte of wide-character data.
-
- <li>add logic to convert selection to UTF-8 form when appropriate.
- This makes select/paste "work", but further work is needed to
- make UTF-8 recognized as a locale in Xlib.
-
- <li>correct right-limit check when selecting double-width characters.
-
- <li>change default answerback response to an empty string.
-</ul>
-
-<H1><A NAME="xterm_100">Patch #100 - 1999/5/3 - XFree86 3.9Pl</A></H1>
-<ul>
- <li>Correct a typo in the default resource value for
- backarrowKeyIsErase: it was always true (reported by Bram
- Moolenaar).
-
- <li>improve configure script's test if the installed xterm is setuid,
- in case that is a symbolic link.
-
- <li>correct "install-ti" rule in Makefile.in, by not setting a blank
- $TERMINFO value. That is interpreted as "." by ncurses' tic.
-</ul>
-
-<H1><A NAME="xterm_99">Patch #99 - 1999/5/2 - XFree86 3.9Pk</A></H1>
-<ul>
- <li>correct logic that computes num_ptrs count of the number of indices
- into the screen buffer. This is the maximum of the colors and
- character-set indices; was incorrect in patch #97.
-
- <li>correct argument type for sigsetjmp, incidental change in patch
- #96's Unix88 PTY patch (reported by Bram Moolenaar).
-
- <li>correct description of secondary DA in ctlseqs.ms (reported by Bram
- Moolenaar).
-
- <li>decouple the backarrowKey and ptyInitialErase resources by
- adding a new resource backarrowKeyIsErase, to accommodate people
- using applications which have hardcoded tests for characters 8 and
- 127 rather than relying on the stty settings.
-
- <li>modify the UTF-8 decoder so that all possible illegal UTF-8
- sequences are properly represented by U+FFFD. This should be very
- helpful for developers of code that output UTF-8 strings for
- debugging. See the file utf-8-test.txt in
- http://www.cl.cam.ac.uk/~mgk25/download/ucs-fonts.tar.gz for a
- demonstration text that contains numerous illegal UTF-8 values.
- (patch by Markus Kuhn).
-
- <li>correct a place in ScrnRefresh where I was filling the high byte of
- a wide character with a space rather than a null (reported by Markus
- Kuhn).
-</ul>
-
-<H1><A NAME="xterm_98">Patch #98 - 1999/4/26 - XFree86 3.9Pk</A></H1>
-<ul>
- <li>correct data manipulation in unparseputc(), broken for
- little-endian machines by patch #97's UTF-8 changes. This meant that
- keyboard input on SunOS did not work, though Linux i386 was fine.
-
- <li>modify initialization for backarrowKey and logic for initial-erase
- to prevent the initial-erase from overriding an explicitly set
- backarrowKey resource (reported by Vikas Agnihotri).
-
- <li>add a missing null-pointer check in ScrnRefresh, for the
- wide-characters configuration.
-</ul>
-
-<H1><A NAME="xterm_97">Patch #97 - 1999/4/25 - XFree86 3.9Pk</A></H1>
-<ul>
- <li>add configure script test for -lutil, needed for openpty call when
- configuring xterm for Glibc-2.1 and Unix98 PTY's (first reported by
- Martin Lorentz" &lt;m.lorentz@w12.link-goe.de&gt;).
-
- <li>completely parenthesize ifdef expressions for Glibc (suggested by
- Bob Maynard).
-
- <li>add initial-erase options (-ie, +ie) to help message (reported by
- Vikas Agnihotri).
-
- <li>remove duplicate definition of USE_USG_PTYS (reported by Jeremy
- Buhler).
-
- <li>change termcap <em>kD</em> and terminfo <em>kdch1</em> to a DEL
- (\177).
- I overlooked this when separating the styles of keyboard with
- the <em>sunKeyboard</em> resources in patch #94, so that it normally
- matches the value of the stty erase character:
- <ul>
- <li>Reported by Jae Gangemi &lt;jgangemi@ccf.rutgers.edu&gt;,
- this caused emacs to not process the DEL properly, combining it
- with succeeding characters.
- <li>This does not appear to be related to a problem which I have
- found with <em>screen</em>, which translates the stty erase into
- the termcap <em>kD</em> or terminfo <em>kdch1</em> value
- (depending on how it is linked)
- if the $TERMCAP variable is set when <em>screen</em> is invoked.
- </ul>
-
- <li>add command-line options for enabling UTF-8 mode: -u8 and +u8.
- The more obvious -utf8 and +utf8 would conflict with xterm's
- -ut and +ut (utmp) options.
-
- The UTF-8 changes were requested by Markus Kuhn
- &lt;Markus.Kuhn@cl.cam.ac.uk&gt;. This patch does not complete UTF-8
- implementation, but makes it usable, i.e., display and refresh work,
- and I am able to display the test cases which Markus provides.
- More work is needed to complete this feature:
- <ul>
- <li>the control sequences for switching in/out of UTF-8 mode are
- partly implemented (don't use them). Similarly, the switching
- between vt100 and tek4014 emulations when UTF-8 mode is enabled
- will not work properly.
- <p>
- You must use the -u8 command line option
- to use this feature, as well as compile with the OPT_WIDE_CHARS
- definition.
- <li>cut/paste only copies 8-bit characters.
- <li>logging is disabled in the wide-character configuration
- <li>printing only writes 8-bit characters.
- <li>input only does 8-bit characters. This is the area that I know
- least about.
- </ul>
-</ul>
-
-<H1><A NAME="xterm_96">Patch #96 - 1999/4/19 - XFree86 3.9Pj</A></H1>
-<ul>
- <li>modify Makefile.in to work with configure script's --srcdir option.
- (patch by Jeremy Buhler &lt;jbuhler@cs.washington.edu&gt;)
-
- <li>add checks for 'echo -n' equivalent for 8colors.sh and 16colors.sh
- scripts (reported by Vikas Agnihotri).
-
- <li>improve logic that looks for bold fonts to allow for wildcards
- in the specification for normal fonts, and to ensure that if
- a bold font is specified as normal, that xterm will simulate a
- bold version of that using a one-pixel offset overstrike
- (reported by Henrik Harmsen &lt;harmsen@erv.ericsson.se&gt;).
-
- <li>correct horizontal spacing of double width line-drawing characters
- that xterm simulates.
-
- <li>improve support for Unix98 PTY's, using patch in Debian bug report
- #35650, by Topi Miettinen &lt;Topi.Miettinen@medialab.sonera.fi&gt;.
- Andreas Jaeger says this also corrects a permissions problem
- reported by cat@zip.net.au
-
- <li>modify initial-erase logic to ensure that <code>ttyModes</code>
- resource overrides it.
-</ul>
-
-<H1><A NAME="xterm_95">Patch #95 - 1999/4/5 - XFree86 3.9Ph</A></H1>
-<ul>
- <li>modify primary DA response to allow a '1' parameter.
-
- <li>add printer and national replacement character sets to VT220
- primary DA response.
-
- <li>document primary and secondary DA responses in ctlseqs.ms
-
- <li>use the patch number (e.g., 95) in the secondary DA response,
- providing user applications a means of determining the version
- of xterm for feature comparison (request by Bram Moolenaar).
-
- <li>make xterm respond to secondary DA when the decTerminalID
- is set for VT100.
-
- <li>limit user-defined keys (DECUDK) to VT220-style keyboard
- when sunKeyBoard resource is true.
-
- <li>modify ifdef's for Linux-2.2.x with Glibc-2.1 to work with
- Glibc-2.1 and no Unix98 PTY support (patch from From Andreas Jaeger
- &lt;aj@arthur.rhein-neckar.de&gt;)
-
- <li>add optional feature (resource and command-line options) to make
- xterm use the PTY's sense of erase character on startup, rather than
- requiring it to be \177, or set the PTY's erase character to match
- xterm's configuration. Note that while $TERMCAP is modified to
- reflect the actual configuration, the terminfo kdch1 string is not
- (request by Dirk H Hohndel &lt;hohndel@suse.de&gt;)
-
- <li>improve scripts in vttests to work with newer shells that do not
- use 'echo -n'.
-
- <li>add fonts.sh example script
-
- <li>correct inequality in handling of "#1" font specification.
-
- <li>correct call to XGetWMNormalHints() used for computing maximum
- screen size; the size hints may not have been set.
-
- <li>begin implementation of support for wide-characters (configure
- option --enable-wide-chars defines OPT_WIDE_CHARS, invoke xterm with
- -wc option to activate this feature). This patch optionally widens
- internal data structures, invokes the 16-bit text output rather than
- the 8-bit version and adds some tables.
-
-</ul>
-<H1><A NAME="xterm_94">Patch #94 - 1999/3/27 - XFree86 3.9Pf</A></H1>
-<ul>
- <li>further fixes for terminfo: ka1, ka3, etc., differ between the
- default xterm-xfree86 and xterm-vt220 entries.
-
- <li>change default (with sunKeyboard resource false) behavior of
- the editing keypad "Delete" to send a 127, like xterm-r6.
- The VT220-style <code>&lt;esc&gt;[3~</code> is sent when
- sunKeyboard is true (reported by Tomas Vanhala).
-
- <li>add parameters to function keys to indicate if shift, control
- or alt are set. The codes are based on a description of
- a DEC VT510 with a PC keyboard, from Jeffrey Altman
- &lt;jaltman@watsun.cc.columbia.edu&gt;.
-
- <li>add control sequence 1035, set-num-lock action and num-lock
- menu entry to control the use of the NumLock and Alt keys for
- the Sun/PC and VT220 keyboard extensions.
-
- <li>implement DECSET/DECRST numeric keypad (DECNKM) mode.
-
- <li>modify terminfo and termcap to use recommended "X Window" or "X11"
- names rather than "X Windows" (reported by Tomas Vanhala).
-
- <li>suppress translation of shifted keypad "+" when sunKeyboard
- is true.
-
- <li>workaround unexpected behavior (perhaps bug) in XmbLookupString,
- which returns trash in the string buffer for numlock and control-key
- combined with keypad-keys.
-
- <li>modify ScrollBarReverseVideo() to keep scrollbar border visible
- when reverse video is toggled.
-
- <li>correct missing case for parameter 17 (set highlight color) in
- dynamic colors control sequences.
-
- <li>extend dynamic colors control sequences to allow users to
- determine the colors and font which are currently active.
-
- <li>minor tweak to OSC responses, to use BEL if the application used
- that to end the request, rather than ST. This works better with
- shell scripts, which may not handle an
- <code>&lt;esc&gt;backslash</code> very well.
-
- <li>separate menu settings for reverse video from that done under
- program control.
-
- <li>corrected ifdef's for menus, which did not allow tek4014 to
- be suppressed properly (reported by Clint Olsen).
-
- <li>integrated patch from Pavel Roskin
- &lt;pavel_roskin@geocities.com&gt;
- for Linux-2.2.x with GLibc-2.1 and
- /dev/ptmx support:
- <ul>
- <li>main.c and resize.c were using different rules to determine
- whether ATT should be defined (actually USE_USG_PTYS is more
- apt).
-
- <li>copy definitions from main.c to resize.c to prevent
- sys/stream.h and sys/ptem.h from inclusion when SYSV is not
- defined
-
- <li>define CNUL if not already defined like other variables.
-
- <li>/dev/tty does exist in Linux, but it doesn't mean, it
- should be used. Therefore EACCES is now an acceptable
- result.
-
- <li>ifdef'd several calls such as <code>ioctl (ptyfd, I_PUSH,
- "ptem")</code> to build on Linux (I_PUSH is not defined when
- sys/stropts.h is not included).
- </ul>
-
- <li>initialize second "ltc" variable in main.c (reported by David
- Dawes).
-
- <li>provide definition for USE_USG_PTYS in screen.c
-
- <li>add resource-files to install rule in standalone Makefile.in
-
- <li>add sample scripts to illustrate titlebar controls, resizing
- and colors.
-</ul>
-
-<H1><A NAME="xterm_93">Patch #93 - 1999/3/14 - XFree86 3.9Pd</A></H1>
-Here are several fixes and minor enhancements. The chief ones
-are the fixes for NumLock mode and reverse video, since we had become
-used to working around the problems.
-<ul>
- <li>remove kfnd/kll/kslt strings from terminfo, because curses
- applications do not necessarily return khome/kend pairs
- (reported by Vikas Agnihotri).
-
- <li>implement NumLock resource which overrides the keyboard tables for the
- special case of keypad keys. This is a problem introduced in xterm
- by X11R6 changes, i.e., an ambiguity which in effect discarded vt100
- keypad support.
-
- <li>modify Sun/PC keyboard mode to extend this (emulation of DEC vt100
- keypad) to the remainder of the numeric keypad. Now, the default
- operating mode of xterm uses the keyboard tables as-is (except if
- the NumLock mode overrides), but provides good vt100 keypad compatibility
- if the Sun/PC keyboard menu item is checked.
-
- <li>separate command-line settings for reverse video from that done
- under program control. This is a problem which was introduced by
- X11R6. Though <em>correct</em>, most users are confused by allowing
- the reset command to undo the effect of the command-line <kbd>-rv</kbd>
- option.
-
- <li>add description of function keys, keypad and cursor keys to ctlseqs.ms
-
- <li>add terminfo entries for xterm-vt52, xterm-sun and xterm-hp
-
- <li>correct typo (missing case value) for DECSET 35, enable/disable
- shifted keypad action and a few compiler warnings (reported by Zdenek
- Sekera &lt;zs@sgi.com&gt;).
-
- <li>correct reporting of color values 8-15 in DECRQSS (reported by
- Vikas Agnihotri).
-
- <li>modify parsing of ttyModes resource to recognize "^-" as "undef"
- (requested by Tomas Vanhala).
-
- <li>integrate/extend changes to add iconify/maximize actions
- (from Edward S. Arthur &lt;eda@ultranet.com&gt;).
-
- <li>add control sequences for maximizing/restoring window, and
- for reporting maximum screen size.
-
- <li>add 'interpret' action, to support local function-key interpretation.
- Used properly, this makes most of the specialized actions of xterm
- redundant.
-
- <li>add control sequence private modes 1051, 1052 and 1052, for
- setting the Sun and HP function key modes, and for setting the
- Sun/PC keyboard mode.
-
- <li>add configure option --disable-maximize
-
- <li>add configure option --disable-num-lcok
-
- <li>extend descriptions of configure script options in INSTALL.
-</ul>
-
-<H1><A NAME="xterm_92">Patch #92 - 1999/2/5 - XFree86 3.9Nz</A></H1>
-<ul>
- <li>increase buffer size for tgetent (i.e., termcap) to 1500. This
- fixes a problem where <em>screen</em> is built using ncurses or
- GNU termcap and <em>xterm</em> is built using the standard termcap
- interface. The former does not limit the termcap size, while the
- latter is assumed to be no longer than 1023 characters. The
- <em>screen</em> program's termcap entry is about 1200 characters
- long.
-
- <li>change update_menu_item() to a function, to simplify debugging.
- This also reduces the executable by 4Kb.
-
- <li>add control sequences for DECSET 30, 1010, 1011 like rxvt (enable
- or disable some features that were only settable via resources or
- command line arguments).
-
- <li>add control sequence for DECSET 35, which enables/disables the
- shifted keypad functions.
-
- <li>add support for switching font sizes, by stepping through the
- font menu using shifted keypad plus and minus.
-
- <li>correct missing initialization of tekInhibit and tekSmall resources.
-
- <li>correct ifdef's in charproc.c for XtNgeometry and XtCGeometry
- (reported by Bram Moolenaar).
-</ul>
-
-<H1><A NAME="xterm_91">Patch #91 - 1999/1/21 - XFree86 3.9Nw</A></H1>
-<ul>
- <li>Implement logic to translate input characters which are mapped
- when in vt220 National Replacement Character mode (requested by
- Tomas Vanhala).
-
- <li>Resync configure scripts with my patches to autoconf 2.13
-
- <li>Change order of -lXmu and -lXext to accommodate cygwin32
- (reported by Vikas Agnihotri).
-
- <li>Add "-ti" option to set terminal emulation level from command
- line rather than via resource.
-
- <li>Simplify some of the preprocessor logic using #elif.
-</ul>
-
-<H1><A NAME="xterm_90">Patch #90 - 1998/12/13 - XFree86 3.9Nq</A></H1>
-This implements several small fixes and enhancements. The chief one implements
-fallback support for line drawing characters with fonts that do not include
-those characters. But I implemented that last.
-
-<ul>
- <li>If any of the glyphs in positions 0-31 (used by xterm to implement
- the VT100 alternate character set) are zero-sized (i.e., missing),
- xterm will reserve a normal space for the glyph when drawing. I
- implemented a simple stroke-drawing function to draw the line-drawing
- characters and a couple of the other (simpler) characters such as
- diamond. (This was suggested by Vikas Agnihotri).
-
- <li>Modify the computation of doublesize characters to work around font
- servers which shift the scaled characters up/down or do not give the
- correct width.
-
- <li>Add popup menu item and corresponding resource settings to disable
- the font-scaling logic for doublesize characters to work around
- (older) font servers which simply do not draw the fonts scaled to the
- size that they said they would. I see this problem on a SunOS system
- running X11R5; the X11R6 servers seem well behaved.
-
- <li>Implement new escape sequence, private mode 1049, which combines
- the switch to/from alternate screen mode with screen clearing and
- cursor save/restore. Unlike the existing escape sequence, this
- clears the alternate screen when switching to it rather than when
- switching to the normal screen, thus retaining the alternate screen
- contents for select/paste operations.
-
- <p>When I implemented the popup menu entry to toggle between the normal
- and alternate screens, I considered only pasting from the normal
- screen to the alternate; this improvement allows either direction.
-
- <li>Changed the termcap and terminfo for xterm-xfree86 and xterm-8bit
- to use the new 1049 private mode.
-
- <li>Modify the logic which switches between normal and alternate
- screens so that the save/restore cursor operations apply only to the
- current screen. That means that applications which use the terminfo
- smcur/rmcur or termcap ti/te capabilities will restore the cursor to
- the original position on the normal screen rather than to the most
- recent place where a save-cursor operation was performed.
-
- <p>I note that a real VT100 terminal would not behave in this way,
- but it is a moot point since the VT100 does not implement alternate
- screen, and therefore the save/restore cursor sequence would not be
- used in this context. I reviewed the logic which switches between
- normal and alternate screens based on some recent newsgroup postings
- as well as a proposed patch in the Debian group which attempts to
- do this (the patch has a bug, however, so I did not use it).
-
- <li>Add popup menu entry for toggling the titeInhibit resource.
-
- <li>Add new resource answerbackString, which overrides the default
- "xterm" returned by xterm when responding to an ENQ (control/E)
- character (request by Rajesh Vaidheeswarran &lt;rv@fore.com&gt;).
-
- <li>Add new resource keyboardDialect for setting the NRC display
- character set (request by Tomas Vanhala, who notes that I should
- add logic to translate the keyboard as well).
-
- <li>Add new command-line option and corresponding resources for making
- xterm generate escape sequences compatible with HP terminals. Like
- the existing Sun escape sequences, this is available as a popup menu
- item. It is enabled by the configure script with the option
- --enable-hp-fkeys (requested by Toni Mueller &lt;sales@oeko.net&gt;).
-
- <li>Add configure script option --disable-boxchars to disable the
- fallback support for line drawing characters.
-
- <li>Fix ifdef's for configure script --disable-ansi-color, and reviewed
- all configure options to ensure that all can be enabled/disabled
- appropriately.
-
- <li>Update config.guess and config.sub, from Lynx.
-</ul>
-
-<H1><A NAME="xterm_89">Patch #89 - 1998/11/20 - XFree86 3.9Nm</A></H1>
-This patch completes the implementation of double-sized character support
-for the VT100 emulation, and fixes a few minor bugs:
-
-<ul>
-<li>corrected the cursor position in HideCursor, which did not multiply
-the column by two when in doublesize mode.
-This bug, which did not appear in normal use,
-dates back to my original <a href="#xterm_44">changes</a> to partly implement
-double-sized characters.
-I noticed it when cat'ing a typescript from vttest's double-sized character
-test.
-<li>ensure that the current line is repainted when switching between
-single and double width characters.
-<li>reduce the number of bits used for double-sized character coding
-from 3 to 2, to make more room for soft-font codes.
-<li>copy newer ifdef's from the XFree86 3.3.3 release's main.c,
-which address details of glibc and powerpc.
-<li>moved definition of DECL_ERRNO in xterm.h to match XFree86 3.3.3
-<li>modify <em>resize</em> to remove the ifdef on SVr4 that suppressed
-printing the script for $LINES and $COLUMNS.
-Solaris' resize utility does this; suppressing the behavior is unnecessary.
-</ul>
-I tested the double-sized characters using vttest and the xfsft patch.
-These fonts worked reasonably well:
-<pre>
- -bitstream-courier-medium-r-normal--0-0-0-0-m-0-iso8859-1
- 9x15
-</pre>
-The iso8859 font does not include box characters, of course, but looks good.
-
-<H1><A NAME="xterm_88">Patch #88 - 1998/10/31 - XFree86 3.9Nk and 3.3.2h</A></H1>
-This refines my #85 patch by checking for a case where the font server
-returns a bold font that does not quite correspond to the normal font.
-When I asked for a bold version of the 6x12 font, the font server
-returned a near equivalent where the ascent and descent values did not
-match, causing xterm to leave lines across the display.
-This patch makes xterm reject that type of mismatch, falling back to the
-old font behavior.
-
-<H1><A NAME="xterm_87">Patch #87 - 1998/10/21 - XFree86 3.9Nj and 3.3.2f</A></H1>
-This corrects a problem reported by Stefan Dalibor. My table entries for the
-<em>printerExtent</em> and <em>printerFormFeed</em> resources used the wrong
-types for sizeof, causing the printer to not work properly on some platforms
-because the <em>printAttributes</em> resource was overwritten (e.g., Digital Unix with DEC Alpha).
-<p>
-I reviewed all of the resource table entries and fixed a potential problem with
-<em>resizeGravity</em>, which was typed as <em>int</em> rather than
-<em>XtGravity</em>.
-
-<H1><A NAME="xterm_86">Patch #86 - 1998/10/14 - XFree86 3.9Nj and 3.3.2e</A></H1>
-A small fix: when switching to/from the continuous mouse reporting mode,
-the event mask was incorrect if xterm was built under X11R5 because the
-original data was saved under an ifdef for active-icon.
-
-<H1><A NAME="xterm_85">Patch #85 - 1998/10/12 - XFree86 3.9Nj and 3.3.2e</A></H1>
-Some cleanup (I noticed the pixel droppings a few months ago after getting a
-new 17" monitor):
-<ul>
- <li>split-out the functions that load/reload fonts for xterm as new
- file fontutils.c to extend them to support automatic loading of
- bold font corresponding to the normal font. Adapted logic from
- EMU 1.3 for this purpose. This fixes most occurrences of pixel
- droppings from bold characters.
-
- <li>modified by renaming variables and adding casts to permit compile
- with g++.
-
- <li>modify headers so they can all be compiled without order
- dependencies, and use bracketed rather than quoting includes to allow
- compile from separate directory.
-
- <li>renamed xtermm terminfo entry to xterm-mono, to avoid conflict with
- Solaris entry now in ncurses.
-</ul>
-
-<H1><A NAME="xterm_84">Patch #84 - 1998/10/9 - XFree86 3.9Ni</A> and 3.3.2e</H1>
-Several small fixes and enhancements, including a patch from
-Bjorn Helgaas:
-<ul>
- <li>correct initialization of TERMCAP environment variable, which
- was frequently set to garbage on non-Linux systems because
- "termcap" and "newtc" contained random data from the stack.
-
- <li>remove the LINEWRAPPED attribute from lines as they are cleared.
- Previously, the attribute was set but never cleared.
-
- <li>make word and line selections work even when lines are wrapped
- by xterm. Previously, selections were limited to one screen line.
-</ul>
-as well as
-<ul>
- <li>modify logic for line-wrapping to reset the associated flag if
- the application deletes a character. This fixes a problem reported
- by Bjorn Helgaas where word/line selection would still wrap even
- after deleting characters from the first line.
- <li>add kll/kH capabilities to xterm-xfree86 entries in termcap and
- terminfo (request by Michael Schroeder).
- <li>shorten descriptions in termcap to make resolved entries all
- shorter than 1023 character limit.
- <li>use DECSTR control sequence to shorten initialization and reset
- strings in xterm-xfree86 termcap and terminfo.
- <li>use rmul/smul and rmir/smir in xterm-r5 terminfo to match termcap.
- <li>correct typos in initialization and reset strings in xterm-r5
- termcap and terminfo.
- <li>disable special translations of key symbols (the backarrow key,
- the editing keypad and the keypad "+") when a modifier other than
- shift, control or numlock is used. This makes xterm handle the meta
- key as expected by people using emacs (reported by Pete Harlan
- &lt;harlan@pointofchoice.com&gt; in linux.debian.user newsgroup).
-</ul>
-
-<H1><A NAME="sync_83">Resync #83 - 1998/10/7 - XFree86 3.3.2e</A></H1>
-
-Merge changes through patch #83 with the 3.3.2e version. This follows a
-patch by Matthieu Herrb &lt;matthieu@laas.fr&gt; to add checks for non-null
-return from malloc.
-
-<H1><A NAME="xterm_83">Patch #83 - 1998/8/25 - XFree86 3.9Nb</A></H1>
-Several small fixes and enhancements:
-<ul>
- <li>add configure test to infer if xterm should be installed setuid
- based on previously installed xterm (reported by Stephen Marley
- and Stefan Dalibor).
-
- <li>integrate/extend patch by Jason Bacon to implement quasi-continuous
- mouse reporting.
-
- <li>correct control sequences transmitted by function keys F1 to F4
- when sunFunctionKeys resource is true (it was still using the
- VT100 control sequences).
-
- <li>modify handling of backarrow key so that the control modifier
- toggles the backspace/delete interpretation set by the
- backarrowKey resource.
-
- <li>limit the row and column values used to report mouse position.
-</ul>
-
-From resync with XFree86 3.9Nb:
-<ul>
- <li>add support for the VSTATUS control character (patch by
- Robert Earl &lt;rearl@teleport.com&gt;).
-</ul>
-
-<H1><A NAME="xterm_82">Patch #82 - 1998/7/15 - XFree86 3.9Aj</A></H1>
-Bug fix for patch #81:
-<ul>
- <li>remove an #undef for NBBY, which caused compile problem on FreeBSD
- (reported by David Dawes).
-</ul>
-
-<H1><A NAME="xterm_81">Patch #81 - 1998/7/14 - XFree86 3.9Aj</A></H1>
-More bug fixes:
-<ul>
- <li>fix conflicting ifdef's for TIOCSLTC when building with Linux on
- AXP aka DEC Alpha (reported by Robin Cutshaw).
-
- <li>correction to patch #79, move assignment for *utptr-&gt;ut_user = 0;
- back into non-SVR4 ifdef in main.c, since this clobbers username on
- Solaris 2.5.1 (analysis by Will Day
- &lt;willday@rom.oit.gatech.edu&gt;).
-
- <li>corrected khome/kend in xterm-8bit terminfo description.
-
- <li>improve cursor color by making it always the reverse of fg/bg
- unless the cursorColor resource is set, i.e., to something other than
- the default foreground (reported by Vikas Agnihotri and Bram
- Moolenaar).
-
- <li>minor fixes for compiler warnings, including a syntax error in
- the AMOEBA ifdef's.
-</ul>
-From resync with XFree86 3.9Aj:
-<ul>
- <li>correction to patch #73, supply missing #else for fallback definitions
- of size_t, time_t (Robin Cutshaw &lt;robin@intercore.com&gt;).
-</ul>
-
-<H1><A NAME="xterm_80">Patch #80 - 1998/6/29 - XFree86 3.9Ai</A></H1>
-This fixes a couple of items leftover or introduced by patch 79:
-<ul>
- <li>take out the logic that suppresses editing-keypad in vt100 mode
- (those keys are too valuable to give up for a fine point of
- emulation).
-
- <li>corrected a couple of places in terminfo where I missed using the
- vt220-style editing-keypad codes for Find/Select (mapped to Home/End).
-
- <li>checked termcap file against terminfo, fix several places where it
- was inconsistent.
-</ul>
-
-<H1><A NAME="xterm_79">Patch #79 - 1998/6/28 - XFree86 3.9Ai</A></H1>
-
-This patch fixes several small bugs:
-<ul>
- <li>use X_EXTRA_LIBS in standalone Makefile.in (patch by Tomas Vanhala).
-
- <li>add new resource 'oldXtermFKeys' which provides backward compatibility
- for F1-F4 control sequences with TOG's xterm.
-
- <li>determine the server's default foreground/background Pixel values,
- needed if the -flipPixels X server option is used (reported by
- David Dawes).
-
- <li>correct logic for F1-F4 function keys so that they generate VT100
- compatible escape sequences in VT220 mode, since that is what the
- numeric keypad is supposed to do (reported by Ron Johnson, Jr.
- &lt;ronjohn@communique.net&gt;).
-
- <li>modify logic for editing keypad to work more like VT220: don't
- pass those codes in VT100-mode unless oldXtermFKeys mode is set.
-
- <li>correct an interaction with the editing-keypad logic that prevented
- backarrow key from sending a 127 for the delete key (the 'remove'
- escape sequence was being sent instead).
-
- <li>use return-value from getuid() rather than the parameter, to work on
- systems which do not update the latter (patch by Kevin Buhr
- &lt;buhr@mozart.stat.wisc.edu&gt;)
-
- <li>correct scrollbar border color when toggling to/from secure keyboard
- mode (patch by Jeff Uphoff &lt;juphoff@tarsier.cv.nrao.edu&gt;)
-
- <li>modifications to terminfo file:
-<ul>
- <li>rename description to xterm-xfree86, adding an entry 'xterm'
- which is derived from xterm-xfree86 to simplify customization.
-
- <li>change string for kdch1 from \177 to \E[3~, to address complaints
- from Debian developers. (This applies to the key labeled "Delete",
- and does not affect the backarrow key).
-
- <li>add user-strings u6, u7, u8, u9 to entries to make them work with
- Daniel Weaver's "tack" program.
-
- <li>modify xterm-24, xterm-bold, xterm-boldso entries to disentangle them from
- explicit dependency upon xterm-xfree86.
-
- <li>add generic 'xterm-color' entry.
-
- <li>minor corrections to xterm-xfree86, xterm-8bit, xterm-r5 and
- xterm-r6 entries.
-</ul>
-</ul>
-
-<H1><A NAME="xterm_78">Patch #78 - 1998/6/3 - XFree86 3.9Ah and 3.3.2</A></H1>
-
-Again, most of the bulk of this patch is for ANSI conversion. I used the
-IRIX compiler's -wlint option to find the remaining functions that use
-K&amp;R syntax (since gcc does not do this properly).
-
-Also, I changed the logic in the print code slightly to close unwanted files
-before opening a pipe to the printer. This may help in some configurations
-where the line printer hangs until xterm closes the pipe.
-
-<H1><A NAME="xterm_77">Patch #77 - 1998/5/26 - XFree86 3.9Ah and 3.3.2</A></H1>
-
-Most of the bulk of this patch is to convert the extended C (K&amp;R functions
-with prototypes) to ANSI. I verified that on Linux by comparing object
-files, to ensure that I did not, for example, interchange parameters in
-the function declarations.
-<p>
-The rest of the patch fixes several minor bugs, and adds a few features:
-<ul>
- <li>back-out my use of ncurses "captoinfo -f" option (if/then/else/endif)
- formatting, since ncurses did not correctly filter embedded newlines
- in terminfo capability strings until _after_ ncurses 4.1, thus
- corrupting setf/setb/sgr strings (reported by Darren Hiebert and
- others).
-
- <li>document SGR 8, 28 (invisible/visible), add corresponding
- capabilities to terminfo description.
-<p>
- I would also add the 'prot protected capability, but the control
- sequences for that would not be recognized or properly ignored by the
- older xterm programs.
-
- <li>modify ChangeGroup to not suppress a null-resource, but treat it as an
- empty string (recommended by Stefan Dalibor).
-
- <li>add printerAutoClose resource to control whether printer is closed
- when going offline. More than one person reports problems (on
- Solaris 2.6 and Digital Unix 4.0) getting the printer to proceed
- unless xterm exits; I think that it is a problem flushing the pipe.
- Closing it ought to flush it.
-
- <li>adapt TOG fix-3 to in HandleKeymapChange and VTInitI18N (but adapt
- XtStackAlloc/XtStackFree for clarity, as well as fixing memory leak).
-
- <li>change calls on FillCurBackground to ClearCurBackground, in effect
- using XClearArea rather than XFillRectangle when clearing as a
- side-effect of scrolling and insertion (patch by Alexander V
- Lukyanov)
-
- <li>correct some places where insert/delete did not _move_ the color
- attributes, using memmove (patch by Alexander V Lukyanov
- &lt;lav@long.yar.ru&gt;)
-
- <li>add ifdef's for __CYGWIN32__, for port to cygnus version B19.1
- (patch by Andrew Sumner &lt;andrew_sumner@hotmail.com&gt;).
-
- <li>remove #define for hpux that turned on USE_SYSV_ENVVARS, since this
- causes some applications (such as 'less') to get incorrect $LINES and
- $COLUMNS values (reported by Clint Olsen).
-
- <li>modify behavior for HP-UX, to set the "reserved" process group
- controls to _POSIX_VDISABLE so the TIOCSLTC ioctl does not produce an
- error (patch by Ben Yoshino &lt;ben@wiliki.eng.hawaii.edu&gt;).
-
- <li>correct length of underlining, reducing it by one pixel to avoid
- leaving a dot when the application does not clear the whole screen
- (patch by (Sergei Laskavy &lt;Laskavy@cs.msu.su&gt;).
-<p>
- I noticed this only recently myself (and other people as well); it
- depends on the font chosen. A 6x10 font shows it, but the other
- fonts (from XTerm.ad) do not. I also see a similar problem with the
- emulation of bold fonts.
-
- <li>add include for Xos.h to xterm.h, to ensure proper definitions
- (reported by Holger Veit).
-
- <li>update config.guess to recognize Unixware 2.1 and 7 (patch by
- Mike Hopkirk &lt;hops@sco.com&gt;).
-</ul>
-
-<H1><A NAME="xterm_76">Patch #76 - 1998/5/8 - XFree86 3.9Ah and 3.3.2</A></H1>
-
-A fix for the print-window function, and some minor cleanup:
-<ul>
- <li>modify logic that closes pipe in the print-window function to not use
- pclose, which does not work on all systems, since I did not open the
- pipe with popen (reported by Stefan Dalibor).
-
- <li>correct name of $(EXTRA_LOAD_FLAGS) imake variable (reported
- by Stefan Dalibor).
-
- <li>guard logic in ChangeGroup() function against null pointer
- (reported by Stefan Dalibor).
-
- <li>ensure that menu entry for toggling sunKeyboard resource is
- initialized (reported by Branden Robinson &lt;branden@purdue.edu&gt;).
-
- <li>gcc unused-variable warnings (reported by Bernd Ernesti
- &lt;bernd@arresum.inka.de&gt;)
-
- <li>rename global variable 'buffer' to 'VTbuffer'
-</ul>
-
-<H1><A NAME="xterm_75">Patch #75 - 1998/5/7 - XFree86 3.9Ah and 3.3.2</A></H1>
-
-This incorporates fixes from several people, as well as some improvements
-that I made based on feedback from users:
-<ul>
- <li>add option to standalone configure script, "--with-own-terminfo-dir",
- which causes xterm to pass a predefined value of $TERMINFO to the
- application. Also use this value in install rule "make install-ti",
- for the standalone configure script.
-
- (patch &amp; feedback from Tor Lillqvist &lt;tml@hemuli.tte.vtt.fi&gt;)
-
- <li>change ifdef's for "hpux" to "__hpux" (patch by Tor Lillqvist). The
- imake configuration uses the former, but the latter is predefined by
- HP's compilers.
-
- <li>define USE_SYSV_ENVVARS for HP-UX, curses does not use $TERMCAP (patch
- by Tor Lillqvist).
-
- <li>on HP-UX, use the /dev/ptym/clone device to allocate PTY's. Works
- both on HP-UX 9 and 10. (patch by Tor Lillqvist).
-
- <li>modify configure script to obtain the $(EXTRA_LOADFLAGS) value from
- imake, needed for compiling under DEC OSF/1 (reported by
- Stefan Dalibor)
-
- <li>modify print-window action so that the printer is closed after
- printing a window, unless the printer was already opened (i.e.,
- by an application running in the window). This makes the printing
- complete without having to exit xterm, since not all systems treat
- fflush through a pipe very well (reported by Stefan Dalibor)
-
- <li>modify printing code so that the ^M's are not printed if the
- printAttribute resource is set to zero (request by Stefan Dalibor).
-
- <li>correct typo in xterm.man, for the default value of printAttribute
- (reported by Stefan Dalibor).
-
- <li>correct printing code so that the alternate character set is
- printed, like other attributes, with escape sequences.
-
- <li>correct termcap description, removing spurious 'm' character from
- the 'op' capability (reported by Greg Woods &lt;woods@weird.com&gt;).
-
- <li>correct trace code so that the initial timestamp is set.
-
- <li>correct/modify utmp data for the Linux glibc 2 configuration,
- so that the ut_line member is set before using it to update wtmp
- (patch by Bill Nottingham &lt;wen1@cec.wustl.edu&gt;).
-</ul>
-
-<H1><A NAME="xterm_74">Patch #74 - 1998/4/27 - XFree86 3.9Ag and 3.3.2</A></H1>
-
-This corrects a couple of recent bugs and adds a new resource:
-<ul>
- <li>modify definition of TRACE_CHILD so that it does not conflict with
- ifdef's for USE_USG_PTYS in main.c (reported by Vikas Agnihotri
- &lt;VikasA@att.com&gt; and Stefan Dalibor).
-
- <li>correct ownership of file (actually pipe) written by the print
- controls. When undoing the setuid changes in patch #69, I overlooked
- this. Now xterm forks a process which resets setuid and routes the
- printer data as the real user.
-
- <li>add a new resource, "printAttributes", which controls whether
- color attributes (or any attributes) are sent to the printer.
-</ul>
-
-<H1><A NAME="xterm_73">Patch #73 - 1998/4/25 - XFree86 3.9Ag and 3.3.2</A></H1>
-
-This patch does the following:
-<ul>
- <li>implements a print-window facility for xterm. Though useful in
- itself, I added it as part of some debugging which I am doing.
- (Occasionally during an exposure event xterm fails to restore the
- proper colors for highlighted text, and printing the screen will
- show the internal states nicely).
-<p>
- The print facility now also displays the color information.
- (I will probably make this a resource).
-
- <li>modified the xterm-16color terminfo description to use the setaf and
- setab strings, which is a little more efficient (requested by Stephen
- Marley).
-
- <li>reduced some clutter of the ifdef/includes (e.g., stdlib.h, unistd.h,
- errno) making the configure script test for these.
-<p>
- I removed the symbols Size_t and Time_t, since they no longer serve
- a useful purpose.
-
- <li>added some debugging traces to show the initial screen size,
- and the success/failure of the ioctl calls pass handle window
- resizing events to the application (for Clint Olsen).
-<p>
- I also modified the trace code to produce two files since some
- of the information is produced by the child process. So now
- they are Trace-parent.out and Trace-child.out
-
- <li>updated configure test for ANSI compiler options to handle a
- special case for HP-UX 10.x (reported by Clint Olsen).
-</ul>
-
-<H1><A NAME="xterm_72">Patch #72 - 1998/4/17 - XFree86 3.9Ag and 3.3.2</A></H1>
-
-This is a patch from Chris Siebenmann &lt;cks@hawkwind.utcs.toronto.edu&gt;,
-which I have cleaned up a little, and integrated into the configure script.
-<p>
-From his description:
-<blockquote>
- This set of patches is the latest incarnation of patches originally
-written by Ian! D Allen, then of the University of Waterloo and now of
-who knows where; I have been carrying them forward from xterm to xterm
-ever since about X11R4. What they do is add an option so that when an
-iconified xterm receives output it prepends '*** ' to its icon title
-and (optionally) beeps the bell; deiconifying the xterm removes the
-'*** '. Over the years I've found this to be incredibly convenient for
-monitoring all sorts of low-activity things.
-</blockquote>
-
-<H1><A NAME="xterm_71">Patch #71 - 1998/4/12 - XFree86 3.9Ag and 3.3.2</A></H1>
-
-This patch is a slightly modified version of one by Richard Braakman, which
-prevents buffer overflow in the input-method and preedit-type parsing in xterm.
-I changed a couple of details to make the code more maintainable, and looked
-for similar things - copying into a fixed-size buffer (found none, though I did
-spot an unused variable).
-
-<H1><A NAME="xterm_70">Patch #70 - 1998/3/29 - XFree86 3.9Af and 3.3.2</A></H1>
-
-This patch corrects some minor bugs in xterm, and fills in some more details
-in the VT220 emulation:
-<UL>
- <LI>modify Imakefile to use SpecialCObjectRule for menu and data modules,
- making xterm build properly if logging is enabled
- (patch by Scott Sewall &lt;scott@iprg.nokia.com&gt;).
-
- <LI>restore "ich" capability to terminfo entries, since
- Michael Schroeder points out that "ich1"
- is the one which is the problem in Solaris vi.
-
- <LI>correct color of cursor, which would disappear on inverse-video
- since the initialization did not compare the cursor color against
- both foreground and background (reported by Olivier Calle).
-
- <LI>correct abbreviation-test for -version and -help options, making
- command-line option -vb work (reported by Stefan Dalibor).
-
- <LI>correct a dependency between ifdef's for OPT_I18N_SUPPORT and
- OPT_INPUT_METHOD (reported by Stefan Dalibor).
-
- <LI>split-out character-set translations as new module charsets.c, to
- implement VT220 national replacement character sets (a mode where
- some of the characters are displayed as specific European glyphs).
- This relies on xterm using an ISO 8859-1 font (approach suggested by
- Kenneth R. Robinette &lt;zkrr01@mailbox.neosoft.com&gt;).
-
- <LI>correct a missing increment, which made SS2 and SS3 controls
- repeat the shifted character.
-
- <LI>add xterm-nrc to terminfo to illustrate the VT220 national
- replacement character sets.
-
- <LI>reformat terminfo using new ncurses tic option "-f", which makes
- if/then/else/endif expressions easier to read.
-</UL>
-
-<H1><A NAME="xterm_69">Patch #69 - 1998/3/16 - XFree86 3.9Ad and 3.3.2</A></H1>
-
-This corrects the problem in xterm with utmp, reported by Olivier Calle
-&lt;olivier@tc.fluke.com&gt;
-as well as some other people after the XFree86 3.3.2 release.
-<P>
-The error was introduced by my patch #53 in XFree86 3.9r (October 1997).
-<P>
-The correction removes the reset of setuid/setgid before the main event loop,
-and solves the problem which I had worked around in a different manner: for
-some reason, the particular waitpid() call in creat_as() hangs, does not
-return when the child process exits. I changed the ifdef's to force the Linux
-configuration to use wait() instead. This call appears to work properly on
-other platforms such as SunOS and Solaris.
-<P>
-I also added tests in the standalone configure script to check for the
-existence of waitpid().
-
-<H1><A NAME="xterm_68">Patch #68 - 1998/3/4 - XFree86 3.9Ad and 3.3.1z</A></H1>
-
-This corrects another problem with the logic for highlightColor resource.
-As reported by David Dawes:
-<blockquote>
- I've just noticed a problem with with the "inverse" control sequence
- (ESC[7m) with the 3.3.2 xterm. What it does is sets the background
- black, and the text the usual foreground colour rather than simply
- swapping the foreground/background.
-
-</blockquote>
-This appears to be because when I added logic to check that the highlightColor
-was distinct from foreground and background colors, I did not add a further
-check to see that it was not black (I would make an explicit check for the
-resource not being set, but see nothing definite in the headers that would let
-me reference an explicitly-undefined Pixel value, though there are some
-implications in xpm.h). But this should work.
-
-<H1><A NAME="xterm_67">Patch #67 - 1998/2/23 - XFree86 3.9Ad and 3.3.1e</A></H1>
-
-This patch does the following:
-<UL>
- <LI>improve test for highlightColor so that xterm does not attempt to
- use that unless it is different from the foreground and background
- colors (reported by Stefan Dalibor
- &lt;Stefan.Dalibor@informatik.uni-erlangen.de&gt;.
-<P>
- I could not reproduce this until I noticed that the -rev option
- exposed it nicely.
-
- <LI>remove ich and ich1 from xterm and xterm-8bit terminfo descriptions.
- SVr4 terminfo documents that you must not combine these with
- smir/rmir, but ncurses allows it, opening a hole. Solaris 2.6 vi
- does not work properly if it is using a terminfo description when
- these are combined, since it was written to accommodate old terminals
- that required it (reported by Stephen Marley).
-
- <LI>restore 1-pixel overlap of scrollbar border with left edge of window
- (reported by Jim Burmeister &lt;jimb@metrolink.com&gt;).
-
- <LI>add a configure option, --enable-logfile-exec, which allows the
- user to specify a pipe for logfile. This defines ALLOWLOGFILEEXEC.
-
- <LI>makes the ALLOWLOGFILEEXEC code compile &amp; run, if configured.
-
- <LI>minor documentation nits.
-</UL>
-
-<H1><A NAME="xterm_66">Patch #66 - 1998/2/16 - XFree86 3.9Ad and 3.3.1d</A></H1>
-
-This fixes the problem reported with failure to build the <EM>resize</EM>
-program (BSDI, OSF/1) due to not having &lt;termcap.h&gt;, by changing the
-ifdef to one that would be set only if the file exists (not currently
-specified, except by the standalone configure script). We do not really need
-to include &lt;termcap.h&gt; to build, but only for a clean compile, since it
-may declare the tgetent() prototype.
-
-I also updated the man-page for <EM>resize</EM>, since I had recently noticed
-that it can be used to resize <EM>xterm</EM> using the "Sun" control sequences
-option.
-
-<H1><A NAME="xterm_65">Patch #65 - 1998/2/14 - XFree86 3.9Ad and 3.3.1c</A></H1>
-
-This is a small patch to xterm's 8-bit terminal description. I noticed
-while testing ncurses that I had specified the wrong (VT100-style) codes
-for the F1-F4. Xterm only uses VT220-style function keys in 8-bit mode.
-
-<H1><A NAME="xterm_64">Patch #64 - 1998/2/8 - XFree86 3.9Ad</A></H1>
-
-This fixes the following problems with xterm:
-<UL>
- <LI>save/restore the ANSI foreground and background colors with the other
- visible attributes in the save-cursor and restore-cursor operations.
- This works around a problem with vim, which apparently assumed that
- switching between the normal and alternate screens resets the colors
- (reported by Jim Battle &lt;jb@chromatic.com&gt;).
-<P>
- It would be nice to implement save/restore cursor as a stack (and
- solve this type of problem completely), but that would lead to
- incompatibility with applications which assume they are running with a
- VT100 or VT220.
-
- <LI>corrects behavior of a restore-cursor operation which does not
- follow a save-cursor (it is supposed to set the character sets
- to a known initial state).
-
- <LI>extends the sunKeyboard resource (and menu toggle) to modify the
- home, end and delete keys on a Sun or PC editing keypad, making them
- generate codes compatible with DEC VT220's Find, Select and Remove
- keys.
-
- <LI>corrects a length in checking command-line options, which caused the
- "-help" message to not work when X was not running.
-
- <LI>adds some detail to the man-page (requested by Jason Bacon
- &lt;acadix@execpc.com&gt;)
-
- <LI>modify the standalone configure script to ignore the broken nsl and
- socket libraries on IRIX 6.2 (the ones on 5.2 also are broken, so
- this change just widens the check for the system version number).
-</UL>
-
-<H1><A NAME="xterm_63">Patch #63 - 1998/2/5 - XFree86 3.9Ad</A></H1>
-
-This is another patch from Bjorn Helgaas &lt;helgaas@rsn.hp.com&gt;, which I've
-reviewed (and learned some). Following are his notes:
-<P>
-I poked around some more and finally got xterm-62 to build and run
-cleanly on HP-UX 10.20. Here are the patches. They look sort of
-ugly, so here's a little explanation:
-<UL>
- <LI>aclocal.m4: Removed side effects from the AC_CACHE_VAL
- commands in CF_FUNC_TGETENT. Previously, LIBS was set inside
- AC_CACHE_VAL, which worked fine the first time configure was
- run, but failed if there were cached values.
-
- <LI>aclocal.m4: Added temporary setting of LIBS before
- AC_TRY_LINK in CF_FUNC_TGETENT. Previously, the last value set
- by the AC_TRY_RUN loop was used, so only -lcurses was checked.
-
- <LI>configure.in: Added temporary setting of CPPFLAGS before
- AC_CHECK_HEADERS for X11 files. Previously &lt;X11/DECkeysym.h&gt;
- and &lt;X11/Xpoll.h&gt; were found only if they were in the compiler's
- default include directories, even if `--x-includes=DIR' had been
- used or AC_PATH_XTRA had found them elsewhere.
-</UL>
-The problem on HP-UX was that we were linking with -lcurses rather than
--ltermcap due to the second bullet above, and apparently something in
-HP-UX curses is broken. This seems very strange, because the only thing
-used is tgetent, which should affect any tty/pty configuration, but I
-lost interest in tracking down the exact problem.
-
-<H1><A NAME="xterm_62">Patch #62 - 1998/1/23 - XFree86 3.9Ac</A></H1>
-
-This is a patch mostly by Bjorn Helgaas &lt;helgaas@dhc.net&gt; (I added the
-os2main.c change, and a little of the documentation). From Bjorn's
-description:
-<UL>
- <LI>If you use the "-hc &lt;color&gt;" option or set the "highlightColor"
- resource, text is highlighted by changing only the background color,
- rather than using reverse video. I find this easier to read,
- especially when selecting multi-colored text, and it is similar to
- the way Netscape shows selections.
-
- <LI>Most of the code changes are under "#if OPT_HIGHLIGHT_COLOR". The
- principal exception is in screen.c, where I added a couple calls to
- resetXtermGC(). This seems like it could be a bug even without
- the color highlighting changes (though I don't pretend to understand
- all the logic).
-</UL>
-
-<H1><A NAME="xterm_61">Patch #61 - 1998/1/17 - XFree86 3.9Ac</A></H1>
-
-This patch modifies the reset behavior of xterm slightly:
-<UL>
- <LI>change the terminfo entry so that rs1 (one of the strings used by
- the 'reset' program) does a hard reset rather than switching
- character sets. This is more in accord with other terminal
- descriptions.
-
- <LI>modifies the treatment of hard reset by the xterm program to
- reset the saved lines.
-
- <LI>corrects hard reset by also resetting user-defined keys (DECUDK).
-</UL>
-
-<H1><A NAME="xterm_60">Patch #60 - 1998/1/10 - XFree86 3.9Ab</A></H1>
-
-This fixes some minor bugs and adds new functionality:
-<UL>
- <LI>add support for blinking text.
-<UL>
- <LI>This does not actually cause the
- text to flash, but text with the blink attribute can be displayed
- in color, using new resources colorBL and colorBLMode.
-
- <LI>If colors are not used, the blinking text will be displayed as
- before (just like bold). The main purpose of this is to make
- applications work properly when they assume the emulator supports
- blinking text.
-
- <LI>I did this by moving the per-cell LINEWRAPPED flag to a per-line
- flag, to make room for the new BLINK flag. There were no per-line
- flags, so this changes a lot of logic.
-</UL>
-
- <LI>corrected missing save-cursor logic in the handling of SGR 1048
- (the new control sequence I added in patch #54, 1997/10/17).
- Reported by Darren Hiebert.
-
- <LI>flush the output of the transparent printing after each line
- Reported by Tomas Vanhala &lt;vanhala@ling.helsinki.fi&gt;.
-
- <LI>correct the modes that are affected by save/restore cursor by adding
- WRAPAROUND and PROTECTED.
-
- <LI>corrected placement of one of the XSync calls that I added in patch
- #51, 1997/9/15, which had the side-effect of writing on the window
- border when the xterm was resizing from 132 to 80 columns.
-
- <LI>work around an incompatibility of the XKB definition used in xterm
- versus that symbol from IRIX 6.2's imake definitions (by adjusting
- the standalone configure script).
-</UL>
-
-<H1><A NAME="xterm_59">Patch #59 - 1998/1/5 - XFree86 3.9Ab</A></H1>
-
-My last patch has an off-by-one error in the comparison for argc. Douglas
-Kosovic &lt;douglask@dstc.edu.au&gt; showed me where (he got a core dump).
-Also, I think this explains Clint Olsen's problem, but the symptoms were more
-subtle (EINVAL for a system call if the -display option is omitted).
-
-<H1><A NAME="xterm_58">Patch #58 - 1998/1/3 - XFree86 3.9Ab</A></H1>
-
-This patch does the following:
-<UL>
- <LI>implement logic to permit xterm to work with proportional fonts.
-<UL>
- <LI>Thomas Wolff
- &lt;Thomas.Wolff@sietec.de&gt;
- requested this (but it isn't exactly what he's asking
- for - that's a more involved task).
-
- <LI>I chose to do this by rendering the characters on a fixed pitch,
- because it would not be useful for existing applications to display
- varying numbers of characters on each line.
-
- <LI>Except that this forces the display to be wider, it works reasonably
- well. A couple of special cases (reverse + colorBD, for example)
- do not display with proper colors, since the inter-character gaps
- are painted with the background.
-</UL>
-
- <LI>added a version number to the program (several people have requested
- this).
-
- <LI>make the -version and -help options interpreted before the program
- attempts to open the display.
-
- <LI>minor reorganization of the man-page (ordered the options, resources
- and translations alphabetically - and eliminated some duplication).
-
- <LI>corrected a misspelled filename in Makefile.in, and added a lint
- rule.
-
- <LI>updated the configure script to correct behavior when it cannot
- find imake, as well as to fix the IRIX+gcc build (conflict with
- /usr/include).
-
- <LI>regenerated the configure script with a newer patch to autoconf
- that fixes a problem with environment space vs the configure --help
- message.
-</UL>
-<H1><A NAME="xterm_57">Patch #57 - 1997/12/26 - XFree86 3.9Aa</A></H1>
-
-This patch is mostly concerned with the standalone configure script; a few
-minor corrections are added:
-<UL>
- <LI>add configure option --disable-tek4014, to allow xterm to be built
- without the tek4014 emulation.
-
- <LI>add configure option --with-terminal-type, to allow xterm to be
- compiled with default $TERM value other than "xterm" (e.g.,
- "xterm-16color") -- requested by Stephen Marley &lt;stephen@memex.com&gt;.
-
- <LI>fix a typo in the configure --help message -- reported by Darren
- Hiebert &lt;darren@hmi.com&gt;.
-
- <LI>review diffs between main.c and os2main.c, to make them more alike.
- (applies some minor bug-fixes to OS/2's version).
-
- <LI>add missing quotes in memmove/bcopy configure test
-</UL>
-
-
-<H1><A NAME="xterm_56">Patch #56 - 1997/11/28 - XFree86 3.9x</A></H1>
-
-This patch is based on analysis by Arfst Ludwig &lt;arfst@luxor.IN-Berlin.DE&gt;,
-who reported:
-<blockquote>
- Setting the following resources xterm (all current versions) receives a
- segmentation fault on &lt;Btn2Up&gt; after scrolling:
-<PRE>
-
- *XTerm*VT100*translations: #override \
- ~Shift~Ctrl&lt;Btn2Up&gt;: insert-selection(PRIMARY, CUT_BUFFER0)\n\
- Shift~Ctrl&lt;Btn2Up&gt;: insert-selection(CLIPBOARD, CUT_BUFFER1)\n\
- ~Shift&lt;BtnUp&gt;: select-end(PRIMARY, CUT_BUFFER0)\n\
- Shift&lt;BtnUp&gt;: select-end(CLIPBOARD, CUT_BUFFER1)
-</PRE>
- (The above resources intention is to be able to paste the latest
- selection even if the xterm was cleared.)
-<P>
- And here is how it works (and a fix!): The widget given to the action
- handler as first argument is not guaranteed to be a XtermWidget (it can
- be the ScrollbarWidget). Instead of accessing the widget's member
- directly XtDisplay gives the required pointer in a safe way.
-</blockquote>
-I noticed that this was not the only instance (by reading the code, and testing
-with his example), and extended the solution to check the widget-class to
-ensure that it is indeed xterm's widget class before attempting to use it in
-the context of translations.
-
-<H1><A NAME="xterm_55">Patch #55 - 1997/11/25 - XFree86 3.9x</A></H1>
-
-This fixes the segmentation violation noted by Rogier Wolff about a month
-ago. He'd set xterm to 400 (rows) by 150 columns, which broke because there
-were limited buffers (200 rows) used for juggling data when adding or deleting
-lines and for switching between alternate and normal screens. I replaced this
-by an allocated buffer.
-<P>
-The bug is simple to test if you set titeInhibit false.
-
-<H1><A NAME="xterm_54">Patch #54 - 1997/10/17 - XFree86 3.9s</A></H1>
-
-This patch does the following:
-<UL>
- <LI>correct a minor placement problem with the right scrollbar.
-
- <LI>implement a new set of control sequences for switching between the
- normal and alternate VT100 screens. These work around the older
- sequences limitation that required modification of the runtime
- $TERMCAP to cooperate with the titeInhibit resource (that can't work
- with terminfo). I do this by moving all of the functionality of the
- rmcur terminfo capability into the control sequences.
-
- <LI>implement the alternate-screen menu entry
-</UL>
-
-<H1><A NAME="xterm_53">Patch #53 - 1997/10/12 - XFree86 3.9r</A></H1>
-
-This patch adds a fix and implements a new feature (as well as some minor
-typos):
-<UL>
- <LI>JCHANDRA@Inf.COM (JCHANDRA) noted that there was still a problem
- with the wait call with the logging option. It hung when the logfile
- was opened as a command-line option. I fixed this by moving the
- StartLogging() call down past the place where I'd reset the setuid
- mode. So the logfile is opened as the real user, without having
- to fork.
-
- <LI>Michael Rohleder &lt;michael.rohleder@stadt-frankfurt.de&gt; sent
- me a patch which implements right-scrollbars for xterm. I used that
- as a starting point, renamed the command-line options and reduced
- the number of ifdef's.
-</UL>
-
-<H1><A NAME="xterm_52">Patch #52 - 1997/9/29 - XFree86 3.9q</A></H1>
-
-This patch addresses bugs and requests reported by
-<UL>
- <LI>Bob Maynard &lt;rmaynard@montana.com&gt;,
- <LI>Clint Olsen &lt;olsenc@ichips.intel.com&gt;,
- <LI>JCHANDRA@Inf.COM (JCHANDRA),
- <LI>Michael Schroeder &lt;Michael.Schroeder@informatik.uni-erlangen.de&gt;,
- <LI>Pablo Ariel Kohan &lt;pablo@memco.co.il&gt;
-</UL>
-
-Some of the changes are interrelated (it was an unusually busy week).
-<UL>
-
- <LI>change the default resource value for colorMode to true, matching
- the Xterm.ad file.
-
- <LI>correct behavior of 'ech' control, making the default and 0
- parameters erase one character rather than to the end of line
- (reported by Michael Schroeder).
-
- <LI>add resource boldColors, command-line options +pc and -pc and
- configure-script option to specify behavior of xterm's mapping bold
- colors 0 through 7 to colors 8 through 15.
- (request by Pablo Ariel Kohan).
-
- <LI>add resource colorAttrMode to specify whether colorULMode and
- colorBDMode can override the ANSI colors
- (from a problem report by Clint Olsen).
-
- <LI>correct a conflict between colorULMode/colorBDMode versus ANSI
- colors, where exposure events would occasionally pick up the
- former (e.g., colorBD) rather than ANSI colors. Testing the
- colorAttrMode made this apparent, though it has been in the
- code since 3.2A (patch #35 in Jan 1997).
-
- <LI>correct two problems with the optional logging support. On Linux
- at least, the waitpid call in creat_as hangs when the logging is
- toggled from the popup menu. Also, the mktemp template has the wrong
- number of X's (since X11R5!). Fixed the waitpid problem by
- exploiting the fact that the setuid behavior is reset before the
- popup menus are available.
- (reported by Jayachandran C.).
-
- <LI>add configure script options for building with the Xaw3d and neXtaw
- libraries.
-
- <LI>correct CF_IMAKE_CFLAGS standalone configure script macro, so that it
- will pick up $(ALLDEFINES) rather than $(STD_DEFINES). This is
- needed to make scrollbars work on Linux, since that uses narrow
- prototypes.
- (reported by Bob Maynard).
-
- <LI>various minor updates to configure-script macros.
-</UL>
-
-<H1><A NAME="xterm_51">Patch #51 - 1997/9/15 - XFree86 3.9p</A></H1>
-
-Most of this patch is related to the standalone configure script, though
-there are fixes/enhancements as well:
-<UL>
- <LI>add a new resource sunKeyboard, with associated command-line
- option and menu-toggle that allows using a normal Sun or PC
- keyboard to generated the complete DEC-style function keys
- and keypad.
-
- <LI>correct a reversed foreground/background test in the control
- sequence that replies with the current SGR settings.
-
- <LI>correct, by invoking XSync, a display problem that caused the
- program to not properly update newly exposed areas when a font
- change or 80/132 resize request was not completely accepted.
-
- <LI>restructured autoconf macros (I made a library of all of the
- macros across the complicated configure scripts I'm working on).
-
- <LI>use the autoconf config.guess and config.sub scripts to better
- identify the host-os.
-
- <LI>improve the configure script that uses 'imake' as a fallback for
- definitions.
-
- <LI>correct several instances of unsigned/signed mixed expressions.
-</UL>
-
-I've tested the configure script on Linux, SunOS 4.1.3, Solaris 2.5.1,
-IRIX 5.2 and 6.2, AIX 3.2.5 and CLIX 3.1 (all but the last run properly
-as well).
-
-<H1><A NAME="xterm_50">Patch #50 - 1997/8/22 - XFree86 3.9m</A></H1>
-
-This is a collection of small fixes, and a couple of minor enhancements:
-<UL>
- <LI>plug a security hole in the implementation of Media Copy (print)
- by invoking setuid just before the main loop.
-
- <LI>add an ifdef'd include for &lt;sys/termio.h&gt; for HP-UX, which allows
- the program to process SIGWINCH events (this is a bug in X11R6.3)
-
- <LI>add state-table entries for VT52 emulation to enter/exit keypad
- application mode.
-
- <LI>disable the popup-menu entry for 8-bit controls when the terminal-id
- is less than 200 (e.g., VT52 or VT100).
-
- <LI>ensure that the popup-menu entry for 8-bit controls is updated when
- the application enables/disables this mode, including the response
- to a full-reset.
-
- <LI>implement VT300 DECBKM feature: set interpretation of the backarrow
- key to either backspace or delete. The initial setting is via
- resource; it can also be modified in the main popup menu.
-
- <LI>implement VTxxx KAM (ISO AM), which allows a keyboard to be locked
- (i.e., the terminal discards input).
-
- <LI>implement VTxxx SRM, which is used to control local echoing of
- input on the terminal.
-
- <LI>add terminfo and termcap entries for xterm-8bit, a variation of
- the xterm description that uses 8-bit control characters.
-
- <LI>add fallback definitions for Imakefile to allow it to work on some
- X11R5 systems that have no SpecialCObjectRule or ProgramTargetName
- macros.
-
- <LI>add .c.o and .c.i rules to standalone Makefile.in
-
- <LI>correct order of -lXmu and -lXext in standalone configure script.
-
- <LI>add configure script options to allow selective disabling of
- active-icon, input-method and i18n code (mainly for users with X11R5
- or an incomplete X11R6 configuration).
-
- <LI>change menu-indices from #define's to enum values, thereby making
- it work better with the ifdef's for logging and active-icon (the
- X11R6.3 active-icon code is incorrectly ifdef'd; this corrects an
- error introduced by incorporating that code).
-
- <LI>correct minor compile errors in the configuration where active-icon
- is not used.
-
- <LI>add configure option to suppress echoing of long compiler commands
-
- <LI>correct spelling of decTerminalID in configure script help message
-
- <LI>use gcc __attribute__((unused)) to quiet warnings about unused
- parameters when compiling with -W (to make it simpler to find the
- real problems).
-</UL>
-
-<H1><A NAME="xterm_49">Patch #49 - 1997/8/10 - XFree86 3.9k</A></H1>
-
-This patch implements the VT100/VT220 Media Copy (i.e., print-screen) control
-sequences.
-
-<H1><A NAME="xterm_48">Patch #48 - 1997/7/26 - XFree86 3.9j</A></H1>
-
-This patch does the following (all but the first affect only the standalone
-configure script):
-<UL>
- <LI>minor correction to positioning of underlines for small (e.g., 5x8)
- font size.
- <P>
- The existing behavior allowed underlines to be drawn outside the
- character-cell, so they weren't cleared properly under some
- circumstances.
-
- <LI>adds more special-case tokens to the standalone configure script's
- imake-option filter (e.g., "&amp;&amp;", since a "make -n main.o" on my IRIX
- system uses that shell construct).
-
- <LI>adds a '--enable-logging' option for the standalone configure script.
-
- <LI>adds check and ifdef's for the standalone configure script to allow
- for building on platforms with X11R6, which lacks Xpoll.h (introduced
- in X11R6.1).
-</UL>
-
-<H1><A NAME="xterm_47">Patch #47 - 1997/7/13 - XFree86 3.9i</A></H1>
-
-This patch does the following
-<UL>
- <LI>corrects an indexing error in the doublesize character logic
- (button.c) that caused core dump (this was reported by J. Wunsch).
- <LI>corrects the logic of ShowCursor when it is painting in a doublesize
- cell (charproc.c).
- <LI>corrects, according to vttest, the behavior when switching to
- doublesize characters and back again (doublechr.c).
- <LI>adds cbt (back_tab) to the terminfo description (this was something
- that I'd overlooked as applicable to curses optimization last
- summer).
- <LI>corrects, for the standalone xmc test, the logic for disabling xmc.
-</UL>
-
-<H1><A NAME="xterm_46">Patch #46 - 1997/7/4 - XFree86 3.9h</A></H1>
-
-This is a patch to provide test-support for some work I'm doing on ncurses. It
-does not modify the normal configuration of xterm; the code is compiled if the
-standalone configure option "--enable-xmc-glitch" is specified.
-
-<H1><A NAME="xterm_45">Patch #45 - 1997/7/2 - XFree86 3.9h</A></H1>
-
-This fixes the problem reported with xterm's cursor color versus the background
-(the second chunk in this patch) and also removes some duplicate initialization
-of the cursor GC's. If the cursor color at startup is the same as the
-background, then xterm will use the reverse GC, ignoring the setting of the
-colorMode resource.
-
-<H1><A NAME="xterm_44">Patch #44 - 1997/6/22 - XFree86 3.9g</A></H1>
-
-This implements the first part of the VT100 doublesize characters for xterm,
-as well as fixing a handful of bugs:
-<UL>
- <LI>the doublesize character support uses the normal font (using scaled
- fonts will be another patch) with blanks to simulate doublesize
- characters. This patch does most of the global changes that'll be
- required. I've hidden most of the details in macros and ifdef's so
- it's easy to configure out (part of the patch is a configure option
- for that purpose).
-
- <LI>corrected limits in DeleteChar() function -- it's always ignored the
- size of the left border and scrollbar. I noticed this when working
- on the doublesize characters since the glitch was doubled in size
- (i.e., it wrapped some garbage around the right margin).
-
- <LI>corrected 'memmove()' logic, for standalone builds (it referenced a
- malloc wrapper from my development library).
-
- <LI>add a check for HideCursor() to prevent repeated screen updates
- (which can cause a spurious cursor glitch to appear, e.g., during
- scrolling). I noticed this with the 3.2A version (but only a few
- weeks ago, when I started working on this patch).
-</UL>
-
-<H1><A NAME="xterm_43">Patch #43 - 1997/6/10 - XFree86 3.9d</A></H1>
-
-Here's a fix for two problems:
-<UL>
- <LI>modify handling of tgetent results in xterm and resize programs to
- make them tolerant of missing termcap file, or unknown terminal name.
- In this scheme, an explicit "-tn" option will succeed, overriding
- the fallback list.
-
- <LI>a nit in the configure script (log extra information to help diagnose
- which case of the test-compile of tgetent was used).
-</UL>
-
-<H1><A NAME="xterm_42">Patch #42 - 1997/6/8 - XFree86 3.2Xl</A></H1>
-
-Bram Moolenaar reported that the cursor color changed unexpectedly while
-scrolling. The cause was that it used the same GC's as the logic that draws
-the ANSI colors. The bug only appears if the cursorColor resource isn't set,
-and has been present since the initial implementation early last year. (The
-same bug also appears in rxvt ;-). Here's a fix.
-
-<H1><A NAME="xterm_41">Patch #41 - 1997/5/28 - XFree86 3.2Xl</A></H1>
-
-Some nits found by Darren Hiebert (missing part of install-rule, incorrect
-assignment for --enable-color-mode option).
-
-<H1><A NAME="xterm_40">Patch #40 - 1997/5/26 - XFree86 3.2Xl</A></H1>
-
-Patch for the configure script's logic for obtaining imake predefined
-symbols.
-
-<H1><A NAME="xterm_39">Patch #39 - 1997/5/24 - XFree86 3.2Xl</A></H1>
-
-This patch does the following:
-<UL>
- <LI>integrate the 16-color change for 'xterm'
-
- <LI>minor fixes/clarification of tgetent in terminfo vs termcap to
- 'resize'
-</UL>
-
-(both changes also modify the configure script)
-
-<H1><A NAME="xterm_38">Patch #38 - 1997/5/22 - XFree86 3.2Xh</A></H1>
-
-This implements a simple configuration script with autoconf (to which I'll
-add more options later). It does the following:
-<UL>
- <LI>configures xterm to build with X11R5 (at least on SunOS 4.1, Solaris
- 2.4, possibly IRIX - sorry network was down today, but I did test
- an earlier version yesterday).
-
- <LI>enables/disables the configuration ifdef's for ANSI color and VT52
- emulation.
-</UL>
-It does not make tests for the things that imake does (that's another project),
-instead it uses a hybrid of the autoconf tests for libraries and adds imake's
-compiler options (which are necessary in some cases to get main.c to compile).
-
-<H1><A NAME="xterm_37">Patch #37 - 1997/5/7 - XFree86 3.9a</A></H1>
-
-This corrects a minor, but annoying error in the vt220 emulation: the DECUDK
-is only supposed to be interpreted for _shifted_ function keys.
-
-<H1><A NAME="xterm_36">Patch #36 - 1997/1/16 - XFree86 3.2r</A></H1>
-
-This corrects something that I overlooked in patch #27 (21-aug-1996), which is
-that when trimming the region to be repainted for the highlightSelection
-resource of xterm, I still have to paint the background past the highlighted
-region. This only happens when I first do a selection in a window that's
-partly off-screen, then move the window on-screen.
-
-<H1><A NAME="xterm_35">Patch #35 - 1997/1/7 - XFree86 3.2o</A></H1>
-
-This patch does the following:
-<UL>
- <LI>combines the coding for foreground and background colors into a
- single byte, reducing the memory required to store saved-lines in
- color. (I'll take back that byte in a following patch to use to
- ensure the character-set, so there's no long-term decrease in memory
- use).
-
- <LI>modifies the PF1-PF4 coding in termcap/terminfo. Because xterm is
- still by default emulating vt100, the function key codes are
- vt100-compatible (I overlooked this in patch #31).
-
- I also reformatted the whole terminfo file into a single-column,
- for consistency.
-
- <LI>adds an interim xterm-vt220 description to accommodate the old and new
- styles of function-keys (though probably it'd be better to drop the
- old-style altogether).
-</UL>
-
-<H1><A NAME="xterm_34">Patch #34 - 1997/1/5 - XFree86 3.2o</A></H1>
-
-This patch does the following:
-<UL>
- <LI>implement DECSTR (soft terminal reset). The biggest diff is due to
- adding another state table (note that there's only one useful state
- here, but it's only 256 bytes rather than 1k as it would have been
- before I reduced the size of state entries).
-
- <LI>some minor tidying up (e.g., signed/unsigned use bitcpy, MODE_DECCKM,
- resetColor, resetCharsets). More is done in patch #35.
-</UL>
-
-I got the description of DECSTR from a vt420 user's manual. I'll do some
-testing with vttest to ensure that there's nothing else to do than what was
-documented.
-
-<H1><A NAME="xterm_33">Patch #33 - 1996/11/24 - XFree86 3.2</A></H1>
-
-This adds to the reset-fix by Matthieu Herrb &lt;Mathieu.Herrb@mipnet.fr&gt; a
-small change to make xterm able to output 8-bit characters in VT100 mode.
-
-Applications that run on real VT100's don't do that anyway, and this feature
-should be removed sometime after finishing off the VT220 emulation (VT220's can
-do 8-bit characters). That would be a good time to change the default
-terminal-id to 220.
-
-<H1><A NAME="xterm_32">Patch #32 - 1996/11/21 - XFree86 3.2</A></H1>
-
-This implements the REP (repeat) control for xterm. That isn't part of the DEC
-VTxxx series, but is defined in ISO 6429. (Note that the base xterm terminal
-description is <EM>not</EM> changed -- I added a variant, "xterm-rep").
-
-<H1><A NAME="xterm_31">Patch #31 - 1996/11/16 - XFree86 3.2</A></H1>
-
-This implements vt52 emulation in xterm (ifdef'd so it can be removed).
-I've been using it for testing for the past month or so.
-
-<H1><A NAME="xterm_30">Patch #30 - 1996/11/16 - XFree86 3.2</A></H1>
-
-From bug-report by &lt;auroux@clipper.ens.fr&gt; (Denis Auroux), missing reset to
-ground state. I checked through the rest of <EM>that</EM> table and found another,
-in the unimplemented MC (screen print).
-
-<H1><A NAME="xterm_29">Patch #29 - 1996/9/15 - XFree86 3.1.2Gb</A></H1>
-
-This patch does the following:
-<UL>
- <LI>corrects the restoration of color for bold/underline color mode
-
- <LI>adds a resource 'decTerminalID' to control the reporting level of
- xterm (e.g., VT100, VT220).
-
- <LI>uses the new resource to implement/correct the DA1, DA2 and
- DECRPTUI reports.
-
- <LI>change valid-response code in DECRQSS from 0 to 1 (the manual says 0,
- but the VT420 terminal I've been testing on says 1).
-</UL>
-
-All of these changes are based on vttest 2.6
-<P>
-(Most of the volume in the patch is to add 2 more state tables for parsing
-the 2nd/3rd device-attribute controls).
-
-<H1><A NAME="xterm_28">Patch #28 - 1996/8/31 - XFree86 3.1.2F</A></H1>
-
-This patch corrects the following reported by Roland Rosenfeld
-&lt;roland@spinnaker.rhein.de&gt;:
-<UL>
- <LI>handle SGR 22, 24 and 25 in combination with colorUL and colorBD
- resources. Also noted &amp; fixed reset of colored underline/bold
- with SGR 0.
-
- <LI>a typo in the termcap (missing '['), from 3.1.2Dj (my error)
-</UL>
-
-Roland also complained that he couldn't use box characters with
-<PRE>
- -adobe-courier-bold-r-normal--12-120-75-75-m-70-iso8859-1
-</PRE>
-but that's a known xterm limitation (the box characters must be part of the
-font, in the first 32 locations).
-
-<H1><A NAME="xterm_27">Patch #27 - 1996/8/21 - XFree86 3.1.2Ek</A></H1>
-
-This patch fixes one of my long-term gripes: xterm's selection doesn't clearly
-show what's being selected (as per David's request, it's controlled by a
-resource, which defaults to the older behavior).
-
-<H1><A NAME="xterm_26">Patch #26 - 1996/8/20 - XFree86 3.1.2Ei</A></H1>
-
-Here's a patch to fix a problem with xterm's cut/paste and another to modify
-the appearance of the highlighting while selecting. (The changes are
-independent, so you can see if the change to screen.c is desirable).
-
-<H1><A NAME="xterm_25">Patch #25 - 1996/8/18 - XFree86 3.1.2Ei</A></H1>
-
-Here's a correction for two minor bugs that I picked up in testing, plus
-some lint (from Solaris 2.5) where NULL was used incorrectly:
-<UL>
- <LI>make the second alternate font the same as the first (that's what
- vt420 and dtterm do)
-
- <LI>corrected DECSCL report when DECSCL hasn't been set (i.e., don't
- return a '60').
-</UL>
-
-<H1><A NAME="xterm_24">Patch #24 - 1996/8/11 - XFree86 3.1.2Ee</A></H1>
-
-This patch does several things. In effect, xterm can (I think) do a reasonably
-good job of emulating vt220 and vt320 terminals (as well as it was doing
-vt100, at any rate ;-).
-<P>
-It does NOT do:
-<UL>
- <LI>soft fonts
-
- <LI>rigel or sixel graphics
-</UL>
-<P>
-Anyway, I:
-<UL>
-
- <LI>added ECH, CPL, CNL, SU, SD, CBT, CHT controls
-
- <LI>added popup-menu for switching between DEC and Sun function keys.
- (corrected alignment err wrt logging entry at that point).
-
- <LI>make xterm recognize both 8-bit and 7-bit controls (including
- popup menu for switching modes).
-
- <LI>add user-definable function keys (aka DECUDK)
-
- <LI>support concealed text
-
- <LI>support protected text (both ISO compatible and DEC compatible -
- that's not the same thing, btw), with SPA, EPA, DECSCA, DECSED,
- DECSEL controls.
-
- <LI>implement DECSCL.
-</UL>
-<P>
-I'll be continuing to test this patch for a while, but don't expect to add any
-new functionality (it passes all of the current tests I've built in vttest, but
-I need to make more tests)..
-
-<H1><A NAME="xterm_23">Patch #23 - 1996/7/31 - XFree86 3.1.2Ec</A></H1>
-
-This removes the blinking cursor I added last week (for performance reasons).
-Time-permitting, I'll revisit this after 3.2 is released (there <EM>will</EM> be more
-work after XFree86 3.2, I assume).
-
-<H1><A NAME="xterm_22">Patch #22 - 1996/7/26 - XFree86 3.1.2Ec</A></H1>
-
-I looked more closely at my "double-negative" and realized that I had been
-confused by the default color scheme (black on white) in combination with
-reverse video. However, I did see that the original_fg and original_bg data
-weren't really used - so I removed that logic.
-<P>
-Also:
-<UL>
- <LI>during initialization, check if ANSI colors are set with non fg/bg
- values, disable color mode if not. This makes xterm tolerant of
- applications that allocate the whole color map.
-
- <LI>implemented blinking cursor (default is <EM>off</EM>)
-</UL>
-
-<H1><A NAME="xterm_21">Patch #21 - 1996/7/24 - XFree86 3.1.2Ec</A></H1>
-
-This patch does the following:
-<UL>
- <LI>fixes some minor typography in the control-sequences documentation
- (it didn't occur to me til I'd sent the last patch that I could use
- ghostview for previewing the troff output ;-)
-
- <LI>adjusts the shell's background color in ReverseVideo so that flicker
- in resizing is reduced
-
- <LI>adds an ifdef OPT_ISO_COLORS to allow configuring xterm without
- the ISO color support (saves a lot of memory)
-
- <LI>used that ifdef to isolate/modify logic so that if the user doesn't
- have the colorMode enabled, then ISO color support is disabled (saving
- memory).
- <P>
- (If anyone needs numbers, I had savedLines set to 2000, and found
- a reduction from ~700k to ~400k of allocated memory, according to
- Purify).
-</UL>
-
-<H1><A NAME="xterm_20">Patch #20 - 1996/7/24 - XFree86 3.1.2Ec</A></H1>
-
-This documents the changes in control sequences for window operations that
-I added in my previous patch. I'm testing another patch that allows the
-user to use less memory if colors aren't needed.
-
-<H1><A NAME="xterm_19">Patch #19 - 1996/7/21 - XFree86 3.1.2Ec</A></H1>
-
-This patch does the following:
-<UL>
- <LI>fixes the core dump that I reported on IRIX 5.2 (in main.c)
- <P>
- (it's worth noting that this bug exists in X11R6.1, so I'd like
- to assume that someone's already submitted a fix to X Consortium...)
-
- <LI>change the interpretation of zero rows or columns in a resize-window
- request to use the root window's size (looking more carefully at
- dtterm, that seems to be what it does).
-
- <LI>change some memmove calls to memcpy for slightly better performance.
- (also, a couple of memset calls to bzero - Quantify says bzero runs
- 20% faster, I assume because there's one less argument).
-
- <LI>interpret character sets 1 and 2 (so that vttest gives a reasonable
- result) Both rxvt and dtterm do something equivalent.
-
- <LI>fix a minor memory leak in the logic that retrieves the window or
- icon names (Purify found this for me while I ran vttest).
-</UL>
-
-<H1><A NAME="xterm_18">Patch #18 - 1996/7/18 - XFree86 3.1.2Ec</A></H1>
-
-This implements the following:
-<UL>
- <LI>escape sequences that act like the CDE dtterm's window operations
- (though I have implemented the default width and height -- I've seen
- a rather buggy dtterm running that seems to treat width=0 or height=0
- literally -- maybe that's a feature, not a bug?)
-
- <LI>minor tweak to the screen-repainting when resizing (I still cannot
- entirely get rid of flicker).
-
- <LI>still more fixes to terminfo &amp; termcap (I corrected my error for
- the hpa code and added some other stuff by comparing to ncurses'
- description and rxvt's).
-
- <LI>a tweak to the patch by Michael Rohleder for the color translation
-
- <LI>re-order attribute codes to allow later implementation of protected
- fields (dtterm supposedly does this; it's probably more useful than
- blinking or invisible text -- that uses up all of the available bits
- without changing the attribute scheme radically).
-</UL>
-
-<H1><A NAME="xterm_17">Patch #17 - 1996/7/2 - XFree86 3.1.2Eb</A></H1>
-
-This patch implements for xterm several minor features from ISO 6429 which are
-useful for terminfo applications. The HPA and VPA control sequences allow
-cursor movement along a row or column, cutting down a little on the characters
-transmitted. The other codes allow resetting specific graphic rendition
-attributes without modifying the other attributes.
-
-(now if someone just had time to implement blinking cursors...)
-
-<H1><A NAME="xterm_16">Patch #16 - 1996/6/25 - XFree86 3.1.2Ea</A></H1>
-
-Adam Tla/lka &lt;atlka@pg.gda.pl&gt; told me a couple of weeks ago that I'd missed
-some of the background coloring in xterm. I investigated, and found that while
-I'd picked up on the clear-to-bottom and clear-to-end-of-line operations, I'd
-overlooked the insert/delete lines. Just so I wouldn't overlook any more of
-these, I updated a copy of vttest to test ISO colors and bce (background color
-erase). This patch introduces a new function, ClearCurBackground, whose calls
-replace the direct XClearArea calls that I'd overlooked.
-
-(There's also a few compiler warnings fixed, etc ;-)
-
-<H1><A NAME="xterm_15">Patch #15 - 1996/5/29 - XFree86 3.1.2E</A></H1>
-
-This fixes the problem reported by David Dawes, by making the 50msec select
-timeout for the Xaw3d arrow scrollbar a resource. (I made it a boolean for a
-variety of reasons -- to make it a number, you'd need an additional resource,
-to avoid breaking the logic).
-
-<H1><A NAME="xterm_14">Patch #14 - 1996/5/12 - XFree86 3.1.2Dj</A></H1>
-
-This patch brings the termcap and terminfo descriptions for xterm up to date.
-I made the following changes:
-<UL>
- <LI>reformatted the terminfo description in a single-column (this is ok
- for terminfo, and will simplify future patches -- can't do that for
- termcap, since it would impact buffer requirements on some systems).
-
- <LI>omitted obsolete features in termcap to save a little space (bs, pt)
-
- <LI>added color capabilities to termcap (ut, Co, NC, op, AB, AF)
-
- <LI>corrected some capabilities (vi, ve)
-
- <LI>added 'st' (set tab)
-
- <LI>reduced function keys in termcap for 'xterm' to 12 because color
- capabilities makes that description larger than 1023 characters.
-
- <LI>created new termcap name 'xtermm' (monochrome) to match the terminfo
- list, and make that description have 20 function keys.
-
- <LI>added corresponding color capabilities to terminfo (bce, colors,
- pairs, op, ncv, setab, setaf)
-
- <LI>corrected corresponding capabilities in terminfo (civis, cnorm,
- rmcup, smcup)
-
- <LI>added capabilities (el1, hts)
-
- <LI>in both, corrected home/end keys to match the code correction made
- by Thomas Mueller in 3.1.2Bk
-
- <P>=&gt; (I'm still considering modifying the code &amp; description to match
- the rxvt program).
-</UL>
-
-<H1><A NAME="xterm_13">Patch #13 - 1996/4/23 - XFree86 3.1.2Df</A></H1>
-
-This corrects my earlier changes for colors - the inner border of the xterm was
-getting painted with the wrong color, since I'd moved the call to set the
-background into the logic that tracks SGR information.
-
-<H1><A NAME="xterm_12">Patch #12 - 1996/3/16 - XFree86 3.1.2Dc</A></H1>
-
-This corrects a memory leak in xterm that happens whenever one switches fonts.
-
-<H1><A NAME="xterm_11">Patch #11 - 1996/3/5 - XFree86 3.1.2Db</A></H1>
-
-This patch corrects the behavior of the ANSI colors in xterm when reverse
-video is used, as well as some other lesser sins:
-<UL>
- <LI>button.c
-<UL>
- <LI>(compiler warnings: shadowing of 'time', redundant cast)
-</UL>
-
- <LI>charproc.c
-<UL>
- <LI>renamed screen.colors[] array to screen.Acolors[] to more
- easily distinguish the non-ANSI colors from the ANSI colors.
-
- <LI>moved logic of SGR_Save() into VTInitialize, getting rid of
- local private variables original_fg and original_bg.
-
- <LI>moved some logic into getXtermForeground and getXtermBackground
- from SGR_Foreground, SGR_Background, etc.
-
- <LI>corrected misleading 'row' to 'col' in case for CUF, CUB
- sequences.
-</UL>
-
- <LI>ctlseqs.ms
- <LI>xterm.man
-<UL>
- <LI>(correct a misconception which I'd added that the color0
- through color6 resource values apply to non-ANSI colors)
-</UL>
-
- <LI>ptyx.h
-<UL>
- <LI>added original_fg, original_bg to TScreen structure.
-</UL>
-
- <LI>scrollbar.c
-<UL>
- <LI>(compiler warnings: redundant cast)
-</UL>
-
- <LI>util.c
-<UL>
- <LI>new functions getXtermForeground and getXtermBackground replace
- the macros GET_FG and GET_BG, with the added functionality of
- checking for the reverse-video status of xterm.
-
- <LI>in ReverseVideo, swap the SGR foreground and background colors
- also.
-</UL>
-</UL>
-
-<H1><A NAME="xterm_10">Patch #10 - 1996/2/14 - XFree86 3.1.2Cd</A></H1>
-
-I observed an occasional glitch in the xterm's color behavior; a clear to end
-of line would get a color that had been used in a program that supposedly reset
-colors. I traced this down to the way xterm was modifying colors of GC's on
-the fly; it didn't restore the original color of the GC, even though it would
-later be used in functions (such as ClearRight) that assumed (my error) that
-the GC would have the current foreground or background color.
-<P>
-I fixed this by resetting the GC's colors with a new function 'resetXtermGC()',
-and direct calls on SGR_Foreground/SGR_Background, as appropriate and using a
-new function 'updatedXtermGC()' to encapsulate the logic that modifies the GC's
-color. (I also removed some commented-out code that was trying to do this --
-the problem was a little more obscure).
-
-<H1><A NAME="xterm_09">Patch #9 - 1996/2/10 - XFree86 3.1.2Cb</A></H1>
-
-This patch fixes the remaining problems that I had making xterm run with x11r5,
-as well as a couple of other bugs. It follows my patch from yesterday, that
-added ifdef's for some of the input-method resources.
-<UL>
- <LI>corrected ifdef's that suppress the input-method code (doesn't
- exist in my x11r5, and xterm works adequately without it).
-
- <LI>corrected fallback definition for 'Select()' macro (oops: I'd
- copied the wrong text...)
-
- <LI>moved the declarations for the fd_set variables to data.[ch]
-
- <LI>corrected an ifdef in resize.c (sunos 4.x doesn't have termcap.h)
-
- <LI>corrected (in main.c) some unused/orphaned variables.
-</UL>
-
-<H1><A NAME="xterm_08">Patch #8 - 1996/2/9 - XFree86 3.1.2Cb</A></H1>
-
-This is mostly a documentation patch for xterm. It describes the color control
-sequences in more detail, and documents some other features of xterm that
-aren't described elsewhere.
-<P>
-I've also added a couple of ifdef's to fix (part of) the problem that I'm
-working on (making the program work properly on x11r5, where I'm doing memory
-testing -- I have a "good" version from mid-January, but my resync version
-doesn't work properly on x11r5). I'm not done with <EM>that</EM> yet.
-
-<H1><A NAME="xterm_07">Patch #7 - 1996/1/28 - XFree86 3.1.2n</A></H1>
-
-I did a (clean) build of 3.1.2n on Linux 1.2.13 (ELF). I've got an S3 card.
-<P>
-This fixes the following in the 3.1.2n xterm:
-<UL>
- <LI>initialize cur_foreground, cur_background in charproc.c (Purify
- told me they weren't initialized).
-
- <LI>add interpretation of codes 39, 49, to reset background and
- foreground to default value (I'm told that ISO 6429 does this; but I
- don't have a written reference -- yet -- can anyone help here?).
- Anyway, rxvt does it, and it'll solve my remaining color management
- problems.
-
- <LI>shadowing of 'time' in menu.c
-
- <LI>'Cardinal' vs 'int' in scrollbar.c
-
- <LI>several changes to permit compile with X11R5 (the system that I've
- got Purify on won't be upgraded to X11R6 for a long time).
-</UL>
-<P>
-I built this version (with a minor nit that I'll patch soon) on SunOS 4.1.3 so
-that I can test it some more with Purify.
-<P>
-<EM>btw</EM>:
-the changes made in Xpoll.h won't work on some older systems, because
- fd_set isn't a defined type (I've got one machine at least that this
- applies to).
-
-<H1><A NAME="xterm_06">Patch #6 - 1996/1/8</A></H1>
-
-This patch does all of the SGR foreground/background fixes (i.e., clearing the
-screen after an SGR color is set causes that color to be used in the foreground
-and/or background). If the FG_COLOR and/or BG_COLOR flags aren't set, then the
-xterm foreground and background default to the window's values. This usage is
-consistent with various types of hardware (especially the IBM PC), and is also
-used in rxvt.
-<UL>
- <LI>charproc.c:
-<UL>
- <LI>add/use new macros GET_FG, GET_BG - n/c.
-
- <LI>add/use new functions SGR_Foreground() and SGR_Background()
- to set corresponding colors in GC's, and to retain sense of
- "original" colors.
-
- <P>
- =&gt; This makes redundant some of the corresponding logic
- in HideCursor to set the foreground and background,
- but I left it in since it <EM>may</EM> be fixing an unrelated
- requirement.
-
- <LI>set GC's in LoadNewFont() according to whether the SGR fg/bg
- colors are active.
-
- <P>
- =&gt; This fixes some glitches in the accompanying resize,
- that leaves parts of the window in the original
- background color.
-</UL>
-
- <LI>screen.c:
-<UL>
- <LI>modified ClearBufRows() to use the SGR fg/bg colors if
- they're set.
-
- <LI>added function ScrnClearLines(), used this to replace
- portions of ScrnInsertLine() and ScrnDeleteLine().
- The new function uses the SGR fg/bg colors if they're
- set.
-
- <P>
- =&gt; Otherwise, selection after an index or reverse index will
- paint the wrong colors.
-
- <LI>modified ScrnDeleteChar() and ScrnInsertChar()
- to use SGR fg/bg colors.
-</UL>
-
- <LI>util.c:
-<UL>
- <LI>modified ClearRight() so that if either of the SGR fg/bg
- colors is set, we don't bzero the attributes and color
- arrays, but instead fill them with the appropriate codes.
-
- <LI>modified ClearLeft to use SGR fg/bg colors.
-</UL>
-</UL>
-
-<H1><A NAME="xterm_05">Patch #5 - 1996/1/7</A></H1>
-
-This patch modifies the object code, by replacing indexing expressions with
-temporary variables with the full indexing expression. At first glance, this
-seems inefficient (it did to me ;-), until remembering comments made in the
-compilers newsgroups that trying to "help" the compiler doesn't really work
-that well. A good optimizing compiler can do a better job than the programmer
-can. (There's a moral in the use of 'register' variables also, but I won't fix
-those...).
-<P>
-Anyway, the revised code generates a smaller object...
-<UL>
-<LI>charproc.c:
-<UL>
-<LI>recode index expressions in ShowCursor() and HideCursor()
- using SCRN_BUF_xxxxS macros - changes object.
-
-<LI>replace constant '4' by MAX_PTRS - n/c.
-</UL>
-
-<LI>ptyx.h:
-<UL>
-<LI>defined the SCRN_BUF_xxxxS macros in terms of BUF_xxxxS
- macros, to pick up references to ScrnBuf data directly, and
- added MAX_PTRS symbol to pick up those '4' constants strewn
- about the code - n/c.
-</UL>
-
-<LI>screen.c:
-<UL>
-<LI>recode index expressions in ScreenWrite() using
- SCRN_BUF_xxxxS macros - changes object.
-
-<LI>replace constant '4' by MAX_PTRS - n/c.
-
-<LI>use macros BUF_CHARS, BUF_ATTRS - n/c.
-
-<LI>cast calloc to 'Char *' to fix compiler warning on IRIX - n/c
-</UL>
-
-<LI>scrollbar.c:
-<UL>
-<LI>replace constant '4' by MAX_PTRS - n/c.
-
-<LI>cast calloc to 'Char *' to fix compiler warning on IRIX - n/c
-</UL>
-</UL>
-
-<H1><A NAME="xterm_04">Patch #4 - 1996/1/7</A></H1>
-When setting up for this phase, I saw that you'd corrected the bug that I found
-in ClearLeft. I decided to make this series of patches anyway, since
-readability never hurt (and there's the potential for finding another bug while
-reviewing this set).
-<UL>
-<LI>button.c:
-<UL>
-<LI>use SCRN_BUF_xxxxS macros - n/c
-</UL>
-<LI>charproc.c:
-<UL>
-<LI>use SCRN_BUF_xxxxS macros - n/c
-</UL>
-<LI>ptyx.h:
-<UL>
-<LI>added four macros: SCRN_BUF_CHARS, SCRN_BUF_ATTRS,
- SCRN_BUF_FORES, SCRN_BUF_BACKS to represent the four
- arrays that are derived from screen-&gt;buf.
-</UL>
-<LI>screen.c:
-<UL>
-<LI>use SCRN_BUF_xxxxS macros - n/c
-</UL>
-<LI>util.c:
-<UL>
-<LI>use SCRN_BUF_xxxxS macros - n/c
-</UL>
-</UL>
-<H1><A NAME="xterm_03">Patch #3 - 1996/1/7</A></H1>
-
-This is my third (and final cleanup) patch for xterm. It gets rid of the
-unused stuff, and converts several functions to static (thereby reducing their
-scope).
-<P>
-At this point, the only compile warnings I've got (on Linux) are those about
-the select arguments (int vs fd_set type), and a missing declaration for
-waitpid. Those both are hard to get right without autoconfigure.
-<P>
-The next patches will address the functional changes...
-<UL>
-<LI>Tekproc.c:
-<UL>
-<LI>changed several functions to 'static' that aren't used
-outside this module -- changes object
-</UL>
-<LI>charproc.c:
-<UL>
-<LI>changed several functions to 'static' that aren't used
-outside this module -- changes object
-<LI>deleted unused function unparsefputs -- changes object.
-</UL>
-<LI>main.c:
-<UL>
-<LI>changed several functions to 'static' that aren't used
-outside this module -- changes object
-<LI>ifdef'd out unused function 'consolepr()' -- changes object
-<LI>removed unused variable 'dummy_tio' -- changes object
-<LI>moved variable 'discipline' to quiet unused-warning -- changes object
-</UL>
-<LI>main.h:
-<UL>
-<LI>deleted unused definition of DEFBORDERWIDTH - n/c
-</UL>
-<LI>misc.c:
-<UL>
-<LI>changed several functions to 'static' that aren't used
-outside this module -- changes object
-<LI>provide dummy return statements for xerror and xioerror to
-quiet compiler warnings -- changes object
-</UL>
-<LI>ptyx.h:
-<UL>
-<LI>change sbuf_address and abuf_address to 'Char *' - n/c
-</UL>
-<LI>resize.c:
-<UL>
-<LI>changed several functions to 'static' that aren't used outside this module
--- changes object
-</UL>
-<LI>screen.c:
-<UL>
-<LI>remove unnecessary 'Char **' casts - n/c
-</UL>
-<LI>util.c:
-<UL>
-<LI>changed several functions to 'static' that aren't used outside this module
--- changes object
-</UL>
-</UL>
-<H1><A NAME="xterm_02">Patch #2 - 1996/1/7</A></H1>
-This is my second patch to xterm. It corrects most of the gcc warnings (except
-for some that are due to X header files ;-). I compared objects to keep track
-of the changes that don't affect the object code (n/c) versus those that do.
-<P>
-At this point, I'm compiling (fairly) clean with gcc options
-<PRE>
- -Wall -Wstrict-prototypes -Wmissing-prototypes -Wshadow -Wnested-externs
-</PRE>
-(I also compiled with -Wshadow, but while that found some things that I wanted
-to find, there's far too many warnings from the X headers to be usable in this
-context).
-<P>
-The changes:
-<UL>
-<LI>Tekproc.c:
-<UL>
-<LI>parenthesized expression to avoid gcc warning -- n/c.
-
-<LI>corrected nested-extern declaration for Bool
- waiting_for_initial_map; ourTopLevelShellArgs, and
- number_ourTopLevelShellArgs - n/c
-
-</UL>
-<LI>charproc.c:
-<UL>
-<LI>corrected potentially-unintialized variables 'scstype', 'xim',
- and 'input_style' -- changes object.
-
-<LI>adjusted logic of VTparse so that gcc won't warn about setjmp
- clobbering parsestate -- changes object.
-
-<LI>corrected initialization of 'scstype', which could have been
- clobbered by setjmp/longjmp - changes object.
-
-<LI>corrected nested-extern declaration of 'term', 'ProgramName'
- - n/c
-</UL>
-
-<LI>cursor.c:
-<UL>
-<LI>corrected nested-extern declaration of 'term' -- n/c
-
-<LI>renamed 'term' parameters to avoid gcc -Wshadow warning - n/c
-</UL>
-
-<LI>input.c:
-<UL>
-<LI>change interface of StringInput to assume size_t (i.e.,
- unsigned) nbytes -- changes object.
-
-<LI>change interface of funcvalue, and sunfuncvalue to use
- 'KeySym' type instead of 'int' - changes object.
-</UL>
-
-<LI>main.c:
-<UL>
-<LI>moved definitions of SIGNAL_T, SIGNAL_RETURN to proto.h - n/c
-
-<LI>corrected missing params of 'do_hangup()' -- changes object
- (note: the missing params were not used).
-
-<LI>corrected missing param of 'Error()' -- changes object
-
-<LI>corrected nested-extern 'environ' - n/c
-
-<LI>adjusted assignments to 'tty_got_hung' and 'no_dev_tty' so
- that gcc can see they won't be clobbered by the longjmp -
- changes object.
-
-<LI>use Size_t type - n/c.
-</UL>
-
-<LI>menu.c:
-<UL>
-<LI>removed redundant prototype for 'do_hangup()' -- n/c.
-
-<LI>renamed 'time' parameters to avoid gcc -Wshadow warning - n/c
-</UL>
-
-<LI>menu.h:
-<UL>
-<LI>renamed 'time' parameters to avoid gcc -Wshadow warning - n/c
-</UL>
-
-<LI>misc.c:
-<UL>
-<LI>corrected definition of 'HandleFocusChange()' -- changes
- object
-
-<LI>cast parameters in call to 'TekExpose()' -- n/c
-
-<LI>corrected nested-extern declarations of 'term', 'toplevel',
- ProgramName, and 'environ' -- n/c.
-
-<LI>use Size_t type - n/c.
-</UL>
-
-<LI>proto.h:
-<UL>
-<LI>moved definition of SIGNAL_T (and SIGNAL_RETURN) here from
- main.c, resize.c to allow use of this symbol in prototypes
- (mostly in xterm.h).
-
-<LI>added definition 'Size_t' to use as corrected type for
- strncpy, malloc sizes - n/c.
-</UL>
-
-<LI>resize.c:
-<UL>
-<LI>moved SIGNAL_T definition to proto.h -- n/c.
-
-<LI>use Size_t type - n/c.
-</UL>
-
-<LI>screen.c:
-<UL>
-<LI>use Size_t type - n/c.
-</UL>
-
-<LI>tabs.c:
-<UL>
-<LI>corrected nested-extern declaration of 'term' -- n/c
-</UL>
-
-<LI>util.c:
-<UL>
-<LI>corrected/supplied parameters to 'TekExpose()' -- changes
- object (note: 'TekExpose()' doesn't use its parameters).
-
-<LI>corrected nested-extern declaration of
- 'waiting_for_initial_map' -- n/c.
-
-<LI>renamed 'term' parameters to avoid gcc -Wshadow warning - n/c
-</UL>
-
-<LI>xterm.h:
-<UL>
-<LI>prototype 'do_hangup()', 'HandleFocusChange()',
- 'TekExpose()', 'Error()', 'Exit()' - forces changes in
- various places.
-
-<LI>adjusted prototypes that pass 'Boolean' arguments to use
- 'int' (this is the "correct" ANSI approach to extended
- compiles; it's worth mentioning that gcc doesn't meet the
- ANSI spec here). I used gcc -Wconversion to find these, but
- there's a lot of unrelated warnings that are due to setting
- NARROWPROTO in the config - n/c.
-
-<LI>renamed 'term' parameters to avoid gcc -Wshadow warning - n/c
-</UL>
-</UL>
-<H1><A NAME="xterm_01">Patch #1 - 1996/1/6</A></H1>
-This is my first cleanup patch for xterm. It addresses all of the gcc warnings
-for -Wall, -Wmissing-prototypes and -Wstrict-prototypes that I can change
-without modifying the object code. (I'm compiling this with gcc 2.7.0 for an
-aout target, which makes it simple to compare objects. When I do ELF-only,
-I've got a tool that compares that sort of thing as well).
-<P>
-Briefly, this patch adds (and uses) two header files in the xterm directory:
-<PRE>
- proto.h
- xterm.h
-</PRE>
-I expect this to be the biggest patch by far. However (barring a misplaced
-prototype), it shouldn't break anything, since the intent of the patch is to
-provide missing declarations.
-</BODY>
-</HTML>
diff --git a/nx-X11/programs/xterm/xterm.man b/nx-X11/programs/xterm/xterm.man
deleted file mode 100644
index 36fa64df0..000000000
--- a/nx-X11/programs/xterm/xterm.man
+++ /dev/null
@@ -1,4418 +0,0 @@
-.\" $XTermId: xterm.man,v 1.320 2005/11/13 23:10:36 tom Exp $
-.\" $Xorg: xterm.man,v 1.4 2001/02/09 02:06:03 xorgcvs Exp $
-.\"
-.\"
-.\" Copyright 1996-2004,2005 by Thomas E. Dickey
-.\"
-.\" All Rights Reserved
-.\"
-.\" Permission is hereby granted, free of charge, to any person obtaining a
-.\" copy of this software and associated documentation files (the
-.\" "Software"), to deal in the Software without restriction, including
-.\" without limitation the rights to use, copy, modify, merge, publish,
-.\" distribute, sublicense, and/or sell copies of the Software, and to
-.\" permit persons to whom the Software is furnished to do so, subject to
-.\" the following conditions:
-.\"
-.\" The above copyright notice and this permission notice shall be included
-.\" in all copies or substantial portions of the Software.
-.\"
-.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-.\" IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY
-.\" CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-.\" TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-.\" SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-.\"
-.\" Except as contained in this notice, the name(s) of the above copyright
-.\" holders shall not be used in advertising or otherwise to promote the
-.\" sale, use or other dealings in this Software without prior written
-.\" authorization.
-.\"
-.\"
-.\" Copyright 1989 The Open Group
-.\"
-.\" Permission to use, copy, modify, distribute, and sell this software and its
-.\" documentation for any purpose is hereby granted without fee, provided that
-.\" the above copyright notice appear in all copies and that both that
-.\" copyright notice and this permission notice appear in supporting
-.\" documentation.
-.\"
-.\" The above copyright notice and this permission notice shall be included
-.\" in all copies or substantial portions of the Software.
-.\"
-.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-.\" IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
-.\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-.\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-.\" OTHER DEALINGS IN THE SOFTWARE.
-.\"
-.\" Except as contained in this notice, the name of The Open Group shall
-.\" not be used in advertising or otherwise to promote the sale, use or
-.\" other dealings in this Software without prior written authorization
-.\" from The Open Group.
-.\"
-.\" $XFree86: xc/programs/xterm/xterm.man,v 3.118 2005/11/13 23:10:36 dickey Exp $
-.\"
-.\" updated by Thomas E. Dickey for XFree86, July 1996 - July 2004.
-.
-.de DS
-.sp
-.in +4
-.nf
-.ft C \" Courier
-..
-.de DE
-.fi
-.ft P
-.sp
-.in -4
-..
-.TH XTERM 1 __vendorversion__
-.SH NAME
-xterm \- terminal emulator for X
-.SH SYNOPSIS
-.B xterm
-[-\fItoolkitoption\fP ...] [-\fIoption\fP ...] [\fIshell\fP]
-.SH DESCRIPTION
-The \fIxterm\fP program is a terminal emulator for the X Window System.
-It provides DEC VT102/VT220 (VTxxx) and Tektronix 4014
-compatible terminals for programs that cannot
-use the window system directly.
-If the underlying operating system supports
-terminal resizing capabilities (for example, the SIGWINCH signal in systems
-derived from 4.3bsd), \fIxterm\fP will use the facilities to notify programs
-running in the window whenever it is resized.
-.
-.PP
-The VTxxx and Tektronix 4014 terminals each have their own window so that you
-can edit text in one and look at graphics in the other at the same time.
-To maintain the correct aspect ratio (height/width), Tektronix graphics will
-be restricted to the largest box with a 4014's aspect ratio that will fit in
-the window.
-This box is located in the upper left area of the window.
-.
-.PP
-Although both windows may be displayed at the same time, one of them is
-considered the ``active'' window for receiving keyboard input and terminal
-output.
-This is the window that contains the text cursor.
-The active window can be chosen through escape sequences,
-the ``VT Options'' menu in the VTxxx window, and the ``Tek Options''
-menu in the 4014 window.
-.
-.SH EMULATIONS
-The VT102 emulation is fairly complete, but does not support
-autorepeat.
-Double-size characters are displayed properly if your font server supports
-scalable fonts.
-The VT220 emulation does not support soft fonts, it is otherwise complete.
-.IR Termcap (5)
-entries that work with
-.I xterm
-include
-an optional platform-specific entry,
-``xterm,'' ``vt102,'' ``vt100'' and ``ansi,'' and ``dumb.''
-.I xterm
-automatically searches the termcap file in this order for these entries and then
-sets the ``TERM'' and the ``TERMCAP'' environment variables.
-You may also use ``vt220,'' but must set the terminal emulation level
-with the \fBdecTerminalID\fP resource.
-(The ``TERMCAP'' environment variable is not set if \fIxterm\fP is linked
-against a terminfo library, since the requisite information is not provided
-by the termcap emulation of terminfo libraries).
-.
-.PP
-Many of the special
-.I xterm
-features may be modified under program control
-through a set of escape sequences different from the standard VT102 escape
-sequences.
-(See the
-.I "Xterm Control Sequences"
-document.)
-.
-.PP
-The Tektronix 4014 emulation is also fairly good.
-It supports 12-bit graphics addressing, scaled to the window size.
-Four different font sizes and five different lines types are supported.
-There is no write-through or defocused mode support.
-The Tektronix text and graphics commands are recorded internally by
-.I xterm
-and may be written to a file by sending the COPY escape sequence (or through
-the
-.B Tektronix
-menu; see below).
-The name of the file will be
-``\fBCOPY\fIyyyy\fB-\fIMM\fB-\fIdd\fB.\fIhh\fB:\fImm\fB:\fIss\fR'', where
-.IR yyyy ,
-.IR MM ,
-.IR dd ,
-.IR hh ,
-.I mm
-and
-.I ss
-are the year, month, day, hour, minute and second when the COPY was performed
-(the file is created in the directory
-.I xterm
-is started in, or the home directory for a login
-.IR xterm ).
-.
-.PP
-Not all of the features described in this manual are necessarily available in
-this version of \fIxterm\fP.
-Some (e.g., the non-VT220 extensions) are available
-only if they were compiled in, though the most commonly-used are in the
-default configuration.
-.
-.SH "OTHER FEATURES"
-.I Xterm
-automatically highlights the text cursor when the
-pointer enters the window (selected) and unhighlights it when the pointer
-leaves the window (unselected).
-If the window is the focus window, then the text cursor is
-highlighted no matter where the pointer is.
-.
-.PP
-In VT102 mode, there are escape sequences to activate and deactivate
-an alternate screen buffer, which is the same size as the display area
-of the window.
-When activated, the current screen is saved and replaced with the alternate
-screen.
-Saving of lines scrolled off the top of the window is disabled until the
-normal screen is restored.
-The
-.IR termcap (5)
-entry for
-.I xterm
-allows the visual editor
-.IR vi (1)
-to switch to the alternate screen for editing and to restore the screen
-on exit.
-A popup menu entry makes it simple to switch between the normal and
-alternate screens for cut and paste.
-.
-.PP
-In either VT102 or Tektronix mode, there are escape sequences to change the
-name of the windows.
-Additionally, in VT102 mode,
-\fIxterm\fP implements the window-manipulation control
-sequences from \fIdtterm\fP, such as resizing the window, setting its location
-on the screen.
-.
-.PP
-.I Xterm
-allows character-based applications to receive mouse events (currently
-button-press and release events, and button-motion events)
-as keyboard control sequences.
-See \fIXterm Control Sequences\fP for details.
-.
-.
-.SH OPTIONS
-The \fIxterm\fP terminal emulator
-accepts all of the standard X Toolkit command line options as well as
-the following.
-If the option begins with a
-.RB ` + '
-instead of a
-.RB ` - ',
-the option is restored to its default value.
-The \fB-version\fP and \fB-help\fP options are interpreted even if \fIxterm\fP cannot
-open the display, and are useful for testing and configuration scripts:
-.TP 8
-.B -version
-This causes \fIxterm\fP to print a version number to the standard output.
-.TP 8
-.B -help
-This causes \fIxterm\fP to print out a verbose message describing its options.
-The message is written to the standard error.
-.
-.PP
-One parameter (after all options) may be given.
-That overrides \fIxterm\fP's built-in choice of shell program.
-Normally \fIxterm\fP checks the SHELL variable.
-If that is not set, \fIxterm\fP tries to use the shell program specified
-in the password file.
-If that is not set, \fIxterm\fP uses \fI/bin/sh\fP.
-If the parameter names an executable file, \fIxterm\fP uses that instead.
-The parameter must be an absolute path, or name a file found on the user's
-PATH (and thereby construct an absolute path).
-The \fB-e\fP option cannot be used with this parameter since
-it uses all parameters following the option.
-.PP
-The other options are used to control the appearance and behavior.
-Not all options are necessarily configured into your copy of \fIxterm\fP:
-.TP 8
-.B -132
-Normally, the VT102 DECCOLM escape sequence that switches between 80 and
-132 column mode is ignored.
-This option causes the DECCOLM escape sequence to be recognized, and the
-.I xterm
-window will resize appropriately.
-.TP 8
-.B -ah
-This option indicates that
-.I xterm
-should always highlight the text cursor.
-By default,
-.I xterm
-will display a hollow text cursor whenever the focus is lost or the
-pointer leaves the window.
-.TP 8
-.B +ah
-This option indicates that
-.I xterm
-should do text cursor highlighting based on focus.
-.TP 8
-.B -ai
-This option disables active icon support if that feature was compiled
-into \fIxterm\fP.
-This is equivalent to setting the \fIvt100\fP resource
-\fBactiveIcon\fP to ``false''.
-.TP 8
-.B +ai
-This option enables active icon support if that feature was compiled
-into \fIxterm\fP.
-This is equivalent to setting the \fIvt100\fP resource
-\fBactiveIcon\fP to ``true''.
-.TP 8
-.B -aw
-This option indicates that auto-wraparound should be allowed.
-This
-allows the cursor to automatically wrap to the beginning of the next
-line when when it is at the rightmost position of a line and text is
-output.
-.TP 8
-.B +aw
-This option indicates that auto-wraparound should not be allowed.
-.TP 8
-.BI -b " number"
-This option specifies the size of the inner border (the distance between
-the outer edge of the characters and the window border) in pixels.
-That is the \fIvt100\fP \fIinternalBorder\fP resource.
-The
-default is 2.
-.TP 8
-.B +bc
-turn off text cursor blinking.
-This overrides the \fBcursorBlink\fR resource.
-.TP 8
-.B -bc
-turn on text cursor blinking.
-This overrides the \fBcursorBlink\fR resource.
-.TP 8
-.BI -bcf " milliseconds"
-set the amount of time text cursor is off when blinking via the
-\fIcursorOffTime\fP resource.
-.TP 8
-.BI -bcn " milliseconds"
-set the amount of time text cursor is on when blinking via the
-\fIcursorOffTime\fP resource.
-.TP 8
-.B "-bdc"
-Set the \fIvt100\fP resource \fBcolorBDMode\fR to ``false'',
-disabling the display of characters with bold attribute as color
-.TP 8
-.B "+bdc"
-Set the \fIvt100\fP resource \fBcolorBDMode\fR to ``true'',
-enabling the display of characters with bold attribute as color
-rather than bold
-.TP 8
-.B "-cb"
-Set the \fIvt100\fP resource \fBcutToBeginningOfLine\fP to ``false''.
-.TP 8
-.B "+cb"
-Set the \fIvt100\fP resource \fBcutToBeginningOfLine\fP to ``true''.
-.TP 8
-.B "-cc \fIcharacterclassrange\fP:\fIvalue\fP[,...]"
-This sets classes indicated by the given ranges for using in selecting by
-words.
-See the section specifying character classes.
-and discussion of the \fIcharClass\fP resource.
-.TP 8
-.B "-cjk_width"
-Set the \fBcjkWidth\fP resource to ``true''.
-When turned on, characters with East Asian Ambiguous (A) category in UTR 11
-have a column width of 2.
-Otherwise, they have a column width of 1.
-This may be useful for some legacy CJK text
-terminal-based programs assuming box drawings and others to have a column
-width of 2.
-It also has to be turned on when you specify a TrueType
-CJK double-width (bi-width/monospace) font either with \fB-fa\fP at
-the command line or \fBfaceName\fP resource.
-The default is ``false''
-.TP 8
-.B "+cjk_width"
-Reset the \fBcjkWidth\fP resource.
-.TP 8
-.BI -class " string"
-This option allows you to override \fIxterm\fP's resource class.
-Normally it is ``XTerm'', but
-can be set to another class such as ``UXTerm'' to override selected resources.
-.TP 8
-.B "-cm"
-This option disables recognition of ANSI color-change escape sequences.
-It sets the \fIcolorMode\fP resource to ``false''.
-.TP 8
-.B "+cm"
-This option enables recognition of ANSI color-change escape sequences.
-This is the same as the \fIvt100\fP resource \fBcolorMode\fP.
-.TP 8
-.B "-cn"
-This option indicates that newlines should not be cut in line-mode
-selections.
-It sets the \fIcutNewline\fP resource to ``false''.
-.TP 8
-.B +cn
-This option indicates that newlines should be cut in line-mode selections.
-It sets the \fIcutNewline\fP resource to ``true''.
-.TP 8
-.BI -cr " color"
-This option specifies the color to use for text cursor.
-The default is to
-use the same foreground color that is used for text.
-It sets the \fIcursorColor\fP resource according to the parameter.
-.TP 8
-.B -cu
-This option indicates that \fIxterm\fP should work around a bug in the
-.IR more (1)
-program that causes it
-to incorrectly display lines that are exactly the width of the window and
-are followed by a line beginning with a tab
-(the leading tabs are not displayed).
-This option is so named because it was originally thought to be a bug
-in the
-.IR curses (3x)
-cursor motion package.
-.TP 8
-.B +cu
-This option indicates that \fIxterm\fP should not work around the
-.IR more (1)
-bug mentioned above.
-.TP 8
-.B "-dc"
-This option disables the escape sequence to change dynamic colors:
-the vt100 foreground and background colors,
-its text cursor color,
-the pointer cursor foreground and background colors,
-the Tektronix emulator foreground and background colors,
-its text cursor color
-and highlight color.
-The option sets the \fIdynamicColors\fP option to ``false''.
-.TP 8
-.B "+dc"
-This option enables the escape sequence to change dynamic colors.
-The option sets the \fIdynamicColors\fP option to ``true''.
-.TP 8
-.BI -e " program \fP[ \fIarguments \fP.\|.\|. ]\fI"
-This option specifies the program (and its command line arguments) to be
-run in the \fIxterm\fP window.
-It also sets the window title and icon
-name to be the basename of the program being executed if neither \fI-T\fP
-nor \fI-n\fP are given on the command line.
-\fBThis must be the last option on the command line.\fP
-.TP 8
-.BI -en " encoding"
-This option determines the encoding on which \fIxterm\fP runs.
-It sets the \fBlocale\fR resource.
-Encodings other than UTF-8 are supported by using \fIluit\fR.
-The \fB-lc\fR option should be used instead of \fB-en\fR for
-systems with locale support.
-.TP 8
-.BI -fb " font"
-This option specifies a font to be used when displaying bold text.
-This font must be the same height and width as the normal font.
-If only one of the normal or bold fonts is specified, it will be used as the
-normal font and the bold font will be produced by overstriking this font.
-The default is to do overstriking of the normal font.
-See also the discussion of \fBboldFont\fP and \fBboldMode\fP resources.
-.TP 8
-.BI -fa " pattern"
-This option sets the pattern for fonts selected from the FreeType
-library if support for that library was compiled into \fIxterm\fP.
-This corresponds to the \fBfaceName\fP resource.
-When a CJK
-double-width font is specified, you also need to turn
-on the \fBcjkWidth\fP resource.
-.TP 8
-.BI -fbb
-This option indicates that \fIxterm\fP should compare normal and bold fonts bounding
-boxes to ensure they are compatible.
-It sets the \fBfreeBoldBox\fP resource to ``false''.
-.TP 8
-.BI +fbb
-This option indicates that \fIxterm\fP should not compare normal and bold fonts bounding
-boxes to ensure they are compatible.
-It sets the \fBfreeBoldBox\fP resource to ``true''.
-.TP 8
-.BI -fbx
-This option indicates that \fIxterm\fP should not assume that the
-normal and bold fonts have VT100 line-drawing characters.
-If any are missing, \fIxterm\fP will draw the characters directly.
-It sets the \fBforceBoxChars\fP resource to ``false''.
-.TP 8
-.BI +fbx
-This option indicates that \fIxterm\fP should assume that the
-normal and bold fonts have VT100 line-drawing characters.
-It sets the \fBforceBoxChars\fP resource to ``true''.
-.TP 8
-.BI -fd " pattern"
-This option sets the pattern for double-width fonts selected from the FreeType
-library if support for that library was compiled into \fIxterm\fP.
-This corresponds to the \fBfaceNameDoublesize\fP resource.
-.TP 8
-.BI -fi " font"
-This option sets the font for active icons if that feature was compiled
-into \fIxterm\fP.
-See also the discussion of the \fBiconFont\fP resource.
-.TP 8
-.BI -fs " size"
-This option sets the pointsize for fonts selected from the FreeType
-library if support for that library was compiled into \fIxterm\fP.
-This corresponds to the \fBfaceSize\fP resource.
-.TP 8
-.B -fw \fIfont\fP
-This option specifies the font to be used for displaying wide text.
-By default,
-it will attempt to use a font twice as wide as the font that will be used to
-draw normal text.
-If no doublewidth font is found, it will improvise, by stretching
-the normal font.
-This corresponds to the \fBwideFont\fP resource.
-.TP 8
-.B -fwb \fIfont\fP
-This option specifies the font to be used for displaying bold wide text.
-By default,
-it will attempt to use a font twice as wide as the font that will be used to
-draw bold text.
-If no doublewidth font is found, it will improvise, by stretching
-the bold font.
-This corresponds to the \fBwideBoldFont\fP resource.
-.TP 8
-.B -fx \fIfont\fP
-This option specifies the font to be used for displaying the preedit string
-in the "OverTheSpot" input method.
-See also the discussion of the \fBximFont\fP resource.
-.TP 8
-.BI -hc " color"
-This option specifies the color to use for the background of
-selected or otherwise highlighted text.
-If not specified,
-reverse video is used.
-See the discussion of the \fBhighlightColor\fP resource.
-.TP 8
-.BI -hf
-This option indicates that HP Function Key escape codes should be generated
-for function keys.
-It sets the \fBhpFunctionKeys\fP resource to ``true''.
-.TP 8
-.BI +hf
-This option indicates that HP Function Key escape codes should not be generated
-for function keys.
-It sets the \fBhpFunctionKeys\fP resource to ``false''.
-.TP 8
-.BI -hold
-Turn on the \fBhold\fP resource, i.e.,
-\fIxterm\fP will not immediately destroy its window when the shell command completes.
-It will wait until you use the window manager to destroy/kill the window, or
-if you use the menu entries that send a signal, e.g., HUP or KILL.
-.TP 8
-.BI +hold
-Turn off the \fBhold\fP resource, i.e.,
-\fIxterm\fP will immediately destroy its window when the shell command completes.
-.TP 8
-.B -ie
-Turn on the \fBptyInitialErase\fP resource, i.e.,
-use the pseudo-terminal's sense of the stty erase value.
-.TP 8
-.B +ie
-Turn off the \fBptyInitialErase\fP resource, i.e.,
-set the stty erase value using the \fBkb\fP string from the termcap entry as
-a reference, if available.
-.TP 8
-.B -im
-Turn on the \fBuseInsertMode\fP resource,
-which forces use of insert mode by adding appropriate entries to the TERMCAP
-environment variable.
-.TP 8
-.B +im
-Turn off the \fBuseInsertMode\fP resource.
-.TP 8
-.BI -into " windowId"
-Given an X window identifier (a decimal integer),
-\fIxterm\fP will reparent its top-level shell widget to that window.
-This is used to embed \fIxterm\fP within other applications.
-.TP 8
-.B -j
-This option indicates that \fIxterm\fP should do jump scrolling.
-It corresponds to the \fBjumpScroll\fP resource.
-Normally,
-text is scrolled one line at a time; this option allows \fIxterm\fP to move
-multiple lines at a time so that it does not fall as far behind.
-Its use is
-strongly recommended since it makes \fIxterm\fP much faster when scanning
-through large amounts of text.
-The VT100 escape sequences for enabling and
-disabling smooth scroll as well as the ``VT Options''
-menu can be used to turn this
-feature on or off.
-.TP 8
-.B +j
-This option indicates that \fIxterm\fP should not do jump scrolling.
-.TP 8
-.B -k8
-This option sets the \fBallowC1Printable\fP resource.
-When \fBallowC1Printable\fP is set, \fIxterm\fP overrides the mapping
-of C1 control characters (code 128-159) to treat them as printable.
-.TP 8
-.B +k8
-This option resets the \fBallowC1Printable\fP resource.
-.TP 8
-.BI -kt " keyboardtype"
-This option sets the \fBkeyboardType\fP resource.
-Possible values include: ``hp'', ``sco'', ``sun'' and ``vt220''.
-The default value ``unknown'',
-causes the corresponding resource to be ignored.
-.TP 8
-.B -l
-Turn logging on.
-Normally logging is not supported, due to security concerns.
-Some versions of \fIxterm\fP may have logging enabled.
-The logfile is written to the directory from which \fIxterm\fP is
-invoked.
-The filename is generated, of the form
-.sp
- XtermLog.\fIXXXXXX\fR
-.sp
-or
-.sp
- Xterm.log.\fIhostname.yyyy.mm.dd.hh.mm.ss.XXXXXX\fR
-.sp
-depending on how \fIxterm\fP was built.
-.TP 8
-.B +l
-Turn logging off.
-.TP 8
-.B -lc
-Turn on support of various encodings according to the users'
-locale setting, i.e., LC_ALL, LC_CTYPE, or LANG environment variables.
-This is achieved by turning on UTF-8 mode and by invoking \fIluit\fR for
-conversion between locale encodings and UTF-8.
-(\fIluit\fR is not invoked in UTF-8 locales.)
-This corresponds to the \fBlocale\fR resource.
-.IP
-The actual list of encodings which are supported is determined by \fIluit\fR.
-Consult the \fIluit\fR manual page for further details.
-See also the discussion of the \fB-u8\fP option which supports UTF-8 locales.
-.TP 8
-.B +lc
-Turn off support of automatic selection of locale encodings.
-Conventional 8bit mode or, in UTF-8 locales or with \fB-u8\fP option,
-UTF-8 mode will be used.
-.TP 8
-.BI -lcc " path"
-File name for the encoding converter from/to locale encodings
-and UTF-8 which is used with \fB-lc\fP option or \fBlocale\fR resource.
-This corresponds to the \fBlocaleFilter\fR resource.
-.TP 8
-.B -leftbar
-Force scrollbar to the left side of VT100 screen.
-This is the default, unless you have set the rightScrollBar resource.
-.TP 8
-.BI -lf " filename"
-Specify the log-filename.
-See the \fB-l\fP option.
-.TP 8
-.B -ls
-This option indicates that the shell that is started in the \fIxterm\fP window
-will be a login shell (i.e., the first character of argv[0] will be a dash,
-indicating to the shell that it should read the user's .login or .profile).
-.IP
-The \fB-ls\fP flag and the \fBloginShell\fP resource
-are ignored if \fB-e\fP is also given,
-because \fIxterm\fP does not know how to make the shell
-start the given command after whatever it does when it is a login
-shell - the user's shell of choice need not be a Bourne shell after all.
-Also, \fIxterm\ -e\fP is supposed to provide a consistent
-functionality for other applications that need to start text-mode
-programs in a window, and if \fBloginShell\fP were not ignored, the
-result of ~/.profile might interfere with that.
-.IP
-If you do want the effect of \fB-ls\fP and \fB-e\fP simultaneously, you
-may get away with something like
-.RS 15
-xterm -e /bin/bash -l -c "my command here"
-.RE
-.IP
-Finally, \fB-ls\fP is not completely ignored,
-because \fIxterm\ -ls\ -e\fP does write a \fI/etc/wtmp\fP entry
-(if configured to do so),
-whereas \fIxterm\ -e\fP does not.
-.TP 8
-.B +ls
-This option indicates that the shell that is started should not be a login
-shell (i.e., it will be a normal ``subshell'').
-.TP 8
-.B -mb
-This option indicates that \fIxterm\fP should ring a margin bell when
-the user types near the right end of a line.
-This option can be turned on
-and off from the ``VT Options'' menu.
-.TP 8
-.B +mb
-This option indicates that margin bell should not be rung.
-.TP 8
-.BI -mc " milliseconds"
-This option specifies the maximum time between multi-click selections.
-.TP 8
-.B -mesg
-Turn off the \fBmessages\fP resource, i.e.,
-disallow write access to the terminal.
-.TP 8
-.B +mesg
-Turn on the \fBmessages\fP resource, i.e.,
-allow write access to the terminal.
-.TP 8
-.B "-mk_width"
-Set the \fBmkWidth\fP resource to ``true''.
-This makes \fIxterm\fP use a built-in version of the wide-character width
-calculation.
-The default is ``false''
-.TP 8
-.B "+mk_width"
-Reset the \fBmkWidth\fP resource.
-.TP 8
-.BI -ms " color"
-This option specifies the color to be used for the pointer cursor.
-The default
-is to use the foreground color.
-This sets the \fIpointerColor\fP resource.
-.TP 8
-.BI -nb " number"
-This option specifies the number of characters from the right end of a line
-at which the margin bell, if enabled, will ring.
-The default is 10.
-.TP 8
-.B "-nul"
-This option disables the display of underlining.
-.TP 8
-.B "+nul"
-This option enables the display of underlining.
-.TP 8
-.B -pc
-This option enables the PC-style use of bold colors (see boldColors
-resource).
-.TP 8
-.B +pc
-This option disables the PC-style use of bold colors.
-.TP 8
-.B -pob
-This option indicates that the window should be raised whenever a
-Control-G is received.
-.TP 8
-.B +pob
-This option indicates that the window should not be raised whenever a
-Control-G is received.
-.TP 8
-.B -rightbar
-Force scrollbar to the right side of VT100 screen.
-.TP 8
-.B "-rvc"
-This option disables the display of characters with reverse attribute as color.
-.TP 8
-.B "+rvc"
-This option enables the display of characters with reverse attribute as color.
-.TP 8
-.B -rw
-This option indicates that reverse-wraparound should be allowed.
-This allows
-the cursor to back up from the leftmost column of one line to the rightmost
-column of the previous line.
-This is very useful for editing long shell
-command lines and is encouraged.
-This option can be turned on and off from
-the ``VT Options'' menu.
-.TP 8
-.B +rw
-This option indicates that reverse-wraparound should not be allowed.
-.TP 8
-.B -s
-This option indicates that \fIxterm\fP may scroll asynchronously, meaning that
-the screen does not have to be kept completely up to date while scrolling.
-This allows \fIxterm\fP to run faster when network latencies are very high
-and is typically useful when running across a very large internet or many
-gateways.
-.TP 8
-.B +s
-This option indicates that \fIxterm\fP should scroll synchronously.
-.TP 8
-.B -samename
-Does not send title and icon name change requests when the request
-would have no effect: the name is not changed.
-This has the advantage
-of preventing flicker and the disadvantage of requiring an extra
-round trip to the server to find out the previous value.
-In practice
-this should never be a problem.
-.TP 8
-.B +samename
-Always send title and icon name change requests.
-.TP 8
-.B -sb
-This option indicates that some number of lines that are scrolled off the top
-of the window should be saved and that a scrollbar should be displayed so that
-those lines can be viewed.
-This option may be turned on and off from the
-``VT Options'' menu.
-.TP 8
-.B +sb
-This option indicates that a scrollbar should not be displayed.
-.TP 8
-.B -sf
-This option indicates that Sun Function Key escape codes should be generated
-for function keys.
-.TP 8
-.B +sf
-This option indicates that the standard escape codes should be generated for
-function keys.
-.TP 8
-.B -si
-This option indicates that output to a window should not automatically
-reposition the screen to the bottom of the scrolling region.
-This option can be turned on and off from the ``VT Options'' menu.
-.TP 8
-.B +si
-This option indicates that output to a window should cause it to
-scroll to the bottom.
-.TP 8
-.B -sk
-This option indicates that pressing a key while
-using the scrollbar to review previous lines of text should
-cause the window to be repositioned automatically in the normal position at the
-bottom of the scroll region.
-.TP 8
-.B +sk
-This option indicates that pressing a key while using the scrollbar
-should not cause the window to be repositioned.
-.TP 8
-.BI -sl " number"
-This option specifies the number of lines to save that have been scrolled
-off the top of the screen.
-This corresponds to the \fBsaveLines\fP resource.
-The default is 64.
-.TP 8
-.B -sm
-This option, corresponding to the \fBsessionMgt\fR resource,
-indicates that \fIxterm\fR should
-set up session manager callbacks.
-.TP 8
-.B +sm
-This option indicates that \fIxterm\fR should
-not set up session manager callbacks.
-.TP 8
-.B -sp
-This option indicates that Sun/PC keyboard should be assumed,
-providing mapping for keypad `+' to `,', and
-CTRL-F1 to F13, CTRL-F2 to F14, etc.
-.TP 8
-.B +sp
-This option indicates that the standard escape codes should be generated for
-keypad and function keys.
-.TP 8
-.B -t
-This option indicates that \fIxterm\fP should start in Tektronix mode, rather
-than in VT102 mode.
-Switching between the two windows is done using the
-``Options'' menus.
-.IR Termcap (5)
-entries that work with
-.I xterm
-``tek4014,'' ``tek4015,'' ``tek4012'', ``tek4013'' and ``tek4010,'' and ``dumb.''
-.I xterm
-automatically searches the termcap file in this order for these entries and then
-sets the ``TERM'' and the ``TERMCAP'' environment variables.
-.TP 8
-.B +t
-This option indicates that \fIxterm\fP should start in VT102 mode.
-.TP 8
-.B -tb
-This option, corresponding to the \fBtoolBar\fR resource,
-indicates that \fIxterm\fR should display a toolbar (or menubar)
-at the top of its window. The buttons in the toolbar correspond to
-the popup menus, e.g., control/left/mouse for "Main Options".
-.TP 8
-.B +tb
-This option indicates that \fIxterm\fR should
-not set up a toolbar.
-.TP 8
-.BI -ti " term_id"
-Specify the name used by \fIxterm\fP to select the
-correct response to terminal ID queries.
-It also specifies the emulation level,
-used to determine the type of response to a DA control sequence.
-Valid values include vt52, vt100, vt101, vt102, and vt220 (the "vt" is optional).
-The default is vt100.
-The term_id argument specifies the terminal ID to use.
-(This is the same as the \fBdecTerminalID\fP resource).
-.TP 8
-.BI -tm " string"
-This option specifies a series of terminal setting keywords followed by the
-characters that should be bound to those functions, similar to the \fIstty\fP
-program.
-The keywords and their values are described in detail in the \fBttyModes\fP
-resource.
-.TP 8
-.BI -tn " name"
-This option specifies the name of the terminal type to be set in the TERM
-environment variable.
-It corresponds to the \fBtermName\fP resource.
-This terminal type must exist in the terminal
-database
-(termcap or terminfo, depending on how \fIxterm\fP is built)
-and should have \fIli#\fP and \fIco#\fP entries.
-If the terminal type is not found, \fIxterm\fP uses the built-in list
-``xterm'', ``vt102'', etc.
-.TP 8
-.B -u8
-This option sets the \fButf8\fP resource.
-When \fButf8\fP is set, \fIxterm\fP interprets incoming data as UTF-8.
-This sets the \fBwideChars\fP resource as a side-effect,
-but the UTF-8 mode set by this option prevents it from being turned off.
-If you must turn it on and off, use the \fBwideChars\fP resource.
-.IP
-This option and the \fButf8\fR resource are overridden by
-the \fB-lc\fP and \fB-en\fP options and \fBlocale\fR resource.
-That is, if \fIxterm\fP has been compiled to support \fIluit\fR,
-and the \fBlocale\fP resource is not ``false''
-this option is ignored.
-We recommend using
-the \fB-lc\fR option or the ``\fBlocale:\ true\fR'' resource
-in UTF-8 locales when your operating system supports locale,
-or \fB-en\ UTF-8\fP option or the ``\fBlocale:\ UTF-8\fR'' resource
-when your operating system does not support locale.
-.TP 8
-.B +u8
-This option resets the \fButf8\fP resource.
-.TP 8
-.B "-ulc"
-This option disables the display of characters with underline attribute as
-color rather than with underlining.
-.TP 8
-.B "+ulc"
-This option enables the display of characters with underline attribute as
-color rather than with underlining.
-.TP 8
-.B -ut
-This option indicates that \fIxterm\fP should not write a record into the
-the system \fIutmp\fP log file.
-.TP 8
-.B +ut
-This option indicates that \fIxterm\fP should write a record into
-the system \fIutmp\fP log file.
-.TP 8
-.B -vb
-This option indicates that a visual bell is preferred over an audible one.
-Instead of ringing the terminal bell whenever a Control-G is received, the
-window will be flashed.
-.TP 8
-.B +vb
-This option indicates that a visual bell should not be used.
-.TP 8
-.B -wc
-This option sets the \fBwideChars\fP resource.
-When \fBwideChars\fP is set, \fIxterm\fP maintains internal structures for 16-bit
-characters.
-If you do not set this resource to ``true'',
-\fIxterm\fP will ignore the escape sequence which turns UTF-8 mode on and off.
-The default is ``false''.
-.TP 8
-.B +wc
-This option resets the \fBwideChars\fP resource.
-.TP 8
-.B -wf
-This option indicates that \fIxterm\fP should wait for the window to be mapped
-the first time before starting the subprocess so that the initial terminal
-size settings and environment variables are correct.
-It is the application's
-responsibility to catch subsequent terminal size changes.
-.TP 8
-.B +wf
-This option indicates that \fIxterm\fP should not wait before starting the
-subprocess.
-.TP 8
-.B -ziconbeep \fIpercent\fP
-Same as zIconBeep resource.
-If percent is non-zero, xterms that produce output while iconified
-will cause an XBell sound at the given volume
-and have "***" prepended to their icon titles.
-Most window managers will detect this change immediately, showing you
-which window has the output.
-(A similar feature was in x10 \fIxterm\fP.)
-.TP 8
-.B -C
-This option indicates that this window should receive console output.
-This
-is not supported on all systems.
-To obtain console output, you must be the
-owner of the console device, and you must have read and write permission
-for it.
-If you are running X under \fIxdm\fP on the console screen you may
-need to have the session startup and reset programs explicitly change the
-ownership of the console device in order to get this option to work.
-.TP 8
-.B -S\fIccn\fP
-This option allows \fIxterm\fP to be used as an input and
-output channel for an existing program and is sometimes used in specialized
-applications.
-The option value specifies the last few letters of the name of a pseudo-terminal
-to use in slave mode, plus the number of the inherited file descriptor.
-If the option contains a ``/'' character, that delimits the characters
-used for the pseudo-terminal name from the file descriptor.
-Otherwise, exactly two characters are used from the option for
-the pseudo-terminal name, the remainder is the file descriptor.
-Examples:
-.nf
-.RS 15
--S123/45
--Sab34
-.RE
-.fi
-.IP
-Note that \fIxterm\fP does not close any file descriptor
-which it did not open for its own use.
-It is possible (though probably not portable) to have an application
-which passes an open file descriptor down to \fIxterm\fP past the
-initialization or the \fB-S\fP option to a process running in the \fIxterm\fP.
-.PP
-The following command line arguments are provided for compatibility with
-older versions.
-They may not be supported in the next release as the X
-Toolkit provides standard options that accomplish the same task.
-.TP 8
-.B "%\fIgeom\fP"
-This option specifies the preferred size and position of the Tektronix window.
-It is shorthand for specifying the ``\fI*tekGeometry\fP'' resource.
-.TP 8
-.B \ #\fIgeom\fP
-This option specifies the preferred position of the icon window.
-It is shorthand for specifying the ``\fI*iconGeometry\fP'' resource.
-.TP 8
-.BI -T " string"
-This option specifies the title for \fIxterm\fP's windows.
-It is equivalent to \fB-title\fP.
-.TP 8
-.BI -n " string"
-This option specifies the icon name for \fIxterm\fP's windows.
-It is shorthand for specifying the ``\fI*iconName\fP'' resource.
-Note that this is not the same as the toolkit option \fB-name\fP (see below).
-The default icon name is the application name.
-.TP 8
-.B -r
-This option indicates that reverse video should be simulated by swapping
-the foreground and background colors.
-It is equivalent to
-\fB-rv\fP.
-.TP 8
-.BI -w " number"
-This option specifies the width in pixels of the border surrounding the window.
-It is equivalent to \fB-borderwidth\fP or \fB-bw\fP.
-.
-.PP
-The following standard X Toolkit command line arguments are commonly used
-with \fIxterm\fP:
-.TP 8
-.B -bd \fIcolor\fP
-This option specifies the color to use for the border of the window.
-The default is ``black.''
-.TP 8
-.B -bg \fIcolor\fP
-This option specifies the color to use for the background of the window.
-The default is ``white.''
-.TP 8
-.B -bw \fInumber\fP
-This option specifies the width in pixels of the border surrounding the window.
-.TP 8
-.B -display \fIdisplay\fP
-This option specifies the X server to contact; see \fIX(__miscmansuffix__)\fP.
-.TP 8
-.B -fg \fIcolor\fP
-This option specifies the color to use for displaying text.
-The default is
-``black.''
-.TP 8
-.B -fn \fIfont\fP
-This option specifies the font to be used for displaying normal text.
-The
-default is \fIfixed\fP.
-.TP 8
-.B -font \fIfont\fP
-This is the same as \fB-fn\fP.
-.TP 8
-.B -geometry \fIgeometry\fP
-This option specifies the preferred size and position of the VT102 window;
-see \fIX(__miscmansuffix__)\fP.
-.TP 8
-.B -iconic
-This option indicates that \fIxterm\fP should ask the window manager to
-start it as an icon rather than as the normal window.
-.TP 8
-.B -name \fIname\fP
-This option specifies the application name under which resources are to be
-obtained, rather than the default executable file name.
-\fIName\fP should not contain ``.'' or ``*'' characters.
-.TP 8
-.B -rv
-This option indicates that reverse video should be simulated by swapping
-the foreground and background colors.
-.TP 8
-.B +rv
-Disable the simulation of reverse video by swapping foreground and background
-colors.
-.TP 8
-.B -title \fIstring\fP
-This option specifies the window title string, which may be displayed by
-window managers if the user so chooses.
-The default title is the command
-line specified after the \fB-e\fP option, if any, otherwise the application
-name.
-.TP 8
-.B -xrm \fIresourcestring\fP
-This option specifies a resource string to be used.
-This is especially
-useful for setting resources that do not have separate command line options.
-.
-.
-.SH RESOURCES
-The program understands all of the core X Toolkit resource names and classes.
-Application specific resources (e.g., "\fBXTerm.\fP\fINAME\fP") follow:
-.TP 8
-.B "backarrowKeyIsErase (\fPclass\fB BackarrowKeyIsErase)"
-Tie the VTxxx \fBbackarrowKey\fP and \fBptyInitialErase\fP resources
-together by setting the DECBKM state according to whether the initial value of
-stty erase is a backspace (8) or delete (127) character.
-The default is ``false'', which disables this feature.
-.TP 8
-.B "hold (\fPclass\fB Hold)"
-If true,
-\fIxterm\fP will not immediately destroy its window when the shell command completes.
-It will wait until you use the window manager to destroy/kill the window, or
-if you use the menu entries that send a signal, e.g., HUP or KILL.
-You may scroll back, select text, etc., to perform most graphical operations.
-Resizing the display will lose data, however, since this involves interaction
-with the shell which is no longer running.
-.TP 8
-.B "hpFunctionKeys (\fPclass\fB HpFunctionKeys)"
-Specifies whether or not HP Function Key escape codes should be generated for
-function keys instead of standard escape sequences.
-See also the \fBkeyboardType\fP resource.
-.TP 8
-.B "iconGeometry (\fPclass\fB IconGeometry)"
-Specifies the preferred size and position of the application when iconified.
-It is not necessarily obeyed by all window managers.
-.TP 8
-.B "iconName (\fPclass\fB IconName)"
-Specifies the icon name.
-The default is the application name.
-.TP 8
-.B "keyboardType (\fPclass\fB KeyboardType)"
-Enables one (or none) of the various keyboard-type resources:
-\fBhpFunctionKeys\fP,
-\fBscoFunctionKeys\fP,
-\fBsunFunctionKeys\fP and
-\fBsunKeyboard\fP.
-The resource's value should be one of the corresponding strings
-hp, sco, sun or vt220.
-The individual resources are provided for legacy support;
-this resource is simpler to use.
-.TP 8
-.B "maxBufSize (\fPclass\fB MaxBufSize)"
-Specify the maximum size of the input buffer.
-The default is 32768.
-You cannot set this to a value less than the \fBminBufSize\fR resource.
-It will be increased as needed to make that value evenly divide this one.
-.IP
-On some systems you may want to increase one or both of the
-\fBmaxBufSize\fP and
-\fBminBufSize\fP resource values to achieve better performance
-if the operating system prefers larger buffer sizes.
-.TP 8
-.B "messages (\fPclass\fB Messages)"
-Specifies whether write access to the terminal is allowed initially.
-See
-.BR mesg (1).
-The default is ``true''.
-.TP 8
-.B "minBufSize (\fPclass\fB MinBufSize)"
-Specify the minimum size of the input buffer, i.e., the amount of data
-that \fIxterm\fR requests on each read.
-The default is 4096.
-You cannot set this to a value less than 64.
-.TP 8
-.B "ptyHandshake (\fPclass\fB PtyHandshake)
-If ``true'', \fIxterm\fP will perform handshaking during initialization
-to ensure that the parent and child processes update the \fButmp\fP
-and \fBstty\fP state.
-Platforms with newer pseudo-terminal interfaces do not require this feature;
-normally it is not configured.
-The default is ``true''.
-.TP 8
-.B "ptyInitialErase (\fPclass\fB PtyInitialErase)"
-If ``true'', \fIxterm\fP will use the pseudo-terminal's sense of the stty erase
-value.
-If ``false'', \fIxterm\fP will set the stty erase value to match its own
-configuration, using the \fBkb\fP string from the termcap entry as
-a reference, if available.
-In either case, the result is applied to the TERMCAP variable
-which \fIxterm\fP sets.
-The default is ``false''.
-.TP 8
-.B "sameName (\fPclass\fB SameName)"
-If the value of this resource is ``true'', \fIxterm\fP does not send
-title and icon name change requests when the request
-would have no effect: the name is not changed.
-This has the advantage
-of preventing flicker and the disadvantage of requiring an extra
-round trip to the server to find out the previous value.
-In practice
-this should never be a problem.
-The default is ``true''.
-.TP 8
-.B "scoFunctionKeys (\fPclass\fB ScoFunctionKeys)"
-Specifies whether or not SCP Function Key escape codes should be generated for
-function keys instead of standard escape sequences.
-See also the \fBkeyboardType\fP resource.
-.TP 8
-.B "sessionMgt (\fPclass\fB SessionMgt)"
-If the value of this resource is ``true'',
-\fIxterm\fP sets up session manager callbacks
-for \fBXtNdieCallback\fR and \fBXtNsaveCallback\fR.
-The default is ``true''.
-.TP 8
-.B "sunFunctionKeys (\fPclass\fB SunFunctionKeys)"
-Specifies whether or not Sun Function Key escape codes should be generated for
-function keys instead of standard escape sequences.
-See also the \fBkeyboardType\fP resource.
-.TP 8
-.B "sunKeyboard (\fPclass\fB SunKeyboard)"
-Specifies whether or not Sun/PC keyboard layout should be assumed rather
-than DEC VT220.
-This causes the keypad `+' to be mapped to `,'.
-and
-CTRL F1-F12 to F11-F20, depending on the setting of the \fBctrlFKeys\fP
-resource.
-so \fIxterm\fP emulates a DEC VT220 more accurately.
-Otherwise (the default, with \fBsunKeyboard\fP set to ``false''),
-\fIxterm\fP uses PC-style bindings for the function keys and keypad.
-.IP
-PC-style bindings
-use the Shift, Alt, Control and Meta keys as modifiers for function-keys
-and keypad
-(see the document \fIXterm Control Sequences\fP for details).
-The PC-style bindings are analogous to PCTerm, but not the same thing.
-Normally these bindings do not conflict with the use of the Meta key
-as described for the \fBeightBitInput\fP resource.
-If they do, note that the PC-style bindings are evaluated first.
-See also the \fBkeyboardType\fP resource.
-.TP 8
-.B "termName (\fPclass\fB TermName)"
-Specifies the terminal type name to be set in the TERM environment variable.
-.TP 8
-.B "title (\fPclass\fB Title)"
-Specifies a string that may be used by the window manager when displaying
-this application.
-.TP 8
-.B "toolBar (\fPclass\fB ToolBar)"
-Specifies whether or not the toolbar should be displayed.
-The default is
-``true.''
-.TP 8
-.B "ttyModes (\fPclass\fB TtyModes)"
-Specifies a string containing terminal setting keywords and the characters
-to which they may be bound.
-Allowable keywords include:
-brk,
-dsusp,
-eof,
-eol,
-eol2,
-erase,
-erase2,
-flush,
-intr,
-kill,
-lnext,
-quit,
-rprnt,
-start,
-status,
-stop,
-susp,
-swtch and
-weras.
-Control characters may be specified as ^char (e.g., ^c or ^u)
-and \fB^?\fP may be used to indicate delete (127).
-Use \fB^-\fP to denote \fIundef\fP.
-Use \fB\\034\fP to represent \fB^\\\fP, since a literal backslash in
-an X resource escapes the next character.
-.IP
-This is very useful for overriding
-the default terminal settings without having to do an \fIstty\fP every time
-an \fIxterm\fP is started.
-Note, however, that the stty program on a given host may use different
-keywords; \fIxterm\fR's table is built-in.
-.TP 8
-.B "useInsertMode (\fPclass\fB UseInsertMode)"
-Force use of insert mode by adding appropriate entries to the TERMCAP
-environment variable.
-This is useful if the system termcap is broken.
-The default is ``false.''
-.TP 8
-.B "utmpDisplayId (\fPclass\fB UtmpDisplayId)"
-Specifies whether or not \fIxterm\fP should try to record the display
-identifier (display number and screen number) as well as the hostname in
-the system \fIutmp\fP log file.
-The default is ``true.''
-.TP 8
-.B "utmpInhibit (\fPclass\fB UtmpInhibit)"
-Specifies whether or not \fIxterm\fP should try to record the user's terminal
-in
-the system \fIutmp\fP log file.
-If true, \fIxterm\fP will not try.
-The default is ``false.''
-.TP 8
-.B "waitForMap (\fPclass\fB WaitForMap)"
-Specifies whether or not \fIxterm\fP should wait for the initial window map
-before starting the subprocess.
-The default is ``false.''
-.TP 8
-.B "zIconBeep (\fPclass\fB ZIconBeep)"
-Same as -ziconbeep command line argument.
-If the value of this resource is non-zero, xterms that produce output
-while iconified will cause an XBell sound at the given volume
-and have "***" prepended to their icon titles.
-Most window managers will detect this change immediately, showing you
-which window has the output.
-(A similar feature was in x10 \fIxterm\fR.)
-The default is ``false.''
-.
-.PP
-The following resources are specified as part
-of the \fIvt100\fP widget (class \fIVT100\fP):
-These are specified by patterns such as "\fBXTerm.vt100.\fP\fINAME\fP":
-.TP 8
-.B "activeIcon (\fPclass\fB ActiveIcon)"
-Specifies whether or not active icon windows are to be used when the
-\fIxterm\fP window is iconified, if this feature is compiled into \fIxterm\fR.
-The active icon is a miniature representation of the content of the
-window and will update as the content changes.
-Not all window managers
-necessarily support application icon windows.
-Some window managers
-will allow you to enter keystrokes into the active icon window.
-The default is ``false.''
-.TP 8
-.B "allowC1Printable (\fPclass\fB AllowC1Printable)"
-If true, overrides the mapping of C1 controls
-(codes 128-159) to make them be treated
-as if they were printable characters.
-Although this corresponds to no particular standard,
-some users insist it is a VT100.
-The default is ``false.''
-.TP 8
-.B "allowSendEvents (\fPclass\fB AllowSendEvents)"
-Specifies whether or not synthetic key and button events (generated using
-the X protocol SendEvent request) should be interpreted or discarded.
-The default is ``false'' meaning they are discarded.
-Note that allowing
-such events creates a very large security hole.
-The default is ``false.''
-.TP
-.B "allowWindowOps (\fPclass\fB AllowWindowOps)"
-Specifies whether extended window control sequences (as used in dtterm)
-for should be allowed.
-The default is ``true.''
-.TP 8
-.B "alwaysHighlight (\fPclass\fB AlwaysHighlight)"
-Specifies whether or not \fIxterm\fP should always display a highlighted
-text cursor.
-By default (if this resource is false),
-a hollow text cursor is displayed whenever the
-pointer moves out of the window or the window loses the input focus.
-The default is ``false.''
-.TP 8
-.B "alwaysUseMods (\fPclass\fB AlwaysUseMods)"
-Override the \fBnumLock\fP resource, telling \fIxterm\fR to use the Alt and Meta
-modifiers to construct parameters for function key sequences even if
-those modifiers appear in the translations resource.
-The default is ``false.''
-.TP 8
-.B "answerbackString (\fPclass\fB AnswerbackString)"
-Specifies the string that \fIxterm\fR sends in response to an ENQ (control/E)
-character from the host.
-The default is a blank string, i.e., ``''.
-A hardware VT100 implements this feature as a setup option.
-.TP 8
-.B "appcursorDefault (\fPclass\fB AppcursorDefault)"
-If ``true,'' the cursor keys are initially in application mode.
-This is the same as the VT102 private DECCKM mode,
-The default is ``false.''
-.TP 8
-.B "appkeypadDefault (\fPclass\fB AppkeypadDefault)"
-If ``true,'' the keypad keys are initially in application mode.
-The default is ``false.''
-.TP 8
-.B "autoWrap (\fPclass\fB AutoWrap)"
-Specifies whether or not auto-wraparound should be enabled.
-This is the same as the VT102 DECAWM.
-The
-default is ``true.''
-.TP 8
-.B "awaitInput (\fPclass\fB AwaitInput)"
-Specifies whether or not the \fIxterm\fR uses a 50 millisecond timeout to
-await input (i.e., to support the Xaw3d arrow scrollbar).
-The default is ``false.''
-.TP 8
-.B "backarrowKey (\fPclass\fB BackarrowKey)"
-Specifies whether the backarrow key transmits
-a backspace (8)
-or delete (127) character.
-This corresponds to the DECBKM control sequence.
-The default (backspace) is ``true.''
-Pressing the control key toggles this behavior.
-.TP 8
-.B "background (\fPclass\fB Background)"
-Specifies the color to use for the background of the window.
-The default is
-``white.''
-.TP 8
-.B "bellOnReset (\fPclass\fB BellOnReset)"
-Specifies whether to sound a bell when doing a hard reset.
-The default is ``true.''
-.TP 8
-.B "bellSuppressTime (\fPclass\fB BellSuppressTime)"
-Number of milliseconds after a bell command is sent during which additional
-bells will be suppressed.
-Default is 200.
-If set non-zero,
-additional bells
-will also be suppressed until the server reports that processing of
-the first bell has been completed; this feature is most useful with
-the visible bell.
-.TP 8
-.B "boldColors (\fPclass\fB ColorMode)"
-Specifies whether to combine bold attribute with colors like the IBM PC,
-i.e., map colors 0 through 7 to colors 8 through 15.
-These normally are the brighter versions of the first 8 colors, hence bold.
-The default is ``true.''
-.TP 8
-.B "boldFont (\fPclass\fB BoldFont)"
-Specifies the name of the bold font to use instead of overstriking.
-There is no default for this resource.
-.TP 8
-.B "boldMode (\fPclass\fB BoldMode)"
-This specifies whether or not text with the bold attribute should be
-overstruck to simulate bold fonts if the resolved bold font is the
-same as the normal font.
-It may be desirable to disable bold fonts when color is being
-used for the bold attribute.
-Note that \fIxterm\fP has one bold font which you may set explicitly.
-It attempts to match a bold font for the other font selections
-(\fBfont1\fP through \fBfont6\fP).
-If the normal and bold fonts are distinct, this resource has no effect.
-The default is ``true.''
-.IP
-Although \fIxterm\fP attempts to match a bold font for other font selections,
-the font server may not cooperate.
-Since X11R6, bitmap fonts have been scaled.
-The font server claims to provide the bold font that \fIxterm\fP requests,
-but the result is not always readable.
-XFree86 provides a feature which can be used to suppress the scaling.
-In the X server's configuration file (e.g., "/etc/X11/XFree86"), you
-can add ":unscaled" to the end of the directory specification for the
-"misc" fonts, which comprise the fixed-pitch fonts that are used by \fIxterm\fP.
-For example
-.RS
- FontPath "/usr/lib/X11/fonts/misc/"
-.RE
-.IP
-would become
-.RS
- FontPath "/usr/lib/X11/fonts/misc/:unscaled"
-.RE
-.IP
-Depending on your configuration, the font server may have its own configuration
-file.
-The same ":unscaled" can be added to its configuration file at the
-end of the directory specification for "misc".
-.TP 8
-.B "brokenLinuxOSC (\fPclass\fB BrokenLinuxOSC)"
-If true, \fIxterm\fP applies a workaround to ignore malformed control
-sequences that a Linux script might send.
-Compare the palette control sequences documented in \fIconsole_codes\fR
-with ECMA-48.
-The default is ``true.''
-.TP 8
-.B "brokenSelections (\fPclass\fB BrokenSelections)"
-If true, \fIxterm\fP in 8-bit mode will interpret
-.B STRING
-selections as carrying text in the current locale's encoding.
-Normally
-.B STRING
-selections carry ISO-8859-1 encoded text.
-Setting this resource to
-``true'' violates the ICCCM; it may, however, be useful for interacting
-with some broken X clients.
-The default is ``false.''
-.TP 8
-.B "brokenStringTerm (\fPclass\fB BrokenStringTerm)"
-provides a work-around for some ISDN routers which start an application
-control string without completing it.
-Set this to ``true'' if \fIxterm\fP appears to freeze when connecting.
-The default is ``false.''
-.TP 8
-.B "c132 (\fPclass\fB C132)"
-Specifies whether or not the VT102 DECCOLM escape sequence,
-used to switch between 80 and 132 columns, should be honored.
-The default is ``false.''
-.TP 8
-.B "cacheDoublesize (\fPclass\fB CacheDoublesize)"
-Specifies the maximum number of double-sized fonts which are cached by
-\fIxterm\fR.
-The default (8) may be too large for some X terminals with limited memory.
-Set this to zero to disable doublesize fonts altogether.
-.TP 8
-.B "charClass (\fPclass\fB CharClass)"
-Specifies comma-separated lists of character class bindings of the form
-[\fIlow\fP-]\fIhigh\fP:\fIvalue\fP.
-These are used in determining which
-sets of characters should be treated the same when doing cut and paste.
-See the CHARACTER CLASSES section.
-.TP 8
-.B "cjkWidth (\fPclass\fB CjkWidth)"
-Specifies whether \fIxterm\fP should follow
-the traditional East Asian width convention.
-When turned on, characters with East Asian Ambiguous (A) category in UTR
-11 have a column width of 2.
-You may have to set this option to ``true''
-if you have some old East Asian terminal based programs that assume that
-line-drawing characters have a column width of 2.
-The default is ``false.''
-.TP 8
-.B "color0 (\fPclass\fB Color0)"
-.TP 8
-.B "color1 (\fPclass\fB Color1)"
-.TP 8
-.B "color2 (\fPclass\fB Color2)"
-.TP 8
-.B "color3 (\fPclass\fB Color3)"
-.TP 8
-.B "color4 (\fPclass\fB Color4)"
-.TP 8
-.B "color5 (\fPclass\fB Color5)"
-.TP 8
-.B "color6 (\fPclass\fB Color6)"
-.TP 8
-.B "color7 (\fPclass\fB Color7)"
-These specify the colors for the ISO 6429 extension.
-The defaults are,
-respectively,
-black,
-red3,
-green3,
-yellow3,
-a customizable dark blue,
-magenta3,
-cyan3,
-and
-gray90.
-The default shades of color are chosen to allow the colors 8-15
-to be used as brighter versions.
-.TP 8
-.B "color8 (\fPclass\fB Color8)"
-.TP 8
-.B "color9 (\fPclass\fB Color9)"
-.TP 8
-.B "color10 (\fPclass\fB Color10)"
-.TP 8
-.B "color11 (\fPclass\fB Color11)"
-.TP 8
-.B "color12 (\fPclass\fB Color12)"
-.TP 8
-.B "color13 (\fPclass\fB Color13)"
-.TP 8
-.B "color14 (\fPclass\fB Color14)"
-.TP 8
-.B "color15 (\fPclass\fB Color15)"
-These specify the colors for the ISO 6429 extension if the bold attribute
-is also enabled.
-The default resource values are respectively,
-gray30,
-red,
-green,
-yellow,
-a customizable light blue,
-magenta,
-cyan,
-and
-white.
-.TP 8
-.B "color16 (\fPclass\fB Color16)"
-.TP 8
-through
-.TP 8
-.B "color255 (\fPclass\fB Color255)"
-These specify the colors for the 256-color extension.
-The default resource values
-are for colors 16 through 231 to make a 6x6x6 color cube, and colors
-232 through 255 to make a grayscale ramp.
-.TP 8
-.B "colorAttrMode (\fPclass\fB ColorAttrMode)"
-Specifies whether \fBcolorBD\fP, \fBcolorBL\fP, \fBcolorRV\fP, and
-\fBcolorUL\fP should override ANSI colors.
-If not, these are displayed only when no ANSI colors
-have been set for the corresponding position.
-The default is ``false.''
-.TP 8
-.B "colorBD (\fPclass\fB ColorBD)"
-This specifies the color to use to display bold characters if
-the ``colorBDMode'' resource is enabled.
-The default is ``XtDefaultForeground.''
-.TP 8
-.B "colorBDMode (\fPclass\fB ColorAttrMode)"
-Specifies whether characters with the bold attribute should be displayed in
-color or as bold characters.
-Note that setting \fBcolorMode\fR off disables
-all colors, including bold.
-The default is ``false.''
-.TP 8
-.B "colorBL (\fPclass\fB ColorBL)"
-This specifies the color to use to display blink characters if
-the ``colorBLMode'' resource is enabled.
-The default is ``XtDefaultForeground.''
-.TP 8
-.B "colorBLMode (\fPclass\fB ColorAttrMode)"
-Specifies whether characters with the blink attribute should be displayed in
-color.
-Note that setting \fBcolorMode\fR off disables all colors, including this.
-The default is ``false.''
-.TP 8
-.B "colorMode (\fPclass\fB ColorMode)"
-Specifies whether or not recognition of ANSI (ISO 6429)
-color change escape sequences should be enabled.
-The default is ``true.''
-.TP 8
-.B "colorRV (\fPclass\fB ColorRV)"
-This specifies the color to use to display reverse characters if
-the ``colorRVMode'' resource is enabled.
-The default is ``XtDefaultForeground.''
-.TP 8
-.B "colorRVMode (\fPclass\fB ColorAttrMode)"
-Specifies whether characters with the reverse attribute should be displayed in
-color.
-Note that setting \fBcolorMode\fR off disables all colors, including this.
-The default is ``false.''
-.TP 8
-.B "colorUL (\fPclass\fB ColorUL)"
-This specifies the color to use to display underlined characters if
-the ``colorULMode'' resource is enabled.
-The default is ``XtDefaultForeground.''
-.TP 8
-.B "colorULMode (\fPclass\fB ColorAttrMode)"
-Specifies whether characters with the underline attribute should be displayed
-in color or as underlined characters.
-Note that setting \fBcolorMode\fR off
-disables all colors, including underlining.
-The default is ``false.''
-.TP 8
-.B "ctrlFKeys (\fPclass\fB CtrlFKeys)"
-In VT220 keyboard mode (see \fBsunKeyboard\fP resource),
-specifies the amount by which to shift F1-F12 given a control modifier (CTRL).
-This allows you to generate key symbols for F10-F20 on a Sun/PC keyboard.
-The default is ``10'', which means that CTRL F1 generates the key
-symbol for F11.
-.TP 8
-.B "curses (\fPclass\fB Curses)"
-Specifies whether or not the last column bug in
-.IR more (1)
-should be worked around.
-See the \fB-cu\fP option for details.
-The default is ``false.''
-.TP 8
-.B "cursorBlink (\fPclass\fB CursorBlink)"
-Specifies whether to make the cursor blink.
-The default is ``false.''
-.TP 8
-.B "cursorColor (\fPclass\fB CursorColor)"
-Specifies the color to use for the text cursor.
-The default is ``black.''
-.TP 8
-.B "cursorOffTime (\fPclass\fB CursorOffTime)"
-Specifies the duration of the "off" part of the cursor blink cycle-time
-in milliseconds.
-The same timer is used for text blinking.
-The default is 300.
-.TP 8
-.B "cursorOnTime (\fPclass\fB CursorOnTime)"
-Specifies the duration of the "on" part of the cursor blink cycle-time,
-in milliseconds.
-The same timer is used for text blinking.
-The default is 600.
-.TP 8
-.B "cutNewline (\fPclass\fB CutNewline)"
-If ``false'', triple clicking to select a line does not include the Newline
-at the end of the line.
-If ``true'', the Newline is selected.
-The default is ``true.''
-.TP 8
-.B "cutToBeginningOfLine (\fPclass\fB CutToBeginningOfLine)"
-If ``false'', triple clicking to select a line selects only from the
-current word forward.
-If ``true'', the entire line is selected.
-The default is ``true.''
-.TP 8
-.B "decTerminalID (\fPclass\fB DecTerminalID)"
-Specifies the emulation level (100=VT100, 220=VT220, etc.), used to determine
-the type of response to a DA control sequence.
-Leading non-digit characters are ignored, e.g., "vt100" and "100" are the same.
-The default is 100.
-.TP 8
-.B "deleteIsDEL (\fPclass\fB DeleteIsDEL)"
-Specifies whether the Delete key on the editing keypad should send DEL (127)
-or the VT220-style Remove escape sequence.
-The default is ``false,'' for the latter.
-.TP 8
-.B "dynamicColors (\fPclass\fB DynamicColors)"
-Specifies whether or not escape sequences to change colors assigned to
-different attributes are recognized.
-.TP 8
-.B "eightBitControl (\fPclass\fB EightBitControl\fP)"
-Specifies whether or not control sequences sent by the
-terminal should be eight-bit characters or escape sequences.
-The default is ``false.''
-.TP 8
-.B "eightBitInput (\fPclass\fB EightBitInput\fP)"
-If ``true'', Meta characters
-(a single-byte character combined with the \fIkeys\fP modifier key)
-input from the keyboard are presented as a
-single character with the eighth bit turned on.
-The terminal is put into 8-bit mode.
-If ``false'', Meta characters are converted into a two-character
-sequence with the character itself preceded by ESC.
-On startup, \fIxterm\fP tries to put the terminal into 7-bit mode.
-The \fBmetaSendsEscape\fP resource may override this.
-The default is ``true.''
-.IP
-Generally keyboards do not have a key labeled "Meta",
-but "Alt" keys are common, and they are conventionally used for "Meta".
-If they were synonymous, it would have been reasonable to name this
-resource "altSendsEscape", reversing its sense.
-For more background on this, see the \fBmeta\fP function in curses.
-.IP
-Note that the \fIAlt\fP key is not necessarily the same as the
-\fIMeta\fP modifier.
-\fIxmodmap\fP lists your key modifiers.
-X defines modifiers for shift, (caps) lock and control,
-as well as 5 additional modifiers which are generally used to configure
-key modifiers.
-\fIxterm\fP inspects the same information to find the modifier associated
-with either \fIMeta\fP key (left or right),
-and uses that key as the \fIMeta\fP modifier.
-It also looks for the NumLock key,
-to recognize the modifier which is associated with that.
-.IP
-If your \fIxmodmap\fP configuration
-uses the same keycodes for Alt- and Meta-keys,
-\fIxterm\fP will only see the Alt-key definitions, since those are tested
-before Meta-keys.
-NumLock is tested first.
-It is important to keep these keys distinct;
-otherwise some of \fIxterm\fP's functionality is not available.
-.TP 8
-.B "eightBitOutput (\fPclass\fB EightBitOutput\fP)"
-Specifies whether or not eight-bit characters sent from the host should be
-accepted as is or stripped when printed.
-The default is ``true,''
-which means that they are accepted as is.
-.TP 8
-.B "faceName (\fPclass\fB FaceName)"
-Specify the pattern for fonts selected from the FreeType
-library if support for that library was compiled into \fIxterm\fR.
-There is no default.
-If not specified,
-or if there is no match for both normal and bold fonts,
-\fIxterm\fR uses the \fBfont\fP and related resources.
-.TP 8
-.B "faceNameDoublesize (\fPclass\fB FaceNameDoublesize)"
-Specify an double-width font for cases where an application requires
-this, e.g., in CJK applications.
-There is no default.
-If the application uses double-wide characters and this resource is not given,
-\fIxterm\fP will use a scaled version of the font given by \fBfaceName\fP.
-.TP 8
-.B "faceSize (\fPclass\fB FaceSize)"
-Specify the pointsize for fonts selected from the FreeType
-library if support for that library was compiled into \fIxterm\fR.
-The default is ``14.''
-.TP 8
-.B "font (\fPclass\fB Font)"
-Specifies the name of the normal font.
-The default is ``fixed.''
-.IP
-See the discussion of the \fBlocale\fP resource,
-which describes how this font may be overridden.
-.IP
-NOTE: some resource files use patterns such as
-.RS
-*font: fixed
-.RE
-.IP
-which are overly broad, affecting both
-.RS
-xterm.vt100.font
-.RE
-.IP
-and
-.RS
-xterm.vt100..utf8fonts.font
-.RE
-.IP
-which is probably not what you intended.
-.TP 8
-.B "font1 (\fPclass\fB Font1)"
-Specifies the name of the first alternative font.
-.TP 8
-.B "font2 (\fPclass\fB Font2)"
-Specifies the name of the second alternative font.
-.TP 8
-.B "font3 (\fPclass\fB Font3)"
-Specifies the name of the third alternative font.
-.TP 8
-.B "font4 (\fPclass\fB Font4)"
-Specifies the name of the fourth alternative font.
-.TP 8
-.B "font5 (\fPclass\fB Font5)"
-Specifies the name of the fifth alternative font.
-.TP 8
-.B "font6 (\fPclass\fB Font6)"
-Specifies the name of the sixth alternative font.
-.TP 8
-.B "fontDoublesize (\fPclass\fB FontDoublesize)"
-Specifies whether \fIxterm\fP should attempt to use font scaling to draw
-doublesize characters.
-Some older font servers cannot do this properly, will return misleading
-font metrics.
-The default is ``true''.
-If disabled, \fIxterm\fP will simulate doublesize characters by drawing
-normal characters with spaces between them.
-.TP 8
-.B "forceBoxChars (\fPclass\fB ForceBoxChars)"
-Specifies whether \fIxterm\fP should assume the normal and bold fonts
-have VT100 line-drawing characters.
-The fixed-pitch fonts used by \fIxterm\fP
-normally have the VT100 line-drawing glyphs in cells 1-31.
-Other fixed-pitch fonts may be more attractive, but lack these glyphs.
-If ``false'', \fIxterm\fP will check for missing glyphs in cells 1-31
-and make line-drawing characters directly.
-If ``true'', \fIxterm\fP uses whatever is in cells 1-31 without checking.
-The default is ``false.''
-.TP 8
-.B "foreground (\fPclass\fB Foreground)"
-Specifies the color to use for displaying text in the window.
-Setting the
-class name instead of the instance name is an easy way to have everything
-that would normally appear in the text color change color.
-The default
-is ``black.''
-.TP 8
-.B "freeBoldBox (\fPclass\fB freeBoldBox)"
-Specifies whether \fIxterm\fP should assume the bounding boxes for
-normal and bold fonts are compatible.
-If ``false'', \fIxterm\fP compares them and will reject choices of
-bold fonts that do not match the size of the normal font.
-The default is ``false'', which means that the comparison is performed.
-.TP 8
-.B "geometry (\fPclass\fB Geometry)"
-Specifies the preferred size and position of the VT102 window.
-There is no default for this resource.
-.TP 8
-.B "highlightColor (\fPclass\fB HighlightColor)"
-Specifies the color to use for the background of selected or otherwise
-highlighted text.
-If not specified, reverse video is used.
-The default is ``XtDefaultForeground.''
-.TP 8
-.B "highlightSelection (\fPclass\fB HighlightSelection)"
-If ``false'', selecting with the mouse highlights all positions on the screen
-between the beginning of the selection and the current position.
-If ``true'', \fIxterm\fP highlights only the positions that contain text that
-can be selected.
-The default is ``false.''
-.IP
-Depending on the way your applications write to the screen, there may
-be trailing blanks on a line.
-\fIXterm\fP stores data as it is shown on the screen.
-Erasing the display changes the internal state of each cell
-so it is not considered a blank for the purpose of selection.
-Blanks written since the last erase are selectable.
-If you do not wish to have trailing blanks in a selection,
-use the \fBtrimSelection\fP resource.
-.TP 8
-.B "hpLowerleftBugCompat (\fPclass\fB HpLowerleftBugCompat)"
-Specifies whether to work around a bug in HP's \fIxdb\fP,
-which ignores termcap and always sends
-ESC F to move to the lower left corner.
-``true'' causes \fIxterm\fP to interpret ESC F as a request to move to the
-lower left corner of the screen.
-The default is ``false.''
-.TP 8
-.B "i18nSelections (\fPclass\fB I18nSelections)"
-If false, \fIxterm\fP will never request the targets
-.B COMPOUND_TEXT
-or
-.BR TEXT .
-The default is ``true.'' It may be set to false in order to work around
-ICCCM violations by other X clients.
-.TP 8
-.B "iconBorderColor (\fPclass\fB BorderColor)"
-Specifies the border color for the active icon window if this feature
-is compiled into \fIxterm\fR.
-Not all window managers will make the icon
-border visible.
-.TP 8
-.B "iconBorderWidth (\fPclass\fB BorderWidth)"
-Specifies the border width for the active icon window if this feature
-is compiled into \fIxterm\fR.
-The default is 2.
-Not all window managers will make the border visible.
-.TP 8
-.B "iconFont (\fPclass\fB IconFont)"
-Specifies the font for the miniature active icon window, if this feature
-is compiled into \fIxterm\fR.
-The default is "nil2".
-.TP 8
-.B "internalBorder (\fPclass\fB BorderWidth)"
-Specifies the number of pixels between the characters and the window border.
-The default is 2.
-.TP 8
-.B "italicULMode (\fPclass\fB ColorAttrMode)"
-Specifies whether characters with the underline attribute should be displayed
-in an italic font or as underlined characters.
-.TP 8
-.B "jumpScroll (\fPclass\fB JumpScroll)"
-Specifies whether or not jump scroll should be used.
-This corresponds to the VT102 DECSCLM private mode.
-The default is ``true.''
-.TP 8
-.B "keyboardDialect (\fPclass\fB KeyboardDialect)"
-Specifies the initial keyboard dialect, as well as the default value when
-the terminal is reset.
-The value given is the same as the final character in the control sequences
-which change character sets.
-The default is ``B'', which corresponds to US ASCII.
-.TP 8
-.B "\fIname\fP\fBKeymap\fP (class\fB \fIName\fP\fBKeymap\fP)"
-See the discussion of the \fBkeymap()\fP action.
-.TP 8
-.B "limitResize (\fPclass\fB LimitResize)"
-Limits resizing of the screen via control sequence to a given multiple of
-the display dimensions.
-The default is ``1''.
-.TP 8
-.B "locale (\fPclass\fB Locale)"
-Specifies how to use \fIluit\fR, an encoding converter between UTF-8
-and locale encodings.
-The resource value (ignoring case) may be:
-.RS
-.TP 4
-.I true
-\fIxterm\fR will use the
-encoding specified by the users' LC_CTYPE locale (i.e., LC_ALL,
-LC_CTYPE, or LANG variables) as far as possible.
-This is realized
-by always enabling UTF-8 mode and invoking \fIluit\fR in non-UTF-8
-locales.
-.TP
-.I medium
-\fIxterm\fR will follow users'
-LC_CTYPE locale only for UTF-8, east Asian, and Thai locales,
-where the encodings were not supported by conventional 8bit mode
-with changing fonts.
-For other locales, \fIxterm\fR will use conventional 8bit mode.
-.TP
-.I checkfont
-If mini-luit is compiled-in, \fIxterm\fR will check if a Unicode font has
-been specified. If so, it checks if the character encoding for the
-current locale is POSIX, Latin-1 or Latin-9, uses the appropriate
-mapping to support those with the Unicode font.
-For other encodings, \fIxterm\fR assumes that UTF-8 encoding is required.
-.TP
-.I false
-\fIxterm\fR will use conventional 8bit mode
-or UTF-8 mode according to \fButf8\fR resource or \fB-u8\fP option.
-.RE
-.IP
-Any other value, e.g., ``UTF-8'' or ``ISO8859-2'',
-is assumed to be an encoding name;
-\fIluit\fR will be invoked to support the encoding.
-The actual list of supported encodings depends on \fIluit\fR.
-The default is ``medium''.
-.IP
-Regardless of your locale and encoding,
-you need an ISO-10646-1 font to display the result.
-Your configuration may not include this font,
-or locale-support by \fIxterm\fP may not be needed.
-At startup, \fIxterm\fP uses a mechanism equivalent to
-the \fBload-vt-fonts(utf8Fonts,\ Utf8Fonts)\fP action
-to load font name subresources of the VT100 widget.
-That is,
-resource patterns such as "\fB*vt100.utf8Fonts.font\fP" will be loaded,
-and (if this resource is enabled), override the normal fonts.
-If no subresources are found,
-the normal fonts such as "\fB*vt100.font\fP", etc., are used.
-The resource files distributed with \fIxterm\fP use ISO-10646-1 fonts,
-but do not rely on them unless you are using the locale mechanism.
-.TP 8
-.B "localeFilter (\fPclass\fB LocaleFilter)"
-Specifies the file name for the encoding converter from/to locale
-encodings and UTF-8 which is used with the \fB-lc\fR option or \fBlocale\fR resource.
-The help message shown by ``xterm -help'' lists the default value,
-which depends on your system configuration.
-.TP 8
-.B "loginShell (\fPclass\fB LoginShell)"
-Specifies whether or not the shell to be run in the window should be started
-as a login shell.
-The default is ``false.''
-.TP 8
-.B "marginBell (\fPclass\fB MarginBell)"
-Specifies whether or not the bell should be rung when the user types near the
-right margin.
-The default is ``false.''
-.TP 8
-.B "metaSendsEscape (\fPclass\fB MetaSendsEscape\fP)"
-If ``true'', Meta characters
-(a character combined with the \fIMeta\fP modifier key)
-are converted into a two-character
-sequence with the character itself preceded by ESC.
-This applies as well to function key control sequences, unless \fIxterm\fP
-sees that \fBMeta\fP is used in your key translations.
-If ``false'', Meta characters input from the keyboard are handled according
-to the \fBeightBitInput\fP resource.
-The default is ``false.''
-.TP 8
-.B "mkWidth (\fPclass\fB MkWidth)"
-Specifies whether \fIxterm\fP should use a built-in version of the wide
-character width calculation.
-The default is ``false.''
-.TP 8
-.B "modifyCursorKeys (\fPclass\fB ModifyCursorKeys\fP)"
-Tells how to handle the special case where
-Control-, Shift-, Alt- or Meta-modifiers are used to add a parameter to
-the escape sequence returned by a cursor-key.
-Set it to 0 to use the old/obsolete behavior.
-Set it to 1 to prefix modified sequences with CSI.
-Set it to 2 to force the modifier to be the second parameter.
-Set it to 3 to mark the sequence with a '>' to hint that it is private.
-The default is ``2''.
-.TP 8
-.B "multiClickTime (\fPclass\fB MultiClickTime)"
-Specifies the maximum time in milliseconds between multi-click select
-events.
-The default is 250 milliseconds.
-.TP 8
-.B "multiScroll (\fPclass\fB MultiScroll)"
-Specifies whether or not scrolling should be done asynchronously.
-The default is ``false.''
-.TP 8
-.B "nMarginBell (\fPclass\fB Column)"
-Specifies the number of characters from the right margin at which the margin
-bell should be rung, when enabled.
-.TP 8
-.B "numLock (\fPclass\fB NumLock)"
-If ``true'', \fIxterm\fR checks if NumLock is used as a modifier (see \fIxmodmap\fP(1)).
-If so, this modifier is used to simplify the logic when implementing special
-NumLock for the \fBsunKeyboard\fP resource.
-Also (when \fBsunKeyboard\fP is false), similar logic is used to find the
-modifier associated with the left and right Alt keys.
-The default is ``true.''
-.TP 8
-.B "oldXtermFKeys (\fPclass\fB OldXtermFKeys)"
-If ``true'', \fIxterm\fR will use old-style control sequences for function keys F1 to F4,
-for compatibility with X Consortium \fIxterm\fR.
-Otherwise, it uses the VT100-style
-codes for PF1 to PF4.
-The default is ``false.''
-.TP 8
-.B "pointerColor (\fPclass\fB PointerColor)"
-Specifies the foreground color of the pointer.
-The default is
-``XtDefaultForeground.''
-.TP 8
-.B "pointerColorBackground (\fPclass\fB PointerColorBackground)"
-Specifies the background color of the pointer.
-The default is
-``XtDefaultBackground.''
-.TP 8
-.B "pointerShape (\fPclass\fB Cursor)"
-Specifies the name of the shape of the pointer.
-The default is ``xterm.''
-.TP 8
-.B "popOnBell (\fPclass\fB PopOnBell)"
-Specifies whether the window whould be raised when Control-G is
-received.
-The default is ``false.''
-.TP 8
-.B "printAttributes (\fPclass\fB PrintAttributes)"
-Specifies whether to print graphic attributes along with the text.
-A real DEC VTxxx terminal will print the underline, highlighting codes
-but your printer may not handle these.
-A ``0'' disables the attributes.
-A ``1'' prints the normal set of attributes (bold, underline, inverse and blink)
-as VT100-style control sequences.
-A ``2'' prints ANSI color attributes as well.
-The default is ``1.''
-.TP 8
-.B "printerAutoClose (\fPclass\fB PrinterAutoClose)"
-If ``true'', \fIxterm\fR will close the printer (a pipe) when the application switches
-the printer offline with a Media Copy command.
-The default is ``false.''
-.TP 8
-.B "printerCommand (\fPclass\fB PrinterCommand)"
-Specifies a shell command to which
-.I xterm
-will open a pipe when the first
-MC (Media Copy) command is initiated.
-The default is a blank string.
-If the resource value is given as a blank string, the printer is disabled.
-.TP 8
-.B "printerControlMode (\fPclass\fB PrinterControlMode)"
-Specifies the printer control mode.
-A ``1'' selects autoprint mode, which causes
-.I xterm
-to print a line from the screen when you move the cursor off that
-line with a line feed, form feed or vertical tab character, or an
-autowrap occurs.
-Autoprint mode is overridden by printer controller mode (a ``2''),
-which causes all of the output to be directed to the printer.
-The default is ``0.''
-.TP 8
-.B "printerExtent (\fPclass\fB PrinterExtent)"
-Controls whether a print page function will print the entire page (true), or
-only the the portion within the scrolling margins (false).
-The default is ``false.''
-.TP 8
-.B "printerFormFeed (\fPclass\fB PrinterFormFeed)"
-Controls whether a form feed is sent to the printer at the end of a print
-page function.
-The default is ``false.''
-.TP 8
-.B "renderFont (\fPclass\fB RenderFont)"
-If \fIxterm\fR is built with the Xft library,
-this controls whether the \fBfaceName\fR resource is used.
-The default is ``true.''
-.TP 8
-.B "resizeGravity (\fPclass\fB ResizeGravity)"
-Affects the behavior when the window is resized to be taller or
-shorter.
-\fBNorthWest\fP
-specifies that the top line of text on the screen stay fixed.
-If the window
-is made shorter, lines are dropped from the bottom; if the window is
-made taller, blank lines are added at the bottom.
-This is compatible
-with the behavior in R4.
-\fBSouthWest\fP (the default) specifies that
-the bottom line of text on the screen stay fixed.
-If the window is
-made taller, additional saved lines will be scrolled down onto the
-screen; if the window is made shorter, lines will be scrolled off the
-top of the screen, and the top saved lines will be dropped.
-.TP 8
-.B "reverseVideo (\fPclass\fB ReverseVideo)"
-Specifies whether or not reverse video should be simulated.
-The default is
-``false.''
-.TP 8
-.B "reverseWrap (\fPclass\fB ReverseWrap)"
-Specifies whether or not reverse-wraparound should be enabled.
-This corresponds to \fIxterm\fP's private mode 45.
-The default is
-``false.''
-.TP 8
-.B "rightScrollBar (\fPclass\fB RightScrollBar)"
-Specifies whether or not the scrollbar should be displayed on the right
-rather than the left.
-The default is ``false.''
-.TP 8
-.B "saveLines (\fPclass\fB SaveLines)"
-Specifies the number of lines to save beyond the top of the screen when a
-scrollbar is turned on.
-The default is 64.
-.TP 8
-.B "scrollBar (\fPclass\fB ScrollBar)"
-Specifies whether or not the scrollbar should be displayed.
-The default is
-``false.''
-.TP 8
-.B "scrollBarBorder (\fPclass\fB ScrollBarBorder)"
-Specifies the width of the scrollbar border.
-Note that this is drawn to overlap the border of the \fIxterm\fP window.
-Modifying the scrollbar's border affects only the line between the VT100
-widget and the scrollbar.
-The default value is 1.
-.TP 8
-.B "scrollKey (\fPclass\fB ScrollCond)"
-Specifies whether or not pressing a key should automatically cause the
-scrollbar to go to the bottom of the scrolling region.
-This corresponds to \fIxterm\fP's private mode 1011.
-The default is
-``false.''
-.TP 8
-.B "scrollLines (\fPclass\fB ScrollLines)"
-Specifies the number of lines that the \fIscroll-back\fP and
-\fIscroll-forw\fP actions should use as a default.
-The default value is 1.
-.TP 8
-.B "scrollTtyOutput (\fPclass\fB ScrollCond)"
-Specifies whether or not output to the terminal should automatically cause
-the scrollbar to go to the bottom of the scrolling region.
-The default is ``true.''
-.TP 8
-.B "shiftFonts (\fPclass\fB ShiftFonts)"
-Specifies whether to enable the actions
-\fBlarger-vt-font()\fP and
-\fBsmaller-vt-font()\fP, which are normally bound to
-the shifted KP_Add and KP_Subtract.
-The default is ``true.''
-.TP 8
-.B "showBlinkAsBold (\fPclass\fB ShowBlinkAsBold)"
-Tells \fIxterm\fP whether to display text with blink-attribute the same
-as bold.
-If \fIxterm\fP has not been configured to support blinking text,
-the default is ``true.'', which corresponds to older versions of \fIxterm\fP,
-otherwise the default is ``false.''
-.TP 8
-.B "showMissingGlyphs (\fPclass\fB ShowMissingGlyphs)"
-Tells \fIxterm\fP whether to display a box outlining places where
-a character has been used that the font does not represent.
-The default is ``false.''
-.TP 8
-.B "signalInhibit (\fPclass\fB SignalInhibit)"
-Specifies whether or not the entries in the ``Main Options'' menu for sending
-signals to \fIxterm\fP should be disallowed.
-The default is ``false.''
-.TP 8
-.B "tekGeometry (\fPclass\fB Geometry)"
-Specifies the preferred size and position of the Tektronix window.
-There is no default for this resource.
-.TP 8
-.B "tekInhibit (\fPclass\fB TekInhibit)"
-Specifies whether or not
-the escape sequence to enter
-Tektronix mode should be ignored.
-The default is
-``false.''
-.TP 8
-.B "tekSmall (\fPclass\fB TekSmall)"
-Specifies whether or not the Tektronix mode window should start in its smallest
-size if no explicit geometry is given.
-This is useful when running \fIxterm\fP
-on displays with small screens.
-The default is ``false.''
-.TP 8
-.B "tekStartup (\fPclass\fB TekStartup)"
-Specifies whether or not \fIxterm\fP should start up in Tektronix mode.
-The default is ``false.''
-.TP 8
-.B "tiXtraScroll (\fPclass\fB TiXtraScroll)"
-Specifies whether \fIxterm\fP should scroll to a new page when processing
-the \fIti\fP termcap entry, i.e., the private modes 47, 1047 or 1049.
-This is only in effect if \fBtiteInhibit\fP is ``true'',
-because the intent of this option is to provide a picture of the full-screen
-application's display on the scrollback without wiping out the text that
-would be shown before the application was initialized.
-The default for this resource is ``false.''
-.TP 8
-.B "titeInhibit (\fPclass\fB TiteInhibit)"
-Specifies whether or not \fIxterm\fP should remove \fIti\fP and \fIte\fP
-termcap entries (used to switch between alternate screens on startup of many
-screen-oriented programs) from the TERMCAP string.
-If set,
-\fIxterm\fP also ignores the escape sequence to switch to the
-alternate screen.
-\fIXterm\fP supports terminfo in a different way, supporting composite control
-sequences (also known as private modes) 1047, 1048 and 1049 which have the same
-effect as the original 47 control sequence.
-The default for this resource is ``false.''
-.TP 8
-.B "translations (\fPclass\fB Translations)"
-Specifies the key and button bindings for menus, selections, ``programmed
-strings,'' etc.
-The \fBtranslations\fP resource,
-which provides much of \fIxterm\fP's configurability,
-is a feature of the X Toolkit Intrinsics library (Xt).
-See the \fBACTIONS\fP section.
-.TP 8
-.B "trimSelection (\fPclass\fB TrimSelection)"
-If you set \fBhighlightSelection\fP,
-you can see the text which is selected, including any trailing spaces.
-Clearing the screen (or a line) resets it to a state containing no spaces.
-Some lines may contain trailing spaces when an application writes them to
-the screen.
-However, you may not wish to paste lines with trailing spaces.
-If this resource is true, \fIxterm\fP will trim trailing spaces from
-text which is selected.
-It does not affect spaces which result in a wrapped line, nor will it
-trim the trailing newline from your selection.
-The default is ``false.''
-.TP 8
-.B "underLine (\fPclass\fB UnderLine)"
-This specifies whether or not text with the underline attribute should be
-underlined.
-It may be desirable to disable underlining when color is being
-used for the underline attribute.
-The default is ``true.''
-.TP 8
-.B "utf8 (\fPclass\fB Utf8)"
-This specifies whether \fIxterm\fP will run in UTF-8 mode.
-If you set this resource, \fIxterm\fP also sets the \fBwideChars\fP resource as a side-effect.
-The resource is an integer, expected to range from 0 to 3:
-.RS
-.TP
-0
-UTF-8 mode is initially off.
-The command-line option \fB+u8\fP sets the resource to this value.
-Escape sequences for turning UTF-8 mode on/off are allowed.
-.TP
-1
-UTF-8 mode is initially on.
-Escape sequences for turning UTF-8 mode on/off are allowed.
-.TP
-2
-The command-line option \fB-u8\fP sets the resource to this value.
-Escape sequences for turning UTF-8 mode on/off are ignored.
-.TP
-3
-This is the default value of the resource.
-It is changed during initialization depending on
-whether the \fBlocale\fP resource was set, to 0 or 2.
-See the \fBlocale\fR resource for additional discussion of non-UTF-8 locales.
-.RE
-.IP
-If you want to set the value of \fButf8\fP, it should be in this range.
-Other nonzero values are treated the same as ``1'',
-i.e., UTF-8 mode is initially on, and
-escape sequences for turning UTF-8 mode on/off are allowed.
-.TP 8
-.B "utf8Fonts (\fPclass\fB Utf8Fonts)"
-See the discussion of the \fBlocale\fP resource.
-.TP 8
-.B "veryBoldColors (\fPclass\fB VeryBoldColors)"
-Specifies whether to combine video attributes with colors specified by
-\fBcolorBD\fR, \fBcolorBL\fR, \fBcolorRV\fR and \fBcolorUL\fR.
-The resource value is the sum of values for each attribute:
-.RS 10
-.nf
-1 for reverse,
-2 for underline,
-4 for bold and
-8 for blink.
-.fi
-.RE
-.IP
-The default is ``0.''
-.TP 8
-.B "visualBell (\fPclass\fB VisualBell)"
-Specifies whether or not a visible bell (i.e., flashing) should be used instead
-of an audible bell when Control-G is received.
-The default is ``false.''
-.TP 8
-.B "visualBellDelay (\fPclass\fB VisualBellDelay)"
-Number of milliseconds to delay when displaying a visual bell.
-Default is 100.
-If set to zero, no visual bell is displayed.
-This is useful for very slow displays, e.g., an LCD display on a laptop.
-.TP 8
-.B "vt100Graphics (\fPclass\fB VT100Graphics)"
-This specifies whether \fIxterm\fP will interpret VT100 graphic character
-escape sequences while in UTF-8 mode.
-The default is ``true'', to provide support for various legacy applications.
-.TP 8
-.B "wideBoldFont (\fPclass\fB WideBoldFont)"
-This option specifies the font to be used for displaying bold wide text.
-By default,
-it will attempt to use a font twice as wide as the font that will be used to
-draw bold text.
-If no doublewidth font is found, it will improvise, by stretching
-the bold font.
-.TP 8
-.B "wideChars (\fPclass\fB WideChars)"
-Specifies if \fIxterm\fP should respond to control sequences that
-process 16-bit characters.
-The default is ``false.''
-.TP 8
-.B "wideFont (\fPclass\fB WideFont)"
-This option specifies the font to be used for displaying wide text.
-By default,
-it will attempt to use a font twice as wide as the font that will be used to
-draw normal text.
-If no doublewidth font is found, it will improvise, by stretching
-the normal font.
-.TP 8
-.B "ximFont (\fPclass\fB XimFont)"
-This option specifies the font to be used for displaying the preedit string
-in the "OverTheSpot" input method.
-.IP
-In "OverTheSpot" preedit type, the preedit (preconversion)
-string is displayed at the position of the cursor.
-It is the XIM server's responsibility to display the preedit string.
-The XIM client must inform the XIM server of the cursor position.
-For best results, the preedit string must be displayed with a proper font.
-Therefore, \fIxterm\fP informs the XIM server of the proper font.
-The font is be supplied by a "fontset", whose default value is "*".
-This matches every font, the X library automatically chooses fonts with
-proper charsets.
-The \fBximFont\fP resource is provided to override this default font setting.
-.
-.PP
-The following resources are specified
-as part of the \fItek4014\fP widget (class \fITek4014\fP).
-These are specified by patterns such as "\fBXTerm.tek4014.\fP\fINAME\fP":
-.TP 8
-.B "font2 (\fPclass\fB Font)"
-Specifies font number 2 to use in the Tektronix window.
-.TP 8
-.B "font3 (\fPclass\fB Font)"
-Specifies font number 3 to use in the Tektronix window.
-.TP 8
-.B "fontLarge (\fPclass\fB Font)"
-Specifies the large font to use in the Tektronix window.
-.TP 8
-.B "fontSmall (\fPclass\fB Font)"
-Specifies the small font to use in the Tektronix window.
-.TP 8
-.B "ginTerminator (\fPclass\fB GinTerminator)"
-Specifies what character(s) should follow a GIN report or status report.
-The possibilities are ``none,'' which sends no terminating characters,
-``CRonly,'' which sends CR, and ``CR&EOT,'' which sends both CR and EOT.
-The default is ``none.''
-.TP 8
-.B "height (\fPclass\fB Height)"
-Specifies the height of the Tektronix window in pixels.
-.TP 8
-.B "initialFont (\fPclass\fB InitialFont)"
-Specifies which of the four Tektronix fonts to use initially.
-Values are the same as for the \fIset-tek-text\fP action.
-The default is ``large.''
-.TP 8
-.B "width (\fPclass\fB Width)"
-Specifies the width of the Tektronix window in pixels.
-.
-.PP
-The resources that may be specified for the various menus are described in
-the documentation for the Athena \fBSimpleMenu\fP widget.
-The name and classes
-of the entries in each of the menus are listed below.
-Resources named "\fBline\fR\fIN\fR" where \fIN\fR is a number
-are separators with class \fBSmeLine\fR.
-.
-.PP
-The \fImainMenu\fP has the following entries:
-.TP 8
-.B "toolbar (\fPclass\fB SmeBSB)"
-This entry invokes the \fBset-toolbar(toggle)\fP action.
-.TP 8
-.B "securekbd (\fPclass\fB SmeBSB)"
-This entry invokes the \fBsecure()\fP action.
-.TP 8
-.B "allowsends (\fPclass\fB SmeBSB)"
-This entry invokes the \fBallow-send-events(toggle)\fP action.
-.TP 8
-.B "redraw (\fPclass\fB SmeBSB)"
-This entry invokes the \fBredraw()\fP action.
-.TP 8
-.B "logging (\fPclass\fB SmeBSB)"
-This entry invokes the \fBlogging(toggle)\fP action.
-.TP 8
-.B "print (\fPclass\fB SmeBSB)"
-This entry invokes the \fBprint()\fP action.
-.TP 8
-.B "print-redir (\fPclass\fB SmeBSB)"
-This entry invokes the \fBprint-redir()\fP action.
-.TP 8
-.B "8-bit-control (\fPclass\fB SmeBSB)"
-This entry invokes the \fBset-8-bit-control(toggle)\fP action.
-.TP 8
-.B "backarrow\ key (\fPclass\fB SmeBSB)"
-This entry invokes the \fBset-backarrow(toggle)\fP action.
-.TP 8
-.B "num-lock (\fPclass\fB SmeBSB)"
-This entry invokes the \fBset-num-lock(toggle)\fP action.
-.TP 8
-.B "alt-esc (\fPclass\fB SmeBSB)"
-This entry invokes the \fBalt-sends-escape(toggle)\fP action.
-.TP 8
-.B "meta-esc (\fPclass\fB SmeBSB)"
-This entry invokes the \fBmeta-sends-escape(toggle)\fP action.
-.TP 8
-.B "delete-is-del (\fPclass\fB SmeBSB)"
-This entry invokes the \fBdelete-is-del(toggle)\fP action.
-.TP 8
-.B "oldFunctionKeys (\fPclass\fB SmeBSB)"
-This entry invokes the \fBold-function-keys(toggle)\fP action.
-.TP 8
-.B "hpFunctionKeys (\fPclass\fB SmeBSB)"
-This entry invokes the \fBhp-function-keys(toggle)\fP action.
-.TP 8
-.B "scoFunctionKeys (\fPclass\fB SmeBSB)"
-This entry invokes the \fBsco-function-keys(toggle)\fP action.
-.TP 8
-.B "sunFunctionKeys (\fPclass\fB SmeBSB)"
-This entry invokes the \fBsun-function-keys(toggle)\fP action.
-.TP 8
-.B "sunKeyboard (\fPclass\fB SmeBSB)"
-This entry invokes the \fBsunKeyboard(toggle)\fP action.
-.TP 8
-.B "suspend (\fPclass\fB SmeBSB)"
-This entry invokes the \fBsend-signal(tstp)\fP action on systems that
-support job control.
-.TP 8
-.B "continue (\fPclass\fB SmeBSB)"
-This entry invokes the \fBsend-signal(cont)\fP action on systems that
-support job control.
-.TP 8
-.B "interrupt (\fPclass\fB SmeBSB)"
-This entry invokes the \fBsend-signal(int)\fP action.
-.TP 8
-.B "hangup (\fPclass\fB SmeBSB)"
-This entry invokes the \fBsend-signal(hup)\fP action.
-.TP 8
-.B "terminate (\fPclass\fB SmeBSB)"
-This entry invokes the \fBsend-signal(term)\fP action.
-.TP 8
-.B "kill (\fPclass\fB SmeBSB)"
-This entry invokes the \fBsend-signal(kill)\fP action.
-.TP 8
-.B "quit (\fPclass\fB SmeBSB)"
-This entry invokes the \fBquit()\fP action.
-.
-.PP
-The \fIvtMenu\fP has the following entries:
-.TP 8
-.B "scrollbar (\fPclass\fB SmeBSB)"
-This entry invokes the \fBset-scrollbar(toggle)\fP action.
-.TP 8
-.B "jumpscroll (\fPclass\fB SmeBSB)"
-This entry invokes the \fBset-jumpscroll(toggle)\fP action.
-.TP 8
-.B "reversevideo (\fPclass\fB SmeBSB)"
-This entry invokes the \fBset-reverse-video(toggle)\fP action.
-.TP 8
-.B "autowrap (\fPclass\fB SmeBSB)"
-This entry invokes the \fBset-autowrap(toggle)\fP action.
-.TP 8
-.B "reversewrap (\fPclass\fB SmeBSB)"
-This entry invokes the \fBset-reversewrap(toggle)\fP action.
-.TP 8
-.B "autolinefeed (\fPclass\fB SmeBSB)"
-This entry invokes the \fBset-autolinefeed(toggle)\fP action.
-.TP 8
-.B "appcursor (\fPclass\fB SmeBSB)"
-This entry invokes the \fBset-appcursor(toggle)\fP action.
-.TP 8
-.B "appkeypad (\fPclass\fB SmeBSB)"
-This entry invokes the \fBset-appkeypad(toggle)\fP action.
-.TP 8
-.B "scrollkey (\fPclass\fB SmeBSB)"
-This entry invokes the \fBset-scroll-on-key(toggle)\fP action.
-.TP 8
-.B "scrollttyoutput (\fPclass\fB SmeBSB)"
-This entry invokes the \fBset-scroll-on-tty-output(toggle)\fP action.
-.TP 8
-.B "allow132 (\fPclass\fB SmeBSB)"
-This entry invokes the \fBset-allow132(toggle)\fP action.
-.TP 8
-.B "cursesemul (\fPclass\fB SmeBSB)"
-This entry invokes the \fBset-cursesemul(toggle)\fP action.
-.TP 8
-.B "visualbell (\fPclass\fB SmeBSB)"
-This entry invokes the \fBset-visualbell(toggle)\fP action.
-.TP 8
-.B "poponbell (\fPclass\fB SmeBSB)"
-This entry invokes the \fBset-poponbell(toggle)\fP action.
-.TP 8
-.B "marginbell (\fPclass\fB SmeBSB)"
-This entry invokes the \fBset-marginbell(toggle)\fP action.
-.TP 8
-.B "cursorblink (\fPclass\fB SmeBSB)"
-This entry invokes the \fBset-cursorblink(toggle)\fP action.
-.TP 8
-.B "titeInhibit (\fPclass\fB SmeBSB)"
-This entry invokes the \fBset-titeInhibit(toggle)\fP action.
-.TP 8
-.B "activeicon (\fPclass\fB SmeBSB)"
-This entry toggles active icons on and off if this feature was
-compiled into \fIxterm\fP.
-It is enabled only if \fIxterm\fP
-was started with the command line option +ai or the \fBactiveIcon\fP
-resource is set to ``True.''
-.TP 8
-.B "softreset (\fPclass\fB SmeBSB)"
-This entry invokes the \fBsoft-reset()\fP action.
-.TP 8
-.B "hardreset (\fPclass\fB SmeBSB)"
-This entry invokes the \fBhard-reset()\fP action.
-.TP 8
-.B "clearsavedlines (\fPclass\fB SmeBSB)"
-This entry invokes the \fBclear-saved-lines()\fP action.
-.TP 8
-.B "tekshow (\fPclass\fB SmeBSB)"
-This entry invokes the \fBset-visibility(tek,toggle)\fP action.
-.TP 8
-.B "tekmode (\fPclass\fB SmeBSB)"
-This entry invokes the \fBset-terminal-type(tek)\fP action.
-.TP 8
-.B "vthide (\fPclass\fB SmeBSB)"
-This entry invokes the \fBset-visibility(vt,off)\fP action.
-.TP 8
-.B "altscreen (\fPclass\fB SmeBSB)"
-This entry invokes the \fBset-altscreen(toggle)\fP action.
-.
-.PP
-The \fIfontMenu\fP has the following entries:
-.TP 8
-.B "fontdefault (\fPclass\fB SmeBSB)"
-This entry invokes the \fBset-vt-font(d)\fP action.
-.TP 8
-.B "font1 (\fPclass\fB SmeBSB)"
-This entry invokes the \fBset-vt-font(1)\fP action.
-.TP 8
-.B "font2 (\fPclass\fB SmeBSB)"
-This entry invokes the \fBset-vt-font(2)\fP action.
-.TP 8
-.B "font3 (\fPclass\fB SmeBSB)"
-This entry invokes the \fBset-vt-font(3)\fP action.
-.TP 8
-.B "font4 (\fPclass\fB SmeBSB)"
-This entry invokes the \fBset-vt-font(4)\fP action.
-.TP 8
-.B "font5 (\fPclass\fB SmeBSB)"
-This entry invokes the \fBset-vt-font(5)\fP action.
-.TP 8
-.B "font6 (\fPclass\fB SmeBSB)"
-This entry invokes the \fBset-vt-font(6)\fP action.
-.TP 8
-.B "fontescape (\fPclass\fB SmeBSB)"
-This entry invokes the \fBset-vt-font(e)\fP action.
-.TP 8
-.B "fontsel (\fPclass\fB SmeBSB)"
-This entry invokes the \fBset-vt-font(s)\fP action.
-.TP 8
-.B "font-linedrawing (\fPclass\fB SmeBSB)"
-This entry invokes the \fBset-font-linedrawing(s)\fP action.
-.TP 8
-.B "font-doublesize (\fPclass\fB SmeBSB)"
-This entry invokes the \fBset-font-doublesize(s)\fP action.
-.TP 8
-.B "render-font (\fPclass\fB SmeBSB)"
-This entry invokes the \fBset-render-font(s)\fP action.
-.TP 8
-.B "utf8-mode (\fPclass\fB SmeBSB)"
-This entry invokes the \fBset-utf8-mode(s)\fP action.
-.
-.PP
-The \fItekMenu\fP has the following entries:
-.TP 8
-.B "tektextlarge (\fPclass\fB SmeBSB)"
-This entry invokes the \fBset-tek-text(l)\fP action.
-.TP 8
-.B "tektext2 (\fPclass\fB SmeBSB)"
-This entry invokes the \fBset-tek-text(2)\fP action.
-.TP 8
-.B "tektext3 (\fPclass\fB SmeBSB)"
-This entry invokes the \fBset-tek-text(3)\fP action.
-.TP 8
-.B "tektextsmall (\fPclass\fB SmeBSB)"
-This entry invokes the \fBset-tek-text(s)\fP action.
-.TP 8
-.B "tekpage (\fPclass\fB SmeBSB)"
-This entry invokes the \fBtek-page()\fP action.
-.TP 8
-.B "tekreset (\fPclass\fB SmeBSB)"
-This entry invokes the \fBtek-reset()\fP action.
-.TP 8
-.B "tekcopy (\fPclass\fB SmeBSB)"
-This entry invokes the \fBtek-copy()\fP action.
-.TP 8
-.B "vtshow (\fPclass\fB SmeBSB)"
-This entry invokes the \fBset-visibility(vt,toggle)\fP action.
-.TP 8
-.B "vtmode (\fPclass\fB SmeBSB)"
-This entry invokes the \fBset-terminal-type(vt)\fP action.
-.TP 8
-.B "tekhide (\fPclass\fB SmeBSB)"
-This entry invokes the \fBset-visibility(tek,toggle)\fP action.
-.
-.PP
-The following resources are useful when specified for the Athena Scrollbar
-widget:
-.TP 8
-.B "thickness (\fPclass\fB Thickness)"
-Specifies the width in pixels of the scrollbar.
-.TP 8
-.B "background (\fPclass\fB Background)"
-Specifies the color to use for the background of the scrollbar.
-.TP 8
-.B "foreground (\fPclass\fB Foreground)"
-Specifies the color to use for the foreground of the scrollbar.
-The ``thumb''
-of the scrollbar is a simple checkerboard pattern alternating pixels for
-foreground and background color.
-.
-.
-.SH "POINTER USAGE"
-.
-.PP
-Once the VT102 window is created,
-.I xterm
-allows you to select text and copy it within the same or other windows.
-.
-.PP
-The selection functions are invoked when the pointer buttons are used with no
-modifiers, and when they are used with the ``shift'' key.
-The assignment of the functions described below to keys and buttons may
-be changed through the resource database; see \fBACTIONS\fP below.
-.
-.PP
-Pointer button one (usually left) is used to save text into the cut buffer.
-Move the cursor to beginning of the text,
-and then hold the button down while moving the cursor to the end of the region
-and releasing the button.
-The selected text is highlighted and is saved in the global cut buffer
-and made the PRIMARY selection when the button is released.
-Double-clicking selects by words.
-Triple-clicking
-selects by lines.
-Quadruple-clicking goes back to characters, etc.
-Multiple-click is determined by the time from button up to
-button down, so you can change the selection unit in the middle of a selection.
-Logical words and lines selected by double- or triple-clicking may wrap
-across more than one screen line if lines were wrapped by \fIxterm\fP
-itself rather than by the application running in the window.
-If the key/button bindings specify that an X selection is to be made,
-\fIxterm\fP will leave the selected text highlighted for as long as it
-is the selection owner.
-.
-.PP
-Pointer button two (usually middle) `types' (pastes) the text from
-the PRIMARY selection, if any, otherwise from
-the cut buffer,
-inserting it as keyboard input.
-.
-.PP
-Pointer button three (usually right) extends the current selection.
-(Without loss of generality,
-you can swap ``right'' and ``left'' everywhere in the rest of this
-paragraph.) If pressed while closer to
-the right edge of the selection than the left, it extends/contracts the
-right edge of the selection.
-If you contract the selection past
-the left edge of the selection,
-.I xterm
-assumes you really meant the left edge, restores the original selection, then
-extends/contracts the left edge of the selection.
-Extension starts in the
-selection unit mode
-that the last selection or extension was performed in; you can multiple-click
-to cycle through them.
-.
-.PP
-By cutting and pasting pieces of text without trailing new lines,
-you can take text from several places in different windows and form a command
-to the shell, for example, or take output from a program and insert it into
-your favorite editor.
-Since cut buffers are globally shared among different applications,
-you may regard each as a `file' whose contents you know.
-The terminal emulator and other text programs should be treating it as if it
-were a text file, i.e., the text is delimited by new lines.
-.
-.PP
-The scroll region displays the position and amount of text currently showing
-in the window (highlighted) relative to the amount of text actually saved.
-As more text is saved (up to the maximum), the size of the highlighted area
-decreases.
-.
-.PP
-Clicking button one with the pointer in the scroll region moves the
-adjacent line to the top of the display window.
-.
-.PP
-Clicking button three moves the top line of the display window down to the
-pointer position.
-.
-.PP
-Clicking button two moves the display to a position in the saved text
-that corresponds to the pointer's position in the scrollbar.
-.
-.PP
-Unlike the VT102 window, the Tektronix window does not allow the copying of
-text.
-It does allow Tektronix GIN mode, and in this mode
-the cursor will change from an arrow to a cross.
-Pressing any key will send that key and the current coordinate of the
-cross cursor.
-Pressing button one, two, or three will return the letters `l', `m', and
-`r', respectively.
-If the `shift' key is pressed when a pointer button is pressed, the corresponding
-upper case letter is sent.
-To distinguish a pointer button from a key, the high bit of the character is
-set (but this is bit is normally stripped unless the terminal mode is RAW;
-see
-.IR tty (4)
-for details).
-.
-.
-.SH MENUS
-.
-.PP
-.I Xterm
-has four menus, named
-.IR mainMenu ,
-.IR vtMenu ,
-.IR fontMenu ,
-and
-.IR tekMenu .
-Each menu pops up under the correct combinations of key and button presses.
-Each menu is divided into sections, separated by a horizontal line.
-Some menu entries correspond to modes that can be altered.
-A check mark appears next to a mode that is currently active.
-Selecting one of these modes toggles its state.
-Other menu entries are commands;
-selecting one of these performs the indicated function.
-.PP
-All of the menu entries correspond to X actions.
-In the list below, the menu label is shown followed by the action's
-name in parenthesis.
-.
-.\" ************************************************************************
-.PP
-The \fIxterm\fP \fImainMenu\fP pops up
-when the ``control'' key and pointer button one are pressed in a window.
-This menu contains items that apply to both the VT102 and Tektronix windows.
-There are several sections:
-.TP
-Commands for managing X events:
-.RS
-.TP
-Toolbar
-Clicking on the "Toolbar" menu entry hides the toolbar if it is visible,
-and shows it if it is not.
-.TP
-Secure Keyboard (securekbd)
-The
-.B Secure Keyboard
-mode is helpful when typing in passwords or other sensitive data in an
-unsecure environment;
-see \fBSECURITY\fP below (but read the limitations carefully).
-.TP
-Allow SendEvents (allowsends )
-Specifies whether or not synthetic key and button events generated using
-the X protocol SendEvent request should be interpreted or discarded.
-This corresponds to the \fBallowSendEvents\fP resource.
-.TP
-Redraw Window (redraw)
-Forces the X display to repaint;
-useful in some environments.
-.RE
-.TP
-Commands for capturing output:
-.RS
-.TP
-Log to File (logging)
-Captures text sent to the screen in a logfile,
-as in the \fB-l\fP logging option.
-.TP
-Print Window (print)
-Sends the text of the current window to the program given in the
-\fBprinterCommand\fP resource.
-.TP
-Redirect to Printer (print-redir)
-This sets the \fBprinterControlMode\fR to 0 or 2.
-You can use this to turn the printer on as if an application had sent
-the appropriate control sequence.
-It is also useful for switching the printer
-off if an application turns it on without resetting the print control mode.
-.RE
-.TP
-Modes for setting keyboard style:
-.RS
-.TP
-8-Bit Controls (8-bit-control)
-Enabled for VT220 emulation, this controls whether \fIxterm\fP will send
-8-bit control sequences rather than using 7-bit (ASCII) controls,
-e.g., sending a byte in the range 128-159 rather than the escape character
-followed by a second byte.
-\fIXterm\fP always interprets both 8-bit and 7-bit control sequences
-(see the document \fIXterm Control Sequences\fP).
-This corresponds to the \fBeightBitControl\fP resource.
-.TP
-Backarrow Key (BS/DEL) (backarrow\ key)
-Modifies the behavior of the backarrow key, making it transmit
-either a backspace (8)
-or delete (127) character.
-This corresponds to the \fBbackarrowKey\fP resource.
-.TP
-Alt/NumLock Modifiers (num-lock)
-Controls the treatment of Alt- and NumLock-key modifiers.
-This corresponds to the \fBnumLock\fP resource.
-.TP
-Meta Sends Escape (meta-esc)
-Controls whether \fIMeta\fP keys are converted into a two-character
-sequence with the character itself preceded by ESC.
-This corresponds to the \fBmetaSendsEscape\fP resource.
-.TP
-Delete is DEL (delete-is-del)
-Controls whether the Delete key on the editing keypad should send DEL (127)
-or the VT220-style Remove escape sequence.
-This corresponds to the \fBdeleteIsDEL\fP resource.
-.TP
-Old Function-Keys (oldFunctionKeys)
-.TP
-HP Function-Keys (hpFunctionKeys)
-.TP
-SCO Function-Keys (scoFunctionKeys)
-.TP
-Sun Function-Keys (sunFunctionKeys)
-.TP
-VT220 Keyboard (sunKeyboard)
-These act as a radio-button, selecting one style for the keyboard layout.
-It corresponds to more than one resource setting:
-.BR "sunKeyboard" ","
-.BR "sunFunctionKeys" ","
-.BR "scoFunctionKeys" " and"
-.BR "hpFunctionKeys "."
-.RE
-.TP
-Commands for process signalling:
-.RS
-.TP
-Send STOP Signal (suspend)
-.TP
-Send CONT Signal (continue)
-.TP
-Send INT Signal (interrupt)
-.TP
-Send HUP Signal (hangup)
-.TP
-Send TERM Signal (terminate)
-.TP
-Send KILL Signal (kill)
-These send the SIGTSTP, SIGCONT, SIGINT, SIGHUP, SIGTERM and SIGKILL
-signals respectively, to the process group of the process running under
-.I xterm
-(usually the shell).
-The
-.B SIGCONT
-function is especially useful if the user has accidentally typed CTRL-Z,
-suspending the process.
-.TP
-Quit (quit)
-Stop processing X events except to support the \fB-hold\fP option,
-and then send a SIGHUP signal to the
-the process group of the process running under
-.I xterm
-(usually the shell).
-.RE
-.PP
-.
-.\" ************************************************************************
-.PP
-The
-.I vtMenu
-sets various modes in the VT102 emulation, and is popped up when the
-``control'' key and pointer button two are pressed in the VT102 window.
-.TP
-VT102/VT220 Modes:
-.RS
-.
-.TP
-Enable Scrollbar (scrollbar)
-Enable (or disable) the scrollbar.
-This corresponds to the
-.B -sb
-option and the
-.B scrollBar
-resource.
-.
-.TP
-Enable Jump Scroll (jumpscroll)
-Enable (or disable) jump scrolling.
-This corresponds to the
-.B -j
-option and the
-.B jumpScroll
-resource.
-.
-.TP
-Enable Reverse Video (reversevideo)
-Enable (or disable) reverse-video.
-This corresponds to the
-.B -rv
-option and the
-.B reverseVideo
-resource.
-.
-.TP
-Enable Auto Wraparound (autowrap)
-Enable (or disable) auto-wraparound.
-This corresponds to the
-.B -aw
-option and the
-.B autoWrap
-resource.
-.
-.TP
-Enable Reverse Wraparound (reversewrap)
-Enable (or disable) reverse wraparound.
-This corresponds to the
-.B -rw
-option and the
-.B reverseWrap
-resource.
-.
-.TP
-Enable Auto Linefeed (autolinefeed)
-Enable (or disable) auto-linefeed.
-This is the VT102 NEL function,
-which causes the emulator to emit a linefeed after each carriage return.
-There is no corresponding command-line option or resource setting.
-.
-.TP
-Enable Application Cursor Keys (appcursor)
-Enable (or disable) application cursor keys.
-This corresponds to the
-.B appcursorDefault
-resource.
-There is no corresponding command-line option.
-.
-.TP
-Enable Application Keypad (appkeypad)
-Enable (or disable) application keypad keys.
-This corresponds to the
-.B appkeypadDefault
-resource.
-There is no corresponding command-line option.
-.
-.TP
-Scroll to Bottom on Key Press (scrollkey)
-Enable (or disable) scrolling to the bottom of the scrolling region on a keypress.
-This corresponds to the
-.B -sk
-option and the
-.B scrollKey
-resource.
-.
-.TP
-Scroll to Bottom on Tty Output (scrollttyoutput)
-Enable (or disable) scrolling to the bottom of the scrolling region on output to the terminal..
-This corresponds to the
-.B -si
-option and the
-.B scrollTtyOutput
-resource.
-.
-.TP
-Allow 80/132 Column Switching (allow132)
-Enable (or disable) switching between 80 and 132 columns.
-This corresponds to the
-.B -132
-option and the
-.B c132
-resource.
-.
-.TP
-Enable Curses Emulation (cursesemul)
-Enable (or disable) a workaround for the so-called "curses bug".
-This corresponds to the
-.B -cu
-option and the
-.B curses
-resource.
-.
-.TP
-Enable Visual Bell (visualbell)
-Enable (or disable) visible bell (i.e., flashing) instead of an audible bell.
-This corresponds to the
-.B -vb
-option and the
-.B visualBell
-resource.
-.
-.TP
-Enable Pop on Bell (poponbell)
-Enable (or disable) raising of the window when Control-G is received.
-This corresponds to the
-.B -pop
-option and the
-.B popOnBell
-resource.
-.
-.TP
-Enable Margin Bell (marginbell)
-Enable (or disable) a bell when the user types near the right margin.
-This corresponds to the
-.B -mb
-option and the
-.B marginBell
-resource.
-.
-.TP
-Enable Blinking Cursor (cursorblink)
-Enable (or disable) the blinking-cursor feature.
-This corresponds to the
-.B -bc
-option and the
-.B cursorBlink
-resource.
-There is also an escape sequence
-(see the document \fIXterm Control Sequences\fP).
-The menu entry and the escape sequence states are XOR'd:
-if both are enabled, the cursor will not blink,
-if only one is enabled, the cursor will blink.
-.
-.TP
-Enable Alternate Screen Switching (titeInhibit)
-Enable (or disable) switching between the normal and alternate screens.
-This corresponds to the
-.B titeInhibit
-resource.
-There is no corresponding command-line option.
-.
-.TP
-Enable Active Icon (activeicon)
-Enable (or disable) the active-icon feature.
-This corresponds to the
-.B -ai
-option and the
-.B activeIcon
-resource.
-.RE
-.
-.TP
-VT102/VT220 Commands:
-.RS
-.TP
-Do Soft Reset (softreset)
-Reset scroll regions.
-This can be convenient when some program has left the scroll regions
-set incorrectly (often a problem when using VMS or TOPS-20).
-This corresponds to the VT220 DECSTR control sequence.
-.
-.TP
-Do Full Reset (hardreset)
-The full reset entry will clear the screen, reset tabs to every
-eight columns, and reset the terminal modes (such as wrap and smooth scroll)
-to their initial states just after
-.I xterm
-has finished processing the command line options.
-This corresponds to the VT102 RIS control sequence,
-with a few obvious differences.
-For example, your session is not disconnected as a real VT102 would do.
-.
-.TP
-Reset and Clear Saved Lines (clearsavedlines)
-Perform a full reset,
-and also clear the saved lines.
-.RE
-.
-.TP
-Commands for setting the current screen:
-.RS
-.
-.TP
-Show Tek Window (tekshow)
-When enabled,
-pops the Tektronix 4014 window up (makes it visible).
-When disabled,
-hides the Tektronix 4014 window.
-.
-.TP
-Switch to Tek Mode (tekmode)
-When enabled,
-pops the Tektronix 4014 window up if it is not already visible,
-and switches the input stream to that window.
-When disabled,
-hides the Tektronix 4014 window and
-switches input back to the VTxxx window.
-.
-.TP
-Hide VT Window (vthide)
-When enabled,
-hides the VTxxx window,
-shows the Tektronix 4014 window if
-it was not already visible
-and switches the input stream to that window.
-When disabled,
-shows the VTxxx window,
-and switches the input stream to that window.
-.
-.TP
-Show Alternate Screen (altscreen)
-When enabled,
-shows the alternate screen.
-When disabled,
-shows the normal screen.
-Note that the normal screen may have saved lines;
-the alternate screen does not.
-.RE
-.PP
-.
-.PP
-The \fIfontMenu\fP sets the font used in the VT102 window,
-or modifies the way the font is specified or displayed.
-There are three sections.
-.PP
-The first section allows you to select the font from a set of alternatives:
-.RS
-.TP
-Default (fontdefault)
-Set the font to the default, i.e., that given by the
-.B *VT100.font
-resource.
-.TP
-Unreadable (font1)
-Set the font to that given by the
-.B *VT100.font1
-resource.
-.TP
-Tiny (font2)
-Set the font to that given by the
-.B *VT100.font2
-resource.
-.TP
-Small (font3)
-Set the font to that given by the
-.B *VT100.font3
-resource.
-.TP
-Medium (font4)
-Set the font to that given by the
-.B *VT100.font4
-resource.
-.TP
-Large (font5)
-Set the font to that given by the
-.B *VT100.font5
-resource.
-.TP
-Huge (font6)
-Set the font to that given by the
-.B *VT100.font6
-resource.
-.TP
-Escape Sequence
-This allows you to set the font last specified by the Set
-Font escape sequence (see the document \fIXterm Control Sequences\fP).
-.TP
-Selection (fontsel)
-This allows you to set the font specified
-the current selection as a font name (if the PRIMARY selection is owned).
-.RE
-.PP
-The second section allows you to modify the way it is displayed:
-.RS
-.TP
-Line-Drawing Characters (font-linedrawing)
-When set, tells \fIxterm\fP to draw its own line-drawing characters.
-Otherwise it relies on the font containing these.
-.TP
-Doublesized Characters (font-doublesize)
-When set, \fIxterm\fP may ask the font server to produce scaled versions
-of the normal font, for VT102 double-size characters.
-.RE
-.PP
-The third section allows you to modify the way it is specified:
-.RS
-.TP
-TrueType Fonts (render-font)
-If the
-.B "renderFont
-and corresponding resources were set,
-this is a further control whether \fIxterm\fP will actually use the
-Xft library calls to obtain a font.
-.TP
-UTF-8 (utf8-mode)
-This controls whether \fIxterm\fP uses UTF-8 encoding of input/output.
-It is useful for temporarily switching \fIxterm\fP to display
-text from an application which does not follow the locale settings.
-.RE
-.
-.PP
-The
-.I tekMenu
-sets various modes in the Tektronix emulation, and is popped up when the
-``control'' key and pointer button two are pressed in the Tektronix window.
-The current font size is checked in the modes section of the menu.
-.RS
-.TP
-Large Characters (tektextlarge)
-.TP
-\&#2 Size Characters (tektext2)
-.TP
-\&#3 Size Characters (tektext3)
-.TP
-Small Characters (tektextsmall)
-.RE
-.PP
-Commands:
-.RS
-.TP
-PAGE (tekpage)
-Clear the Tektronix window.
-.TP
-RESET (tekreset)
-.TP
-COPY (tekcopy)
-.RE
-.PP
-Windows:
-.RS
-.TP
-Show VT Window (vtshow)
-.TP
-Switch to VT Mode (vtmode)
-.TP
-Hide Tek Window (tekhide)
-.RE
-.
-.
-.SH SECURITY
-.
-.PP
-X environments differ in their security consciousness.
-Most servers,
-run under \fIxdm\fP,
-are capable of using a ``magic cookie'' authorization
-scheme that can provide a reasonable level of security for many people.
-If your server is only using a host-based mechanism to control access to
-the server (see \fIxhost(1)\fP), then if you enable access for a host and
-other users are also permitted to run clients on that same host,
-it is possible that someone can run an application which uses the
-basic services of the X protocol to snoop on your activities,
-potentially capturing a transcript of everything you type at the keyboard.
-Any process which has access to your X display can manipulate it
-in ways that you might not anticipate,
-even redirecting your keyboard to itself
-and sending events to your application's windows.
-This is true even with the ``magic cookie'' authorization scheme.
-While the \fBallowSendEvents\fP provides some protection against
-rogue applications tampering with your programs,
-guarding against a snooper is harder.
-.
-.PP
-The possibility of an application spying on your keystrokes
-is of particular concern when you want to type in a password
-or other sensitive data.
-The best solution to this problem is to use a better
-authorization mechanism than is provided by X.
-Given all of these caveats,
-a simple mechanism exists for protecting keyboard input in \fIxterm\fP.
-.
-.PP
-The \fIxterm\fP menu (see \fBMENUS\fP above) contains a \fBSecure Keyboard\fP
-entry which, when enabled,
-attempts to ensure that all keyboard input is directed
-\fIonly\fP to \fIxterm\fP (using the GrabKeyboard protocol request).
-When an application prompts you for a password
-(or other sensitive data), you can enable \fBSecure Keyboard\fP using the
-menu, type in the data, and then disable \fBSecure Keyboard\fP using
-the menu again.
-This ensures that you know which window is accepting your keystrokes.
-It cannot ensure that there are no processes which have access to your
-X display that might be observing the keystrokes as well.
-.
-.PP
-Only one X client at a time can grab the keyboard,
-so when you attempt to enable \fBSecure Keyboard\fP it may fail.
-In this case, the bell will sound.
-If the \fBSecure Keyboard\fP succeeds,
-the foreground and background colors will be exchanged (as if you
-selected the \fBReverse Video\fP entry in the \fBModes\fP menu);
-they will be exchanged again when you exit secure mode.
-If the colors
-do \fInot\fP switch, then
-you should be \fIvery\fP suspicious that you are being spoofed.
-If the application you are running displays a prompt before asking for
-the password, it is safest to enter secure mode \fIbefore\fP the
-prompt gets displayed, and to make sure that the prompt gets displayed
-correctly (in the new colors), to minimize the probability of
-spoofing.
-You can also bring up the menu again and make sure that a check
-mark appears next to the entry.
-.
-.PP
-\fBSecure Keyboard\fP mode will be disabled automatically if your \fIxterm\fP
-window becomes iconified (or otherwise unmapped), or if you start up
-a reparenting window manager (that places a title bar or other decoration
-around the window) while in \fBSecure Keyboard\fP mode.
-(This is a
-feature of the X protocol not easily overcome.) When this happens,
-the foreground and background colors will be switched back and the bell
-will sound in warning.
-.
-.
-.SH "CHARACTER CLASSES"
-Clicking the left mouse button twice in rapid succession will cause all
-characters of the same class (e.g., letters, white space, punctuation) to be
-selected.
-Since different people have different preferences for what should
-be selected (for example, should filenames be selected as a whole or only
-the separate subnames), the default mapping can be overridden through the use
-of the \fBcharClass\fP (class \fICharClass\fP) resource.
-.
-.PP
-This resource is a
-series of comma-separated
-of \fIrange\fP:\fIvalue\fP pairs.
-The
-\fIrange\fP is either a single number or \fIlow\fP-\fIhigh\fP in the range of 0
-to 65535, corresponding to the code for the character or characters to be
-set.
-The \fIvalue\fP is arbitrary, although the default table uses the
-character number of the first character occurring in the set.
-When not in
-UTF-8 mode, only the first 256 bytes of this table will be used.
-.
-.PP
-The default table starts as follows -
-.DS
-static int charClass[256] = {
-/\(** NUL SOH STX ETX EOT ENQ ACK BEL */
- 32, 1, 1, 1, 1, 1, 1, 1,
-/\(** BS HT NL VT NP CR SO SI */
- 1, 32, 1, 1, 1, 1, 1, 1,
-/\(** DLE DC1 DC2 DC3 DC4 NAK SYN ETB */
- 1, 1, 1, 1, 1, 1, 1, 1,
-/\(** CAN EM SUB ESC FS GS RS US */
- 1, 1, 1, 1, 1, 1, 1, 1,
-/\(** SP ! " # $ % & ' */
-.\" " <- for emacs autocolor to work well :-)
- 32, 33, 34, 35, 36, 37, 38, 39,
-/\(** ( ) * + , - . / */
- 40, 41, 42, 43, 44, 45, 46, 47,
-/\(** 0 1 2 3 4 5 6 7 */
- 48, 48, 48, 48, 48, 48, 48, 48,
-/\(** 8 9 : ; < = > ? */
- 48, 48, 58, 59, 60, 61, 62, 63,
-/\(** @ A B C D E F G */
- 64, 48, 48, 48, 48, 48, 48, 48,
-/\(** H I J K L M N O */
- 48, 48, 48, 48, 48, 48, 48, 48,
-/\(** P Q R S T U V W */
- 48, 48, 48, 48, 48, 48, 48, 48,
-/\(** X Y Z [ \\ ] ^ _ */
- 48, 48, 48, 91, 92, 93, 94, 48,
-/\(** ` a b c d e f g */
- 96, 48, 48, 48, 48, 48, 48, 48,
-/\(** h i j k l m n o */
- 48, 48, 48, 48, 48, 48, 48, 48,
-/\(** p q r s t u v w */
- 48, 48, 48, 48, 48, 48, 48, 48,
-/\(** x y z { | } ~ DEL */
- 48, 48, 48, 123, 124, 125, 126, 1,
-/\(** x80 x81 x82 x83 IND NEL SSA ESA */
- 1, 1, 1, 1, 1, 1, 1, 1,
-/\(** HTS HTJ VTS PLD PLU RI SS2 SS3 */
- 1, 1, 1, 1, 1, 1, 1, 1,
-/\(** DCS PU1 PU2 STS CCH MW SPA EPA */
- 1, 1, 1, 1, 1, 1, 1, 1,
-/\(** x98 x99 x9A CSI ST OSC PM APC */
- 1, 1, 1, 1, 1, 1, 1, 1,
-/\(** - i c/ L ox Y- | So */
- 160, 161, 162, 163, 164, 165, 166, 167,
-/\(** .. c0 ip << _ R0 - */
- 168, 169, 170, 171, 172, 173, 174, 175,
-/\(** o +- 2 3 ' u q| . */
- 176, 177, 178, 179, 180, 181, 182, 183,
-/\(** , 1 2 >> 1/4 1/2 3/4 ? */
- 184, 185, 186, 187, 188, 189, 190, 191,
-/\(** A` A' A^ A~ A: Ao AE C, */
- 48, 48, 48, 48, 48, 48, 48, 48,
-/\(** E` E' E^ E: I` I' I^ I: */
- 48, 48, 48, 48, 48, 48, 48, 48,
-/\(** D- N~ O` O' O^ O~ O: X */
- 48, 48, 48, 48, 48, 48, 48, 215,
-/\(** O/ U` U' U^ U: Y' P B */
- 48, 48, 48, 48, 48, 48, 48, 48,
-/\(** a` a' a^ a~ a: ao ae c, */
- 48, 48, 48, 48, 48, 48, 48, 48,
-/\(** e` e' e^ e: i` i' i^ i: */
- 48, 48, 48, 48, 48, 48, 48, 48,
-/\(** d n~ o` o' o^ o~ o: -: */
- 48, 48, 48, 48, 48, 48, 48, 247,
-/\(** o/ u` u' u^ u: y' P y: */
- 48, 48, 48, 48, 48, 48, 48, 48};
-.DE
-For example, the string ``33:48,37:48,45-47:48,38:48'' indicates that the
-exclamation mark, percent sign, dash, period, slash, and ampersand characters
-should be treated the same way as characters and numbers.
-This is useful
-for cutting and pasting electronic mailing addresses and filenames.
-.
-.
-.SH ACTIONS
-It is possible to rebind keys (or sequences of keys) to arbitrary strings
-for input, by changing the \fBtranslations\fP resources
-for the vt100 or tek4014 widgets.
-Changing the \fBtranslations\fP resource
-for events other than key and button events is not expected,
-and will cause unpredictable behavior.
-The following
-actions are provided for use within the \fIvt100\fP or \fItek4014\fP
-\fBtranslations\fP resources:
-.TP 8
-.B "allow-send-events(\fIon/off/toggle\fP)"
-This action set or toggles the \fBallowSendEvents\fP resource and is also
-invoked by the \fBallowsends\fP entry in \fImainMenu\fP.
-.TP 8
-.B "alt-sends-escape()"
-This action toggles the state of the \fBeightBitInput\fP resource.
-.TP 8
-.B "bell([\fIpercent\fP])"
-This action rings the keyboard bell at the specified percentage
-above or below the base volume.
-.TP 8
-.B "clear-saved-lines()"
-This action does \fBhard-reset()\fP (see below) and also clears the history
-of lines saved off the top of the screen.
-It is also invoked from the \fBclearsavedlines\fP entry in \fIvtMenu\fP.
-The effect is identical to a hardware reset (RIS) control sequence.
-.TP 8
-.B "create-menu(\fIm/v/f/t\fP)"
-This action creates one of the menus used by \fIxterm\fP,
-if it has not been previously created.
-The parameter values are the menu names:
-\fImainMenu\fP, \fIvtMenu\fP, \fIfontMenu\fP, \fItekMenu\fP, respectively.
-.TP 8
-.B "dabbrev-expand()"
-Expands the word before cursor by searching in the preceding text on the
-screen and in the scrollback buffer for words starting with that
-abbreviation.
-Repeating \fBdabbrev-expand()\fP several times in sequence searches for an
-alternative expansion by looking farther back.
-Lack of more matches is signaled by a \fBbeep()\fP.
-Attempts to expand an empty word
-(i.e., when cursor is preceded by a space) yield successively all previous
-words.
-Consecutive identical expansions are ignored.
-The word here is defined as a sequence of non-whitespace characters.
-This feature partially emulates the behavior
-of `dynamic abbreviation' expansion in Emacs (bound there to M-/).
-Here is a resource setting for \fIxterm\fP which will do the same thing:
-.DS
-*VT100*translations: #override \\n\\\&
- Meta <KeyPress> /:dabbrev-expand()
-.DE
-.TP 8
-.B "deiconify()"
-Changes the window state back to normal, if it was iconified.
-.TP 8
-.B "delete-is-del()"
-This action toggles the state of the \fBdeleteIsDEL\fP resource.
-.TP 8
-.B "dired-button()"
-Handles a button event (other than press and release)
-by echoing the event's position
-(i.e., character line and column) in the following format:
-.sp
-.in +8
-^X ESC G <line+' '> <col+' '>
-.in -8
-.TP 8
-.B "iconify()"
-Iconifies the window.
-.TP 8
-.B "hard-reset()"
-This action resets the scrolling region, tabs, window size, and cursor keys
-and clears the screen.
-It is also invoked from the \fBhardreset\fP
-entry in \fIvtMenu\fP.
-.TP 8
-.B "ignore()"
-This action ignores the event but checks for special pointer position
-escape sequences.
-.TP 8
-.B "insert()"
-This action inserts the character or string associated with
-the key that was pressed.
-.TP 8
-.B "insert-eight-bit()"
-This action inserts an eight-bit (Meta) version of the character or string
-associated with the key that was pressed.
-This only applies to single-byte values.
-The exact action depends on the value of
-the \fBmetaSendsEscape\fP and
-the \fBeightBitInput\fP resources.
-The \fBmetaSendsEscape\fP resource is tested first.
-.IP
-The term "eight-bit" is misleading:
-\fIxterm\fP checks if the key's value is less than 128.
-If so, \fIxterm\fP adds 128 to the value, setting its eighth bit.
-Otherwise \fIxterm\fP sends an ESC byte before the key.
-In other applications' documentation, that is referred to as a "meta key".
-.TP 8
-.B "insert-selection(\fIsourcename\fP [, ...])"
-This action inserts the string found in the selection or cutbuffer indicated
-by \fIsourcename\fP.
-Sources are checked in the order given (case is
-significant) until one is found.
-Commonly-used selections include:
-\fIPRIMARY\fP, \fISECONDARY\fP, and \fICLIPBOARD\fP.
-Cut buffers are
-typically named \fICUT_BUFFER0\fP through \fICUT_BUFFER7\fP.
-.TP 8
-.B "insert-seven-bit()"
-This action is a synonym for \fBinsert()\fP
-The term "seven-bit" is misleading:
-it only implies that \fIxterm\fP does not try to add 128 to the key's value
-as in \fBinsert-eight-bit()\fP.
-.TP 8
-.B "interpret(\fIcontrol-sequence\fP)"
-Interpret the given control sequence locally, i.e., without passing it to
-the host.
-This works by inserting the control sequence at the front
-of the input buffer.
-Use "\\" to escape octal digits in the string.
-Xt does not allow you to put a null character (i.e., "\\000") in the string.
-.TP 8
-.B "keymap(\fIname\fP)"
-This action dynamically defines a new translation table whose resource
-name is \fIname\fP with the suffix \fIKeymap\fP (case is significant).
-The name \fINone\fP restores the original translation table.
-.TP 8
-.B "larger-vt-font()"
-Set the font to the next larger one, based on the font dimensions.
-See also \fBset-vt-font()\fP.
-.TP 8
-.B "load-vt-fonts(\fIname\fP[,\fIclass\fP])"
-Load fontnames from the given subresource name and class.
-That is, load the "*VT100.\fIname\fP.font", resource as "*VT100.font" etc.
-If no name is given, the original set of fontnames is restored.
-.IP
-Unlike \fBset-vt-font()\fR, this does not affect the escape- and select-fonts,
-since those are not based on resource values.
-It does affect the fonts loosely organized under the ``Default'' menu
-entry: \fBfont\fP, \fBboldFont\fP, \fBwideFont\fP and \fBwideBoldFont\fP.
-.TP 8
-.B "maximize()"
-Resizes the window to fill the screen.
-.TP 8
-.B "meta-sends-escape()"
-This action toggles the state of the \fBmetaSendsEscape\fP resource.
-.TP 8
-.B "popup-menu(\fImenuname\fP)"
-This action displays the specified popup menu.
-Valid names (case is
-significant) include: \fImainMenu\fP, \fIvtMenu\fP, \fIfontMenu\fP,
-and \fItekMenu\fP.
-.TP 8
-.B "print()"
-This action prints the window and is also invoked by the
-\fIprint\fP entry in \fImainMenu\fP.
-.TP 8
-.B "print-redir()"
-This action toggles the \fBprinterControlMode\fR between 0 and 2.
-The corresponding popup menu entry is useful for switching the printer
-off if you happen to change your mind after deciding to print random
-binary files on the terminal.
-.TP 8
-.B "quit()"
-This action sends a SIGHUP to the subprogram and exits.
-It is also invoked
-by the \fBquit\fP entry in \fImainMenu\fP.
-.TP 8
-.B "redraw()"
-This action redraws the window and is also invoked by the
-\fIredraw\fP entry in \fImainMenu\fP.
-.TP 8
-.B "restore()"
-Restores the window to the size before it was last maximized.
-.TP 8
-.B "scroll-back(\fIcount\fP [,\fIunits\fP [,\fImouse\fP] ])"
-This action scrolls the text window backward so that text that had previously
-scrolled off the top of the screen is now visible.
-.IP
-The \fIcount\fP argument
-indicates the number of \fIunits\fP (which may be \fIpage\fP, \fIhalfpage\fP,
-\fIpixel\fP, or \fIline\fP) by which to scroll.
-.IP
-An adjustment can be specified for these values by appending a "+" or "-"
-sign followed by a number,
-e.g., \fIpage-2\fP to specify 2 lines less than a page.
-.IP
-If the third parameter \fImouse\fP is given, the action is ignored when
-mouse reporting is enabled.
-.TP 8
-.B "scroll-forw(\fIcount\fP [,\fIunits\fP [,\fImouse\fP] ])"
-This action is similar to \fBscroll-back\fP except that it scrolls
-in the other direction.
-.TP 8
-.B "secure()"
-This action toggles the \fISecure Keyboard\fP mode described in the
-section named \fBSECURITY\fP, and is invoked from the \fBsecurekbd\fP
-entry in \fImainMenu\fP.
-.TP 8
-.B "select-cursor-end(\fIdestname\fP [, ...])"
-This action is similar to \fBselect-end\fP except that it should be used
-with \fBselect-cursor-start\fP.
-.TP 8
-.B "select-cursor-start()"
-This action is similar to \fBselect-start\fP except that it begins the
-selection at the current text cursor position.
-.TP 8
-.B "select-end(\fIdestname\fP [, ...])"
-This action puts the currently selected text into all of the selections or
-cutbuffers specified by \fIdestname\fP.
-.TP 8
-.B "select-extend()"
-This action tracks the pointer and extends the selection.
-It should only be bound to Motion events.
-.TP 8
-.B "select-set()"
-This action stores text that corresponds to the current selection,
-without affecting the selection mode.
-.TP 8
-.B "select-start()"
-This action begins text selection at the current pointer location.
-See
-the section on \fBPOINTER USAGE\fP for information on making selections.
-.TP 8
-.B "send-signal(\fIsigname\fP)"
-This action sends the signal named by \fIsigname\fP
-to the \fIxterm\fP subprocess (the shell or program specified with
-the \fI-e\fP command line option) and is also invoked by the
-.BR suspend ,
-.BR continue ,
-.BR interrupt ,
-.BR hangup ,
-.BR terminate ,
-and
-.BR kill
-entries in \fImainMenu\fP.
-Allowable signal names are (case is
-not significant):
-\fItstp\fP (if supported by the operating system), \fIsuspend\fP (same
-as \fItstp\fP), \fIcont\fP
-(if supported by the operating system), \fIint\fP, \fIhup\fP, \fIterm\fP,
-\fIquit\fP,
-\fIalrm\fP, \fIalarm\fP (same as \fIalrm\fP) and \fIkill\fP.
-.TP 8
-.B "set-allow132(\fIon/off/toggle\fP)"
-This action toggles the \fBc132\fP resource and is also invoked from the
-\fBallow132\fP entry in \fIvtMenu\fP.
-.TP 8
-.B "set-altscreen(\fIon/off/toggle\fP)"
-This action toggles between the alternate and current screens.
-.TP 8
-.B "set-appcursor(\fIon/off/toggle\fP)"
-This action toggles the handling Application Cursor Key mode
-and is also invoked by the \fBappcursor\fP entry in \fIvtMenu\fP.
-.TP 8
-.B "set-appkeypad(\fIon/off/toggle\fP)"
-This action toggles the handling of Application Keypad mode and is also
-invoked by the \fBappkeypad\fP entry in \fIvtMenu\fP.
-.TP 8
-.B "set-autolinefeed(\fIon/off/toggle\fP)"
-This action toggles automatic insertion of linefeeds and is also invoked by
-the \fBautolinefeed\fP entry in \fIvtMenu\fP.
-.TP 8
-.B "set-autowrap(\fIon/off/toggle\fP)"
-This action toggles automatic wrapping of long lines and is also invoked by
-the \fBautowrap\fP entry in \fIvtMenu\fP.
-.TP 8
-.B "set-backarrow(\fIon/off/toggle\fP)"
-This action toggles the \fBbackarrowKey\fP resource and is also invoked from the
-\fBbackarrow key\fP entry in \fIvtMenu\fP.
-.TP 8
-.B "set-cursorblink(\fIon/off/toggle\fP)"
-This action toggles the \fBcursorBlink\fP resource and is also invoked from the
-\fBcursorblink\fP entry in \fIvtMenu\fP.
-.TP 8
-.B "set-cursesemul(\fIon/off/toggle\fP)"
-This action toggles the \fBcurses\fP resource and is also invoked from the
-\fBcursesemul\fP entry in \fIvtMenu\fP.
-.TP 8
-.B "set-font-doublesize(\fIon/off/toggle\fP)"
-This action toggles the \fBfontDoublesize\fP resource and is also invoked by
-the \fBfont-doublesize\fP entry in \fIfontMenu\fP.
-.TP 8
-.B "set-hp-function-keys(\fIon/off/toggle\fP)"
-This action toggles the \fBhpFunctionKeys\fP resource and is also invoked by
-the \fBhpFunctionKeys\fP entry in \fImainMenu\fP.
-.TP 8
-.B "set-jumpscroll(\fIon/off/toggle\fP)"
-This action toggles the \fBjumpscroll\fP resource and is also invoked by the
-\fBjumpscroll\fP entry in \fIvtMenu\fP.
-.TP 8
-.B "set-font-linedrawing(\fIon/off/toggle\fP)"
-This action toggles the \fIxterm\fR's state regarding whether the current font
-has line-drawing characters and whether it should draw them directly.
-It is also invoked by the \fBfont-linedrawing\fP entry in \fIfontMenu\fP.
-.TP 8
-.B "set-logging()"
-This action toggles the state of the logging option.
-.TP 8
-.B "set-old-function-keys(\fIon/off/toggle\fP)"
-This action toggles the state of legacy function keys and is also invoked by
-the \fBoldFunctionKeys\fP entry in \fImainMenu\fP.
-.TP 8
-.B "set-marginbell(\fIon/off/toggle\fP)"
-This action toggles the \fBmarginBell\fP resource and is also invoked from
-the \fBmarginbell\fP entry in \fIvtMenu\fP.
-.TP 8
-.B "set-num-lock()"
-This action toggles the state of the \fBnumLock\fP resource.
-.TP 8
-.B "set-pop-on-bell(\fIon/off/toggle\fP)"
-This action toggles the \fBpopOnBell\fP resource and is also invoked
-by the \fBpoponbell\fP entry in \fIvtMenu\fP.
-.TP 8
-.B "set-render-font(\fIon/off/toggle\fP)"
-This action toggles the \fBrenderFont\fP resource and is also invoked by
-the \fBrender-font\fP entry in \fIfontMenu\fP.
-.TP 8
-.B "set-reverse-video(\fIon/off/toggle\fP)"
-This action toggles the \fBreverseVideo\fP resource and is also invoked by
-the \fBreversevideo\fP entry in \fIvtMenu\fP.
-.TP 8
-.B "set-reversewrap(\fIon/off/toggle\fP)"
-This action toggles the \fBreverseWrap\fP resource and is also invoked by
-the \fBreversewrap\fP entry in \fIvtMenu\fP.
-.TP 8
-.B "set-scroll-on-key(\fIon/off/toggle\fP)"
-This action toggles the \fBscrollKey\fP resource and is also invoked from
-the \fBscrollkey\fP entry in \fIvtMenu\fP.
-.TP 8
-.B "set-scroll-on-tty-output(\fIon/off/toggle\fP)"
-This action toggles the \fBscrollTtyOutput\fP resource and is also invoked
-from the \fBscrollttyoutput\fP entry in \fIvtMenu\fP.
-.TP 8
-.B "set-scrollbar(\fIon/off/toggle\fP)"
-This action toggles the \fBscrollbar\fP resource and is also invoked by
-the \fBscrollbar\fP entry in \fIvtMenu\fP.
-.TP 8
-.B "set-sco-function-keys(\fIon/off/toggle\fP)"
-This action toggles the \fBscoFunctionKeys\fP resource and is also invoked by
-the \fBscoFunctionKeys\fP entry in \fImainMenu\fP.
-.TP 8
-.B "set-sun-function-keys(\fIon/off/toggle\fP)"
-This action toggles the \fBsunFunctionKeys\fP resource and is also invoked by
-the \fBsunFunctionKeys\fP entry in \fImainMenu\fP.
-.TP 8
-.B "set-sun-keyboard(\fIon/off/toggle\fP)"
-This action toggles the \fBsunKeyboard\fP resource and is also invoked by
-the \fBsunKeyboard\fP entry in \fImainMenu\fP.
-.TP 8
-.B "set-tek-text(\fIlarge/2/3/small\fP)"
-This action sets font used in the Tektronix window to the value of the
-resources \fBtektextlarge\fP, \fBtektext2\fP, \fBtektext3\fP, and
-\fBtektextsmall\fP according to the argument.
-It is also by the entries
-of the same names as the resources in \fItekMenu\fP.
-.TP 8
-.B "set-terminal-type(\fItype\fP)"
-This action directs output to either the \fIvt\fP or \fItek\fP windows,
-according to the \fItype\fP string.
-It is also invoked by the
-\fBtekmode\fP entry in \fIvtMenu\fP and the \fBvtmode\fP entry in
-\fItekMenu\fP.
-.TP 8
-.B "set-titeInhibit(\fIon/off/toggle\fP)"
-This action toggles the \fBtiteInhibit\fP resource,
-which controls switching between the alternate and current screens.
-.TP 8
-.\" should toggle "toolBar" resource (see note).
-.B "set-toolbar(\fIon/off/toggle\fP)"
-This action toggles the toolbar feature and is also invoked by
-the \fBtoolbar\fP entry in \fImainMenu\fP.
-.TP 8
-.B "set-utf8-mode(\fIon/off/toggle\fP)"
-This action toggles the \fButf8\fP resource and is also invoked by
-the \fButf8-mode\fP entry in \fIfontMenu\fP.
-.TP 8
-.B "set-visibility(\fIvt/tek\fP,\fIon/off/toggle\fP)"
-This action controls whether or not the \fIvt\fP or \fItek\fP windows are
-visible.
-It is also invoked from the \fBtekshow\fP and \fBvthide\fP entries
-in \fIvtMenu\fP and the \fBvtshow\fP and \fBtekhide\fP entries in
-\fItekMenu\fP.
-.TP 8
-.B "set-visual-bell(\fIon/off/toggle\fP)"
-This action toggles the \fBvisualBell\fP resource and is also invoked
-by the \fBvisualbell\fP entry in \fIvtMenu\fP.
-.TP 8
-.B "set-vt-font(\fId/1/2/3/4/5/6/e/s\fP [,\fInormalfont\fP [, \fIboldfont\fP]])"
-This action sets the font or fonts currently being used in the VT102 window.
-The first argument is a single character that specifies the font to be
-used:
-.RS 8
-.HP
-\fId\fP or \fID\fP indicate the default font (the font initially
-used when
-\fIxterm\fP was started),
-.HP
-\fI1\fP through \fI6\fP indicate the fonts
-specified by the \fIfont1\fP through \fIfont6\fP resources,
-.HP
-\fIe\fP or \fIE\fP
-indicate the normal and bold fonts that have been set through escape codes
-(or specified as the second and third action arguments, respectively), and
-.HP
-\fIs\fP or \fIS\fP indicate the font selection (as made by programs such as
-\fIxfontsel(1)\fP) indicated by the second action argument.
-.RE
-.IP
-If \fIxterm\fR is configured to support wide characters, an
-additional two optional parameters are recognized for the \fIe\fP argument:
-wide font and wide bold font.
-.TP 8
-.B "smaller-vt-font()"
-Set the font to the next smaller one, based on the font dimensions.
-See also \fBset-vt-font()\fP.
-.TP 8
-.B "soft-reset()"
-This action resets the scrolling region and is also invoked from the
-\fBsoftreset\fP entry in \fIvtMenu\fP.
-The effect is identical to a soft reset (DECSTR) control sequence.
-.TP 8
-.B "start-extend()"
-This action is similar to \fBselect-start\fP except that the
-selection is extended to the current pointer location.
-.TP 8
-.B "start-cursor-extend()"
-This action is similar to \fBselect-extend\fP except that the
-selection is extended to the current text cursor position.
-.TP 8
-.B "string(\fIstring\fP)"
-This action inserts the specified text string as if it had been typed.
-Quotation is necessary if the string contains whitespace or
-non-alphanumeric characters.
-If the string argument begins with the
-characters ``0x'', it is interpreted
-as a hex character constant.
-.TP 8
-.B "tek-copy()"
-This action copies the escape codes used to generate the current window
-contents to a file in the current directory beginning with the name COPY.
-It is also invoked from the \fItekcopy\fP entry in \fItekMenu\fP.
-.TP 8
-.B "tek-page()"
-This action clears the Tektronix window and is also invoked by the
-\fBtekpage\fP entry in \fItekMenu\fP.
-.TP 8
-.B "tek-reset()"
-This action resets the Tektronix window and is also invoked by the
-\fItekreset\fP entry in \fItekMenu\fP.
-.TP 8
-.B "vi-button()"
-Handles a button event (other than press and release)
-by echoing a control sequence computed from the event's line number
-in the screen relative to the current line:
-.sp
-.in +8
-ESC ^P
-.in -8
-or
-.in +8
-ESC ^N
-.in -8
-.sp
-according to whether the event is before, or after the current line,
-respectively.
-The ^N (or ^P) is repeated once for each line that the event differs
-from the current line.
-The control sequence is omitted altogether if the button event is on the
-current line.
-.TP 8
-.B "visual-bell()"
-This action flashes the window quickly.
-.
-.PP
-The Tektronix window also has the following action:
-.TP 8
-.B "gin-press(\fIl/L/m/M/r/R\fP)"
-This action sends the indicated graphics input code.
-.
-.PP
-The default bindings in the VT102 window are:
-.DS
-.ta 2.5i
- Shift <KeyPress> Prior:scroll-back(1,halfpage) \\n\\\&
- Shift <KeyPress> Next:scroll-forw(1,halfpage) \\n\\\&
- Shift <KeyPress> Select:select-cursor-start() \\\&
- select-cursor-end(PRIMARY, CUT_BUFFER0) \\n\\\&
- Shift <KeyPress> Insert:insert-selection(PRIMARY, CUT_BUFFER0) \\n\\\&
- Shift~Ctrl <KeyPress> KP_Add:larger-vt-font() \\n\\\&
- Shift Ctrl <KeyPress> KP_Add:smaller-vt-font() \\n\\\&
- Shift <KeyPress> KP_Subtract:smaller-vt-font() \\n\\\&
- ~Meta <KeyPress>:insert-seven-bit() \\n\\\&
- Meta <KeyPress>:insert-eight-bit() \\n\\\&
- !Ctrl <Btn1Down>:popup-menu(mainMenu) \\n\\\&
- !Lock Ctrl <Btn1Down>:popup-menu(mainMenu) \\n\\\&
- !Lock Ctrl @Num_Lock <Btn1Down>:popup-menu(mainMenu) \\n\\\&
- ! @Num_Lock Ctrl <Btn1Down>:popup-menu(mainMenu) \\n\\\&
- ~Meta <Btn1Down>:select-start() \\n\\\&
- ~Meta <Btn1Motion>:select-extend() \\n\\\&
- !Ctrl <Btn2Down>:popup-menu(vtMenu) \\n\\\&
- !Lock Ctrl <Btn2Down>:popup-menu(vtMenu) \\n\\\&
- !Lock Ctrl @Num_Lock <Btn2Down>:popup-menu(vtMenu) \\n\\\&
- ! @Num_Lock Ctrl <Btn2Down>:popup-menu(vtMenu) \\n\\\&
- ~Ctrl ~Meta <Btn2Down>:ignore() \\n\\\&
- Meta <Btn2Down>:clear-saved-lines() \\n\\\&
- ~Ctrl ~Meta <Btn2Up>:insert-selection(PRIMARY, CUT_BUFFER0) \\n\\\&
- !Ctrl <Btn3Down>:popup-menu(fontMenu) \\n\\\&
- !Lock Ctrl <Btn3Down>:popup-menu(fontMenu) \\n\\\&
- !Lock Ctrl @Num_Lock <Btn3Down>:popup-menu(fontMenu) \\n\\\&
- ! @Num_Lock Ctrl <Btn3Down>:popup-menu(fontMenu) \\n\\\&
- ~Ctrl ~Meta <Btn3Down>:start-extend() \\n\\\&
- ~Meta <Btn3Motion>:select-extend() \\n\\\&
- Ctrl <Btn4Down>:scroll-back(1,halfpage,m) \\n\\\&
- Lock Ctrl <Btn4Down>:scroll-back(1,halfpage,m) \\n\\\&
- Lock @Num_Lock Ctrl <Btn4Down>:scroll-back(1,halfpage,m) \\n\\\&
- @Num_Lock Ctrl <Btn4Down>:scroll-back(1,halfpage,m) \\n\\\&
- <Btn4Down>:scroll-back(5,line,m) \\n\\\&
- Ctrl <Btn5Down>:scroll-forw(1,halfpage,m) \\n\\\&
- Lock Ctrl <Btn5Down>:scroll-forw(1,halfpage,m) \\n\\\&
- Lock @Num_Lock Ctrl <Btn5Down>:scroll-forw(1,halfpage,m) \\n\\\&
- @Num_Lock Ctrl <Btn5Down>:scroll-forw(1,halfpage,m) \\n\\\&
- <Btn5Down>:scroll-forw(5,line,m) \\n\\\&
- <BtnUp>:select-end(PRIMARY, CUT_BUFFER0) \\n\\\&
- <BtnDown>:ignore()
-.DE
-.PP
-The default bindings in the Tektronix window are:
-.DS
-.ta 2.5i
- ~Meta<KeyPress>: insert-seven-bit() \\n\\\&
- Meta<KeyPress>: insert-eight-bit() \\n\\\&
- !Ctrl <Btn1Down>: popup-menu(mainMenu) \\n\\\&
- !Lock Ctrl <Btn1Down>: popup-menu(mainMenu) \\n\\\&
-!Lock Ctrl @Num_Lock <Btn1Down>: popup-menu(mainMenu) \\n\\\&
- !Ctrl @Num_Lock <Btn1Down>: popup-menu(mainMenu) \\n\\\&
- !Ctrl <Btn2Down>: popup-menu(tekMenu) \\n\\\&
- !Lock Ctrl <Btn2Down>: popup-menu(tekMenu) \\n\\\&
-!Lock Ctrl @Num_Lock <Btn2Down>: popup-menu(tekMenu) \\n\\\&
- !Ctrl @Num_Lock <Btn2Down>: popup-menu(tekMenu) \\n\\\&
- Shift ~Meta<Btn1Down>: gin-press(L) \\n\\\&
- ~Meta<Btn1Down>: gin-press(l) \\n\\\&
- Shift ~Meta<Btn2Down>: gin-press(M) \\n\\\&
- ~Meta<Btn2Down>: gin-press(m) \\n\\\&
- Shift ~Meta<Btn3Down>: gin-press(R) \\n\\\&
- ~Meta<Btn3Down>: gin-press(r)
-.DE
-.PP
-Here is an example which uses shifted select/paste to copy to the clipboard,
-and unshifted select/paste for the primary selection.
-In each case, a (different) cut buffer is
-also a target or source of the select/paste operation.
-It is important to remember however,
-that cut buffers store data in ISO-8859-1 encoding,
-while selections can store data in a variety of formats and encodings.
-While \fIxterm\fP owns the selection, it highlights it.
-When it loses the selection, it removes the corresponding highlight.
-But you can still paste from the corresponding cut buffer.
-.DS
-.ta .5i 1.5i
-*VT100*translations: #override \\n\\\&
- ~Shift~Ctrl<Btn2Up>: insert-selection(PRIMARY, CUT_BUFFER0) \\n\\\&
- Shift~Ctrl<Btn2Up>: insert-selection(CLIPBOARD, CUT_BUFFER1) \\n\\\&
- ~Shift<BtnUp>: select-end(PRIMARY, CUT_BUFFER0) \\n\\\&
- Shift<BtnUp>: select-end(CLIPBOARD, CUT_BUFFER1)
-.DE
-.PP
-Below is a sample how of the \fBkeymap()\fP action is used to add special
-keys for entering commonly-typed works:
-.DS
-.ta .5i 1.5i
-*VT100.Translations: #override <Key>F13: keymap(dbx)
-*VT100.dbxKeymap.translations: \\\&
- <Key>F14: keymap(None) \\n\\\&
- <Key>F17: string("next") string(0x0d) \\n\\\&
- <Key>F18: string("step") string(0x0d) \\n\\\&
- <Key>F19: string("continue") string(0x0d) \\n\\\&
- <Key>F20: string("print ") insert-selection(PRIMARY, CUT_BUFFER0)
-.DE
-.SH "CONTROL SEQUENCES AND KEYBOARD"
-The \fIXterm Control Sequences\fP document lists the control sequences which
-an application can send \fIxterm\fP to make it perform various operations.
-Most of these operations are standardized, from either the DEC or Tektronix
-terminals, or from more widely used standards such as ISO 6429.
-.
-.
-.SH ENVIRONMENT
-.I Xterm
-sets several environment variables:
-.TP 5
-DISPLAY
-is the display name,
-pointing to the X server (see \fBDISPLAY NAMES\fP in X(__miscmansuffix__)).
-.TP 5
-TERM
-is set according to the termcap (or terminfo) entry which it is using as
-a reference.
-.TP 5
-WINDOWID
-is set to the X window id number of the \fIxterm\fP window.
-.TP 5
-XTERM_SHELL
-is set to the pathname of the program which is invoked.
-Usually that is a shell program, e.g., \fB/bin/sh\fP.
-Since it is not necessarily a shell program however,
-it is distinct from ``SHELL''.
-.TP 5
-XTERM_VERSION
-is set to the string displayed by the \fB-version\fP option.
-That is normally an identifier for the X Window libraries used to
-build \fIxterm\fP, followed by
-\fIxterm\fP's patch number in parenthesis.
-The patch number is also part of the response to a Secondary Device Attributes
-(DA) control sequence (see \fIXterm Control Sequences\fP).
-.
-.PP
-Depending on your system configuration, \fIxterm\fP may also set the
-following:
-.TP 5
-COLUMNS
-the width of the \fIxterm\fP in characters (cf: "stty columns").
-.TP 5
-HOME
-when \fIxterm\fP is configured to update utmp.
-.TP 5
-LINES
-the height of the \fIxterm\fP in characters (cf: "stty rows").
-.TP 5
-LOGNAME
-when \fIxterm\fP is configured to update utmp.
-.TP 5
-SHELL
-when \fIxterm\fP is configured to update utmp.
-It is also set if you provide the shell name as the optional parameter.
-.TP 5
-TERMCAP
-the contents of the termcap entry corresponding to $TERM,
-with lines and columns values substituted
-for the actual size window you have created.
-.TP 5
-TERMINFO
-may be defined to a nonstandard location in the configure script.
-.\"
-.
-.
-.SH FILES
-The actual pathnames given may differ on your system.
-.TP 5
-\fI/etc/utmp\fP
-the system logfile, which records user logins.
-.TP 5
-\fI/etc/wtmp\fP
-the system logfile, which records user logins and logouts.
-.TP 5
-.I __apploaddir__/XTerm
-the \fIxterm\fP default application resources.
-.TP 5
-.I __apploaddir__/XTerm-color
-the \fIxterm\fP color application resources.
-If your display supports color, use this
-.in +10
-*customization: -color
-.in -10
-in your .Xdefaults file to
-automatically turn on color in \fIxterm\fP and similar applications.
-.
-.
-.SH ERROR MESSAGES
-Most of the fatal error messages from \fIxterm\fP use the following format:
-.RS
-xterm: Error \fIXXX\fP, errno \fIYYY\fP: \fIZZZ\fP
-.RE
-The \fIXXX\fP codes (which are used by \fIxterm\fP as its exit-code)
-are listed below, with a brief explanation.
-.TP 5
-1
-is used for miscellaneous errors, usually accompanied by a specific message,
-.TP
-11
-ERROR_FIONBIO
-.br
-main: ioctl() failed on FIONBIO
-.TP
-12
-ERROR_F_GETFL
-.br
-main: ioctl() failed on F_GETFL
-.TP
-13
-ERROR_F_SETFL
-.br
-main: ioctl() failed on F_SETFL
-.TP
-14
-ERROR_OPDEVTTY
-.br
-spawn: open() failed on /dev/tty
-.TP
-15
-ERROR_TIOCGETP
-.br
-spawn: ioctl() failed on TIOCGETP
-.TP
-17
-ERROR_PTSNAME
-.br
-spawn: ptsname() failed
-.TP
-18
-ERROR_OPPTSNAME
-.br
-spawn: open() failed on ptsname
-.TP
-19
-ERROR_PTEM
-.br
-spawn: ioctl() failed on I_PUSH/"ptem"
-.TP
-20
-ERROR_CONSEM
-.br
-spawn: ioctl() failed on I_PUSH/"consem"
-.TP
-21
-ERROR_LDTERM
-.br
-spawn: ioctl() failed on I_PUSH/"ldterm"
-.TP
-22
-ERROR_TTCOMPAT
-.br
-spawn: ioctl() failed on I_PUSH/"ttcompat"
-.TP
-23
-ERROR_TIOCSETP
-.br
-spawn: ioctl() failed on TIOCSETP
-.TP
-24
-ERROR_TIOCSETC
-.br
-spawn: ioctl() failed on TIOCSETC
-.TP
-25
-ERROR_TIOCSETD
-.br
-spawn: ioctl() failed on TIOCSETD
-.TP
-26
-ERROR_TIOCSLTC
-.br
-spawn: ioctl() failed on TIOCSLTC
-.TP
-27
-ERROR_TIOCLSET
-.br
-spawn: ioctl() failed on TIOCLSET
-.TP
-28
-ERROR_INIGROUPS
-.br
-spawn: initgroups() failed
-.TP
-29
-ERROR_FORK
-.br
-spawn: fork() failed
-.TP
-30
-ERROR_EXEC
-.br
-spawn: exec() failed
-.TP
-32
-ERROR_PTYS
-.br
-get_pty: not enough ptys
-.TP
-34
-ERROR_PTY_EXEC
-.br
-waiting for initial map
-.TP
-35
-ERROR_SETUID
-.br
-spawn: setuid() failed
-.TP
-36
-ERROR_INIT
-.br
-spawn: can't initialize window
-.TP
-46
-ERROR_TIOCKSET
-.br
-spawn: ioctl() failed on TIOCKSET
-.TP
-47
-ERROR_TIOCKSETC
-.br
-spawn: ioctl() failed on TIOCKSETC
-.TP
-48
-ERROR_SPREALLOC
-.br
-spawn: realloc of ttydev failed
-.TP
-49
-ERROR_LUMALLOC
-.br
-luit: command-line malloc failed
-.TP
-50
-ERROR_SELECT
-.br
-in_put: select() failed
-.TP
-54
-ERROR_VINIT
-.br
-VTInit: can't initialize window
-.TP
-57
-ERROR_KMMALLOC1
-.br
-HandleKeymapChange: malloc failed
-.TP
-60
-ERROR_TSELECT
-.br
-Tinput: select() failed
-.TP
-64
-ERROR_TINIT
-.br
-TekInit: can't initialize window
-.TP
-71
-ERROR_BMALLOC2
-.br
-SaltTextAway: malloc() failed
-.TP
-80
-ERROR_LOGEXEC
-.br
-StartLog: exec() failed
-.TP
-83
-ERROR_XERROR
-.br
-xerror: XError event
-.TP
-84
-ERROR_XIOERROR
-.br
-xioerror: X I/O error
-.TP
-90
-ERROR_SCALLOC
-.br
-Alloc: calloc() failed on base
-.TP
-91
-ERROR_SCALLOC2
-.br
-Alloc: calloc() failed on rows
-.TP
-92
-ERROR_SREALLOC
-.br
-ScreenResize: realloc() failed on alt base
-.TP
-96
-ERROR_RESIZE
-.br
-ScreenResize: malloc() or realloc() failed
-.TP
-102
-ERROR_SAVE_PTR
-.br
-ScrnPointers: malloc/realloc() failed
-.TP
-110
-ERROR_SBRALLOC
-.br
-ScrollBarOn: realloc() failed on base
-.TP
-111
-ERROR_SBRALLOC2
-.br
-ScrollBarOn: realloc() failed on rows
-.TP
-121
-ERROR_MMALLOC
-.br
-my_memmove: malloc/realloc failed
-.
-.
-.SH BUGS
-.
-.PP
-Large pastes do not work on some systems.
-This is not a bug in
-\fIxterm\fP; it is a bug in the pseudo terminal driver of those
-systems.
-\fIxterm\fP feeds large pastes to the pty only as fast as the pty
-will accept data, but some pty drivers do not return enough information
-to know if the write has succeeded.
-.
-.PP
-Many of the options are not resettable after
-.I xterm
-starts.
-.
-.PP
-This program still needs to be rewritten.
-It should be split into very
-modular sections, with the various emulators being completely separate
-widgets that do not know about each other.
-Ideally, you'd like to be able to
-pick and choose emulator widgets and stick them into a single control widget.
-.
-.PP
-There needs to be a dialog box to allow entry of the Tek COPY file name.
-.
-.
-.SH "SEE ALSO"
-resize(1), luit(1), X(__miscmansuffix__), pty(4), tty(4)
-.br
-\fIXterm Control Sequences\fP
-(this is the file ctlseqs.ms).
-.sp
-http://invisible-island.net/xterm/xterm.html
-.
-.
-.SH AUTHORS
-Far too many people, including:
-.sp
-Loretta Guarino Reid (DEC-UEG-WSL),
-Joel McCormack (DEC-UEG-WSL), Terry Weissman (DEC-UEG-WSL),
-Edward Moy (Berkeley), Ralph R. Swick (MIT-Athena),
-Mark Vandevoorde (MIT-Athena), Bob McNamara (DEC-MAD),
-Jim Gettys (MIT-Athena), Bob Scheifler (MIT X Consortium), Doug Mink (SAO),
-Steve Pitschke (Stellar), Ron Newman (MIT-Athena), Jim Fulton (MIT X
-Consortium), Dave Serisky (HP), Jonathan Kamens (MIT-Athena),
-Jason Bacon,
-Stephen P. Wall,
-David Wexelblat, and
-Thomas Dickey (XFree86 Project).
diff --git a/nx-X11/programs/xterm/xterm_axp.opt b/nx-X11/programs/xterm/xterm_axp.opt
deleted file mode 100644
index 53dab4eb3..000000000
--- a/nx-X11/programs/xterm/xterm_axp.opt
+++ /dev/null
@@ -1,28 +0,0 @@
-BUTTON.OBJ
-CHARPROC.OBJ
-CHARSETS.OBJ
-CURSOR.OBJ
-DATA.OBJ
-DOUBLECHR.OBJ
-FONTUTILS.OBJ
-INPUT.OBJ
-KEYSYM2UCS.OBJ
-MAIN.OBJ
-MENU.OBJ
-MISC.OBJ
-PRINT.OBJ
-PTYDATA.OBJ
-SCREEN.OBJ
-SCROLLBAR.OBJ
-TABS.OBJ
-TEKPROC.OBJ
-TEKPRSTBL.OBJ
-TRACE.OBJ
-TTYSVR.OBJ
-UTIL.OBJ
-VMS.OBJ
-VTPRSTBL.OBJ
-XAW3DLIB.OLB/LIB
-XMULIB.OLB/LIB
-SYS$SHARE:DECW$XTLIBSHRR5.EXE/SHARE
-SYS$SHARE:DECW$XLIBSHR.EXE/SHARE
diff --git a/nx-X11/programs/xterm/xterm_io.h b/nx-X11/programs/xterm/xterm_io.h
deleted file mode 100644
index 337f72800..000000000
--- a/nx-X11/programs/xterm/xterm_io.h
+++ /dev/null
@@ -1,309 +0,0 @@
-/*
- * $XFree86: xc/programs/xterm/xterm_io.h,v 1.19 2005/11/13 23:10:37 dickey Exp $
- */
-
-/*
- * Copyright 2000-2004,2005 by Thomas E. Dickey
- *
- * All Rights Reserved
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sublicense, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- * IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY
- * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- * Except as contained in this notice, the name(s) of the above copyright
- * holders shall not be used in advertising or otherwise to promote the
- * sale, use or other dealings in this Software without prior written
- * authorization.
- */
-
-#ifndef included_xterm_io_h
-#define included_xterm_io_h
-
-#include <xterm.h>
-
-/*
- * System-specific definitions (keep these chunks one-per-system!).
- *
- * FIXME: some, such as those defining USE_TERMIOS should be moved to xterm.h
- * as they are integrated with the configure script.
- */
-#ifdef CSRG_BASED
-#define USE_TERMIOS
-#endif
-
-#ifdef __CYGWIN__
-#define ATT
-#define SVR4
-#define SYSV
-#define USE_SYSV_TERMIO
-#endif
-
-#ifdef __UNIXOS2__
-#define USE_SYSV_TERMIO
-#endif
-
-#if defined(__DragonFly__) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__INTERIX) || defined(__APPLE__) || defined(__UNIXWARE__)
-#ifndef USE_POSIX_TERMIOS
-#define USE_POSIX_TERMIOS
-#endif
-#endif
-
-#if defined(AIXV4)
-#define USE_POSIX_TERMIOS
-#ifndef SYSV
-#define SYSV
-#endif
-#endif
-
-#ifdef linux
-#define USE_TERMIOS
-#endif
-
-#ifdef __SCO__
-#define USE_TERMIOS
-#ifndef _SVID3
-#define _SVID3
-#endif
-#endif
-
-#ifdef Lynx
-#define USE_SYSV_TERMIO
-#endif
-
-#ifdef macII
-#undef SYSV /* pretend to be bsd (sgtty.h) */
-#endif /* macII */
-
-#if defined(__GLIBC__) && !defined(linux)
-#define USE_POSIX_TERMIOS /* GNU/Hurd, GNU/KFreeBSD and GNU/KNetBSD */
-#endif
-
-#ifdef __MVS__
-#define SVR4
-#define USE_POSIX_TERMIOS
-#endif
-
-#ifdef __QNX__
-#define USE_POSIX_TERMIOS
-#endif
-
-#if defined(__osf__)
-#define USE_POSIX_TERMIOS
-#undef SYSV
-#endif
-
-/*
- * Indirect system dependencies
- */
-#if defined(SVR4) && !defined(__sgi)
-#define USE_TERMIOS
-#endif
-
-#ifdef SYSV
-#define USE_SYSV_TERMIO
-#endif
-
-#if defined(USE_POSIX_TERMIOS) && !defined(USE_TERMIOS)
-#define USE_TERMIOS
-#endif
-
-/*
- * Low-level ioctl, where it is needed or non-conflicting with termio/etc.
- */
-#ifdef __QNX__
-#include <ioctl.h>
-#else
-#include <sys/ioctl.h>
-#endif
-
-/*
- * Terminal I/O includes (termio, termios, sgtty headers).
- */
-#if defined(USE_POSIX_TERMIOS)
-#include <termios.h>
-#elif defined(USE_TERMIOS)
-#include <termios.h>
-/* this hacked termios support only works on SYSV */
-#define USE_ANY_SYSV_TERMIO
-#define termio termios
-#ifndef __CYGWIN__
-#undef TCGETA
-#define TCGETA TCGETS
-#undef TCSETA
-#define TCSETA TCSETS
-#undef TCSETAW
-#define TCSETAW TCSETSW
-#endif
-#elif defined(USE_SYSV_TERMIO)
-# define USE_ANY_SYSV_TERMIO
-# ifdef Lynx
-# include <termio.h>
-# else
-# include <sys/termio.h>
-# endif
-#elif defined(SYSV) || defined(ISC)
-# include <sys/termio.h>
-#elif !defined(VMS)
-# include <sgtty.h>
-#endif /* USE_POSIX_TERMIOS */
-
-/*
- * Stream includes, which declare struct winsize or ttysize.
- */
-#ifdef SYSV
-#ifdef USE_USG_PTYS
-#include <sys/stream.h> /* get typedef used in ptem.h */
-#if !defined(SVR4) || defined(__SCO__)
-#include <sys/ptem.h> /* get struct winsize */
-#endif
-#endif /* USE_USG_PTYS */
-#elif defined(sun) && !defined(SVR4)
-#include <sys/ttycom.h>
-#ifdef TIOCSWINSZ
-#undef TIOCSSIZE
-#endif
-#endif /* SYSV */
-
-/*
- * Special cases (structures and definitions that have to be adjusted).
- */
-#if defined(__CYGWIN__) && !defined(TIOCSPGRP)
-#include <termios.h>
-#define TIOCSPGRP (_IOW('t', 118, pid_t))
-#endif
-
-#ifdef __UNIXOS2__
-
-#define XFREE86_PTY 0x76
-
-#define XTY_TIOCSETA 0x48
-#define XTY_TIOCSETAW 0x49
-#define XTY_TIOCSETAF 0x4a
-#define XTY_TIOCCONS 0x4d
-#define XTY_TIOCSWINSZ 0x53
-#define XTY_ENADUP 0x5a
-#define XTY_TRACE 0x5b
-#define XTY_TIOCGETA 0x65
-#define XTY_TIOCGWINSZ 0x66
-#define PTMS_GETPTY 0x64
-#define PTMS_BUFSZ 14
-
-#ifndef NCCS
-#define NCCS 11
-#endif
-
-#define TIOCCONS 108
-#define TIOCSWINSZ 113
-#define TIOCGWINSZ 117
-
-struct pt_termios
-{
- unsigned short c_iflag;
- unsigned short c_oflag;
- unsigned short c_cflag;
- unsigned short c_lflag;
- unsigned char c_cc[NCCS];
- long _reserved_[4];
-};
-
-struct winsize {
- unsigned short ws_row; /* rows, in characters */
- unsigned short ws_col; /* columns, in characters */
- unsigned short ws_xpixel; /* horizontal size, pixels */
- unsigned short ws_ypixel; /* vertical size, pixels */
-};
-#define TTYSIZE_STRUCT struct winsize
-#define USE_STRUCT_WINSIZE 1
-
-#ifdef XTERM_MAIN
-extern int ptioctl(int fd, int func, void* data);
-#define ioctl ptioctl
-#endif
-
-#endif /* __UNIXOS2__ */
-
-#ifdef __hpux
-#include <sys/bsdtty.h> /* defines TIOCSLTC */
-#endif
-
-#ifdef ISC
-#define TIOCGPGRP TCGETPGRP
-#define TIOCSPGRP TCSETPGRP
-#endif
-
-#ifdef Lynx
-#include <resource.h>
-#elif !(defined(SYSV) || defined(linux) || defined(VMS) || (defined(__QNX__)&&!defined(__QNXNTO__)))
-#include <sys/resource.h>
-#endif
-
-#ifdef macII
-#undef FIOCLEX
-#undef FIONCLEX
-#endif /* macII */
-
-#ifdef __QNX__
-#undef TIOCSLTC /* <sgtty.h> conflicts with <termios.h> */
-#undef TIOCLSET
-#endif
-
-#if defined(__sgi) && (OSMAJORVERSION >= 5)
-#undef TIOCLSET /* defined, but not useable */
-#endif
-
-#if defined(__GNU__) || defined(__MVS__) || defined(__osf__)
-#undef TIOCLSET
-#undef TIOCSLTC
-#endif
-
-#if defined (__sgi) || (defined(__linux__) && defined(__sparc__)) || defined(__UNIXWARE__)
-#undef TIOCLSET /* XXX why is this undef-ed again? */
-#endif
-
-#if defined(sun) || defined(__UNIXWARE__)
-#include <sys/filio.h>
-#endif
-
-#if defined(TIOCSLTC) && ! (defined(linux) || defined(__MVS__) || defined(Lynx) || defined(SVR4))
-#define HAS_LTCHARS
-#endif
-
-#if !defined(TTYSIZE_STRUCT)
-#if defined(TIOCSSIZE) && (defined(sun) && !defined(SVR4))
-#define USE_STRUCT_TTYSIZE 1
-#define TTYSIZE_STRUCT struct ttysize
-#elif defined(TIOCSWINSZ)
-#define USE_STRUCT_WINSIZE 1
-#define TTYSIZE_STRUCT struct winsize
-#endif /* sun vs TIOCSWINSZ */
-#endif /* TTYSIZE_STRUCT */
-
-#if defined(USE_STRUCT_TTYSIZE)
-#define TTYSIZE_STRUCT struct ttysize
-#define SET_TTYSIZE(fd, data) ioctl(fd, TIOCSSIZE, &data);
-#define TTYSIZE_COLS(data) data.ts_cols
-#define TTYSIZE_ROWS(data) data.ts_lines
-#elif defined(USE_STRUCT_WINSIZE)
-#define TTYSIZE_STRUCT struct winsize
-#define SET_TTYSIZE(fd, data) ioctl(fd, TIOCSWINSZ, (char *) &data)
-#define TTYSIZE_COLS(data) data.ws_col
-#define TTYSIZE_ROWS(data) data.ws_row
-#endif
-
-#endif /* included_xterm_io_h */
diff --git a/nx-X11/programs/xterm/xtermcfg.hin b/nx-X11/programs/xterm/xtermcfg.hin
deleted file mode 100644
index b87f9ec13..000000000
--- a/nx-X11/programs/xterm/xtermcfg.hin
+++ /dev/null
@@ -1,176 +0,0 @@
-/* $XTermId: xtermcfg.hin,v 1.143 2005/11/03 13:17:28 tom Exp $ */
-
-/*
- * $XFree86: xc/programs/xterm/xtermcfg.hin,v 3.57 2005/11/03 13:17:28 dickey Exp $
- */
-
-/************************************************************
-
-Copyright 1997-2004,2005 by Thomas E. Dickey
-
- All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and its
-documentation for any purpose and without fee is hereby granted,
-provided that the above copyright notice appear in all copies and that
-both that copyright notice and this permission notice appear in
-supporting documentation, and that the name of the above listed
-copyright holder(s) not be used in advertising or publicity pertaining
-to distribution of the software without specific, written prior
-permission.
-
-THE ABOVE LISTED COPYRIGHT HOLDER(S) DISCLAIM ALL WARRANTIES WITH REGARD
-TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
-AND FITNESS, IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE
-LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
-ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
-OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-
-********************************************************/
-
-#ifndef included_xtermcfg_h
-#define included_xtermcfg_h 1
-
-/* This is a template for <xtermcfg.h> */
-
-#undef ALLOWLOGFILEEXEC /* CF_ARG_ENABLE(enable-logfile-exec) */
-#undef ALLOWLOGGING /* CF_ARG_ENABLE(enable-logging) */
-#undef CC_HAS_PROTOS /* CF_ANSI_CC */
-#undef DECL_ERRNO /* CF_ERRNO */
-#undef DFT_COLORMODE /* AC_ARG_WITH(default-color-mode) */
-#undef DFT_DECID /* AC_ARG_WITH(default-terminal-id) */
-#undef DFT_TERMTYPE /* AC_ARG_WITH(default-term-type) */
-#undef DISABLE_SETUID /* CF_ARG_DISABLE(setuid) */
-#undef HAVE_GETHOSTNAME /* AC_CHECK_FUNCS(gethostname) */
-#undef HAVE_GETLOGIN /* AC_CHECK_FUNCS(getlogin) */
-#undef HAVE_LANGINFO_CODESET /* AM_LANGINFO_CODESET */
-#undef HAVE_LASTLOG_H /* CF_LASTLOG */
-#undef HAVE_LIB_NEXTAW /* CF_X_ATHENA(--with-neXtaw) */
-#undef HAVE_LIB_XAW /* CF_X_ATHENA */
-#undef HAVE_LIB_XAW3D /* CF_X_ATHENA(--with-Xaw3d) */
-#undef HAVE_LIB_XAWPLUS /* CF_X_ATHENA(--with-XawPlus) */
-#undef HAVE_NCURSES_TERM_H /* AC_CHECK_HEADERS(ncurses/term.h) */
-#undef HAVE_PATHS_H /* CF_LASTLOG */
-#undef HAVE_PUTENV /* AC_CHECK_FUNCS(putenv) */
-#undef HAVE_SCHED_YIELD /* AC_CHECK_FUNCS(sched_yield) */
-#undef HAVE_STDLIB_H /* AC_CHECK_HEADERS(stdlib.h) */
-#undef HAVE_STRERROR /* AC_CHECK_FUNCS(strerror) */
-#undef HAVE_STRFTIME /* AC_CHECK_FUNCS(strftime) */
-#undef HAVE_SYS_TIME_H /* AC_HEADER_TIME */
-#undef HAVE_SYS_WAIT_H /* AC_HEADER_SYS_WAIT */
-#undef HAVE_TCGETATTR /* AC_CHECK_FUNCS(tcgetattr) */
-#undef HAVE_TERMCAP_H /* AC_CHECK_HEADERS(termcap.h) */
-#undef HAVE_TERMIOS_H /* AC_CHECK_HEADERS(termios.h) */
-#undef HAVE_TERMIO_C_ISPEED /* CF_TERMIO_C_ISPEED */
-#undef HAVE_UNISTD_H /* AC_CHECK_HEADERS(unistd.h) */
-#undef HAVE_UTMP /* CF_UTMP */
-#undef HAVE_UTMP_UT_HOST /* CF_UTMP_UT_HOST */
-#undef HAVE_UTMP_UT_SESSION /* CF_UTMP_UT_SESSION */
-#undef HAVE_UTMP_UT_XSTATUS /* CF_UTMP_UT_XSTATUS */
-#undef HAVE_UTMP_UT_XTIME /* CF_UTMP_UT_XTIME */
-#undef HAVE_WAITPID /* AC_CHECK_FUNCS(waitpid) */
-#undef HAVE_WCHAR_H /* AC_CHECK_HEADERS(wchar.h) */
-#undef HAVE_WCSWIDTH /* AC_CHECK_FUNCS(wcswidth) */
-#undef HAVE_WCWIDTH /* AC_CHECK_FUNCS(wcwidth) */
-#undef HAVE_X11_DECKEYSYM_H /* AC_CHECK_HEADERS(X11/DECkeysym.h) */
-#undef HAVE_X11_SUNKEYSYM_H /* AC_CHECK_HEADERS(X11/Sunkeysym.h) */
-#undef HAVE_X11_XPOLL_H /* AC_CHECK_HEADERS(X11/Xpoll.h) */
-#undef HAVE_XKB_BELL_EXT /* CF_XKB_BELL_EXT */
-#undef NO_ACTIVE_ICON /* CF_ARG_DISABLE(active-icon) */
-#undef OPT_256_COLORS /* CF_ARG_ENABLE(256-color) */
-#undef OPT_88_COLORS /* CF_ARG_ENABLE(88-color) */
-#undef OPT_AIX_COLORS /* CF_ARG_DISABLE(16-color) */
-#undef OPT_BLINK_CURS /* CF_ARG_DISABLE(blink-cursor) */
-#undef OPT_BLINK_TEXT /* CF_ARG_DISABLE(blink-text) */
-#undef OPT_BOX_CHARS /* CF_ARG_DISABLE(boxchars) */
-#undef OPT_BROKEN_OSC /* CF_ARG_ENABLE(broken-osc) */
-#undef OPT_BROKEN_ST /* CF_ARG_DISABLE(broken-st) */
-#undef OPT_C1_PRINT /* CF_ARG_DISABLE(c1-print) */
-#undef OPT_COLOR_CLASS /* CF_ARG_DISABLE(color-class) */
-#undef OPT_DABBREV /* CF_ARG_ENABLE(dabbrev) */
-#undef OPT_DEC_CHRSET /* CF_ARG_DISABLE(doublechars) */
-#undef OPT_DEC_LOCATOR /* CF_ARG_ENABLE(dec-locator) */
-#undef OPT_HIGHLIGHT_COLOR /* CF_ARG_DISABLE(highlighting) */
-#undef OPT_HP_FUNC_KEYS /* CF_ARG_ENABLE(hp-fkeys) */
-#undef OPT_I18N_SUPPORT /* CF_ARG_DISABLE(i18n) */
-#undef OPT_INITIAL_ERASE /* CF_ARG_DISABLE(initial-erase) */
-#undef OPT_INPUT_METHOD /* CF_ARG_DISABLE(input-method) */
-#undef OPT_ISO_COLORS /* CF_ARG_DISABLE(ansi-color) */
-#undef OPT_LOAD_VTFONTS /* CF_ARG_ENABLE(load-vt-fonts) */
-#undef OPT_LUIT_PROG /* CF_ARG_ENABLE(luit) */
-#undef OPT_MAXIMIZE /* CF_ARG_DISABLE(maximize) */
-#undef OPT_MINI_LUIT /* CF_ARG_ENABLE(mini-luit) */
-#undef OPT_NUM_LOCK /* CF_ARG_DISABLE(num-lock) */
-#undef OPT_PASTE64 /* CF_ARG_ENABLE(past64) */
-#undef OPT_PC_COLORS /* CF_ARG_DISABLE(pc-color) */
-#undef OPT_PTY_HANDSHAKE /* CF_ARG_ENABLE(pty-handshake) */
-#undef OPT_SAME_NAME /* CF_ARG_DISABLE(samename) */
-#undef OPT_SCO_FUNC_KEYS /* CF_ARG_ENABLE(sco-fkeys) */
-#undef OPT_SESSION_MGT /* CF_ARG_DISABLE(session-mgt) */
-#undef OPT_TCAP_QUERY /* CF_ARG_ENABLE(tcap-query) */
-#undef OPT_TEK4014 /* CF_ARG_DISABLE(tek4014) */
-#undef OPT_TOOLBAR /* CF_ARG_ENABLE(toolbar) */
-#undef OPT_TRACE /* CF_ARG_ENABLE(trace) */
-#undef OPT_VT52_MODE /* CF_ARG_DISABLE(vt52) */
-#undef OPT_WIDE_CHARS /* CF_ARG_OPTION(wide-chars) */
-#undef OPT_XMC_GLITCH /* CF_ARG_ENABLE(xmc-glitch) */
-#undef OPT_ZICONBEEP /* CF_ARG_DISABLE(ziconbeep) */
-#undef OWN_TERMINFO_DIR /* AC_ARG_WITH(own-terminfo) */
-#undef SCROLLBAR_RIGHT /* CF_ARG_ENABLE(rightbar) */
-#undef SIG_ATOMIC_T /* CF_SIG_ATOMIC_T */
-#undef SVR4 /* CF_SVR4, imake */
-#undef SYSV /* CF_SYSV, imake */
-#undef TIME_WITH_SYS_TIME /* AC_HEADER_TIME */
-#undef TTY_GROUP_NAME /* CF_TTY_GROUP */
-#undef USE_LASTLOG /* CF_LASTLOG */
-#undef USE_MY_MEMMOVE /* CF_FUNC_MEMMOVE */
-#undef USE_OK_BCOPY /* CF_FUNC_MEMMOVE */
-#undef USE_POSIX_WAIT /* CF_POSIX_WAIT */
-#undef USE_SYSV_UTMP /* CF_UTMP */
-#undef USE_SYS_SELECT_H /* CF_TYPE_FD_SET */
-#undef USE_TERMCAP /* CF_FUNC_TGETENT */
-#undef USE_TERMINFO /* CF_FUNC_TGETENT */
-#undef USE_TTY_GROUP /* CF_TTY_GROUP */
-#undef USE_UTMP_SETGID /* AC_ARG_WITH(utmp-setgid) */
-#undef USE_UTEMPTER /* CF_UTEMPTER */
-#undef UTMPX_FOR_UTMP /* CF_UTMP */
-#undef XRENDERFONT /* CF_X_FREETYPE */
-#undef const /* AC_CONST */
-#undef gid_t /* AC_TYPE_UID_T */
-#undef mode_t /* AC_TYPE_MODE_T */
-#undef pid_t /* AC_TYPE_PID_T */
-#undef size_t /* AC_TYPE_SIZE_T */
-#undef time_t /* AC_CHECK_TYPE(time_t, long) */
-#undef uid_t /* AC_TYPE_UID_T */
-#undef ut_name /* CF_UTMP */
-#undef ut_xstatus /* CF_UTMP_UT_XSTATUS */
-#undef ut_xtime /* CF_UTMP_UT_XTIME */
-
-/*
- * g++ support for __attribute__() is haphazard.
- */
-#ifndef __cplusplus
-#undef GCC_PRINTF
-#undef GCC_UNUSED
-#endif
-
-#ifdef USE_OK_BCOPY
-#define memmove(d,s,n) bcopy(s,d,n)
-#endif
-
-#ifdef USE_MY_MEMMOVE
-#define memmove(d,s,n) my_memmove(d,s,n)
-extern char * my_memmove(char * s1, char * s2, size_t n);
-#endif
-
-#ifndef HAVE_STRERROR
-#define strerror(n) my_strerror(n)
-extern char *my_strerror(int n);
-#endif
-
-#ifndef HAVE_X11_XPOLL_H
-#define NO_XPOLL_H /* X11R6.1 & up use Xpoll.h for select() definitions */
-#endif
-
-#endif /* included_xtermcfg_h */
diff --git a/nx-X11/programs/xterm/xutf8.c b/nx-X11/programs/xterm/xutf8.c
deleted file mode 100644
index 446ec9606..000000000
--- a/nx-X11/programs/xterm/xutf8.c
+++ /dev/null
@@ -1,378 +0,0 @@
-/* $XTermId: xutf8.c,v 1.8 2005/01/14 01:50:03 tom Exp $ */
-
-/* $XFree86: xc/programs/xterm/xutf8.c,v 1.4 2005/01/14 01:50:03 dickey Exp $ */
-/*
-Copyright (c) 2001 by Juliusz Chroboczek
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-
-#include <xterm.h>
-
-#include <X11/Xlib.h>
-#include <X11/Xatom.h>
-#include <X11/Xutil.h>
-#include <X11/Xmu/Xmu.h>
-
-#include <xutf8.h>
-
-#ifndef X_HAVE_UTF8_STRING
-
-#undef XA_UTF8_STRING
-#define KEYSYM2UCS_INCLUDED
-
-#include "keysym2ucs.c"
-
-Atom
-_xa_utf8_string(Display * dpy)
-{
- static AtomPtr p = NULL;
-
- if (p == NULL)
- p = XmuMakeAtom("UTF8_STRING");
-
- return XmuInternAtom(dpy, p);
-}
-#define XA_UTF8_STRING(dpy) _xa_utf8_string(dpy)
-
-static int
-utf8countBytes(int c)
-{
- if (c < 0)
- return 0;
-
- if (c <= 0x7F) {
- return 1;
- } else if (c <= 0x7FF) {
- return 2;
- } else if (c <= 0xFFFF) {
- return 3;
- } else
- return 4;
-}
-
-static void
-utf8insert(char *dest, int c, int *len_return)
-{
- if (c < 0)
- return;
-
- if (c <= 0x7F) {
- dest[0] = c;
- *len_return = 1;
- } else if (c <= 0x7FF) {
- dest[0] = 0xC0 | ((c >> 6) & 0x1F);
- dest[1] = 0x80 | (c & 0x3F);
- *len_return = 2;
- } else if (c <= 0xFFFF) {
- dest[0] = 0xE0 | ((c >> 12) & 0x0F);
- dest[1] = 0x80 | ((c >> 6) & 0x3F);
- dest[2] = 0x80 | (c & 0x3F);
- *len_return = 3;
- } else {
- dest[0] = 0xF0 | ((c >> 18) & 0x07);
- dest[1] = 0x80 | ((c >> 12) & 0x3f);
- dest[2] = 0x80 | ((c >> 6) & 0x3f);
- dest[3] = 0x80 | (c & 0x3f);
- *len_return = 4;
- }
-}
-
-static int
-l1countUtf8Bytes(char *s, int len)
-{
- int l = 0;
- while (len > 0) {
- if ((*s & 0x80) == 0)
- l++;
- else
- l += 2;
- s++;
- len--;
- }
- return l;
-}
-
-static void
-l1utf8copy(char *d, char *s, int len)
-{
- int l;
- while (len > 0) {
- utf8insert(d, (*s) & 0xFF, &l);
- d += l;
- s++;
- len--;
- }
-}
-
-static void
-utf8l1strcpy(char *d, char *s)
-{
-#define SKIP do { s++; } while(((*s & 0x80) != 0) && (*s & 0xC0) != 0xC0)
- while (*s) {
- if ((*s & 0x80) == 0)
- *d++ = *s++;
- else if ((*s & 0x7C) == 0x40) {
- if ((s[1] & 0x80) == 0) {
- s++; /* incorrect UTF-8 */
- continue;
- } else if ((*s & 0x7C) == 0x40) {
- *d++ = ((*s & 0x03) << 6) | (s[1] & 0x3F);
- s += 2;
- } else {
- *d++ = '?';
- SKIP;
- }
- } else {
- *d++ = '?';
- SKIP;
- }
- }
- *d = 0;
-#undef SKIP
-}
-
-/* Keep this in sync with utf8l1strcpy! */
-static int
-utf8l1strlen(char *s)
-{
-#define SKIP do { s++; } while(((*s & 0x80) != 0) && (*s & 0xC0) != 0xC0)
- int len = 0;
- while (*s) {
- if ((*s & 0x80) == 0) {
- s++;
- len++;
- } else if ((*s & 0x7C) == 0x40) {
- if ((s[1] & 0x80) == 0) {
- s++;
- continue;
- } else if ((*s & 0x7C) == 0x40) {
- len++;
- s += 2;
- } else {
- len++;
- SKIP;
- }
- } else {
- len++;
- SKIP;
- }
- }
-#undef SKIP
- return len;
-}
-
-int
-Xutf8TextPropertyToTextList(Display * dpy,
- const XTextProperty * tp,
- char ***list_return,
- int *count_return)
-{
- int utf8;
- char **list;
- int nelements;
- char *cp;
- char *start;
- int i, j;
- int datalen = (int) tp->nitems;
- int len;
-
- if (tp->format != 8)
- return XConverterNotFound;
-
- if (tp->encoding == XA_STRING)
- utf8 = 0;
- else if (tp->encoding == XA_UTF8_STRING(dpy))
- utf8 = 1;
- else
- return XConverterNotFound;
-
- if (datalen == 0) {
- *list_return = NULL;
- *count_return = 0;
- return 0;
- }
-
- nelements = 1;
- for (cp = (char *) tp->value, i = datalen; i > 0; cp++, i--) {
- if (*cp == '\0')
- nelements++;
- }
-
- list = TypeMallocN(char *, nelements);
- if (!list)
- return XNoMemory;
-
- if (utf8)
- len = datalen;
- else
- len = l1countUtf8Bytes((char *) tp->value, datalen);
-
- start = CastMallocN(char, len);
- if (!start) {
- free(list);
- return XNoMemory;
- }
-
- if (utf8)
- memcpy(start, (char *) tp->value, datalen);
- else
- l1utf8copy(start, (char *) tp->value, datalen);
- start[len] = '\0';
-
- for (cp = start, i = len + 1, j = 0; i > 0; cp++, i--) {
- if (*cp == '\0') {
- list[j] = start;
- start = (cp + 1);
- j++;
- }
- }
-
- list[j] = NULL;
- *list_return = list;
- *count_return = nelements;
- return 0;
-}
-
-int
-Xutf8TextListToTextProperty(Display * dpy,
- char **list,
- int count,
- XICCEncodingStyle style,
- XTextProperty * text_prop)
-{
- XTextProperty proto;
- unsigned int nbytes;
- int i;
-
- if (style != XStringStyle &&
- style != XCompoundTextStyle &&
- style != XStdICCTextStyle &&
- style != XUTF8StringStyle)
- return XConverterNotFound;
-
- if (style == XUTF8StringStyle) {
- for (i = 0, nbytes = 0; i < count; i++) {
- nbytes += (unsigned) ((list[i] ? strlen(list[i]) : 0) + 1);
- }
- } else {
- for (i = 0, nbytes = 0; i < count; i++) {
- nbytes += (unsigned) ((list[i] ? utf8l1strlen(list[i]) : 0) + 1);
- }
- }
-
- if (style == XCompoundTextStyle)
- proto.encoding = XA_COMPOUND_TEXT(dpy);
- else if (style == XUTF8StringStyle)
- proto.encoding = XA_UTF8_STRING(dpy);
- else
- proto.encoding = XA_STRING;
- proto.format = 8;
- if (nbytes)
- proto.nitems = nbytes - 1;
- else
- proto.nitems = 0;
- proto.value = NULL;
-
- if (nbytes > 0) {
- char *buf = TypeMallocN(char, nbytes);
- if (!buf)
- return XNoMemory;
-
- proto.value = (unsigned char *) buf;
- for (i = 0; i < count; i++) {
- char *arg = list[i];
-
- if (arg) {
- if (style == XUTF8StringStyle) {
- strcpy(buf, arg);
- } else {
- utf8l1strcpy(buf, arg);
- }
- buf += (strlen(buf) + 1);
- } else {
- *buf++ = '\0';
- }
- }
- } else {
- proto.value = CastMalloc(unsigned char); /* easier for client */
- if (!proto.value)
- return XNoMemory;
-
- proto.value[0] = '\0';
- }
-
- *text_prop = proto;
- return 0;
-}
-
-int
-Xutf8LookupString(XIC ic GCC_UNUSED,
- XKeyEvent * ev,
- char *buffer,
- int nbytes,
- KeySym * keysym_return,
- Status * status_return)
-{
- int rc;
- KeySym keysym;
- int codepoint;
- int len;
-
- rc = XLookupString(ev, buffer, nbytes, &keysym, NULL);
-
- if (rc > 0) {
- codepoint = buffer[0] & 0xFF;
- } else {
- codepoint = keysym2ucs(keysym);
- }
-
- if (codepoint < 0) {
- if (keysym == None) {
- *status_return = XLookupNone;
- } else {
- *status_return = XLookupKeySym;
- *keysym_return = keysym;
- }
- return 0;
- }
-
- if (nbytes < utf8countBytes(codepoint)) {
- *status_return = XBufferOverflow;
- return utf8countBytes(codepoint);
- }
-
- utf8insert(buffer, codepoint, &len);
-
- if (keysym != None) {
- *keysym_return = keysym;
- *status_return = XLookupBoth;
- } else {
- *status_return = XLookupChars;
- }
- return len;
-}
-#else /* X_HAVE_UTF8_STRING */
-/* Silence the compiler */
-void
-xutf8_dummy(void)
-{
- return;
-}
-#endif
diff --git a/nx-X11/programs/xterm/xutf8.h b/nx-X11/programs/xterm/xutf8.h
deleted file mode 100644
index f0cc561a2..000000000
--- a/nx-X11/programs/xterm/xutf8.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/* $XFree86: xc/programs/xterm/xutf8.h,v 1.1 2001/06/18 19:09:28 dickey Exp $ */
-/*
-Copyright (c) 2001 by Juliusz Chroboczek
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-
-#ifndef _XLIB_H_
-#error Please include <X11/Xlib.h> before "xutf8.h"
-#endif
-
-#ifndef X_HAVE_UTF8_STRING
-
-#undef XA_UTF8_STRING
-Atom _xa_utf8_string(Display*);
-#define XA_UTF8_STRING(dpy) _xa_utf8_string(dpy)
-
-#undef XUTF8StringStyle
-#define XUTF8StringStyle 4
-
-int Xutf8TextPropertyToTextList(
- Display *,
- const XTextProperty *,
- char ***,
- int *
-);
-int
-Xutf8TextListToTextProperty(
- Display *,
- char **,
- int,
- XICCEncodingStyle,
- XTextProperty *
-);
-int Xutf8LookupString(
- XIC,
- XKeyPressedEvent *,
- char *,
- int,
- KeySym *,
- Status *
-);
-#else
-void xutf8_dummy(void);
-#endif