# Copyright(c) 1986 Association of Universities for Research in Astronomy Inc. include include "help.h" include "helpdir.h" .help print_help .nf __________________________________________________________________________ PRINT_HELP -- Print help documentation for the named module or parameter. We are called with the name of a single module; all fiddling with packages and templates has been performed by the time we are called. The help directory is open and contains the names of the files containing the help source for the module. Our main task is to determine what kind of help is desired and call the appropriate routine. Recall that the principal options are option meaning file help print help block for module hlp param print help for single param hlp section print a single section hlp files print file names ... source print source file src sysdoc print system documentation sys alldoc print all documentation hlp,sys summary print help block titles hlp,sys .endhelp ______________________________________________________________________ define exit_ 90 # PRINT_HELP -- Print the indicated type of help text for the named module. # If we are called the module exists in the package, but the type of help # information indicated may not exist. Return OK if help is printed, ERR # otherwise. int procedure print_help (db, hp, module, modnum, ctrl) pointer db # help database descriptor pointer hp # help directory for package char module[ARB] # name of module for which help is desired int modnum # module number within package directory pointer ctrl # help control parameters bool not_found int option pointer sp, fname, pakname, modname int hd_getname() begin call smark (sp) call salloc (fname, SZ_PATHNAME, TY_CHAR) call salloc (pakname, SZ_FNAME, TY_CHAR) call salloc (modname, SZ_FNAME, TY_CHAR) # Handle options which do not access a help file. option = H_OPTION(ctrl) H_STATE(ctrl) = BOF not_found = true if (option == O_MENU) { if (hd_getname (hp, modnum, TY_MEN, Memc[fname], SZ_PATHNAME) == 0) goto exit_ iferr (call pr_file (Memc[fname], ctrl, "dummy")) call erract (EA_WARN) else not_found = false } else if (option == O_FILES) { # Print names of all files associated with module. ifnoerr (call pr_filenames (hp, module, modnum, ctrl)) not_found = false } else if (option == O_DIR) { # Print a directory of all help blocks for the named package. ifnoerr (call pr_directory (db, hp, module, modnum, ctrl)) not_found = false } else if (option == O_SOURCE) { # Print source file, if given. if (hd_getname (hp, modnum, TY_SRC, Memc[fname], SZ_PATHNAME) == 0) goto exit_ iferr (call pr_file (Memc[fname], ctrl, "dummy")) call erract (EA_WARN) else not_found = false } else if (option == O_SUMMARY) { # Scan hlp file and print summary of help blocks. if (hd_getname (hp, modnum, TY_HLP, Memc[fname], SZ_PATHNAME) == 0) goto exit_ iferr (call pr_summary (Memc[fname], ctrl)) call erract (EA_WARN) else not_found = false } else { # Get the package and module names. If there is no package name # in the help directory, it is root help directory, and the module # name is actually the name of a package. if (HD_PAKNAME(hp) == 0) { call strcpy (module, Memc[pakname], SZ_FNAME) Memc[modname] = EOS } else { call strcpy (Memc[HD_SBUF(hp) + HD_PAKNAME(hp)], Memc[pakname], SZ_FNAME) call strcpy (module, Memc[modname], SZ_FNAME) } # Print full helpblock (default action). if (option == O_HELP || option == O_ALLDOC || option==O_REFERENCES){ if (hd_getname (hp,modnum,TY_HLP,Memc[fname],SZ_PATHNAME) > 0) { ifnoerr { call pr_helpblock (Memc[fname], Memc[pakname], Memc[modname], TY_HLP, ctrl) } then not_found = false } } # Print system documentation. if (option == O_SYSDOC || option == O_ALLDOC) if (hd_getname (hp,modnum,TY_SYS,Memc[fname],SZ_PATHNAME) > 0) ifnoerr { call pr_helpblock (Memc[fname], Memc[pakname], Memc[modname], TY_HLP, ctrl) } then not_found = false } exit_ call flush (H_OUT(ctrl)) call sfree (sp) if (not_found) return (ERR) else return (OK) end