# HG changeset patch # User jwe # Date 774852285 0 # Node ID 682393bf54f701def16cffb975d5d17569956900 # Parent a8d5d1072d9989909b2e7eb90f66fb46fa18494b [project @ 1994-07-22 04:41:52 by jwe] diff --git a/src/file-io.cc b/src/file-io.cc --- a/src/file-io.cc +++ b/src/file-io.cc @@ -44,6 +44,7 @@ #include "octave-hist.h" #include "tree-const.h" #include "error.h" +#include "help.h" #include "utils.h" #include "pager.h" #include "defun.h" diff --git a/src/help.cc b/src/help.cc --- a/src/help.cc +++ b/src/help.cc @@ -292,9 +292,42 @@ return keywords; } +void +additional_help_message (ostrstream& output_buf) +{ + output_buf + << "\n" + << "Additional help for builtin functions, operators, and variables\n" + << "is available in the on-line version of the manual.\n" + << "\n" + << "Use the command `help -i ' to search the manual index.\n"; +} + +void +print_usage (const char *string, int just_usage) +{ + ostrstream output_buf; + + symbol_record *sym_rec = global_sym_tab->lookup (string, 0, 0); + if (sym_rec) + { + char *h = sym_rec->help (); + if (h && *h) + { + output_buf << "\n*** " << string << ":\n\n" + << h << "\n"; + + if (! just_usage) + additional_help_message (output_buf); + output_buf << ends; + maybe_page_output (output_buf); + } + } +} + static void -help_syms_list (ostrstream& output_buf, help_list *list, - const char *desc) +display_names_from_help_list (ostrstream& output_buf, help_list *list, + const char *desc) { int count = 0; char **symbols = names (list, count); @@ -305,26 +338,51 @@ } static void +display_symtab_names (ostrstream& output_buf, char **names, + int count, const char *desc) +{ + output_buf << "\n*** " << desc << ":\n\n"; + if (names && count > 0) + list_in_columns (output_buf, names); +} + +static void simple_help (void) { ostrstream output_buf; - help_syms_list (output_buf, operator_help (), "operators"); + display_names_from_help_list (output_buf, operator_help (), + "operators"); - help_syms_list (output_buf, keyword_help (), "reserved words"); - - help_syms_list (output_buf, builtin_text_functions_help (), - "text functions (these names are also reserved)"); + display_names_from_help_list (output_buf, keyword_help (), + "reserved words"); - help_syms_list (output_buf, builtin_mapper_functions_help (), - "mapper functions"); +#ifdef LIST_SYMBOLS +#undef LIST_SYMBOLS +#endif +#define LIST_SYMBOLS(type, msg) \ + do \ + { \ + int count; \ + char **names = global_sym_tab->list (count, 1, type); \ + display_symtab_names (output_buf, names, count, msg); \ + char **ptr = names; \ + while (*ptr) \ + delete [] *ptr++; \ + delete [] names; \ + } \ + while (0) - help_syms_list (output_buf, builtin_general_functions_help (), - "general functions"); +// XXX FIXME XXX -- is this distinction needed? + LIST_SYMBOLS (symbol_def::TEXT_FUNCTION, + "text functions (these names are also reserved)"); - help_syms_list (output_buf, builtin_variables_help (), - "builtin variables"); - + LIST_SYMBOLS (symbol_def::MAPPER_FUNCTION, "mapper functions"); + + LIST_SYMBOLS (symbol_def::BUILTIN_FUNCTION, "general functions"); + + LIST_SYMBOLS (symbol_def::BUILTIN_VARIABLE, "builtin variables"); + // Also need to list variables and currently compiled functions from // the symbol table, if there are any. @@ -416,6 +474,31 @@ return status; } +int +help_from_list (ostrstream& output_buf, const help_list *list, + const char *string, int usage) +{ + char *name; + while ((name = list->name) != 0) + { + if (strcmp (name, string) == 0) + { + if (usage) + output_buf << "\nusage: "; + else + { + output_buf << "\n*** " << string << ":\n\n"; + } + + output_buf << list->help << "\n"; + + return 1; + } + list++; + } + return 0; +} + DEFUN_TEXT ("help", Fhelp, Shelp, -1, 1, "help [-i] [topic ...]\n\ \n\ diff --git a/src/help.h b/src/help.h --- a/src/help.h +++ b/src/help.h @@ -24,6 +24,8 @@ #if !defined (octave_help_h) #define octave_help_h 1 +class ostrstream; + typedef struct help_list { char *name; @@ -34,6 +36,12 @@ extern help_list *operator_help (void); extern help_list *keyword_help (void); +extern int help_from_list (ostrstream& output_buf, + const help_list *list, const char *string, + int usage); + +extern void print_usage (const char *s, int just_usage = 0); + #endif /* diff --git a/src/octave.cc b/src/octave.cc --- a/src/octave.cc +++ b/src/octave.cc @@ -56,6 +56,7 @@ #include "input.h" #include "pager.h" #include "lex.h" +#include "help.h" #include "octave.h" #include "parse.h" #include "unwind-prot.h" diff --git a/src/pr-output.cc b/src/pr-output.cc --- a/src/pr-output.cc +++ b/src/pr-output.cc @@ -42,6 +42,7 @@ #include "pr-output.h" #include "mappers.h" #include "pager.h" +#include "help.h" #include "error.h" #include "utils.h" #include "defun.h" diff --git a/src/sysdep.cc b/src/sysdep.cc --- a/src/sysdep.cc +++ b/src/sysdep.cc @@ -36,6 +36,7 @@ #include "tree-const.h" #include "octave.h" +#include "help.h" #include "input.h" #include "utils.h" #include "oct-obj.h" diff --git a/src/variables.cc b/src/variables.cc --- a/src/variables.cc +++ b/src/variables.cc @@ -772,218 +772,6 @@ return (sr && sr->is_text_function ()); } -/* - * Help stuff. - */ -help_list * -builtin_mapper_functions_help (void) -{ -#if 0 - int count = 0; - builtin_mapper_functions *mfptr; - - mfptr = mapper_functions; - while (mfptr->name) - { - count++; - mfptr++; - } - - if (count == 0) - return 0; - - help_list *hl = new help_list [count+1]; - - int i = 0; - mfptr = mapper_functions; - while (mfptr->name) - { - hl[i].name = mfptr->name; - hl[i].help = mfptr->help_string; - i++; - mfptr++; - } - - hl[count].name = 0; - hl[count].help = 0; - - return hl; -#endif - - return 0; -} - -help_list * -builtin_general_functions_help (void) -{ -#if 0 - int count = 0; - builtin_general_functions *gfptr; - - gfptr = general_functions; - while (gfptr->name) - { - count++; - gfptr++; - } - - if (count == 0) - return 0; - - help_list *hl = new help_list [count+1]; - - int i = 0; - gfptr = general_functions; - while (gfptr->name) - { - hl[i].name = gfptr->name; - hl[i].help = gfptr->help_string; - i++; - gfptr++; - } - - hl[count].name = 0; - hl[count].help = 0; - - return hl; -#endif - - return 0; -} - -help_list * -builtin_text_functions_help (void) -{ -#if 0 - int count = 0; - builtin_text_functions *tfptr; - - tfptr = text_functions; - while (tfptr->name) - { - count++; - tfptr++; - } - - if (count == 0) - return 0; - - help_list *hl = new help_list [count+1]; - - int i = 0; - tfptr = text_functions; - while (tfptr->name) - { - hl[i].name = tfptr->name; - hl[i].help = tfptr->help_string; - i++; - tfptr++; - } - - hl[count].name = 0; - hl[count].help = 0; - - return hl; -#endif - - return 0; -} - -help_list * -builtin_variables_help (void) -{ -#if 0 - int count = 0; - - builtin_string_variables *svptr; - - svptr = string_variables; - while (svptr->name) - { - count++; - svptr++; - } - - if (count == 0) - return 0; - - help_list *hl = new help_list [count+1]; - - int i = 0; - svptr = string_variables; - while (svptr->name) - { - hl[i].name = svptr->name; - hl[i].help = svptr->help_string; - i++; - svptr++; - } - - hl[count].name = 0; - hl[count].help = 0; - - return hl; -#endif - - return 0; -} - -int -help_from_list (ostrstream& output_buf, const help_list *list, - const char *string, int usage) -{ - char *name; - while ((name = list->name) != 0) - { - if (strcmp (name, string) == 0) - { - if (usage) - output_buf << "\nusage: "; - else - { - output_buf << "\n*** " << string << ":\n\n"; - } - - output_buf << list->help << "\n"; - - return 1; - } - list++; - } - return 0; -} - -void -additional_help_message (ostrstream& output_buf) -{ - output_buf - << "\n" - << "Additional help for builtin functions, operators, and variables\n" - << "is available in the on-line version of the manual.\n" - << "\n" - << "Use the command `help -i ' to search the manual index.\n"; -} - -void -print_usage (const char *string, int just_usage) -{ - ostrstream output_buf; - - help_list *gf_help_list = builtin_general_functions_help (); - help_list *tf_help_list = builtin_text_functions_help (); - help_list *mf_help_list = builtin_mapper_functions_help (); - - if (help_from_list (output_buf, gf_help_list, string, 1) - || help_from_list (output_buf, tf_help_list, string, 1) - || help_from_list (output_buf, mf_help_list, string, 1)) - { - if (! just_usage) - additional_help_message (output_buf); - output_buf << ends; - maybe_page_output (output_buf); - } -} - void install_builtin_variables (void) {