Changeset 6e9a1c in git


Ignore:
Timestamp:
May 8, 1998, 4:17:21 PM (25 years ago)
Author:
Olaf Bachmann <obachman@…>
Branches:
(u'jengelh-datetime', 'ceac47cbc86fe4a15902392bdbb9bd2ae0ea02c6')(u'spielwiese', 'a800fe4b3e9d37a38c5a10cc0ae9dfa0c15a4ee6')
Children:
6eb6bdd6530b724bc6b4c70b1378203f9c819604
Parents:
dc22d4ec38e9c90c6325412ac1a8bb9b1da19284
Message:
1998-05-08  Olaf Bachmann  <obachman@mathematik.uni-kl.de>

	* extra.cc (jjSYSTEM): put all undocumented system calls into
	#ifdef HAVE_EXTENDED_SYSTEM which is _not_ defined by default

	* exteded system("random") to always return the seed of the random
	generator


git-svn-id: file:///usr/local/Singular/svn/trunk@1666 2c84dea3-7e68-4137-9b89-c4e89433aadc
File:
1 edited

Legend:

Unmodified
Added
Removed
  • Singular/extra.cc

    rdc22d4 r6e9a1c  
    22*  Computer Algebra System SINGULAR      *
    33*****************************************/
    4 /* $Id: extra.cc,v 1.43 1998-04-28 08:45:22 pohl Exp $ */
     4/* $Id: extra.cc,v 1.44 1998-05-08 14:17:21 obachman Exp $ */
    55/*
    66* ABSTRACT: general interface to internals of Singular ("system" command)
     
    5050#include "polys.h"
    5151
     52// Define to enable many more system commands
     53// #define HAVE_EXTENDED_SYSTEM
     54
    5255#ifdef STDTRACE
    5356//#include "comm.h"
     
    9497  if(h->Typ() == STRING_CMD)
    9598  {
    96 /*==================== lib ==================================*/
    97     if(strcmp((char*)(h->Data()),"LIB")==0)
    98     {
    99 #ifdef HAVE_NAMESPACES
    100       idhdl hh=namespaceroot->get((char*)h->next->Data(),0);
    101 #else /* HAVE_NAMESPACES */
    102       idhdl hh=idroot->get((char*)h->next->Data(),0);
    103 #endif /* HAVE_NAMESPACES */
    104       if ((hh!=NULL)&&(IDTYP(hh)==PROC_CMD))
    105       {
    106         res->rtyp=STRING_CMD;
    107         res->data=mstrdup(iiGetLibName(IDPROC(hh)));
    108         if (res->data==NULL) res->data=mstrdup("");
    109         return FALSE;
    110       }
    111       else
    112         Warn("`%s` not found",(char*)h->next->Data());
    113     }
    114     else
    115 #ifdef HAVE_NAMESPACES
    116 /*==================== nspush ===================================*/
    117     if(strcmp((char*)(h->Data()),"nspush")==0)
    118     {
    119       idhdl hh=namespaceroot->get((char*)h->next->Data(),0, TRUE);
    120       if ((hh!=NULL)&&(IDTYP(hh)==PACKAGE_CMD))
    121       {
    122         namespaceroot = namespaceroot->push(IDPACKAGE(hh), IDID(hh));
    123         return FALSE;
    124       } else
    125         Warn("package `%s` not found",(char*)h->next->Data());
    126     }
    127     else
    128 /*==================== nspop ====================================*/
    129     if(strcmp((char*)(h->Data()),"nspop")==0)
    130     {
    131       namespaceroot->pop();
    132       return FALSE;
    133     }
    134     else
    135 /*==================== nsstack ===================================*/
    136     if(strcmp((char*)(h->Data()),"nsstack")==0)
    137     {
    138       namehdl nshdl = namespaceroot;
    139       for( ; nshdl->isroot != TRUE; nshdl = nshdl->next) {
    140         Print("NSstack: %s:%d\n", nshdl->name, nshdl->lev);
    141       }
    142       Print("NSstack: %s:%d\n", nshdl->name, nshdl->lev);
    143       return FALSE;
    144     }
    145     else
    146 #endif /* HAVE_NAMESPACES */
    147 /*==================== proclist =================================*/
    148     if(strcmp((char*)(h->Data()),"proclist")==0)
    149     {
    150       //res->rtyp=STRING_CMD;
    151       //res->data=(void *)mstrdup("");
    152       piShowProcList();
    153       return FALSE;
    154     }
    155     else
     99// ONLY documented system calls go here
     100// Undocumented system calls go down into #ifdef HAVE_EXTENDED_SYSTEM
    156101/*==================== version ==================================*/
    157102    if(strcmp((char*)(h->Data()),"version")==0)
     
    162107    }
    163108    else
    164 #ifdef HAVE_DYNAMIC_LOADING
    165 /*==================== load ==================================*/
    166     if(strcmp((char*)(h->Data()),"load")==0)
    167     {
    168       if ((h->next!=NULL) && (h->next->Typ()==STRING_CMD)) {
    169         int iiAddCproc(char *libname, char *procname, BOOLEAN pstatic,
    170                        BOOLEAN(*func)(leftv res, leftv v));
    171         int (*fktn)(int(*iiAddCproc)(char *libname, char *procname,
    172                                      BOOLEAN pstatic,
    173                                      BOOLEAN(*func)(leftv res, leftv v)));
    174         void *vp;
    175         res->rtyp=STRING_CMD;
    176 
    177         fprintf(stderr, "Loading %s\n", h->next->Data());
    178         res->data=(void *)mstrdup("");
    179         if((vp=dlopen(h->next->Data(),RTLD_LAZY))==(void *)NULL) {
    180           WerrorS("dlopen failed");
    181           Werror("%s not found", h->next->Data());
    182         } else {
    183           fktn = dlsym(vp, "mod_init");
    184           if( fktn!= NULL) (*fktn)(iiAddCproc);
    185           else Werror("mod_init: %s\n", dlerror());
    186           piShowProcList();
    187         }
    188         return FALSE;
    189       }
    190       else WerrorS("string expected");
    191     }
    192     else
    193 #endif /* HAVE_DYNAMIC_LOADING */
    194109/*==================== gen ==================================*/
    195110    if(strcmp((char*)(h->Data()),"gen")==0)
     
    367282    }
    368283    else
    369 /*==================== print all option values =================*/
    370 #ifndef NDEBUG
    371     if (strcmp((char*)(h->data), "OptionValues") == 0)
    372     {
    373       void mainOptionValues();
    374       mainOptionValues();
    375       return FALSE;
    376     }
    377     else
    378 #endif
    379284/*==================== HC ==================================*/
    380285    if (strcmp((char*)(h->data),"HC")==0)
     
    398303        return FALSE;
    399304      }
    400       else
     305      else if (h->next != NULL)
     306      {
    401307        WerrorS("int expected");
    402     }
    403     else
     308        return TRUE;
     309      }
     310      res->rtyp=INT_CMD;
     311      res->data=(void*) siRandomStart;
     312      return FALSE;
     313    }
     314#ifdef HAVE_EXTENDED_SYSTEM
     315// You can put your own system calls here
    404316/*==================== LaScala ==================================*/
    405317    if(strcmp((char*)(h->Data()),"LaScala")==0)
     
    688600    else
    689601#endif
    690 /*==================== divcount & mcount =============================*/
    691 #ifdef MONOM_COUNT
    692     if (strcmp((char*)(h->Data()),"mcount")==0)
    693     {
    694       extern void OutputMonomCount();
    695       OutputMonomCount();
    696       return FALSE;
    697     }
    698     else if (strcmp((char*)(h->Data()),"mreset")==0)
    699     {
    700       extern void ResetMonomCount();
    701       ResetMonomCount();
    702       return FALSE;
    703     }
    704     else
    705 #endif
    706 #ifdef DIV_COUNT
    707     if (strcmp((char*)(h->Data()),"dcount")==0)
    708     {
    709       extern void OutputDivCount();
    710       OutputDivCount();
    711       return FALSE;
    712     }
    713     else if (strcmp((char*)(h->Data()),"dreset")==0)
    714     {
    715       extern void ResetDivCount();
    716       ResetDivCount();
    717       return FALSE;
    718     }
    719     else
    720 #endif
    721602/*==================== barstep =============================*/
    722603    if(strcmp((char*)(h->Data()),"barstep")==0)
     
    780661    else
    781662#endif
    782      
     663/*==================== lib ==================================*/
     664    if(strcmp((char*)(h->Data()),"LIB")==0)
     665    {
     666#ifdef HAVE_NAMESPACES
     667      idhdl hh=namespaceroot->get((char*)h->next->Data(),0);
     668#else /* HAVE_NAMESPACES */
     669      idhdl hh=idroot->get((char*)h->next->Data(),0);
     670#endif /* HAVE_NAMESPACES */
     671      if ((hh!=NULL)&&(IDTYP(hh)==PROC_CMD))
     672      {
     673        res->rtyp=STRING_CMD;
     674        res->data=mstrdup(iiGetLibName(IDPROC(hh)));
     675        if (res->data==NULL) res->data=mstrdup("");
     676        return FALSE;
     677      }
     678      else
     679        Warn("`%s` not found",(char*)h->next->Data());
     680    }
     681    else
     682#ifdef HAVE_NAMESPACES
     683/*==================== nspush ===================================*/
     684    if(strcmp((char*)(h->Data()),"nspush")==0)
     685    {
     686      idhdl hh=namespaceroot->get((char*)h->next->Data(),0, TRUE);
     687      if ((hh!=NULL)&&(IDTYP(hh)==PACKAGE_CMD))
     688      {
     689        namespaceroot = namespaceroot->push(IDPACKAGE(hh), IDID(hh));
     690        return FALSE;
     691      } else
     692        Warn("package `%s` not found",(char*)h->next->Data());
     693    }
     694    else
     695/*==================== nspop ====================================*/
     696    if(strcmp((char*)(h->Data()),"nspop")==0)
     697    {
     698      namespaceroot->pop();
     699      return FALSE;
     700    }
     701    else
     702/*==================== nsstack ===================================*/
     703    if(strcmp((char*)(h->Data()),"nsstack")==0)
     704    {
     705      namehdl nshdl = namespaceroot;
     706      for( ; nshdl->isroot != TRUE; nshdl = nshdl->next) {
     707        Print("NSstack: %s:%d\n", nshdl->name, nshdl->lev);
     708      }
     709      Print("NSstack: %s:%d\n", nshdl->name, nshdl->lev);
     710      return FALSE;
     711    }
     712    else
     713#endif /* HAVE_NAMESPACES */
     714/*==================== proclist =================================*/
     715    if(strcmp((char*)(h->Data()),"proclist")==0)
     716    {
     717      //res->rtyp=STRING_CMD;
     718      //res->data=(void *)mstrdup("");
     719      piShowProcList();
     720      return FALSE;
     721    }
     722    else
     723#ifdef HAVE_DYNAMIC_LOADING
     724/*==================== load ==================================*/
     725    if(strcmp((char*)(h->Data()),"load")==0)
     726    {
     727      if ((h->next!=NULL) && (h->next->Typ()==STRING_CMD)) {
     728        int iiAddCproc(char *libname, char *procname, BOOLEAN pstatic,
     729                       BOOLEAN(*func)(leftv res, leftv v));
     730        int (*fktn)(int(*iiAddCproc)(char *libname, char *procname,
     731                                     BOOLEAN pstatic,
     732                                     BOOLEAN(*func)(leftv res, leftv v)));
     733        void *vp;
     734        res->rtyp=STRING_CMD;
     735
     736        fprintf(stderr, "Loading %s\n", h->next->Data());
     737        res->data=(void *)mstrdup("");
     738        if((vp=dlopen(h->next->Data(),RTLD_LAZY))==(void *)NULL) {
     739          WerrorS("dlopen failed");
     740          Werror("%s not found", h->next->Data());
     741        } else {
     742          fktn = dlsym(vp, "mod_init");
     743          if( fktn!= NULL) (*fktn)(iiAddCproc);
     744          else Werror("mod_init: %s\n", dlerror());
     745          piShowProcList();
     746        }
     747        return FALSE;
     748      }
     749      else WerrorS("string expected");
     750    }
     751    else
     752#endif /* HAVE_DYNAMIC_LOADING */
     753/*==================== print all option values =================*/
     754#ifndef NDEBUG
     755    if (strcmp((char*)(h->data), "options") == 0)
     756    {
     757      void mainOptionValues();
     758      mainOptionValues();
     759      return FALSE;
     760    }
     761    else
     762#endif
     763#endif // HAVE_EXTENDED_SYSTEM
    783764/*============================================================*/
    784765      WerrorS( feNotImplemented );
Note: See TracChangeset for help on using the changeset viewer.