From fa080de7afc95aa1c19a6e6fc0e0708ced2eadc4 Mon Sep 17 00:00:00 2001 From: Joseph Hunkeler Date: Wed, 8 Jul 2015 20:46:52 -0400 Subject: Initial commit --- pkg/system/help/xhelp/xhfiles.x | 89 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 pkg/system/help/xhelp/xhfiles.x (limited to 'pkg/system/help/xhelp/xhfiles.x') diff --git a/pkg/system/help/xhelp/xhfiles.x b/pkg/system/help/xhelp/xhfiles.x new file mode 100644 index 00000000..53597eda --- /dev/null +++ b/pkg/system/help/xhelp/xhfiles.x @@ -0,0 +1,89 @@ +# Copyright(c) 1986 Association of Universities for Research in Astronomy Inc. + +include +include +include "../help.h" +include "xhelp.h" + + +# XH_FILES -- Get the files associated with the requested help topic, +# i.e. do a "help opt=files" request. + +procedure xh_files (xh, topic, curpack) + +pointer xh #i task struct pointer +char topic[ARB] #i help topic +char curpack[ARB] #i current package + +pointer sp, bp, buf +pointer opt, val, line +int fd +long fsize +char fname[SZ_FNAME] + +long fstatl() +int getline(), access(), open(), stridxs(), strlen() + +begin + if (topic[1] == EOS && curpack[1] == EOS) + return + + call smark (sp) + call salloc (line, SZ_LINE, TY_CHAR) + call salloc (buf, SZ_FNAME, TY_CHAR) + call salloc (opt, SZ_FNAME, TY_CHAR) + call salloc (val, SZ_FNAME, TY_CHAR) + + # Get a temp file name. + call mktemp ("tmp$xhelpi", fname, SZ_FNAME) + + # Open a temp file with the help information found. + fd = open (fname, NEW_FILE, TEXT_FILE) + call xh_get_help (fd, topic, curpack, "", HF_HTML, HELPDB(xh), + "all", "files") + call close (fd) + + # Open the results file for reading. + fd = open (fname, READ_ONLY, TEXT_FILE) + fsize = fstatl (fd, F_FILESIZE) + + # If we got a result parse the lines for "opt=file" information. + if (fsize != 0) { + + while (getline (fd, Memc[line]) != EOF) { + + # Stomp the newline. + Memc[line+strlen(Memc[line])-1] = EOS + + # Extract the option type and filename. + if (stridxs ("=", Memc[line]) > 0) { + for (bp=line; IS_WHITE(Memc[bp]); bp=bp+1) + ; + call strcpy (Memc[bp], Memc[opt], 3) + for (; Memc[bp] != '='; bp=bp+1) + ; + call strcpy (Memc[bp+1], Memc[val], SZ_FNAME) + + # See if the file exists. + call sprintf (Memc[buf], SZ_FNAME, "%s %s \0") + call pargstr (Memc[opt]) + call pargstr (Memc[val]) + if (access (Memc[val],0,0) == YES) + call strcat (" 0", Memc[buf], SZ_FNAME) + else + call strcat (" 1", Memc[buf], SZ_FNAME) + call gmsg (XH_GP(xh), "helpfiles", Memc[buf]) + + } else if (stridxs (":", Memc[line]) > 0) { + call xh_pkgpath (xh, topic, curpack, Memc[line]) + call sprintf (Memc[buf], SZ_FNAME, "file %s") + call pargstr (Memc[line]) + call gmsg (XH_GP(xh), "helpfiles", Memc[buf]) + } + } + } + + call close (fd) # clean up + call delete (fname) + call sfree (sp) +end -- cgit