Changeset: ec2bf9017ee4 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=ec2bf9017ee4
Modified Files:
        clients/Tests/exports.stable.out
        monetdb5/mal/mal_client.c
        monetdb5/mal/mal_debugger.c
        monetdb5/mal/mal_module.c
        monetdb5/mal/mal_module.h
        monetdb5/mal/mal_readline.c
        monetdb5/modules/mal/manual.c
        monetdb5/modules/mal/manual.h
        monetdb5/modules/mal/manual.mal
        sql/scripts/25_debug.sql
        tools/mserver/mserver5.c
Branch: default
Log Message:

Trim console to bare essentials.
Original console code has been largely removed.
A mclient connection can be used instead.
Help information about mal functions is available
using the table producing function, malfunctions()

Dependency on the readline library is removed.

The built-in console can not be removed, because all
initialization of MAL runs through a client object,
which reads a 'console'.


diffs (truncated from 1013 to 300 lines):

diff --git a/clients/Tests/exports.stable.out b/clients/Tests/exports.stable.out
--- a/clients/Tests/exports.stable.out
+++ b/clients/Tests/exports.stable.out
@@ -1280,7 +1280,6 @@ str MANIFOLDevaluate(Client cntxt, MalBl
 str MANIFOLDremapMultiplex(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr 
p);
 MALfcn MANIFOLDtypecheck(Client cntxt, MalBlkPtr mb, InstrPtr pci);
 str MANUALcreateOverview(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr 
pci);
-str MANUALhelp(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci);
 str MATHbinary_ATAN2dbl(dbl *res, const dbl *a, const dbl *b);
 str MATHbinary_ATAN2flt(flt *res, const flt *a, const flt *b);
 str MATHbinary_POWdbl(dbl *res, const dbl *a, const dbl *b);
@@ -2033,8 +2032,6 @@ str diffRef;
 str disconnectRef;
 str divRef;
 void dumpExceptionsToStream(stream *out, str msg);
-void dumpHelpTable(stream *f, Module s, str text, int flag);
-void dumpSearchTable(stream *f, str text);
 str eqRef;
 str escape_str(str *retval, str s);
 str evalFile(Client c, str fname, int listing);
@@ -2094,8 +2091,6 @@ enum malexception getExceptionType(str);
 int getFltConstant(MalBlkPtr mb, flt val);
 Scenario getFreeScenario(void);
 Symbol getFunctionSymbol(Module scope, InstrPtr p);
-char **getHelp(Module m, str pat, int flag);
-char **getHelpMatch(char *pat);
 int getHgeConstant(MalBlkPtr mb, hge val);
 int getIntConstant(MalBlkPtr mb, int val);
 int getLngConstant(MalBlkPtr mb, lng val);
@@ -2447,7 +2442,6 @@ void showCurrentScenario(void);
 void showErrors(Client cntxt);
 void showException(stream *out, enum malexception, const char *, _In_z_ 
_Printf_format_string_ const char *, ...) __attribute__((__format__(__printf__, 
4, 5)));
 void showFlowGraph(MalBlkPtr mb, MalStkPtr stk, str fname);
-void showHelp(Module m, str txt, stream *fs);
 void showMalBlkHistory(stream *out, MalBlkPtr mb);
 void showOptimizerHistory(void);
 void showOptimizerStep(str fnme, int i, int flg);
diff --git a/monetdb5/mal/mal_client.c b/monetdb5/mal/mal_client.c
--- a/monetdb5/mal/mal_client.c
+++ b/monetdb5/mal/mal_client.c
@@ -580,11 +580,6 @@ MCreadClient(Client c)
                }
                return 0;
        }
-       if (*CURRENT(c) == '?') {
-               showHelp(c->nspace, CURRENT(c) + 1, c->fdout);
-               in->pos = in->len;
-               return MCreadClient(c);
-       }
 #ifdef MAL_CLIENT_DEBUG
        printf("# finished stream read %d %d\n", (int) in->pos, (int) in->len);
        printf("#%s\n", in->buf);
diff --git a/monetdb5/mal/mal_debugger.c b/monetdb5/mal/mal_debugger.c
--- a/monetdb5/mal/mal_debugger.c
+++ b/monetdb5/mal/mal_debugger.c
@@ -917,10 +917,6 @@ partial:
                        }
                        continue;
                }
-               case '?':
-                       if (!isspace((int) b[1]))
-                               showHelp(cntxt->nspace, b + 1, out);
-                       continue;
                case 'h':
                        if (strncmp("help", b, 2) == 0)
                                mdbHelp(out);
diff --git a/monetdb5/mal/mal_module.c b/monetdb5/mal/mal_module.c
--- a/monetdb5/mal/mal_module.c
+++ b/monetdb5/mal/mal_module.c
@@ -338,322 +338,3 @@ findInstruction(Module scope, MalBlkPtr 
        return 0;
 }
 
-/*
- * Some primitives to aid online help and completions.
- * Note that pattern matching is on string prefix.
- */
-static int tstDuplicate(char **msg, char *s){
-       int i;
-       size_t len;
-       len= strlen(s);
-       for(i=0; msg[i]; i++)
-               if( strncmp(s, msg[i], MAX(len,strlen(msg[i]))) == 0 &&
-                       strlen(s) == strlen(msg[i]) )
-                       return 1;
-       return 0;
-}
-
-#define MAXHELP 500
-char **getHelp(Module m, str inputpat, int completion)
-{
-       str pat, modnme, fcnnme = 0;
-       Module m1;
-       Symbol s;
-       size_t len1 = 0,len2 = 0;
-       int fnd=0;
-       char *t, **msg, buf[1024]={0};
-       int top=0, i,j,k, sig = 0, doc = 0;
-       int maxhelp= MAXHELP;
-
-#ifdef MAL_SCOPE_DEBUG
-       printf("showHelp: %s",pat);
-#endif
-       msg= (char **) GDKmalloc( MAXHELP * sizeof(str));
-       if( msg == NULL){
-               GDKerror("getHelp"MAL_MALLOC_FAIL);
-               return NULL;
-       }
-       msg[top]=0;
-
-       if (!inputpat)
-               return msg;
-
-       pat= GDKstrdup(inputpat);
-       t= strchr(pat,'\n');
-       if( t) *t=0;
-
-       t = strchr(pat,')');
-       if( t) { doc++; *t=0; completion=0; }
-       t= strchr(pat,'(');
-       if( t) { sig++; *t=0; completion=0; }
-
-       /* rudimentary patterns only.
-        *     *.nme  nme.* nme.nme *.*
-        * ignore the rest.
-        */
-       modnme= pat;
-       if( (fcnnme = strchr(pat,'.')) ){
-               *fcnnme++ = 0;
-               if( strchr(modnme,'*'))
-                       modnme="*";
-               if( strchr(fcnnme,'*') || *fcnnme==0)
-                       fcnnme="*";
-       } else {
-               modnme="*";
-               fcnnme=pat;
-               if( strchr(fcnnme,'*') || *fcnnme==0)
-                       fcnnme="*";
-       }
-
-       if( fcnnme && *fcnnme){
-               len2 = strlen(fcnnme);
-       }
-
-       len1 = (int)strlen(modnme);
-
-       /* display module information if there is no function */
-       if( fcnnme == NULL){
-               for(i=0; i< MAXSCOPE; i++)
-                       for(j=0; j< MAXSCOPE; j++){
-                               m= scopeJump[i][j];
-                               while(m != NULL){
-                                       if( strncmp(modnme,m->name,len1) ==0  
|| *modnme=='*'){
-                                               msg[top++] = GDKstrdup(m->name);
-                                               msg[top] =0;
-                                               if( top == maxhelp-1) {
-                                                       msg= (char **) 
GDKrealloc(msg,sizeof(str)* maxhelp);
-                                                       if( msg == NULL)
-                                                               return NULL;
-                                                       maxhelp+= MAXHELP;
-                                               }
-                                       }
-                                       m= m->sibling;
-                               }
-                       }
-               GDKfree(pat);
-               return msg;
-       }
-
-       /* display module.function */
-       m1 = findModule(m,modnme);
-       if( m1 == 0  && *modnme != '*') {
-               GDKfree(pat);
-               return msg;
-       }
-
-#ifdef MAL_SCOPE_DEBUG
-       printf("showHelp: %s %s [" SZFMT "] %s %s\n",
-                  modnme,fcnnme,len2, (doc?"doc":""), (sig?"sig":""));
-#endif
-       for(i=0; i< MAXSCOPE; i++)
-               for(k=0; k< MAXSCOPE; k++){
-                       m= scopeJump[i][k];
-                       while( m){
-                               if( strncmp(modnme,m->name,len1) && 
*modnme!='*' ) {
-                                       m= m->sibling;
-                                       continue;
-                               }
-                               for(j=0;j<MAXSCOPE;j++)
-                                       for(s= m->subscope[j]; s; s= s->peer)
-                                               if( 
strncmp(fcnnme,s->name,len2)==0 || *fcnnme=='*') {
-                                                       fnd=0;
-                                                       if( completion ) {
-                                                               
snprintf(buf,sizeof(buf)," %s.%s",
-                                                                               
 ((*modnme=='*' || *modnme==0)? m->name:modnme),s->name);
-                                                               if( 
tstDuplicate(msg,buf+1) ) {
-                                                                       
continue;
-                                                               }
-                                                       } else
-                                                               if( doc) {
-                                                                       char *v;
-
-                                                                       
fcnDefinition(s->def,s->def->stmt[0],buf,FALSE,buf,sizeof(buf));
-                                                                       
buf[0]=' ';
-
-                                                                       v= 
strstr(buf,"address");
-                                                                       if( v) 
*v=0;
-                                                                       if( 
tstDuplicate(msg,buf+1) && s->def->help==0 ) fnd++;
-                                                                       if(fnd) 
continue;
-
-                                                                       
msg[top++]= GDKstrdup(buf+1);
-                                                                       if(v){
-                                                                               
*v='a';
-                                                                               
msg[top++]= GDKstrdup(v);
-                                                                       }
-                                                                       
msg[top] = 0;
-
-                                                                       if( 
s->def->help) {
-                                                                               
char *w;
-                                                                               
strcpy(buf+1,"comment ");
-                                                                               
v= buf+1+8;
-                                                                               
for( w= s->def->help; *w && v <buf+sizeof(buf)-2; w++)
-                                                                               
        if( *w == '\n'){
-                                                                               
                /*ignore */
-                                                                               
        } else *v++ = *w;
-                                                                               
*v = 0;
-                                                                       } else 
fnd = 1; /* ignore non-existing comment */
-                                                                       if(v){
-                                                                               
*v++ ='\n';
-                                                                               
*v=0;
-                                                                       }
-                                                               } else if( 
strncmp(fcnnme,s->name,strlen(fcnnme))==0 ||
-                                                                               
   *fcnnme=='*' ) {
-                                                                       
fcnDefinition(s->def,s->def->stmt[0],buf,FALSE,buf,sizeof(buf));
-                                                                       
buf[0]=' ';
-                                                                       t= 
strstr(buf,"address");
-                                                                       if( t) 
*t= 0;
-                                                               }
-                                                       if( fnd == 0 && buf[1]){
-                                                               msg[top++] = 
GDKstrdup(buf+1);
-                                                               msg[top] = 0;
-                                                       }
-                                                       if( top >= maxhelp-3){
-                                                               msg= (char **) 
GDKrealloc(msg,sizeof(str)* (maxhelp+MAXHELP));
-                                                               if( msg == NULL)
-                                                                       return 
NULL;
-                                                               maxhelp+= 
MAXHELP;
-                                                       }
-                                               }
-                               m = m->sibling;
-                       }
-               }
-       GDKfree(pat);
-       return msg;
-}
-
-/*
- * The second primitive of relevance is to find documentation matching
- * a keyword. Since we can not assume pcre to be everywhere, we keep
- * it simple.
- */
-char **getHelpMatch(char *pat){
-       char **msg, buf[1024];
-       Module m;
-       Symbol s;
-       int top = 0, i,j,k;
-       int maxhelp= MAXHELP;
-
-       msg= (char **) GDKmalloc( maxhelp * sizeof(str));
-       if( msg == NULL){
-               GDKerror("getHelpMatch" MAL_MALLOC_FAIL);
-               return NULL;
-       }
-       msg[top]=0;
-
-       if (!pat)
-               return msg;
-
-       for(i=0; i< MAXSCOPE; i++)
-               for(k=0; k< MAXSCOPE; k++){
-                       m= scopeJump[i][k];
-                       while( m){
-                               for(j=0;j<MAXSCOPE;j++)
-                                       if( m->subscope[j])
-                                               for(s= m->subscope[j]; s; s= 
s->peer)
-                                                       if( strstr(m->name,pat) 
|| strstr(s->name,pat) ||
-                                                               (s->def->help 
&& strstr(s->def->help,pat))) {
-                                                               char *v,*w;
-                                                               
fcnDefinition(s->def,s->def->stmt[0],buf,FALSE,buf,sizeof(buf));
-                                                               buf[0]=' ';
-                                                               if( 
s->def->help ){
-                                                                       v= 
strchr(buf,0);
-                                                                       assert 
(v != NULL); /* fool Coverity */
-                                                                       *v++ = 
'\\';
-                                                                       *v++ = 
'n';
-                                                                       *v++ = 
'#';
-                                                                       for( w= 
s->def->help; *w && v <buf+sizeof(buf)-3; w++)
-                                                                               
if( *w == '\n'){
-                                                                               
        *v++ = '\\';
-                                                                               
        *v++ = 'n';
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to