summaryrefslogtreecommitdiffstats
path: root/contrib/texinfo/info/doc.h
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/texinfo/info/doc.h')
-rw-r--r--contrib/texinfo/info/doc.h65
1 files changed, 57 insertions, 8 deletions
diff --git a/contrib/texinfo/info/doc.h b/contrib/texinfo/info/doc.h
index 423998e..53597d1 100644
--- a/contrib/texinfo/info/doc.h
+++ b/contrib/texinfo/info/doc.h
@@ -1,9 +1,7 @@
-/* doc.h -- Structure associating function pointers with documentation. */
+/* doc.h -- Structures associating function pointers with documentation.
+ $Id: doc.h,v 1.5 2001/11/16 23:16:40 karl Exp $
-/* This file is part of GNU Info, a program for reading online documentation
- stored in Info format.
-
- Copyright (C) 1993 Free Software Foundation, Inc.
+ Copyright (C) 1993, 2001 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -26,12 +24,44 @@
#include "info.h" /* for NAMED_FUNCTIONS, VFunction, etc. */
-typedef struct {
+#if defined (INFOKEY)
+/* For each function, we keep track of the first defined key sequence
+ which invokes that function, for each different map. This is so that
+ the dynamic documentation generation in infodoc.c (a) doesn't have to
+ search through copious KEYMAP_ENTRYs, and, more importantly, (b) the
+ user and programmer can choose the preferred key sequence that is
+ printed for any given function -- it's just the first one that
+ appears in the user's infokey file or the default keymaps in
+ infomap.c.
+
+ Each FUNCTION_DOC has a linked list of FUNCTION_KEYSEQ structs
+ hanging off it, which are created on startup when the user and/or
+ default keymaps are being parsed. */
+typedef struct function_keyseq
+{
+ struct function_keyseq *next;
+ struct keymap_entry *map;
+ char *keyseq;
+} FUNCTION_KEYSEQ;
+
+#endif /* INFOKEY */
+
+
+/* An array of FUNCTION_DOC structures is defined in doc.c, which is
+ automagically generated by the makedoc utility, whose job is to scan
+ through the source files for command function declarations and
+ compile a list of all the ones it finds. This saves tedious
+ housekeeping and avoids errors of omission. */
+typedef struct
+{
VFunction *func;
#if defined (NAMED_FUNCTIONS)
char *func_name;
#endif /* NAMED_FUNCTIONS */
- char *doc;
+#if defined (INFOKEY)
+ FUNCTION_KEYSEQ *keys;
+#endif /* INFOKEY */
+ char *doc;
} FUNCTION_DOC;
extern FUNCTION_DOC function_doc_array[];
@@ -39,12 +69,31 @@ extern FUNCTION_DOC function_doc_array[];
extern char *function_documentation ();
extern char *key_documentation ();
extern char *pretty_keyname ();
+extern char *pretty_keyseq ();
+extern char *where_is ();
extern char *replace_in_documentation ();
extern void info_document_key ();
extern void dump_map_to_message_buffer ();
+/* Under the old key-binding system, an info command is specified by
+ the pointer to its function. Under the new INFOKEY binding system,
+ it is specified by a pointer to the command's FUNCTION_DOC structure,
+ defined in doc.c, from which the pointer to the function can be
+ easily divined using the InfoFunction() extractor. */
+#if defined(INFOKEY)
+typedef FUNCTION_DOC InfoCommand;
+#define InfoFunction(ic) ((ic) ? (ic)->func : NULL)
+#define InfoCmd(fn) (&function_doc_array[A_##fn])
+#define DocInfoCmd(fd) ((fd) && (fd)->func ? (fd) : NULL)
+#else /* !INFOKEY */
+typedef VFunction InfoCommand;
+#define InfoFunction(vf) ((vf))
+#define InfoCmd(fn) fn
+#define DocInfoCmd(fd) ((fd)->func)
+#endif /* !INFOKEY */
+
#if defined (NAMED_FUNCTIONS)
extern char *function_name ();
-extern VFunction *named_function ();
+extern InfoCommand *named_function ();
#endif /* NAMED_FUNCTIONS */
#endif /* !DOC_H */
OpenPOWER on IntegriCloud