[SCM] an open source computer algebra system branch, cleanedupstream, updated. 6125e540ca6d66c307958938a9d53b245507c323
Bernhard R. Link
brlink at debian.org
Tue Apr 24 15:53:58 UTC 2012
The following commit has been merged in the cleanedupstream branch:
commit b4cbc8d53d9b2354788148f50a088032a397a0a1
Author: Hans Schoenemann <hannes at mathematik.uni-kl.de>
Date: Mon Mar 5 10:39:45 2012 +0100
chg: help for pacakge/ proc witin a package
diff --git a/Singular/fehelp.cc b/Singular/fehelp.cc
index c4d113c..e6f1a47 100644
--- a/Singular/fehelp.cc
+++ b/Singular/fehelp.cc
@@ -3,7 +3,6 @@
****************************************/
/*
* ABSTRACT: help system
-* versin $Id$
*/
#include <string.h>
@@ -105,6 +104,10 @@ void feHelp(char *str)
str[MAX_HE_ENTRY_LENGTH - 3] = '\0';
BOOLEAN key_is_regexp = (strchr(str, '*') != NULL);
+
+ // try proc help and library help
+ if (! key_is_regexp && heOnlineHelp(str)) return;
+
heEntry_s hentry;
memset(&hentry,0,sizeof(hentry));
char* idxfile = feResource('x' /*"IdxFile"*/);
@@ -116,9 +119,6 @@ void feHelp(char *str)
return;
}
- // try proc help and library help
- if (! key_is_regexp && heOnlineHelp(str)) return;
-
// Try to match approximately with key in index file
if (idxfile != NULL)
{
@@ -658,15 +658,18 @@ static int heReKey2Entry (char* filename, char* key, heEntry hentry)
}
// test for h being a string and print it
-static void hePrintHelpStr(const idhdl hh,const char *id,const char *pa)
+// return TRUE an success
+static BOOLEAN hePrintHelpStr(const idhdl hh,const char *id,const char *pa)
{
if ((hh!=NULL) && (IDTYP(hh)==STRING_CMD))
{
PrintS(IDSTRING(hh));
PrintLn();
+ return TRUE;
}
else
Print("`%s` not found in package %s\n",id,pa);
+ return FALSE;
}
// try to find the help string as a loaded procedure or library
// if found, display the help and return TRUE
@@ -693,36 +696,28 @@ static BOOLEAN heOnlineHelp(char* s)
}
return TRUE;
}
- else
- {
- char s_help[200];
- strcpy(s_help,s);
- strcat(s_help,"_help");
- idhdl hh=IDROOT->get(s_help,0);
- hePrintHelpStr(hh,s_help,"Top");
- }
}
else if (IDTYP(h)==PACKAGE_CMD)
{
idhdl hh=IDPACKAGE(h)->idroot->get("info",0);
- hePrintHelpStr(hh,"info",s);
+ return hePrintHelpStr(hh,"info",s);
}
- else if ((ss=strstr(s,"::"))!=NULL)
+ }
+ else if ((ss=strstr(s,"::"))!=NULL)
+ {
+ *ss='\0';
+ ss+=2;
+ h=ggetid(s);
+ if (h!=NULL)
{
- *ss='\0';
- ss+=2;
- h=ggetid(s);
- if (h!=NULL)
- {
- Print("help for %s from package %s\n",ss,s);
- char s_help[200];
- strcpy(s_help,ss);
- strcat(s_help,"_help");
- idhdl hh=IDPACKAGE(h)->idroot->get(s_help,0);
- hePrintHelpStr(hh,s_help,s);
- }
- else Print("package %s not found\n",s);
+ Print("help for %s from package %s\n",ss,s);
+ char s_help[200];
+ strcpy(s_help,ss);
+ strcat(s_help,"_help");
+ idhdl hh=IDPACKAGE(h)->idroot->get(s_help,0);
+ return hePrintHelpStr(hh,s_help,s);
}
+ else Print("package %s not found\n",s);
return FALSE;
}
diff --git a/Singular/ipshell.cc b/Singular/ipshell.cc
index e9e91d6..fee9a92 100644
--- a/Singular/ipshell.cc
+++ b/Singular/ipshell.cc
@@ -143,18 +143,7 @@ static void list1(const char* s, idhdl h,BOOLEAN c, BOOLEAN fullname)
);
break;
case PACKAGE_CMD:
- PrintS(" (");
- switch (IDPACKAGE(h)->language)
- {
- case LANG_SINGULAR: PrintS("S"); break;
- case LANG_C: PrintS("C"); break;
- case LANG_TOP: PrintS("T"); break;
- case LANG_NONE: PrintS("N"); break;
- default: PrintS("U");
- }
- if(IDPACKAGE(h)->libname!=NULL)
- Print(",%s", IDPACKAGE(h)->libname);
- PrintS(")");
+ paPrint(IDID(h),IDPACKAGE(h));
break;
case PROC_CMD: if((IDPROC(h)->libname!=NULL) && (strlen(IDPROC(h)->libname)>0))
Print(" from %s",IDPROC(h)->libname);
@@ -5508,3 +5497,19 @@ BOOLEAN jjVARIABLES_ID(leftv res, leftv u)
jjINT_S_TO_ID(n,e,res);
return FALSE;
}
+
+void paPrint(const char *n,package p)
+{
+ Print("%s (",n);
+ switch (p->language)
+ {
+ case LANG_SINGULAR: PrintS("S"); break;
+ case LANG_C: PrintS("C"); break;
+ case LANG_TOP: PrintS("T"); break;
+ case LANG_NONE: PrintS("N"); break;
+ default: PrintS("U");
+ }
+ if(p->libname!=NULL)
+ Print(",%s", p->libname);
+ PrintS(")");
+}
diff --git a/Singular/ipshell.h b/Singular/ipshell.h
index 2b2fad3..a81d616 100644
--- a/Singular/ipshell.h
+++ b/Singular/ipshell.h
@@ -189,6 +189,10 @@ int iiAddCproc(const char *libname, const char *procname, BOOLEAN pstatic,
BOOLEAN(*func)(leftv res, leftv v));
void iiCheckPack(package &p);
+
+/* ================================================================== */
+void paPrint(const char *n,package p);
+/* ================================================================== */
#ifndef NDEBUG
void checkall();
#endif
diff --git a/Singular/subexpr.cc b/Singular/subexpr.cc
index aa22f30..b4a431b 100644
--- a/Singular/subexpr.cc
+++ b/Singular/subexpr.cc
@@ -102,10 +102,13 @@ void sleftv::Print(leftv store, int spaces)
{
case UNKNOWN:
case DEF_CMD:
- case PACKAGE_CMD:
PrintNSpaces(spaces);
PrintS("`");PrintS(n);PrintS("`");
break;
+ case PACKAGE_CMD:
+ PrintNSpaces(spaces);
+ paPrint(n,(package)d);
+ break;
case NONE:
return;
case INTVEC_CMD:
@@ -421,7 +424,7 @@ static inline void * s_internalCopy(const int t, void *d)
return NULL;
}
else
- Warn("s_internalCopy: cannot copy type %s(%d)",
+ Warn("s_internalCopy: cannot copy type %s(%d)",
Tok2Cmdname(t),t);
}
}
@@ -874,7 +877,6 @@ char * sleftv::String(void *d, BOOLEAN typed, int dim)
return omStrDup("");
}
-
int sleftv::Typ()
{
if (e==NULL)
--
an open source computer algebra system
More information about the debian-science-commits
mailing list