aboutsummaryrefslogtreecommitdiff
path: root/pkg/system/help/xhelp/xhelp.x
diff options
context:
space:
mode:
authorJoe Hunkeler <jhunkeler@gmail.com>2015-08-11 16:51:37 -0400
committerJoe Hunkeler <jhunkeler@gmail.com>2015-08-11 16:51:37 -0400
commit40e5a5811c6ffce9b0974e93cdd927cbcf60c157 (patch)
tree4464880c571602d54f6ae114729bf62a89518057 /pkg/system/help/xhelp/xhelp.x
downloadiraf-osx-40e5a5811c6ffce9b0974e93cdd927cbcf60c157.tar.gz
Repatch (from linux) of OSX IRAF
Diffstat (limited to 'pkg/system/help/xhelp/xhelp.x')
-rw-r--r--pkg/system/help/xhelp/xhelp.x167
1 files changed, 167 insertions, 0 deletions
diff --git a/pkg/system/help/xhelp/xhelp.x b/pkg/system/help/xhelp/xhelp.x
new file mode 100644
index 00000000..95a2f250
--- /dev/null
+++ b/pkg/system/help/xhelp/xhelp.x
@@ -0,0 +1,167 @@
+# Copyright(c) 1986 Association of Universities for Research in Astronomy Inc.
+
+include <syserr.h>
+include "../help.h"
+include "xhelp.h"
+
+
+# XHELP -- The main task procedure. XHELP is a GUI client program for
+# browsing the IRAF help system. As much as possible it uses the existing
+# help database code but provides a friendlier interface, allowing users to
+# browse packages for help pages in the same way they would browse packages
+# in the CL. It provides an HTML converter for LROFF sources for better
+# presentation in the GUI, as well as Postscript generation for better
+# looking hardcopy. XHelp acts as a server for the help system, merely
+# returning any output that the GUI has requested. Navigation is done in
+# the GUI code, this program maintains just the state of the last page
+# returned and knows nothing about how it got there. See the xhelp.hlp for
+# detailed documentation.
+
+procedure xhelp (topic)
+
+char topic[ARB] #I help template
+
+pointer xh
+char uifname[SZ_FNAME]
+int search, template
+
+pointer xh_open(), gopenui()
+bool clgetb()
+int btoi()
+
+begin
+ # Open structure and allocate pointers.
+ xh = xh_open ()
+ call strcpy (topic, TEMPLATE(xh), SZ_FNAME)
+
+ # Load the task parameters.
+ call clgstr ("option", OPTION(xh), SZ_FNAME)
+ call clgstr ("printer", PRINTER(xh), SZ_FNAME)
+ call clgstr ("quickref", QUICKREF(xh), SZ_FNAME)
+ XH_SHOWTYPE(xh) = btoi (clgetb("showtype"))
+ search = btoi (clgetb("search"))
+ template = btoi (clgetb("file_template"))
+
+ # Fetch the name of the help database.
+ call xh_ghelpdb (xh)
+
+ # Open the GUI.
+ call clgstr ("uifname", uifname, SZ_FNAME)
+ XH_GP(xh) = gopenui ("stdgraph", NEW_FILE, uifname, STDGRAPH)
+ call gflush (XH_GP(xh))
+
+ # Initialize the task and send topic list to the GUI.
+ call xh_init (xh, template, search)
+
+ # Initialize the task and send topic list to the GUI.
+ call xh_command_loop (xh)
+
+ # Clean up.
+ call gclose (XH_GP(xh))
+ call xh_close (xh)
+end
+
+
+# XH_OPEN -- Open and allocate the XHELP task structure.
+
+pointer procedure xh_open ()
+
+pointer xh # task descriptor
+errchk calloc
+
+begin
+ iferr (call calloc (xh, SZ_XHELPSTRUCT, TY_STRUCT))
+ call error (0, "Error opening task structure.")
+
+ iferr {
+ call calloc (XH_LPTR(xh), SZ_HELPLIST, TY_CHAR)
+ call calloc (XH_TEMPLATE(xh), SZ_FNAME, TY_CHAR)
+ call calloc (XH_OPTION(xh), SZ_FNAME, TY_CHAR)
+ call calloc (XH_PRINTER(xh), SZ_FNAME, TY_CHAR)
+ call calloc (XH_CURTASK(xh), SZ_FNAME, TY_CHAR)
+ call calloc (XH_CURPACK(xh), SZ_FNAME, TY_CHAR)
+ call calloc (XH_QUICKREF(xh), SZ_FNAME, TY_CHAR)
+ call calloc (XH_HOMEPAGE(xh), SZ_FNAME, TY_CHAR)
+ call calloc (XH_CURDIR(xh), SZ_PATHNAME, TY_CHAR)
+ call calloc (XH_PATTERN(xh), SZ_FNAME, TY_CHAR)
+ call calloc (XH_HELPDB(xh), SZ_HELPDB, TY_CHAR)
+ } then
+ call error (0, "Error allocating structure pointers.")
+
+ return (xh)
+end
+
+
+# XH_CLOSE -- Close the XHELP task structure.
+
+procedure xh_close (xh)
+
+pointer xh # task descriptor
+
+begin
+ call mfree (XH_TEMPLATE(xh), TY_CHAR)
+ call mfree (XH_OPTION(xh), TY_CHAR)
+ call mfree (XH_PRINTER(xh), TY_CHAR)
+ call mfree (XH_CURTASK(xh), TY_CHAR)
+ call mfree (XH_CURPACK(xh), TY_CHAR)
+ call mfree (XH_QUICKREF(xh), TY_CHAR)
+ call mfree (XH_HOMEPAGE(xh), TY_CHAR)
+ call mfree (XH_CURDIR(xh), TY_CHAR)
+ call mfree (XH_PATTERN(xh), TY_CHAR)
+ call mfree (XH_HELPDB(xh), TY_CHAR)
+ call mfree (XH_LPTR(xh), TY_CHAR)
+
+ call mfree (xh, TY_STRUCT)
+end
+
+
+# XH_GHELPDB -- Fetch the name of the help database, i.e., "helpdb",
+# "helpdir", or the name of a file. If the helpdb string is a list check
+# for the existance of each file in the list to ensure the final list
+# contains only valid help databases.
+
+procedure xh_ghelpdb (xh)
+
+pointer xh # task descriptor
+
+pointer sp, hdb, hdbstr, name
+int list
+int fntopnb(), fntgfnb()
+int access(), envgets()
+bool streq()
+
+begin
+ call smark (sp)
+ call salloc (name, SZ_FNAME, TY_CHAR)
+ call salloc (hdb, SZ_HELPDB, TY_CHAR)
+ call salloc (hdbstr, SZ_HELPDB, TY_CHAR)
+
+ # Clear the working memory.
+ call aclrc (Memc[name], SZ_FNAME)
+ call aclrc (Memc[hdb], SZ_HELPDB)
+ call aclrc (Memc[hdbstr], SZ_HELPDB)
+
+ # Get the parameter value.
+ call clgstr ("helpdb", Memc[hdbstr], SZ_HELPDB)
+ if (streq (Memc[hdbstr], "helpdb"))
+ if (envgets ("helpdb", Memc[hdbstr], SZ_HELPDB) <= 0)
+ call syserrs (SYS_ENVNF, "helpdb")
+
+ # Open the list.
+ list = fntopnb (Memc[hdbstr], YES)
+
+ # Copy each of the existing files in the list to the output database
+ # string to be used by the task.
+ while (fntgfnb(list, Memc[name], SZ_FNAME) != EOF) {
+ if (access (Memc[name], 0, 0) == YES) {
+ if (Memc[hdb] != EOS)
+ call strcat (",", Memc[hdb], SZ_HELPDB)
+ call strcat (Memc[name], Memc[hdb], SZ_HELPDB)
+ }
+ }
+ call strcpy (Memc[hdb], HELPDB(xh), SZ_HELPDB)
+
+ # Clean up.
+ call fntclsb (list)
+ call sfree (sp)
+end