#include <string.h>
#include <unistd.h>
#include <stdio.h>
#include <stddef.h>
#include <stdlib.h>
#include <time.h>
#include <kernel/mod2.h>
#include <omalloc/omalloc.h>
#include <misc/mylimits.h>
#include <resources/feResource.h>
#include <reporter/reporter.h>
#include <resources/omFindExec.h>
#include <reporter/si_signals.h>
#include "ipid.h"
#include "ipshell.h"
#include "libparse.h"
#include "feOpt.h"
#include "tok.h"
#include "fehelp.h"
Go to the source code of this file.
|
static char * | strclean (char *str) |
|
static BOOLEAN | heKey2Entry (char *filename, char *key, heEntry hentry) |
|
static int | heReKey2Entry (char *filename, char *key, heEntry hentry) |
|
static BOOLEAN | strmatch (char *s, char *re) |
|
static BOOLEAN | heOnlineHelp (char *s) |
|
static void | heBrowserHelp (heEntry hentry) |
|
static long | heKeyChksum (char *key) |
|
static BOOLEAN | heGenInit (int, int) |
|
static void | heGenHelp (heEntry hentry, int) |
|
static void | heBuiltinHelp (heEntry hentry, int) |
|
static BOOLEAN | heDummyInit (int, int) |
|
static void | heDummyHelp (heEntry hentry, int) |
|
static BOOLEAN | heEmacsInit (int, int) |
|
static void | heEmacsHelp (heEntry hentry, int) |
|
void | feHelp (char *str) |
|
static void | feBrowserFile () |
|
const char * | feHelpBrowser (char *which, int warn) |
|
void | feStringAppendBrowsers (int warn) |
|
static void | hePrintHelpStr (const idhdl hh, const char *id, const char *pa) |
|
| Print ("running `%s`\, sys) |
|
void | system (sys) |
|
static int | singular_manual (char *str, BOOLEAN isIndexEntry) |
|
static char | tolow (char p) |
|
static int | show (unsigned long offset, char *close) |
|
§ heEntry_s
§ heBrowser_s
§ BUF_LEN
§ FIN_INDEX
§ HELP_NOT_FOUND
§ HELP_NOT_OPEN
§ HELP_OK
§ IDX_LEN
§ MAX_HE_ENTRY_LENGTH
#define MAX_HE_ENTRY_LENGTH 160 |
§ MAX_LINES
§ MAX_SYSCMD_LEN
§ heBrowser
§ heBrowserHelpProc
typedef void(* heBrowserHelpProc) (heEntry hentry, int br) |
§ heBrowserInitProc
typedef BOOLEAN(* heBrowserInitProc) (int warn, int br) |
§ heEntry
§ feBrowserFile()
static void feBrowserFile |
( |
| ) |
|
|
static |
Definition at line 188 of file fehelp.cc.
195 while (fgets( buf,
sizeof(buf), f))
197 if ((buf[0]!=
'#') && (buf[0]>
' ')) br++;
203 while (fgets( buf,
sizeof(buf),
f))
205 if ((buf[0]!=
'#') && (buf[0]>
' '))
207 char *
name=strtok(buf,
"!");
208 char *req=strtok(
NULL,
"!");
209 char *cmd=strtok(
NULL,
"!");
212 while ((cmd[0]!=
'\0') && (cmd[strlen(cmd)-1]<=
' '))
213 cmd[strlen(cmd)-1]=
'\0';
224 Print(
"syntax error in help.cnf, at line starting with %s\n",buf);
static BOOLEAN heEmacsInit(int, int)
heBrowserInitProc init_proc
static void heBuiltinHelp(heEntry hentry, int)
static BOOLEAN heDummyInit(int, int)
Print("running `%s`\, sys)
int status int void * buf
static void heEmacsHelp(heEntry hentry, int)
static void heDummyHelp(heEntry hentry, int)
FILE * feFopen(const char *path, const char *mode, char *where, short useWerror, short path_only)
static void heGenHelp(heEntry hentry, int)
char name(const Variable &v)
static heBrowser_s * heHelpBrowsers
static BOOLEAN heGenInit(int, int)
heBrowserHelpProc help_proc
§ feHelp()
void feHelp |
( |
char * |
str | ) |
|
Definition at line 103 of file fehelp.cc.
111 BOOLEAN key_is_regexp = (strchr(str,
'*') !=
NULL);
117 memset(&hentry,0,
sizeof(hentry));
121 if (!key_is_regexp && (idxfile !=
NULL) &&
heKey2Entry(idxfile, str, &hentry))
147 strcpy(mkey + 1, str);
155 Warn(
"No help for topic '%s' (not even for '*%s*')", str, str);
156 WarnS(
"Try '?;' for general help");
157 WarnS(
"or '?Index;' for all available help topics.");
170 Warn(
"No unique help for '%s'", str);
172 Warn(
"No help for topic '%s'", str);
182 strcpy(hentry.
key, str);
const char * feHelpBrowser(char *which, int warn)
char url[MAX_HE_ENTRY_LENGTH]
static BOOLEAN heOnlineHelp(char *s)
#define MAX_HE_ENTRY_LENGTH
static char * feResource(feResourceConfig config, int warn)
char key[MAX_HE_ENTRY_LENGTH]
static int heReKey2Entry(char *filename, char *key, heEntry hentry)
static void heBrowserHelp(heEntry hentry)
char node[MAX_HE_ENTRY_LENGTH]
void StringSetS(const char *st)
static BOOLEAN heKey2Entry(char *filename, char *key, heEntry hentry)
static heBrowser heCurrentHelpBrowser
void PrintS(const char *s)
static char * strclean(char *str)
§ feHelpBrowser()
const char* feHelpBrowser |
( |
char * |
which, |
|
|
int |
warn |
|
) |
| |
Definition at line 260 of file fehelp.cc.
266 if (which ==
NULL || *which ==
'\0')
309 if (warn)
Warn(
"No help browser '%s' available.", which);
const char * feHelpBrowser(char *which, int warn)
static void * feOptValue(feOptIndex opt)
static void feBrowserFile()
static int heCurrentHelpBrowserIndex
struct fe_option feOptSpec[]
static heBrowser heCurrentHelpBrowser
static heBrowser_s * heHelpBrowsers
§ feStringAppendBrowsers()
void feStringAppendBrowsers |
( |
int |
warn | ) |
|
Definition at line 352 of file fehelp.cc.
const char * feHelpBrowser(char *which, int warn)
static void feBrowserFile()
void StringAppendS(const char *st)
static heBrowser_s * heHelpBrowsers
§ heBrowserHelp()
static void heBrowserHelp |
( |
heEntry |
hentry | ) |
|
|
static |
Definition at line 780 of file fehelp.cc.
783 int kchksum = (hentry !=
NULL && hentry->
chksum > 0 ?
798 Warn(
"Use 'system(\"--browser\", <browser>);' to change browser,");
809 if (browsers[strlen(browsers)-2] ==
',')
811 browsers[strlen(browsers)-2] =
'.';
812 browsers[strlen(browsers)-1] =
'\0';
const char * feHelpBrowser(char *which, int warn)
static BOOLEAN heOnlineHelp(char *s)
static BOOLEAN feHelpCalled
char key[MAX_HE_ENTRY_LENGTH]
static int heCurrentHelpBrowserIndex
void StringSetS(const char *st)
static heBrowser heCurrentHelpBrowser
static long heKeyChksum(char *key)
static heBrowser_s * heHelpBrowsers
heBrowserHelpProc help_proc
§ heBuiltinHelp()
static void heBuiltinHelp |
( |
heEntry |
hentry, |
|
|
int |
|
|
) |
| |
|
static |
Definition at line 1037 of file fehelp.cc.
1040 hentry->
key :
"Top");
char url[MAX_HE_ENTRY_LENGTH]
static int singular_manual(char *str, BOOLEAN isIndexEntry)
char key[MAX_HE_ENTRY_LENGTH]
§ heDummyHelp()
static void heDummyHelp |
( |
heEntry |
hentry, |
|
|
int |
|
|
) |
| |
|
static |
Definition at line 1019 of file fehelp.cc.
1021 WerrorS(
"No functioning help browser available.");
void WerrorS(const char *s)
§ heDummyInit()
static BOOLEAN heDummyInit |
( |
int |
, |
|
|
int |
|
|
) |
| |
|
static |
§ heEmacsHelp()
static void heEmacsHelp |
( |
heEntry |
hentry, |
|
|
int |
|
|
) |
| |
|
static |
Definition at line 1028 of file fehelp.cc.
1030 WarnS(
"Your help command could not be executed. Use");
1032 (hentry !=
NULL && *(hentry->
node) !=
'\0' ? hentry->
node :
"Top"));
1033 Warn(
"to enter the Singular online help. For general");
1034 Warn(
"information on Singular running under Emacs, type C-h m.");
char node[MAX_HE_ENTRY_LENGTH]
§ heEmacsInit()
static BOOLEAN heEmacsInit |
( |
int |
, |
|
|
int |
|
|
) |
| |
|
static |
§ heGenHelp()
static void heGenHelp |
( |
heEntry |
hentry, |
|
|
int |
br |
|
) |
| |
|
static |
Definition at line 882 of file fehelp.cc.
886 if (p==
NULL) {
PrintS(
"no action ?\n");
return;}
902 if ((*p==
'h')&&(htmldir!=
NULL))
903 strcat(sys,
"file://localhost");
904 else if ((*p==
'H')||(htmldir==
NULL))
907 if (hentry !=
NULL && *(hentry->
url) !=
'\0')
908 #ifdef HAVE_VSNPRINTF 911 snprintf(temp,256,
"%s/%d-%d-%d/%s", htmldir,
917 snprintf(temp,256,
"%s/%s", htmldir, hentry->
url);
922 snprintf(temp,256,
"%s/%d-%d-%d/index.htm", htmldir,
928 snprintf(temp,256,
"%s/index.htm", htmldir);
933 sprintf(temp,
"%s/%d-%d-%d/%s", htmldir,
939 sprintf(temp,
"%s/%d-%d-%d/%s", htmldir, hentry->
url);
943 sprintf(temp,
"%s/%d-%d-%d/index.htm", htmldir,
949 sprintf(temp,
"%s/index.htm", htmldir);
955 char *
pp=(
char *)strchr(sys,
'#');
969 if (i_res!=
NULL) strcat(sys,i_res);
972 WarnS(
"singular.hlp not found");
981 if ((hentry!=
NULL) && (*(hentry->
node) !=
'\0'))
982 sprintf(temp,
"%s",hentry->
node);
char url[MAX_HE_ENTRY_LENGTH]
static char * feResource(feResourceConfig config, int warn)
char node[MAX_HE_ENTRY_LENGTH]
void PrintS(const char *s)
static heBrowser_s * heHelpBrowsers
§ heGenInit()
static BOOLEAN heGenInit |
( |
int |
warn, |
|
|
int |
br |
|
) |
| |
|
static |
Definition at line 823 of file fehelp.cc.
838 if (warn)
Warn(
"resource `%c` not found",*p);
845 if (warn)
WarnS(
"resource `D` not found");
858 while (((*p==
':')||(*p<=
' ')) && (*p!=
'\0')) p++;
859 while((i<127) && (*p>
' ') && (*p!=
':'))
861 name[
i]=*
p; p++; i++;
863 if (i==0)
return FALSE;
865 if ((op==
'O') && (strcmp(name,S_UNAME)!=0))
869 if (warn)
Warn(
"executable `%s` not found",name);
874 default:
Warn(
"unknown char %c",*p);
static char * feResource(feResourceConfig config, int warn)
char name(const Variable &v)
static heBrowser_s * heHelpBrowsers
char * omFindExec(const char *name, char *exec)
§ heKey2Entry()
static BOOLEAN heKey2Entry |
( |
char * |
filename, |
|
|
char * |
key, |
|
|
heEntry |
hentry |
|
) |
| |
|
static |
Definition at line 399 of file fehelp.cc.
404 *(hentry->
key) =
'\0';
405 *(hentry->
url) =
'\0';
406 *(hentry->
node) =
'\0';
409 fd = fopen(filename,
"r");
415 while ((c = getc(fd)) != EOF)
420 while (getc(fd) !=
'\n') {};
433 if (getc(fd) !=
'\t')
goto Failure;
436 if (hentry->
key != key) strcpy(hentry->
key, key);
439 while ((c = getc(fd)) !=
'\t' && c != EOF)
444 if (c == EOF)
goto Failure;
445 if (hentry->
node[0]==
'\0')
446 strcpy(hentry->
node,hentry->
key);
451 while ((c = getc(fd)) !=
'\t' && c != EOF)
456 if (c == EOF)
goto Failure;
459 hentry->
url[
i] =
'\0';
461 if (si_fscanf(fd,
"%ld\n", &(hentry->
chksum)) != 1)
char url[MAX_HE_ENTRY_LENGTH]
char key[MAX_HE_ENTRY_LENGTH]
char node[MAX_HE_ENTRY_LENGTH]
§ heKeyChksum()
static long heKeyChksum |
( |
char * |
key | ) |
|
|
static |
Definition at line 760 of file fehelp.cc.
762 if (key ==
NULL || *key ==
'\0')
return 0;
767 if (pi !=
NULL)
return pi->
data.s.help_chksum;
§ heOnlineHelp()
static BOOLEAN heOnlineHelp |
( |
char * |
s | ) |
|
|
static |
Definition at line 632 of file fehelp.cc.
637 if ((ss=strstr(
s,
"::"))!=
NULL)
644 Print(
"help for %s from package %s\n",ss,
s);
647 strcat(s_help,
"_help");
652 else Print(
"package %s not found\n",
s);
662 if((lib!=
NULL)&&(*lib!=
'\0'))
664 Print(
"// proc %s from lib %s\n",
s,lib);
691 if (strlen(
s) >=4 && strcmp(&
s[ls-3],
"lib") == 0)
693 if (
s[ls - 4] ==
'.') str =
s;
708 if ((str[1]!=
'\0') &&
723 Warn(
"library %s has an old format. Please fix it for the next time",
727 while (fgets( buf,
sizeof(buf), fp))
729 if (strncmp(buf,
"//",2)==0)
731 if (found)
return TRUE;
733 else if ((strncmp(buf,
"proc ",5)==0)||(strncmp(buf,
"LIB ",4)==0))
735 if (!found)
WarnS(
"no help part in library found");
const CanonicalForm int s
int yylplex(const char *libname, const char *libfile, lib_style_types *lib_style, idhdl pl, BOOLEAN autoexport=FALSE, lp_modes=LOAD_LIB)
Print("running `%s`\, sys)
int status int void * buf
FILE * feFopen(const char *path, const char *mode, char *where, short useWerror, short path_only)
void PrintS(const char *s)
static void hePrintHelpStr(const idhdl hh, const char *id, const char *pa)
BOOLEAN iiLocateLib(const char *lib, char *where)
char * iiGetLibName(procinfov pi)
char * iiGetLibProcBuffer(procinfo *pi, int part)
idhdl ggetid(const char *n, BOOLEAN, idhdl *packhdl)
§ hePrintHelpStr()
Definition at line 619 of file fehelp.cc.
627 Print(
"`%s` not found in package %s\n",
id,pa);
Print("running `%s`\, sys)
void PrintS(const char *s)
§ heReKey2Entry()
static int heReKey2Entry |
( |
char * |
filename, |
|
|
char * |
key, |
|
|
heEntry |
hentry |
|
) |
| |
|
static |
Definition at line 579 of file fehelp.cc.
585 if (filename ==
NULL || key ==
NULL)
return 0;
586 fd = fopen(filename,
"r");
587 if (fd ==
NULL)
return 0;
589 while (si_fscanf(fd,
"%[^\t]\t%*[^\n]\n", index_key) == 1)
594 Werror(
"index file corrupt at line >>%s<<",index_key);
#define MAX_HE_ENTRY_LENGTH
char key[MAX_HE_ENTRY_LENGTH]
static BOOLEAN heKey2Entry(char *filename, char *key, heEntry hentry)
static BOOLEAN strmatch(char *s, char *re)
void Werror(const char *fmt,...)
§ Print()
Print |
( |
"running `%s`\ |
, |
|
|
sys |
|
|
) |
| |
§ show()
static int show |
( |
unsigned long |
offset, |
|
|
char * |
close |
|
) |
| |
|
static |
Definition at line 1065 of file fehelp.cc.
1073 fseek(help, (
long)(
offset+1), (
int)0);
1074 while( (!feof(help))
1075 && (*fgets(buffer,
BUF_LEN, help) != EOF)
1078 printf(
"%s", buffer);
1081 printf(
"\n Press <RETURN> to continue or x to exit help.\n");
1083 *close = (char)getchar();
1094 printf(
"\nEnd of part. Press <RETURN> to continue or x to exit help.\n");
1096 *close = (char)getchar();
static char * feResource(feResourceConfig config, int warn)
§ singular_manual()
static int singular_manual |
( |
char * |
str, |
|
|
BOOLEAN |
isIndexEntry |
|
) |
| |
|
static |
Definition at line 1105 of file fehelp.cc.
1113 Print(
"HELP >>%s>>\n",str);
1122 for(p=str; *
p; p++) *p =
tolow(*p);
1127 while ((p != str) && (*p<=
' '));
1130 (void)sprintf(String,
" %s ", str);
1134 (void)sprintf(String,
" %s", str);
1138 && (fgets(buffer,
BUF_LEN, index) != (
char *)0)
1144 if (si_sscanf(buffer,
"Node:%[^\177]\177%ld\n", Index, &offset)!=2)
1148 for(p=Index; *
p; p++) *p =
tolow(*p);
1149 (void)strcat(Index,
" ");
1150 if( strstr(Index, String)!=
NULL)
1152 done++; (void)
show(offset, &close);
1155 else if( strcmp(Index, String)==0)
1157 done++; (void)
show(offset, &close);
1164 if (index !=
NULL) (void)fclose(index);
1167 Warn(
"`%s` not found",String);
static char * feResource(feResourceConfig config, int warn)
static int show(unsigned long offset, char *close)
Print("running `%s`\, sys)
static int index(p_Length length, p_Ord ord)
static char tolow(char p)
§ strclean()
static char * strclean |
( |
char * |
str | ) |
|
|
static |
Definition at line 375 of file fehelp.cc.
379 while ((*s <=
' ') && (*s !=
'\0')) s++;
380 if (*s ==
'\0')
return NULL;
382 while (*ss!=
'\0') ss++;
384 while ((*ss <=
' ') && (*ss !=
'\0'))
389 if (*ss ==
'\0')
return NULL;
const CanonicalForm int s
§ strmatch()
static BOOLEAN strmatch |
( |
char * |
s, |
|
|
char * |
re |
|
) |
| |
|
static |
Definition at line 491 of file fehelp.cc.
493 if (
s ==
NULL || *
s ==
'\0')
494 return (re ==
NULL || *re ==
'\0' || strcmp(re,
"*") == 0);
495 if (re ==
NULL || *re ==
'\0')
return FALSE;
500 char *
l, *
r, *ll, *rr;
507 if (*
s >=
'A' && *
s <=
'Z') ls[
i] = *
s + (
'a' -
'A');
511 }
while (*
s !=
'\0');
519 if (*re >=
'A' && *re <=
'Z') rs[
i]= *re + (
'a' -
'A');
523 }
while (*re !=
'\0');
528 while (*r !=
'*' && *r !=
'\0' && *l !=
'\0')
530 if (*r != *l)
return FALSE;
536 if (*r ==
'\0')
return (*l ==
'\0');
537 if (*r ==
'*' && r[1] ==
'\0')
return TRUE;
538 if (*l ==
'\0')
return FALSE;
540 rr = &r[strlen(r) - 1];
541 ll = &l[strlen(l) - 1];
542 while (*rr !=
'*' && *rr !=
'\0' && *ll !=
'\0')
544 if (*rr != *ll)
return FALSE;
550 if (*rr ==
'\0')
return (*ll ==
'\0');
551 if (*rr ==
'*' && rr[-1] ==
'\0')
return TRUE;
552 if (*ll ==
'\0')
return FALSE;
560 while (*rr !=
'*' && *rr !=
'\0') rr++;
const CanonicalForm int s
#define MAX_HE_ENTRY_LENGTH
§ system()
§ tolow()
static char tolow |
( |
char |
p | ) |
|
|
inlinestatic |
Definition at line 1058 of file fehelp.cc.
1060 if ((
'A'<=
p)&&(
p<=
'Z'))
return p | 040;
§ feHelpCalled
§ heCurrentHelpBrowser
§ heCurrentHelpBrowserIndex
int heCurrentHelpBrowserIndex = -1 |
|
static |
§ heHelpBrowsers