This is vmshelp.c in view mode; [Download] [Up]
/* vms_get_help.c */ #include <config.h> #include <stdio.h> #include <slang.h> #include <string.h> #include <descrip.h> /* Not all systems have this (GCC) so I am not using it. */ /* #include <hlpdef.h> */ #define HLP$M_PROMPT 1 #define HLP$M_LIBLIST 16 #include "buffer.h" #include "ins.h" #include "cmds.h" /* Need to pass strings by descriptor to LBR$OUTPUT_HELP; */ /* string descriptors in SYS$LIBRARY:DESCRIP.H. */ /* Change definition of $DESCRIPTOR macro. In descrip.h, */ /* sizeof(string)-1 used, but sizeof() bites on strings */ /* with spaces, or with '$'. That means that the filename */ /* might be truncated (i.e., 'SYS$HELP:HELPLIB.OLB' */ /* becomes 'SYS'). Ditto the topic (i.e., 'SET HOST /LOG' */ /* becomes 'SET'). */ #define $STR_DESC(x,y) \ (x).dsc$w_length = strlen(y);\ (x).dsc$b_dtype = DSC$K_DTYPE_T;\ (x).dsc$b_class = DSC$K_CLASS_S;\ (x).dsc$a_pointer = (y) /*--------------------------------------------------------------*/ /* */ /* vms_get_help: call the librarian utility to get help */ /* */ /* input: */ /* char helpfile - name of the help file to use */ /* char helptopic - name of topic to use initially */ /* (Since HLP$M_PROMPT is set, user will */ /* get interactive prompting once in.) */ /* returns: */ /* int - 0 for failure, 1 for success */ /* */ /* Translated from a FORTRAN subroutine. That subroutine */ /* was gutted from several of J.W. Pflugrath's routines */ /* for I/O, et cetera. */ /* */ /* Jim Clifton Brandeis University */ /* J.W. Pflugrath Cold Spring Harbor Laboratory */ /* */ /*--------------------------------------------------------------*/ int vms_get_help(char *helpfile, char *helptopic) { int LBR$OUTPUT_HELP(), output_help_to_buf(), input_new_helptopic(); int istat; unsigned int flags; struct dsc$descriptor_s topnam, filnam; $STR_DESC(topnam,helptopic); $STR_DESC(filnam,helpfile); flags = HLP$M_PROMPT; istat = LBR$OUTPUT_HELP(&output_help_to_buf, 0, /* output width 0 is 80 */ &topnam, /* topic */ &filnam, /* lib file */ &flags, /* Also try: M_LIBLIST M_HELP */ &input_new_helptopic); if (istat != 1) return 0; return 1; } /*----------------------------------------------------------------------*/ /* */ /* Here we mimic the syntax of LIB$PUT_OUTPUT */ /* */ /* VMS system procedures (including the RTL) pass strings by */ /* descriptor. That's what LBR$OUTPUT_HELP expects (demands!). This */ /* routine (and the next) just function to integrate LBR$OUTPUT_HELP */ /* I/O into jed I/O. */ /* */ /* Jim Clifton Brandeis University */ /* */ /*----------------------------------------------------------------------*/ int output_help_to_buf(struct dsc$descriptor_s *string) { ins_chars((unsigned char *) string->dsc$a_pointer, string->dsc$w_length); newline (); return(1); /* should add codes that LIB$PUT_OUTPUT can return */ } /*----------------------------------------------------------------------*/ /* */ /* Mimic the syntax of LIB$GET_INPUT() */ /* */ /* Note that the first 2 characters of the LBR$OUTPUT_HELP prompt are */ /* "^M^J", so we send read_from_minibuffer the address of the 3rd char. */ /* */ /* Jim Clifton Brandeis University */ /* */ /*----------------------------------------------------------------------*/ int input_new_helptopic(struct dsc$descriptor_s *newtopic, struct dsc$descriptor_s *prompt, unsigned int *len_newtopic) { char *newtop, promp[80]; int dofree = 0; strncpy(promp,prompt->dsc$a_pointer,prompt->dsc$w_length); promp[prompt->dsc$w_length] = 0; if (!SLang_run_hooks("vms_help_newtopic", promp + 2, NULL) || SLang_pop_string(&newtop, &dofree)) newtop = ""; strcpy(newtopic->dsc$a_pointer,newtop); *len_newtopic = newtopic->dsc$w_length = strlen(newtop); newtopic->dsc$b_dtype = DSC$K_DTYPE_T; newtopic->dsc$b_class = DSC$K_CLASS_S; if (dofree == 1) SLFREE(newtop); return(1); /* should add codes that LIB$GET_INPUT can return */ }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.