annotate info/footnotes.c @ 1202:1f5ff647c7ab

[project @ 1995-04-01 00:20:39 by jwe]
author jwe
date Sat, 01 Apr 1995 00:20:39 +0000
parents d6fae6ef3e60
children 5fb4ee02da70
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
171
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
1 /* footnotes.c -- Some functions for manipulating footnotes. */
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
2
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
3 /* This file is part of GNU Info, a program for reading online documentation
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
4 stored in Info format.
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
5
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
6 Copyright (C) 1993 Free Software Foundation, Inc.
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
7
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
8 This program is free software; you can redistribute it and/or modify
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
9 it under the terms of the GNU General Public License as published by
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
10 the Free Software Foundation; either version 2, or (at your option)
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
11 any later version.
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
12
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
13 This program is distributed in the hope that it will be useful,
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
16 GNU General Public License for more details.
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
17
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
18 You should have received a copy of the GNU General Public License
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
19 along with this program; if not, write to the Free Software
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
20 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
21
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
22 Written by Brian Fox (bfox@ai.mit.edu). */
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
23
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
24 #include "info.h"
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
25
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
26 /* Non-zero means attempt to show footnotes when displaying a new window. */
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
27 int auto_footnotes_p = 1;
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
28
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
29 static char *footnote_nodename = "*Footnotes*";
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
30
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
31 #define FOOTNOTE_HEADER_FORMAT \
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
32 "*** Footnotes appearing in the node \"%s\" ***\n"
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
33
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
34 /* Find the window currently showing footnotes. */
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
35 static WINDOW *
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
36 find_footnotes_window ()
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
37 {
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
38 WINDOW *win;
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
39
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
40 /* Try to find an existing window first. */
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
41 for (win = windows; win; win = win->next)
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
42 if (internal_info_node_p (win->node) &&
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
43 (strcmp (win->node->nodename, footnote_nodename) == 0))
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
44 break;
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
45
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
46 return (win);
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
47 }
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
48
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
49 /* Manufacture a node containing the footnotes of this node, and
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
50 return the manufactured node. If NODE has no footnotes, return a
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
51 NULL pointer. */
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
52 NODE *
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
53 make_footnotes_node (node)
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
54 NODE *node;
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
55 {
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
56 NODE *fn_node, *result = (NODE *)NULL;
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
57 long fn_start;
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
58
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
59 /* Make the initial assumption that the footnotes appear as simple
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
60 text within this windows node. */
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
61 fn_node = node;
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
62
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
63 /* See if this node contains the magic footnote label. */
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
64 fn_start =
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
65 info_search_in_node (FOOTNOTE_LABEL, node, 0, (WINDOW *)NULL, 1);
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
66
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
67 /* If it doesn't, check to see if it has an associated footnotes node. */
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
68 if (fn_start == -1)
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
69 {
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
70 REFERENCE **refs;
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
71
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
72 refs = info_xrefs_of_node (node);
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
73
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
74 if (refs)
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
75 {
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
76 register int i;
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
77 char *refname;
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
78
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
79 refname = (char *)xmalloc
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
80 (1 + strlen ("-Footnotes") + strlen (node->nodename));
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
81
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
82 strcpy (refname, node->nodename);
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
83 strcat (refname, "-Footnotes");
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
84
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
85 for (i = 0; refs[i]; i++)
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
86 if (strcmp (refs[i]->nodename, refname) == 0)
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
87 {
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
88 char *filename;
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
89
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
90 filename = node->parent;
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
91 if (!filename)
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
92 filename = node->filename;
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
93
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
94 fn_node = info_get_node (filename, refname);
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
95
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
96 if (fn_node)
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
97 fn_start = 0;
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
98
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
99 break;
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
100 }
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
101
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
102 free (refname);
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
103 info_free_references (refs);
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
104 }
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
105 }
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
106
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
107 /* If we never found the start of a footnotes area, quit now. */
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
108 if (fn_start == -1)
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
109 return ((NODE *)NULL);
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
110
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
111 /* Make the new node. */
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
112 result = (NODE *)xmalloc (sizeof (NODE));
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
113 result->flags = 0;
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
114
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
115 /* Get the size of the footnotes appearing within this node. */
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
116 {
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
117 char *header;
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
118 long text_start = fn_start;
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
119
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
120 header = (char *)xmalloc
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
121 (1 + strlen (node->nodename) + strlen (FOOTNOTE_HEADER_FORMAT));
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
122 sprintf (header, FOOTNOTE_HEADER_FORMAT, node->nodename);
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
123
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
124 /* Move the start of the displayed text to right after the first line.
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
125 This effectively skips either "---- footno...", or "File: foo...". */
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
126 while (text_start < fn_node->nodelen)
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
127 if (fn_node->contents[text_start++] == '\n')
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
128 break;
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
129
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
130 result->nodelen = strlen (header) + fn_node->nodelen - text_start;
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
131
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
132 /* Set the contents of this node. */
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
133 result->contents = (char *)xmalloc (1 + result->nodelen);
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
134 sprintf (result->contents, "%s", header);
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
135 memcpy (result->contents + strlen (header),
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
136 fn_node->contents + text_start, fn_node->nodelen - text_start);
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
137
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
138 name_internal_node (result, footnote_nodename);
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
139 free (header);
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
140 }
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
141
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
142 #if defined (NOTDEF)
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
143 /* If the footnotes were gleaned from the node that we were called with,
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
144 shorten the calling node's display length. */
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
145 if (fn_node == node)
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
146 narrow_node (node, 0, fn_start);
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
147 #endif /* NOTDEF */
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
148
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
149 return (result);
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
150 }
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
151
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
152 /* Create or delete the footnotes window depending on whether footnotes
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
153 exist in WINDOW's node or not. Returns FN_FOUND if footnotes were found
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
154 and displayed. Returns FN_UNFOUND if there were no footnotes found
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
155 in WINDOW's node. Returns FN_UNABLE if there were footnotes, but the
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
156 window to show them couldn't be made. */
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
157 int
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
158 info_get_or_remove_footnotes (window)
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
159 WINDOW *window;
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
160 {
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
161 WINDOW *fn_win;
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
162 NODE *new_footnotes;
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
163
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
164 fn_win = find_footnotes_window ();
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
165
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
166 /* If we are in the footnotes window, change nothing. */
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
167 if (fn_win == window)
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
168 return (FN_FOUND);
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
169
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
170 /* Try to find footnotes for this window's node. */
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
171 new_footnotes = make_footnotes_node (window->node);
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
172
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
173 /* If there was a window showing footnotes, and there are no footnotes
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
174 for the current window, delete the old footnote window. */
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
175 if (fn_win && !new_footnotes)
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
176 {
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
177 if (windows->next)
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
178 info_delete_window_internal (fn_win);
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
179 }
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
180
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
181 /* If there are footnotes for this window's node, but no window around
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
182 showing footnotes, try to make a new window. */
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
183 if (new_footnotes && !fn_win)
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
184 {
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
185 WINDOW *old_active;
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
186 WINDOW *last, *win;
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
187
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
188 /* Always make this window be the last one appearing in the list. Find
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
189 the last window in the chain. */
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
190 for (win = windows, last = windows; win; last = win, win = win->next);
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
191
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
192 /* Try to split this window, and make the split window the one to
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
193 contain the footnotes. */
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
194 old_active = active_window;
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
195 active_window = last;
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
196 fn_win = window_make_window (new_footnotes);
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
197 active_window = old_active;
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
198
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
199 if (!fn_win)
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
200 {
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
201 free (new_footnotes->contents);
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
202 free (new_footnotes);
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
203
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
204 /* If we are hacking automatic footnotes, and there are footnotes
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
205 but we couldn't display them, print a message to that effect. */
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
206 if (auto_footnotes_p)
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
207 inform_in_echo_area ("Footnotes could not be displayed");
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
208 return (FN_UNABLE);
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
209 }
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
210 }
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
211
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
212 /* If there are footnotes, and there is a window to display them,
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
213 make that window be the number of lines appearing in the footnotes. */
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
214 if (new_footnotes && fn_win)
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
215 {
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
216 window_set_node_of_window (fn_win, new_footnotes);
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
217
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
218 window_change_window_height
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
219 (fn_win, fn_win->line_count - fn_win->height);
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
220
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
221 remember_window_and_node (fn_win, new_footnotes);
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
222 add_gcable_pointer (new_footnotes->contents);
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
223 }
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
224
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
225 if (!new_footnotes)
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
226 return (FN_UNFOUND);
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
227 else
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
228 return (FN_FOUND);
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
229 }
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
230
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
231 /* Show the footnotes associated with this node in another window. */
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
232 DECLARE_INFO_COMMAND (info_show_footnotes,
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
233 "Show the footnotes associated with this node in another window")
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
234 {
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
235 int result;
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
236
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
237 /* A negative argument means just make the window go away. */
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
238 if (count < 0)
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
239 {
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
240 WINDOW *fn_win = find_footnotes_window ();
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
241
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
242 /* If there is an old footnotes window, and it isn't the only window
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
243 on the screen, delete it. */
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
244 if (fn_win && windows->next)
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
245 info_delete_window_internal (fn_win);
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
246 }
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
247 else
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
248 {
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
249 int result;
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
250
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
251 result = info_get_or_remove_footnotes (window);
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
252
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
253 switch (result)
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
254 {
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
255 case FN_UNFOUND:
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
256 info_error (NO_FOOT_NODE);
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
257 break;
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
258
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
259 case FN_UNABLE:
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
260 info_error (WIN_TOO_SMALL);
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
261 break;
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
262 }
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
263 }
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
264 }