annotate src/termcap.c @ 90906:f8694254fa1d

(w32font_info): Remove subranges. (QCsubranges, Qmodern, Qswiss, Qroman): Remove. (QCfamily, Qmonospace, Qsans_serif, Qmono, Qsans, Qsans__serif) (Qraster, Qoutline, Qlatin, Qgreek, Qcoptic, Qcyrillic, Qarmenian) (Qhebrew, Qarabic, Qsyriac, Qnko, Qthaana, Qdevanagari, Qbengali) (Qgurmukhi, Qgujarati, Qoriya, Qtamil, Qtelugu, Qkannada) (Qmalayalam, Qsinhala, Qthai, Qlao, Qtibetan, Qmyanmar, Qgeorgian) (Qhangul, Qethiopic, Qcherokee, Qcanadian_aboriginal, Qogham) (Qrunic, Qkhmer, Qmongolian, Qsymbol, Qbraille, Qhan) (Qideographic_description, Qcjk_misc, Qkana, Qbopomofo, Qkanbun) (Qyi, Qbyzantine_musical_symbol, Qmusical_symbol, Qmathematical): New symbols. (font_callback_data): New struct. (w32font_list, w32font_match): Use it. (w32font_open): Don't populate subranges. (w32font_has_char): Use script Lisp symbols, not subrange bitmask. (w32font_encode_char): Always return unicode code-point as-is. (w32font_text_extents): Supply a tranformation matrix to GetGlyphOutline. Never look up by glyph index. Avoid looping twice. Use unicode version of GetTexExtentPoint32 instead of glyph index version. (set_fonts_frame): Remove (w32_enumfont_pattern_entity): Add frame parameter, use it to set frame parameter. Use backward compatible fake foundries. Save generic family in extra slot under QCfamily. Make width slot constant. Save QCspacing value. Save list of scripts instead of binary subranges. (w32_generic_family, logfonts_match, font_matches_spec): New functions. (add_font_entity_to_list): Use font_callback_data struct. Filter unwanted fonts. (add_one_font_entity_to_list): Use font_callback_data struct. (w32_registry): Default to iso10646_1; (fill_in_logfont): Use dpi from extra slot. Don't bother with string font registries. Don't fill in font name if it is a generic family name, fill family instead. Use spacing, family and script extra info to fill pitch, family and charset fields. (list_all_matching_fonts): Use font_callback_data struct. (unicode_range_for_char): Remove. (font_supported_scripts): New function. (w32font_initialize): Remove. (syms_of_w32font): Update which symbols are defined.
author Jason Rumney <jasonr@gnu.org>
date Sat, 02 Jun 2007 23:42:23 +0000
parents 95d0cdf160ea
children 606f2d163a64
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
7306
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1 /* Work-alike for termcap, plus extra features.
64770
a0d1312ede66 Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 64084
diff changeset
2 Copyright (C) 1985, 1986, 1993, 1994, 1995, 2000, 2001, 2002, 2003,
75348
3d45362f1d38 Add 2007 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 68651
diff changeset
3 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
7306
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
4
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
5 This program is free software; you can redistribute it and/or modify
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
6 it under the terms of the GNU General Public License as published by
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
7 the Free Software Foundation; either version 2, or (at your option)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
8 any later version.
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
9
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
10 This program is distributed in the hope that it will be useful,
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
13 GNU General Public License for more details.
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
14
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
15 You should have received a copy of the GNU General Public License
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
16 along with this program; see the file COPYING. If not, write to
64084
a8fa7c632ee4 Update FSF's address.
Lute Kamstra <lute@gnu.org>
parents: 62654
diff changeset
17 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
a8fa7c632ee4 Update FSF's address.
Lute Kamstra <lute@gnu.org>
parents: 62654
diff changeset
18 Boston, MA 02110-1301, USA. */
7306
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
19
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
20 /* Emacs config.h may rename various library functions such as malloc. */
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
21 #ifdef HAVE_CONFIG_H
12994
bd38619285f7 Don't assume that HAVE_CONFIG_H implies emacs.
David J. MacKenzie <djm@gnu.org>
parents: 12907
diff changeset
22 #include <config.h>
bd38619285f7 Don't assume that HAVE_CONFIG_H implies emacs.
David J. MacKenzie <djm@gnu.org>
parents: 12907
diff changeset
23 #endif
7785
8a5a170b8646 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 7685
diff changeset
24
12994
bd38619285f7 Don't assume that HAVE_CONFIG_H implies emacs.
David J. MacKenzie <djm@gnu.org>
parents: 12907
diff changeset
25 #ifdef emacs
7785
8a5a170b8646 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 7685
diff changeset
26
29804
d8776351a540 [emacs] Test HAVE_FCNTL_H, not USG5. Include lisp.h and unistd.h.
Dave Love <fx@gnu.org>
parents: 23071
diff changeset
27 #include <lisp.h> /* xmalloc is here */
7785
8a5a170b8646 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 7685
diff changeset
28 /* Get the O_* definitions for open et al. */
8a5a170b8646 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 7685
diff changeset
29 #include <sys/file.h>
29804
d8776351a540 [emacs] Test HAVE_FCNTL_H, not USG5. Include lisp.h and unistd.h.
Dave Love <fx@gnu.org>
parents: 23071
diff changeset
30 #ifdef HAVE_FCNTL_H
7785
8a5a170b8646 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 7685
diff changeset
31 #include <fcntl.h>
8a5a170b8646 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 7685
diff changeset
32 #endif
29804
d8776351a540 [emacs] Test HAVE_FCNTL_H, not USG5. Include lisp.h and unistd.h.
Dave Love <fx@gnu.org>
parents: 23071
diff changeset
33 #ifdef HAVE_UNISTD_H
d8776351a540 [emacs] Test HAVE_FCNTL_H, not USG5. Include lisp.h and unistd.h.
Dave Love <fx@gnu.org>
parents: 23071
diff changeset
34 #include <unistd.h>
d8776351a540 [emacs] Test HAVE_FCNTL_H, not USG5. Include lisp.h and unistd.h.
Dave Love <fx@gnu.org>
parents: 23071
diff changeset
35 #endif
7785
8a5a170b8646 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 7685
diff changeset
36
12994
bd38619285f7 Don't assume that HAVE_CONFIG_H implies emacs.
David J. MacKenzie <djm@gnu.org>
parents: 12907
diff changeset
37 #else /* not emacs */
7306
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
38
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
39 #ifdef STDC_HEADERS
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
40 #include <stdlib.h>
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
41 #include <string.h>
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
42 #else
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
43 char *getenv ();
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
44 char *malloc ();
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
45 char *realloc ();
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
46 #endif
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
47
12675
8c9369149a9d Move #define of bcopy to after #include <string.h>.
David J. MacKenzie <djm@gnu.org>
parents: 11264
diff changeset
48 /* Do this after the include, in case string.h prototypes bcopy. */
8c9369149a9d Move #define of bcopy to after #include <string.h>.
David J. MacKenzie <djm@gnu.org>
parents: 11264
diff changeset
49 #if (defined(HAVE_STRING_H) || defined(STDC_HEADERS)) && !defined(bcopy)
8c9369149a9d Move #define of bcopy to after #include <string.h>.
David J. MacKenzie <djm@gnu.org>
parents: 11264
diff changeset
50 #define bcopy(s, d, n) memcpy ((d), (s), (n))
8c9369149a9d Move #define of bcopy to after #include <string.h>.
David J. MacKenzie <djm@gnu.org>
parents: 11264
diff changeset
51 #endif
8c9369149a9d Move #define of bcopy to after #include <string.h>.
David J. MacKenzie <djm@gnu.org>
parents: 11264
diff changeset
52
7306
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
53 #ifdef HAVE_UNISTD_H
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
54 #include <unistd.h>
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
55 #endif
51400
6b26c71e351d Use HAVE_FCNTL_H, not _POSIX_VERSION.
Dave Love <fx@gnu.org>
parents: 44890
diff changeset
56 #ifdef HAVE_FCNTL_H
7306
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
57 #include <fcntl.h>
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
58 #endif
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
59
12994
bd38619285f7 Don't assume that HAVE_CONFIG_H implies emacs.
David J. MacKenzie <djm@gnu.org>
parents: 12907
diff changeset
60 #endif /* not emacs */
7306
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
61
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
62 #ifndef NULL
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
63 #define NULL (char *) 0
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
64 #endif
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
65
7685
5fbc009f3dc3 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 7306
diff changeset
66 #ifndef O_RDONLY
5fbc009f3dc3 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 7306
diff changeset
67 #define O_RDONLY 0
5fbc009f3dc3 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 7306
diff changeset
68 #endif
5fbc009f3dc3 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 7306
diff changeset
69
7306
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
70 /* BUFSIZE is the initial size allocated for the buffer
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
71 for reading the termcap file.
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
72 It is not a limit.
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
73 Make it large normally for speed.
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
74 Make it variable when debugging, so can exercise
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
75 increasing the space dynamically. */
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
76
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
77 #ifndef BUFSIZE
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
78 #ifdef DEBUG
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
79 #define BUFSIZE bufsize
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
80
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
81 int bufsize = 128;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
82 #else
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
83 #define BUFSIZE 2048
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
84 #endif
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
85 #endif
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
86
12679
a14b26e55f25 TERMCAP_NAME -> TERMCAP_FILE.
David J. MacKenzie <djm@gnu.org>
parents: 12675
diff changeset
87 #ifndef TERMCAP_FILE
a14b26e55f25 TERMCAP_NAME -> TERMCAP_FILE.
David J. MacKenzie <djm@gnu.org>
parents: 12675
diff changeset
88 #define TERMCAP_FILE "/etc/termcap"
7306
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
89 #endif
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
90
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
91 #ifndef emacs
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
92 static void
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
93 memory_out ()
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
94 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
95 write (2, "virtual memory exhausted\n", 25);
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
96 exit (1);
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
97 }
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
98
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
99 static char *
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
100 xmalloc (size)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
101 unsigned size;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
102 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
103 register char *tem = malloc (size);
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
104
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
105 if (!tem)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
106 memory_out ();
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
107 return tem;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
108 }
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
109
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
110 static char *
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
111 xrealloc (ptr, size)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
112 char *ptr;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
113 unsigned size;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
114 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
115 register char *tem = realloc (ptr, size);
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
116
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
117 if (!tem)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
118 memory_out ();
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
119 return tem;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
120 }
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
121 #endif /* not emacs */
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
122
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
123 /* Looking up capabilities in the entry already found. */
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
124
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
125 /* The pointer to the data made by tgetent is left here
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
126 for tgetnum, tgetflag and tgetstr to find. */
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
127 static char *term_entry;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
128
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
129 static char *tgetst1 ();
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
130
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
131 /* Search entry BP for capability CAP.
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
132 Return a pointer to the capability (in BP) if found,
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
133 0 if not found. */
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
134
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
135 static char *
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
136 find_capability (bp, cap)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
137 register char *bp, *cap;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
138 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
139 for (; *bp; bp++)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
140 if (bp[0] == ':'
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
141 && bp[1] == cap[0]
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
142 && bp[2] == cap[1])
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
143 return &bp[4];
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
144 return NULL;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
145 }
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
146
44890
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents: 43713
diff changeset
147 /* These are already defined in the System framework in Mac OS X and
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents: 43713
diff changeset
148 cause prebinding to fail. */
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents: 43713
diff changeset
149 #ifndef MAC_OSX
7306
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
150 int
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
151 tgetnum (cap)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
152 char *cap;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
153 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
154 register char *ptr = find_capability (term_entry, cap);
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
155 if (!ptr || ptr[-1] != '#')
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
156 return -1;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
157 return atoi (ptr);
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
158 }
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
159
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
160 int
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
161 tgetflag (cap)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
162 char *cap;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
163 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
164 register char *ptr = find_capability (term_entry, cap);
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
165 return ptr && ptr[-1] == ':';
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
166 }
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
167
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
168 /* Look up a string-valued capability CAP.
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
169 If AREA is non-null, it points to a pointer to a block in which
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
170 to store the string. That pointer is advanced over the space used.
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
171 If AREA is null, space is allocated with `malloc'. */
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
172
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
173 char *
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
174 tgetstr (cap, area)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
175 char *cap;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
176 char **area;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
177 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
178 register char *ptr = find_capability (term_entry, cap);
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
179 if (!ptr || (ptr[-1] != '=' && ptr[-1] != '~'))
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
180 return NULL;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
181 return tgetst1 (ptr, area);
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
182 }
44890
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents: 43713
diff changeset
183 #endif /* MAC_OSX */
7306
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
184
23071
3790e185acc0 (tgetst1): Supprt EBCDIC systems.
Richard M. Stallman <rms@gnu.org>
parents: 22066
diff changeset
185 #ifdef IS_EBCDIC_HOST
3790e185acc0 (tgetst1): Supprt EBCDIC systems.
Richard M. Stallman <rms@gnu.org>
parents: 22066
diff changeset
186 /* Table, indexed by a character in range 0200 to 0300 with 0200 subtracted,
3790e185acc0 (tgetst1): Supprt EBCDIC systems.
Richard M. Stallman <rms@gnu.org>
parents: 22066
diff changeset
187 gives meaning of character following \, or a space if no special meaning.
3790e185acc0 (tgetst1): Supprt EBCDIC systems.
Richard M. Stallman <rms@gnu.org>
parents: 22066
diff changeset
188 Sixteen characters per line within the string. */
3790e185acc0 (tgetst1): Supprt EBCDIC systems.
Richard M. Stallman <rms@gnu.org>
parents: 22066
diff changeset
189
3790e185acc0 (tgetst1): Supprt EBCDIC systems.
Richard M. Stallman <rms@gnu.org>
parents: 22066
diff changeset
190 static char esctab[]
3790e185acc0 (tgetst1): Supprt EBCDIC systems.
Richard M. Stallman <rms@gnu.org>
parents: 22066
diff changeset
191 = " \057\026 \047\014 \
3790e185acc0 (tgetst1): Supprt EBCDIC systems.
Richard M. Stallman <rms@gnu.org>
parents: 22066
diff changeset
192 \025 \015 \
3790e185acc0 (tgetst1): Supprt EBCDIC systems.
Richard M. Stallman <rms@gnu.org>
parents: 22066
diff changeset
193 \005 \013 \
3790e185acc0 (tgetst1): Supprt EBCDIC systems.
Richard M. Stallman <rms@gnu.org>
parents: 22066
diff changeset
194 ";
3790e185acc0 (tgetst1): Supprt EBCDIC systems.
Richard M. Stallman <rms@gnu.org>
parents: 22066
diff changeset
195 #else
7306
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
196 /* Table, indexed by a character in range 0100 to 0140 with 0100 subtracted,
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
197 gives meaning of character following \, or a space if no special meaning.
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
198 Eight characters per line within the string. */
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
199
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
200 static char esctab[]
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
201 = " \007\010 \033\014 \
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
202 \012 \
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
203 \015 \011 \013 \
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
204 ";
23071
3790e185acc0 (tgetst1): Supprt EBCDIC systems.
Richard M. Stallman <rms@gnu.org>
parents: 22066
diff changeset
205 #endif
7306
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
206
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
207 /* PTR points to a string value inside a termcap entry.
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
208 Copy that value, processing \ and ^ abbreviations,
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
209 into the block that *AREA points to,
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
210 or to newly allocated storage if AREA is NULL.
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
211 Return the address to which we copied the value,
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
212 or NULL if PTR is NULL. */
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
213
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
214 static char *
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
215 tgetst1 (ptr, area)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
216 char *ptr;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
217 char **area;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
218 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
219 register char *p, *r;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
220 register int c;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
221 register int size;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
222 char *ret;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
223 register int c1;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
224
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
225 if (!ptr)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
226 return NULL;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
227
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
228 /* `ret' gets address of where to store the string. */
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
229 if (!area)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
230 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
231 /* Compute size of block needed (may overestimate). */
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
232 p = ptr;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
233 while ((c = *p++) && c != ':' && c != '\n')
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
234 ;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
235 ret = (char *) xmalloc (p - ptr + 1);
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
236 }
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
237 else
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
238 ret = *area;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
239
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
240 /* Copy the string value, stopping at null or colon.
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
241 Also process ^ and \ abbreviations. */
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
242 p = ptr;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
243 r = ret;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
244 while ((c = *p++) && c != ':' && c != '\n')
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
245 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
246 if (c == '^')
10186
af0b61d21a8f (tgetst1): Let ^? stand for DEL character.
Richard M. Stallman <rms@gnu.org>
parents: 7785
diff changeset
247 {
af0b61d21a8f (tgetst1): Let ^? stand for DEL character.
Richard M. Stallman <rms@gnu.org>
parents: 7785
diff changeset
248 c = *p++;
af0b61d21a8f (tgetst1): Let ^? stand for DEL character.
Richard M. Stallman <rms@gnu.org>
parents: 7785
diff changeset
249 if (c == '?')
af0b61d21a8f (tgetst1): Let ^? stand for DEL character.
Richard M. Stallman <rms@gnu.org>
parents: 7785
diff changeset
250 c = 0177;
af0b61d21a8f (tgetst1): Let ^? stand for DEL character.
Richard M. Stallman <rms@gnu.org>
parents: 7785
diff changeset
251 else
af0b61d21a8f (tgetst1): Let ^? stand for DEL character.
Richard M. Stallman <rms@gnu.org>
parents: 7785
diff changeset
252 c &= 037;
af0b61d21a8f (tgetst1): Let ^? stand for DEL character.
Richard M. Stallman <rms@gnu.org>
parents: 7785
diff changeset
253 }
7306
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
254 else if (c == '\\')
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
255 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
256 c = *p++;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
257 if (c >= '0' && c <= '7')
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
258 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
259 c -= '0';
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
260 size = 0;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
261
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
262 while (++size < 3 && (c1 = *p) >= '0' && c1 <= '7')
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
263 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
264 c *= 8;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
265 c += c1 - '0';
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
266 p++;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
267 }
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
268 }
23071
3790e185acc0 (tgetst1): Supprt EBCDIC systems.
Richard M. Stallman <rms@gnu.org>
parents: 22066
diff changeset
269 #ifdef IS_EBCDIC_HOST
3790e185acc0 (tgetst1): Supprt EBCDIC systems.
Richard M. Stallman <rms@gnu.org>
parents: 22066
diff changeset
270 else if (c >= 0200 && c < 0360)
3790e185acc0 (tgetst1): Supprt EBCDIC systems.
Richard M. Stallman <rms@gnu.org>
parents: 22066
diff changeset
271 {
3790e185acc0 (tgetst1): Supprt EBCDIC systems.
Richard M. Stallman <rms@gnu.org>
parents: 22066
diff changeset
272 c1 = esctab[(c & ~0100) - 0200];
3790e185acc0 (tgetst1): Supprt EBCDIC systems.
Richard M. Stallman <rms@gnu.org>
parents: 22066
diff changeset
273 if (c1 != ' ')
3790e185acc0 (tgetst1): Supprt EBCDIC systems.
Richard M. Stallman <rms@gnu.org>
parents: 22066
diff changeset
274 c = c1;
3790e185acc0 (tgetst1): Supprt EBCDIC systems.
Richard M. Stallman <rms@gnu.org>
parents: 22066
diff changeset
275 }
3790e185acc0 (tgetst1): Supprt EBCDIC systems.
Richard M. Stallman <rms@gnu.org>
parents: 22066
diff changeset
276 #else
7306
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
277 else if (c >= 0100 && c < 0200)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
278 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
279 c1 = esctab[(c & ~040) - 0100];
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
280 if (c1 != ' ')
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
281 c = c1;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
282 }
23071
3790e185acc0 (tgetst1): Supprt EBCDIC systems.
Richard M. Stallman <rms@gnu.org>
parents: 22066
diff changeset
283 #endif
7306
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
284 }
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
285 *r++ = c;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
286 }
53306
9e78a65be39a (tgetst1): Scan for "%pN"; if all
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
287
9e78a65be39a (tgetst1): Scan for "%pN"; if all
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
288 /* Sometimes entries have "%pN" which means use parameter N in the
9e78a65be39a (tgetst1): Scan for "%pN"; if all
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
289 next %-substitution. If all such N are continuous in the range
9e78a65be39a (tgetst1): Scan for "%pN"; if all
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
290 [1,9] we can remove each "%pN" because they are redundant, thus
9e78a65be39a (tgetst1): Scan for "%pN"; if all
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
291 reducing bandwidth requirements. True, Emacs is well beyond the
9e78a65be39a (tgetst1): Scan for "%pN"; if all
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
292 days of 150baud teletypes, but some of its users aren't much so.
9e78a65be39a (tgetst1): Scan for "%pN"; if all
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
293
9e78a65be39a (tgetst1): Scan for "%pN"; if all
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
294 This pass could probably be integrated into the one above but
9e78a65be39a (tgetst1): Scan for "%pN"; if all
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
295 abbreviation expansion makes that effort a little more hairy than
9e78a65be39a (tgetst1): Scan for "%pN"; if all
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
296 its worth; this is cleaner. */
9e78a65be39a (tgetst1): Scan for "%pN"; if all
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
297 {
9e78a65be39a (tgetst1): Scan for "%pN"; if all
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
298 register int last_p_param = 0;
9e78a65be39a (tgetst1): Scan for "%pN"; if all
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
299 int remove_p_params = 1;
9e78a65be39a (tgetst1): Scan for "%pN"; if all
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
300 struct { char *beg; int len; } cut[11];
9e78a65be39a (tgetst1): Scan for "%pN"; if all
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
301
9e78a65be39a (tgetst1): Scan for "%pN"; if all
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
302 for (cut[0].beg = p = ret; p < r - 3; p++)
9e78a65be39a (tgetst1): Scan for "%pN"; if all
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
303 {
9e78a65be39a (tgetst1): Scan for "%pN"; if all
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
304 if (!remove_p_params)
9e78a65be39a (tgetst1): Scan for "%pN"; if all
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
305 break;
9e78a65be39a (tgetst1): Scan for "%pN"; if all
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
306 if (*p == '%' && *(p + 1) == 'p')
9e78a65be39a (tgetst1): Scan for "%pN"; if all
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
307 {
9e78a65be39a (tgetst1): Scan for "%pN"; if all
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
308 if (*(p + 2) - '0' == 1 + last_p_param)
9e78a65be39a (tgetst1): Scan for "%pN"; if all
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
309 {
9e78a65be39a (tgetst1): Scan for "%pN"; if all
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
310 cut[last_p_param].len = p - cut[last_p_param].beg;
9e78a65be39a (tgetst1): Scan for "%pN"; if all
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
311 last_p_param++;
9e78a65be39a (tgetst1): Scan for "%pN"; if all
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
312 p += 3;
9e78a65be39a (tgetst1): Scan for "%pN"; if all
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
313 cut[last_p_param].beg = p;
9e78a65be39a (tgetst1): Scan for "%pN"; if all
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
314 }
9e78a65be39a (tgetst1): Scan for "%pN"; if all
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
315 else /* not continuous: bail */
9e78a65be39a (tgetst1): Scan for "%pN"; if all
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
316 remove_p_params = 0;
9e78a65be39a (tgetst1): Scan for "%pN"; if all
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
317 if (last_p_param > 10) /* too many: bail */
9e78a65be39a (tgetst1): Scan for "%pN"; if all
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
318 remove_p_params = 0;
9e78a65be39a (tgetst1): Scan for "%pN"; if all
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
319 }
9e78a65be39a (tgetst1): Scan for "%pN"; if all
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
320 }
9e78a65be39a (tgetst1): Scan for "%pN"; if all
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
321 if (remove_p_params && last_p_param)
9e78a65be39a (tgetst1): Scan for "%pN"; if all
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
322 {
9e78a65be39a (tgetst1): Scan for "%pN"; if all
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
323 register int i;
9e78a65be39a (tgetst1): Scan for "%pN"; if all
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
324 char *wp;
9e78a65be39a (tgetst1): Scan for "%pN"; if all
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
325
9e78a65be39a (tgetst1): Scan for "%pN"; if all
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
326 cut[last_p_param].len = r - cut[last_p_param].beg;
9e78a65be39a (tgetst1): Scan for "%pN"; if all
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
327 for (i = 0, wp = ret; i <= last_p_param; wp += cut[i++].len)
9e78a65be39a (tgetst1): Scan for "%pN"; if all
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
328 bcopy (cut[i].beg, wp, cut[i].len);
9e78a65be39a (tgetst1): Scan for "%pN"; if all
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
329 r = wp;
9e78a65be39a (tgetst1): Scan for "%pN"; if all
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
330 }
9e78a65be39a (tgetst1): Scan for "%pN"; if all
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
331 }
9e78a65be39a (tgetst1): Scan for "%pN"; if all
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
332
7306
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
333 *r = '\0';
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
334 /* Update *AREA. */
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
335 if (area)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
336 *area = r + 1;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
337 return ret;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
338 }
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
339
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
340 /* Outputting a string with padding. */
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
341
43674
53deca397c95 [!emacs]: Replace ospeed for building standalone
Richard M. Stallman <rms@gnu.org>
parents: 37914
diff changeset
342 #ifndef emacs
53deca397c95 [!emacs]: Replace ospeed for building standalone
Richard M. Stallman <rms@gnu.org>
parents: 37914
diff changeset
343 short ospeed;
7306
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
344 /* If OSPEED is 0, we use this as the actual baud rate. */
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
345 int tputs_baud_rate;
43674
53deca397c95 [!emacs]: Replace ospeed for building standalone
Richard M. Stallman <rms@gnu.org>
parents: 37914
diff changeset
346 #endif
44890
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents: 43713
diff changeset
347
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents: 43713
diff changeset
348 /* Already defined in the System framework in Mac OS X and causes
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents: 43713
diff changeset
349 prebinding to fail. */
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents: 43713
diff changeset
350 #ifndef MAC_OSX
7306
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
351 char PC;
44890
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents: 43713
diff changeset
352 #endif /* MAC_OSX */
7306
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
353
43674
53deca397c95 [!emacs]: Replace ospeed for building standalone
Richard M. Stallman <rms@gnu.org>
parents: 37914
diff changeset
354 #ifndef emacs
7306
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
355 /* Actual baud rate if positive;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
356 - baud rate / 100 if negative. */
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
357
10739
97096cdf6e55 (speeds): Make it ints. Add some higher speeds.
Richard M. Stallman <rms@gnu.org>
parents: 10186
diff changeset
358 static int speeds[] =
7306
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
359 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
360 #ifdef VMS
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
361 0, 50, 75, 110, 134, 150, -3, -6, -12, -18,
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
362 -20, -24, -36, -48, -72, -96, -192
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
363 #else /* not VMS */
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
364 0, 50, 75, 110, 135, 150, -2, -3, -6, -12,
10739
97096cdf6e55 (speeds): Make it ints. Add some higher speeds.
Richard M. Stallman <rms@gnu.org>
parents: 10186
diff changeset
365 -18, -24, -48, -96, -192, -288, -384, -576, -1152
7306
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
366 #endif /* not VMS */
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
367 };
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
368
43674
53deca397c95 [!emacs]: Replace ospeed for building standalone
Richard M. Stallman <rms@gnu.org>
parents: 37914
diff changeset
369 #endif /* not emacs */
37914
055740f4bc36 (speeds): Put in #if 0.
Gerd Moellmann <gerd@gnu.org>
parents: 34358
diff changeset
370
44890
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents: 43713
diff changeset
371 /* Already defined in the System framework in Mac OS X and causes
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents: 43713
diff changeset
372 prebinding to fail. */
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents: 43713
diff changeset
373 #ifndef MAC_OSX
7306
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
374 void
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
375 tputs (str, nlines, outfun)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
376 register char *str;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
377 int nlines;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
378 register int (*outfun) ();
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
379 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
380 register int padcount = 0;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
381 register int speed;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
382
43674
53deca397c95 [!emacs]: Replace ospeed for building standalone
Richard M. Stallman <rms@gnu.org>
parents: 37914
diff changeset
383 #ifdef emacs
43713
f92c4d87863a Change defvar_int def and vars to use EMACS_INT instead of just int.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43674
diff changeset
384 extern EMACS_INT baud_rate;
7306
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
385 speed = baud_rate;
10739
97096cdf6e55 (speeds): Make it ints. Add some higher speeds.
Richard M. Stallman <rms@gnu.org>
parents: 10186
diff changeset
386 /* For quite high speeds, convert to the smaller
97096cdf6e55 (speeds): Make it ints. Add some higher speeds.
Richard M. Stallman <rms@gnu.org>
parents: 10186
diff changeset
387 units to avoid overflow. */
97096cdf6e55 (speeds): Make it ints. Add some higher speeds.
Richard M. Stallman <rms@gnu.org>
parents: 10186
diff changeset
388 if (speed > 10000)
97096cdf6e55 (speeds): Make it ints. Add some higher speeds.
Richard M. Stallman <rms@gnu.org>
parents: 10186
diff changeset
389 speed = - speed / 100;
43674
53deca397c95 [!emacs]: Replace ospeed for building standalone
Richard M. Stallman <rms@gnu.org>
parents: 37914
diff changeset
390 #else
53deca397c95 [!emacs]: Replace ospeed for building standalone
Richard M. Stallman <rms@gnu.org>
parents: 37914
diff changeset
391 if (ospeed == 0)
53deca397c95 [!emacs]: Replace ospeed for building standalone
Richard M. Stallman <rms@gnu.org>
parents: 37914
diff changeset
392 speed = tputs_baud_rate;
53deca397c95 [!emacs]: Replace ospeed for building standalone
Richard M. Stallman <rms@gnu.org>
parents: 37914
diff changeset
393 else
53deca397c95 [!emacs]: Replace ospeed for building standalone
Richard M. Stallman <rms@gnu.org>
parents: 37914
diff changeset
394 speed = speeds[ospeed];
53deca397c95 [!emacs]: Replace ospeed for building standalone
Richard M. Stallman <rms@gnu.org>
parents: 37914
diff changeset
395 #endif
7306
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
396
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
397 if (!str)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
398 return;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
399
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
400 while (*str >= '0' && *str <= '9')
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
401 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
402 padcount += *str++ - '0';
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
403 padcount *= 10;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
404 }
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
405 if (*str == '.')
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
406 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
407 str++;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
408 padcount += *str++ - '0';
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
409 }
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
410 if (*str == '*')
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
411 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
412 str++;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
413 padcount *= nlines;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
414 }
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
415 while (*str)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
416 (*outfun) (*str++);
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
417
10739
97096cdf6e55 (speeds): Make it ints. Add some higher speeds.
Richard M. Stallman <rms@gnu.org>
parents: 10186
diff changeset
418 /* PADCOUNT is now in units of tenths of msec.
10753
e0de204ec865 Comment changed.
Richard M. Stallman <rms@gnu.org>
parents: 10739
diff changeset
419 SPEED is measured in characters per 10 seconds
10739
97096cdf6e55 (speeds): Make it ints. Add some higher speeds.
Richard M. Stallman <rms@gnu.org>
parents: 10186
diff changeset
420 or in characters per .1 seconds (if negative).
97096cdf6e55 (speeds): Make it ints. Add some higher speeds.
Richard M. Stallman <rms@gnu.org>
parents: 10186
diff changeset
421 We use the smaller units for larger speeds to avoid overflow. */
97096cdf6e55 (speeds): Make it ints. Add some higher speeds.
Richard M. Stallman <rms@gnu.org>
parents: 10186
diff changeset
422 padcount *= speed;
7306
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
423 padcount += 500;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
424 padcount /= 1000;
10739
97096cdf6e55 (speeds): Make it ints. Add some higher speeds.
Richard M. Stallman <rms@gnu.org>
parents: 10186
diff changeset
425 if (speed < 0)
7306
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
426 padcount = -padcount;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
427 else
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
428 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
429 padcount += 50;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
430 padcount /= 100;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
431 }
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
432
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
433 while (padcount-- > 0)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
434 (*outfun) (PC);
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
435 }
44890
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents: 43713
diff changeset
436 #endif /* MAC_OSX */
7306
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
437
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
438 /* Finding the termcap entry in the termcap data base. */
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
439
22066
a09f2b697d0a Renamed "struct buffer" to "struct termcap_buffer" to
Richard M. Stallman <rms@gnu.org>
parents: 14414
diff changeset
440 struct termcap_buffer
7306
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
441 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
442 char *beg;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
443 int size;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
444 char *ptr;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
445 int ateof;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
446 int full;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
447 };
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
448
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
449 /* Forward declarations of static functions. */
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
450
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
451 static int scan_file ();
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
452 static char *gobble_line ();
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
453 static int compare_contin ();
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
454 static int name_match ();
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
455
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
456 #ifdef VMS
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
457
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
458 #include <rmsdef.h>
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
459 #include <fab.h>
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
460 #include <nam.h>
62654
f2856e1d7f71 [VMS] Include <starlet.h>.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 53306
diff changeset
461 #include <starlet.h>
7306
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
462
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
463 static int
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
464 valid_filename_p (fn)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
465 char *fn;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
466 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
467 struct FAB fab = cc$rms_fab;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
468 struct NAM nam = cc$rms_nam;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
469 char esa[NAM$C_MAXRSS];
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
470
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
471 fab.fab$l_fna = fn;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
472 fab.fab$b_fns = strlen(fn);
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
473 fab.fab$l_nam = &nam;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
474 fab.fab$l_fop = FAB$M_NAM;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
475
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
476 nam.nam$l_esa = esa;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
477 nam.nam$b_ess = sizeof esa;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
478
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
479 return SYS$PARSE(&fab, 0, 0) == RMS$_NORMAL;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
480 }
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
481
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
482 #else /* !VMS */
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
483
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
484 #ifdef MSDOS /* MW, May 1993 */
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
485 static int
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
486 valid_filename_p (fn)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
487 char *fn;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
488 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
489 return *fn == '/' || fn[1] == ':';
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
490 }
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
491 #else
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
492 #define valid_filename_p(fn) (*(fn) == '/')
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
493 #endif
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
494
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
495 #endif /* !VMS */
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
496
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
497 /* Find the termcap entry data for terminal type NAME
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
498 and store it in the block that BP points to.
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
499 Record its address for future use.
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
500
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
501 If BP is null, space is dynamically allocated.
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
502
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
503 Return -1 if there is some difficulty accessing the data base
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
504 of terminal types,
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
505 0 if the data base is accessible but the type NAME is not defined
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
506 in it, and some other value otherwise. */
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
507
44890
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents: 43713
diff changeset
508 /* Already defined in the System framework in Mac OS X and causes
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents: 43713
diff changeset
509 prebinding to fail. */
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents: 43713
diff changeset
510 #ifndef MAC_OSX
7306
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
511 int
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
512 tgetent (bp, name)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
513 char *bp, *name;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
514 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
515 register char *termcap_name;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
516 register int fd;
22066
a09f2b697d0a Renamed "struct buffer" to "struct termcap_buffer" to
Richard M. Stallman <rms@gnu.org>
parents: 14414
diff changeset
517 struct termcap_buffer buf;
7306
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
518 register char *bp1;
14132
85063feb159b (tgetent): Find all the tc caps that there are.
Karl Heuer <kwzh@gnu.org>
parents: 13677
diff changeset
519 char *tc_search_point;
7306
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
520 char *term;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
521 int malloc_size = 0;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
522 register int c;
33616
f7e2e0758251 (ospeed): Remove.
Gerd Moellmann <gerd@gnu.org>
parents: 29804
diff changeset
523 char *tcenv = NULL; /* TERMCAP value, if it contains :tc=. */
7306
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
524 char *indirect = NULL; /* Terminal type in :tc= in TERMCAP value. */
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
525 int filep;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
526
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
527 #ifdef INTERNAL_TERMINAL
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
528 /* For the internal terminal we don't want to read any termcap file,
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
529 so fake it. */
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
530 if (!strcmp (name, "internal"))
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
531 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
532 term = INTERNAL_TERMINAL;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
533 if (!bp)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
534 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
535 malloc_size = 1 + strlen (term);
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
536 bp = (char *) xmalloc (malloc_size);
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
537 }
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
538 strcpy (bp, term);
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
539 goto ret;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
540 }
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
541 #endif /* INTERNAL_TERMINAL */
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
542
12907
6cae53a06172 default to user-supplied buffer.
David J. MacKenzie <djm@gnu.org>
parents: 12679
diff changeset
543 /* For compatibility with programs like `less' that want to
6cae53a06172 default to user-supplied buffer.
David J. MacKenzie <djm@gnu.org>
parents: 12679
diff changeset
544 put data in the termcap buffer themselves as a fallback. */
6cae53a06172 default to user-supplied buffer.
David J. MacKenzie <djm@gnu.org>
parents: 12679
diff changeset
545 if (bp)
6cae53a06172 default to user-supplied buffer.
David J. MacKenzie <djm@gnu.org>
parents: 12679
diff changeset
546 term_entry = bp;
6cae53a06172 default to user-supplied buffer.
David J. MacKenzie <djm@gnu.org>
parents: 12679
diff changeset
547
7306
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
548 termcap_name = getenv ("TERMCAP");
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
549 if (termcap_name && *termcap_name == '\0')
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
550 termcap_name = NULL;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
551 #if defined (MSDOS) && !defined (TEST)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
552 if (termcap_name && (*termcap_name == '\\'
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
553 || *termcap_name == '/'
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
554 || termcap_name[1] == ':'))
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
555 dostounix_filename(termcap_name);
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
556 #endif
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
557
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
558 filep = termcap_name && valid_filename_p (termcap_name);
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
559
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
560 /* If termcap_name is non-null and starts with / (in the un*x case, that is),
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
561 it is a file name to use instead of /etc/termcap.
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
562 If it is non-null and does not start with /,
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
563 it is the entry itself, but only if
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
564 the name the caller requested matches the TERM variable. */
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
565
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
566 if (termcap_name && !filep && !strcmp (name, getenv ("TERM")))
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
567 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
568 indirect = tgetst1 (find_capability (termcap_name, "tc"), (char **) 0);
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
569 if (!indirect)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
570 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
571 if (!bp)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
572 bp = termcap_name;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
573 else
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
574 strcpy (bp, termcap_name);
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
575 goto ret;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
576 }
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
577 else
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
578 { /* It has tc=. Need to read /etc/termcap. */
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
579 tcenv = termcap_name;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
580 termcap_name = NULL;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
581 }
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
582 }
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
583
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
584 if (!termcap_name || !filep)
12679
a14b26e55f25 TERMCAP_NAME -> TERMCAP_FILE.
David J. MacKenzie <djm@gnu.org>
parents: 12675
diff changeset
585 termcap_name = TERMCAP_FILE;
7306
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
586
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
587 /* Here we know we must search a file and termcap_name has its name. */
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
588
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
589 #ifdef MSDOS
7685
5fbc009f3dc3 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 7306
diff changeset
590 fd = open (termcap_name, O_RDONLY|O_TEXT, 0);
7306
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
591 #else
7685
5fbc009f3dc3 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 7306
diff changeset
592 fd = open (termcap_name, O_RDONLY, 0);
7306
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
593 #endif
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
594 if (fd < 0)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
595 return -1;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
596
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
597 buf.size = BUFSIZE;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
598 /* Add 1 to size to ensure room for terminating null. */
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
599 buf.beg = (char *) xmalloc (buf.size + 1);
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
600 term = indirect ? indirect : name;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
601
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
602 if (!bp)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
603 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
604 malloc_size = indirect ? strlen (tcenv) + 1 : buf.size;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
605 bp = (char *) xmalloc (malloc_size);
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
606 }
14132
85063feb159b (tgetent): Find all the tc caps that there are.
Karl Heuer <kwzh@gnu.org>
parents: 13677
diff changeset
607 tc_search_point = bp1 = bp;
7306
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
608
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
609 if (indirect)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
610 /* Copy the data from the environment variable. */
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
611 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
612 strcpy (bp, tcenv);
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
613 bp1 += strlen (tcenv);
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
614 }
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
615
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
616 while (term)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
617 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
618 /* Scan the file, reading it via buf, till find start of main entry. */
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
619 if (scan_file (term, fd, &buf) == 0)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
620 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
621 close (fd);
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
622 free (buf.beg);
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
623 if (malloc_size)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
624 free (bp);
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
625 return 0;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
626 }
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
627
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
628 /* Free old `term' if appropriate. */
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
629 if (term != name)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
630 free (term);
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
631
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
632 /* If BP is malloc'd by us, make sure it is big enough. */
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
633 if (malloc_size)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
634 {
34358
aa3b69684dbf (tgetent): Change the way buffers are reallocated to
Gerd Moellmann <gerd@gnu.org>
parents: 33616
diff changeset
635 int offset1 = bp1 - bp, offset2 = tc_search_point - bp;
aa3b69684dbf (tgetent): Change the way buffers are reallocated to
Gerd Moellmann <gerd@gnu.org>
parents: 33616
diff changeset
636 malloc_size = offset1 + buf.size;
aa3b69684dbf (tgetent): Change the way buffers are reallocated to
Gerd Moellmann <gerd@gnu.org>
parents: 33616
diff changeset
637 bp = termcap_name = (char *) xrealloc (bp, malloc_size);
aa3b69684dbf (tgetent): Change the way buffers are reallocated to
Gerd Moellmann <gerd@gnu.org>
parents: 33616
diff changeset
638 bp1 = termcap_name + offset1;
aa3b69684dbf (tgetent): Change the way buffers are reallocated to
Gerd Moellmann <gerd@gnu.org>
parents: 33616
diff changeset
639 tc_search_point = termcap_name + offset2;
7306
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
640 }
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
641
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
642 /* Copy the line of the entry from buf into bp. */
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
643 termcap_name = buf.ptr;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
644 while ((*bp1++ = c = *termcap_name++) && c != '\n')
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
645 /* Drop out any \ newline sequence. */
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
646 if (c == '\\' && *termcap_name == '\n')
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
647 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
648 bp1--;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
649 termcap_name++;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
650 }
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
651 *bp1 = '\0';
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
652
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
653 /* Does this entry refer to another terminal type's entry?
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
654 If something is found, copy it into heap and null-terminate it. */
14132
85063feb159b (tgetent): Find all the tc caps that there are.
Karl Heuer <kwzh@gnu.org>
parents: 13677
diff changeset
655 tc_search_point = find_capability (tc_search_point, "tc");
85063feb159b (tgetent): Find all the tc caps that there are.
Karl Heuer <kwzh@gnu.org>
parents: 13677
diff changeset
656 term = tgetst1 (tc_search_point, (char **) 0);
7306
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
657 }
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
658
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
659 close (fd);
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
660 free (buf.beg);
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
661
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
662 if (malloc_size)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
663 bp = (char *) xrealloc (bp, bp1 - bp + 1);
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
664
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
665 ret:
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
666 term_entry = bp;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
667 return 1;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
668 }
44890
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents: 43713
diff changeset
669 #endif /* MAC_OSX */
7306
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
670
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
671 /* Given file open on FD and buffer BUFP,
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
672 scan the file from the beginning until a line is found
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
673 that starts the entry for terminal type STR.
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
674 Return 1 if successful, with that line in BUFP,
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
675 or 0 if no entry is found in the file. */
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
676
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
677 static int
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
678 scan_file (str, fd, bufp)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
679 char *str;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
680 int fd;
22066
a09f2b697d0a Renamed "struct buffer" to "struct termcap_buffer" to
Richard M. Stallman <rms@gnu.org>
parents: 14414
diff changeset
681 register struct termcap_buffer *bufp;
7306
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
682 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
683 register char *end;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
684
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
685 bufp->ptr = bufp->beg;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
686 bufp->full = 0;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
687 bufp->ateof = 0;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
688 *bufp->ptr = '\0';
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
689
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
690 lseek (fd, 0L, 0);
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
691
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
692 while (!bufp->ateof)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
693 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
694 /* Read a line into the buffer. */
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
695 end = NULL;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
696 do
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
697 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
698 /* if it is continued, append another line to it,
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
699 until a non-continued line ends. */
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
700 end = gobble_line (fd, bufp, end);
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
701 }
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
702 while (!bufp->ateof && end[-2] == '\\');
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
703
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
704 if (*bufp->ptr != '#'
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
705 && name_match (bufp->ptr, str))
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
706 return 1;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
707
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
708 /* Discard the line just processed. */
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
709 bufp->ptr = end;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
710 }
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
711 return 0;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
712 }
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
713
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
714 /* Return nonzero if NAME is one of the names specified
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
715 by termcap entry LINE. */
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
716
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
717 static int
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
718 name_match (line, name)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
719 char *line, *name;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
720 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
721 register char *tem;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
722
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
723 if (!compare_contin (line, name))
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
724 return 1;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
725 /* This line starts an entry. Is it the right one? */
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
726 for (tem = line; *tem && *tem != '\n' && *tem != ':'; tem++)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
727 if (*tem == '|' && !compare_contin (tem + 1, name))
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
728 return 1;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
729
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
730 return 0;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
731 }
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
732
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
733 static int
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
734 compare_contin (str1, str2)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
735 register char *str1, *str2;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
736 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
737 register int c1, c2;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
738 while (1)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
739 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
740 c1 = *str1++;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
741 c2 = *str2++;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
742 while (c1 == '\\' && *str1 == '\n')
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
743 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
744 str1++;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
745 while ((c1 = *str1++) == ' ' || c1 == '\t');
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
746 }
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
747 if (c2 == '\0')
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
748 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
749 /* End of type being looked up. */
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
750 if (c1 == '|' || c1 == ':')
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
751 /* If end of name in data base, we win. */
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
752 return 0;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
753 else
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
754 return 1;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
755 }
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
756 else if (c1 != c2)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
757 return 1;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
758 }
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
759 }
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
760
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
761 /* Make sure that the buffer <- BUFP contains a full line
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
762 of the file open on FD, starting at the place BUFP->ptr
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
763 points to. Can read more of the file, discard stuff before
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
764 BUFP->ptr, or make the buffer bigger.
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
765
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
766 Return the pointer to after the newline ending the line,
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
767 or to the end of the file, if there is no newline to end it.
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
768
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
769 Can also merge on continuation lines. If APPEND_END is
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
770 non-null, it points past the newline of a line that is
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
771 continued; we add another line onto it and regard the whole
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
772 thing as one line. The caller decides when a line is continued. */
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
773
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
774 static char *
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
775 gobble_line (fd, bufp, append_end)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
776 int fd;
22066
a09f2b697d0a Renamed "struct buffer" to "struct termcap_buffer" to
Richard M. Stallman <rms@gnu.org>
parents: 14414
diff changeset
777 register struct termcap_buffer *bufp;
7306
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
778 char *append_end;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
779 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
780 register char *end;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
781 register int nread;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
782 register char *buf = bufp->beg;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
783 register char *tem;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
784
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
785 if (!append_end)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
786 append_end = bufp->ptr;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
787
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
788 while (1)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
789 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
790 end = append_end;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
791 while (*end && *end != '\n') end++;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
792 if (*end)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
793 break;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
794 if (bufp->ateof)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
795 return buf + bufp->full;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
796 if (bufp->ptr == buf)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
797 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
798 if (bufp->full == bufp->size)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
799 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
800 bufp->size *= 2;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
801 /* Add 1 to size to ensure room for terminating null. */
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
802 tem = (char *) xrealloc (buf, bufp->size + 1);
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
803 bufp->ptr = (bufp->ptr - buf) + tem;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
804 append_end = (append_end - buf) + tem;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
805 bufp->beg = buf = tem;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
806 }
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
807 }
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
808 else
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
809 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
810 append_end -= bufp->ptr - buf;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
811 bcopy (bufp->ptr, buf, bufp->full -= bufp->ptr - buf);
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
812 bufp->ptr = buf;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
813 }
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
814 if (!(nread = read (fd, buf + bufp->full, bufp->size - bufp->full)))
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
815 bufp->ateof = 1;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
816 bufp->full += nread;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
817 buf[bufp->full] = '\0';
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
818 }
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
819 return end + 1;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
820 }
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
821
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
822 #ifdef TEST
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
823
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
824 #ifdef NULL
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
825 #undef NULL
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
826 #endif
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
827
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
828 #include <stdio.h>
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
829
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
830 main (argc, argv)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
831 int argc;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
832 char **argv;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
833 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
834 char *term;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
835 char *buf;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
836
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
837 term = argv[1];
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
838 printf ("TERM: %s\n", term);
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
839
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
840 buf = (char *) tgetent (0, term);
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
841 if ((int) buf <= 0)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
842 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
843 printf ("No entry.\n");
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
844 return 0;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
845 }
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
846
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
847 printf ("Entry: %s\n", buf);
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
848
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
849 tprint ("cm");
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
850 tprint ("AL");
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
851
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
852 printf ("co: %d\n", tgetnum ("co"));
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
853 printf ("am: %d\n", tgetflag ("am"));
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
854 }
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
855
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
856 tprint (cap)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
857 char *cap;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
858 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
859 char *x = tgetstr (cap, 0);
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
860 register char *y;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
861
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
862 printf ("%s: ", cap);
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
863 if (x)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
864 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
865 for (y = x; *y; y++)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
866 if (*y <= ' ' || *y == 0177)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
867 printf ("\\%0o", *y);
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
868 else
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
869 putchar (*y);
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
870 free (x);
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
871 }
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
872 else
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
873 printf ("none");
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
874 putchar ('\n');
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
875 }
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
876
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
877 #endif /* TEST */
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 51400
diff changeset
878
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 51400
diff changeset
879 /* arch-tag: c2e8d427-2271-4fac-95fe-411857238b80
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 51400
diff changeset
880 (do not change this comment) */