annotate src/termcap.c @ 51207:7e176ef34c10

Make (many) trivial substitutions for renamed and new macros in dispextern.h, frame.h and window.h. (make_window): Initialize new members left_margin_cols, right_margin_cols, left_fringe_width, right_fringe_width, fringes_outside_margins, scroll_bar_width, and vertical_scroll_bar_type. (coordinates_in_window): Adapted to new fringe/margin positions and per-window fringes and scroll-bars. Fix bug related to incorrectly adjusting coordinates by frame's internal_border_width (the effect normally negible since the internal_border_width is typically 0 or 1 pixel, but very noticeable for an internal_border_width of e.g. 25 pixels). Upon successful return (other than ON_NOTHING), the coordinates are now always properly converted to window relative for the given display element. (window_from_coordinates): Add new parameters wx and wy to return the window relative x and y position in the returned window and part. A null arg means, don't return the position. All callers changed. (adjust_window_margins): New function which may reduce the width of the display margins if a window's text area is too small after resizing or splitting windows. (size_window): Fix bug that did not account for display margin widths when checking the minimum width of a window; use adjust_window_margins. (set_window_buffer): Call Fset_window_fringes and Fset_window_scroll_bars to setup per-window elements. Add new arg KEEP_MARGINS_P. Non-nil means to keep window's existing display margin, fringe widths, and scroll bar settings (e.g. after splitting a window or resizing the frame). All callers changed. (Fset_window_buffer): New arg KEEP_MARGINS. All callers changed. (Fsplit_window): Duplicate original window's display margin, fringe, and scroll-bar settings; then call Fset_window_buffer with KEEP_MARGINS non-nil. This fixes a bug which caused a split window to only preserve the display margins in one of the windows. When splitting horisontally, call adjust_window_margins on both windows to ensure that the text area of the new windows is non too narrow. This fixes a bug which could cause emacs to trap if the width of the split window was less than the width of the display margins. (window_box_text_cols): Renamed from window_internal_width. All uses changed. Adapt to per-window fringes and scroll bars. Fix bug that caused vertical separator to be subtracted also on window frames. Fix another bug that did not reduce the returned value by the columns used for display margins. (window_scroll_line_based): Fix bug related to scrolling too much when display margins are present (implicitly fixed by the fix to window_box_text_cols). (scroll_left, scroll_right): Fix bug related to scrolling too far by default when display margins are present (implicitly fixed by the fix to window_box_text_cols). (struct saved_window): Rename members left to left_col, top to top_line, width to total_cols, height to total_lines, orig_top to orig_top_line, orig_height to orig_total_lines. All uses changed. New members left_margin_cols, right_margin_cols, left_fringe_width, right_fringe_width, fringes_outside_margins, scroll_bar_width, and vertical_scroll_bar_type for saving per-window display elements. (Fset_window_configuration): Restore display margins, fringes, and scroll bar settings. This fixes a bug which caused display margins to be discarded when saving and restoring a window configuration. (save_window_save): Save display margins, fringes, and scroll bar settings. This fixes a bug which caused display margins to be discarded when saving and restoring a window configuration. (Fset_window_margins): Do nothing if display margins are not really changed. Otherwise, call adjust_window_margins to ensure the text area doesn't get too narrow. This fixes a bug which could cause emacs to trap if setting display margins wider than the width of the window. (Fset_window_fringes): New defun to allow user to specifically set this window's fringe widths and position vs. display margins. (Fwindow_fringes): New defun to return window's actual fringe settings. (Fset_window_scroll_bars): New defun to allow user to specifically set this window's scroll bar width and position. (Fwindow_scroll_bars): New defun to return window's actual scroll bar settings. (compare_window_configurations): Also compare display margins, fringes, and scroll bar settings. (syms_of_window): Defsubr new defuns for fringe and scroll bars.
author Kim F. Storm <storm@cua.dk>
date Sat, 24 May 2003 22:07:51 +0000
parents 01b93e5e53a7
children 6b26c71e351d d7ddb3e565de
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.
37914
055740f4bc36 (speeds): Put in #if 0.
Gerd Moellmann <gerd@gnu.org>
parents: 34358
diff changeset
2 Copyright (C) 1985, 86, 93, 94, 95, 2000, 2001
055740f4bc36 (speeds): Put in #if 0.
Gerd Moellmann <gerd@gnu.org>
parents: 34358
diff changeset
3 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
14414
6e7bb4bd5010 Update FSF address in comment.
Karl Heuer <kwzh@gnu.org>
parents: 14132
diff changeset
17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
6e7bb4bd5010 Update FSF address in comment.
Karl Heuer <kwzh@gnu.org>
parents: 14132
diff changeset
18 Boston, MA 02111-1307, 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
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
56 #ifdef _POSIX_VERSION
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 }
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
287 *r = '\0';
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
288 /* Update *AREA. */
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
289 if (area)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
290 *area = r + 1;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
291 return ret;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
292 }
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
293
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
294 /* Outputting a string with padding. */
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
295
43674
53deca397c95 [!emacs]: Replace ospeed for building standalone
Richard M. Stallman <rms@gnu.org>
parents: 37914
diff changeset
296 #ifndef emacs
53deca397c95 [!emacs]: Replace ospeed for building standalone
Richard M. Stallman <rms@gnu.org>
parents: 37914
diff changeset
297 short ospeed;
7306
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
298 /* If OSPEED is 0, we use this as the actual baud rate. */
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
299 int tputs_baud_rate;
43674
53deca397c95 [!emacs]: Replace ospeed for building standalone
Richard M. Stallman <rms@gnu.org>
parents: 37914
diff changeset
300 #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
301
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents: 43713
diff changeset
302 /* 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
303 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
304 #ifndef MAC_OSX
7306
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
305 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
306 #endif /* MAC_OSX */
7306
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
307
43674
53deca397c95 [!emacs]: Replace ospeed for building standalone
Richard M. Stallman <rms@gnu.org>
parents: 37914
diff changeset
308 #ifndef emacs
7306
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
309 /* Actual baud rate if positive;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
310 - baud rate / 100 if negative. */
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
311
10739
97096cdf6e55 (speeds): Make it ints. Add some higher speeds.
Richard M. Stallman <rms@gnu.org>
parents: 10186
diff changeset
312 static int speeds[] =
7306
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
313 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
314 #ifdef VMS
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
315 0, 50, 75, 110, 134, 150, -3, -6, -12, -18,
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
316 -20, -24, -36, -48, -72, -96, -192
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
317 #else /* not VMS */
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
318 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
319 -18, -24, -48, -96, -192, -288, -384, -576, -1152
7306
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
320 #endif /* not VMS */
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
321 };
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
322
43674
53deca397c95 [!emacs]: Replace ospeed for building standalone
Richard M. Stallman <rms@gnu.org>
parents: 37914
diff changeset
323 #endif /* not emacs */
37914
055740f4bc36 (speeds): Put in #if 0.
Gerd Moellmann <gerd@gnu.org>
parents: 34358
diff changeset
324
44890
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents: 43713
diff changeset
325 /* 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
326 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
327 #ifndef MAC_OSX
7306
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
328 void
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
329 tputs (str, nlines, outfun)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
330 register char *str;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
331 int nlines;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
332 register int (*outfun) ();
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
333 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
334 register int padcount = 0;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
335 register int speed;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
336
43674
53deca397c95 [!emacs]: Replace ospeed for building standalone
Richard M. Stallman <rms@gnu.org>
parents: 37914
diff changeset
337 #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
338 extern EMACS_INT baud_rate;
7306
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
339 speed = baud_rate;
10739
97096cdf6e55 (speeds): Make it ints. Add some higher speeds.
Richard M. Stallman <rms@gnu.org>
parents: 10186
diff changeset
340 /* 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
341 units to avoid overflow. */
97096cdf6e55 (speeds): Make it ints. Add some higher speeds.
Richard M. Stallman <rms@gnu.org>
parents: 10186
diff changeset
342 if (speed > 10000)
97096cdf6e55 (speeds): Make it ints. Add some higher speeds.
Richard M. Stallman <rms@gnu.org>
parents: 10186
diff changeset
343 speed = - speed / 100;
43674
53deca397c95 [!emacs]: Replace ospeed for building standalone
Richard M. Stallman <rms@gnu.org>
parents: 37914
diff changeset
344 #else
53deca397c95 [!emacs]: Replace ospeed for building standalone
Richard M. Stallman <rms@gnu.org>
parents: 37914
diff changeset
345 if (ospeed == 0)
53deca397c95 [!emacs]: Replace ospeed for building standalone
Richard M. Stallman <rms@gnu.org>
parents: 37914
diff changeset
346 speed = tputs_baud_rate;
53deca397c95 [!emacs]: Replace ospeed for building standalone
Richard M. Stallman <rms@gnu.org>
parents: 37914
diff changeset
347 else
53deca397c95 [!emacs]: Replace ospeed for building standalone
Richard M. Stallman <rms@gnu.org>
parents: 37914
diff changeset
348 speed = speeds[ospeed];
53deca397c95 [!emacs]: Replace ospeed for building standalone
Richard M. Stallman <rms@gnu.org>
parents: 37914
diff changeset
349 #endif
7306
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
350
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
351 if (!str)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
352 return;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
353
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
354 while (*str >= '0' && *str <= '9')
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
355 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
356 padcount += *str++ - '0';
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
357 padcount *= 10;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
358 }
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
359 if (*str == '.')
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
360 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
361 str++;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
362 padcount += *str++ - '0';
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
363 }
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
364 if (*str == '*')
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
365 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
366 str++;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
367 padcount *= nlines;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
368 }
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
369 while (*str)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
370 (*outfun) (*str++);
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
371
10739
97096cdf6e55 (speeds): Make it ints. Add some higher speeds.
Richard M. Stallman <rms@gnu.org>
parents: 10186
diff changeset
372 /* PADCOUNT is now in units of tenths of msec.
10753
e0de204ec865 Comment changed.
Richard M. Stallman <rms@gnu.org>
parents: 10739
diff changeset
373 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
374 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
375 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
376 padcount *= speed;
7306
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
377 padcount += 500;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
378 padcount /= 1000;
10739
97096cdf6e55 (speeds): Make it ints. Add some higher speeds.
Richard M. Stallman <rms@gnu.org>
parents: 10186
diff changeset
379 if (speed < 0)
7306
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
380 padcount = -padcount;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
381 else
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
382 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
383 padcount += 50;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
384 padcount /= 100;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
385 }
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
386
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
387 while (padcount-- > 0)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
388 (*outfun) (PC);
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
389 }
44890
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents: 43713
diff changeset
390 #endif /* MAC_OSX */
7306
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
391
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
392 /* Finding the termcap entry in the termcap data base. */
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
393
22066
a09f2b697d0a Renamed "struct buffer" to "struct termcap_buffer" to
Richard M. Stallman <rms@gnu.org>
parents: 14414
diff changeset
394 struct termcap_buffer
7306
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
395 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
396 char *beg;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
397 int size;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
398 char *ptr;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
399 int ateof;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
400 int full;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
401 };
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
402
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
403 /* Forward declarations of static functions. */
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
404
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
405 static int scan_file ();
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
406 static char *gobble_line ();
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
407 static int compare_contin ();
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
408 static int name_match ();
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
409
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
410 #ifdef VMS
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
411
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
412 #include <rmsdef.h>
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
413 #include <fab.h>
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
414 #include <nam.h>
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
415
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
416 static int
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
417 valid_filename_p (fn)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
418 char *fn;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
419 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
420 struct FAB fab = cc$rms_fab;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
421 struct NAM nam = cc$rms_nam;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
422 char esa[NAM$C_MAXRSS];
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
423
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
424 fab.fab$l_fna = fn;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
425 fab.fab$b_fns = strlen(fn);
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
426 fab.fab$l_nam = &nam;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
427 fab.fab$l_fop = FAB$M_NAM;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
428
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
429 nam.nam$l_esa = esa;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
430 nam.nam$b_ess = sizeof esa;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
431
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
432 return SYS$PARSE(&fab, 0, 0) == RMS$_NORMAL;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
433 }
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
434
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
435 #else /* !VMS */
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
436
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
437 #ifdef MSDOS /* MW, May 1993 */
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
438 static int
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
439 valid_filename_p (fn)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
440 char *fn;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
441 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
442 return *fn == '/' || fn[1] == ':';
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
443 }
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
444 #else
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
445 #define valid_filename_p(fn) (*(fn) == '/')
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
446 #endif
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
447
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
448 #endif /* !VMS */
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
449
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
450 /* Find the termcap entry data for terminal type NAME
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
451 and store it in the block that BP points to.
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
452 Record its address for future use.
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
453
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
454 If BP is null, space is dynamically allocated.
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
455
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
456 Return -1 if there is some difficulty accessing the data base
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
457 of terminal types,
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
458 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
459 in it, and some other value otherwise. */
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
460
44890
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents: 43713
diff changeset
461 /* 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
462 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
463 #ifndef MAC_OSX
7306
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
464 int
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
465 tgetent (bp, name)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
466 char *bp, *name;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
467 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
468 register char *termcap_name;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
469 register int fd;
22066
a09f2b697d0a Renamed "struct buffer" to "struct termcap_buffer" to
Richard M. Stallman <rms@gnu.org>
parents: 14414
diff changeset
470 struct termcap_buffer buf;
7306
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
471 register char *bp1;
14132
85063feb159b (tgetent): Find all the tc caps that there are.
Karl Heuer <kwzh@gnu.org>
parents: 13677
diff changeset
472 char *tc_search_point;
7306
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
473 char *term;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
474 int malloc_size = 0;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
475 register int c;
33616
f7e2e0758251 (ospeed): Remove.
Gerd Moellmann <gerd@gnu.org>
parents: 29804
diff changeset
476 char *tcenv = NULL; /* TERMCAP value, if it contains :tc=. */
7306
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
477 char *indirect = NULL; /* Terminal type in :tc= in TERMCAP value. */
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
478 int filep;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
479
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
480 #ifdef INTERNAL_TERMINAL
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
481 /* For the internal terminal we don't want to read any termcap file,
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
482 so fake it. */
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
483 if (!strcmp (name, "internal"))
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
484 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
485 term = INTERNAL_TERMINAL;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
486 if (!bp)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
487 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
488 malloc_size = 1 + strlen (term);
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
489 bp = (char *) xmalloc (malloc_size);
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
490 }
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
491 strcpy (bp, term);
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
492 goto ret;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
493 }
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
494 #endif /* INTERNAL_TERMINAL */
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
495
12907
6cae53a06172 default to user-supplied buffer.
David J. MacKenzie <djm@gnu.org>
parents: 12679
diff changeset
496 /* 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
497 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
498 if (bp)
6cae53a06172 default to user-supplied buffer.
David J. MacKenzie <djm@gnu.org>
parents: 12679
diff changeset
499 term_entry = bp;
6cae53a06172 default to user-supplied buffer.
David J. MacKenzie <djm@gnu.org>
parents: 12679
diff changeset
500
7306
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
501 termcap_name = getenv ("TERMCAP");
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
502 if (termcap_name && *termcap_name == '\0')
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
503 termcap_name = NULL;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
504 #if defined (MSDOS) && !defined (TEST)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
505 if (termcap_name && (*termcap_name == '\\'
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
506 || *termcap_name == '/'
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
507 || termcap_name[1] == ':'))
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
508 dostounix_filename(termcap_name);
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
509 #endif
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
510
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
511 filep = termcap_name && valid_filename_p (termcap_name);
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
512
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
513 /* 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
514 it is a file name to use instead of /etc/termcap.
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
515 If it is non-null and does not start with /,
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
516 it is the entry itself, but only if
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
517 the name the caller requested matches the TERM variable. */
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
518
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
519 if (termcap_name && !filep && !strcmp (name, getenv ("TERM")))
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
520 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
521 indirect = tgetst1 (find_capability (termcap_name, "tc"), (char **) 0);
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
522 if (!indirect)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
523 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
524 if (!bp)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
525 bp = termcap_name;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
526 else
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
527 strcpy (bp, termcap_name);
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
528 goto ret;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
529 }
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
530 else
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
531 { /* It has tc=. Need to read /etc/termcap. */
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
532 tcenv = termcap_name;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
533 termcap_name = NULL;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
534 }
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
535 }
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
536
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
537 if (!termcap_name || !filep)
12679
a14b26e55f25 TERMCAP_NAME -> TERMCAP_FILE.
David J. MacKenzie <djm@gnu.org>
parents: 12675
diff changeset
538 termcap_name = TERMCAP_FILE;
7306
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
539
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
540 /* 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
541
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
542 #ifdef MSDOS
7685
5fbc009f3dc3 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 7306
diff changeset
543 fd = open (termcap_name, O_RDONLY|O_TEXT, 0);
7306
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
544 #else
7685
5fbc009f3dc3 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 7306
diff changeset
545 fd = open (termcap_name, O_RDONLY, 0);
7306
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
546 #endif
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
547 if (fd < 0)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
548 return -1;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
549
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
550 buf.size = BUFSIZE;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
551 /* Add 1 to size to ensure room for terminating null. */
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
552 buf.beg = (char *) xmalloc (buf.size + 1);
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
553 term = indirect ? indirect : name;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
554
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
555 if (!bp)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
556 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
557 malloc_size = indirect ? strlen (tcenv) + 1 : buf.size;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
558 bp = (char *) xmalloc (malloc_size);
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
559 }
14132
85063feb159b (tgetent): Find all the tc caps that there are.
Karl Heuer <kwzh@gnu.org>
parents: 13677
diff changeset
560 tc_search_point = bp1 = bp;
7306
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
561
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
562 if (indirect)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
563 /* Copy the data from the environment variable. */
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
564 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
565 strcpy (bp, tcenv);
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
566 bp1 += strlen (tcenv);
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
567 }
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
568
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
569 while (term)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
570 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
571 /* Scan the file, reading it via buf, till find start of main entry. */
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
572 if (scan_file (term, fd, &buf) == 0)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
573 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
574 close (fd);
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
575 free (buf.beg);
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
576 if (malloc_size)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
577 free (bp);
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
578 return 0;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
579 }
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
580
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
581 /* Free old `term' if appropriate. */
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
582 if (term != name)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
583 free (term);
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
584
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
585 /* If BP is malloc'd by us, make sure it is big enough. */
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
586 if (malloc_size)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
587 {
34358
aa3b69684dbf (tgetent): Change the way buffers are reallocated to
Gerd Moellmann <gerd@gnu.org>
parents: 33616
diff changeset
588 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
589 malloc_size = offset1 + buf.size;
aa3b69684dbf (tgetent): Change the way buffers are reallocated to
Gerd Moellmann <gerd@gnu.org>
parents: 33616
diff changeset
590 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
591 bp1 = termcap_name + offset1;
aa3b69684dbf (tgetent): Change the way buffers are reallocated to
Gerd Moellmann <gerd@gnu.org>
parents: 33616
diff changeset
592 tc_search_point = termcap_name + offset2;
7306
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
593 }
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
594
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
595 /* Copy the line of the entry from buf into bp. */
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
596 termcap_name = buf.ptr;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
597 while ((*bp1++ = c = *termcap_name++) && c != '\n')
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
598 /* Drop out any \ newline sequence. */
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
599 if (c == '\\' && *termcap_name == '\n')
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
600 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
601 bp1--;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
602 termcap_name++;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
603 }
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
604 *bp1 = '\0';
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
605
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
606 /* Does this entry refer to another terminal type's entry?
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
607 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
608 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
609 term = tgetst1 (tc_search_point, (char **) 0);
7306
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
610 }
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
611
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
612 close (fd);
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
613 free (buf.beg);
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
614
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
615 if (malloc_size)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
616 bp = (char *) xrealloc (bp, bp1 - bp + 1);
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
617
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
618 ret:
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
619 term_entry = bp;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
620 return 1;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
621 }
44890
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents: 43713
diff changeset
622 #endif /* MAC_OSX */
7306
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
623
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
624 /* Given file open on FD and buffer BUFP,
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
625 scan the file from the beginning until a line is found
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
626 that starts the entry for terminal type STR.
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
627 Return 1 if successful, with that line in BUFP,
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
628 or 0 if no entry is found in the file. */
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
629
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
630 static int
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
631 scan_file (str, fd, bufp)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
632 char *str;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
633 int fd;
22066
a09f2b697d0a Renamed "struct buffer" to "struct termcap_buffer" to
Richard M. Stallman <rms@gnu.org>
parents: 14414
diff changeset
634 register struct termcap_buffer *bufp;
7306
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
635 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
636 register char *end;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
637
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
638 bufp->ptr = bufp->beg;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
639 bufp->full = 0;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
640 bufp->ateof = 0;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
641 *bufp->ptr = '\0';
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
642
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
643 lseek (fd, 0L, 0);
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
644
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
645 while (!bufp->ateof)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
646 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
647 /* Read a line into the buffer. */
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
648 end = NULL;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
649 do
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
650 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
651 /* if it is continued, append another line to it,
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
652 until a non-continued line ends. */
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
653 end = gobble_line (fd, bufp, end);
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
654 }
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
655 while (!bufp->ateof && end[-2] == '\\');
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
656
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
657 if (*bufp->ptr != '#'
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
658 && name_match (bufp->ptr, str))
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
659 return 1;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
660
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
661 /* Discard the line just processed. */
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
662 bufp->ptr = end;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
663 }
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
664 return 0;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
665 }
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
666
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
667 /* Return nonzero if NAME is one of the names specified
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
668 by termcap entry LINE. */
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
669
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
670 static int
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
671 name_match (line, name)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
672 char *line, *name;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
673 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
674 register char *tem;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
675
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
676 if (!compare_contin (line, name))
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
677 return 1;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
678 /* This line starts an entry. Is it the right one? */
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
679 for (tem = line; *tem && *tem != '\n' && *tem != ':'; tem++)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
680 if (*tem == '|' && !compare_contin (tem + 1, name))
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
681 return 1;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
682
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
683 return 0;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
684 }
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
685
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
686 static int
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
687 compare_contin (str1, str2)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
688 register char *str1, *str2;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
689 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
690 register int c1, c2;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
691 while (1)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
692 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
693 c1 = *str1++;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
694 c2 = *str2++;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
695 while (c1 == '\\' && *str1 == '\n')
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
696 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
697 str1++;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
698 while ((c1 = *str1++) == ' ' || c1 == '\t');
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
699 }
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
700 if (c2 == '\0')
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
701 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
702 /* End of type being looked up. */
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
703 if (c1 == '|' || c1 == ':')
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
704 /* If end of name in data base, we win. */
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
705 return 0;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
706 else
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
707 return 1;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
708 }
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
709 else if (c1 != c2)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
710 return 1;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
711 }
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 /* Make sure that the buffer <- BUFP contains a full line
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
715 of the file open on FD, starting at the place BUFP->ptr
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
716 points to. Can read more of the file, discard stuff before
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
717 BUFP->ptr, or make the buffer bigger.
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
718
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
719 Return the pointer to after the newline ending the line,
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
720 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
721
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
722 Can also merge on continuation lines. If APPEND_END is
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
723 non-null, it points past the newline of a line that is
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
724 continued; we add another line onto it and regard the whole
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
725 thing as one line. The caller decides when a line is continued. */
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
726
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
727 static char *
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
728 gobble_line (fd, bufp, append_end)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
729 int fd;
22066
a09f2b697d0a Renamed "struct buffer" to "struct termcap_buffer" to
Richard M. Stallman <rms@gnu.org>
parents: 14414
diff changeset
730 register struct termcap_buffer *bufp;
7306
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
731 char *append_end;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
732 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
733 register char *end;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
734 register int nread;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
735 register char *buf = bufp->beg;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
736 register char *tem;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
737
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
738 if (!append_end)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
739 append_end = bufp->ptr;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
740
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
741 while (1)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
742 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
743 end = append_end;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
744 while (*end && *end != '\n') end++;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
745 if (*end)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
746 break;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
747 if (bufp->ateof)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
748 return buf + bufp->full;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
749 if (bufp->ptr == buf)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
750 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
751 if (bufp->full == bufp->size)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
752 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
753 bufp->size *= 2;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
754 /* Add 1 to size to ensure room for terminating null. */
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
755 tem = (char *) xrealloc (buf, bufp->size + 1);
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
756 bufp->ptr = (bufp->ptr - buf) + tem;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
757 append_end = (append_end - buf) + tem;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
758 bufp->beg = buf = tem;
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 else
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
762 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
763 append_end -= bufp->ptr - buf;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
764 bcopy (bufp->ptr, buf, bufp->full -= bufp->ptr - buf);
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
765 bufp->ptr = buf;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
766 }
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
767 if (!(nread = read (fd, buf + bufp->full, bufp->size - bufp->full)))
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
768 bufp->ateof = 1;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
769 bufp->full += nread;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
770 buf[bufp->full] = '\0';
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
771 }
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
772 return end + 1;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
773 }
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
774
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
775 #ifdef TEST
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
776
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
777 #ifdef NULL
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
778 #undef NULL
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
779 #endif
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
780
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
781 #include <stdio.h>
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
782
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
783 main (argc, argv)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
784 int argc;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
785 char **argv;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
786 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
787 char *term;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
788 char *buf;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
789
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
790 term = argv[1];
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
791 printf ("TERM: %s\n", term);
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
792
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
793 buf = (char *) tgetent (0, term);
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
794 if ((int) buf <= 0)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
795 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
796 printf ("No entry.\n");
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
797 return 0;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
798 }
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
799
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
800 printf ("Entry: %s\n", buf);
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
801
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
802 tprint ("cm");
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
803 tprint ("AL");
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
804
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
805 printf ("co: %d\n", tgetnum ("co"));
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
806 printf ("am: %d\n", tgetflag ("am"));
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
807 }
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
808
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
809 tprint (cap)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
810 char *cap;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
811 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
812 char *x = tgetstr (cap, 0);
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
813 register char *y;
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
814
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
815 printf ("%s: ", cap);
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
816 if (x)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
817 {
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
818 for (y = x; *y; y++)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
819 if (*y <= ' ' || *y == 0177)
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
820 printf ("\\%0o", *y);
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
821 else
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
822 putchar (*y);
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
823 free (x);
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
824 }
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
825 else
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
826 printf ("none");
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
827 putchar ('\n');
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
828 }
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
829
1f2f6bb3690f Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
830 #endif /* TEST */