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/prsummary.x | 95 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 pkg/system/help/prsummary.x (limited to 'pkg/system/help/prsummary.x') diff --git a/pkg/system/help/prsummary.x b/pkg/system/help/prsummary.x new file mode 100644 index 00000000..d030842d --- /dev/null +++ b/pkg/system/help/prsummary.x @@ -0,0 +1,95 @@ +# Copyright(c) 1986 Association of Universities for Research in Astronomy Inc. + +include "help.h" + +# PR_SUMMARY -- Print a summary of the headers of all help blocks in a +# helpfile. Open the help file and search for the successive blocks. +# Print nice diagnostics describing the contents of the file. + +define TABSTOP 50 + +procedure pr_summary (fname, ctrl) + +char fname[ARB] +pointer ctrl + +int fd, i, n, nlines +pointer sp, hb, lbuf +int open(), gstrcat(), hb_getnextblk(), strlen(), getline(), strmatch() + +begin + call smark (sp) + call salloc (hb, LEN_HBSTRUCT, TY_STRUCT) + call salloc (lbuf, SZ_LINE, TY_CHAR) + + iferr (fd = open (fname, READ_ONLY, TEXT_FILE)) { + call eprintf ("Cannot open helpfile `%s'\n") + call pargstr (fname) + call sfree (sp) + return + } + HB_LINENO(hb) = 0 + H_IN(ctrl) = fd + + # Search through the help file for the named help block, of type + # help or system. Decode the help block header into the HB struct. + + call houtput (ctrl, "\n") + call sprintf (Memc[lbuf], SZ_LINE, "==> %s <==\n") + call pargstr (fname) + call houtput (ctrl, Memc[lbuf]) + + while (H_EOF(ctrl) != EOF && hb_getnextblk (hb, ctrl) != EOF) { + # Describe help block. + call sprintf (Memc[lbuf], SZ_LINE, "%6d ") + call pargi (HB_LINENO(hb)) + + # Print keyword names. + if (HB_NKEYS(hb) > 0) + n = gstrcat (HB_KEY(hb,1), Memc[lbuf], SZ_LINE) + else + n = strlen (Memc[lbuf]) + + for (i=2; i <= HB_NKEYS(hb); i=i+1) { + n = gstrcat (", ", Memc[lbuf], SZ_LINE) + n = gstrcat (HB_KEY(hb,i), Memc[lbuf], SZ_LINE) + } + + # Advance to tabstop and print section label. + repeat { + Memc[lbuf+n] = ' ' + n = n + 1 + } until (n >= TABSTOP) + Memc[lbuf+n] = EOS + + n = gstrcat (HB_SECTION(hb), Memc[lbuf], SZ_LINE) + if (HB_TYPE(hb) != TY_HLP) { + call sprintf (Memc[lbuf+n], SZ_LINE-n, " (%s)") + call pargstr (HB_TYPESTR(hb)) + } + + call strcat ("\n", Memc[lbuf], SZ_LINE) + call houtput (ctrl, Memc[lbuf]) + + # Print block title, if any, on next line. + if (strlen (HB_TITLE(hb)) > 0) { + call sprintf (Memc[lbuf], SZ_LINE, " %s\n") + call pargstr (HB_TITLE(hb)) + call houtput (ctrl, Memc[lbuf]) + } + + # Count and print number of lines in help block. + for (nlines=0; getline (fd, Memc[lbuf]) != EOF; nlines=nlines+1) + if (strmatch (Memc[lbuf], "^.{endhelp}") > 0) + break + call sprintf (Memc[lbuf], SZ_LINE, " block size %d lines\n") + call pargi (nlines) + + call houtput (ctrl, Memc[lbuf]) + call houtput (ctrl, "\n") + HB_LINENO(hb) = HB_LINENO(hb) + nlines + 1 + } + + call close (fd) + call sfree (sp) +end -- cgit