[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[5512] all_files
From: |
Gavin D. Smith |
Subject: |
[5512] all_files |
Date: |
Fri, 02 May 2014 16:43:27 +0000 |
Revision: 5512
http://svn.sv.gnu.org/viewvc/?view=rev&root=texinfo&revision=5512
Author: gavin
Date: 2014-05-02 16:43:26 +0000 (Fri, 02 May 2014)
Log Message:
-----------
all_files
Modified Paths:
--------------
trunk/ChangeLog
trunk/info/indices.c
trunk/info/indices.h
trunk/info/info.c
trunk/info/info.h
Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog 2014-05-02 13:23:20 UTC (rev 5511)
+++ trunk/ChangeLog 2014-05-02 16:43:26 UTC (rev 5512)
@@ -1,5 +1,23 @@
2014-05-02 Gavin Smith <address@hidden>
+ * info/info.c (all_files): Get working again, having been broken
+ by recent changes to startup. Don't use info_follow_menus.
+
+ * info/indices.c (allfiles_node): Declared global.
+ (allfiles_create_node) Moved to info.c
+
+ * info/info.c (node_file_name): Argument dirok deleted.
+ (allfiles_create_node): Don't use numbers as labels of menu entries.
+ Don't create a containing FILE_BUFFER for allfiles_node.
+ (info_find_matching_files): Use add_pointer_to_array to build up
+ list. Check for man pages directly (previously this was done in
+ info_follow_menus).
+
+ * info/info.h (add_pointer_to_array): Comment rewritten to match
+ macro definition.
+
+2014-05-02 Gavin Smith <address@hidden>
+
* info/footnotes.c (info_get_or_remove_footnotes): Don't
display footnotes for "*" node.
Modified: trunk/info/indices.c
===================================================================
--- trunk/info/indices.c 2014-05-02 13:23:20 UTC (rev 5511)
+++ trunk/info/indices.c 2014-05-02 16:43:26 UTC (rev 5512)
@@ -954,47 +954,8 @@
window_clear_echo_area ();
}
-static NODE *allfiles_node;
+NODE *allfiles_node = 0;
-NODE *
-allfiles_create_node (char *term, REFERENCE **fref)
-{
- int i;
- struct text_buffer text;
- size_t off;
- FILE_BUFFER *fb;
-
- text_buffer_init (&text);
- text_buffer_printf (&text, _("File names matching `%s'"), term);
- text_buffer_add_char (&text, 0);
- off = text.off;
-
- text_buffer_printf (&text,
- "\n\n%c\n%s %s\n\n"
- "Info File Index\n"
- "***************\n\n"
- "File names that match `%s':\n\n"
- "* Menu:\n\n",
- INFO_COOKIE,
- INFO_NODE_LABEL, text.base, term);
-
- memmove (text.base, text.base + off, text.off - off);
- text.off -= off;
-
- for (i = 0; fref[i]; i++)
- {
- text_buffer_printf (&text, "* %4i: (%s)", i+1, fref[i]->filename);
- if (fref[i]->nodename)
- text_buffer_printf (&text, "%s", fref[i]->nodename);
- text_buffer_printf (&text, ".\n");
- }
-
- fb = create_virtindex_file_buffer (NULL, text.base, text.off);
- allfiles_node = create_virtindex_node (fb);
-
- return allfiles_node;
-}
-
DECLARE_INFO_COMMAND (info_all_files, _("Show all matching files"))
{
if (!allfiles_node)
Modified: trunk/info/indices.h
===================================================================
--- trunk/info/indices.h 2014-05-02 13:23:20 UTC (rev 5511)
+++ trunk/info/indices.h 2014-05-02 16:43:26 UTC (rev 5512)
@@ -38,6 +38,4 @@
extern void do_info_index_search (WINDOW *window, FILE_BUFFER *fb, int count,
char *search_string);
extern int index_entry_exists (FILE_BUFFER *fb, char *string);
-NODE *allfiles_create_node (char *term, REFERENCE **fref);
-
#endif /* not INFO_INDICES_H */
Modified: trunk/info/info.c
===================================================================
--- trunk/info/info.c 2014-05-02 13:23:20 UTC (rev 5511)
+++ trunk/info/info.c 2014-05-02 16:43:26 UTC (rev 5512)
@@ -156,13 +156,12 @@
static char *
-node_file_name (NODE *node, int dirok)
+node_file_name (NODE *node)
{
if (node->parent)
return node->parent;
else if (node->filename
- && (dirok ||
- !is_dir_name (filename_non_directory (node->filename))))
+ && (!is_dir_name (filename_non_directory (node->filename))))
return node->filename;
return 0;
}
@@ -352,6 +351,44 @@
}
+/* Defined in indices.c */
+extern NODE *allfiles_node;
+
+static void
+allfiles_create_node (char *term, REFERENCE **fref)
+{
+ int i;
+ struct text_buffer text;
+ FILE_BUFFER *fb;
+
+ text_buffer_init (&text);
+
+ text_buffer_printf (&text,
+ "%s File names matching `%s'\n\n"
+ "Info File Index\n"
+ "***************\n\n"
+ "File names that match `%s':\n\n"
+ "* Menu:\n\n",
+ INFO_NODE_LABEL,
+ term, term);
+
+ for (i = 0; fref[i]; i++)
+ {
+ text_buffer_printf (&text, "* (%s)", fref[i]->filename);
+ if (fref[i]->nodename)
+ text_buffer_printf (&text, "%s", fref[i]->nodename);
+ text_buffer_printf (&text, "::\n");
+ }
+
+ allfiles_node = info_create_node ();
+ allfiles_node->nodename = xstrdup ("Info File Index");
+ allfiles_node->contents = text.base;
+ allfiles_node->nodelen = text.off;
+ allfiles_node->body_start = strcspn (allfiles_node->contents, "\n");
+
+ scan_node_contents (0, &allfiles_node);
+}
+
static char *
dirname (const char *file)
{
@@ -371,144 +408,109 @@
static REFERENCE **
info_find_matching_files (char *filename)
{
- size_t argc = 0;
- size_t argn = 0;
- REFERENCE **argv = NULL;
+ REFERENCE **ref_list = NULL;
+ size_t ref_slots = 0;
+ size_t ref_index = 0;
+ REFERENCE *new_ref;
+ NODE *man_node;
+
int i = 0;
- char *p;
+ /* Initialize empty list. */
+ add_pointer_to_array (0, ref_index, ref_list, ref_slots, 2);
+ ref_index--;
+
while (1)
{
+ char *p;
+
p = info_file_find_next_in_path (filename, infopath (), &i, 0);
- if (argc == argn)
- {
- if (argn == 0)
- argn = 2;
- argv = x2nrealloc (argv, &argn, sizeof (argv[0]));
- }
if (!p)
- {
- argv[argc] = NULL;
- break;
- }
+ break;
- argv[argc] = xzalloc (sizeof (*argv[0]));
- argv[argc]->filename = p;
- ++argc;
+ new_ref = xzalloc (sizeof (REFERENCE));
+ new_ref->filename = p;
+ add_pointer_to_array (new_ref, ref_index, ref_list, ref_slots, 2);
}
- return argv;
+ /* Check for man page. */
+ man_node = get_manpage_node (filename);
+ if (man_node)
+ {
+ free (man_node);
+
+ new_ref = xzalloc (sizeof (REFERENCE));
+ new_ref->filename = MANPAGE_FILE_BUFFER_NAME;
+ new_ref->nodename = filename;
+ add_pointer_to_array (new_ref, ref_index, ref_list, ref_slots, 2);
+ }
+
+ return ref_list;
}
static int
all_files (char *filename, int argc, char **argv)
{
REFERENCE **fref;
+ REFERENCE *ref;
char *fname;
int i, j;
int dirok;
struct info_namelist_entry *nlist = NULL;
int dump_flags = dump_subnodes;
- if (user_filename)
- {
- fname = user_filename;
- dirok = 0;
- }
- else
- {
- fname = "dir";
- dirok = 1;
- }
+ fname = user_filename ? user_filename : argv[0] ? argv[0] : 0;
+ if (!fname)
+ return EXIT_FAILURE;
fref = info_find_matching_files (fname);
- for (i = 0; fref[i]; )
+ for (i = 0; ref = fref[i]; )
{
- NODE *node;
-
- if (!user_filename)
- {
- char *p = dirname (fref[i]->filename);
- infopath_add (p, INFOPATH_INIT);
- free (p);
- }
- node = info_get_node (fref[i]->filename,
- user_nodenames ? user_nodenames[0] : 0,
- PARSE_NODE_DFLT);
-
- if (node)
- {
- char *subnode_name = info_follow_menus (node, argv, NULL, 1);
- NODE *subnode = info_get_node (node->filename, subnode_name,
- PARSE_NODE_DFLT);
- if (!subnode)
- {
- forget_info_file (fref[i]->filename);
- node = NULL;
- }
- else
- node = subnode;
- }
-
- if (node)
- {
- const char *name = node_file_name (node, dirok);
- if (!name)
- node = NULL;
- else
- {
- free (fref[i]->filename);
- fref[i]->filename = xstrdup (name);
- }
- }
-
- if (!node)
- {
- info_reference_free (fref[i]);
- for (j = i; (fref[j] = fref[j + 1]); j++);
- }
+ if (info_namelist_add (&nlist, ref->filename) == 0)
+ {
+ ++i;
+ }
else
- {
- if (info_namelist_add (&nlist, fref[i]->filename) == 0)
- {
- if (print_where_p)
- printf ("%s\n", fref[i]->filename);
- else if (user_output_filename)
- {
- dump_node_to_file (node, user_output_filename, dump_flags);
- dump_flags |= DUMP_APPEND;
- }
- else
- fref[i]->nodename = xstrdup (node->nodename);
- forget_info_file (fref[i]->filename);
- ++i;
- }
- else
- {
- forget_info_file (fref[i]->filename);
- info_reference_free (fref[i]);
- for (j = i; (fref[j] = fref[j + 1]); j++);
- }
+ {
+ /* It's a duplicate. This shouldn't happen, though. */
+ forget_info_file (ref->filename);
+
+ /* Delete this reference from fref. */
+ info_reference_free (ref);
+ for (j = i; (fref[j] = fref[j + 1]); j++);
}
}
info_namelist_free (nlist);
- if (print_where_p || user_output_filename)
- return EXIT_SUCCESS;
+ /* TODO: Unify with --output handling in main(). */
+ if (user_output_filename)
+ {
+ NODE *node;
+ int dump_flags = dump_subnodes;
-#if 0
- if (i <= 1)
+ for (i = 0; fref[i]; i++)
+ {
+ node = info_get_node (fref[i]->filename, fref[i]->nodename,
+ PARSE_NODE_DFLT);
+ dump_node_to_file (node, user_output_filename, dump_flags);
+ dump_flags |= DUMP_APPEND;
+ }
+ return EXIT_SUCCESS;
+ }
+
+ /* TODO: Unify with --where handling in main(). */
+ if (print_where_p)
{
- if (!single_file (user_filename, argc, argv))
- return EXIT_FAILURE;
- info_session ();
+ for (i = 0; fref[i]; i++)
+ printf ("%s\n", fref[i]->filename);
+ return EXIT_SUCCESS;
}
-#endif
initialize_info_session ();
- info_set_node_of_window (active_window, allfiles_create_node (argc ? argv[0]
: fname, fref));;
+ allfiles_create_node (fname, fref);
+ info_set_node_of_window (active_window, allfiles_node);
display_startup_message ();
info_session ();
return EXIT_SUCCESS;
Modified: trunk/info/info.h
===================================================================
--- trunk/info/info.h 2014-05-02 13:23:20 UTC (rev 5511)
+++ trunk/info/info.h 2014-05-02 16:43:26 UTC (rev 5512)
@@ -59,9 +59,8 @@
/* Add POINTER to the list of pointers found in ARRAY. SLOTS is the number
of slots that have already been allocated. INDEX is the index into the
- array where POINTER should be added. GROW is the number of slots to grow
- ARRAY by, in the case that it needs growing. TYPE is a cast of the type
- of object stored in ARRAY (e.g., NODE_ENTRY *. */
+ array where POINTER should be added. MINSLOTS is the number of slots to
+ start the array with in case it is empty. */
#define add_pointer_to_array(pointer, idx, array, slots, minslots) \
do \
{ \
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [5512] all_files,
Gavin D. Smith <=