registered_function_info struct changed to function_options class
[ginac.git] / ginsh / ginsh_parser.yy
index 375290f93d9883028686a14b882b1ad0cf39775f..0fcafa2eba44939ed5d55a1786acb498b9c188a2 100644 (file)
@@ -86,7 +86,7 @@ static ex lst2matrix(const ex &l);
 %token T_NUMBER T_SYMBOL T_LITERAL T_DIGITS T_QUOTE T_QUOTE2 T_QUOTE3
 %token T_EQUAL T_NOTEQ T_LESSEQ T_GREATEREQ T_MATRIX_BEGIN T_MATRIX_END
 
-%token T_QUIT T_PRINT T_TIME T_XYZZY T_INVENTORY T_LOOK T_SCORE
+%token T_QUIT T_WARRANTY T_PRINT T_READ T_WRITE T_TIME T_XYZZY T_INVENTORY T_LOOK T_SCORE
 
 /* Operator precedence and associativity */
 %right '='
@@ -139,6 +139,20 @@ line       : ';'
        | '?' T_SYMBOL          {print_help(ex_to_symbol($2).getname());}
        | '?' '?'               {print_help_topics();}
        | T_QUIT                {YYACCEPT;}
+       | T_WARRANTY {
+               cout << "This program is free software; you can redistribute it and/or modify it under\n";
+               cout << "the terms of the GNU General Public License as published by the Free Software\n";
+               cout << "Foundation; either version 2 of the License, or (at your option) any later\n";
+               cout << "version.\n";
+               cout << "This program is distributed in the hope that it will be useful, but WITHOUT\n";
+               cout << "ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n";
+               cout << "FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more\n";
+               cout << "details.\n";
+               cout << "You should have received a copy of the GNU General Public License along with\n";
+               cout << "this program. If not, write to the Free Software Foundation, 675 Mass Ave,\n";
+               cout << "Cambridge, MA 02139, USA.\n";
+
+       }
        | T_XYZZY               {cout << "Nothing happens.\n";}
        | T_INVENTORY           {cout << "You're not carrying anything.\n";}
        | T_LOOK                {cout << "You're in a twisty little maze of passages, all alike.\n";}
@@ -252,7 +266,7 @@ static ex f_lsolve(const exprseq &e) {return lsolve(e[0], e[1]);}
 static ex f_nops(const exprseq &e) {return e[0].nops();}
 static ex f_normal1(const exprseq &e) {return e[0].normal();}
 static ex f_numer(const exprseq &e) {return e[0].numer();}
-static ex f_power(const exprseq &e) {return power(e[0], e[1]);}
+static ex f_pow(const exprseq &e) {return pow(e[0], e[1]);}
 static ex f_sqrt(const exprseq &e) {return sqrt(e[0]);}
 static ex f_subs2(const exprseq &e) {return e[0].subs(e[1]);}
 
@@ -511,7 +525,7 @@ static const fcn_init builtin_fcns[] = {
        {"normal", fcn_desc(f_normal2, 2)},
        {"numer", fcn_desc(f_numer, 1)},
        {"op", fcn_desc(f_op, 2)},
-       {"power", fcn_desc(f_power, 2)},
+       {"pow", fcn_desc(f_pow, 2)},
        {"prem", fcn_desc(f_prem, 3)},
        {"primpart", fcn_desc(f_primpart, 2)},
        {"quo", fcn_desc(f_quo, 3)},
@@ -552,16 +566,16 @@ static ex f_ginac_function(const exprseq &es, int serial)
 }
 
 // All registered GiNaC functions
-#ifndef NO_GINAC_NAMESPACE
+#ifndef NO_NAMESPACE_GINAC
 void GiNaC::ginsh_get_ginac_functions(void)
-#else // ndef NO_GINAC_NAMESPACE
+#else // ndef NO_NAMESPACE_GINAC
 void ginsh_get_ginac_functions(void)
-#endif // ndef NO_GINAC_NAMESPACE
+#endif // ndef NO_NAMESPACE_GINAC
 {
-       vector<registered_function_info>::const_iterator i = function::registered_functions().begin(), end = function::registered_functions().end();
+       vector<function_options>::const_iterator i = function::registered_functions().begin(), end = function::registered_functions().end();
        unsigned serial = 0;
        while (i != end) {
-               fcns.insert(make_pair(i->name, fcn_desc(f_ginac_function, i->nparams, serial)));
+               fcns.insert(make_pair(i->get_name(), fcn_desc(f_ginac_function, i->get_nparams(), serial)));
                i++;
                serial++;
        }
@@ -722,21 +736,24 @@ static char **fcn_completion(char *text, int start, int end)
        }
 }
 
+void greeting(void)
+{
+    cout << "ginsh - GiNaC Interactive Shell (" << PACKAGE << " V" << VERSION << ")" << endl;
+    cout << "  __,  _______  Copyright (C) 1999-2000 Johannes Gutenberg University Mainz,\n"
+         << " (__) *       | Germany.  This is free software with ABSOLUTELY NO WARRANTY.\n"
+         << "  ._) i N a C | You are welcome to redistribute it under certain conditions;\n"
+         << "<-------------' see the file COPYING for details.\n" << endl;
+    cout << "Type ?? for a list of help topics." << endl;
+}
 
 /*
  *  Main program
  */
-
 int main(int argc, char **argv)
 {
        // Print banner in interactive mode
-       if (isatty(0)) {
-               cout << "ginsh - GiNaC Interactive Shell (" << PACKAGE << " " << VERSION << ")\n";
-               cout << "Copyright (C) 1999-2000 Johannes Gutenberg University Mainz, Germany\n";
-               cout << "This is free software with ABSOLUTELY NO WARRANTY.  You are welcome to\n";
-               cout << "redistribute it under certain conditions; see the file COPYING for details.\n";
-               cout << "Type ?? for a list of help topics.\n";
-       }
+       if (isatty(0)) 
+               greeting();
 
        // Init function table
        insert_fcns(builtin_fcns);