Data Structures | Macros | Typedefs | Functions | Variables
fehelp.cc File Reference
#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.

Data Structures

struct  heEntry_s
 
struct  heBrowser_s
 

Macros

#define MAX_HE_ENTRY_LENGTH   160
 
#define MAX_SYSCMD_LEN   MAXPATHLEN*2
 
#define HELP_OK   0
 
#define FIN_INDEX   '\037'
 
#define HELP_NOT_OPEN   1
 
#define HELP_NOT_FOUND   2
 
#define BUF_LEN   256
 
#define IDX_LEN   256
 
#define MAX_LINES   21
 

Typedefs

typedef heEntry_sheEntry
 
typedef void(* heBrowserHelpProc) (heEntry hentry, int br)
 
typedef BOOLEAN(* heBrowserInitProc) (int warn, int br)
 
typedef heBrowser_sheBrowser
 

Functions

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`\n", 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)
 

Variables

static heBrowser heCurrentHelpBrowser = NULL
 
static int heCurrentHelpBrowserIndex = -1
 
static heBrowser_sheHelpBrowsers =NULL
 
static BOOLEAN feHelpCalled = FALSE
 

Data Structure Documentation

struct heEntry_s

Definition at line 44 of file fehelp.cc.

Data Fields
long chksum
char key[MAX_HE_ENTRY_LENGTH]
char node[MAX_HE_ENTRY_LENGTH]
char url[MAX_HE_ENTRY_LENGTH]
struct heBrowser_s

Definition at line 56 of file fehelp.cc.

Data Fields
const char * action
const char * browser
heBrowserHelpProc help_proc
heBrowserInitProc init_proc
const char * required

Macro Definition Documentation

#define BUF_LEN   256

Definition at line 1050 of file fehelp.cc.

#define FIN_INDEX   '\037'

Definition at line 1047 of file fehelp.cc.

#define HELP_NOT_FOUND   2

Definition at line 1049 of file fehelp.cc.

#define HELP_NOT_OPEN   1

Definition at line 1048 of file fehelp.cc.

#define HELP_OK   0

Definition at line 1046 of file fehelp.cc.

#define IDX_LEN   256

Definition at line 1051 of file fehelp.cc.

#define MAX_HE_ENTRY_LENGTH   160

Definition at line 43 of file fehelp.cc.

#define MAX_LINES   21

Definition at line 1052 of file fehelp.cc.

#define MAX_SYSCMD_LEN   MAXPATHLEN*2

Definition at line 818 of file fehelp.cc.

Typedef Documentation

Definition at line 64 of file fehelp.cc.

typedef void(* heBrowserHelpProc) (heEntry hentry, int br)

Definition at line 53 of file fehelp.cc.

typedef BOOLEAN(* heBrowserInitProc) (int warn, int br)

Definition at line 54 of file fehelp.cc.

typedef heEntry_s* heEntry

Definition at line 51 of file fehelp.cc.

Function Documentation

static void feBrowserFile ( )
static

Definition at line 188 of file fehelp.cc.

189 {
190  FILE *f=feFopen("help.cnf","r",NULL,TRUE);
191  int br=0;
192  if (f!=NULL)
193  {
194  char buf[512];
195  while (fgets( buf, sizeof(buf), f))
196  {
197  if ((buf[0]!='#') && (buf[0]>' ')) br++;
198  }
199  fseek(f,0,SEEK_SET);
200  // for the 4(!) default browsers
202  br = 0;
203  while (fgets( buf, sizeof(buf), f))
204  {
205  if ((buf[0]!='#') && (buf[0]>' '))
206  {
207  char *name=strtok(buf,"!");
208  char *req=strtok(NULL,"!");
209  char *cmd=strtok(NULL,"!");
210  if ((name!=NULL) && (req!=NULL) && (cmd!=NULL))
211  {
212  while ((cmd[0]!='\0') && (cmd[strlen(cmd)-1]<=' '))
213  cmd[strlen(cmd)-1]='\0';
214  //Print("name %d >>%s<<\n\treq:>>%s<<\n\tcmd:>>%s<<\n",br,name,req,cmd);
215  heHelpBrowsers[br].browser=(char *)omStrDup(name);
219  heHelpBrowsers[br].action=omStrDup(cmd);
220  br++;
221  }
222  else
223  {
224  Print("syntax error in help.cnf, at line starting with %s\n",buf);
225  }
226  }
227  }
228  fclose(f);
229  }
230  else
231  {
232  // for the 4(!) default browsers
234  }
235  heHelpBrowsers[br].browser="builtin";
238  heHelpBrowsers[br].required="i";
239  //heHelpBrowsers[br].action=NULL;
240  br++;
241  heHelpBrowsers[br].browser="dummy";
244  //heHelpBrowsers[br].required=NULL;
245  //heHelpBrowsers[br].action=NULL;
246  br++;
247  heHelpBrowsers[br].browser="emacs";
250  //heHelpBrowsers[br].required=NULL;
251  //heHelpBrowsers[br].action=NULL;
252  //br++;
253  //heHelpBrowsers[br].browser=NULL;
254  //heHelpBrowsers[br].init_proc=NULL;
255  //heHelpBrowsers[br].help_proc=NULL;
256  //heHelpBrowsers[br].required=NULL;
257  //heHelpBrowsers[br].action=NULL;
258 }
f
Definition: cfModGcd.cc:4022
static BOOLEAN heEmacsInit(int, int)
Definition: fehelp.cc:1020
heBrowserInitProc init_proc
Definition: fehelp.cc:59
const char * required
Definition: fehelp.cc:61
const char * action
Definition: fehelp.cc:62
#define TRUE
Definition: auxiliary.h:144
const char * browser
Definition: fehelp.cc:58
static void heBuiltinHelp(heEntry hentry, int)
Definition: fehelp.cc:1033
static BOOLEAN heDummyInit(int, int)
Definition: fehelp.cc:1011
int status int void * buf
Definition: si_signals.h:59
Print("running `%s`\n", sys)
static void heEmacsHelp(heEntry hentry, int)
Definition: fehelp.cc:1024
static void heDummyHelp(heEntry hentry, int)
Definition: fehelp.cc:1015
FILE * feFopen(const char *path, const char *mode, char *where, short useWerror, short path_only)
Definition: feFopen.cc:47
static void heGenHelp(heEntry hentry, int)
Definition: fehelp.cc:878
char name(const Variable &v)
Definition: variable.h:95
#define NULL
Definition: omList.c:10
static heBrowser_s * heHelpBrowsers
Definition: fehelp.cc:96
static BOOLEAN heGenInit(int, int)
Definition: fehelp.cc:819
heBrowserHelpProc help_proc
Definition: fehelp.cc:60
#define SEEK_SET
Definition: mod2.h:125
#define omAlloc0(size)
Definition: omAllocDecl.h:211
#define omStrDup(s)
Definition: omAllocDecl.h:263
void feHelp ( char *  str)

Definition at line 103 of file fehelp.cc.

104 {
105  str = strclean(str);
106  if (str == NULL) {heBrowserHelp(NULL); return;}
107 
108  if (strlen(str) > MAX_HE_ENTRY_LENGTH - 2) // need room for extra **
109  str[MAX_HE_ENTRY_LENGTH - 3] = '\0';
110 
111  BOOLEAN key_is_regexp = (strchr(str, '*') != NULL);
112 
113  // try proc help and library help
114  if (! key_is_regexp && heOnlineHelp(str)) return;
115 
116  heEntry_s hentry;
117  memset(&hentry,0,sizeof(hentry));
118  char* idxfile = feResource('x' /*"IdxFile"*/);
119 
120  // Try exact match of help string with key in index
121  if (!key_is_regexp && (idxfile != NULL) && heKey2Entry(idxfile, str, &hentry))
122  {
123  heBrowserHelp(&hentry);
124  return;
125  }
126 
127  // Try to match approximately with key in index file
128  if (idxfile != NULL)
129  {
132 
133  StringSetS("");
134  int found = heReKey2Entry(idxfile, str, &hentry);
135 
136  // Try to match with str*
137  if (found == 0)
138  {
139  char mkey[MAX_HE_ENTRY_LENGTH];
140  strcpy(mkey, str);
141  strcat(mkey, "*");
142  found = heReKey2Entry(idxfile, mkey, &hentry);
143  // Try to match with *str*
144  if (found == 0)
145  {
146  mkey[0] = '*';
147  strcpy(mkey + 1, str);
148  strcat(mkey, "*");
149  found = heReKey2Entry(idxfile, mkey, &hentry);
150  }
151 
152  // Print warning and return if nothing found
153  if (found == 0)
154  {
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.");
158  return;
159  }
160  }
161 
162  // do help if unique match was found
163  if (found == 1)
164  {
165  heBrowserHelp(&hentry);
166  return;
167  }
168  // Print warning about multiple matches and return
169  if (key_is_regexp)
170  Warn("No unique help for '%s'", str);
171  else
172  Warn("No help for topic '%s'", str);
173  Warn("Try one of");
174  char *matches=StringEndS();
175  PrintS(matches);
176  omFree(matches);
177  PrintLn();
178  return;
179  }
180 
181  // no idx file, let Browsers deal with it, if they can
182  strcpy(hentry.key, str);
183  *hentry.node = '\0';
184  *hentry.url = '\0';
185  hentry.chksum = 0;
186  heBrowserHelp(&hentry);
187 }
const char * feHelpBrowser(char *which, int warn)
Definition: fehelp.cc:260
char url[MAX_HE_ENTRY_LENGTH]
Definition: fehelp.cc:48
long chksum
Definition: fehelp.cc:49
void PrintLn()
Definition: reporter.cc:327
static BOOLEAN heOnlineHelp(char *s)
Definition: fehelp.cc:632
#define MAX_HE_ENTRY_LENGTH
Definition: fehelp.cc:43
static char * feResource(feResourceConfig config, int warn)
Definition: feResource.cc:252
char key[MAX_HE_ENTRY_LENGTH]
Definition: fehelp.cc:46
static int heReKey2Entry(char *filename, char *key, heEntry hentry)
Definition: fehelp.cc:579
char * StringEndS()
Definition: reporter.cc:151
static void heBrowserHelp(heEntry hentry)
Definition: fehelp.cc:776
#define WarnS
Definition: emacs.cc:81
bool found
Definition: facFactorize.cc:56
char node[MAX_HE_ENTRY_LENGTH]
Definition: fehelp.cc:47
#define omFree(addr)
Definition: omAllocDecl.h:261
#define assume(x)
Definition: mod2.h:405
void StringSetS(const char *st)
Definition: reporter.cc:128
static BOOLEAN heKey2Entry(char *filename, char *key, heEntry hentry)
Definition: fehelp.cc:399
static heBrowser heCurrentHelpBrowser
Definition: fehelp.cc:85
void PrintS(const char *s)
Definition: reporter.cc:294
#define NULL
Definition: omList.c:10
static char * strclean(char *str)
Definition: fehelp.cc:375
int BOOLEAN
Definition: auxiliary.h:131
#define Warn
Definition: emacs.cc:80
const char* feHelpBrowser ( char *  which,
int  warn 
)

Definition at line 260 of file fehelp.cc.

261 {
262  int i = 0;
263 
264  // if no argument, choose first available help browser
266  if (which == NULL || *which == '\0')
267  {
268  // return, if already set
269  if (heCurrentHelpBrowser != NULL)
271 
272  // First, try emacs, if emacs-option is set
273  if (feOptValue(FE_OPT_EMACS) != NULL)
274  {
275  while (heHelpBrowsers[i].browser != NULL)
276  {
277  if (strcmp(heHelpBrowsers[i].browser, "emacs") == 0 &&
278  (heHelpBrowsers[i].init_proc(0,i)))
279  {
282  goto Finish;
283  }
284  i++;
285  }
286  i=0;
287  }
288  while (heHelpBrowsers[i].browser != NULL)
289  {
290  if (heHelpBrowsers[i].init_proc(0,i))
291  {
294  goto Finish;
295  }
296  i++;
297  }
298  // should never get here
299  dReportBug("should never get here");
300  }
301 
302  // with argument, find matching help browser
303  while (heHelpBrowsers[i].browser != NULL &&
304  strcmp(heHelpBrowsers[i].browser, which) != 0)
305  {i++;}
306 
307  if (heHelpBrowsers[i].browser == NULL)
308  {
309  if (warn) Warn("No help browser '%s' available.", which);
310  }
311  else
312  {
313  // see whether we can init it
314  if (heHelpBrowsers[i].init_proc(warn,i))
315  {
318  goto Finish;
319  }
320  }
321 
322  // something went wrong
323  if (heCurrentHelpBrowser == NULL)
324  {
325  feHelpBrowser();
327  if (warn)
328  Warn("Setting help browser to '%s'.", heCurrentHelpBrowser->browser);
330  }
331  else
332  {
333  // or, leave as is
334  if (warn)
335  Warn("Help browser stays at '%s'.", heCurrentHelpBrowser->browser);
337  }
338 
339  Finish:
340  // update value of Browser Option
341  if (feOptSpec[FE_OPT_BROWSER].value == NULL ||
342  strcmp((char*) feOptSpec[FE_OPT_BROWSER].value,
344  {
345  omfree(feOptSpec[FE_OPT_BROWSER].value);
346  feOptSpec[FE_OPT_BROWSER].value
348  }
350 }
const char * feHelpBrowser(char *which, int warn)
Definition: fehelp.cc:260
static void * feOptValue(feOptIndex opt)
Definition: feOpt.h:40
static void feBrowserFile()
Definition: fehelp.cc:188
void * value
Definition: fegetopt.h:93
const char * browser
Definition: fehelp.cc:58
static int heCurrentHelpBrowserIndex
Definition: fehelp.cc:86
#define assume(x)
Definition: mod2.h:405
#define omfree(addr)
Definition: omAllocDecl.h:237
struct fe_option feOptSpec[]
#define dReportBug(s)
Definition: reporter.h:110
int i
Definition: cfEzgcd.cc:123
static heBrowser heCurrentHelpBrowser
Definition: fehelp.cc:85
#define NULL
Definition: omList.c:10
static heBrowser_s * heHelpBrowsers
Definition: fehelp.cc:96
#define Warn
Definition: emacs.cc:80
#define omStrDup(s)
Definition: omAllocDecl.h:263
void feStringAppendBrowsers ( int  warn)

Definition at line 352 of file fehelp.cc.

353 {
354  int i;
355  StringAppendS("Available HelpBrowsers: ");
356 
357  i = 0;
359  while (heHelpBrowsers[i].browser != NULL)
360  {
361  if (heHelpBrowsers[i].init_proc(warn,i))
362  StringAppend("%s, ", heHelpBrowsers[i].browser);
363  i++;
364  }
365  StringAppend("\nCurrent HelpBrowser: %s ", feHelpBrowser());
366 }
const char * feHelpBrowser(char *which, int warn)
Definition: fehelp.cc:260
static void feBrowserFile()
Definition: fehelp.cc:188
void StringAppendS(const char *st)
Definition: reporter.cc:107
#define StringAppend
Definition: emacs.cc:82
int i
Definition: cfEzgcd.cc:123
#define NULL
Definition: omList.c:10
static heBrowser_s * heHelpBrowsers
Definition: fehelp.cc:96
static void heBrowserHelp ( heEntry  hentry)
static

Definition at line 776 of file fehelp.cc.

777 {
778  // check checksums of procs
779  int kchksum = (hentry != NULL && hentry->chksum > 0 ?
780  heKeyChksum(hentry->key) : 0);
781  if (kchksum && kchksum != hentry->chksum && heOnlineHelp(hentry->key))
782  return;
783 
786  if (! feHelpCalled)
787  {
788  Warn("Displaying help in browser '%s'.", heCurrentHelpBrowser->browser);
789  //if (strcmp(heCurrentHelpBrowser->browser, "netscape") == 0 &&
790  // feResource('h', 0) == NULL)
791  //{
792  // Warn("Using URL '%s'.", feResource('u', 0));
793  //}
794  Warn("Use 'system(\"--browser\", <browser>);' to change browser,");
795  StringSetS("where <browser> can be: ");
796  int i = 0;
797  i = 0;
798  while (heHelpBrowsers[i].browser != NULL)
799  {
800  if (heHelpBrowsers[i].init_proc(0,i))
801  StringAppend("\"%s\", ", heHelpBrowsers[i].browser);
802  i++;
803  }
804  char *browsers=StringEndS();
805  if (browsers[strlen(browsers)-2] == ',')
806  {
807  browsers[strlen(browsers)-2] = '.';
808  browsers[strlen(browsers)-1] = '\0';
809  }
810  WarnS(browsers);
811  omFree(browsers);
812  }
813 
815  feHelpCalled = TRUE;
816 }
const char * feHelpBrowser(char *which, int warn)
Definition: fehelp.cc:260
long chksum
Definition: fehelp.cc:49
static BOOLEAN heOnlineHelp(char *s)
Definition: fehelp.cc:632
static BOOLEAN feHelpCalled
Definition: fehelp.cc:774
#define TRUE
Definition: auxiliary.h:144
char key[MAX_HE_ENTRY_LENGTH]
Definition: fehelp.cc:46
const char * browser
Definition: fehelp.cc:58
char * StringEndS()
Definition: reporter.cc:151
#define WarnS
Definition: emacs.cc:81
static int heCurrentHelpBrowserIndex
Definition: fehelp.cc:86
#define omFree(addr)
Definition: omAllocDecl.h:261
#define assume(x)
Definition: mod2.h:405
void StringSetS(const char *st)
Definition: reporter.cc:128
#define StringAppend
Definition: emacs.cc:82
int i
Definition: cfEzgcd.cc:123
static heBrowser heCurrentHelpBrowser
Definition: fehelp.cc:85
static long heKeyChksum(char *key)
Definition: fehelp.cc:756
#define NULL
Definition: omList.c:10
static heBrowser_s * heHelpBrowsers
Definition: fehelp.cc:96
heBrowserHelpProc help_proc
Definition: fehelp.cc:60
#define Warn
Definition: emacs.cc:80
static void heBuiltinHelp ( heEntry  hentry,
int   
)
static

Definition at line 1033 of file fehelp.cc.

1034 {
1035  char* node = omStrDup(hentry != NULL && *(hentry->key) != '\0' ?
1036  hentry->key : "Top");
1037  singular_manual(node,(hentry != NULL) && (hentry->url!=NULL));
1038  omFree(node);
1039 }
char url[MAX_HE_ENTRY_LENGTH]
Definition: fehelp.cc:48
static int singular_manual(char *str, BOOLEAN isIndexEntry)
Definition: fehelp.cc:1101
char key[MAX_HE_ENTRY_LENGTH]
Definition: fehelp.cc:46
#define omFree(addr)
Definition: omAllocDecl.h:261
#define NULL
Definition: omList.c:10
#define omStrDup(s)
Definition: omAllocDecl.h:263
static void heDummyHelp ( heEntry  hentry,
int   
)
static

Definition at line 1015 of file fehelp.cc.

1016 {
1017  Werror("No functioning help browser available.");
1018 }
void Werror(const char *fmt,...)
Definition: reporter.cc:199
static BOOLEAN heDummyInit ( int  ,
int   
)
static

Definition at line 1011 of file fehelp.cc.

1012 {
1013  return TRUE;
1014 }
#define TRUE
Definition: auxiliary.h:144
static void heEmacsHelp ( heEntry  hentry,
int   
)
static

Definition at line 1024 of file fehelp.cc.

1025 {
1026  WarnS("Your help command could not be executed. Use");
1027  Warn("C-h C-s %s",
1028  (hentry != NULL && *(hentry->node) != '\0' ? hentry->node : "Top"));
1029  Warn("to enter the Singular online help. For general");
1030  Warn("information on Singular running under Emacs, type C-h m.");
1031 }
#define WarnS
Definition: emacs.cc:81
char node[MAX_HE_ENTRY_LENGTH]
Definition: fehelp.cc:47
#define NULL
Definition: omList.c:10
#define Warn
Definition: emacs.cc:80
static BOOLEAN heEmacsInit ( int  ,
int   
)
static

Definition at line 1020 of file fehelp.cc.

1021 {
1022  return TRUE;
1023 }
#define TRUE
Definition: auxiliary.h:144
static void heGenHelp ( heEntry  hentry,
int  br 
)
static

Definition at line 878 of file fehelp.cc.

879 {
880  char sys[MAX_SYSCMD_LEN];
881  const char *p=heHelpBrowsers[br].action;
882  if (p==NULL) {PrintS("no action ?\n"); return;}
883  memset(sys,0,MAX_SYSCMD_LEN);
884  int i=0;
885  while ((*p>'\0')&& (i<MAX_SYSCMD_LEN))
886  {
887  if ((*p)=='%')
888  {
889  p++;
890  switch (*p)
891  {
892  case 'f': /* local html:file */
893  case 'h': /* local html:URL */
894  case 'H': /* www html */
895  {
896  char temp[256];
897  char *htmldir = feResource('h' /*"HtmlDir"*/);
898  if ((*p=='h')&&(htmldir!=NULL))
899  strcat(sys,"file://localhost");
900  else if ((*p=='H')||(htmldir==NULL))
901  htmldir = feResource('u' /* %H -> "ManualUrl"*/);
902  /* always defined */
903  if (hentry != NULL && *(hentry->url) != '\0')
904  #ifdef HAVE_VSNPRINTF
905  {
906  if (*p=='H')
907  snprintf(temp,256,"%s/%d-%d-%d/%s", htmldir,
908  SINGULAR_VERSION/1000,
909  (SINGULAR_VERSION % 1000)/100,
910  (SINGULAR_VERSION % 100)/10,
911  hentry->url);
912  else
913  snprintf(temp,256,"%s/%s", htmldir, hentry->url);
914  }
915  else
916  {
917  if (*p=='H')
918  snprintf(temp,256,"%s/%d-%d-%d/index.htm", htmldir,
919  SINGULAR_VERSION/1000,
920  (SINGULAR_VERSION % 1000)/100,
921  (SINGULAR_VERSION % 100)/10
922  );
923  else
924  snprintf(temp,256,"%s/index.htm", htmldir);
925  }
926  #else
927  {
928  if (*p=='H')
929  sprintf(temp,"%s/%d-%d-%d/%s", htmldir,
930  SINGULAR_VERSION/1000,
931  (SINGULAR_VERSION % 1000)/100,
932  (SINGULAR_VERSION % 100)/10,
933  hentry->url);
934  else
935  sprintf(temp,"%s/%d-%d-%d/%s", htmldir, hentry->url);
936  }
937  else
938  if (*p=='H')
939  sprintf(temp,"%s/%d-%d-%d/index.htm", htmldir,
940  SINGULAR_VERSION/1000,
941  (SINGULAR_VERSION % 1000)/100,
942  (SINGULAR_VERSION % 100)/10
943  );
944  else
945  sprintf(temp,"%s/index.htm", htmldir);
946  }
947  #endif
948  strcat(sys,temp);
949  if ((*p)=='f')
950  { // remove #SEC
951  char *pp=(char *)strchr(sys,'#');
952  if (pp!=NULL)
953  {
954  *pp='\0';
955  i=strlen(sys);
956  memset(pp,0,MAX_SYSCMD_LEN-i);
957  }
958  }
959  i=strlen(sys);
960  break;
961  }
962  case 'i': /* singular.hlp */
963  {
964  char *i_res=feResource('i');
965  if (i_res!=NULL) strcat(sys,i_res);
966  else
967  {
968  WarnS("singular.hlp not found");
969  return;
970  }
971  i=strlen(sys);
972  break;
973  }
974  case 'n': /* info node */
975  {
976  char temp[256];
977  if ((hentry!=NULL) && (*(hentry->node) != '\0'))
978  sprintf(temp,"%s",hentry->node);
979  //else if ((hentry!=NULL) && (hentry->key!=NULL))
980  // sprintf(temp,"Index '%s'",hentry->key);
981  else
982  sprintf(temp,"Top");
983  strcat(sys,temp);
984  i=strlen(sys);
985  break;
986  }
987  case 'v': /* version number*/
988  {
989  char temp[256];
990  sprintf(temp,"%d-%d-%d",SINGULAR_VERSION/1000,
991  (SINGULAR_VERSION % 1000)/100,
992  (SINGULAR_VERSION % 100)/10);
993  strcat(sys,temp);
994  i=strlen(sys);
995  break;
996  }
997  default: break;
998  }
999  p++;
1000  }
1001  else
1002  {
1003  sys[i]=*p;
1004  p++;i++;
1005  }
1006  }
char url[MAX_HE_ENTRY_LENGTH]
Definition: fehelp.cc:48
return P p
Definition: myNF.cc:203
#define SINGULAR_VERSION
Definition: mod2.h:94
static char * feResource(feResourceConfig config, int warn)
Definition: feResource.cc:252
const char * action
Definition: fehelp.cc:62
#define WarnS
Definition: emacs.cc:81
poly pp
Definition: myNF.cc:296
char node[MAX_HE_ENTRY_LENGTH]
Definition: fehelp.cc:47
int i
Definition: cfEzgcd.cc:123
void PrintS(const char *s)
Definition: reporter.cc:294
#define NULL
Definition: omList.c:10
static heBrowser_s * heHelpBrowsers
Definition: fehelp.cc:96
#define MAX_SYSCMD_LEN
Definition: fehelp.cc:818
static BOOLEAN heGenInit ( int  warn,
int  br 
)
static

Definition at line 819 of file fehelp.cc.

820 {
821  if (heHelpBrowsers[br].required==NULL) return TRUE;
822  const char *p=heHelpBrowsers[br].required;
823  while (*p>'\0')
824  {
825  switch (*p)
826  {
827  case '#': break;
828  case ' ': break;
829  case 'i': /* singular.hlp */
830  case 'x': /* singular.idx */
831  case 'h': /* html dir */
832  if (feResource(*p, warn) == NULL)
833  {
834  if (warn) Warn("resource `%c` not found",*p);
835  return FALSE;
836  }
837  break;
838  case 'D': /* DISPLAY */
839  if (getenv("DISPLAY") == NULL)
840  {
841  if (warn) WarnS("resource `D` not found");
842  return FALSE;
843  }
844  break;
845  case 'E': /* executable: E:xterm: */
846  case 'O': /* OS: O:ix86Mac-darwin/ppcMac-darwin: */
847  {
848  char name[128];
849  char exec[128];
850  char op=*p;
851  memset(name,0,128);
852  int i=0;
853  p++;
854  while (((*p==':')||(*p<=' ')) && (*p!='\0')) p++;
855  while((i<127) && (*p>' ') && (*p!=':'))
856  {
857  name[i]=*p; p++; i++;
858  }
859  if (i==0) return FALSE;
860 
861  if ((op=='O') && (strcmp(name,S_UNAME)!=0))
862  return FALSE;
863  if ((op=='E') && (omFindExec(name,exec)==NULL))
864  {
865  if (warn) Warn("executable `%s` not found",name);
866  return FALSE;
867  }
868  }
869  break;
870  default: Warn("unknown char %c",*p);
871  break;
872  }
873  p++;
874  }
875  return TRUE;
876 }
#define FALSE
Definition: auxiliary.h:140
return P p
Definition: myNF.cc:203
static char * feResource(feResourceConfig config, int warn)
Definition: feResource.cc:252
const char * required
Definition: fehelp.cc:61
char * getenv()
#define TRUE
Definition: auxiliary.h:144
#define WarnS
Definition: emacs.cc:81
int i
Definition: cfEzgcd.cc:123
char name(const Variable &v)
Definition: variable.h:95
#define NULL
Definition: omList.c:10
static heBrowser_s * heHelpBrowsers
Definition: fehelp.cc:96
char * omFindExec(const char *name, char *exec)
Definition: omFindExec.c:279
#define Warn
Definition: emacs.cc:80
static BOOLEAN heKey2Entry ( char *  filename,
char *  key,
heEntry  hentry 
)
static

Definition at line 399 of file fehelp.cc.

400 {
401  FILE* fd;
402  int c, k;
403  int kl, i;
404  *(hentry->key) = '\0';
405  *(hentry->url) = '\0';
406  *(hentry->node) = '\0';
407  hentry->chksum = 0;
408  if (filename == NULL || key == NULL) return FALSE;
409  fd = fopen(filename, "r");
410  if (fd == NULL) return FALSE;
411  kl = strlen(key);
412 
413  k = key[0];
414  i = 0;
415  while ((c = getc(fd)) != EOF)
416  {
417  if (c < k)
418  {
419  /* Skip line */
420  while (getc(fd) != '\n') {};
421  if (i)
422  {
423  i=0;
424  k=key[0];
425  }
426  }
427  else if (c == k)
428  {
429  i++;
430  if (i == kl)
431  {
432  // \t must follow, otherwise only substring match
433  if (getc(fd) != '\t') goto Failure;
434 
435  // Now we found an exact match
436  if (hentry->key != key) strcpy(hentry->key, key);
437  // get node
438  i = 0;
439  while ((c = getc(fd)) != '\t' && c != EOF)
440  {
441  hentry->node[i] = c;
442  i++;
443  }
444  if (c == EOF) goto Failure;
445  if (hentry->node[0]=='\0')
446  strcpy(hentry->node,hentry->key);
447 
448  // get url
449  //hentry->node[i] = '\0';
450  i = 0;
451  while ((c = getc(fd)) != '\t' && c != EOF)
452  {
453  hentry->url[i] = c;
454  i++;
455  }
456  if (c == EOF) goto Failure;
457 
458  // get chksum
459  hentry->url[i] = '\0';
460 
461  if (si_fscanf(fd, "%ld\n", &(hentry->chksum)) != 1)
462  {
463  hentry->chksum = -1;
464  }
465  fclose(fd);
466  return TRUE;
467  }
468  else if (i > kl)
469  {
470  goto Failure;
471  }
472  else
473  {
474  k = key[i];
475  }
476  }
477  else
478  {
479  goto Failure;
480  }
481  }
482  Failure:
483  fclose(fd);
484  return FALSE;
485 }
int status int fd
Definition: si_signals.h:59
char url[MAX_HE_ENTRY_LENGTH]
Definition: fehelp.cc:48
long chksum
Definition: fehelp.cc:49
#define FALSE
Definition: auxiliary.h:140
#define TRUE
Definition: auxiliary.h:144
char key[MAX_HE_ENTRY_LENGTH]
Definition: fehelp.cc:46
int k
Definition: cfEzgcd.cc:93
char node[MAX_HE_ENTRY_LENGTH]
Definition: fehelp.cc:47
int i
Definition: cfEzgcd.cc:123
#define NULL
Definition: omList.c:10
static long heKeyChksum ( char *  key)
static

Definition at line 756 of file fehelp.cc.

757 {
758  if (key == NULL || *key == '\0') return 0;
759  idhdl h=IDROOT->get(key,myynest);
760  if ((h!=NULL) && (IDTYP(h)==PROC_CMD))
761  {
762  procinfo *pi = IDPROC(h);
763  if (pi != NULL) return pi->data.s.help_chksum;
764  }
765  return 0;
766 }
#define IDROOT
Definition: ipid.h:20
Definition: idrec.h:34
int myynest
Definition: febase.cc:46
#define IDTYP(a)
Definition: ipid.h:118
procinfodata data
Definition: subexpr.h:62
#define IDPROC(a)
Definition: ipid.h:139
#define pi
Definition: libparse.cc:1143
#define NULL
Definition: omList.c:10
static Poly * h
Definition: janet.cc:978
static BOOLEAN heOnlineHelp ( char *  s)
static

Definition at line 632 of file fehelp.cc.

633 {
634  char *ss;
635  idhdl h;
636 
637  if ((ss=strstr(s,"::"))!=NULL)
638  {
639  *ss='\0';
640  ss+=2;
641  h=ggetid(s);
642  if (h!=NULL)
643  {
644  Print("help for %s from package %s\n",ss,s);
645  char s_help[200];
646  strcpy(s_help,ss);
647  strcat(s_help,"_help");
648  idhdl hh=IDPACKAGE(h)->idroot->get(s_help,0);
649  hePrintHelpStr(hh,s_help,s);
650  return TRUE;
651  }
652  else Print("package %s not found\n",s);
653  return TRUE; /* do not search the manual */
654  }
655  h=IDROOT->get(s,myynest);
656  // try help for a procedure
657  if (h!=NULL)
658  {
659  if (IDTYP(h)==PROC_CMD)
660  {
661  char *lib=iiGetLibName(IDPROC(h));
662  if((lib!=NULL)&&(*lib!='\0'))
663  {
664  Print("// proc %s from lib %s\n",s,lib);
665  s=iiGetLibProcBuffer(IDPROC(h), 0);
666  if (s!=NULL)
667  {
668  PrintS(s);
669  omFree((ADDRESS)s);
670  }
671  return TRUE;
672  }
673  }
674  else if (IDTYP(h)==PACKAGE_CMD)
675  {
676  idhdl hh=IDPACKAGE(h)->idroot->get("info",0);
677  hePrintHelpStr(hh,"info",s);
678  return TRUE;
679  }
680  return FALSE;
681  }
682 
683  // try help for a library
684  int ls = strlen(s);
685  char* str = NULL;
686  // check that it ends with "[.,_]lib"
687  if (strlen(s) >=4 && strcmp(&s[ls-3], "lib") == 0)
688  {
689  if (s[ls - 4] == '.') str = s;
690  else
691  {
692  str = omStrDup(s);
693  str[ls - 4] = '.';
694  }
695  }
696  else
697  {
698  return FALSE;
699  }
700 
701  char libnamebuf[128];
702  FILE *fp=NULL;
703  // first, search for library of that name
704  if ((str[1]!='\0') &&
705  ((iiLocateLib(str, libnamebuf) && (fp=feFopen(libnamebuf, "rb")) !=NULL)
706  ||
707  ((fp=feFopen(str,"rb", libnamebuf))!=NULL)))
708  {
709  extern FILE *yylpin;
710  lib_style_types lib_style; // = OLD_LIBSTYLE;
711 
712  yylpin = fp;
713  yylplex(str, libnamebuf, &lib_style, IDROOT, FALSE, GET_INFO);
714  reinit_yylp();
715  if(lib_style == OLD_LIBSTYLE)
716  {
717  char buf[256];
718  fseek(fp, 0, SEEK_SET);
719  Warn( "library %s has an old format. Please fix it for the next time",
720  str);
721  if (str != s) omFree(str);
723  while (fgets( buf, sizeof(buf), fp))
724  {
725  if (strncmp(buf,"//",2)==0)
726  {
727  if (found) return TRUE;
728  }
729  else if ((strncmp(buf,"proc ",5)==0)||(strncmp(buf,"LIB ",4)==0))
730  {
731  if (!found) WarnS("no help part in library found");
732  return TRUE;
733  }
734  else
735  {
736  found=TRUE;
737  PrintS(buf);
738  }
739  }
740  }
741  else
742  {
743  if (str != s) omFree(str);
744  fclose( yylpin );
748  }
749  return TRUE;
750  }
751 
752  if (str != s) omFree(str);
753  return FALSE;
754 }
const CanonicalForm int s
Definition: facAbsFact.cc:55
CanonicalForm fp
Definition: cfModGcd.cc:4043
int yylplex(const char *libname, const char *libfile, lib_style_types *lib_style, idhdl pl, BOOLEAN autoexport=FALSE, lp_modes=LOAD_LIB)
#define FALSE
Definition: auxiliary.h:140
#define IDROOT
Definition: ipid.h:20
#define TRUE
Definition: auxiliary.h:144
void * ADDRESS
Definition: auxiliary.h:161
#define WarnS
Definition: emacs.cc:81
Definition: idrec.h:34
bool found
Definition: facFactorize.cc:56
#define IDPACKAGE(a)
Definition: ipid.h:138
int myynest
Definition: febase.cc:46
#define IDTYP(a)
Definition: ipid.h:118
#define omFree(addr)
Definition: omAllocDecl.h:261
int status int void * buf
Definition: si_signals.h:59
Print("running `%s`\n", sys)
FILE * feFopen(const char *path, const char *mode, char *where, short useWerror, short path_only)
Definition: feFopen.cc:47
void PrintS(const char *s)
Definition: reporter.cc:294
static void hePrintHelpStr(const idhdl hh, const char *id, const char *pa)
Definition: fehelp.cc:619
BOOLEAN iiLocateLib(const char *lib, char *where)
Definition: iplib.cc:799
#define IDPROC(a)
Definition: ipid.h:139
#define NULL
Definition: omList.c:10
char * text_buffer
Definition: libparse.cc:1097
lib_style_types
Definition: libparse.h:9
char * iiGetLibName(procinfov pi)
Definition: iplib.cc:101
char libnamebuf[128]
Definition: libparse.cc:1096
#define SEEK_SET
Definition: mod2.h:125
char * iiGetLibProcBuffer(procinfo *pi, int part)
Definition: iplib.cc:210
static Poly * h
Definition: janet.cc:978
int BOOLEAN
Definition: auxiliary.h:131
idhdl ggetid(const char *n, BOOLEAN, idhdl *packhdl)
Definition: ipid.cc:490
#define Warn
Definition: emacs.cc:80
void reinit_yylp()
Definition: libparse.cc:3377
#define omStrDup(s)
Definition: omAllocDecl.h:263
static void hePrintHelpStr ( const idhdl  hh,
const char *  id,
const char *  pa 
)
static

Definition at line 619 of file fehelp.cc.

620 {
621  if ((hh!=NULL) && (IDTYP(hh)==STRING_CMD))
622  {
623  PrintS(IDSTRING(hh));
624  PrintLn();
625  }
626  else
627  Print("`%s` not found in package %s\n",id,pa);
628 }
void PrintLn()
Definition: reporter.cc:327
#define IDTYP(a)
Definition: ipid.h:118
Print("running `%s`\n", sys)
#define IDSTRING(a)
Definition: ipid.h:135
void PrintS(const char *s)
Definition: reporter.cc:294
#define NULL
Definition: omList.c:10
static int heReKey2Entry ( char *  filename,
char *  key,
heEntry  hentry 
)
static

Definition at line 579 of file fehelp.cc.

580 {
581  int i = 0;
582  FILE* fd;
583  char index_key[MAX_HE_ENTRY_LENGTH];
584 
585  if (filename == NULL || key == NULL) return 0;
586  fd = fopen(filename, "r");
587  if (fd == NULL) return 0;
588  memset(index_key,0,MAX_HE_ENTRY_LENGTH);
589  while (si_fscanf(fd, "%[^\t]\t%*[^\n]\n", index_key) == 1)
590  {
591  if ((index_key[MAX_HE_ENTRY_LENGTH-1]!='\0'))
592  {
593  index_key[MAX_HE_ENTRY_LENGTH-1]='\0';
594  Werror("index file corrupt at line >>%s<<",index_key);
595  break;
596  }
597  else if (strmatch(index_key, key))
598  {
599  i++;
600  if (i == 1)
601  {
602  heKey2Entry(filename, index_key, hentry);
603  }
604  else if (i == 2)
605  {
606  StringAppend("?%s; ?%s;", hentry->key, index_key);
607  }
608  else
609  {
610  StringAppend(" ?%s;", index_key);
611  }
612  }
613  }
614  fclose(fd);
615  return i;
616 }
int status int fd
Definition: si_signals.h:59
#define MAX_HE_ENTRY_LENGTH
Definition: fehelp.cc:43
char key[MAX_HE_ENTRY_LENGTH]
Definition: fehelp.cc:46
static BOOLEAN heKey2Entry(char *filename, char *key, heEntry hentry)
Definition: fehelp.cc:399
#define StringAppend
Definition: emacs.cc:82
int i
Definition: cfEzgcd.cc:123
#define NULL
Definition: omList.c:10
static BOOLEAN strmatch(char *s, char *re)
Definition: fehelp.cc:491
void Werror(const char *fmt,...)
Definition: reporter.cc:199
Print ( "running `%s`\n"  ,
sys   
)
static int show ( unsigned long  offset,
char *  close 
)
static

Definition at line 1061 of file fehelp.cc.

1062 { char buffer[BUF_LEN+1];
1063  int lines = 0;
1064  FILE * help;
1065 
1066  if( (help = fopen(feResource('i'), "rb")) == NULL)
1067  return HELP_NOT_OPEN;
1068 
1069  fseek(help, (long)(offset+1), (int)0);
1070  while( (!feof(help))
1071  && (*fgets(buffer, BUF_LEN, help) != EOF)
1072  && (buffer[0] != FIN_INDEX))
1073  {
1074  printf("%s", buffer);
1075  if(lines++> MAX_LINES)
1076  {
1077  printf("\n Press <RETURN> to continue or x to exit help.\n");
1078  fflush(stdout);
1079  *close = (char)getchar();
1080  if(*close=='x')
1081  {
1082  getchar();
1083  break;
1084  }
1085  lines=0;
1086  }
1087  }
1088  if(*close!='x')
1089  {
1090  printf("\nEnd of part. Press <RETURN> to continue or x to exit help.\n");
1091  fflush(stdout);
1092  *close = (char)getchar();
1093  if(*close=='x')
1094  getchar();
1095  }
1096  fclose(help);
1097  return HELP_OK;
1098 }
static char * feResource(feResourceConfig config, int warn)
Definition: feResource.cc:252
#define MAX_LINES
Definition: fehelp.cc:1052
#define HELP_NOT_OPEN
Definition: fehelp.cc:1048
#define FIN_INDEX
Definition: fehelp.cc:1047
#define HELP_OK
Definition: fehelp.cc:1046
#define help
Definition: libparse.cc:1228
#define NULL
Definition: omList.c:10
int offset
Definition: libparse.cc:1091
#define BUF_LEN
Definition: fehelp.cc:1050
static int singular_manual ( char *  str,
BOOLEAN  isIndexEntry 
)
static

Definition at line 1101 of file fehelp.cc.

1102 { FILE *index=NULL;
1103  unsigned long offset;
1104  char *p,close=' ';
1105  int done = 0;
1106  char buffer[BUF_LEN+1],
1107  Index[IDX_LEN+1],
1108  String[IDX_LEN+1];
1109  Print("HELP >>%s>>\n",str);
1110 
1111  if( (index = fopen(feResource('i'), "rb")) == NULL)
1112  {
1113  return HELP_NOT_OPEN;
1114  }
1115 
1116  if (!isIndexEntry)
1117  {
1118  for(p=str; *p; p++) *p = tolow(*p);/* */
1119  do
1120  {
1121  p--;
1122  }
1123  while ((p != str) && (*p<=' '));
1124  p++;
1125  *p='\0';
1126  (void)sprintf(String, " %s ", str);
1127  }
1128  else
1129  {
1130  (void)sprintf(String, " %s", str);
1131  }
1132 
1133  while(!feof(index)
1134  && (fgets(buffer, BUF_LEN, index) != (char *)0)
1135  && (buffer[0] != FIN_INDEX));
1136 
1137  while(!feof(index))
1138  {
1139  if (fgets(buffer, BUF_LEN, index)==NULL) break; /*fill buffer */
1140  if (si_sscanf(buffer, "Node:%[^\177]\177%ld\n", Index, &offset)!=2)
1141  continue;
1142  if (!isIndexEntry)
1143  {
1144  for(p=Index; *p; p++) *p = tolow(*p);/* */
1145  (void)strcat(Index, " ");
1146  if( strstr(Index, String)!=NULL)
1147  {
1148  done++; (void)show(offset, &close);
1149  }
1150  }
1151  else if( strcmp(Index, String)==0)
1152  {
1153  done++; (void)show(offset, &close);
1154  break;
1155  }
1156  Index[0]='\0';
1157  if(close=='x')
1158  break;
1159  }
1160  if (index != NULL) (void)fclose(index);
1161  if(done==0)
1162  {
1163  Warn("`%s` not found",String);
1164  return HELP_NOT_FOUND;
1165  }
1166  return HELP_OK;
1167 }
return P p
Definition: myNF.cc:203
static char * feResource(feResourceConfig config, int warn)
Definition: feResource.cc:252
static int show(unsigned long offset, char *close)
Definition: fehelp.cc:1061
#define HELP_NOT_FOUND
Definition: fehelp.cc:1049
#define HELP_NOT_OPEN
Definition: fehelp.cc:1048
Print("running `%s`\n", sys)
#define FIN_INDEX
Definition: fehelp.cc:1047
#define HELP_OK
Definition: fehelp.cc:1046
static int index(p_Length length, p_Ord ord)
Definition: p_Procs_Impl.h:597
#define NULL
Definition: omList.c:10
#define IDX_LEN
Definition: fehelp.cc:1051
static char tolow(char p)
Definition: fehelp.cc:1054
int offset
Definition: libparse.cc:1091
#define BUF_LEN
Definition: fehelp.cc:1050
#define Warn
Definition: emacs.cc:80
static char * strclean ( char *  str)
static

Definition at line 375 of file fehelp.cc.

376 {
377  if (str == NULL) return NULL;
378  char *s=str;
379  while ((*s <= ' ') && (*s != '\0')) s++;
380  if (*s == '\0') return NULL;
381  char *ss=s;
382  while (*ss!='\0') ss++;
383  ss--;
384  while ((*ss <= ' ') && (*ss != '\0'))
385  {
386  *ss='\0';
387  ss--;
388  }
389  if (*ss == '\0') return NULL;
390  return s;
391 }
const CanonicalForm int s
Definition: facAbsFact.cc:55
#define NULL
Definition: omList.c:10
static BOOLEAN strmatch ( char *  s,
char *  re 
)
static

Definition at line 491 of file fehelp.cc.

492 {
493  if (s == NULL || *s == '\0')
494  return (re == NULL || *re == '\0' || strcmp(re, "*") == 0);
495  if (re == NULL || *re == '\0') return FALSE;
496 
497  int i;
498  char ls[MAX_HE_ENTRY_LENGTH + 1];
499  char rs[MAX_HE_ENTRY_LENGTH + 1];
500  char *l, *r, *ll, *rr;
501 
502  // make everything to lower case
503  i=1;
504  ls[0] = '\0';
505  do
506  {
507  if (*s >= 'A' && *s <= 'Z') ls[i] = *s + ('a' - 'A');
508  else ls[i] = *s;
509  i++;
510  s++;
511  } while (*s != '\0');
512  ls[i] = '\0';
513  l = &(ls[1]);
514 
515  i=1;
516  rs[0] = '\0';
517  do
518  {
519  if (*re >= 'A' && *re <= 'Z') rs[i]= *re + ('a' - 'A');
520  else rs[i] = *re;
521  i++;
522  re++;
523  } while (*re != '\0');
524  rs[i] = '\0';
525  r = &(rs[1]);
526 
527  // chopp of exact matches from beginning and end
528  while (*r != '*' && *r != '\0' && *l != '\0')
529  {
530  if (*r != *l) return FALSE;
531  *r = '\0';
532  *s = '\0';
533  r++;
534  l++;
535  }
536  if (*r == '\0') return (*l == '\0');
537  if (*r == '*' && r[1] == '\0') return TRUE;
538  if (*l == '\0') return FALSE;
539 
540  rr = &r[strlen(r) - 1];
541  ll = &l[strlen(l) - 1];
542  while (*rr != '*' && *rr != '\0' && *ll != '\0')
543  {
544  if (*rr != *ll) return FALSE;
545  *rr = '\0';
546  *ll = '\0';
547  rr--;
548  ll--;
549  }
550  if (*rr == '\0') return (*ll == '\0');
551  if (*rr == '*' && rr[-1] == '\0') return TRUE;
552  if (*ll == '\0') return FALSE;
553 
554  // now *r starts with a * and ends with a *
555  r++;
556  *rr = '\0'; rr--;
557  while (*r != '\0')
558  {
559  rr = r + 1;
560  while (*rr != '*' && *rr != '\0') rr++;
561  if (*rr == '*')
562  {
563  *rr = '\0';
564  rr++;
565  }
566  l = strstr(l, r);
567  if (l == NULL) return FALSE;
568  r = rr;
569  }
570  return TRUE;
571 }
const CanonicalForm int s
Definition: facAbsFact.cc:55
#define FALSE
Definition: auxiliary.h:140
#define MAX_HE_ENTRY_LENGTH
Definition: fehelp.cc:43
#define TRUE
Definition: auxiliary.h:144
const ring r
Definition: syzextra.cc:208
int i
Definition: cfEzgcd.cc:123
#define NULL
Definition: omList.c:10
int l
Definition: cfEzgcd.cc:94
void system ( sys  )
static char tolow ( char  p)
inlinestatic

Definition at line 1054 of file fehelp.cc.

1055 {
1056  if (('A'<=p)&&(p<='Z')) return p | 040;
1057  return p;
1058 }
return P p
Definition: myNF.cc:203

Variable Documentation

BOOLEAN feHelpCalled = FALSE
static

Definition at line 774 of file fehelp.cc.

heBrowser heCurrentHelpBrowser = NULL
static

Definition at line 85 of file fehelp.cc.

int heCurrentHelpBrowserIndex = -1
static

Definition at line 86 of file fehelp.cc.

heBrowser_s* heHelpBrowsers =NULL
static

Definition at line 96 of file fehelp.cc.