[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