annotate info/info-utils.h @ 1315:611d403c7f3d

[project @ 1995-06-25 19:56:32 by jwe]
author jwe
date Sun, 25 Jun 1995 19:56:32 +0000
parents d6fae6ef3e60
children
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 /* info-utils.h -- Exported functions and variables from info-util.c. */
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
1315
611d403c7f3d [project @ 1995-06-25 19:56:32 by jwe]
jwe
parents: 171
diff changeset
20 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
171
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 #if !defined (_INFO_UTILS_H_)
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
25 #define _INFO_UTILS_H_
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
26
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
27 #if !defined (HAVE_RINDEX)
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
28 #undef index
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
29 #undef rindex
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
30 #define index strchr
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
31 #define rindex strrchr
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
32 #endif
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 #if !defined (HAVE_BCOPY)
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
35 #undef bcopy
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
36 #define bcopy(source, dest, count) memcpy(dest, source, count)
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
37 #endif
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
38
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
39 #include "nodes.h"
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
40 #include "window.h"
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
41 #include "search.h"
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
42
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
43 /* Structure which describes a node reference, such as a menu entry or
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
44 cross reference. Arrays of such references can be built by calling
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
45 info_menus_of_node () or info_xrefs_of_node (). */
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
46 typedef struct {
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
47 char *label; /* User Label. */
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
48 char *filename; /* File where this node can be found. */
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
49 char *nodename; /* Name of the node. */
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
50 int start, end; /* Offsets within the containing node of LABEL. */
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
51 } REFERENCE;
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
52
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
53 /* When non-zero, various display and input functions handle ISO Latin
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
54 character sets correctly. */
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
55 extern int ISO_Latin_p;
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
56
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
57 /* Variable which holds the most recent filename parsed as a result of
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
58 calling info_parse_xxx (). */
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
59 extern char *info_parsed_filename;
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
60
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
61 /* Variable which holds the most recent nodename parsed as a result of
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
62 calling info_parse_xxx (). */
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
63 extern char *info_parsed_nodename;
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
64
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
65 /* Parse the filename and nodename out of STRING. If STRING doesn't
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
66 contain a filename (i.e., it is NOT (FILENAME)NODENAME) then set
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
67 INFO_PARSED_FILENAME to NULL. If second argument NEWLINES_OKAY is
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
68 non-zero, it says to allow the nodename specification to cross a
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
69 newline boundary (i.e., only `,', `.', or `TAB' can end the spec). */
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
70 void info_parse_node ();
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 /* Return a NULL terminated array of REFERENCE * which represents the menu
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
73 found in NODE. If there is no menu in NODE, just return a NULL pointer. */
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
74 extern REFERENCE **info_menu_of_node ();
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 /* Return a NULL terminated array of REFERENCE * which represents the cross
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
77 refrences found in NODE. If there are no cross references in NODE, just
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
78 return a NULL pointer. */
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
79 extern REFERENCE **info_xrefs_of_node ();
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
80
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
81 /* Glean cross references from BINDING->buffer + BINDING->start until
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
82 BINDING->end. Return an array of REFERENCE * that represents each
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
83 cross reference in this range. */
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
84 extern REFERENCE **info_xrefs ();
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
85
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
86 /* Get the entry associated with LABEL in REFERENCES. Return a pointer to
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
87 the reference if found, or NULL. */
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
88 extern REFERENCE *info_get_labeled_reference ();
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 /* Glean menu entries from BINDING->buffer + BINDING->start until we
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
91 have looked at the entire contents of BINDING. Return an array
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
92 of REFERENCE * that represents each menu item in this range. */
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
93 extern REFERENCE **info_menu_items ();
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
94
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
95 /* A utility function for concatenating REFERENCE **. Returns a new
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
96 REFERENCE ** which is the concatenation of REF1 and REF2. The REF1
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
97 and REF2 arrays are freed, but their contents are not. */
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
98 REFERENCE **info_concatenate_references ();
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
99
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
100 /* Free the data associated with REFERENCES. */
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
101 extern void info_free_references ();
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
102
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
103 /* Search for sequences of whitespace or newlines in STRING, replacing
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
104 all such sequences with just a single space. Remove whitespace from
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
105 start and end of string. */
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
106 void canonicalize_whitespace ();
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
107
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
108 /* Return a pointer to a string which is the printed representation
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
109 of CHARACTER if it were printed at HPOS. */
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
110 extern char *printed_representation ();
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
111
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
112 /* Return a pointer to the part of PATHNAME that simply defines the file. */
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
113 extern char *filename_non_directory ();
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 /* Return non-zero if NODE is one especially created by Info. */
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
116 extern int internal_info_node_p ();
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
117
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
118 /* Make NODE appear to be one especially created by Info, and give it NAME. */
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
119 extern void name_internal_node ();
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
120
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
121 /* Return the window displaying NAME, the name of an internally created
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
122 Info window. */
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
123 extern WINDOW *get_internal_info_window ();
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
124
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
125 /* Return the node addressed by LABEL in NODE (usually one of "Prev:",
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
126 "Next:", "Up:", "File:", or "Node:". After a call to this function,
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
127 the global INFO_PARSED_NODENAME and INFO_PARSED_FILENAME contain
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
128 the information. */
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
129 extern void info_parse_label (/* label, node */);
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
130
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
131 #define info_label_was_found \
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
132 (info_parsed_nodename != NULL || info_parsed_filename != NULL)
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
133
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
134 #define info_file_label_of_node(n) info_parse_label (INFO_FILE_LABEL, n)
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
135 #define info_next_label_of_node(n) info_parse_label (INFO_NEXT_LABEL, n)
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
136 #define info_up_label_of_node(n) info_parse_label (INFO_UP_LABEL, n)
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
137 #define info_prev_label_of_node(n) \
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
138 do { \
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
139 info_parse_label (INFO_PREV_LABEL, n); \
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
140 if (!info_label_was_found) \
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
141 info_parse_label (INFO_ALTPREV_LABEL, n); \
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
142 } while (0)
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
143
d6fae6ef3e60 [project @ 1993-10-21 22:39:46 by jwe]
jwe
parents:
diff changeset
144 #endif /* !_INFO_UTILS_H_ */