Update of /cvsroot/monetdb/MonetDB5/src/mal
In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv15857/src/mal
Modified Files:
mal_authorize.mx mal_client.mx mal_function.mx
mal_interpreter.mx mal_module.mx mal_readline.mx
mal_sabaoth.mx mal_scenario.mx mal_session.mx mal_type.mx
Log Message:
propagated changes of Sunday Feb 03 2008 - Friday Feb 08 2008
from the MonetDB_5-4 branch to the development trunk
Index: mal_type.mx
===================================================================
RCS file: /cvsroot/monetdb/MonetDB5/src/mal/mal_type.mx,v
retrieving revision 1.61
retrieving revision 1.62
diff -u -d -r1.61 -r1.62
--- mal_type.mx 11 Jan 2008 10:41:33 -0000 1.61
+++ mal_type.mx 8 Feb 2008 22:36:31 -0000 1.62
@@ -17,6 +17,7 @@
@a M. Kersten
@v 0.0
@+ Type implementation
[EMAIL PROTECTED] MAL Type System
The MAL type module overloads the atom structure managed in the GDK
library.
For the time being, we assume GDK to support at most 127 different
Index: mal_scenario.mx
===================================================================
RCS file: /cvsroot/monetdb/MonetDB5/src/mal/mal_scenario.mx,v
retrieving revision 1.115
retrieving revision 1.116
diff -u -d -r1.115 -r1.116
--- mal_scenario.mx 11 Jan 2008 10:41:33 -0000 1.115
+++ mal_scenario.mx 8 Feb 2008 22:36:31 -0000 1.116
@@ -170,7 +170,7 @@
mal_export void resetScenario(Client c);
mal_export Scenario findScenario(str nme);
-mal_export void updateScenario(str nme, MALfcn fcn);
+mal_export void updateScenario(str scen, str nme, MALfcn fcn);
#endif /* _MAL_SCENARIO_H */
@-
@@ -190,7 +190,7 @@
{"mal", "mal",
0, 0, /* hardwired MALinit*/
0, 0, /* implicit */
- 0, 0, /* no initClient */
+ "MALinitClient", (MALfcn) &MALinitClient,
"MALexitClient", (MALfcn) &MALexitClient,
"MALreader", (MALfcn) &MALreader, 0,
"MALparser", (MALfcn) &MALparser, 0,
@@ -235,11 +235,6 @@
}
@-
[EMAIL PROTECTED] initScen
-if( @1->@2){
- if( @1->@2Cmd == 0) @1->@2Cmd = (MALfcn)getAddress(@3,@3,@1->@2,1);
-}
[EMAIL PROTECTED]
A scenario is initialized only once per session.
All other requests are silently ignored.
After initialization, all state functions should have been set.
@@ -251,6 +246,7 @@
str
initScenario(Client c, Scenario s)
{
+ str l = s->language;
str msg = MAL_SUCCEED;
if (s->initSystemCmd)
@@ -258,26 +254,35 @@
/* prepare for conclicts */
mal_set_lock(mal_contextLock, "Scenario");
if (s->initSystem && s->initSystemCmd == 0) {
- s->initSystemCmd = (MALfcn) getAddress(s->language,
s->language, s->initSystem,1);
+ s->initSystemCmd = (MALfcn) getAddress(l, l, s->initSystem,1);
if (s->initSystemCmd) {
msg = (*s->initSystemCmd) (c);
} else {
char buf[BUFSIZ];
- snprintf(buf,BUFSIZ,"%s.init",s->language);
+ snprintf(buf,BUFSIZ,"%s.init", l);
msg = createException(MAL, buf, "Scenario not
initialized");
}
}
/* does the return below unset the lock? */
if (msg)
return msg;
- @:initScen(s, exitSystem,s->language)@
- @:initScen(s, initClient,s->language)@
- @:initScen(s, exitClient,s->language)@
- @:initScen(s, reader,s->language)@
- @:initScen(s, parser,s->language)@
- @:initScen(s, optimizer,s->language)@
- @:initScen(s, tactics,s->language)@
- @:initScen(s, engine,s->language)@
+
+ if (s->exitSystem && s->exitSystemCmd == 0)
+ s->exitSystemCmd = (MALfcn) getAddress(l, l, s->exitSystem,1);
+ if (s->initClient && s->initClientCmd == 0)
+ s->initClientCmd = (MALfcn) getAddress(l, l, s->initClient,1);
+ if (s->exitClient && s->exitClientCmd == 0)
+ s->exitClientCmd = (MALfcn) getAddress(l, l, s->exitClient,1);
+ if (s->reader && s->readerCmd == 0)
+ s->readerCmd = (MALfcn) getAddress(l, l, s->reader,1);
+ if (s->parser && s->parserCmd == 0)
+ s->parserCmd = (MALfcn) getAddress(l, l, s->parser,1);
+ if (s->optimizer && s->optimizerCmd == 0)
+ s->optimizerCmd = (MALfcn) getAddress(l, l, s->optimizer,1);
+ if (s->tactics && s->tacticsCmd == 0)
+ s->tacticsCmd = (MALfcn) getAddress(l, l, s->tactics,1);
+ if (s->engine && s->engineCmd == 0)
+ s->engineCmd = (MALfcn) getAddress(l, l, s->engine,1);
mal_unset_lock(mal_contextLock, "Scenario");
return(fillScenario(c, s));
}
@@ -291,23 +296,29 @@
@-
The Monet debugger provides an option to inspect the scenarios currently
defined.
[EMAIL PROTECTED] scenarioCommand
- if( scen->@1) stream_printf(f," \"%s%s\",",scen->@1,
- (scen->@1Cmd?"":"?"));
- else stream_printf(f," nil,");
+
@c
+static void
+print_scenarioCommand(stream *f, str cmd, void *funcptr)
+{
+ if (cmd)
+ stream_printf(f," \"%s%s\",", cmd, (funcptr?"":"?"));
+ else
+ stream_printf(f," nil,");
+}
+
void
showScenario(stream *f, Scenario scen)
{
stream_printf(f, "[ \"%s\",", scen->name);
- @:scenarioCommand(initSystem)@
- @:scenarioCommand(exitSystem)@
- @:scenarioCommand(initClient)@
- @:scenarioCommand(exitClient)@
- @:scenarioCommand(parser)@
- @:scenarioCommand(optimizer)@
- @:scenarioCommand(tactics)@
- @:scenarioCommand(engine)@
+ print_scenarioCommand(f, scen->initSystem, scen->initSystemCmd);
+ print_scenarioCommand(f, scen->exitSystem, scen->exitSystemCmd);
+ print_scenarioCommand(f, scen->initClient, scen->initClientCmd);
+ print_scenarioCommand(f, scen->exitClient, scen->exitClientCmd);
+ print_scenarioCommand(f, scen->parser, scen->parserCmd);
+ print_scenarioCommand(f, scen->optimizer, scen->optimizerCmd);
+ print_scenarioCommand(f, scen->tactics, scen->tacticsCmd);
+ print_scenarioCommand(f, scen->engine, scen->engineCmd);
stream_printf(f, "]\n");
}
@@ -329,34 +340,55 @@
prelude code.
Beware that after the update, we also have to adjust the client records.
They contain a copy of the functions addresses.
[EMAIL PROTECTED] updLine
-if( scen->@1 && strcmp(scen->@1,nme) == 0){
- Client c1;
- scen->@1Cmd = fcn;
- for(c1 = mal_clients; c1 < mal_clients+MAL_MAXCLIENTS; c1++)
- if(@2 && c1->scenario && strcmp(c1->scenario,scen->name)==0)
- c1->[EMAIL PROTECTED] fcn;
- else
- if(@2 && c1->oldscenario && strcmp(c1->oldscenario,scen->name)==0)
- c1->[EMAIL PROTECTED] fcn;
-}
@c
void
-updateScenario(str nme, MALfcn fcn)
+updateScenario(str nme, str fnme, MALfcn fcn)
{
- int i;
- Scenario scen = scenarioRec;
+ int phase = -1;
+ Scenario scen = findScenario(nme);
- for (i = 0; i < MAXSCEN && scen->name; i++, scen++) {
- @:updLine(initSystem, 0)@
- @:updLine(exitSystem, 0)@
- @:updLine(initClient, MAL_SCENARIO_INITCLIENT)@
- @:updLine(exitClient, MAL_SCENARIO_EXITCLIENT)@
- @:updLine(reader, MAL_SCENARIO_READER)@
- @:updLine(parser, MAL_SCENARIO_PARSER)@
- @:updLine(optimizer, MAL_SCENARIO_OPTIMIZE)@
- @:updLine(tactics, MAL_SCENARIO_SCHEDULER)@
- @:updLine(engine, MAL_SCENARIO_ENGINE)@
+ if (scen->initSystem && strcmp(scen->initSystem, fnme) == 0)
+ scen->initSystemCmd = fcn;
+ if (scen->exitSystem && strcmp(scen->exitSystem, fnme) == 0)
+ scen->exitSystemCmd = fcn;
+ if (scen->initClient && strcmp(scen->initClient, fnme) == 0) {
+ scen->initClientCmd = fcn;
+ phase = MAL_SCENARIO_INITCLIENT;
+ }
+ if (scen->exitClient && strcmp(scen->exitClient, fnme) == 0) {
+ scen->exitClientCmd = fcn;
+ phase = MAL_SCENARIO_EXITCLIENT;
+ }
+ if (scen->reader && strcmp(scen->reader, fnme) == 0) {
+ scen->readerCmd = fcn;
+ phase = MAL_SCENARIO_READER;
+ }
+ if (scen->parser && strcmp(scen->parser, fnme) == 0) {
+ scen->parserCmd = fcn;
+ phase = MAL_SCENARIO_PARSER;
+ }
+ if (scen->optimizer && strcmp(scen->optimizer, fnme) == 0) {
+ scen->optimizerCmd = fcn;
+ phase = MAL_SCENARIO_OPTIMIZE;
+ }
+ if (scen->tactics && strcmp(scen->tactics, fnme) == 0) {
+ scen->tacticsCmd = fcn;
+ phase = MAL_SCENARIO_SCHEDULER;
+ }
+ if (scen->engine && strcmp(scen->engine, fnme) == 0) {
+ scen->engineCmd = fcn;
+ phase = MAL_SCENARIO_ENGINE;
+ }
+ if (phase != -1) {
+ Client c1;
+
+ for(c1 = mal_clients; c1 < mal_clients+MAL_MAXCLIENTS; c1++)
+ if (c1->scenario &&
+ strcmp(c1->scenario, scen->name) == 0)
+ c1->phase[phase] = fcn;
+ if (c1->oldscenario &&
+ strcmp(c1->oldscenario, scen->name) == 0)
+ c1->oldphase[phase] = fcn;
}
}
@@ -549,25 +581,16 @@
@-
@{
[EMAIL PROTECTED] runPhase
- c->stage= @1;
- if(msg== MAL_SUCCEED && c->[EMAIL PROTECTED] && ((msg= (str)
(*c->[EMAIL PROTECTED])(c)) || c->mode <= FINISHING)){
- /* error occurred */
-#ifdef MAL_SCENARIO_DEBUG
- stream_printf(GDKstdout,"Error in @1 phase\n");
- if( /*c->mode > FINISHING &&*/ msg )
- stream_printf(GDKstdout,"%s",msg);
-#endif
- if (msg) {
- /* FIXME: why is the error not handed back to the user
here? */
- /* for later */
- int r= strcmp(msg,"MALException:client.quit:Server
stopped.")==0;
- if( r ) break;
- GDKfree(msg);
- msg=0;
- }
- continue;
- }
[EMAIL PROTECTED]
+static str
+runPhase(Client c, int phase)
+{
+ str msg = MAL_SUCCEED;
+ if (c->phase[c->stage = phase])
+ return msg = (str) (*c->phase[phase])(c);
+ return msg;
+}
+
@-
Access control enforcement. Except for the server owner
running a scenario should be explicitly permitted.
@@ -581,20 +604,30 @@
struct tms t0,t1;
#endif
- if (c->phase[MAL_SCENARIO_INITCLIENT])
- (*c->phase[MAL_SCENARIO_INITCLIENT]) (c);
- while (c->mode > FINISHING) {
- msg = MAL_SUCCEED;
- @:runPhase(MAL_SCENARIO_READER)@
+ while (c->mode > FINISHING || msg != MAL_SUCCEED) {
+ if (!c->state[0] &&
+ (msg = runPhase(c, MAL_SCENARIO_INITCLIENT)) != MAL_SUCCEED)
+ continue;
+ if (c->mode <= FINISHING ||
+ (msg = runPhase(c, MAL_SCENARIO_READER)) != MAL_SUCCEED)
+ continue;
c->lastcmd= time(0);
start= GDKusec();
#ifdef HAVE_TIMES
times(&t0);
#endif
- @:runPhase(MAL_SCENARIO_PARSER)@
- @:runPhase(MAL_SCENARIO_OPTIMIZE)@
- @:runPhase(MAL_SCENARIO_SCHEDULER)@
- @:runPhase(MAL_SCENARIO_ENGINE)@
+ if (c->mode <= FINISHING ||
+ (msg = runPhase(c, MAL_SCENARIO_PARSER)) != MAL_SUCCEED)
+ continue;
+ if (c->mode <= FINISHING ||
+ (msg = runPhase(c, MAL_SCENARIO_OPTIMIZE)) != MAL_SUCCEED)
+ continue;
+ if (c->mode <= FINISHING ||
+ (msg = runPhase(c, MAL_SCENARIO_SCHEDULER)) != MAL_SUCCEED)
+ continue;
+ if (c->mode <= FINISHING ||
+ (msg = runPhase(c, MAL_SCENARIO_ENGINE)) != MAL_SUCCEED)
+ continue;
c->actions++;
start = GDKusec()-start;
c->totaltime += start;
Index: mal_authorize.mx
===================================================================
RCS file: /cvsroot/monetdb/MonetDB5/src/mal/mal_authorize.mx,v
retrieving revision 1.56
retrieving revision 1.57
diff -u -d -r1.56 -r1.57
--- mal_authorize.mx 11 Jan 2008 10:41:31 -0000 1.56
+++ mal_authorize.mx 8 Feb 2008 22:36:31 -0000 1.57
@@ -80,6 +80,7 @@
#endif /* _MAL_AUTHORIZE_H */
@-
@c
[EMAIL PROTECTED]
#include "mal_config.h"
#include "mal_authorize.h"
#ifdef HAVE_UNISTD_H
Index: mal_function.mx
===================================================================
RCS file: /cvsroot/monetdb/MonetDB5/src/mal/mal_function.mx,v
retrieving revision 1.153
retrieving revision 1.154
diff -u -d -r1.153 -r1.154
--- mal_function.mx 14 Jan 2008 07:49:35 -0000 1.153
+++ mal_function.mx 8 Feb 2008 22:36:31 -0000 1.154
@@ -1,4 +1,3 @@
-@' The contents of this file are subject to the MonetDB Public License
@' Version 1.1 (the "License"); you may not use this file except in
@' compliance with the License. You may obtain a copy of the License at
@' http://monetdb.cwi.nl/Legal/MonetDBLicense-1.1.html
@@ -31,7 +30,7 @@
io.print(msg);
msg:= "done";
return msg;
-end user.hellowWorld;
+end user.helloWorld;
@end example
The module name designates the collection to which this function
Index: mal_session.mx
===================================================================
RCS file: /cvsroot/monetdb/MonetDB5/src/mal/mal_session.mx,v
retrieving revision 1.149
retrieving revision 1.150
diff -u -d -r1.149 -r1.150
--- mal_session.mx 11 Jan 2008 10:41:33 -0000 1.149
+++ mal_session.mx 8 Feb 2008 22:36:31 -0000 1.150
@@ -23,7 +23,7 @@
consist of include statements to load modules of general interest.
The startup script is ran as user Admin.
Its location is described in Monet configuration file.
-The default location is: !!!###%%% TODO %%%###!!! <-- FIXME
+The default location is: !!!%%% TODO %%%!!! <-- FIXME
It may overwritten using a command line argument.
@@ -40,6 +40,7 @@
mal_export void MSscheduleClient(str command, str challenge, bstream *fin,
stream *fout);
mal_export str MALreader(Client c);
+mal_export str MALinitClient(Client c);
mal_export str MALexitClient(Client c);
mal_export str MALparser(Client c);
mal_export str MALengine(Client c);
@@ -515,6 +516,14 @@
MSresetVariables(c->curprg->def, 0, oldstate.vtop);
@c
str
+MALinitClient(Client c)
+{
+ assert (c->state[0] == NULL);
+ c->state[0] = c;
+ return NULL;
+}
+
+str
MALexitClient(Client c)
{
if (c->glb) {
@@ -522,7 +531,7 @@
GDKfree(c->glb);
}
c->glb = 0;
- return 0;
+ return NULL;
}
str
Index: mal_client.mx
===================================================================
RCS file: /cvsroot/monetdb/MonetDB5/src/mal/mal_client.mx,v
retrieving revision 1.163
retrieving revision 1.164
diff -u -d -r1.163 -r1.164
--- mal_client.mx 11 Jan 2008 10:41:31 -0000 1.163
+++ mal_client.mx 8 Feb 2008 22:36:31 -0000 1.164
@@ -61,7 +61,7 @@
@{
The routines defined below provide management of the client
administration. Routines dealing with serviceing requests
-are located in mal\_startup.
+are located in mal_startup.
@h
#ifndef _MAL_CLIENT_H_
#define _MAL_CLIENT_H_
Index: mal_module.mx
===================================================================
RCS file: /cvsroot/monetdb/MonetDB5/src/mal/mal_module.mx,v
retrieving revision 1.66
retrieving revision 1.67
diff -u -d -r1.66 -r1.67
--- mal_module.mx 11 Jan 2008 10:41:32 -0000 1.66
+++ mal_module.mx 8 Feb 2008 22:36:31 -0000 1.67
@@ -624,11 +624,12 @@
in texi format for inclusion in the documetation.
@c
void dumpManualOverview(stream *f, Module s, int recursive){
- int j,z,rows;
+ int j,z,rows,cols;
Symbol t;
InstrPtr sig;
Module list[256]; int k, top=0, ftop, fnd;
InstrPtr fcn[5000];
+ int r, c, *x = NULL, x_sze = 0;
if(s==NULL || f==NULL){
@@ -640,6 +641,7 @@
if(top>1) qsort(list, top, sizeof(Module),
(int(*)(const void *, const void *))cmpModName);
+ cols = 4;
stream_printf(f,"@multitable @columnfractions .24 .24 .24 .24\n");
for(k=0;k<top;k++){
s= list[k];
@@ -666,23 +668,47 @@
sig= fcn[j]; fcn[j]=fcn[z]; fcn[z]= sig;
}
stream_printf(f,"@" "item\n");
- rows = ftop/4;
- rows += (ftop %4) ?1:0;
- for(z=0; z<rows; z++){
- stream_printf(f,"@" "item\n%s.%s\n",
- getModuleId(fcn[z]), getFunctionId(fcn[z]));
- if( z+rows <ftop)
- stream_printf(f,"@" "tab\n%s.%s\n",
- getModuleId(fcn[z+rows]),
getFunctionId(fcn[z+rows]));
- if(z+rows*2 <ftop)
- stream_printf(f,"@" "tab\n%s.%s\n",
- getModuleId(fcn[z+rows*2]),
getFunctionId(fcn[z+rows*2]));
- if(z+rows*3 <ftop)
- stream_printf(f,"@" "tab\n%s.%s\n",
- getModuleId(fcn[z+rows*3]),
getFunctionId(fcn[z+rows*3]));
+ rows = (ftop + cols - 1) / cols;
+ if (x == NULL) {
+ /* 2x* to allow for empty/skipped fields/columns */
+ x_sze = 2 * cols * rows;
+ x = (int*) GDKmalloc(x_sze * sizeof(int));
+ } else if (2 * cols * rows > x_sze) {
+ x_sze = 2 * cols * rows;
+ x = (int*) GDKrealloc(x, x_sze * sizeof(int));
+ }
+ assert(x != NULL);
+ for (z = 0; z < rows; z++) {
+ x[cols * z] = z;
+ }
+ for (c = 1; c < cols; c++) {
+ for (r = 0; r < rows; r++) {
+ int i = (cols * r) + c - 1;
+ if (z < ftop &&
+ (x[i] < 0 || strlen(getModuleId(fcn[x[i]]))
+ strlen(getFunctionId(fcn[x[i]])) < (size_t)(80 / cols))) {
+ x[i+1] = z++;
+ } else {
+ /* HACK to avoid long names running
into next column in printed version */
+ x[i+1] = -1;
+ }
+ }
+ }
+ z = 0;
+ for (r = 0; r < rows; r++) {
+ for (c = 0; c < cols; c++) {
+ str it[] = {"item", "tab"};
+ stream_printf(f,"@" "%s\n", it[(c > 0)]);
+ if (x[z] != -1) {
+ stream_printf(f,"%s.%s\n",
+ getModuleId(fcn[x[z]]),
getFunctionId(fcn[x[z]]));
+ }
+ z++;
+ }
}
}
stream_printf(f,"@end multitable\n");
+ if (x != NULL)
+ GDKfree(x);
}
@-
The manual help overview merely lists the mod.function names
@@ -695,6 +721,8 @@
Module list[256]; int k, ftop, fnd,top=0;
InstrPtr fcn[5000];
str hlp[5000],msg;
+ str hlp_texi = NULL;
+ size_t hlp_texi_len = 0;
if(s==NULL || f==NULL){
@@ -740,11 +768,45 @@
for(z=0; z<ftop; z++){
stream_printf(f,"@" "item %s.%s\n",
getModuleId(fcn[z]), getFunctionId(fcn[z]));
- if( hlp[z] )
- stream_printf(f,"@" "tab %s\n", hlp[z]);
+ if( hlp[z] ) {
+ str hlp_ = hlp[z];
+ size_t hlp_len = 2*strlen(hlp[z]) + 1;
+ if (hlp_texi == NULL) {
+ hlp_texi = (str) GDKmalloc(hlp_len);
+ hlp_texi_len = hlp_len;
+ } else if (hlp_len > hlp_texi_len) {
+ hlp_texi = (str) GDKrealloc(hlp_texi,
hlp_len);
+ hlp_texi_len = hlp_len;
+ }
+ if (hlp_texi != NULL) {
+ str i = hlp[z];
+ str o = hlp_texi;
+ char c;
+ while ((c = (*i++))) {
+ /* quote special texi
characters with '@' */
+ switch (c) {
+ case '@':
+ case '{':
+ case '}':
+ *o++ = '@';
+ break;
+ }
+ *o++ = c;
+ }
+ *o++ = '\0';
+ hlp_ = hlp_texi;
+ }
+ if (strlen(getModuleId(fcn[z])) +
strlen(getFunctionId(fcn[z])) >= 20) {
+ /* HACK to avoid long names running
into help text in printed version */
+ stream_printf(f,"@" "item\n");
+ }
+ stream_printf(f,"@" "tab %s\n", hlp_);
+ }
}
}
stream_printf(f,"@end multitable\n");
+ if (hlp_texi != NULL)
+ GDKfree(hlp_texi);
}
@-
Summarize the type resolution table.
Index: mal_sabaoth.mx
===================================================================
RCS file: /cvsroot/monetdb/MonetDB5/src/mal/mal_sabaoth.mx,v
retrieving revision 1.41
retrieving revision 1.42
diff -u -d -r1.41 -r1.42
--- mal_sabaoth.mx 11 Jan 2008 10:41:33 -0000 1.41
+++ mal_sabaoth.mx 8 Feb 2008 22:36:31 -0000 1.42
@@ -36,6 +36,7 @@
@-
@c
[EMAIL PROTECTED]
#include "mal_config.h"
#include "mal_sabaoth.h"
#include <stdio.h> /* fseek, rewind */
@@ -766,6 +767,7 @@
return(MAL_SUCCEED);
}
[EMAIL PROTECTED]
@h
#endif
Index: mal_interpreter.mx
===================================================================
RCS file: /cvsroot/monetdb/MonetDB5/src/mal/mal_interpreter.mx,v
retrieving revision 1.210
retrieving revision 1.211
diff -u -d -r1.210 -r1.211
--- mal_interpreter.mx 7 Feb 2008 08:12:44 -0000 1.210
+++ mal_interpreter.mx 8 Feb 2008 22:36:31 -0000 1.211
@@ -462,7 +462,7 @@
Preferrably we should introduce a itrace flag PROFILE
We rely on optimizing compilers to remove the redundant code.
@c
- if( malProfileMode == 0 && cntxt->itrace==0){
+ if( malProfileMode == 0 && cntxt->itrace==0 && cntxt->flags == 0 &&
GDKdebug == 0){
while(stkpc < mb->stop && stkpc != stoppc ){
pci = getInstrPtr(mb,stkpc);
if( malProfileMode + cntxt->itrace)
Index: mal_readline.mx
===================================================================
RCS file: /cvsroot/monetdb/MonetDB5/src/mal/mal_readline.mx,v
retrieving revision 1.57
retrieving revision 1.58
diff -u -d -r1.57 -r1.58
--- mal_readline.mx 11 Jan 2008 10:41:33 -0000 1.57
+++ mal_readline.mx 8 Feb 2008 22:36:31 -0000 1.58
@@ -14,7 +14,7 @@
@' Portions created by CWI are Copyright (C) 1997-2008 CWI.
@' All Rights Reserved.
@- Online help
-The textual interface @value{mclient} supports a limited
+The textual interface @sc{mclient} supports a limited
form of online help commands.
The argument is a (partial) operator call,
which is looked up in the symbol table.
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Monetdb-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/monetdb-checkins