Changeset 56c789 in git


Ignore:
Timestamp:
Oct 12, 2010, 3:03:05 PM (14 years ago)
Author:
Hans Schoenemann <hannes@…>
Branches:
(u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
Children:
f86c483adff92eaa95fe133be87f5d14b7f57b61
Parents:
ec58bdfcf1e8339250d75b8fc0ce7fbbce505ddb
Message:
new table generation, p2

git-svn-id: file:///usr/local/Singular/svn/trunk@13459 2c84dea3-7e68-4137-9b89-c4e89433aadc
Location:
Singular
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • Singular/Makefile.in

    rec58bd r56c789  
    381381        ${CXX} ${CXXFLAGS}  ${CPPFLAGS} ${DEFS} -c $<
    382382
    383 iparith.inc: ${OBJS} claptmpl.o iparith.cc \
    384                           ipconv.cc tok.h mpsr_Tok.cc grammar.h mod2.h
    385         ${CXX} ${CXXFLAGS} ${CPPFLAGS} ${CXXTEMPLFLAGS} ${DEFS} -DGENTABLE \
    386              -o gentable1 claptmpl.o iparith.cc tesths.cc mpsr_Tok.cc \
    387              ${OBJS} ${LDFLAGS} ${LIBS} ../kernel/mmalloc.o
     383iparith.inc: gentable.cc grammar.h tok.h table.h mod2.h
     384        ${CXX} ${CXXFLAGS} ${CPPFLAGS} ${CXXTEMPLFLAGS} ${DEFS} gentable.cc \
     385             -o gentable1 ${LDFLAGS} ${LIBS}
    388386        ./gentable1
    389387        /bin/rm -f gentable1 gentable1.exe
    390388
    391 mpsr_Tok.inc: ${OBJS} claptmpl.o iparith.cc \
    392                           ipconv.cc tok.h mpsr_Tok.cc grammar.h mod2.h
    393         ${CXX} ${CXXFLAGS} ${CPPFLAGS} ${CXXTEMPLFLAGS} ${DEFS} -DGENTABLE \
    394              -o gentable2 claptmpl.o iparith.cc tesths.cc mpsr_Tok.cc \
    395              ${OBJS} ${LDFLAGS} ${LIBS} ../kernel/mmalloc.o
     389mpsr_Tok.inc: gentable.cc grammar.h tok.h table.h mod2.h
     390        ${CXX} ${CXXFLAGS} ${CPPFLAGS} ${CXXTEMPLFLAGS} ${DEFS} gentable.cc \
     391             -o gentable2 ${LDFLAGS} ${LIBS}
    396392        ./gentable2
    397393        /bin/rm -f gentable2 gentable2.exe
    398 
    399394
    400395svnver:
  • Singular/gentable.cc

    rec58bd r56c789  
    886886}
    887887
     888#ifdef HAVE_MPSR
     889#include <Singular/mpsr.h>
     890#include <Singular/mpsr_Tok.h>
     891#define MAX_COP 256 // there may be at most 256 cops
     892
     893// this is the main data struct for storing the relation
     894// Singular token <-> (Dict, OP)
     895typedef struct mpsr_cmd
     896{
     897
     898  short         tok;    // The Singular token encoding
     899
     900  // The MP Dict tag in which this token is defined,
     901  MP_DictTag_t  dict;
     902
     903  // The MP operator corresponding to this token
     904  MP_Common_t   cop; // operator
     905} mpsr_cmd;
     906
     907#define MAX_SR_DICT     5
     908
     909// this provides a mapping from MP dict tags to more useful (small)
     910// array indicies
     911inline short mpdict2srdict(MP_DictTag_t dict)
     912{
     913  if (dict == MP_SingularDict) return 0;
     914  else if (dict == MP_BasicDict) return 1;
     915  else if (dict == MP_PolyDict) return 2;
     916  else if (dict == MP_MatrixDict) return 3;
     917  else if (dict == MP_NumberDict) return 4;
     918  else return MAX_SR_DICT;
     919}
     920
     921// This is the array which holds all mpsr_cmds
     922// It is initialized in mpsr_tok.inc
     923static mpsr_cmd mpsr_cmds[MAX_TOK];
     924
     925// This is the array which stores the mapping from token to an mpsr_cmd
     926// A value is either an index into mpsr_cmds, or MAX_TOK
     927static short tok2mp[MAX_TOK];
     928
     929// This is the array which stores the mapping from (dict, cop) to a
     930// mpsr_cmd. First index mpdict2srdict(dict), second is cop
     931static short mp2tok[MAX_SR_DICT][MAX_COP];
     932
     933// This the list of all tokens which have an MP representation as a
     934// cop in the Singular dictionary
     935short sr_cmds[] =
     936{
     937  OPTION_CMD,
     938  NAMES_CMD,
     939  ATTRIB_CMD,
     940  CHARSTR_CMD,
     941  CLOSE_CMD,
     942  DEF_CMD,
     943  DEGREE_CMD,
     944  DEFINED_CMD,
     945  E_CMD,
     946  EXECUTE_CMD,
     947  FREEMODULE_CMD,
     948  INT_CMD,
     949  INTERRED_CMD,
     950  INTMAT_CMD,
     951  INTVEC_CMD,
     952  IS_RINGVAR,
     953  KILLATTR_CMD,
     954  MAP_CMD,
     955  MEMORY_CMD,
     956  MONITOR_CMD,
     957  NAMEOF_CMD,
     958  NUMBER_CMD,
     959  NPARS_CMD,
     960  NVARS_CMD,
     961  OPEN_CMD,
     962  ORDSTR_CMD,
     963  PAR_CMD,
     964  PARSTR_CMD,
     965  PARDEG_CMD,
     966  POLY_CMD,
     967  PRINT_CMD,
     968  READ_CMD,
     969  SORTVEC_CMD,
     970  STRING_CMD,
     971  SYSTEM_CMD,
     972  TYPEOF_CMD,
     973  VECTOR_CMD,
     974  VAR_CMD,
     975  VARSTR_CMD,
     976  WEIGHT_CMD,
     977  '(',
     978  COEF_CMD,
     979  DELETE_CMD,
     980  FETCH_CMD,
     981  FIND_CMD,
     982  IMAP_CMD,
     983  INSERT_CMD,
     984  SIMPLIFY_CMD,
     985  SRES_CMD,
     986  DBPRINT_CMD,
     987  TEST_CMD,
     988  PROC_CMD,
     989  MSTD_CMD,
     990  RESERVEDNAME_CMD,
     991  WRITE_CMD,
     992  QRING_CMD,
     993  FGLM_CMD,
     994  FGLMQUOT_CMD,
     995  DUMP_CMD,
     996  GETDUMP_CMD,
     997  STATUS_CMD,
     998  LIB_CMD,
     999  PACKAGE_CMD
     1000};
     1001
     1002// struct used for specifying the cmd <-> cop relations
     1003typedef struct cmd_cop
     1004{
     1005  short cmd;
     1006  MP_Common_t cop;
     1007} cmd_op;
     1008
     1009typedef struct cmd_dictcop
     1010{
     1011  MP_DictTag_t  dict;
     1012  cmd_op        cmd_ops[255];
     1013} cmd_dictcop;
     1014
     1015cmd_dictcop cmd_dictcops[] =
     1016{
     1017  {
     1018    MP_PolyDict,
     1019    // This is the list of all tokens which have an MP representation as a
     1020    // cop in the Poly dictionary
     1021    {
     1022      {BETTI_CMD, MP_CopPolyBetti},
     1023      {CHARACTERISTIC_CMD, MP_CopPolyChar},
     1024      {CHAR_SERIES_CMD, MP_CopPolyCharSeries},
     1025      {CONTENT_CMD, MP_CopPolyClearDenom },
     1026      {DEG_CMD, MP_CopPolyDeg},
     1027      {DIM_CMD, MP_CopPolyDim},
     1028      {FAC_CMD, MP_CopPolyFactorize},
     1029      {FACSTD_CMD, MP_CopPolyFacStd},
     1030      {HILBERT_CMD, MP_CopPolyHilb},
     1031      {HOMOG_CMD, MP_CopPolyHomog},
     1032      {INDEPSET_CMD, MP_CopPolyInDepSet},
     1033      {IDEAL_CMD, MP_CopPolyIdeal},
     1034      {KBASE_CMD, MP_CopPolyKbase},
     1035      {LEAD_CMD, MP_CopPolyLead},
     1036      {LEADCOEF_CMD, MP_CopPolyLeadCoef},
     1037      {LEADEXP_CMD, MP_CopPolyLeadExp},
     1038      {MAXID_CMD, MP_CopPolyMaxIdeal},
     1039      {MINBASE_CMD, MP_CopPolyMinBase},
     1040      {MINRES_CMD, MP_CopPolyMinRes},
     1041      {MODUL_CMD, MP_CopPolyModule},
     1042      {MULTIPLICITY_CMD, MP_CopPolyMultiplicity},
     1043      {ORD_CMD, MP_CopPolyOrder},
     1044      {PRUNE_CMD, MP_CopPolyPrune},
     1045      {QHWEIGHT_CMD, MP_CopPolyQHWeight},
     1046      {REGULARITY_CMD, MP_CopPolyRegularity},
     1047      {RESULTANT_CMD, MP_CopPolyResultant},
     1048      {STD_CMD, MP_CopPolyStd},
     1049      {SYZYGY_CMD, MP_CopPolySyz},
     1050      {VDIM_CMD, MP_CopPolyVdim},
     1051      {COEFFS_CMD,  MP_CopPolyCoeffs},
     1052      {CONTRACT_CMD, MP_CopPolyContract},
     1053      {ELIMINATION_CMD, MP_CopPolyEliminate},
     1054      {JET_CMD, MP_CopPolyJet},
     1055      {LIFT_CMD, MP_CopPolyLift},
     1056      {LIFTSTD_CMD, MP_CopPolyLiftstd},
     1057      {MODULO_CMD, MP_CopPolyModulo},
     1058      {MRES_CMD, MP_CopPolyMres},
     1059      {QUOTIENT_CMD, MP_CopPolyQuotient},
     1060      {REDUCE_CMD, MP_CopPolyReduce},
     1061      {PREIMAGE_CMD, MP_CopPolyPreimage},
     1062      {RES_CMD, MP_CopPolyRes},
     1063      {RING_CMD, MP_CopPolyRing},
     1064      {MAX_TOK, 0}
     1065    }
     1066  },
     1067  {
     1068    MP_NumberDict,
     1069    // This is the list of all tokens which have an MP representation as a
     1070    // cop in the Number dictionary
     1071    {
     1072      {PRIME_CMD, MP_CopNumberPrime},
     1073      {EXTGCD_CMD, MP_CopNumberExtGcd},
     1074      {GCD_CMD, MP_CopNumberGcd},
     1075      {RANDOM_CMD, MP_CopNumberRandom},
     1076      {MAX_TOK, 0}
     1077    }
     1078  },
     1079  {
     1080    MP_MatrixDict,
     1081    // This is the list of all tokens which have an MP representation as a
     1082    // cop in the Matrix dictionary
     1083    {
     1084      {BAREISS_CMD, MP_CopMatrixBareiss},
     1085      {COLS_CMD, MP_CopMatrixCols},
     1086      {DET_CMD, MP_CopMatrixDet},
     1087      {JACOB_CMD, MP_CopMatrixJacobi},
     1088      {MATRIX_CMD, MP_CopMatrixDenseMatrix},
     1089      {ROWS_CMD, MP_CopMatrixRows},
     1090      {TRACE_CMD, MP_CopMatrixTrace},
     1091      {TRANSPOSE_CMD, MP_CopMatrixTranspose},
     1092      {KOSZUL_CMD, MP_CopMatrixKoszul},
     1093      {MINOR_CMD, MP_CopMatrixMinor},
     1094      {WEDGE_CMD, MP_CopMatrixWedge},
     1095      {MAX_TOK, 0}
     1096    }
     1097  },
     1098  {
     1099    MP_BasicDict,
     1100    // This is the list of all tokens which have an MP representation as a
     1101    // cop in the MP Basic dictionary
     1102    {
     1103      {PLUSPLUS, MP_CopBasicInc},
     1104      {MINUSMINUS,  MP_CopBasicDec},
     1105      {COUNT_CMD, MP_CopBasicSize},
     1106      {LIST_CMD, MP_CopBasicList},
     1107      {'+', MP_CopBasicAdd},
     1108      {'-', MP_CopBasicMinus},
     1109      {'*', MP_CopBasicMult},
     1110      {'/', MP_CopBasicDiv},
     1111      {'%', MP_CopBasicMod},
     1112      {'^', MP_CopBasicPow},
     1113      {GE, MP_CopBasicGreaterEqual},
     1114      {'<', MP_CopBasicGreater},
     1115      {LE, MP_CopBasicLessEqual},
     1116      {'>', MP_CopBasicLess},
     1117      {'&', MP_CopBasicAnd},
     1118      {'|', MP_CopBasicOr},
     1119      {'=', MP_CopBasicAssign},
     1120      {EQUAL_EQUAL, MP_CopBasicEqual},
     1121      {NOTEQUAL, MP_CopBasicNotEqual},
     1122      {DOTDOT, MP_CopBasicRange},
     1123      {'[', MP_CopBasicIndex},
     1124      {DIFF_CMD, MP_CopBasicDiff},
     1125      {INTERSECT_CMD, MP_CopBasicInterSect},
     1126      {SUBST_CMD, MP_CopBasicSubst},
     1127      {NOT, MP_CopBasicNot},
     1128      {COLONCOLON, MP_CopBasicPackage},
     1129      {MAX_TOK, 0}
     1130    }
     1131  }
     1132};
     1133
     1134
     1135// Given a Singular token, find matching (dict,op): Return 1 if one is
     1136// found, 0, otherwise
     1137static short GetMPDictTok(short tok, MP_DictTag_t *dict, MP_Common_t *cop)
     1138{
     1139  short i, l, j;
     1140  cmd_op *cmd_ops;
     1141
     1142  // first, look through Singular specific commands
     1143  l = sizeof(sr_cmds)/sizeof(short);
     1144  if (l > MAX_COP)
     1145  {
     1146    fprintf(stderr,
     1147            "Error: There are more than 256 entries in MP_SingularDict\n");
     1148    exit(1);
     1149  }
     1150  for (i=0; i<l; i++)
     1151    if (sr_cmds[i] == tok)
     1152    {
     1153      *dict = MP_SingularDict;
     1154      *cop = i;
     1155      return 1;
     1156    }
     1157
     1158  // look through all the other dicts
     1159  for (j=0; j<MAX_SR_DICT-1; j++)
     1160  {
     1161    cmd_ops = cmd_dictcops[j].cmd_ops;
     1162    for (i=0; (cmd_ops[i]).cmd != MAX_TOK; i++)
     1163    {
     1164      if (i > MAX_COP)
     1165      {
     1166        fprintf(stderr,
     1167                "Error: There are more than 256 entries in dict %d's\n",j);
     1168        exit(1);
     1169      }
     1170      if (cmd_ops[i].cmd == tok)
     1171      {
     1172        *dict = cmd_dictcops[j].dict;
     1173        *cop = cmd_ops[i].cop;
     1174        return 1;
     1175      }
     1176    }
     1177  }
     1178  return 0;
     1179}
     1180
     1181
     1182// This actually generates the tables of mpsr_tok.inc
     1183char *mpsr_Tok_inc;
     1184void mpsr_ttGen()
     1185{
     1186  mpsr_cmd mpsrcmds[MAX_TOK];
     1187  short tok2mp[MAX_TOK];
     1188  short mp2tok[MAX_SR_DICT][MAX_COP];
     1189  short max_cmd = 0, i, j;
     1190  MP_Common_t cop;
     1191  FILE *outfile;
     1192  MP_DictTag_t dict;
     1193
     1194
     1195  // init all arrays
     1196  for (i=0; i<MAX_TOK; i++)
     1197  {
     1198    mpsrcmds[i].tok = MAX_TOK;
     1199    tok2mp[i] = MAX_TOK;
     1200  }
     1201  for (i=0; i<MAX_SR_DICT; i++)
     1202    for (j=0; j<MAX_COP; j++)
     1203      mp2tok[i][j] = MAX_TOK;
     1204
     1205  // Now go through all the token and test them
     1206  for (i=0; i<MAX_TOK; i++)
     1207  {
     1208    if (IsCmdToken(i))
     1209    {
     1210      if (GetMPDictTok(i, &dict, &cop))
     1211      {
     1212        mpsrcmds[max_cmd].tok = i;
     1213        mpsrcmds[max_cmd].dict = dict;
     1214        mpsrcmds[max_cmd].cop = cop;
     1215        tok2mp[i] = max_cmd;
     1216        mp2tok[mpdict2srdict(dict)][cop] = i;
     1217        max_cmd++;
     1218      }
     1219     //else
     1220     //{
     1221     //  fprintf(stderr, "Warning: mpsr_ttGen: Unknown Cmd Token: %d(%s)\n",
     1222     //                  i, iiTwoOps(i));
     1223     // }
     1224    }
     1225  }
     1226
     1227  // Generate the template file
     1228  mpsr_Tok_inc=strdup("mpsr_Tok.xxxxxxxx");
     1229  int pid=getpid();
     1230  mpsr_Tok_inc[8]=(pid %10)+'0'; pid/=10;
     1231  mpsr_Tok_inc[9]=(pid %10)+'0'; pid/=10;
     1232  mpsr_Tok_inc[10]=(pid %10)+'0'; pid/=10;
     1233  mpsr_Tok_inc[11]=(pid %10)+'0'; pid/=10;
     1234  mpsr_Tok_inc[12]=(pid %10)+'0'; pid/=10;
     1235  mpsr_Tok_inc[13]=(pid %10)+'0';
     1236
     1237  outfile = myfopen(mpsr_Tok_inc, "w");
     1238  if (outfile == NULL)
     1239  {
     1240    fprintf(stderr, "Error: mpsr_ttGen: Cannot open file mpsr_Tok.inc\n");
     1241    exit(1);
     1242  }
     1243
     1244  // header
     1245  fprintf(outfile,
     1246   "/***************************************************************\n"
     1247   "*\n"
     1248   "* File:       mpsr_tok.inc\n"
     1249   "* Purpose:    tables for mapping Singular cmds to/from MP (dict, op)\n"
     1250   "*\n"
     1251   "* THIS FILE WAS AUTOMATICALLY GENERATED BY mpsr_ttGen(). DO NOT EDIT!\n"
     1252   "*\n"
     1253   "***************************************************************/\n"
     1254   "#ifndef MPSR_STRING_TABLES\n"
     1255   "mpsr_cmd mpsr_cmds[] =\n"
     1256   "{\n"
     1257   "  { %d,\t %d,\t %d }", mpsrcmds[0].tok, mpsrcmds[0].dict, mpsrcmds[0].cop);
     1258
     1259  // mpsrcmds
     1260  for (i=1; i<max_cmd; i++)
     1261  {
     1262    fprintf(outfile, ",\n  { %d,\t %d,\t %d }",
     1263            mpsrcmds[i].tok, mpsrcmds[i].dict, mpsrcmds[i].cop);
     1264  }
     1265  fprintf(outfile,"\n};\n\n");
     1266
     1267  // tok2mp
     1268  fprintf(outfile, "short tok2mp[] = { %d", tok2mp[0]);
     1269  for (i=1; i<MAX_TOK; i++)
     1270    fprintf(outfile, ", %d", tok2mp[i]);
     1271  fprintf(outfile, "};\n\n");
     1272
     1273  // mp2tok
     1274  fprintf(outfile, "short mp2tok[MAX_SR_DICT][MAX_COP] = \n{");
     1275  for (i=0; i<MAX_SR_DICT; i++)
     1276  {
     1277    fprintf(outfile, "\n{\n");
     1278    for (j=0; j<MAX_COP; j++)
     1279    {
     1280      fprintf(outfile, " %d",mp2tok[i][j]);
     1281      if  (j!=MAX_COP-1) fprintf(outfile, ",");
     1282    }
     1283    if (i!=MAX_SR_DICT-1) fprintf(outfile, "},");
     1284    else                  fprintf(outfile, "}");
     1285  }
     1286  fprintf(outfile,"\n};\n\n");
     1287
     1288  fprintf(outfile, "#else /* MPSR_STRING_TABLE */\n"
     1289    "mpsr_cmd mpsr_cmds[] =\n"
     1290    "{\n"
     1291    "{ \"%s\",\t %d,\t %d }",
     1292    iiTwoOps(mpsrcmds[0].tok), mpsrcmds[0].dict, mpsrcmds[0].cop);
     1293
     1294  for (i=1; i<max_cmd; i++)
     1295  {
     1296    fprintf(outfile, ",\n  { \"%s\",\t %d,\t %d }",
     1297            iiTwoOps(mpsrcmds[i].tok), mpsrcmds[i].dict, mpsrcmds[i].cop);
     1298  }
     1299  fprintf(outfile, ",\n { NULL, \t 0, \t 0}");
     1300  fprintf(outfile,"\n};\n\n#endif /* ! MPSR_STRING_TABLE */");
     1301
     1302  fclose(outfile);
     1303} // That's all
     1304
     1305#else
     1306void mpsr_ttGen()
     1307{
     1308  system("touch mpsr_Tok.xx");
     1309}
     1310#endif
     1311
    8881312int main()
    8891313{
    890   //mpsr_ttGen();
     1314  mpsr_ttGen();
    8911315  ttGen4();
    8921316  ttGen1();
  • Singular/iparith.cc

    rec58bd r56c789  
    6565#  include <kernel/fglm.h>
    6666#endif /* HAVE_FACTORY */
    67 #define HAVE_INTERPOLATION
    68 #ifdef HAVE_INTERPOLATION
    69 #  include <Singular/interpolation.h>
    70 #endif
     67#include <Singular/interpolation.h>
    7168
    7269#include <Singular/ipshell.h>
     
    118115
    119116
    120 /* ifdef GENTABLE: definitions are in ipshell.h */
    121 #ifndef GENTABLE
    122117typedef char * (*Proc1)(char *);
    123118struct sValCmd1
     
    160155  short valid_for;
    161156};
    162 #endif /* GENTABLE */
    163157
    164158typedef struct
    165159{
    166160  cmdnames *sCmds;             /**< array of existing commands */
    167 #ifndef GENTABLE
    168161  struct sValCmd1 *psValCmd1;
    169162  struct sValCmd2 *psValCmd2;
    170163  struct sValCmd3 *psValCmd3;
    171164  struct sValCmdM *psValCmdM;
    172 #endif /* GENTABLE */
    173165  int nCmdUsed;      /**< number of commands used */
    174166  int nCmdAllocated; /**< number of commands-slots allocated */
     
    211203
    212204int iiOp; /* the current operation*/
    213 
    214 #ifdef GENTABLE
    215 cmdnames cmds[] =
    216 {  // name-string alias tokval          toktype
    217   { "$INVALID$",   0, -1,                 0},
    218   #ifdef HAVE_FANS
    219   { "addadj",      0, ADDADJ_CMD,         CMD_M},
    220   { "addmaxcone",  0, ADDMCONE_CMD,       CMD_2},
    221   { "adj",         0, ADJACENCY_CMD,      CMD_13},
    222   #endif /* HAVE_FANS */
    223   { "alias",       0, ALIAS_CMD ,         PARAMETER},
    224   { "and",         0, '&' ,               LOGIC_OP},
    225   { "attrib",      0, ATTRIB_CMD ,        CMD_123},
    226   { "bareiss",     0, BAREISS_CMD ,       CMD_123},
    227   { "betti",       0, BETTI_CMD ,         CMD_12},
    228   { "bigint",      0, BIGINT_CMD ,        ROOT_DECL},
    229   #ifdef HAVE_PLURAL
    230   { "bracket",     0, BRACKET_CMD ,       CMD_2},
    231   #endif
    232   { "break",       0, BREAK_CMD ,         BREAK_CMD},
    233   { "breakpoint",  0, BREAKPOINT_CMD ,    CMD_M},
    234   { "char",        0, CHARACTERISTIC_CMD ,CMD_1},
    235   { "char_series", 0, CHAR_SERIES_CMD ,   CMD_1},
    236   { "charstr",     0, CHARSTR_CMD ,       CMD_1},
    237   { "chinrem",     0, CHINREM_CMD ,       CMD_2},
    238   { "cleardenom",  0, CONTENT_CMD ,       CMD_1},
    239   { "close",       0, CLOSE_CMD ,         CMD_1},
    240   { "coef",        0, COEF_CMD ,          CMD_M},
    241   { "coeffs",      0, COEFFS_CMD ,        CMD_23},
    242   #ifdef HAVE_FANS
    243   { "cone",        0, CONE_CMD,           ROOT_DECL},
    244   #endif /* HAVE_FANS */
    245   { "continue",    0, CONTINUE_CMD ,      CONTINUE_CMD},
    246   { "contract",    0, CONTRACT_CMD ,      CMD_2},
    247   { "convhull",    0, NEWTONPOLY_CMD,     CMD_1},
    248   { "dbprint",     0, DBPRINT_CMD ,       CMD_M},
    249   { "def",         0, DEF_CMD ,           ROOT_DECL},
    250   { "defined",     0, DEFINED_CMD ,       CMD_1},
    251   { "deg",         0, DEG_CMD ,           CMD_12},
    252   { "degree",      0, DEGREE_CMD ,        CMD_1},
    253   { "delete",      0, DELETE_CMD ,        CMD_2},
    254   #ifdef HAVE_FANS
    255   { "delmaxcone",  0, DELMCONE_CMD,       CMD_12},
    256   #endif /* HAVE_FANS */
    257   { "det",         0, DET_CMD ,           CMD_1},
    258   { "diff",        0, DIFF_CMD ,          CMD_2},
    259   { "dim",         0, DIM_CMD ,           CMD_1},
    260   { "div",         0, INTDIV_CMD ,        MULDIV_OP},
    261   { "division",    0, DIVISION_CMD ,      CMD_M},
    262   { "dump",        0, DUMP_CMD,           CMD_1},
    263   { "extgcd",      0, EXTGCD_CMD ,        CMD_2},
    264   { "ERROR",       0, ERROR_CMD ,         CMD_1},
    265   { "eliminate",   0, ELIMINATION_CMD,    CMD_23},
    266   { "else",        0, ELSE_CMD ,          ELSE_CMD},
    267   #ifdef HAVE_PLURAL
    268   { "envelope",    0, ENVELOPE_CMD ,       CMD_1},
    269   #endif
    270   { "eval",        0, EVAL ,              EVAL},
    271   { "example",     0, EXAMPLE_CMD ,       EXAMPLE_CMD},
    272   { "execute",     0, EXECUTE_CMD ,       CMD_1},
    273   { "export",      0, EXPORT_CMD ,        EXPORT_CMD},
    274   { "exportto",    0, EXPORTTO_CMD ,      CMD_2},
    275   #ifdef HAVE_FANS
    276   { "facetnormals",0, FACETNS_CMD,        CMD_1},
    277   #endif /* HAVE_FANS */
    278   { "factorize",   0, FAC_CMD ,           CMD_12},
    279   #ifdef HAVE_FANS
    280   { "fan",         0, FAN_CMD,            ROOT_DECL},
    281   #endif /* HAVE_FANS */
    282   { "farey",       0, FAREY_CMD ,         CMD_2},
    283   { "fetch",       0, FETCH_CMD ,         CMD_2},
    284   { "fglm",        0, FGLM_CMD ,          CMD_2},
    285   { "fglmquot",    0, FGLMQUOT_CMD,       CMD_2},
    286   { "find",        0, FIND_CMD ,          CMD_23},
    287   { "finduni",     0, FINDUNI_CMD,        CMD_1},
    288   { "forif",       0, IF_CMD ,            IF_CMD},
    289   { "freemodule",  0, FREEMODULE_CMD ,    CMD_1},
    290   { "facstd",      0, FACSTD_CMD ,        CMD_12},
    291   { "frwalk",      0, FWALK_CMD ,         CMD_23},
    292   { "gen",         0, E_CMD ,             CMD_1},
    293   { "getdump",     0, GETDUMP_CMD,        CMD_1},
    294   #ifdef HAVE_FANS
    295   { "getprop",     0, GETPROP_CMD,        CMD_2},
    296   #endif /* HAVE_FANS */
    297   { "gcd",         0, GCD_CMD ,           CMD_2},
    298   { "GCD",         2, GCD_CMD ,           CMD_2},
    299   { "hilb",        0, HILBERT_CMD ,       CMD_123},
    300   { "highcorner",  0, HIGHCORNER_CMD,     CMD_1},
    301   { "homog",       0, HOMOG_CMD ,         CMD_123},
    302   { "hres",        0, HRES_CMD ,          CMD_2},
    303   { "ideal",       0, IDEAL_CMD ,         IDEAL_CMD},
    304   { "if",          0, IF_CMD ,            IF_CMD},
    305   { "imap",        0, IMAP_CMD ,          CMD_2},
    306   { "impart",      0, IMPART_CMD ,        CMD_1},
    307   { "importfrom",  0, IMPORTFROM_CMD ,    CMD_2},
    308   { "indepSet",    0, INDEPSET_CMD ,      CMD_12},
    309   { "insert",      0, INSERT_CMD ,        CMD_23},
    310   { "int",         0, INT_CMD ,           ROOT_DECL},
    311 #ifdef HAVE_INTERPOLATION
    312   { "interpolation",0,INTERPOLATE_CMD ,   CMD_2},
    313 #endif
    314   { "interred",    0, INTERRED_CMD ,      CMD_1},
    315   { "intersect",   0, INTERSECT_CMD ,     CMD_M},
    316   { "intmat",      0, INTMAT_CMD ,        INTMAT_CMD},
    317   { "intvec",      0, INTVEC_CMD ,        ROOT_DECL_LIST},
    318   { "jacob",       0, JACOB_CMD ,         CMD_1},
    319   { "janet",       0, JANET_CMD ,         CMD_12},
    320   { "jet",         0, JET_CMD ,           CMD_M},
    321   { "kbase",       0, KBASE_CMD ,         CMD_12},
    322   { "keepring",    0, KEEPRING_CMD ,      KEEPRING_CMD},
    323   { "kernel",      0, KERNEL_CMD ,        CMD_2},
    324   { "kill",        0, KILL_CMD ,          KILL_CMD},
    325   { "killattrib",  0, KILLATTR_CMD ,      CMD_12},
    326   { "koszul",      0, KOSZUL_CMD ,        CMD_23},
    327   { "kres",        0, KRES_CMD ,          CMD_2},
    328   { "laguerre",    0, LAGSOLVE_CMD,       CMD_3},
    329   { "lead",        0, LEAD_CMD ,          CMD_1},
    330   { "leadcoef",    0, LEADCOEF_CMD ,      CMD_1},
    331   { "leadexp",     0, LEADEXP_CMD ,       CMD_1},
    332   { "leadmonom",   0, LEADMONOM_CMD ,     CMD_1},
    333   { "LIB",         0, LIB_CMD ,           SYSVAR},
    334   { "lift",        0, LIFT_CMD ,          CMD_23},
    335   { "liftstd",     0, LIFTSTD_CMD ,       CMD_23},
    336   { "link",        0, LINK_CMD ,          ROOT_DECL},
    337   #ifdef HAVE_FANS
    338   { "linspace",    0, LINSPACE_CMD,       CMD_1},
    339   #endif /* HAVE_FANS */
    340   { "listvar",     0, LISTVAR_CMD ,       LISTVAR_CMD},
    341   { "list",        0, LIST_CMD ,          ROOT_DECL_LIST},
    342   { "load",        0, LOAD_CMD ,          CMD_12},
    343   { "lres",        0, LRES_CMD ,          CMD_2},
    344   { "ludecomp",    0, LU_CMD ,            CMD_1},
    345   { "luinverse",   0, LUI_CMD ,           CMD_M},
    346   { "lusolve",     0, LUS_CMD ,           CMD_M},
    347   { "map",         0, MAP_CMD ,           RING_DECL},
    348   { "matrix",      0, MATRIX_CMD ,        MATRIX_CMD},
    349   { "maxideal",    0, MAXID_CMD ,         CMD_1},
    350   #ifdef HAVE_FANS
    351   { "maxcone",     0, MAXCONE_CMD,        CMD_12},
    352   { "maxrays",     0, MAXRAYS_CMD,        CMD_1},
    353   #endif /* HAVE_FANS */
    354   { "memory",      0, MEMORY_CMD ,        CMD_1},
    355   { "minbase",     0, MINBASE_CMD ,       CMD_1},
    356   { "minor",       0, MINOR_CMD ,         CMD_M},
    357   { "minres",      0, MINRES_CMD ,        CMD_1},
    358   { "mod",         0, INTMOD_CMD ,        MULDIV_OP},
    359   { "module",      0, MODUL_CMD ,         MODUL_CMD},
    360   { "modulo",      0, MODULO_CMD ,        CMD_2},
    361   { "monitor",     0, MONITOR_CMD ,       CMD_12},
    362   { "monomial",    0, MONOM_CMD ,         CMD_1},
    363   { "mpresmat",    0, MPRES_CMD,          CMD_2},
    364   { "mult",        0, MULTIPLICITY_CMD ,  CMD_1},
    365   #ifdef OLD_RES
    366   { "mres",        0, MRES_CMD ,          CMD_23},
    367   #else
    368   { "mres",        0, MRES_CMD ,          CMD_2},
    369   #endif
    370   { "mstd",        0, MSTD_CMD ,          CMD_1},
    371   { "nameof",      0, NAMEOF_CMD ,        CMD_1},
    372   { "names",       0, NAMES_CMD ,         CMD_M},
    373   #ifdef HAVE_PLURAL
    374   { "ncalgebra",   2, NCALGEBRA_CMD ,     CMD_2},
    375   { "nc_algebra",  0, NC_ALGEBRA_CMD ,    CMD_2},
    376   #endif
    377   { "ncols",       0, COLS_CMD ,          CMD_1},
    378   { "not",         0, NOT ,               NOT},
    379   { "npars",       0, NPARS_CMD ,         CMD_1},
    380   #ifdef OLD_RES
    381   { "nres",        0, RES_CMD ,           CMD_23},
    382   #else
    383   { "nres",        0, RES_CMD ,           CMD_2},
    384   #endif
    385   { "nrows",       0, ROWS_CMD ,          CMD_1},
    386   { "number",      0, NUMBER_CMD ,        RING_DECL},
    387   { "nvars",       0, NVARS_CMD ,         CMD_1},
    388   { "open",        0, OPEN_CMD ,          CMD_1},
    389   #ifdef HAVE_PLURAL
    390   { "oppose",      0, OPPOSE_CMD ,        CMD_2},
    391   { "opposite",    0, OPPOSITE_CMD ,      CMD_1},
    392   #endif
    393   { "option",      0, OPTION_CMD ,        CMD_M},
    394   { "or",          0, '|' ,               LOGIC_OP},
    395   { "ord",         0, ORD_CMD ,           CMD_1},
    396   { "ordstr",      0, ORDSTR_CMD ,        CMD_1},
    397   { "package",     0, PACKAGE_CMD ,       ROOT_DECL},
    398   { "par",         0, PAR_CMD ,           CMD_1},
    399   { "parameter",   0, PARAMETER ,         PARAMETER},
    400   { "pardeg",      0, PARDEG_CMD ,        CMD_1},
    401   { "parstr",      0, PARSTR_CMD ,        CMD_12},
    402   { "poly",        0, POLY_CMD ,          RING_DECL},
    403   { "preimage",    0, PREIMAGE_CMD ,      CMD_13},
    404   { "prime",       0, PRIME_CMD ,         CMD_1},
    405   { "primefactors",0, PFAC_CMD ,          CMD_12},
    406   { "print",       0, PRINT_CMD ,         CMD_12},
    407   { "prune",       0, PRUNE_CMD ,         CMD_1},
    408   { "proc",        0, PROC_CMD ,          PROC_CMD},
    409   { "qhweight",    0, QHWEIGHT_CMD ,      CMD_1},
    410   { "qring",       0, QRING_CMD ,         ROOT_DECL},
    411   { "quote",       0, QUOTE ,             QUOTE},
    412   { "quotient",    0, QUOTIENT_CMD ,      CMD_2},
    413   { "random",      0, RANDOM_CMD ,        CMD_23},
    414   { "rank",        0, RANK_CMD ,          CMD_12},
    415   { "read",        0, READ_CMD ,          CMD_12},
    416   { "reduce",      0, REDUCE_CMD ,        CMD_M},
    417   { "regularity",  0, REGULARITY_CMD ,    CMD_1},
    418   { "repart",      0, REPART_CMD ,        CMD_1},
    419   { "reservedName",0, RESERVEDNAME_CMD ,  CMD_M},
    420   { "resolution",  0, RESOLUTION_CMD ,    RING_DECL},
    421   { "resultant",   0, RESULTANT_CMD,      CMD_3},
    422   { "return",      0, RETURN ,            RETURN},
    423   { "RETURN",      0, END_GRAMMAR ,       RETURN},
    424   { "ring",        0, RING_CMD ,          RING_CMD},
    425   { "ringlist",    0, RINGLIST_CMD ,      CMD_1},
    426   { "rvar",        0, IS_RINGVAR ,        CMD_1},
    427   #ifdef HAVE_FANS
    428   { "setprop",     0, SETPROP_CMD,        CMD_3},
    429   #endif /* HAVE_FANS */
    430   { "setring",     0, SETRING_CMD ,       SETRING_CMD},
    431   { "simplex",     0, SIMPLEX_CMD,        CMD_M},
    432   { "simplify",    0, SIMPLIFY_CMD ,      CMD_2},
    433   { "size",        0, COUNT_CMD ,         CMD_1},
    434   { "slimgb",      0, SLIM_GB_CMD ,       CMD_1},
    435   { "sortvec",     0, SORTVEC_CMD ,       CMD_1},
    436   { "sqrfree",     0, SQR_FREE_CMD ,      CMD_1},
    437 #ifdef OLD_RES
    438   { "sres",        0, SRES_CMD ,          CMD_23},
    439 #else /* OLD_RES */
    440   { "sres",        0, SRES_CMD ,          CMD_2},
    441 #endif /* OLD_RES */
    442   { "status",      0, STATUS_CMD,         CMD_M},
    443   { "std",         0, STD_CMD ,           CMD_M},
    444   { "string",      0, STRING_CMD ,        ROOT_DECL_LIST},
    445   { "subst",       0, SUBST_CMD ,         CMD_M},
    446   { "system",      0, SYSTEM_CMD,         CMD_M},
    447   { "syz",         0, SYZYGY_CMD ,        CMD_1},
    448   { "test",        0, TEST_CMD ,          CMD_M},
    449   { "trace",       0, TRACE_CMD ,         CMD_1},
    450   { "transpose",   0, TRANSPOSE_CMD ,     CMD_1},
    451 #ifdef HAVE_PLURAL
    452   { "twostd",      0, TWOSTD_CMD ,        CMD_1},
    453 #endif /* HAVE_PLURAL */
    454   { "type",        0, TYPE_CMD ,          TYPE_CMD},
    455   { "typeof",      0, TYPEOF_CMD ,        CMD_1},
    456   { "univariate",  0, UNIVARIATE_CMD,     CMD_1},
    457   { "uressolve",   0, URSOLVE_CMD,        CMD_M},
    458   { "vandermonde", 0, VANDER_CMD,         CMD_3},
    459   { "var",         0, VAR_CMD ,           CMD_1},
    460   { "variables",   0, VARIABLES_CMD,      CMD_1},
    461   { "varstr",      0, VARSTR_CMD ,        CMD_12},
    462   { "vdim",        0, VDIM_CMD ,          CMD_1},
    463   { "vector",      0, VECTOR_CMD ,        RING_DECL},
    464   { "wedge",       0, WEDGE_CMD ,         CMD_2},
    465   { "weight",      0, WEIGHT_CMD ,        CMD_1},
    466   { "whileif",     0, IF_CMD ,            IF_CMD},
    467   { "write",       0, WRITE_CMD ,         CMD_M},
    468 /* delete for next version:*/
    469   { "IN",          1, LEAD_CMD ,          CMD_1},
    470   { "NF",          1, REDUCE_CMD ,        CMD_M},
    471   { "multiplicity",1, MULTIPLICITY_CMD ,  CMD_1},
    472   { "verbose",     2, OPTION_CMD ,        CMD_M},
    473 //  { "rank",        1, ROWS_CMD ,          CMD_1},
    474 //  { "Current",     0, -1 ,                SYSVAR},
    475 //  { "Top",         0, -1 ,                SYSVAR},
    476 //  { "Up",          0, -1 ,                SYSVAR},
    477 
    478 /* set sys vars*/
    479   { "degBound",    0, VMAXDEG ,           SYSVAR},
    480   { "echo",        0, VECHO ,             SYSVAR},
    481   { "minpoly",     0, VMINPOLY ,          SYSVAR},
    482   { "multBound",   0, VMAXMULT ,          SYSVAR},
    483   { "noether",     0, VNOETHER ,          SYSVAR},
    484   { "pagewidth",   0, VCOLMAX ,           SYSVAR},
    485   { "printlevel",  0, VPRINTLEVEL ,       SYSVAR},
    486   { "short",       0, VSHORTOUT ,         SYSVAR},
    487   { "timer",       0, VTIMER ,            SYSVAR},
    488   { "rtimer",      0, VRTIMER,            SYSVAR},
    489   { "TRACE",       0, TRACE ,             SYSVAR},
    490   { "voice",       0, VOICE ,             SYSVAR},
    491 
    492 /* other reserved words:scanner.l */
    493   { "pause",       2, -1 ,             0},
    494   { "while",       0, -1 ,             0},
    495   { "for",         0, -1 ,             0},
    496   { "help",        0, -1 ,             0},
    497   { "newline",     0, -1 ,             0},
    498   { "exit",        0, -1 ,             0},
    499   { "quit",        0, -1 ,             0},
    500 /* end of list marker */
    501   { NULL, 0, 0, 0}
    502 };
    503 #endif /* GENTABLE */
    504205
    505206/*=================== operations with 2 args.: static proc =================*/
     
    36543355}
    36553356
    3656 /*=================== operations with 2 args.: table =================*/
    3657 
    3658 struct sValCmd2 dArith2[]=
    3659 {
    3660 // operations:
    3661 // proc        cmd              res             arg1        arg2   plural
    3662  {jjCOLCOL,    COLONCOLON,     ANY_TYPE,       DEF_CMD,    DEF_CMD, ALLOW_PLURAL | ALLOW_RING}
    3663 ,{jjPLUS_I,    '+',            INT_CMD,        INT_CMD,    INT_CMD, ALLOW_PLURAL | ALLOW_RING}
    3664 ,{jjPLUS_BI,   '+',            BIGINT_CMD,     BIGINT_CMD, BIGINT_CMD, ALLOW_PLURAL | ALLOW_RING}
    3665 ,{jjPLUS_N,    '+',            NUMBER_CMD,     NUMBER_CMD, NUMBER_CMD, ALLOW_PLURAL | ALLOW_RING}
    3666 ,{jjPLUS_P,    '+',            POLY_CMD,       POLY_CMD,   POLY_CMD, ALLOW_PLURAL | ALLOW_RING}
    3667 ,{jjPLUS_P,    '+',            VECTOR_CMD,     VECTOR_CMD, VECTOR_CMD, ALLOW_PLURAL | ALLOW_RING}
    3668 ,{jjPLUS_ID,   '+',            IDEAL_CMD,      IDEAL_CMD,  IDEAL_CMD, ALLOW_PLURAL | ALLOW_RING}
    3669 ,{jjPLUS_ID,   '+',            MODUL_CMD,      MODUL_CMD,  MODUL_CMD, ALLOW_PLURAL | ALLOW_RING}
    3670 ,{jjPLUS_P_MA, '+',            MATRIX_CMD,     POLY_CMD,   MATRIX_CMD, ALLOW_PLURAL | ALLOW_RING}
    3671 ,{jjPLUS_MA_P, '+',            MATRIX_CMD,     MATRIX_CMD, POLY_CMD, ALLOW_PLURAL | ALLOW_RING}
    3672 ,{jjPLUS_MA,   '+',            MATRIX_CMD,     MATRIX_CMD, MATRIX_CMD, ALLOW_PLURAL | ALLOW_RING}
    3673 ,{jjPLUS_S,    '+',            STRING_CMD,     STRING_CMD, STRING_CMD, ALLOW_PLURAL | ALLOW_RING}
    3674 ,{jjOP_IV_I,   '+',            INTVEC_CMD,     INTVEC_CMD, INT_CMD, ALLOW_PLURAL | ALLOW_RING}
    3675 ,{jjOP_I_IV,   '+',            INTVEC_CMD,     INT_CMD,    INTVEC_CMD, ALLOW_PLURAL | ALLOW_RING}
    3676 ,{jjOP_IM_I,   '+',            INTMAT_CMD,     INTMAT_CMD, INT_CMD, ALLOW_PLURAL | ALLOW_RING}
    3677 ,{jjOP_I_IM,   '+',            INTMAT_CMD,     INT_CMD,    INTMAT_CMD, ALLOW_PLURAL | ALLOW_RING}
    3678 ,{jjPLUS_IV,   '+',            INTVEC_CMD,     INTVEC_CMD, INTVEC_CMD, ALLOW_PLURAL | ALLOW_RING}
    3679 ,{jjPLUS_IV,   '+',            INTMAT_CMD,     INTMAT_CMD, INTMAT_CMD, ALLOW_PLURAL | ALLOW_RING}
    3680 ,{lAdd,        '+',            LIST_CMD,       LIST_CMD,   LIST_CMD, ALLOW_PLURAL | ALLOW_RING}
    3681 ,{jjRSUM,      '+',            RING_CMD,       RING_CMD,   RING_CMD, ALLOW_PLURAL | ALLOW_RING}
    3682 ,{jjRSUM,      '+',            QRING_CMD,      QRING_CMD,  RING_CMD, ALLOW_PLURAL | ALLOW_RING}
    3683 ,{jjRSUM,      '+',            QRING_CMD,      RING_CMD,   QRING_CMD, ALLOW_PLURAL | ALLOW_RING}
    3684 ,{jjRSUM,      '+',            QRING_CMD,      QRING_CMD,  QRING_CMD, ALLOW_PLURAL | ALLOW_RING}
    3685 ,{jjMINUS_I,   '-',            INT_CMD,        INT_CMD,    INT_CMD, ALLOW_PLURAL | ALLOW_RING}
    3686 ,{jjMINUS_BI,  '-',            BIGINT_CMD,     BIGINT_CMD, BIGINT_CMD, ALLOW_PLURAL | ALLOW_RING}
    3687 ,{jjMINUS_N,   '-',            NUMBER_CMD,     NUMBER_CMD, NUMBER_CMD, ALLOW_PLURAL | ALLOW_RING}
    3688 ,{jjMINUS_P,   '-',            POLY_CMD,       POLY_CMD,   POLY_CMD, ALLOW_PLURAL | ALLOW_RING}
    3689 ,{jjMINUS_P,   '-',            VECTOR_CMD,     VECTOR_CMD, VECTOR_CMD, ALLOW_PLURAL | ALLOW_RING}
    3690 ,{jjPLUS_MA_P, '-',            MATRIX_CMD,     MATRIX_CMD, POLY_CMD, ALLOW_PLURAL | ALLOW_RING}
    3691 ,{jjMINUS_MA,  '-',            MATRIX_CMD,     MATRIX_CMD, MATRIX_CMD, ALLOW_PLURAL | ALLOW_RING}
    3692 ,{jjOP_IV_I,   '-',            INTVEC_CMD,     INTVEC_CMD, INT_CMD, ALLOW_PLURAL | ALLOW_RING}
    3693 ,{jjOP_IM_I,   '-',            INTMAT_CMD,     INTMAT_CMD, INT_CMD, ALLOW_PLURAL | ALLOW_RING}
    3694 ,{jjMINUS_IV,  '-',            INTVEC_CMD,     INTVEC_CMD, INTVEC_CMD, ALLOW_PLURAL | ALLOW_RING}
    3695 ,{jjMINUS_IV,  '-',            INTMAT_CMD,     INTMAT_CMD, INTMAT_CMD, ALLOW_PLURAL | ALLOW_RING}
    3696 ,{jjWRONG2,    '-',            NONE,           IDEAL_CMD,  IDEAL_CMD, ALLOW_PLURAL | ALLOW_RING}
    3697 ,{jjWRONG2,    '-',            NONE,           MODUL_CMD,  MODUL_CMD, ALLOW_PLURAL | ALLOW_RING}
    3698 ,{jjTIMES_I,   '*',            INT_CMD,        INT_CMD,    INT_CMD, ALLOW_PLURAL | ALLOW_RING}
    3699 ,{jjTIMES_BI,  '*',            BIGINT_CMD,     BIGINT_CMD, BIGINT_CMD, ALLOW_PLURAL | ALLOW_RING}
    3700 ,{jjTIMES_N,   '*',            NUMBER_CMD,     NUMBER_CMD, NUMBER_CMD, ALLOW_PLURAL | ALLOW_RING}
    3701 ,{jjTIMES_P,   '*',            POLY_CMD,       POLY_CMD,   POLY_CMD, ALLOW_PLURAL | ALLOW_RING}
    3702 ,{jjTIMES_P,   '*',            VECTOR_CMD,     POLY_CMD,   VECTOR_CMD, ALLOW_PLURAL | ALLOW_RING}
    3703 ,{jjTIMES_P,   '*',            VECTOR_CMD,     VECTOR_CMD, POLY_CMD, ALLOW_PLURAL | ALLOW_RING}
    3704 ,{jjTIMES_MA_P1,'*',           IDEAL_CMD,      IDEAL_CMD,  POLY_CMD, ALLOW_PLURAL | ALLOW_RING}
    3705 ,{jjTIMES_MA_P2,'*',           IDEAL_CMD,      POLY_CMD,   IDEAL_CMD, ALLOW_PLURAL | ALLOW_RING}
    3706 ,{jjTIMES_MA_P1,'*',           MODUL_CMD,      MODUL_CMD,  POLY_CMD, ALLOW_PLURAL | ALLOW_RING}
    3707 ,{jjTIMES_MA_P2,'*',           MODUL_CMD,      POLY_CMD,   MODUL_CMD, ALLOW_PLURAL | ALLOW_RING}
    3708 ,{jjTIMES_ID,  '*',            IDEAL_CMD,      IDEAL_CMD,  IDEAL_CMD, ALLOW_PLURAL | ALLOW_RING}
    3709 ,{jjTIMES_MA_P1,'*',           MODUL_CMD,      IDEAL_CMD,  VECTOR_CMD, ALLOW_PLURAL | ALLOW_RING}
    3710 ,{jjTIMES_MA_P2,'*',           MODUL_CMD,      VECTOR_CMD, IDEAL_CMD, ALLOW_PLURAL | ALLOW_RING}
    3711 ,{jjTIMES_ID,  '*',            MODUL_CMD,      IDEAL_CMD,  MODUL_CMD, ALLOW_PLURAL | ALLOW_RING}
    3712 ,{jjTIMES_ID,  '*',            MODUL_CMD,      MODUL_CMD,  IDEAL_CMD, ALLOW_PLURAL | ALLOW_RING}
    3713 ,{jjTIMES_MA_P1,'*',           MATRIX_CMD,     MATRIX_CMD, POLY_CMD, ALLOW_PLURAL | ALLOW_RING}
    3714 ,{jjTIMES_MA_P2,'*',           MATRIX_CMD,     POLY_CMD,   MATRIX_CMD, ALLOW_PLURAL | ALLOW_RING}
    3715 ,{jjTIMES_MA_N1,'*',           MATRIX_CMD,     MATRIX_CMD, NUMBER_CMD, ALLOW_PLURAL | ALLOW_RING}
    3716 ,{jjTIMES_MA_N2,'*',           MATRIX_CMD,     NUMBER_CMD, MATRIX_CMD, ALLOW_PLURAL | ALLOW_RING}
    3717 ,{jjTIMES_MA_I1,'*',           MATRIX_CMD,     MATRIX_CMD, INT_CMD, ALLOW_PLURAL | ALLOW_RING}
    3718 ,{jjTIMES_MA_I2,'*',           MATRIX_CMD,     INT_CMD,    MATRIX_CMD, ALLOW_PLURAL | ALLOW_RING}
    3719 ,{jjTIMES_MA,  '*',            MATRIX_CMD,     MATRIX_CMD, MATRIX_CMD, ALLOW_PLURAL | ALLOW_RING}
    3720 ,{jjTIMES_MA_BI1,'*',          MATRIX_CMD,     MATRIX_CMD, BIGINT_CMD, ALLOW_PLURAL | ALLOW_RING}
    3721 ,{jjTIMES_MA_BI2,'*',          MATRIX_CMD,     BIGINT_CMD, MATRIX_CMD, ALLOW_PLURAL | ALLOW_RING}
    3722 ,{jjOP_IV_I,   '*',            INTVEC_CMD,     INTVEC_CMD, INT_CMD, ALLOW_PLURAL | ALLOW_RING}
    3723 ,{jjOP_I_IV,   '*',            INTVEC_CMD,     INT_CMD,    INTVEC_CMD, ALLOW_PLURAL | ALLOW_RING}
    3724 ,{jjOP_IV_I,   '*',            INTMAT_CMD,     INTMAT_CMD, INT_CMD, ALLOW_PLURAL | ALLOW_RING}
    3725 ,{jjOP_I_IV,   '*',            INTMAT_CMD,     INT_CMD,    INTMAT_CMD, ALLOW_PLURAL | ALLOW_RING}
    3726 ,{jjTIMES_IV,  '*',            INTVEC_CMD,     INTMAT_CMD, INTVEC_CMD, ALLOW_PLURAL | ALLOW_RING}
    3727 ,{jjTIMES_IV,  '*',            INTMAT_CMD,     INTMAT_CMD, INTMAT_CMD, ALLOW_PLURAL | ALLOW_RING}
    3728 ,{jjTIMES_IV,  '*',            INTMAT_CMD,     INTVEC_CMD, INTMAT_CMD, ALLOW_PLURAL | ALLOW_RING}
    3729 ,{jjDIV_N,     '/',            NUMBER_CMD,     NUMBER_CMD, NUMBER_CMD, ALLOW_PLURAL | ALLOW_RING}
    3730 ,{jjDIV_P,     '/',            POLY_CMD,       POLY_CMD,   POLY_CMD, ALLOW_PLURAL | ALLOW_RING}
    3731 ,{jjDIV_P,     '/',            VECTOR_CMD,     VECTOR_CMD, POLY_CMD, ALLOW_PLURAL | ALLOW_RING}
    3732 ,{jjDIV_Ma,    '/',            MATRIX_CMD,     MATRIX_CMD, POLY_CMD, ALLOW_PLURAL | NO_RING}
    3733 ,{jjDIVMOD_I,  '/',            INT_CMD,        INT_CMD,    INT_CMD, ALLOW_PLURAL | ALLOW_RING}
    3734 ,{jjDIV_BI,    '/',            BIGINT_CMD,     BIGINT_CMD, BIGINT_CMD, ALLOW_PLURAL | ALLOW_RING}
    3735 ,{jjOP_IV_I,   '/',            INTVEC_CMD,     INTVEC_CMD, INT_CMD, ALLOW_PLURAL | ALLOW_RING}
    3736 ,{jjOP_IV_I,   '/',            INTMAT_CMD,     INTMAT_CMD, INT_CMD, ALLOW_PLURAL | ALLOW_RING}
    3737 ,{jjDIVMOD_I,  INTDIV_CMD,     INT_CMD,        INT_CMD,    INT_CMD, ALLOW_PLURAL | ALLOW_RING}
    3738 ,{jjDIV_BI,    INTDIV_CMD,     BIGINT_CMD,     BIGINT_CMD, BIGINT_CMD, ALLOW_PLURAL | ALLOW_RING}
    3739 ,{jjOP_IV_I,   INTDIV_CMD,     INTVEC_CMD,     INTVEC_CMD, INT_CMD, ALLOW_PLURAL | ALLOW_RING}
    3740 ,{jjOP_IV_I,   INTDIV_CMD,     INTMAT_CMD,     INTMAT_CMD, INT_CMD, ALLOW_PLURAL | ALLOW_RING}
    3741 ,{jjDIVMOD_I,  '%',            INT_CMD,        INT_CMD,    INT_CMD, ALLOW_PLURAL | ALLOW_RING}
    3742 ,{jjMOD_BI,    '%',            BIGINT_CMD,     BIGINT_CMD, BIGINT_CMD, ALLOW_PLURAL | ALLOW_RING}
    3743 ,{jjOP_IV_I,   '%',            INTVEC_CMD,     INTVEC_CMD, INT_CMD, ALLOW_PLURAL | ALLOW_RING}
    3744 ,{jjOP_IV_I,   '%',            INTMAT_CMD,     INTMAT_CMD, INT_CMD, ALLOW_PLURAL | ALLOW_RING}
    3745 ,{jjMOD_N,     '%',            NUMBER_CMD,     NUMBER_CMD, NUMBER_CMD, ALLOW_PLURAL | ALLOW_RING}
    3746 ,{jjDIVMOD_I,  INTMOD_CMD,     INT_CMD,        INT_CMD,    INT_CMD, ALLOW_PLURAL | ALLOW_RING}
    3747 ,{jjMOD_BI,    INTMOD_CMD,     BIGINT_CMD,     BIGINT_CMD, BIGINT_CMD, ALLOW_PLURAL | ALLOW_RING}
    3748 ,{jjOP_IV_I,   INTMOD_CMD,     INTVEC_CMD,     INTVEC_CMD, INT_CMD, ALLOW_PLURAL | ALLOW_RING}
    3749 ,{jjOP_IV_I,   INTMOD_CMD,     INTMAT_CMD,     INTMAT_CMD, INT_CMD, ALLOW_PLURAL | ALLOW_RING}
    3750 ,{jjMOD_N,     INTMOD_CMD,     NUMBER_CMD,     NUMBER_CMD, NUMBER_CMD, ALLOW_PLURAL | ALLOW_RING}
    3751 ,{jjPOWER_I,   '^',            INT_CMD,        INT_CMD,    INT_CMD, ALLOW_PLURAL | ALLOW_RING}
    3752 ,{jjPOWER_BI,   '^',           BIGINT_CMD,     BIGINT_CMD, INT_CMD, ALLOW_PLURAL | ALLOW_RING}
    3753 ,{jjPOWER_N,   '^',            NUMBER_CMD,     NUMBER_CMD, INT_CMD, ALLOW_PLURAL | ALLOW_RING}
    3754 ,{jjPOWER_P,   '^',            POLY_CMD,       POLY_CMD,   INT_CMD, ALLOW_PLURAL | ALLOW_RING}
    3755 ,{jjPOWER_ID,  '^',            IDEAL_CMD,      IDEAL_CMD,  INT_CMD, ALLOW_PLURAL | ALLOW_RING}
    3756 ,{jjLE_I,      LE,             INT_CMD,        INT_CMD,    INT_CMD, ALLOW_PLURAL | ALLOW_RING}
    3757 ,{jjLE_BI,     LE,             INT_CMD,        BIGINT_CMD, BIGINT_CMD, ALLOW_PLURAL | ALLOW_RING}
    3758 ,{jjLE_N,      LE,             INT_CMD,        NUMBER_CMD, NUMBER_CMD, ALLOW_PLURAL | ALLOW_RING}
    3759 ,{jjCOMPARE_S, LE,             INT_CMD,        STRING_CMD, STRING_CMD, ALLOW_PLURAL | ALLOW_RING}
    3760 ,{jjCOMPARE_IV_I,LE,           INT_CMD,        INTVEC_CMD, INT_CMD, ALLOW_PLURAL | ALLOW_RING}
    3761 ,{jjCOMPARE_IV,LE,             INT_CMD,        INTVEC_CMD, INTVEC_CMD, ALLOW_PLURAL | ALLOW_RING}
    3762 ,{jjCOMPARE_P, LE,             INT_CMD,        POLY_CMD,   POLY_CMD, ALLOW_PLURAL | ALLOW_RING}
    3763 ,{jjCOMPARE_P, LE,             INT_CMD,        VECTOR_CMD, VECTOR_CMD, ALLOW_PLURAL | ALLOW_RING}
    3764 ,{jjLT_I,      '<',            INT_CMD,        INT_CMD,    INT_CMD, ALLOW_PLURAL | ALLOW_RING}
    3765 ,{jjLT_BI,     '<',            INT_CMD,        BIGINT_CMD, BIGINT_CMD, ALLOW_PLURAL | ALLOW_RING}
    3766 ,{jjLT_N,      '<',            INT_CMD,        NUMBER_CMD, NUMBER_CMD, ALLOW_PLURAL | ALLOW_RING}
    3767 ,{jjCOMPARE_IV_I,'<',           INT_CMD,        INTVEC_CMD, INT_CMD, ALLOW_PLURAL | ALLOW_RING}
    3768 ,{jjCOMPARE_IV,'<',            INT_CMD,        INTVEC_CMD, INTVEC_CMD, ALLOW_PLURAL | ALLOW_RING}
    3769 ,{jjCOMPARE_S, '<',            INT_CMD,        STRING_CMD, STRING_CMD, ALLOW_PLURAL | ALLOW_RING}
    3770 ,{jjCOMPARE_P, '<',            INT_CMD,        POLY_CMD,   POLY_CMD, ALLOW_PLURAL | ALLOW_RING}
    3771 ,{jjCOMPARE_P, '<',            INT_CMD,        VECTOR_CMD, VECTOR_CMD, ALLOW_PLURAL | ALLOW_RING}
    3772 ,{jjGE_I,      GE,             INT_CMD,        INT_CMD,    INT_CMD, ALLOW_PLURAL | ALLOW_RING}
    3773 ,{jjGE_BI,     GE,             INT_CMD,        BIGINT_CMD, BIGINT_CMD, ALLOW_PLURAL | ALLOW_RING}
    3774 ,{jjGE_N,      GE,             INT_CMD,        NUMBER_CMD, NUMBER_CMD, ALLOW_PLURAL | ALLOW_RING}
    3775 ,{jjCOMPARE_S, GE,             INT_CMD,        STRING_CMD, STRING_CMD, ALLOW_PLURAL | ALLOW_RING}
    3776 ,{jjCOMPARE_IV_I,GE,           INT_CMD,        INTVEC_CMD, INT_CMD, ALLOW_PLURAL | ALLOW_RING}
    3777 ,{jjCOMPARE_IV,GE,             INT_CMD,        INTVEC_CMD, INTVEC_CMD, ALLOW_PLURAL | ALLOW_RING}
    3778 ,{jjCOMPARE_P, GE,             INT_CMD,        POLY_CMD,   POLY_CMD, ALLOW_PLURAL | ALLOW_RING}
    3779 ,{jjCOMPARE_P, GE,             INT_CMD,        VECTOR_CMD, VECTOR_CMD, ALLOW_PLURAL | ALLOW_RING}
    3780 ,{jjGT_I,      '>',            INT_CMD,        INT_CMD,    INT_CMD, ALLOW_PLURAL | ALLOW_RING}
    3781 ,{jjGT_BI,     '>',            INT_CMD,        BIGINT_CMD, BIGINT_CMD, ALLOW_PLURAL | ALLOW_RING}
    3782 ,{jjGT_N,      '>',            INT_CMD,        NUMBER_CMD, NUMBER_CMD, ALLOW_PLURAL | ALLOW_RING}
    3783 ,{jjCOMPARE_S, '>',            INT_CMD,        STRING_CMD, STRING_CMD, ALLOW_PLURAL | ALLOW_RING}
    3784 ,{jjCOMPARE_IV_I,'>',          INT_CMD,        INTVEC_CMD, INT_CMD, ALLOW_PLURAL | ALLOW_RING}
    3785 ,{jjCOMPARE_IV,'>',            INT_CMD,        INTVEC_CMD, INTVEC_CMD, ALLOW_PLURAL | ALLOW_RING}
    3786 ,{jjCOMPARE_P, '>',            INT_CMD,        POLY_CMD,   POLY_CMD, ALLOW_PLURAL | ALLOW_RING}
    3787 ,{jjCOMPARE_P, '>',            INT_CMD,        VECTOR_CMD, VECTOR_CMD, ALLOW_PLURAL | ALLOW_RING}
    3788 ,{jjAND_I,     '&',            INT_CMD,        INT_CMD,    INT_CMD, ALLOW_PLURAL | ALLOW_RING}
    3789 ,{jjOR_I,      '|',            INT_CMD,        INT_CMD,    INT_CMD, ALLOW_PLURAL | ALLOW_RING}
    3790 ,{jjEQUAL_I,   EQUAL_EQUAL,    INT_CMD,        INT_CMD,    INT_CMD, ALLOW_PLURAL | ALLOW_RING}
    3791 ,{jjEQUAL_BI,  EQUAL_EQUAL,    INT_CMD,        BIGINT_CMD, BIGINT_CMD, ALLOW_PLURAL | ALLOW_RING}
    3792 ,{jjEQUAL_N,   EQUAL_EQUAL,    INT_CMD,        NUMBER_CMD, NUMBER_CMD, ALLOW_PLURAL | ALLOW_RING}
    3793 ,{jjCOMPARE_S, EQUAL_EQUAL,    INT_CMD,        STRING_CMD, STRING_CMD, ALLOW_PLURAL | ALLOW_RING}
    3794 ,{jjEQUAL_P,   EQUAL_EQUAL,    INT_CMD,        POLY_CMD,   POLY_CMD, ALLOW_PLURAL | ALLOW_RING}
    3795 ,{jjEQUAL_P,   EQUAL_EQUAL,    INT_CMD,        VECTOR_CMD, VECTOR_CMD, ALLOW_PLURAL | ALLOW_RING}
    3796 ,{jjCOMPARE_IV_I,EQUAL_EQUAL,  INT_CMD,        INTVEC_CMD, INT_CMD, ALLOW_PLURAL | ALLOW_RING}
    3797 ,{jjCOMPARE_IV,EQUAL_EQUAL,    INT_CMD,        INTVEC_CMD, INTVEC_CMD, ALLOW_PLURAL | ALLOW_RING}
    3798 ,{jjCOMPARE_IV,EQUAL_EQUAL,    INT_CMD,        INTMAT_CMD, INTMAT_CMD, ALLOW_PLURAL | ALLOW_RING}
    3799 ,{jjEQUAL_Ma,  EQUAL_EQUAL,    INT_CMD,        MATRIX_CMD, MATRIX_CMD, ALLOW_PLURAL | ALLOW_RING}
    3800 ,{jjWRONG2,    EQUAL_EQUAL,    0,              IDEAL_CMD,  IDEAL_CMD, ALLOW_PLURAL | ALLOW_RING}
    3801 ,{jjWRONG2,    EQUAL_EQUAL,    0,              MODUL_CMD,  MODUL_CMD, ALLOW_PLURAL | ALLOW_RING}
    3802 ,{jjWRONG2,    EQUAL_EQUAL,    0,              IDEAL_CMD,  MODUL_CMD, ALLOW_PLURAL | ALLOW_RING}
    3803 ,{jjWRONG2,    EQUAL_EQUAL,    0,              MODUL_CMD,  IDEAL_CMD, ALLOW_PLURAL | ALLOW_RING}
    3804 ,{jjEQUAL_I,   NOTEQUAL,       INT_CMD,        INT_CMD,    INT_CMD, ALLOW_PLURAL | ALLOW_RING}
    3805 ,{jjEQUAL_BI,  NOTEQUAL,       INT_CMD,        BIGINT_CMD, BIGINT_CMD, ALLOW_PLURAL | ALLOW_RING}
    3806 ,{jjEQUAL_N,   NOTEQUAL,       INT_CMD,        NUMBER_CMD, NUMBER_CMD, ALLOW_PLURAL | ALLOW_RING}
    3807 ,{jjCOMPARE_S, NOTEQUAL,       INT_CMD,        STRING_CMD, STRING_CMD, ALLOW_PLURAL | ALLOW_RING}
    3808 ,{jjEQUAL_P,   NOTEQUAL,       INT_CMD,        POLY_CMD,   POLY_CMD, ALLOW_PLURAL | ALLOW_RING}
    3809 ,{jjEQUAL_P,   NOTEQUAL,       INT_CMD,        VECTOR_CMD, VECTOR_CMD, ALLOW_PLURAL | ALLOW_RING}
    3810 ,{jjCOMPARE_IV,NOTEQUAL,       INT_CMD,        INTVEC_CMD, INTVEC_CMD, ALLOW_PLURAL | ALLOW_RING}
    3811 ,{jjCOMPARE_IV,NOTEQUAL,       INT_CMD,        INTMAT_CMD, INTMAT_CMD, ALLOW_PLURAL | ALLOW_RING}
    3812 ,{jjEQUAL_Ma,  NOTEQUAL,       INT_CMD,        MATRIX_CMD, MATRIX_CMD, ALLOW_PLURAL | ALLOW_RING}
    3813 ,{jjWRONG2,    NOTEQUAL,       0,              IDEAL_CMD,  IDEAL_CMD, ALLOW_PLURAL | ALLOW_RING}
    3814 ,{jjWRONG2,    NOTEQUAL,       0,              MODUL_CMD,  MODUL_CMD, ALLOW_PLURAL | ALLOW_RING}
    3815 ,{jjWRONG2,    NOTEQUAL,       0,              IDEAL_CMD,  MODUL_CMD, ALLOW_PLURAL | ALLOW_RING}
    3816 ,{jjWRONG2,    NOTEQUAL,       0,              MODUL_CMD,  IDEAL_CMD, ALLOW_PLURAL | ALLOW_RING}
    3817 ,{jjDOTDOT,    DOTDOT,         INTVEC_CMD,     INT_CMD,    INT_CMD, ALLOW_PLURAL | ALLOW_RING}
    3818 ,{jjINDEX_I,   '[',            INT_CMD,        INTVEC_CMD, INT_CMD, ALLOW_PLURAL | ALLOW_RING}
    3819 ,{jjINDEX_IV,  '[',            INT_CMD,        INTVEC_CMD, INTVEC_CMD, ALLOW_PLURAL | ALLOW_RING}
    3820 ,{jjINDEX_I,   '[',            POLY_CMD,       IDEAL_CMD,  INT_CMD, ALLOW_PLURAL | ALLOW_RING}
    3821 ,{jjINDEX_I,   '[',            POLY_CMD,       MAP_CMD,    INT_CMD, ALLOW_PLURAL | ALLOW_RING}
    3822 ,{jjINDEX_IV,  '[',            POLY_CMD,       IDEAL_CMD,  INTVEC_CMD, ALLOW_PLURAL | ALLOW_RING}
    3823 ,{jjINDEX_I,   '[',            VECTOR_CMD,     MODUL_CMD,  INT_CMD, ALLOW_PLURAL | ALLOW_RING}
    3824 ,{jjINDEX_IV,  '[',            VECTOR_CMD,     MODUL_CMD,  INTVEC_CMD, ALLOW_PLURAL | ALLOW_RING}
    3825 ,{jjINDEX_I,   '[',            STRING_CMD,     STRING_CMD, INT_CMD, ALLOW_PLURAL | ALLOW_RING}
    3826 ,{jjINDEX_IV,  '[',            STRING_CMD,     STRING_CMD, INTVEC_CMD, ALLOW_PLURAL | ALLOW_RING}
    3827 ,{jjINDEX_I,   '[',            ANY_TYPE/*set by p*/,LIST_CMD, INT_CMD, ALLOW_PLURAL | ALLOW_RING}
    3828 ,{jjINDEX_IV,  '[',            ANY_TYPE/*set by p*/,LIST_CMD, INTVEC_CMD, ALLOW_PLURAL | ALLOW_RING}
    3829 ,{jjINDEX_P,   '[',            POLY_CMD,       POLY_CMD,   INT_CMD, ALLOW_PLURAL | ALLOW_RING}
    3830 ,{jjINDEX_P_IV,'[',            POLY_CMD,       POLY_CMD,   INTVEC_CMD, ALLOW_PLURAL | ALLOW_RING}
    3831 ,{jjINDEX_V,   '[',            POLY_CMD,       VECTOR_CMD, INT_CMD, ALLOW_PLURAL | ALLOW_RING}
    3832 ,{jjINDEX_V_IV,'[',            VECTOR_CMD,     VECTOR_CMD, INTVEC_CMD, ALLOW_PLURAL | ALLOW_RING}
    3833 ,{jjPROC,      '(',            ANY_TYPE/*set by p*/,PROC_CMD, DEF_CMD, ALLOW_PLURAL | ALLOW_RING}
    3834 ,{jjMAP,       '(',            ANY_TYPE/*set by p*/,MAP_CMD, DEF_CMD, ALLOW_PLURAL | ALLOW_RING}
    3835 ,{jjKLAMMER,   '(',            ANY_TYPE/*set by p*/,ANY_TYPE, INT_CMD, ALLOW_PLURAL | ALLOW_RING}
    3836 ,{jjKLAMMER_IV,'(',            ANY_TYPE/*set by p*/,ANY_TYPE, INTVEC_CMD, ALLOW_PLURAL | ALLOW_RING}
    3837 ,{jjCOLON,     ':',            INTVEC_CMD,     INT_CMD,    INT_CMD, ALLOW_PLURAL | ALLOW_RING}
    3838 // and the procedures with 2 arguments:
    3839 ,{atATTRIB2,   ATTRIB_CMD,     NONE/*set by p*/,DEF_CMD,   STRING_CMD, ALLOW_PLURAL | ALLOW_RING}
    3840 ,{jjWRONG2,    BAREISS_CMD,    0,              DEF_CMD,    DEF_CMD, ALLOW_PLURAL | ALLOW_RING}
    3841 ,{jjBETTI2,    BETTI_CMD,      INTMAT_CMD,     LIST_CMD,   INT_CMD, ALLOW_PLURAL | ALLOW_RING}
    3842 ,{syBetti2,    BETTI_CMD,      INTMAT_CMD,     RESOLUTION_CMD, INT_CMD, ALLOW_PLURAL | ALLOW_RING}
    3843 ,{jjBETTI2_ID, BETTI_CMD,      INTMAT_CMD,     IDEAL_CMD,  INT_CMD, ALLOW_PLURAL | ALLOW_RING}
    3844 ,{jjBETTI2_ID, BETTI_CMD,      INTMAT_CMD,     MODUL_CMD,  INT_CMD, ALLOW_PLURAL | ALLOW_RING}
    3845 #ifdef HAVE_PLURAL
    3846 ,{jjBRACKET,   BRACKET_CMD,    POLY_CMD,       POLY_CMD,   POLY_CMD, ALLOW_PLURAL | NO_RING}
    3847 #endif
    3848 #ifdef HAVE_FACTORY
    3849 ,{jjCHINREM_BI,CHINREM_CMD,    BIGINT_CMD,     INTVEC_CMD, INTVEC_CMD, ALLOW_PLURAL |ALLOW_RING}
    3850 //,{jjCHINREM_P, CHINREM_CMD,    POLY_CMD,       LIST_CMD,   INTVEC_CMD, ALLOW_PLURAL}
    3851 ,{jjCHINREM_ID,CHINREM_CMD,    ANY_TYPE/*set by p*/,LIST_CMD,INTVEC_CMD, ALLOW_PLURAL |NO_RING}
    3852 ,{jjCHINREM_ID,CHINREM_CMD,    ANY_TYPE/*set by p*/,LIST_CMD,LIST_CMD, ALLOW_PLURAL |NO_RING}
    3853 #else
    3854 ,{jjWRONG2,    CHINREM_CMD,    BIGINT_CMD,     INTVEC_CMD, INTVEC_CMD, ALLOW_PLURAL |ALLOW_RING}
    3855 #endif
    3856 ,{jjCOEF,      COEF_CMD,       MATRIX_CMD,     POLY_CMD,   POLY_CMD, ALLOW_PLURAL |ALLOW_RING}
    3857 ,{jjCOEFFS_Id, COEFFS_CMD,     MATRIX_CMD,     IDEAL_CMD,  POLY_CMD, ALLOW_PLURAL |ALLOW_RING}
    3858 ,{jjCOEFFS_Id, COEFFS_CMD,     MATRIX_CMD,     MODUL_CMD,  POLY_CMD, ALLOW_PLURAL |ALLOW_RING}
    3859 ,{jjCOEFFS2_KB,COEFFS_CMD,     MATRIX_CMD,     IDEAL_CMD,  IDEAL_CMD, ALLOW_PLURAL |ALLOW_RING}
    3860 ,{jjCOEFFS2_KB,COEFFS_CMD,     MATRIX_CMD,     MODUL_CMD,  MODUL_CMD, ALLOW_PLURAL |ALLOW_RING}
    3861 ,{jjCONTRACT,  CONTRACT_CMD,   MATRIX_CMD,     IDEAL_CMD,  IDEAL_CMD, ALLOW_PLURAL |ALLOW_RING}
    3862 ,{jjDEG_IV,    DEG_CMD,        INT_CMD,        POLY_CMD,   INTVEC_CMD, ALLOW_PLURAL |ALLOW_RING}
    3863 ,{jjDEG_IV,    DEG_CMD,        INT_CMD,        VECTOR_CMD, INTVEC_CMD, ALLOW_PLURAL |ALLOW_RING}
    3864 ,{jjDEG_M_IV,  DEG_CMD,        INT_CMD,        MATRIX_CMD, INTVEC_CMD, ALLOW_PLURAL |ALLOW_RING}
    3865 ,{lDelete,     DELETE_CMD,     LIST_CMD,       LIST_CMD,   INT_CMD, ALLOW_PLURAL |ALLOW_RING}
    3866 ,{jjDIFF_P,    DIFF_CMD,       POLY_CMD,       POLY_CMD,   POLY_CMD, ALLOW_PLURAL |ALLOW_RING}
    3867 ,{jjDIFF_P,    DIFF_CMD,       VECTOR_CMD,     VECTOR_CMD, POLY_CMD, ALLOW_PLURAL |ALLOW_RING}
    3868 ,{jjDIFF_ID,   DIFF_CMD,       IDEAL_CMD,      IDEAL_CMD,  POLY_CMD, ALLOW_PLURAL |ALLOW_RING}
    3869 ,{jjDIFF_ID_ID,DIFF_CMD,       MATRIX_CMD,     IDEAL_CMD,  IDEAL_CMD, ALLOW_PLURAL |ALLOW_RING}
    3870 ,{jjDIFF_ID,   DIFF_CMD,       MODUL_CMD,      MODUL_CMD,  POLY_CMD, ALLOW_PLURAL |ALLOW_RING}
    3871 ,{jjDIFF_ID,   DIFF_CMD,       MATRIX_CMD,     MATRIX_CMD, POLY_CMD, ALLOW_PLURAL |ALLOW_RING}
    3872 ,{jjDIM2,      DIM_CMD,        INT_CMD,        IDEAL_CMD,  IDEAL_CMD, ALLOW_PLURAL |NO_RING}
    3873 ,{jjDIM2,      DIM_CMD,        INT_CMD,        MODUL_CMD,  IDEAL_CMD, ALLOW_PLURAL |NO_RING}
    3874 ,{jjDIVISION,  DIVISION_CMD,   LIST_CMD,       IDEAL_CMD,  IDEAL_CMD, ALLOW_PLURAL |ALLOW_RING}
    3875 ,{jjDIVISION,  DIVISION_CMD,   LIST_CMD,       MODUL_CMD,  MODUL_CMD, ALLOW_PLURAL |ALLOW_RING}
    3876 ,{jjELIMIN,    ELIMINATION_CMD,IDEAL_CMD,      IDEAL_CMD,  POLY_CMD, ALLOW_PLURAL |ALLOW_RING}
    3877 ,{jjELIMIN,    ELIMINATION_CMD,MODUL_CMD,      MODUL_CMD,  POLY_CMD, ALLOW_PLURAL |ALLOW_RING}
    3878 ,{jjELIMIN_IV, ELIMINATION_CMD,IDEAL_CMD,      IDEAL_CMD,  INTVEC_CMD, ALLOW_PLURAL |ALLOW_RING}
    3879 ,{jjELIMIN_IV, ELIMINATION_CMD,MODUL_CMD,      MODUL_CMD,  INTVEC_CMD, ALLOW_PLURAL |ALLOW_RING}
    3880 ,{jjEXPORTTO,  EXPORTTO_CMD,   NONE,           PACKAGE_CMD, IDHDL, ALLOW_PLURAL |ALLOW_RING}
    3881 ,{jjEXTGCD_I,  EXTGCD_CMD,     LIST_CMD,       INT_CMD,    INT_CMD, ALLOW_PLURAL |ALLOW_RING}
    3882 #ifdef HAVE_FACTORY
    3883 ,{jjEXTGCD_P,  EXTGCD_CMD,     LIST_CMD,       POLY_CMD,   POLY_CMD, NO_PLURAL |NO_RING}
    3884 ,{jjFAC_P2,     FAC_CMD,        IDEAL_CMD,      POLY_CMD,   INT_CMD, NO_PLURAL |NO_RING}
    3885 ,{jjFACSTD2,   FACSTD_CMD,     LIST_CMD,       IDEAL_CMD,  IDEAL_CMD, NO_PLURAL |NO_RING}
    3886 #else
    3887 ,{jjWRONG2,    EXTGCD_CMD,     LIST_CMD,       POLY_CMD,   POLY_CMD, NO_PLURAL |NO_RING}
    3888 ,{jjWRONG2,    FAC_CMD,        IDEAL_CMD,      POLY_CMD,   INT_CMD, NO_PLURAL |NO_RING}
    3889 ,{jjWRONG2,    FACSTD_CMD,     LIST_CMD,       IDEAL_CMD,  IDEAL_CMD, NO_PLURAL |NO_RING}
    3890 #endif
    3891 ,{jjFAREY_BI,  FAREY_CMD,      NUMBER_CMD,     BIGINT_CMD,  BIGINT_CMD, ALLOW_PLURAL |NO_RING}
    3892 ,{jjFAREY_ID,   FAREY_CMD,     ANY_TYPE/*set by p*/,IDEAL_CMD,BIGINT_CMD, ALLOW_PLURAL |NO_RING}
    3893 ,{jjFAREY_ID,   FAREY_CMD,     ANY_TYPE/*set by p*/,MODUL_CMD,BIGINT_CMD, ALLOW_PLURAL |NO_RING}
    3894 ,{jjFAREY_ID,   FAREY_CMD,     ANY_TYPE/*set by p*/,MATRIX_CMD,BIGINT_CMD, ALLOW_PLURAL |NO_RING}
    3895 ,{jjFETCH,     FETCH_CMD,      ANY_TYPE/*set by p*/,RING_CMD,  ANY_TYPE, ALLOW_PLURAL |ALLOW_RING}
    3896 ,{jjFETCH,     FETCH_CMD,      ANY_TYPE/*set by p*/,QRING_CMD, ANY_TYPE, ALLOW_PLURAL |ALLOW_RING}
    3897 #ifdef HAVE_FACTORY
    3898 ,{fglmProc,    FGLM_CMD,       IDEAL_CMD,      RING_CMD,   DEF_CMD, NO_PLURAL |NO_RING}
    3899 ,{fglmProc,    FGLM_CMD,       IDEAL_CMD,      QRING_CMD,  DEF_CMD, NO_PLURAL |NO_RING}
    3900 ,{fglmQuotProc,FGLMQUOT_CMD,   IDEAL_CMD,      IDEAL_CMD,  POLY_CMD, NO_PLURAL |NO_RING}
    3901 #else
    3902 ,{jjWRONG2,    FGLM_CMD,       IDEAL_CMD,      RING_CMD,   DEF_CMD, NO_PLURAL |NO_RING}
    3903 ,{jjWRONG2,    FGLM_CMD,       IDEAL_CMD,      QRING_CMD,  DEF_CMD, NO_PLURAL |NO_RING}
    3904 ,{jjWRONG2,    FGLMQUOT_CMD,   IDEAL_CMD,      POLY_CMD,   IDEAL_CMD, NO_PLURAL |NO_RING}
    3905 #endif
    3906 ,{jjFIND2,     FIND_CMD,       INT_CMD,        STRING_CMD, STRING_CMD, ALLOW_PLURAL |ALLOW_RING}
    3907 ,{jjFWALK,     FWALK_CMD,      IDEAL_CMD,      RING_CMD,   DEF_CMD, NO_PLURAL |NO_RING}
    3908 ,{jjGCD_I,     GCD_CMD,        INT_CMD,        INT_CMD,    INT_CMD, ALLOW_PLURAL |ALLOW_RING}
    3909 ,{jjGCD_N,     GCD_CMD,        NUMBER_CMD,     NUMBER_CMD, NUMBER_CMD, ALLOW_PLURAL |ALLOW_RING}
    3910 ,{jjGCD_BI,    GCD_CMD,        BIGINT_CMD,     BIGINT_CMD, BIGINT_CMD, ALLOW_PLURAL |ALLOW_RING}
    3911 #if defined(HAVE_FACTORY)
    3912 ,{jjGCD_P,     GCD_CMD,        POLY_CMD,       POLY_CMD,   POLY_CMD, NO_PLURAL |NO_RING}
    3913 #else
    3914 ,{jjWRONG2,    GCD_CMD,        POLY_CMD,       POLY_CMD,   POLY_CMD, NO_PLURAL |NO_RING}
    3915 #endif
    3916 ,{jjHILBERT2,  HILBERT_CMD,    INTVEC_CMD,     IDEAL_CMD,  INT_CMD, NO_PLURAL |ALLOW_RING}
    3917 ,{jjHILBERT2,  HILBERT_CMD,    INTVEC_CMD,     MODUL_CMD,  INT_CMD, NO_PLURAL |ALLOW_RING}
    3918 ,{jjHOMOG1_W,  HOMOG_CMD,      INT_CMD,        IDEAL_CMD,  INTVEC_CMD, ALLOW_PLURAL |ALLOW_RING}
    3919 ,{jjHOMOG1_W,  HOMOG_CMD,      INT_CMD,        MODUL_CMD,   INTVEC_CMD, ALLOW_PLURAL |ALLOW_RING}
    3920 ,{jjHOMOG_P,   HOMOG_CMD,      POLY_CMD,       POLY_CMD,   POLY_CMD, ALLOW_PLURAL |ALLOW_RING}
    3921 ,{jjHOMOG_P,   HOMOG_CMD,      VECTOR_CMD,     VECTOR_CMD, POLY_CMD, ALLOW_PLURAL |ALLOW_RING}
    3922 ,{jjHOMOG_ID,  HOMOG_CMD,      IDEAL_CMD,      IDEAL_CMD,  POLY_CMD, ALLOW_PLURAL |ALLOW_RING}
    3923 ,{jjHOMOG_ID,  HOMOG_CMD,      MODUL_CMD,      MODUL_CMD,  POLY_CMD, ALLOW_PLURAL |ALLOW_RING}
    3924 ,{jjRES,       HRES_CMD,       RESOLUTION_CMD, IDEAL_CMD,  INT_CMD, NO_PLURAL |NO_RING}
    3925 ,{jjCALL2MANY, IDEAL_CMD,      IDEAL_CMD,      DEF_CMD,    DEF_CMD, ALLOW_PLURAL |ALLOW_RING}
    3926 ,{jjFETCH,     IMAP_CMD,       ANY_TYPE/*set by p*/,RING_CMD,  ANY_TYPE, ALLOW_PLURAL |ALLOW_RING}
    3927 ,{jjFETCH,     IMAP_CMD,       ANY_TYPE/*set by p*/,QRING_CMD, ANY_TYPE, ALLOW_PLURAL |ALLOW_RING}
    3928 ,{jjIMPORTFROM,IMPORTFROM_CMD, NONE,           PACKAGE_CMD, ANY_TYPE, ALLOW_PLURAL |ALLOW_RING}
    3929 ,{jjINDEPSET2, INDEPSET_CMD,   LIST_CMD,       IDEAL_CMD,  INT_CMD, NO_PLURAL |NO_RING}
    3930 ,{lInsert,     INSERT_CMD,     LIST_CMD,       LIST_CMD,   DEF_CMD, ALLOW_PLURAL |ALLOW_RING}
    3931 #ifdef HAVE_INTERPOLATION
    3932 ,{jjINTERPOLATION,INTERPOLATE_CMD,IDEAL_CMD,   LIST_CMD,   INTVEC_CMD, NO_PLURAL |NO_RING}
    3933 #endif
    3934 ,{jjINTERSECT, INTERSECT_CMD,  IDEAL_CMD,      IDEAL_CMD,  IDEAL_CMD, ALLOW_PLURAL |ALLOW_RING}
    3935 ,{jjINTERSECT, INTERSECT_CMD,  MODUL_CMD,      MODUL_CMD,  MODUL_CMD, ALLOW_PLURAL |ALLOW_RING}
    3936 ,{jjJanetBasis2, JANET_CMD,    IDEAL_CMD,      IDEAL_CMD,  INT_CMD, ALLOW_PLURAL |NO_RING}
    3937 ,{jjJET_P,     JET_CMD,        POLY_CMD,       POLY_CMD,   INT_CMD, ALLOW_PLURAL |ALLOW_RING}
    3938 ,{jjJET_ID,    JET_CMD,        IDEAL_CMD,      IDEAL_CMD,  INT_CMD, ALLOW_PLURAL |ALLOW_RING}
    3939 ,{jjJET_P,     JET_CMD,        VECTOR_CMD,     VECTOR_CMD, INT_CMD, ALLOW_PLURAL |ALLOW_RING}
    3940 ,{jjJET_ID,    JET_CMD,        MODUL_CMD,      MODUL_CMD,  INT_CMD, ALLOW_PLURAL |ALLOW_RING}
    3941 ,{jjJET_ID,    JET_CMD,        MATRIX_CMD,     MATRIX_CMD,  INT_CMD, ALLOW_PLURAL |ALLOW_RING}
    3942 ,{jjKBASE2,    KBASE_CMD,      IDEAL_CMD,      IDEAL_CMD,  INT_CMD, ALLOW_PLURAL |ALLOW_RING}
    3943 ,{jjKBASE2,    KBASE_CMD,      MODUL_CMD,      MODUL_CMD,  INT_CMD, ALLOW_PLURAL |ALLOW_RING}
    3944 ,{jjKERNEL,    KERNEL_CMD,     IDEAL_CMD, RING_CMD,        ANY_TYPE, ALLOW_PLURAL |ALLOW_RING}
    3945 ,{jjKERNEL,    KERNEL_CMD,     IDEAL_CMD, QRING_CMD,       ANY_TYPE, ALLOW_PLURAL |ALLOW_RING}
    3946 ,{atKILLATTR2, KILLATTR_CMD,   NONE,           IDHDL,      STRING_CMD, ALLOW_PLURAL |ALLOW_RING}
    3947 ,{jjKoszul,    KOSZUL_CMD,     MATRIX_CMD,     INT_CMD,    INT_CMD, NO_PLURAL |ALLOW_RING}
    3948 ,{jjKoszul_Id, KOSZUL_CMD,     MATRIX_CMD,     INT_CMD,    IDEAL_CMD, NO_PLURAL |ALLOW_RING}
    3949 ,{jjRES,       KRES_CMD,       RESOLUTION_CMD, IDEAL_CMD,  INT_CMD, NO_PLURAL |NO_RING}
    3950 ,{jjLIFT,      LIFT_CMD,       MATRIX_CMD,     IDEAL_CMD,  IDEAL_CMD, ALLOW_PLURAL |ALLOW_RING}
    3951 ,{jjLIFT,      LIFT_CMD,       MATRIX_CMD,     MODUL_CMD,  MODUL_CMD, ALLOW_PLURAL |ALLOW_RING}
    3952 ,{jjLIFTSTD,   LIFTSTD_CMD,    IDEAL_CMD,      IDEAL_CMD,  MATRIX_CMD, ALLOW_PLURAL |ALLOW_RING}
    3953 ,{jjLIFTSTD,   LIFTSTD_CMD,    MODUL_CMD,      MODUL_CMD,  MATRIX_CMD, ALLOW_PLURAL |ALLOW_RING}
    3954 ,{jjCALL2MANY, LIST_CMD,       LIST_CMD,       DEF_CMD,    DEF_CMD, ALLOW_PLURAL |ALLOW_RING}
    3955 ,{jjLOAD_E,    LOAD_CMD,       NONE,           STRING_CMD, STRING_CMD, ALLOW_PLURAL |ALLOW_RING}
    3956 ,{jjRES,       LRES_CMD,       RESOLUTION_CMD, IDEAL_CMD,  INT_CMD, NO_PLURAL |NO_RING}
    3957 ,{jjCALL2MANY, MODUL_CMD,      MODUL_CMD,      DEF_CMD,    DEF_CMD, ALLOW_PLURAL |ALLOW_RING}
    3958 ,{jjMODULO,    MODULO_CMD,     MODUL_CMD,      IDEAL_CMD,  IDEAL_CMD, ALLOW_PLURAL |ALLOW_RING}
    3959 ,{jjMODULO,    MODULO_CMD,     MODUL_CMD,      MODUL_CMD,  MODUL_CMD, ALLOW_PLURAL |ALLOW_RING}
    3960 ,{jjMONITOR2,  MONITOR_CMD,    NONE,           LINK_CMD, STRING_CMD, ALLOW_PLURAL |ALLOW_RING}
    3961 //,{jjRES,       MRES_CMD,       LIST_CMD,       IDEAL_CMD,  INT_CMD, NO_PLURAL |ALLOW_RING}
    3962 //,{jjRES,       MRES_CMD,       LIST_CMD,       MODUL_CMD,  INT_CMD, NO_PLURAL |ALLOW_RING}
    3963 ,{nuMPResMat,  MPRES_CMD,      MODUL_CMD,      IDEAL_CMD,  INT_CMD, NO_PLURAL |NO_RING}
    3964 ,{jjRES,       MRES_CMD,       RESOLUTION_CMD, IDEAL_CMD,  INT_CMD, ALLOW_PLURAL |ALLOW_RING}
    3965 ,{jjRES,       MRES_CMD,       RESOLUTION_CMD, MODUL_CMD,  INT_CMD, ALLOW_PLURAL |ALLOW_RING}
    3966 //,{nuMPResMat,  MPRES_CMD,      MODUL_CMD,      IDEAL_CMD,  INT_CMD, NO_PLURAL |ALLOW_RING}
    3967 ,{jjPFAC2,     PFAC_CMD,       LIST_CMD,       BIGINT_CMD, BIGINT_CMD, ALLOW_PLURAL |ALLOW_RING}
    3968 ,{jjPFAC2,     PFAC_CMD,       LIST_CMD,       NUMBER_CMD, BIGINT_CMD, ALLOW_PLURAL |ALLOW_RING}
    3969 ,{jjPFAC2,     PFAC_CMD,       LIST_CMD,       BIGINT_CMD, NUMBER_CMD, ALLOW_PLURAL |ALLOW_RING}
    3970 ,{jjPFAC2,     PFAC_CMD,       LIST_CMD,       NUMBER_CMD, NUMBER_CMD, ALLOW_PLURAL |ALLOW_RING}
    3971 #ifdef HAVE_PLURAL
    3972 ,{jjPlural_num_poly, NCALGEBRA_CMD,NONE,       POLY_CMD,   POLY_CMD  , NO_PLURAL |NO_RING}
    3973 ,{jjPlural_num_mat,  NCALGEBRA_CMD,NONE,       POLY_CMD,   MATRIX_CMD, NO_PLURAL |NO_RING}
    3974 ,{jjPlural_mat_poly, NCALGEBRA_CMD,NONE,       MATRIX_CMD, POLY_CMD  , NO_PLURAL |NO_RING}
    3975 ,{jjPlural_mat_mat,  NCALGEBRA_CMD,NONE,       MATRIX_CMD, MATRIX_CMD, NO_PLURAL |NO_RING}
    3976 ,{jjPlural_num_poly, NC_ALGEBRA_CMD,RING_CMD,  POLY_CMD,   POLY_CMD  , NO_PLURAL |NO_RING}
    3977 ,{jjPlural_num_mat,  NC_ALGEBRA_CMD,RING_CMD,  POLY_CMD,   MATRIX_CMD, NO_PLURAL |NO_RING}
    3978 ,{jjPlural_mat_poly, NC_ALGEBRA_CMD,RING_CMD,  MATRIX_CMD, POLY_CMD  , NO_PLURAL |NO_RING}
    3979 ,{jjPlural_mat_mat,  NC_ALGEBRA_CMD,RING_CMD,  MATRIX_CMD, MATRIX_CMD, NO_PLURAL |NO_RING}
    3980 #endif
    3981 #ifdef HAVE_PLURAL
    3982 ,{jjOPPOSE,    OPPOSE_CMD,     ANY_TYPE/*set by p*/, RING_CMD,   DEF_CMD, ALLOW_PLURAL |NO_RING}
    3983 ,{jjOPPOSE,    OPPOSE_CMD,     ANY_TYPE/*set by p*/, QRING_CMD,   DEF_CMD, ALLOW_PLURAL |NO_RING}
    3984 #endif
    3985 ,{jjPARSTR2,   PARSTR_CMD,     STRING_CMD,     RING_CMD,   INT_CMD, ALLOW_PLURAL |ALLOW_RING}
    3986 ,{jjPARSTR2,   PARSTR_CMD,     STRING_CMD,     QRING_CMD,  INT_CMD, ALLOW_PLURAL |ALLOW_RING}
    3987 ,{jjPRINT_FORMAT, PRINT_CMD,   ANY_TYPE,       DEF_CMD,    STRING_CMD, ALLOW_PLURAL |ALLOW_RING}
    3988 ,{jjQUOT,      QUOTIENT_CMD,   IDEAL_CMD,      IDEAL_CMD,  IDEAL_CMD, ALLOW_PLURAL |ALLOW_RING}
    3989 ,{jjQUOT,      QUOTIENT_CMD,   MODUL_CMD,      MODUL_CMD,  IDEAL_CMD, ALLOW_PLURAL |ALLOW_RING}
    3990 ,{jjQUOT,      QUOTIENT_CMD,   IDEAL_CMD,      MODUL_CMD,  MODUL_CMD, ALLOW_PLURAL |ALLOW_RING}
    3991 ,{jjRANDOM,    RANDOM_CMD,     INT_CMD,        INT_CMD,    INT_CMD, ALLOW_PLURAL |ALLOW_RING}
    3992 ,{jjRANK2,     RANK_CMD,       INT_CMD,        MATRIX_CMD, INT_CMD, ALLOW_PLURAL |ALLOW_RING}
    3993 ,{jjREAD2,     READ_CMD,       STRING_CMD,     LINK_CMD,   STRING_CMD, ALLOW_PLURAL |ALLOW_RING}
    3994 ,{jjREDUCE_P,  REDUCE_CMD,     POLY_CMD,       POLY_CMD,   IDEAL_CMD, ALLOW_PLURAL |ALLOW_RING}
    3995 ,{jjREDUCE_P,  REDUCE_CMD,     VECTOR_CMD,     VECTOR_CMD, IDEAL_CMD, ALLOW_PLURAL |ALLOW_RING}
    3996 ,{jjREDUCE_P,  REDUCE_CMD,     VECTOR_CMD,     VECTOR_CMD, MODUL_CMD, ALLOW_PLURAL |ALLOW_RING}
    3997 ,{jjREDUCE_ID, REDUCE_CMD,     IDEAL_CMD,      IDEAL_CMD,  IDEAL_CMD, ALLOW_PLURAL |ALLOW_RING}
    3998 ,{jjREDUCE_ID, REDUCE_CMD,     MODUL_CMD,      MODUL_CMD,  MODUL_CMD, ALLOW_PLURAL |ALLOW_RING}
    3999 ,{jjREDUCE_ID, REDUCE_CMD,     MODUL_CMD,      MODUL_CMD,  IDEAL_CMD, ALLOW_PLURAL |ALLOW_RING}
    4000 //,{jjRES,       RES_CMD,        LIST_CMD,       IDEAL_CMD,  INT_CMD, NO_PLURAL |ALLOW_RING}
    4001 //,{jjRES,       RES_CMD,        LIST_CMD,       MODUL_CMD,  INT_CMD, NO_PLURAL |ALLOW_RING}
    4002 ,{jjRES,       RES_CMD,        RESOLUTION_CMD, IDEAL_CMD,  INT_CMD, ALLOW_PLURAL |ALLOW_RING}
    4003 ,{jjRES,       RES_CMD,        RESOLUTION_CMD, MODUL_CMD,  INT_CMD, ALLOW_PLURAL |ALLOW_RING}
    4004 ,{jjSTATUS2,   STATUS_CMD,     STRING_CMD,     LINK_CMD,   STRING_CMD, ALLOW_PLURAL |ALLOW_RING}
    4005 ,{jjSTATUS2L,  STATUS_CMD,     INT_CMD,        LIST_CMD,   INT_CMD, ALLOW_PLURAL |ALLOW_RING}
    4006 ,{jjSIMPL_P,   SIMPLIFY_CMD,   POLY_CMD,       POLY_CMD,   INT_CMD, ALLOW_PLURAL |ALLOW_RING}
    4007 ,{jjSIMPL_P,   SIMPLIFY_CMD,   VECTOR_CMD,     VECTOR_CMD, INT_CMD, ALLOW_PLURAL |ALLOW_RING}
    4008 ,{jjSIMPL_ID,  SIMPLIFY_CMD,   IDEAL_CMD,      IDEAL_CMD,  INT_CMD, ALLOW_PLURAL |ALLOW_RING}
    4009 ,{jjSIMPL_ID,  SIMPLIFY_CMD,   MODUL_CMD,      MODUL_CMD,  INT_CMD, ALLOW_PLURAL |ALLOW_RING}
    4010 //,{jjRES,       SRES_CMD,       LIST_CMD,       IDEAL_CMD,  INT_CMD, NO_PLURAL |ALLOW_RING}
    4011 //,{jjRES,       SRES_CMD,       LIST_CMD,       MODUL_CMD,  INT_CMD, NO_PLURAL |ALLOW_RING}
    4012 ,{jjRES,       SRES_CMD,       RESOLUTION_CMD, IDEAL_CMD,  INT_CMD, NO_PLURAL |ALLOW_RING}
    4013 ,{jjRES,       SRES_CMD,       RESOLUTION_CMD, MODUL_CMD,  INT_CMD, NO_PLURAL |ALLOW_RING}
    4014 ,{jjCALL2MANY, SYSTEM_CMD,     ANY_TYPE/*set by p*/,STRING_CMD, DEF_CMD, ALLOW_PLURAL |ALLOW_RING}
    4015 ,{jjSTD_1,     STD_CMD,        IDEAL_CMD,      IDEAL_CMD,  POLY_CMD, ALLOW_PLURAL |ALLOW_RING}
    4016 ,{jjSTD_1,     STD_CMD,        MODUL_CMD,      MODUL_CMD,  VECTOR_CMD, ALLOW_PLURAL |ALLOW_RING}
    4017 ,{jjSTD_1,     STD_CMD,        IDEAL_CMD,      IDEAL_CMD,  IDEAL_CMD, ALLOW_PLURAL |ALLOW_RING}
    4018 ,{jjSTD_1,     STD_CMD,        MODUL_CMD,      MODUL_CMD,  MODUL_CMD, ALLOW_PLURAL |ALLOW_RING}
    4019 ,{jjSTD_HILB,  STD_CMD,        IDEAL_CMD,      IDEAL_CMD,  INTVEC_CMD, NO_PLURAL |ALLOW_RING}
    4020 ,{jjSTD_HILB,  STD_CMD,        MODUL_CMD,      MODUL_CMD,  INTVEC_CMD, NO_PLURAL |ALLOW_RING}
    4021 ,{jjVARSTR2,   VARSTR_CMD,     STRING_CMD,     RING_CMD,   INT_CMD, ALLOW_PLURAL |ALLOW_RING}
    4022 ,{jjVARSTR2,   VARSTR_CMD,     STRING_CMD,     QRING_CMD,  INT_CMD, ALLOW_PLURAL |ALLOW_RING}
    4023 ,{jjWEDGE,     WEDGE_CMD,      MATRIX_CMD,     MATRIX_CMD, INT_CMD, NO_PLURAL |ALLOW_RING}
    4024 #ifdef HAVE_FANS
    4025 ,{jjADDMCONE1, ADDMCONE_CMD,   NONE,           FAN_CMD,    CONE_CMD, ALLOW_PLURAL | ALLOW_RING}
    4026 ,{jjADDMCONE2, ADDMCONE_CMD,   NONE,           FAN_CMD,    LIST_CMD, ALLOW_PLURAL | ALLOW_RING}
    4027 ,{jjDELMCONE2, DELMCONE_CMD,   NONE,           FAN_CMD,    INT_CMD, ALLOW_PLURAL | ALLOW_RING}
    4028 ,{jjDELMCONE3, DELMCONE_CMD,   NONE,           FAN_CMD,    INTVEC_CMD, ALLOW_PLURAL | ALLOW_RING}
    4029 ,{jjMAXCONE2,  MAXCONE_CMD,    CONE_CMD,       FAN_CMD,    INT_CMD, ALLOW_PLURAL |ALLOW_RING}
    4030 ,{jjGETPROP1,  GETPROP_CMD,    INT_CMD,        FAN_CMD,    STRING_CMD, ALLOW_PLURAL |ALLOW_RING}
    4031 ,{jjGETPROP2,  GETPROP_CMD,    INT_CMD,        CONE_CMD,   STRING_CMD, ALLOW_PLURAL |ALLOW_RING}
    4032 #endif /* HAVE_FANS */
    4033 ,{NULL,        0,              0,              0,          0, NO_PLURAL |NO_RING}
    4034 };
    40353357/*=================== operations with 1 arg.: static proc =================*/
    40363358static BOOLEAN jjDUMMY(leftv res, leftv u)
     
    55764898  return TRUE;
    55774899}
    5578 
    5579 /*=================== operations with 1 arg.: table =================*/
    55804900
    55814901#ifdef INIT_BUG
     
    57965116  return FALSE;
    57975117}
    5798 struct sValCmd1 dArith1[]=
    5799 {
    5800 // operations:
    5801 // proc         cmd               res             arg           plural
    5802  {jjPLUSPLUS,   PLUSPLUS,        NONE,           IDHDL         , ALLOW_PLURAL |ALLOW_RING}
    5803 ,{jjPLUSPLUS,   MINUSMINUS,      NONE,           IDHDL         , ALLOW_PLURAL |ALLOW_RING}
    5804 ,{jjUMINUS_I,   '-',             INT_CMD,        INT_CMD       , ALLOW_PLURAL |ALLOW_RING}
    5805 ,{jjUMINUS_BI,   '-',            BIGINT_CMD,     BIGINT_CMD    , ALLOW_PLURAL |ALLOW_RING}
    5806 ,{jjUMINUS_N,   '-',             NUMBER_CMD,     NUMBER_CMD    , ALLOW_PLURAL |ALLOW_RING}
    5807 ,{jjUMINUS_P,   '-',             POLY_CMD,       POLY_CMD      , ALLOW_PLURAL |ALLOW_RING}
    5808 ,{jjUMINUS_P,   '-',             VECTOR_CMD,     VECTOR_CMD    , ALLOW_PLURAL |ALLOW_RING}
    5809 ,{jjUMINUS_MA,  '-',             MATRIX_CMD,     MATRIX_CMD    , ALLOW_PLURAL |ALLOW_RING}
    5810 ,{jjUMINUS_IV,  '-',             INTVEC_CMD,     INTVEC_CMD    , ALLOW_PLURAL |ALLOW_RING}
    5811 ,{jjUMINUS_IV,  '-',             INTMAT_CMD,     INTMAT_CMD    , ALLOW_PLURAL |ALLOW_RING}
    5812 ,{jjPROC1,      '(',             ANY_TYPE/*set by p*/,PROC_CMD , ALLOW_PLURAL |ALLOW_RING}
    5813 ,{jjLOAD1,      '(',             NONE,           STRING_CMD    , ALLOW_PLURAL |ALLOW_RING}
    5814 // and the procedures with 1 argument:
    5815 ,{atATTRIB1,    ATTRIB_CMD,      NONE,           DEF_CMD       , ALLOW_PLURAL |ALLOW_RING}
    5816 //,{jjBAREISS_IM, BAREISS_CMD,     INTMAT_CMD,     INTMAT_CMD  , NO_PLURAL |ALLOW_RING}
    5817 ,{jjBAREISS,    BAREISS_CMD,     LIST_CMD,       MODUL_CMD     , NO_PLURAL |ALLOW_RING}
    5818 ,{jjBETTI,      BETTI_CMD,       INTMAT_CMD,     LIST_CMD      , ALLOW_PLURAL |ALLOW_RING}
    5819 ,{syBetti1,     BETTI_CMD,       INTMAT_CMD,     RESOLUTION_CMD, ALLOW_PLURAL |ALLOW_RING}
    5820 ,{jjBETTI,      BETTI_CMD,       INTMAT_CMD,     IDEAL_CMD     , ALLOW_PLURAL |ALLOW_RING}
    5821 ,{jjBETTI,      BETTI_CMD,       INTMAT_CMD,     MODUL_CMD     , ALLOW_PLURAL |ALLOW_RING}
    5822 ,{jjDUMMY,      BIGINT_CMD,      BIGINT_CMD,     BIGINT_CMD    , ALLOW_PLURAL |ALLOW_RING}
    5823 ,{jjN2BI,       BIGINT_CMD,      BIGINT_CMD,     NUMBER_CMD    , ALLOW_PLURAL |ALLOW_RING}
    5824 ,{jjP2BI,       BIGINT_CMD,      BIGINT_CMD,     POLY_CMD      , ALLOW_PLURAL |ALLOW_RING}
    5825 ,{jjCHAR,       CHARACTERISTIC_CMD, INT_CMD,     RING_CMD      , ALLOW_PLURAL |ALLOW_RING}
    5826 ,{jjCHAR,       CHARACTERISTIC_CMD, INT_CMD,     QRING_CMD     , ALLOW_PLURAL |ALLOW_RING}
    5827 #ifdef HAVE_FACTORY
    5828 ,{jjCHARSERIES, CHAR_SERIES_CMD, MATRIX_CMD,     IDEAL_CMD     , NO_PLURAL |NO_RING}
    5829 #else
    5830 ,{jjWRONG,      CHAR_SERIES_CMD, MATRIX_CMD,     IDEAL_CMD     , NO_PLURAL |NO_RING}
    5831 #endif
    5832 ,{jjrCharStr,   CHARSTR_CMD,     XS(STRING_CMD), RING_CMD      , ALLOW_PLURAL |ALLOW_RING}
    5833 ,{jjrCharStr,   CHARSTR_CMD,     XS(STRING_CMD), QRING_CMD     , ALLOW_PLURAL |ALLOW_RING}
    5834 ,{jjOpenClose,  CLOSE_CMD,       NONE,           LINK_CMD      , ALLOW_PLURAL |ALLOW_RING}
    5835 //,{jjWRONG,      COLS_CMD,        0,              VECTOR_CMD  , ALLOW_PLURAL |ALLOW_RING}
    5836 ,{jjCOLS,       COLS_CMD,        INT_CMD,        MATRIX_CMD    , ALLOW_PLURAL |ALLOW_RING}
    5837 ,{jjCOLS,       COLS_CMD,        INT_CMD,        IDEAL_CMD     , ALLOW_PLURAL |ALLOW_RING}
    5838 ,{jjCOLS,       COLS_CMD,        INT_CMD,        MODUL_CMD     , ALLOW_PLURAL |ALLOW_RING}
    5839 ,{jjCOLS_IV,    COLS_CMD,        INT_CMD,        INTMAT_CMD    , ALLOW_PLURAL |ALLOW_RING}
    5840 ,{jjWRONG,      COLS_CMD,        0,              INTVEC_CMD    , ALLOW_PLURAL |ALLOW_RING}
    5841 ,{jjCONTENT,    CONTENT_CMD,     POLY_CMD,       POLY_CMD      , ALLOW_PLURAL |ALLOW_RING}
    5842 ,{jjCONTENT,    CONTENT_CMD,     VECTOR_CMD,     VECTOR_CMD    , ALLOW_PLURAL |ALLOW_RING}
    5843 ,{jjCOUNT_BI,   COUNT_CMD,       INT_CMD,        BIGINT_CMD    , ALLOW_PLURAL |ALLOW_RING}
    5844 ,{jjCOUNT_N,    COUNT_CMD,       INT_CMD,        NUMBER_CMD    , ALLOW_PLURAL |ALLOW_RING}
    5845 ,{jjCOUNT_RES,  COUNT_CMD,       XS(INT_CMD),    RESOLUTION_CMD, ALLOW_PLURAL |ALLOW_RING}
    5846 ,{jjstrlen,     COUNT_CMD,       XS(INT_CMD),    STRING_CMD    , ALLOW_PLURAL |ALLOW_RING}
    5847 ,{jjpLength,    COUNT_CMD,       XS(INT_CMD),    POLY_CMD      , ALLOW_PLURAL |ALLOW_RING}
    5848 ,{jjpLength,    COUNT_CMD,       XS(INT_CMD),    VECTOR_CMD    , ALLOW_PLURAL |ALLOW_RING}
    5849 ,{jjidElem,     COUNT_CMD,       XS(INT_CMD),    IDEAL_CMD     , ALLOW_PLURAL |ALLOW_RING}
    5850 ,{jjidElem,     COUNT_CMD,       XS(INT_CMD),    MODUL_CMD     , ALLOW_PLURAL |ALLOW_RING}
    5851 ,{jjCOUNT_M,    COUNT_CMD,       INT_CMD,        MATRIX_CMD    , ALLOW_PLURAL |ALLOW_RING}
    5852 ,{jjCOUNT_IV,   COUNT_CMD,       INT_CMD,        INTVEC_CMD    , ALLOW_PLURAL |ALLOW_RING}
    5853 ,{jjCOUNT_IV,   COUNT_CMD,       INT_CMD,        INTMAT_CMD    , ALLOW_PLURAL |ALLOW_RING}
    5854 ,{jjCOUNT_L,    COUNT_CMD,       INT_CMD,        LIST_CMD      , ALLOW_PLURAL |ALLOW_RING}
    5855 ,{jjCOUNT_RG,   COUNT_CMD,       INT_CMD,        RING_CMD      , ALLOW_PLURAL |ALLOW_RING}
    5856 ,{jjNULL,       DEF_CMD,         DEF_CMD,        INT_CMD       , ALLOW_PLURAL |ALLOW_RING}
    5857 ,{jjWRONG,      DEF_CMD,         0,              ANY_TYPE      , ALLOW_PLURAL |ALLOW_RING}
    5858 ,{jjDEG,        DEG_CMD,         INT_CMD,        POLY_CMD      , ALLOW_PLURAL |ALLOW_RING}
    5859 ,{jjDEG,        DEG_CMD,         INT_CMD,        VECTOR_CMD    , ALLOW_PLURAL |ALLOW_RING}
    5860 ,{jjDEG_M,      DEG_CMD,         INT_CMD,        MATRIX_CMD    , ALLOW_PLURAL |ALLOW_RING}
    5861 ,{jjDEGREE,     DEGREE_CMD,      NONE,           IDEAL_CMD     , NO_PLURAL |ALLOW_RING}
    5862 ,{jjDEGREE,     DEGREE_CMD,      NONE,           MODUL_CMD     , NO_PLURAL |ALLOW_RING}
    5863 ,{jjDEFINED,    DEFINED_CMD,     INT_CMD,        DEF_CMD       , ALLOW_PLURAL |ALLOW_RING}
    5864 #ifdef HAVE_FACTORY
    5865 ,{jjDET_I,      DET_CMD,         INT_CMD,        INTMAT_CMD    , ALLOW_PLURAL |ALLOW_RING}
    5866 ,{jjDET,        DET_CMD,         POLY_CMD,       MATRIX_CMD    , NO_PLURAL |NO_RING}
    5867 ,{jjDET_S,      DET_CMD,         POLY_CMD,       MODUL_CMD     , NO_PLURAL |NO_RING}
    5868 #else
    5869 ,{jjWRONG,      DET_CMD,         INT_CMD,        INTMAT_CMD    , ALLOW_PLURAL |NO_RING}
    5870 ,{jjmpDetBareiss,DET_CMD,        XS(POLY_CMD),   MATRIX_CMD    , NO_PLURAL |ALLOW_RING}
    5871 #endif
    5872 ,{jjDIM,        DIM_CMD,         INT_CMD,        IDEAL_CMD     , ALLOW_PLURAL |ALLOW_RING}
    5873 ,{jjDIM,        DIM_CMD,         INT_CMD,        MODUL_CMD     , ALLOW_PLURAL |ALLOW_RING}
    5874 ,{jjDIM_R,      DIM_CMD,         XS(INT_CMD),    RESOLUTION_CMD, ALLOW_PLURAL |ALLOW_RING}
    5875 ,{jjDUMP,       DUMP_CMD,        NONE,           LINK_CMD      , ALLOW_PLURAL |ALLOW_RING}
    5876 ,{jjE,          E_CMD,           VECTOR_CMD,     INT_CMD       , ALLOW_PLURAL |ALLOW_RING}
    5877 ,{jjEXECUTE,    EXECUTE_CMD,     NONE,           STRING_CMD    , ALLOW_PLURAL |ALLOW_RING}
    5878 ,{jjERROR,      ERROR_CMD,       NONE,           STRING_CMD    , ALLOW_PLURAL |ALLOW_RING}
    5879 #ifdef HAVE_FACTORY
    5880 ,{jjFAC_P,      FAC_CMD,         LIST_CMD,       POLY_CMD      , NO_PLURAL |NO_RING}
    5881 #else
    5882 ,{jjWRONG,      FAC_CMD,         LIST_CMD,       POLY_CMD      , NO_PLURAL |NO_RING}
    5883 #endif
    5884 #ifdef HAVE_FACTORY
    5885 ,{findUniProc,  FINDUNI_CMD,     IDEAL_CMD,      IDEAL_CMD     , NO_PLURAL |NO_RING}
    5886 #else
    5887 ,{jjWRONG,      FINDUNI_CMD,     IDEAL_CMD,      IDEAL_CMD     , ALLOW_PLURAL |ALLOW_RING}
    5888 #endif
    5889 ,{jjidFreeModule,FREEMODULE_CMD, XS(MODUL_CMD),  INT_CMD       , ALLOW_PLURAL |ALLOW_RING}
    5890 #ifdef HAVE_FACTORY
    5891 ,{jjFACSTD,     FACSTD_CMD,      LIST_CMD,       IDEAL_CMD     , NO_PLURAL |NO_RING}
    5892 #else
    5893 ,{jjWRONG,      FACSTD_CMD,      LIST_CMD,       IDEAL_CMD     , NO_PLURAL |NO_RING}
    5894 #endif
    5895 ,{jjGETDUMP,    GETDUMP_CMD,     NONE,           LINK_CMD      , ALLOW_PLURAL |ALLOW_RING}
    5896 ,{jjHIGHCORNER, HIGHCORNER_CMD,  POLY_CMD,       IDEAL_CMD     , NO_PLURAL |ALLOW_RING}
    5897 ,{jjHIGHCORNER_M, HIGHCORNER_CMD,VECTOR_CMD,     MODUL_CMD     , NO_PLURAL |ALLOW_RING}
    5898 ,{jjHILBERT,    HILBERT_CMD,     NONE,           IDEAL_CMD     , NO_PLURAL |ALLOW_RING}
    5899 ,{jjHILBERT,    HILBERT_CMD,     NONE,           MODUL_CMD     , NO_PLURAL |ALLOW_RING}
    5900 ,{jjHILBERT_IV, HILBERT_CMD,     INTVEC_CMD,     INTVEC_CMD    , NO_PLURAL |ALLOW_RING}
    5901 ,{jjHOMOG1,     HOMOG_CMD,       INT_CMD,        IDEAL_CMD     , ALLOW_PLURAL |ALLOW_RING}
    5902 ,{jjHOMOG1,     HOMOG_CMD,       INT_CMD,        MODUL_CMD     , ALLOW_PLURAL |ALLOW_RING}
    5903 ,{jjDUMMY,      IDEAL_CMD,       IDEAL_CMD,      IDEAL_CMD     , ALLOW_PLURAL |ALLOW_RING}
    5904 ,{jjidVec2Ideal,IDEAL_CMD,       XS(IDEAL_CMD),  VECTOR_CMD    , ALLOW_PLURAL |ALLOW_RING}
    5905 ,{jjIDEAL_Ma,   IDEAL_CMD,       IDEAL_CMD,      MATRIX_CMD    , ALLOW_PLURAL |ALLOW_RING}
    5906 ,{jjIDEAL_R,    IDEAL_CMD,       IDEAL_CMD,      QRING_CMD     , ALLOW_PLURAL |ALLOW_RING}
    5907 ,{jjIDEAL_R,    IDEAL_CMD,       IDEAL_CMD,      RING_CMD      , ALLOW_PLURAL |ALLOW_RING}
    5908 ,{jjIDEAL_Map,  IDEAL_CMD,       IDEAL_CMD,      MAP_CMD       , ALLOW_PLURAL |ALLOW_RING}
    5909 ,{jjIMPART,     IMPART_CMD,      NUMBER_CMD,     NUMBER_CMD    , ALLOW_PLURAL |ALLOW_RING}
    5910 ,{jjINDEPSET,   INDEPSET_CMD,    INTVEC_CMD,     IDEAL_CMD     , NO_PLURAL |NO_RING}
    5911 ,{jjDUMMY,      INT_CMD,         INT_CMD,        INT_CMD       , ALLOW_PLURAL |ALLOW_RING}
    5912 ,{jjnlInt,      INT_CMD,         INT_CMD,        BIGINT_CMD    , ALLOW_PLURAL |ALLOW_RING}
    5913 ,{jjnInt,       INT_CMD,         INT_CMD,        NUMBER_CMD    , ALLOW_PLURAL |ALLOW_RING}
    5914 ,{jjP2I,        INT_CMD,         INT_CMD,        POLY_CMD      , ALLOW_PLURAL |ALLOW_RING}
    5915 ,{jjINTERRED,   INTERRED_CMD,    IDEAL_CMD,      IDEAL_CMD     , ALLOW_PLURAL |ALLOW_RING}
    5916 ,{jjINTERRED,   INTERRED_CMD,    MODUL_CMD,      MODUL_CMD     , ALLOW_PLURAL |ALLOW_RING}
    5917 ,{jjDUMMY,      INTMAT_CMD,      INTMAT_CMD,     INTMAT_CMD    , ALLOW_PLURAL |ALLOW_RING}
    5918 ,{jjIm2Iv,      INTVEC_CMD,      INTVEC_CMD,     INTMAT_CMD    , ALLOW_PLURAL |ALLOW_RING}
    5919 ,{jjDUMMY,      INTVEC_CMD,      INTVEC_CMD,     INTVEC_CMD    , ALLOW_PLURAL |ALLOW_RING}
    5920 ,{jjIS_RINGVAR_P, IS_RINGVAR,    INT_CMD,        POLY_CMD      , ALLOW_PLURAL |ALLOW_RING}
    5921 ,{jjIS_RINGVAR_S, IS_RINGVAR,    INT_CMD,        STRING_CMD    , ALLOW_PLURAL |ALLOW_RING}
    5922 ,{jjIS_RINGVAR0,IS_RINGVAR,      INT_CMD,        ANY_TYPE      , ALLOW_PLURAL |ALLOW_RING}
    5923 ,{jjJACOB_P,    JACOB_CMD,       IDEAL_CMD,      POLY_CMD      , ALLOW_PLURAL |ALLOW_RING}
    5924 ,{mpJacobi,     JACOB_CMD,       MATRIX_CMD,     IDEAL_CMD     , ALLOW_PLURAL |ALLOW_RING}
    5925 ,{jjJACOB_M,    JACOB_CMD,       MODUL_CMD,      MODUL_CMD     , ALLOW_PLURAL |ALLOW_RING}
    5926 ,{jjJanetBasis, JANET_CMD,       IDEAL_CMD,      IDEAL_CMD     , ALLOW_PLURAL |NO_RING}
    5927 ,{jjKBASE,      KBASE_CMD,       IDEAL_CMD,      IDEAL_CMD     , ALLOW_PLURAL |ALLOW_RING}
    5928 ,{jjKBASE,      KBASE_CMD,       MODUL_CMD,      MODUL_CMD     , ALLOW_PLURAL |ALLOW_RING}
    5929 ,{jjLU_DECOMP,  LU_CMD,          LIST_CMD,       MATRIX_CMD    , NO_PLURAL |NO_RING}
    5930 ,{jjPFAC1,      PFAC_CMD,        LIST_CMD,       BIGINT_CMD    , ALLOW_PLURAL |ALLOW_RING}
    5931 ,{jjPFAC1,      PFAC_CMD,        LIST_CMD,       NUMBER_CMD    , ALLOW_PLURAL |ALLOW_RING}
    5932 ,{atKILLATTR1,  KILLATTR_CMD,    NONE,           IDHDL         , ALLOW_PLURAL |ALLOW_RING}
    5933 #ifdef MDEBUG
    5934 ,{jjpHead,      LEAD_CMD,        POLY_CMD,       POLY_CMD      , ALLOW_PLURAL |ALLOW_RING}
    5935 #else
    5936 ,{jjpHead,      LEAD_CMD,        XS(POLY_CMD),   POLY_CMD      , ALLOW_PLURAL |ALLOW_RING}
    5937 #endif
    5938 ,{jjidHead,     LEAD_CMD,        XS(IDEAL_CMD),  IDEAL_CMD     , ALLOW_PLURAL |ALLOW_RING}
    5939 #ifdef MDEBUG
    5940 ,{jjpHead,      LEAD_CMD,        VECTOR_CMD,     VECTOR_CMD    , ALLOW_PLURAL |ALLOW_RING}
    5941 #else
    5942 ,{jjpHead,      LEAD_CMD,        XS(VECTOR_CMD), VECTOR_CMD    , ALLOW_PLURAL |ALLOW_RING}
    5943 #endif
    5944 ,{jjidHead,     LEAD_CMD,        XS(MODUL_CMD),  MODUL_CMD     , ALLOW_PLURAL |ALLOW_RING}
    5945 ,{jjLEADCOEF,   LEADCOEF_CMD,    NUMBER_CMD,     POLY_CMD      , ALLOW_PLURAL |ALLOW_RING}
    5946 ,{jjLEADCOEF,   LEADCOEF_CMD,    NUMBER_CMD,     VECTOR_CMD    , ALLOW_PLURAL |ALLOW_RING}
    5947 ,{jjLEADEXP,    LEADEXP_CMD,     INTVEC_CMD,     POLY_CMD      , ALLOW_PLURAL |ALLOW_RING}
    5948 ,{jjLEADEXP,    LEADEXP_CMD,     INTVEC_CMD,     VECTOR_CMD    , ALLOW_PLURAL |ALLOW_RING}
    5949 ,{jjLEADMONOM,  LEADMONOM_CMD,   POLY_CMD,       POLY_CMD      , ALLOW_PLURAL |ALLOW_RING}
    5950 ,{jjLEADMONOM,  LEADMONOM_CMD,   VECTOR_CMD,     VECTOR_CMD    , ALLOW_PLURAL |ALLOW_RING}
    5951 ,{jjLOAD1,      LIB_CMD,         NONE,           STRING_CMD    , ALLOW_PLURAL |ALLOW_RING}
    5952 ,{jjDUMMY,      LINK_CMD,        LINK_CMD,       LINK_CMD      , ALLOW_PLURAL |ALLOW_RING}
    5953 ,{jjCALL1MANY,  LIST_CMD,        LIST_CMD,       DEF_CMD       , ALLOW_PLURAL |ALLOW_RING}
    5954 ,{jjWRONG,      MAP_CMD,         0,              ANY_TYPE      , ALLOW_PLURAL |ALLOW_RING}
    5955 ,{jjDUMMY,      MATRIX_CMD,      MATRIX_CMD,     MATRIX_CMD    , ALLOW_PLURAL |ALLOW_RING}
    5956 ,{jjidMaxIdeal, MAXID_CMD,       XS(IDEAL_CMD),  INT_CMD       , ALLOW_PLURAL |ALLOW_RING}
    5957 ,{jjMEMORY,     MEMORY_CMD,      BIGINT_CMD,     INT_CMD       , ALLOW_PLURAL |ALLOW_RING}
    5958 ,{jjidMinBase,  MINBASE_CMD,     XS(IDEAL_CMD),  IDEAL_CMD     , NO_PLURAL |ALLOW_RING}
    5959 ,{jjidMinBase,  MINBASE_CMD,     XS(MODUL_CMD),  MODUL_CMD     , NO_PLURAL |ALLOW_RING}
    5960 ,{jjMINRES,     MINRES_CMD,      LIST_CMD,       LIST_CMD      , ALLOW_PLURAL |ALLOW_RING}
    5961 ,{jjMINRES_R,   MINRES_CMD,      RESOLUTION_CMD, RESOLUTION_CMD, ALLOW_PLURAL |ALLOW_RING}
    5962 ,{jjDUMMY,      MODUL_CMD,       MODUL_CMD,      MODUL_CMD     , ALLOW_PLURAL |ALLOW_RING}
    5963 ,{jjMONITOR1,   MONITOR_CMD,     NONE,           LINK_CMD      , ALLOW_PLURAL |ALLOW_RING}
    5964 ,{jjMONOM,      MONOM_CMD,       POLY_CMD,       INTVEC_CMD    , ALLOW_PLURAL |ALLOW_RING}
    5965 ,{jjMULT,       MULTIPLICITY_CMD,  INT_CMD,      IDEAL_CMD     , NO_PLURAL |ALLOW_RING}
    5966 ,{jjMULT,       MULTIPLICITY_CMD,  INT_CMD,      MODUL_CMD     , NO_PLURAL |ALLOW_RING}
    5967 ,{jjMSTD,       MSTD_CMD,        LIST_CMD,       IDEAL_CMD     , NO_PLURAL |ALLOW_RING}
    5968 ,{jjMSTD,       MSTD_CMD,        LIST_CMD,       MODUL_CMD     , NO_PLURAL |ALLOW_RING}
    5969 ,{jjNAMEOF,     NAMEOF_CMD,      STRING_CMD,     ANY_TYPE      , ALLOW_PLURAL |ALLOW_RING}
    5970 ,{jjNAMES,      NAMES_CMD,       LIST_CMD,       PACKAGE_CMD   , ALLOW_PLURAL |ALLOW_RING}
    5971 ,{jjNAMES,      NAMES_CMD,       LIST_CMD,       RING_CMD      , ALLOW_PLURAL |ALLOW_RING}
    5972 ,{jjNAMES,      NAMES_CMD,       LIST_CMD,       QRING_CMD     , ALLOW_PLURAL |ALLOW_RING}
    5973 ,{jjDUMMY,      NUMBER_CMD,      NUMBER_CMD,     NUMBER_CMD    , ALLOW_PLURAL |ALLOW_RING}
    5974 ,{jjP2N,        NUMBER_CMD,      NUMBER_CMD,     POLY_CMD      , ALLOW_PLURAL |ALLOW_RING}
    5975 ,{jjBI2N,       NUMBER_CMD,      NUMBER_CMD,     BIGINT_CMD    , ALLOW_PLURAL |ALLOW_RING}
    5976 ,{jjRPAR,       NPARS_CMD,       INT_CMD,        RING_CMD      , ALLOW_PLURAL |ALLOW_RING}
    5977 ,{jjRPAR,       NPARS_CMD,       INT_CMD,        QRING_CMD     , ALLOW_PLURAL |ALLOW_RING}
    5978 ,{jjNVARS,      NVARS_CMD,       INT_CMD,        RING_CMD      , ALLOW_PLURAL |ALLOW_RING}
    5979 ,{jjNVARS,      NVARS_CMD,       INT_CMD,        QRING_CMD     , ALLOW_PLURAL |ALLOW_RING}
    5980 ,{jjOpenClose,  OPEN_CMD,        NONE,           LINK_CMD      , ALLOW_PLURAL |ALLOW_RING}
    5981 ,{jjORD,        ORD_CMD,         INT_CMD,        POLY_CMD      , ALLOW_PLURAL |ALLOW_RING}
    5982 ,{jjORD,        ORD_CMD,         INT_CMD,        VECTOR_CMD    , ALLOW_PLURAL |ALLOW_RING}
    5983 ,{jjrOrdStr,    ORDSTR_CMD,      XS(STRING_CMD), RING_CMD      , ALLOW_PLURAL |ALLOW_RING}
    5984 ,{jjrOrdStr,    ORDSTR_CMD,      XS(STRING_CMD), QRING_CMD     , ALLOW_PLURAL |ALLOW_RING}
    5985 ,{jjPAR1,       PAR_CMD,         NUMBER_CMD,     INT_CMD       , ALLOW_PLURAL |ALLOW_RING}
    5986 ,{jjPARDEG,     PARDEG_CMD,      INT_CMD,        NUMBER_CMD    , ALLOW_PLURAL |ALLOW_RING}
    5987 ,{jjPARSTR1,    PARSTR_CMD,      STRING_CMD,     INT_CMD       , ALLOW_PLURAL |ALLOW_RING}
    5988 ,{jjrParStr,    PARSTR_CMD,      XS(STRING_CMD), RING_CMD      , ALLOW_PLURAL |ALLOW_RING}
    5989 ,{jjrParStr,    PARSTR_CMD,      XS(STRING_CMD), QRING_CMD     , ALLOW_PLURAL |ALLOW_RING}
    5990 ,{jjDUMMY,      POLY_CMD,        POLY_CMD,       POLY_CMD      , ALLOW_PLURAL |ALLOW_RING}
    5991 ,{jjBI2P,       POLY_CMD,        POLY_CMD,       BIGINT_CMD    , ALLOW_PLURAL |ALLOW_RING}
    5992 ,{jjPREIMAGE_R, PREIMAGE_CMD,    RING_CMD,       MAP_CMD       , NO_PLURAL |ALLOW_RING}
    5993 ,{jjPRIME,      PRIME_CMD,       INT_CMD,        INT_CMD       , ALLOW_PLURAL |ALLOW_RING}
    5994 ,{jjPRINT,      PRINT_CMD,       NONE,           LIST_CMD      , ALLOW_PLURAL |ALLOW_RING}
    5995 ,{jjPRINT,      PRINT_CMD,       NONE,           DEF_CMD       , ALLOW_PLURAL |ALLOW_RING}
    5996 ,{jjPRUNE,      PRUNE_CMD,       MODUL_CMD,      MODUL_CMD     , ALLOW_PLURAL |ALLOW_RING}
    5997 ,{kQHWeight,    QHWEIGHT_CMD,    INTVEC_CMD,     IDEAL_CMD     , ALLOW_PLURAL |ALLOW_RING}
    5998 ,{kQHWeight,    QHWEIGHT_CMD,    INTVEC_CMD,     MODUL_CMD     , ALLOW_PLURAL |ALLOW_RING}
    5999 ,{jjWRONG,      QRING_CMD,       0,              ANY_TYPE      , ALLOW_PLURAL |ALLOW_RING}
    6000 ,{jjRANK1,      RANK_CMD,        INT_CMD,        MATRIX_CMD    , ALLOW_PLURAL |ALLOW_RING}
    6001 ,{jjREAD,       READ_CMD,        STRING_CMD,     LINK_CMD      , ALLOW_PLURAL |ALLOW_RING}
    6002 ,{jjREGULARITY, REGULARITY_CMD,  INT_CMD,        LIST_CMD      , NO_PLURAL |ALLOW_RING}
    6003 ,{jjREPART,     REPART_CMD,      NUMBER_CMD,     NUMBER_CMD    , ALLOW_PLURAL |ALLOW_RING}
    6004 ,{jjRESERVEDNAME,RESERVEDNAME_CMD, INT_CMD,      STRING_CMD    , ALLOW_PLURAL |ALLOW_RING}
    6005 ,{jjL2R,        RESOLUTION_CMD,  RESOLUTION_CMD, LIST_CMD      , ALLOW_PLURAL |ALLOW_RING}
    6006 ,{jjDUMMY,      RESOLUTION_CMD,  RESOLUTION_CMD, RESOLUTION_CMD, ALLOW_PLURAL |ALLOW_RING}
    6007 ,{jjRINGLIST,   RINGLIST_CMD,    LIST_CMD,       RING_CMD      , ALLOW_PLURAL |ALLOW_RING}
    6008 ,{jjRINGLIST,   RINGLIST_CMD,    LIST_CMD,       QRING_CMD     , ALLOW_PLURAL |ALLOW_RING}
    6009 ,{jjDUMMY,      RING_CMD,        RING_CMD,       RING_CMD      , ALLOW_PLURAL |ALLOW_RING}
    6010 ,{jjLISTRING,   RING_CMD,        RING_CMD,       LIST_CMD      , ALLOW_PLURAL |ALLOW_RING}
    6011 //,{jjWRONG,      ROWS_CMD,        0,              POLY_CMD    , ALLOW_PLURAL |ALLOW_RING}
    6012 ,{jjpMaxComp,   ROWS_CMD,        XS(INT_CMD),    VECTOR_CMD    , ALLOW_PLURAL |ALLOW_RING}
    6013 ,{jjROWS,       ROWS_CMD,        INT_CMD,        MODUL_CMD     , ALLOW_PLURAL |ALLOW_RING}
    6014 ,{jjROWS,       ROWS_CMD,        INT_CMD,        MATRIX_CMD    , ALLOW_PLURAL |ALLOW_RING}
    6015 ,{jjROWS_IV,    ROWS_CMD,        INT_CMD,        INTMAT_CMD    , ALLOW_PLURAL |ALLOW_RING}
    6016 ,{jjCOUNT_IV,   ROWS_CMD,        INT_CMD,        INTVEC_CMD    , ALLOW_PLURAL |ALLOW_RING}
    6017 ,{jjSLIM_GB,    SLIM_GB_CMD,     IDEAL_CMD,      IDEAL_CMD     , ALLOW_PLURAL }
    6018 ,{jjSLIM_GB,    SLIM_GB_CMD,     MODUL_CMD,      MODUL_CMD     , ALLOW_PLURAL }
    6019 ,{jjSort_Id,    SORTVEC_CMD,     INTVEC_CMD,     IDEAL_CMD     , ALLOW_PLURAL |ALLOW_RING}
    6020 ,{jjSort_Id,    SORTVEC_CMD,     INTVEC_CMD,     MODUL_CMD     , ALLOW_PLURAL |ALLOW_RING}
    6021 #ifdef HAVE_FACTORY
    6022 ,{jjSQR_FREE,   SQR_FREE_CMD,    IDEAL_CMD,      POLY_CMD      , NO_PLURAL |ALLOW_RING}
    6023 #else
    6024 ,{jjWRONG,      SQR_FREE_CMD,    IDEAL_CMD,      POLY_CMD      , NO_PLURAL |ALLOW_RING}
    6025 #endif
    6026 ,{jjSTD,        STD_CMD,         IDEAL_CMD,      IDEAL_CMD     , ALLOW_PLURAL |ALLOW_RING}
    6027 ,{jjSTD,        STD_CMD,         MODUL_CMD,      MODUL_CMD     , ALLOW_PLURAL |ALLOW_RING}
    6028 ,{jjDUMMY,      STRING_CMD,      STRING_CMD,     STRING_CMD    , ALLOW_PLURAL |ALLOW_RING}
    6029 ,{jjSYSTEM,     SYSTEM_CMD,      NONE,           STRING_CMD    , ALLOW_PLURAL |ALLOW_RING}
    6030 ,{jjSYZYGY,     SYZYGY_CMD,      MODUL_CMD,      IDEAL_CMD     , ALLOW_PLURAL |ALLOW_RING}
    6031 ,{jjSYZYGY,     SYZYGY_CMD,      MODUL_CMD,      MODUL_CMD     , ALLOW_PLURAL |ALLOW_RING}
    6032 #ifdef HAVE_PLURAL
    6033 ,{jjENVELOPE,   ENVELOPE_CMD,    RING_CMD,       RING_CMD      , ALLOW_PLURAL |NO_RING}
    6034 ,{jjENVELOPE,   ENVELOPE_CMD,    QRING_CMD,      QRING_CMD     , ALLOW_PLURAL |NO_RING}
    6035 ,{jjOPPOSITE,   OPPOSITE_CMD,    RING_CMD,       RING_CMD      , ALLOW_PLURAL |NO_RING}
    6036 ,{jjOPPOSITE,   OPPOSITE_CMD,    QRING_CMD,      QRING_CMD     , ALLOW_PLURAL |NO_RING}
    6037 ,{jjTWOSTD,     TWOSTD_CMD,      IDEAL_CMD,      IDEAL_CMD     , ALLOW_PLURAL |NO_RING}
    6038 #endif
    6039 ,{jjWRONG,      TRACE_CMD,       0,              INTVEC_CMD    , ALLOW_PLURAL |ALLOW_RING}
    6040 ,{jjWRONG,      TRACE_CMD,       0,              IDEAL_CMD     , ALLOW_PLURAL |ALLOW_RING}
    6041 ,{jjTRACE_IV,   TRACE_CMD,       INT_CMD,        INTMAT_CMD    , ALLOW_PLURAL |ALLOW_RING}
    6042 ,{jjmpTrace,    TRACE_CMD,       XS(POLY_CMD),   MATRIX_CMD    , ALLOW_PLURAL |ALLOW_RING}
    6043 ,{jjTRANSP_IV,  TRANSPOSE_CMD,   INTMAT_CMD,     INTVEC_CMD    , ALLOW_PLURAL |ALLOW_RING}
    6044 ,{jjTRANSP_IV,  TRANSPOSE_CMD,   INTMAT_CMD,     INTMAT_CMD    , ALLOW_PLURAL |ALLOW_RING}
    6045 ,{jjmpTransp,   TRANSPOSE_CMD,   XS(MATRIX_CMD), MATRIX_CMD    , ALLOW_PLURAL |ALLOW_RING}
    6046 ,{jjidTransp,   TRANSPOSE_CMD,   XS(MODUL_CMD),  MODUL_CMD     , ALLOW_PLURAL |ALLOW_RING}
    6047 ,{jjTYPEOF,     TYPEOF_CMD,      STRING_CMD,     ANY_TYPE      , ALLOW_PLURAL |ALLOW_RING}
    6048 ,{jjUNIVARIATE, UNIVARIATE_CMD,  INT_CMD,        POLY_CMD      , ALLOW_PLURAL |ALLOW_RING}
    6049 ,{jjVARIABLES_P,VARIABLES_CMD,   IDEAL_CMD,      POLY_CMD      , ALLOW_PLURAL |ALLOW_RING}
    6050 ,{jjVARIABLES_ID,VARIABLES_CMD,  IDEAL_CMD,      IDEAL_CMD     , ALLOW_PLURAL |ALLOW_RING}
    6051 ,{jjVARIABLES_ID,VARIABLES_CMD,  IDEAL_CMD,      MATRIX_CMD    , ALLOW_PLURAL |ALLOW_RING}
    6052 ,{jjDUMMY,      VECTOR_CMD,      VECTOR_CMD,     VECTOR_CMD    , ALLOW_PLURAL |ALLOW_RING}
    6053 ,{jjVDIM,       VDIM_CMD,        INT_CMD,        IDEAL_CMD     , ALLOW_PLURAL |ALLOW_RING}
    6054 ,{jjVDIM,       VDIM_CMD,        INT_CMD,        MODUL_CMD     , ALLOW_PLURAL |ALLOW_RING}
    6055 ,{jjVAR1,       VAR_CMD,         POLY_CMD,       INT_CMD       , ALLOW_PLURAL |ALLOW_RING}
    6056 ,{jjVARSTR1,    VARSTR_CMD,      STRING_CMD,     INT_CMD       , ALLOW_PLURAL |ALLOW_RING}
    6057 ,{jjrVarStr,    VARSTR_CMD,      XS(STRING_CMD), RING_CMD      , ALLOW_PLURAL |ALLOW_RING}
    6058 ,{jjrVarStr,    VARSTR_CMD,      XS(STRING_CMD), QRING_CMD     , ALLOW_PLURAL |ALLOW_RING}
    6059 ,{kWeight,      WEIGHT_CMD,      INTVEC_CMD,     IDEAL_CMD     , ALLOW_PLURAL |ALLOW_RING}
    6060 ,{kWeight,      WEIGHT_CMD,      INTVEC_CMD,     MODUL_CMD     , ALLOW_PLURAL |ALLOW_RING}
    6061 ,{jjLOAD1,      LOAD_CMD,        NONE,           STRING_CMD    , ALLOW_PLURAL |ALLOW_RING}
    6062 ,{loNewtonP,    NEWTONPOLY_CMD,  IDEAL_CMD,      IDEAL_CMD     , ALLOW_PLURAL |ALLOW_RING}
    6063 #ifdef HAVE_FANS
    6064 ,{jjDELMCONE1,  DELMCONE_CMD,    NONE,           FAN_CMD       , ALLOW_PLURAL |ALLOW_RING}
    6065 ,{jjMAXRAYS1,   MAXRAYS_CMD,     INTMAT_CMD,     FAN_CMD       , ALLOW_PLURAL |ALLOW_RING}
    6066 ,{jjMAXRAYS2,   MAXRAYS_CMD,     INTMAT_CMD,     CONE_CMD      , ALLOW_PLURAL |ALLOW_RING}
    6067 ,{jjFACETNS1,   FACETNS_CMD,     INTMAT_CMD,     FAN_CMD       , ALLOW_PLURAL |ALLOW_RING}
    6068 ,{jjFACETNS2,   FACETNS_CMD,     INTMAT_CMD,     CONE_CMD      , ALLOW_PLURAL |ALLOW_RING}
    6069 ,{jjLINSPACE,   LINSPACE_CMD,    INTMAT_CMD,     FAN_CMD       , ALLOW_PLURAL |ALLOW_RING}
    6070 ,{jjMAXCONE1,   MAXCONE_CMD,     LIST_CMD,       FAN_CMD       , ALLOW_PLURAL |ALLOW_RING}
    6071 ,{jjADJACENCY1, ADJACENCY_CMD,   INTMAT_CMD,     FAN_CMD       , ALLOW_PLURAL |ALLOW_RING}
    6072 #endif /* HAVE_FANS */
    6073 ,{NULL,         0,               0,              0             , NO_PLURAL |NO_RING}
    6074 };
    60755118/*=================== operations with 3 args.: static proc =================*/
    60765119static BOOLEAN jjBRACK_S(leftv res, leftv u, leftv v,leftv w)
     
    72256268}
    72266269
    7227 /*=================== operations with 3 args.: table =================*/
    7228 struct sValCmd3 dArith3[]=
    7229 {
    7230 // operations:
    7231 // proc             cmd          res         arg1        arg2        arg3   plural
    7232  {jjBRACK_S,        '[',        STRING_CMD, STRING_CMD, INT_CMD,    INT_CMD, ALLOW_PLURAL |ALLOW_RING}
    7233 ,{jjBRACK_Im,       '[',        INT_CMD,    INTMAT_CMD, INT_CMD,    INT_CMD, ALLOW_PLURAL |ALLOW_RING}
    7234 ,{jjBRACK_Ma_I_IV,  '[',        INT_CMD,    INTMAT_CMD, INT_CMD,    INTVEC_CMD, ALLOW_PLURAL |ALLOW_RING}
    7235 ,{jjBRACK_Ma_IV_I,  '[',        INT_CMD,    INTMAT_CMD, INTVEC_CMD, INT_CMD, ALLOW_PLURAL |ALLOW_RING}
    7236 ,{jjBRACK_Ma_IV_IV, '[',        INT_CMD,    INTMAT_CMD, INTVEC_CMD, INTVEC_CMD, ALLOW_PLURAL |ALLOW_RING}
    7237 ,{jjBRACK_Ma,       '[',        POLY_CMD,   MATRIX_CMD, INT_CMD,    INT_CMD, ALLOW_PLURAL |ALLOW_RING}
    7238 ,{jjBRACK_Ma_I_IV,  '[',        POLY_CMD,   MATRIX_CMD, INT_CMD,    INTVEC_CMD, ALLOW_PLURAL |ALLOW_RING}
    7239 ,{jjBRACK_Ma_IV_I,  '[',        POLY_CMD,   MATRIX_CMD, INTVEC_CMD, INT_CMD, ALLOW_PLURAL |ALLOW_RING}
    7240 ,{jjBRACK_Ma_IV_IV, '[',        POLY_CMD,   MATRIX_CMD, INTVEC_CMD, INTVEC_CMD, ALLOW_PLURAL |ALLOW_RING}
    7241 ,{jjPROC3,          '(',        ANY_TYPE,   PROC_CMD,   DEF_CMD,    DEF_CMD, ALLOW_PLURAL |ALLOW_RING}
    7242 ,{atATTRIB3,        ATTRIB_CMD, NONE,       IDHDL,      STRING_CMD, DEF_CMD, ALLOW_PLURAL |ALLOW_RING}
    7243 ,{jjBAREISS3,       BAREISS_CMD,LIST_CMD,   MODUL_CMD,  INT_CMD,    INT_CMD, NO_PLURAL |ALLOW_RING}
    7244 ,{jjCOEFFS3_P,      COEFFS_CMD, MATRIX_CMD, POLY_CMD,   POLY_CMD,   MATRIX_CMD, ALLOW_PLURAL |ALLOW_RING}
    7245 ,{jjCOEFFS3_P,      COEFFS_CMD, MATRIX_CMD, VECTOR_CMD, POLY_CMD,   MATRIX_CMD, ALLOW_PLURAL |ALLOW_RING}
    7246 ,{jjCOEFFS3_Id,     COEFFS_CMD, MATRIX_CMD, IDEAL_CMD,  POLY_CMD,   MATRIX_CMD, ALLOW_PLURAL |ALLOW_RING}
    7247 ,{jjCOEFFS3_Id,     COEFFS_CMD, MATRIX_CMD, MODUL_CMD,  POLY_CMD,   MATRIX_CMD, ALLOW_PLURAL |ALLOW_RING}
    7248 ,{jjCOEFFS3_KB,     COEFFS_CMD, MATRIX_CMD, IDEAL_CMD,  IDEAL_CMD,  POLY_CMD, ALLOW_PLURAL |ALLOW_RING}
    7249 ,{jjCOEFFS3_KB,     COEFFS_CMD, MATRIX_CMD, MODUL_CMD,  MODUL_CMD,  POLY_CMD, ALLOW_PLURAL |ALLOW_RING}
    7250 ,{jjELIMIN_HILB,    ELIMINATION_CMD,IDEAL_CMD, IDEAL_CMD, POLY_CMD, INTVEC_CMD, NO_PLURAL |ALLOW_RING}
    7251 ,{jjELIMIN_HILB,    ELIMINATION_CMD,MODUL_CMD, MODUL_CMD, POLY_CMD, INTVEC_CMD, NO_PLURAL |ALLOW_RING}
    7252 ,{jjFIND3,          FIND_CMD,   INT_CMD,    STRING_CMD, STRING_CMD, INT_CMD, ALLOW_PLURAL |ALLOW_RING}
    7253 ,{jjFWALK3,         FWALK_CMD,  IDEAL_CMD,  RING_CMD,   DEF_CMD,    INT_CMD, NO_PLURAL |ALLOW_RING}
    7254 ,{jjHILBERT3,       HILBERT_CMD,INTVEC_CMD, IDEAL_CMD,  INT_CMD,    INTVEC_CMD, NO_PLURAL |ALLOW_RING}
    7255 ,{jjHILBERT3,       HILBERT_CMD,INTVEC_CMD, MODUL_CMD,  INT_CMD,    INTVEC_CMD, NO_PLURAL |ALLOW_RING}
    7256 ,{jjHOMOG_P_W,      HOMOG_CMD,  POLY_CMD,   POLY_CMD,   POLY_CMD,   INTVEC_CMD, ALLOW_PLURAL |ALLOW_RING}
    7257 ,{jjHOMOG_P_W,      HOMOG_CMD,  VECTOR_CMD, VECTOR_CMD, POLY_CMD,   INTVEC_CMD, ALLOW_PLURAL |ALLOW_RING}
    7258 ,{jjHOMOG_ID_W,     HOMOG_CMD,  IDEAL_CMD,  IDEAL_CMD,  POLY_CMD,   INTVEC_CMD, ALLOW_PLURAL |ALLOW_RING}
    7259 ,{jjHOMOG_ID_W,     HOMOG_CMD,  MODUL_CMD,  MODUL_CMD,  POLY_CMD,   INTVEC_CMD, ALLOW_PLURAL |ALLOW_RING}
    7260 ,{jjCALL3MANY,      IDEAL_CMD,  IDEAL_CMD,  DEF_CMD,    DEF_CMD,    DEF_CMD, ALLOW_PLURAL |ALLOW_RING}
    7261 ,{lInsert3,         INSERT_CMD, LIST_CMD,   LIST_CMD,   DEF_CMD,    INT_CMD, ALLOW_PLURAL |ALLOW_RING}
    7262 //,{jjCALL3MANY,      INTERSECT_CMD,  NONE,   DEF_CMD,    DEF_CMD,    DEF_CMD, ALLOW_PLURAL |ALLOW_RING}
    7263 ,{jjINTMAT3,        INTMAT_CMD, INTMAT_CMD, INTMAT_CMD, INT_CMD,    INT_CMD, ALLOW_PLURAL |ALLOW_RING}
    7264 ,{jjCALL3MANY,      INTVEC_CMD, INTVEC_CMD, DEF_CMD,    DEF_CMD,    DEF_CMD, ALLOW_PLURAL |ALLOW_RING}
    7265 ,{jjJET_P_IV,       JET_CMD,    POLY_CMD,   POLY_CMD,   INT_CMD,    INTVEC_CMD, ALLOW_PLURAL |ALLOW_RING}
    7266 ,{jjJET_ID_IV,      JET_CMD,    IDEAL_CMD,  IDEAL_CMD,  INT_CMD,    INTVEC_CMD, ALLOW_PLURAL |ALLOW_RING}
    7267 ,{jjJET_P_IV,       JET_CMD,    VECTOR_CMD, VECTOR_CMD, INT_CMD,    INTVEC_CMD, ALLOW_PLURAL |ALLOW_RING}
    7268 ,{jjJET_ID_IV,      JET_CMD,    MODUL_CMD,  MODUL_CMD,  INT_CMD,    INTVEC_CMD, ALLOW_PLURAL |ALLOW_RING}
    7269 ,{jjJET_P_P,        JET_CMD,    POLY_CMD,   POLY_CMD,   POLY_CMD,   INT_CMD, ALLOW_PLURAL |ALLOW_RING}
    7270 ,{jjJET_P_P,        JET_CMD,    VECTOR_CMD, VECTOR_CMD, POLY_CMD,   INT_CMD, ALLOW_PLURAL |ALLOW_RING}
    7271 ,{jjJET_ID_M,       JET_CMD,    IDEAL_CMD,  IDEAL_CMD,  MATRIX_CMD, INT_CMD, ALLOW_PLURAL |ALLOW_RING}
    7272 ,{jjJET_ID_M,       JET_CMD,    MODUL_CMD,  MODUL_CMD,  MATRIX_CMD, INT_CMD, ALLOW_PLURAL |ALLOW_RING}
    7273 ,{jjWRONG3,         JET_CMD,    POLY_CMD,   POLY_CMD,   INT_CMD,    INT_CMD, ALLOW_PLURAL |ALLOW_RING}
    7274 ,{mpKoszul,         KOSZUL_CMD, MATRIX_CMD, INT_CMD,    INT_CMD,    IDEAL_CMD, NO_PLURAL |NO_RING}
    7275 ,{jjLIFTSTD3,       LIFTSTD_CMD,IDEAL_CMD,  IDEAL_CMD,  MATRIX_CMD, MODUL_CMD, ALLOW_PLURAL |ALLOW_RING}
    7276 ,{jjLIFTSTD3,       LIFTSTD_CMD,MODUL_CMD,  MODUL_CMD,  MATRIX_CMD, MODUL_CMD, ALLOW_PLURAL |ALLOW_RING}
    7277 ,{jjCALL3MANY,      LIST_CMD,   LIST_CMD,   DEF_CMD,    DEF_CMD,    DEF_CMD, ALLOW_PLURAL |ALLOW_RING}
    7278 ,{jjMATRIX_Id,      MATRIX_CMD, MATRIX_CMD, IDEAL_CMD,  INT_CMD,    INT_CMD, ALLOW_PLURAL |ALLOW_RING}
    7279 ,{jjMATRIX_Mo,      MATRIX_CMD, MATRIX_CMD, MODUL_CMD,  INT_CMD,    INT_CMD, ALLOW_PLURAL |ALLOW_RING}
    7280 ,{jjMATRIX_Ma,      MATRIX_CMD, MATRIX_CMD, MATRIX_CMD, INT_CMD,    INT_CMD, ALLOW_PLURAL |ALLOW_RING}
    7281 ,{jjCALL3MANY,      MODUL_CMD,  MODUL_CMD,  DEF_CMD,    DEF_CMD,    DEF_CMD, ALLOW_PLURAL |ALLOW_RING}
    7282 #ifdef OLD_RES
    7283 ,{jjRES3,           MRES_CMD,   NONE,       IDEAL_CMD,  INT_CMD,    ANY_TYPE, ALLOW_PLURAL |ALLOW_RING}
    7284 ,{jjRES3,           MRES_CMD,   NONE,       MODUL_CMD,  INT_CMD,    ANY_TYPE, ALLOW_PLURAL |ALLOW_RING}
    7285 #endif
    7286 ,{jjLIFT3,          LIFT_CMD,   MATRIX_CMD, IDEAL_CMD,  IDEAL_CMD,  MATRIX_CMD, ALLOW_PLURAL |ALLOW_RING}
    7287 ,{jjLIFT3,          LIFT_CMD,   MATRIX_CMD, MODUL_CMD,  MODUL_CMD,  MATRIX_CMD, ALLOW_PLURAL |ALLOW_RING}
    7288 ,{jjPREIMAGE,       PREIMAGE_CMD, IDEAL_CMD, RING_CMD,  ANY_TYPE,   ANY_TYPE, ALLOW_PLURAL |ALLOW_RING}
    7289 ,{jjPREIMAGE,       PREIMAGE_CMD, IDEAL_CMD, QRING_CMD, ANY_TYPE,   ANY_TYPE, ALLOW_PLURAL |ALLOW_RING}
    7290 ,{jjRANDOM_Im,      RANDOM_CMD, INTMAT_CMD, INT_CMD,    INT_CMD,    INT_CMD, ALLOW_PLURAL |ALLOW_RING}
    7291 ,{jjREDUCE3_P,      REDUCE_CMD, POLY_CMD,   POLY_CMD,   IDEAL_CMD,  INT_CMD, ALLOW_PLURAL |ALLOW_RING}
    7292 ,{jjREDUCE3_P,      REDUCE_CMD, VECTOR_CMD, VECTOR_CMD, IDEAL_CMD,  INT_CMD, ALLOW_PLURAL |ALLOW_RING}
    7293 ,{jjREDUCE3_P,      REDUCE_CMD, VECTOR_CMD, VECTOR_CMD, MODUL_CMD,  INT_CMD, ALLOW_PLURAL |ALLOW_RING}
    7294 ,{jjREDUCE3_ID,     REDUCE_CMD, IDEAL_CMD,  IDEAL_CMD,  IDEAL_CMD,  INT_CMD, ALLOW_PLURAL |ALLOW_RING}
    7295 ,{jjREDUCE3_ID,     REDUCE_CMD, MODUL_CMD,  MODUL_CMD,  MODUL_CMD,  INT_CMD, ALLOW_PLURAL |ALLOW_RING}
    7296 ,{jjREDUCE3_ID,     REDUCE_CMD, MODUL_CMD,  MODUL_CMD,  IDEAL_CMD,  INT_CMD, ALLOW_PLURAL |ALLOW_RING}
    7297 ,{jjREDUCE3_CP,     REDUCE_CMD, POLY_CMD,   POLY_CMD,   POLY_CMD,   IDEAL_CMD, ALLOW_PLURAL |ALLOW_RING}
    7298 ,{jjREDUCE3_CP,     REDUCE_CMD, VECTOR_CMD, VECTOR_CMD, POLY_CMD,   MODUL_CMD, ALLOW_PLURAL |ALLOW_RING}
    7299 ,{jjREDUCE3_CID,    REDUCE_CMD, IDEAL_CMD,  IDEAL_CMD,  IDEAL_CMD,  MATRIX_CMD, ALLOW_PLURAL |ALLOW_RING}
    7300 ,{jjREDUCE3_CID,    REDUCE_CMD, MODUL_CMD,  MODUL_CMD,  MODUL_CMD,  MATRIX_CMD, ALLOW_PLURAL |ALLOW_RING}
    7301 #ifdef OLD_RES
    7302 ,{jjRES3,           RES_CMD,    NONE,       IDEAL_CMD,  INT_CMD,    ANY_TYPE, ALLOW_PLURAL |ALLOW_RING}
    7303 ,{jjRES3,           RES_CMD,    NONE,       MODUL_CMD,  INT_CMD,    ANY_TYPE, ALLOW_PLURAL |ALLOW_RING}
    7304 #endif
    7305 #ifdef HAVE_FACTORY
    7306 ,{jjRESULTANT,      RESULTANT_CMD, POLY_CMD,POLY_CMD,   POLY_CMD,   POLY_CMD, NO_PLURAL |ALLOW_RING}
    7307 #else
    7308 ,{jjWRONG3,         RESULTANT_CMD, POLY_CMD,POLY_CMD,   POLY_CMD,   POLY_CMD, NO_PLURAL |ALLOW_RING}
    7309 #endif
    7310 ,{jjRING3,          RING_CMD,   RING_CMD,   DEF_CMD,    DEF_CMD,    DEF_CMD, ALLOW_PLURAL |ALLOW_RING}
    7311 #ifdef OLD_RES
    7312 ,{jjRES3,           SRES_CMD,   NONE,       IDEAL_CMD,  INT_CMD,    ANY_TYPE, NO_PLURAL |ALLOW_RING}
    7313 ,{jjRES3,           SRES_CMD,   NONE,       MODUL_CMD,  INT_CMD,    ANY_TYPE, NO_PLURAL |ALLOW_RING}
    7314 #endif
    7315 ,{jjSTATUS3,        STATUS_CMD, INT_CMD,    LINK_CMD,   STRING_CMD, STRING_CMD, ALLOW_PLURAL |ALLOW_RING}
    7316 ,{jjSTD_HILB_W,     STD_CMD,    IDEAL_CMD,  IDEAL_CMD,  INTVEC_CMD, INTVEC_CMD, NO_PLURAL |ALLOW_RING}
    7317 ,{jjSTD_HILB_W,     STD_CMD,    MODUL_CMD,  MODUL_CMD,  INTVEC_CMD, INTVEC_CMD, NO_PLURAL |ALLOW_RING}
    7318 ,{jjSUBST_P,        SUBST_CMD,  POLY_CMD,   POLY_CMD,   POLY_CMD,   POLY_CMD , ALLOW_PLURAL |ALLOW_RING}
    7319 ,{jjSUBST_P,        SUBST_CMD,  POLY_CMD,   POLY_CMD,   POLY_CMD,   POLY_CMD , ALLOW_PLURAL |ALLOW_RING}
    7320 ,{jjSUBST_P,        SUBST_CMD,  VECTOR_CMD, VECTOR_CMD, POLY_CMD,   POLY_CMD , ALLOW_PLURAL |ALLOW_RING}
    7321 ,{jjSUBST_Id,       SUBST_CMD,  IDEAL_CMD,  IDEAL_CMD,  POLY_CMD,   POLY_CMD , ALLOW_PLURAL |ALLOW_RING}
    7322 ,{jjSUBST_Id,       SUBST_CMD,  MODUL_CMD,  MODUL_CMD,  POLY_CMD,   POLY_CMD , ALLOW_PLURAL |ALLOW_RING}
    7323 ,{jjSUBST_Id,       SUBST_CMD,  MATRIX_CMD, MATRIX_CMD, POLY_CMD,   POLY_CMD , ALLOW_PLURAL |ALLOW_RING}
    7324 ,{jjSUBST_Id_I,     SUBST_CMD,  MATRIX_CMD, MATRIX_CMD, POLY_CMD,   INT_CMD  , ALLOW_PLURAL |ALLOW_RING}
    7325 ,{jjSUBST_Id_N,     SUBST_CMD,  MATRIX_CMD, MATRIX_CMD, POLY_CMD,   NUMBER_CMD , ALLOW_PLURAL |ALLOW_RING}
    7326 ,{jjCALL3MANY,      SYSTEM_CMD, NONE,       STRING_CMD, DEF_CMD,    DEF_CMD  , ALLOW_PLURAL |ALLOW_RING}
    7327 ,{nuLagSolve,       LAGSOLVE_CMD,LIST_CMD,  POLY_CMD,   INT_CMD,    INT_CMD  , NO_PLURAL |NO_RING}
    7328 ,{nuVanderSys,      VANDER_CMD, POLY_CMD,   IDEAL_CMD,  IDEAL_CMD,  INT_CMD  , NO_PLURAL |NO_RING}
    7329 #ifdef HAVE_FANS
    7330 ,{jjSETPROP1,       SETPROP_CMD,NONE,       FAN_CMD,    STRING_CMD, INT_CMD  , NO_PLURAL |NO_RING}
    7331 ,{jjSETPROP2,       SETPROP_CMD,NONE,       CONE_CMD,   STRING_CMD, INT_CMD  , NO_PLURAL |NO_RING}
    7332 ,{jjADJACENCY2,     ADJACENCY_CMD,CONE_CMD, FAN_CMD,    INT_CMD,    INT_CMD  , NO_PLURAL |NO_RING}
    7333 #endif /* HAVE_FANS */
    7334 ,{NULL,             0,          0,          0,          0,          0        , NO_PLURAL |NO_RING}
    7335 };
    73366270/*=================== operations with many arg.: static proc =================*/
    73376271static BOOLEAN jjBREAK0(leftv res, leftv v)
     
    83937327
    83947328
    8395 /*=================== operations with many arg.: table =================*/
    8396 /* number_of_args:  -1: any, -2: any >0, .. */
    8397 struct sValCmdM dArithM[]=
    8398 {
    8399 // operations:
    8400 // proc         cmd               res            number_of_args plural
    8401  {jjKLAMMER_PL,  '(',           ANY_TYPE,           -2      , ALLOW_PLURAL |ALLOW_RING}
    8402 ,{jjBREAK0,    BREAKPOINT_CMD,  NONE,               0       , ALLOW_PLURAL |ALLOW_RING}
    8403 ,{jjBREAK1,    BREAKPOINT_CMD,  NONE,               -2      , ALLOW_PLURAL |ALLOW_RING}
    8404 ,{jjCALL2ARG,  COEF_CMD,        MATRIX_CMD,         2       , ALLOW_PLURAL |ALLOW_RING}
    8405 ,{jjCOEF_M,    COEF_CMD,        NONE,               4       , ALLOW_PLURAL |ALLOW_RING}
    8406 ,{jjCALL2ARG,  DIVISION_CMD,    ANY_TYPE/*or set by p*/,2   , ALLOW_PLURAL |ALLOW_RING}
    8407 ,{jjDIVISION4, DIVISION_CMD,    ANY_TYPE/*or set by p*/,3   , NO_PLURAL |NO_RING}
    8408 ,{jjDIVISION4, DIVISION_CMD,    ANY_TYPE/*or set by p*/,4   , NO_PLURAL |NO_RING}
    8409 ,{jjDBPRINT,   DBPRINT_CMD,     NONE,               -2      , ALLOW_PLURAL |ALLOW_RING}
    8410 //,{jjEXPORTTO_M,  EXPORTTO_CMD,    NONE,             -2      , ALLOW_PLURAL |ALLOW_RING}
    8411 ,{jjCALL1ARG,  IDEAL_CMD,       IDEAL_CMD,          1       , ALLOW_PLURAL |ALLOW_RING}
    8412 ,{jjIDEAL_PL,  IDEAL_CMD,       IDEAL_CMD,          -1      , ALLOW_PLURAL |ALLOW_RING}
    8413 ,{jjCALL2ARG,  INTERSECT_CMD,   IDEAL_CMD,          2       , ALLOW_PLURAL |ALLOW_RING}
    8414 ,{jjINTERSECT_PL,INTERSECT_CMD, IDEAL_CMD,          -2      , ALLOW_PLURAL |ALLOW_RING}
    8415 ,{jjCALL1ARG,  INTVEC_CMD,      INTVEC_CMD,         1       , ALLOW_PLURAL |ALLOW_RING}
    8416 ,{jjINTVEC_PL, INTVEC_CMD,      INTVEC_CMD,         -2      , ALLOW_PLURAL |ALLOW_RING}
    8417 ,{jjCALL2ARG,  JET_CMD,         POLY_CMD,/*or set by p*/ 2  , ALLOW_PLURAL |ALLOW_RING}
    8418 ,{jjCALL3ARG,  JET_CMD,         POLY_CMD,/*or set by p*/ 3  , ALLOW_PLURAL |ALLOW_RING}
    8419 ,{jjJET4,      JET_CMD,         POLY_CMD,/*or set by p*/ 4  , ALLOW_PLURAL |ALLOW_RING}
    8420 ,{jjLIST_PL,   LIST_CMD,        LIST_CMD,           -1      , ALLOW_PLURAL |ALLOW_RING}
    8421 ,{jjLU_INVERSE,LUI_CMD,         LIST_CMD,           -2      , NO_PLURAL |NO_RING}
    8422 ,{jjLU_SOLVE,  LUS_CMD,         LIST_CMD,           -2      , NO_PLURAL |NO_RING}
    8423 ,{jjWRONG,     MINOR_CMD,       NONE,               1       , ALLOW_PLURAL |ALLOW_RING}
    8424 ,{jjMINOR_M,   MINOR_CMD,       IDEAL_CMD,          -2      , ALLOW_PLURAL |ALLOW_RING}
    8425 ,{jjCALL1ARG,  MODUL_CMD,       MODUL_CMD,          1       , ALLOW_PLURAL |ALLOW_RING}
    8426 ,{jjIDEAL_PL,  MODUL_CMD,       MODUL_CMD,          -1      , ALLOW_PLURAL |ALLOW_RING}
    8427 ,{jjCALL1ARG,  NAMES_CMD,       LIST_CMD,            1      , ALLOW_PLURAL |ALLOW_RING}
    8428 ,{jjNAMES0,    NAMES_CMD,       LIST_CMD,            0      , ALLOW_PLURAL |ALLOW_RING}
    8429 ,{jjOPTION_PL, OPTION_CMD,      STRING_CMD/*or set by p*/,-1, ALLOW_PLURAL |ALLOW_RING}
    8430 ,{jjCALL2ARG,  REDUCE_CMD,      IDEAL_CMD/*or set by p*/,  2, ALLOW_PLURAL |ALLOW_RING}
    8431 ,{jjCALL3ARG,  REDUCE_CMD,      IDEAL_CMD/*or set by p*/,  3, ALLOW_PLURAL |ALLOW_RING}
    8432 ,{jjREDUCE4,   REDUCE_CMD,      IDEAL_CMD/*or set by p*/,  4, ALLOW_PLURAL |ALLOW_RING}
    8433 ,{jjREDUCE5,   REDUCE_CMD,      IDEAL_CMD/*or set by p*/,  5, ALLOW_PLURAL |ALLOW_RING}
    8434 ,{jjCALL1ARG,  RESERVEDNAME_CMD, INT_CMD,            1      , ALLOW_PLURAL |ALLOW_RING}
    8435 ,{jjRESERVED0, RESERVEDNAME_CMD, NONE,               0      , ALLOW_PLURAL |ALLOW_RING}
    8436 ,{jjSTRING_PL, STRING_CMD,      STRING_CMD,         -1      , ALLOW_PLURAL |ALLOW_RING}
    8437 ,{jjCALL3ARG,  SUBST_CMD,       NONE/*set by p*/,   3       , ALLOW_PLURAL |ALLOW_RING}
    8438 ,{jjSUBST_M,   SUBST_CMD,       NONE/*set by p*/,   -2      , ALLOW_PLURAL |ALLOW_RING}
    8439 ,{jjSYSTEM,    SYSTEM_CMD,      NONE/*or set by p*/,-2      , ALLOW_PLURAL |ALLOW_RING}
    8440 ,{jjTEST,      TEST_CMD,        NONE,               -2      , ALLOW_PLURAL |ALLOW_RING}
    8441 ,{iiWRITE,     WRITE_CMD,       NONE,               -2      , ALLOW_PLURAL |ALLOW_RING}
    8442 ,{jjCALL2ARG,  STATUS_CMD,      STRING_CMD,          2      , ALLOW_PLURAL |ALLOW_RING}
    8443 ,{jjCALL3ARG,  STATUS_CMD,      INT_CMD,             3      , ALLOW_PLURAL |ALLOW_RING}
    8444 ,{jjSTATUS_M,  STATUS_CMD,      INT_CMD,             4      , ALLOW_PLURAL |ALLOW_RING}
    8445 ,{loSimplex,   SIMPLEX_CMD,     LIST_CMD,            6      , NO_PLURAL |NO_RING}
    8446 ,{nuUResSolve, URSOLVE_CMD,     LIST_CMD,            4      , NO_PLURAL |NO_RING}
    8447 ,{jjCALL1ARG,  STD_CMD,         IDEAL_CMD,           1      , ALLOW_PLURAL |ALLOW_RING}
    8448 ,{jjCALL2ARG,  STD_CMD,         IDEAL_CMD,           2      , ALLOW_PLURAL |ALLOW_RING}
    8449 ,{jjCALL3ARG,  STD_CMD,         IDEAL_CMD,           3      , NO_PLURAL |ALLOW_RING}
    8450 ,{jjSTD_HILB_WP, STD_CMD,       IDEAL_CMD,           4      , NO_PLURAL |ALLOW_RING}
    8451 #ifdef HAVE_FANS
    8452 ,{jjADDADJ,    ADDADJ_CMD,      NONE,               -2      , NO_PLURAL |NO_RING}
    8453 #endif /* HAVE_FANS */
    8454 ,{NULL,        0,               0,                   0      , NO_PLURAL |NO_RING}
    8455 };
    84567329#ifdef MDEBUG
    84577330static Subexpr jjDBMakeSub(leftv e,const char *f,const int l)
     
    84657338  return r;
    84667339}
    8467 
    8468 /*================ generating tables ============================*/
    8469 #ifdef GENTABLE
    8470 extern struct sValAssign dAssign[];
    8471 struct sValCmdTab dArithTab1[]={ {0,0}};
    8472 #define JJTAB1LEN 0
    8473 struct sValCmdTab dArithTab2[]={ {0,0}};
    8474 #define JJTAB2LEN 0
    8475 
    8476 char *iparith_inc;
    8477 void ttGen1()
    8478 {
    8479   iparith_inc=omStrDup("iparith.xxxxxx");
    8480   int pid=getpid();
    8481   iparith_inc[8]=(pid %10)+'0'; pid/=10;
    8482   iparith_inc[9]=(pid %10)+'0'; pid/=10;
    8483   iparith_inc[10]=(pid %10)+'0'; pid/=10;
    8484   iparith_inc[11]=(pid %10)+'0'; pid/=10;
    8485   iparith_inc[12]=(pid %10)+'0'; pid/=10;
    8486   iparith_inc[13]=(pid %10)+'0';
    8487   FILE *outfile = myfopen(iparith_inc,"w");
    8488   int i,j,l1=0,l2=0;
    8489   currRing=(ring)omAllocBin(sip_sring_bin);
    8490   fprintf(outfile,
    8491   "/****************************************\n"
    8492   "*  Computer Algebra System SINGULAR     *\n"
    8493   "****************************************/\n\n");
    8494 /*-------------------------------------------------------------------*/
    8495   fprintf(outfile,"// syntax table for Singular\n//\n");
    8496   fprintf(outfile,"// - search for an exact match of the argument types\n");
    8497   fprintf(outfile,"// - otherwise search for the first possibility\n");
    8498   fprintf(outfile,"//   with converted types of the arguments\n");
    8499   fprintf(outfile,"// - otherwise report an error\n//\n");
    8500 
    8501   int op;
    8502   i=0;
    8503   while ((op=dArith1[i].cmd)!=0)
    8504   {
    8505     if (dArith1[i].p==jjWRONG)
    8506       fprintf(outfile,"// DUMMY ");
    8507     const char *s = iiTwoOps(op);
    8508     fprintf(outfile,"// operation: %s (%s)  ->  %s\n",
    8509           s,
    8510           Tok2Cmdname(dArith1[i].arg),
    8511           Tok2Cmdname(ABS(dArith1[i].res)));
    8512     i++;
    8513   }
    8514   fprintf(outfile,"/*---------------------------------------------*/\n");
    8515   i=0;
    8516   while ((op=dArith2[i].cmd)!=0)
    8517   {
    8518     if (dArith2[i].p==jjWRONG2)
    8519       fprintf(outfile,"// DUMMY ");
    8520     const char *s = iiTwoOps(op);
    8521     fprintf(outfile,"// operation: %s (%s, %s)  ->  %s\n",
    8522           s,
    8523           Tok2Cmdname(dArith2[i].arg1),
    8524           Tok2Cmdname(dArith2[i].arg2),
    8525           Tok2Cmdname(dArith2[i].res));
    8526     i++;
    8527   }
    8528   fprintf(outfile,"/*---------------------------------------------*/\n");
    8529   i=0;
    8530   while ((op=dArith3[i].cmd)!=0)
    8531   {
    8532     const char *s = iiTwoOps(op);
    8533     if (dArith3[i].p==jjWRONG3)
    8534       fprintf(outfile,"// DUMMY ");
    8535     fprintf(outfile,"// operation: %s (%s, %s, %s)  ->  %s\n",
    8536           s,
    8537           Tok2Cmdname(dArith3[i].arg1),
    8538           Tok2Cmdname(dArith3[i].arg2),
    8539           Tok2Cmdname(dArith3[i].arg3),
    8540           Tok2Cmdname(dArith3[i].res));
    8541     i++;
    8542   }
    8543   fprintf(outfile,"/*---------------------------------------------*/\n");
    8544   i=0;
    8545   while ((op=dArithM[i].cmd)!=0)
    8546   {
    8547     const char *s = iiTwoOps(op);
    8548     fprintf(outfile,"// operation: %s (...)  ->  %s",
    8549           s,
    8550           Tok2Cmdname(dArithM[i].res));
    8551     switch(dArithM[i].number_of_args)
    8552     {
    8553       case -2:
    8554          fprintf(outfile," ( number of arguments >0 )\n");
    8555          break;
    8556       case -1:
    8557          fprintf(outfile," ( any number of arguments )\n");
    8558          break;
    8559       default:
    8560          fprintf(outfile," ( %d arguments )\n",dArithM[i].number_of_args);
    8561          break;
    8562     }
    8563     i++;
    8564   }
    8565   fprintf(outfile,"/*---------------------------------------------*/\n");
    8566   i=0;
    8567   while ((op=dAssign[i].res)!=0)
    8568   {
    8569     fprintf(outfile,"// assign: %s =  %s\n",
    8570           Tok2Cmdname(op/*dAssign[i].res*/),
    8571           Tok2Cmdname(dAssign[i].arg));
    8572     i++;
    8573   }
    8574 /*-------------------------------------------------------------------*/
    8575   fprintf(outfile,"/*---------------------------------------------*/\n");
    8576   for (j=257;j<=MAX_TOK+1;j++)
    8577   {
    8578     for(i=257;i<=MAX_TOK+1;i++)
    8579     {
    8580       if ((i!=j) && (j!=IDHDL) && (j!=DEF_CMD) && (j!=ANY_TYPE)
    8581       && iiTestConvert(i,j))
    8582       {
    8583         fprintf(outfile,"// convert %s -> %s\n",
    8584           Tok2Cmdname(i), Tok2Cmdname(j));
    8585         if (j==ANY_TYPE) break;
    8586       }
    8587     }
    8588   }
    8589   fprintf(outfile,"/*---------------------------------------------*/\n");
    8590   char ops[]="=><+*/[.^,%(;";
    8591   for(i=0;ops[i]!='\0';i++)
    8592     fprintf(outfile,"// token %d : %c\n", (int)ops[i], ops[i]);
    8593   for (i=257;i<=MAX_TOK;i++)
    8594   {
    8595     const char *s=iiTwoOps(i);
    8596     if (s[0]!='$')
    8597     {
    8598       fprintf(outfile,"// token %d : %s\n", i, s);
    8599     }
    8600   }
    8601 /*-------------------------------------------------------------------*/
    8602   fprintf(outfile,"/*--max. token: %d, gr: %d --*/\n",MAX_TOK,UMINUS);
    8603 /*-------------------------------------------------------------------*/
    8604   fprintf(outfile,"/*---------------------------------------------*/\n");
    8605   fprintf(outfile,
    8606   "struct sValCmdTab dArithTab1[]=\n"
    8607   "{\n");
    8608   for (j=1;j<=MAX_TOK+1;j++)
    8609   {
    8610     for(i=0;dArith1[i].cmd!=0;i++)
    8611     {
    8612       if (dArith1[i].cmd==j)
    8613       {
    8614         fprintf(outfile," { %d,%d },\n",j,i);
    8615         l1++;
    8616         break;
    8617       }
    8618     }
    8619   }
    8620   fprintf(outfile," { 10000,0 }\n};\n");
    8621   fprintf(outfile,"#define JJTAB1LEN %d\n",l1);
    8622 /*-------------------------------------------------------------------*/
    8623   fprintf(outfile,
    8624   "struct sValCmdTab dArithTab2[]=\n"
    8625   "{\n");
    8626   for (j=1;j<=MAX_TOK+1;j++)
    8627   {
    8628     for(i=0;dArith2[i].cmd!=0;i++)
    8629     {
    8630       if (dArith2[i].cmd==j)
    8631       {
    8632         fprintf(outfile," { %d,%d },\n",j,i);
    8633         l2++;
    8634         break;
    8635       }
    8636     }
    8637   }
    8638   fprintf(outfile," { 10000,0 }\n};\n");
    8639   fprintf(outfile,"#define JJTAB2LEN %d\n",l2);
    8640   fclose(outfile);
    8641 }
    8642 /*-------------------------------------------------------------------*/
    8643 #if 0
    8644 void ttGen2()
    8645 {
    8646   FILE *outfile = myfopen(iparith_inc,"a");
    8647   fprintf(outfile,
    8648   "/****************************************\n"
    8649   "*  Computer Algebra System SINGULAR     *\n"
    8650   "****************************************/\n\n");
    8651 /*-------------------------------------------------------------------*/
    8652   fprintf(outfile,"// identifier table for Singular\n//\n");
    8653 
    8654   fprintf(outfile,
    8655   "cmdnames OLDcmds[] =\n"
    8656   "{  // name-string     alias  tokval toktype\n"
    8657   "{ \"$INVALID$\",            0,  -1, 0},\n");
    8658   int i=1;
    8659   int m=-1;
    8660   int id_nr=0;
    8661   BOOLEAN f=FALSE;
    8662   loop
    8663   {
    8664     while (cmds[i].tokval!=0)
    8665     {
    8666       if ((cmds[i].tokval!=-1)&&(cmds[i].name!=NULL))
    8667       {
    8668         if(m==-1)
    8669         {
    8670           m=i;
    8671           f=TRUE;
    8672         }
    8673         else if(strcmp(cmds[m].name,cmds[i].name)>0)
    8674         {
    8675           m=i;
    8676           f=TRUE;
    8677         }
    8678       }
    8679       i++;
    8680     }
    8681     if(f)
    8682     {
    8683       id_nr++;
    8684       if(cmds[m].tokval==VRTIMER) fprintf(outfile,"#ifdef HAVE_RTIMER\n");
    8685       fprintf(outfile,"  {\"%s\", %*d, %3d, ",cmds[m].name,
    8686                                              20-strlen(cmds[m].name),
    8687                                              cmds[m].alias,
    8688                                              cmds[m].tokval);
    8689       switch(cmds[m].toktype)
    8690       {
    8691         case CMD_1:            fprintf(outfile,"CMD_1 },\n"); break;
    8692         case CMD_2:            fprintf(outfile,"CMD_2 },\n"); break;
    8693         case CMD_3:            fprintf(outfile,"CMD_3 },\n"); break;
    8694         case CMD_12:           fprintf(outfile,"CMD_12 },\n"); break;
    8695         case CMD_123 :         fprintf(outfile,"CMD_123 },\n"); break;
    8696         case CMD_23:           fprintf(outfile,"CMD_23 },\n"); break;
    8697         case CMD_M:            fprintf(outfile,"CMD_M },\n"); break;
    8698         case SYSVAR:           fprintf(outfile,"SYSVAR },\n"); break;
    8699         case ROOT_DECL:        fprintf(outfile,"ROOT_DECL },\n"); break;
    8700         case ROOT_DECL_LIST:   fprintf(outfile,"ROOT_DECL_LIST },\n"); break;
    8701         case RING_DECL:        fprintf(outfile,"RING_DECL },\n"); break;
    8702         case NONE:             fprintf(outfile,"NONE },\n"); break;
    8703         default:               if((cmds[m].toktype>' ')
    8704                                &&(cmds[m].toktype<127))
    8705                                {
    8706                                  fprintf(outfile,"'%c' },\n",cmds[m].toktype);
    8707                                }
    8708                                else
    8709                                {
    8710                                  fprintf(outfile,"%d },\n",cmds[m].toktype);
    8711                                }
    8712                                break;
    8713       }
    8714       if(cmds[m].tokval==VRTIMER) fprintf(outfile,"#endif\n");
    8715       cmds[m].name=NULL;
    8716       m=-1;
    8717       i=1;
    8718       f=FALSE;
    8719     }
    8720     else break;
    8721   }
    8722   fprintf(outfile,
    8723 "/* list of scanner identifiers/only for feread/reservedName */\n");
    8724   f=FALSE;
    8725   i=1;m=-1;
    8726   loop
    8727   {
    8728     while (cmds[i].tokval!=0)
    8729     {
    8730       if (cmds[i].name!=NULL)
    8731       {
    8732         if(m==-1)
    8733         {
    8734           m=i;
    8735           f=TRUE;
    8736         }
    8737         else if(strcmp(cmds[m].name,cmds[i].name)>0)
    8738         {
    8739           m=i;
    8740           f=TRUE;
    8741         }
    8742       }
    8743       i++;
    8744     }
    8745     if(f)
    8746     {
    8747       fprintf(outfile,"  {\"%s\", %*d,  -1, 0 },\n",cmds[m].name,
    8748                                              20-strlen(cmds[m].name),
    8749                                              0/*cmds[m].alias*/
    8750                                              /*-1 cmds[m].tokval*/
    8751                                              /*0 cmds[m].toktype*/);
    8752       cmds[m].name=NULL;
    8753       m=-1;
    8754       i=1;
    8755       f=FALSE;
    8756     }
    8757     else break;
    8758   }
    8759   fprintf(outfile,
    8760 "/* end of list marker */\n"
    8761 "  { NULL, 0, 0, 0}\n"
    8762 "};\n"
    8763 "#ifdef HAVE_RTIMER\n"
    8764 "#define LAST_IDENTIFIER %d\n"
    8765 "#else\n"
    8766 "#define LAST_IDENTIFIER %d\n"
    8767 "#endif\n",id_nr,id_nr-1);
    8768   fclose(outfile);
    8769 }
    8770 #endif
    8771 /*---------------------------------------------------------------------*/
    8772 /**
    8773  * @brief generate cmds initialisation
    8774 **/
    8775 /*---------------------------------------------------------------------*/
    8776 
    8777 void ttGen2b()
    8778 {
    8779   int cmd_size = (sizeof(cmds)/sizeof(cmdnames))-1;
    8780 
    8781   FILE *outfile = myfopen(iparith_inc,"a");
    8782   fprintf(outfile,
    8783   "/****************************************\n"
    8784   "*  Computer Algebra System SINGULAR     *\n"
    8785   "****************************************/\n\n");
    8786 /*-------------------------------------------------------------------*/
    8787   fprintf(outfile,"// identifier table for Singular\n//\n");
    8788 
    8789   fprintf(
    8790     outfile,
    8791     "#ifdef MODULE_GENERATOR\n"
    8792     "#define omAlloc0(A) malloc(A)\n"
    8793     "#endif\n"
    8794     "void iiInitCmdName()\n{\n"
    8795     "  sArithBase.nCmdUsed      = 0;\n"
    8796     "  sArithBase.nCmdAllocated = %d;\n"
    8797     "  sArithBase.sCmds = (cmdnames*)omAlloc0(sArithBase.nCmdAllocated*sizeof(cmdnames));\n"
    8798     "\n"
    8799     "  // name-string                   alias  tokval toktype index\n",
    8800     cmd_size);
    8801   int m=0;
    8802   int id_nr=0;
    8803 
    8804   qsort(&cmds, cmd_size, sizeof(cmdnames), (&_gentable_sort_cmds));
    8805 
    8806   for(m=0; m<cmd_size; m++)
    8807   {
    8808     if(cmds[m].tokval>0) id_nr++;
    8809     if(cmds[m].tokval==VRTIMER) fprintf(outfile,"#ifdef HAVE_RTIMER\n");
    8810     fprintf(outfile,"  iiArithAddCmd(\"%s\", %*d, %3d, ",cmds[m].name,
    8811             20-strlen(cmds[m].name),
    8812             cmds[m].alias,
    8813             cmds[m].tokval);
    8814     switch(cmds[m].toktype)
    8815     {
    8816         case CMD_1:            fprintf(outfile,"CMD_1"); break;
    8817         case CMD_2:            fprintf(outfile,"CMD_2"); break;
    8818         case CMD_3:            fprintf(outfile,"CMD_3"); break;
    8819         case CMD_12:           fprintf(outfile,"CMD_12"); break;
    8820         case CMD_123 :         fprintf(outfile,"CMD_123"); break;
    8821         case CMD_23:           fprintf(outfile,"CMD_23"); break;
    8822         case CMD_M:            fprintf(outfile,"CMD_M"); break;
    8823         case SYSVAR:           fprintf(outfile,"SYSVAR"); break;
    8824         case ROOT_DECL:        fprintf(outfile,"ROOT_DECL"); break;
    8825         case ROOT_DECL_LIST:   fprintf(outfile,"ROOT_DECL_LIST"); break;
    8826         case RING_DECL:        fprintf(outfile,"RING_DECL"); break;
    8827         case NONE:             fprintf(outfile,"NONE"); break;
    8828         default:
    8829           if((cmds[m].toktype>' ') &&(cmds[m].toktype<127))
    8830           {
    8831             fprintf(outfile,"'%c'",cmds[m].toktype);
    8832           }
    8833           else
    8834           {
    8835             fprintf(outfile,"%d",cmds[m].toktype);
    8836           }
    8837           break;
    8838 #if 0
    8839           fprintf(outfile,"  iiArithAddCmd(\"%s\", %*d,  -1, 0 );\n",
    8840               cmds[m].name, 20-strlen(cmds[m].name),
    8841               0/*cmds[m].alias*/
    8842               /*-1 cmds[m].tokval*/
    8843               /*0 cmds[m].toktype*/);
    8844 #endif
    8845     }
    8846     fprintf(outfile,", %d);\n", m);
    8847     if(cmds[m].tokval==VRTIMER) fprintf(outfile,"#endif\n");
    8848   }
    8849   fprintf(outfile, "/* end of list marker */\n");
    8850   fprintf(outfile,
    8851           "#ifdef HAVE_RTIMER\n"
    8852           "  sArithBase.nLastIdentifier = %d;\n"
    8853           "#else /* HAVE_RTIMER */\n"
    8854           "  sArithBase.nLastIdentifier = %d;\n"
    8855           "#endif /* HAVE_RTIMER */\n",
    8856           id_nr,id_nr-1);
    8857 
    8858 
    8859   fprintf(outfile,
    8860 "}\n"
    8861 "#ifdef HAVE_RTIMER\n"
    8862 "#define LAST_IDENTIFIER %d\n"
    8863 "#else\n"
    8864 "#define LAST_IDENTIFIER %d\n"
    8865 "#endif\n",id_nr,id_nr-1);
    8866   fclose(outfile);
    8867 }
    8868 /*-------------------------------------------------------------------*/
    8869 #if 0
    8870 void ttGen3()
    8871 {
    8872   FILE *outfile = myfopen("mpsr_tok.inc","w");
    8873   fprintf(outfile,
    8874   "/****************************************\n"
    8875   "*  Computer Algebra System SINGULAR     *\n"
    8876   "****************************************/\n\n");
    8877 /*-------------------------------------------------------------------*/
    8878   fprintf(outfile,"// token table for Singular\n//\n");
    8879 
    8880   fprintf(outfile,
    8881   "short vtok[] =\n"
    8882   "{\n");
    8883   // operations with 1 arg: ===========================================
    8884   int i=0;
    8885   while (dArith1[i].cmd!=0)
    8886   {
    8887     if ((dArith1[i].p!=jjWRONG)
    8888     &&((i==0)||(dArith1[i].cmd!=dArith1[i-1].cmd)))
    8889     {
    8890       fprintf(outfile,"  %d,\n",dArith1[i].cmd);
    8891     }
    8892     i++;
    8893   }
    8894   // operations with 2 args: ===========================================
    8895   i=0;
    8896   while (dArith2[i].cmd!=0)
    8897   {
    8898     if ((dArith2[i].p!=jjWRONG2)
    8899     &&((i==0)||(dArith2[i].cmd!=dArith2[i-1].cmd)))
    8900     {
    8901       fprintf(outfile,"  %d,\n",dArith2[i].cmd);
    8902     }
    8903     i++;
    8904   }
    8905   // operations with 3 args: ===========================================
    8906   i=0;
    8907   while (dArith3[i].cmd!=0)
    8908   {
    8909     if (
    8910     ((i==0)||(dArith3[i].cmd!=dArith3[i-1].cmd)))
    8911     {
    8912       fprintf(outfile,"  %d,\n",dArith3[i].cmd);
    8913     }
    8914     i++;
    8915   }
    8916   // operations with many args: ===========================================
    8917   i=0;
    8918   while (dArithM[i].cmd!=0)
    8919   {
    8920     if (
    8921     ((i==0)||(dArithM[i].cmd!=dArithM[i-1].cmd)))
    8922     {
    8923       fprintf(outfile,"  %d,\n",dArithM[i].cmd);
    8924     }
    8925     i++;
    8926   }
    8927   // ====================================================================
    8928   fprintf(outfile,
    8929   "/* end of list marker */\n"
    8930   " %d };\n",MAX_TOK);
    8931   fclose(outfile);
    8932 }
    8933 #endif
    8934 void ttGen4()
    8935 {
    8936   FILE *outfile = myfopen("plural_cmd.xx","w");
    8937   int i;
    8938   const char *old_s="";
    8939   fprintf(outfile,
    8940   "@c *****************************************\n"
    8941   "@c *  Computer Algebra System SINGULAR     *\n"
    8942   "@c *****************************************\n\n");
    8943 /*-------------------------------------------------------------------*/
    8944   fprintf(outfile,"@multicolumn .45 .45\n");
    8945   int op;
    8946   i=0;
    8947   while ((op=dArith1[i].cmd)!=0)
    8948   {
    8949     if (dArith1[i].p!=jjWRONG)
    8950     {
    8951       const char *s = iiTwoOps(op);
    8952       if ((s!=NULL) && (isalpha(s[0])) && (strcmp(s,old_s)!=0))
    8953       {
    8954         old_s=s;
    8955         #ifdef HAVE_PLURAL
    8956         switch (dArith1[i].valid_for & PLURAL_MASK)
    8957         {
    8958           case NO_PLURAL:
    8959             fprintf(outfile,"@item @ref{%s} @tab @code{---}\n",s);
    8960             break;
    8961           case ALLOW_PLURAL:
    8962             fprintf(outfile,"@item @ref{%s} @tab @ref{%s (plural)}\n",s,s);
    8963             break;
    8964           case COMM_PLURAL:
    8965             fprintf(outfile,"@item @ref{%s} @tab %s\n",s,s);
    8966             break;
    8967         }
    8968         #endif
    8969         #ifdef HAVE_RINGS
    8970         #endif
    8971       }
    8972     }
    8973     i++;
    8974   }
    8975   fprintf(outfile,"@c ---------------------------------------------\n");
    8976   i=0;
    8977   while ((op=dArith2[i].cmd)!=0)
    8978   {
    8979     if (dArith2[i].p!=jjWRONG2)
    8980     {
    8981       const char *s = iiTwoOps(op);
    8982       if ((s!=NULL) && (isalpha(s[0])) && (strcmp(s,old_s)!=0))
    8983       {
    8984         old_s=s;
    8985         #ifdef HAVE_PLURAL
    8986         switch (dArith2[i].valid_for & PLURAL_MASK)
    8987         {
    8988           case NO_PLURAL:
    8989             fprintf(outfile,"@item @ref{%s} @tab @code{---}\n",s);
    8990             break;
    8991           case ALLOW_PLURAL:
    8992             fprintf(outfile,"@item @ref{%s} @tab @ref{%s (plural)}\n",s,s);
    8993             break;
    8994           case COMM_PLURAL:
    8995             fprintf(outfile,"@item @ref{%s} @tab %s\n",s,s);
    8996             break;
    8997         }
    8998         #endif
    8999         #ifdef HAVE_RINGS
    9000         #endif
    9001       }
    9002     }
    9003     i++;
    9004   }
    9005   fprintf(outfile,"@c ---------------------------------------------\n");
    9006   i=0;
    9007   while ((op=dArith3[i].cmd)!=0)
    9008   {
    9009     const char *s = iiTwoOps(op);
    9010     if (dArith3[i].p!=jjWRONG3)
    9011     {
    9012       if ((s!=NULL) && (isalpha(s[0])) && (strcmp(s,old_s)!=0))
    9013       {
    9014         old_s=s;
    9015         #ifdef HAVE_PLURAL
    9016         switch (dArith3[i].valid_for & PLURAL_MASK)
    9017         {
    9018           case NO_PLURAL:
    9019             fprintf(outfile,"@item @ref{%s} @tab @code{---}\n",s);
    9020             break;
    9021           case ALLOW_PLURAL:
    9022             fprintf(outfile,"@item @ref{%s} @tab @ref{%s (plural)}\n",s,s);
    9023             break;
    9024           case COMM_PLURAL:
    9025             fprintf(outfile,"@item @ref{%s} @tab %s\n",s,s);
    9026             break;
    9027         }
    9028         #endif
    9029         #ifdef HAVE_RINGS
    9030         #endif
    9031       }
    9032     }
    9033     i++;
    9034   }
    9035   fprintf(outfile,"@c ---------------------------------------------\n");
    9036   i=0;
    9037   while ((op=dArithM[i].cmd)!=0)
    9038   {
    9039     const char *s = iiTwoOps(op);
    9040     if ((s!=NULL) && (isalpha(s[0])) && (strcmp(s,old_s)!=0))
    9041     {
    9042         old_s=s;
    9043         #ifdef HAVE_PLURAL
    9044         switch (dArithM[i].valid_for & PLURAL_MASK)
    9045         {
    9046           case NO_PLURAL:
    9047             fprintf(outfile,"@item @ref{%s} @tab @code{---}\n",s);
    9048             break;
    9049           case ALLOW_PLURAL:
    9050             fprintf(outfile,"@item @ref{%s} @tab @ref{%s (plural)}\n",s,s);
    9051             break;
    9052           case COMM_PLURAL:
    9053             fprintf(outfile,"@item @ref{%s} @tab %s\n",s,s);
    9054             break;
    9055         }
    9056         #endif
    9057         #ifdef HAVE_RINGS
    9058         #endif
    9059     }
    9060     i++;
    9061   }
    9062   fprintf(outfile,"@c ---------------------------------------------\n");
    9063   fprintf(outfile,"@end table\n");
    9064   fclose(outfile);
    9065 }
    9066 /*-------------------------------------------------------------------*/
    9067 #else
     7340#define D(A) (A)
     7341#define IPARITH
     7342#include "table.h"
     7343
    90687344#include <iparith.inc>
    9069 #endif
    90707345
    90717346/*=================== operations with 2 args. ============================*/
     
    90737348BOOLEAN iiExprArith2(leftv res, leftv a, int op, leftv b, BOOLEAN proccall)
    90747349{
    9075 #ifndef GENTABLE
    90767350  memset(res,0,sizeof(sleftv));
    90777351  BOOLEAN call_failed=FALSE;
     
    92807554  a->CleanUp();
    92817555  b->CleanUp();
    9282 #endif
    92837556  return TRUE;
    92847557}
     
    92887561BOOLEAN iiExprArith1(leftv res, leftv a, int op)
    92897562{
    9290 #ifndef GENTABLE
    92917563  memset(res,0,sizeof(sleftv));
    92927564  BOOLEAN call_failed=FALSE;
     
    94757747  }
    94767748  a->CleanUp();
    9477 #endif
    94787749  return TRUE;
    94797750}
     
    94837754BOOLEAN iiExprArith3(leftv res, int op, leftv a, leftv b, leftv c)
    94847755{
    9485 #ifndef GENTABLE
    94867756  memset(res,0,sizeof(sleftv));
    94877757  BOOLEAN call_failed=FALSE;
     
    96907960  c->CleanUp();
    96917961        //Print("op: %d,result typ:%d\n",op,res->rtyp);
    9692 #endif
    96937962  return TRUE;
    96947963}
     
    97127981BOOLEAN iiExprArithM(leftv res, leftv a, int op)
    97137982{
    9714 #ifndef GENTABLE
    97157983  memset(res,0,sizeof(sleftv));
    97167984
     
    98308098  if (a!=NULL) a->CleanUp();
    98318099        //Print("op: %d,result typ:%d\n",op,res->rtyp);
    9832 #endif
    98338100  return TRUE;
    98348101}
     
    98378104int IsCmd(const char *n, int & tok)
    98388105{
    9839 #ifndef GENTABLE
    98408106  int i;
    98418107  int an=1;
     
    99308196  }
    99318197  return sArithBase.sCmds[i].toktype;
    9932 #else
    9933   return 0;
    9934 #endif
    99358198}
    99368199static int iiTabIndex(const jjValCmdTab dArithTab, const int len, const int op)
    99378200{
    9938 #ifndef GENTABLE
    99398201  int a=0;
    99408202  int e=len;
     
    99498211  while ( a <= e);
    99508212
    9951 #endif
    99528213  assume(0);
    99538214  return 0;
    99548215}
    99558216
    9956 #ifdef GENTABLE
    9957 const char * Tok2Cmdname(int tok)
    9958 {
    9959   int i = 0;
    9960   if (tok < 0)
    9961   {
    9962     return cmds[0].name;
    9963   }
    9964   if (tok==COMMAND) return "command";
    9965   if (tok==ANY_TYPE) return "any_type";
    9966   if (tok==NONE) return "nothing";
    9967   //if (tok==IFBREAK) return "if_break";
    9968   //if (tok==VECTOR_FROM_POLYS) return "vector_from_polys";
    9969   //if (tok==ORDER_VECTOR) return "ordering";
    9970   //if (tok==REF_VAR) return "ref";
    9971   //if (tok==OBJECT) return "object";
    9972   //if (tok==PRINT_EXPR) return "print_expr";
    9973   if (tok==IDHDL) return "identifier";
    9974   while (cmds[i].tokval!=0)
    9975   {
    9976     if ((cmds[i].tokval == tok)&&(cmds[i].alias==0))
    9977     {
    9978       return cmds[i].name;
    9979     }
    9980     i++;
    9981   }
    9982   return cmds[0].name;
    9983 }
    9984 #else /* GENTABLE */
    99858217const char * Tok2Cmdname(int tok)
    99868218{
     
    100118243  return sArithBase.sCmds[0].name;
    100128244}
    10013 #endif /* GENTABLE */
    100148245
    100158246
     
    100658296  int i;
    100668297  //printf("iiInitArithmetic()\n");
    10067 #ifndef GENTABLE
    100688298  memset(&sArithBase, 0, sizeof(sArithBase));
    100698299  iiInitCmdName();
     
    100958325  //iiArithRemoveCmd("mygcd");
    100968326  //iiArithAddCmd("kkk", 1, 1234, CMD_1);
    10097 #endif   /* !GENTABLE */
    100988327  return 0;
    100998328}
     
    101458374int iiArithFindCmd(const char *szName)
    101468375{
    10147 #ifndef GENTABLE
    101488376  int an=0;
    101498377  int i = 0,v = 0;
     
    102028430  //Print("RET-2\n");
    102038431  return -2;
    10204 #else
    10205   return 0;
    10206 #endif
    102078432}
    102088433
     
    103008525  return 0;
    103018526}
    10302 
    10303 #ifdef GENTABLE
    10304   // some special cmds which do not fit in with the others, and
    10305   // nevertheless need to be transmitted
    10306 short ExtraCmds[] =
    10307 {
    10308   OPTION_CMD,
    10309   NAMES_CMD,
    10310 //  RESERVEDNAME_CMD,
    10311   PROC_CMD,
    10312   MAP_CMD,
    10313   PACKAGE_CMD,
    10314   '=',
    10315   0
    10316 };
    10317 
    10318 // This returns 1 if tok is a token which can appear in a Singular
    10319 // (quoted) command, and 0 otherwise
    10320 short IsCmdToken(short tok)
    10321 {
    10322   int i = 0;
    10323   // cmds with one arg
    10324   while (dArith1[i].cmd != 0)
    10325     if (dArith1[i].cmd == tok) return 1;
    10326     else i++;
    10327 
    10328   // cmds with two args
    10329   i=0;
    10330   while (dArith2[i].cmd != 0)
    10331     if (dArith2[i].cmd == tok) return 1;
    10332     else i++;
    10333 
    10334   // cmds with three args
    10335   i=0;
    10336   while (dArith3[i].cmd != 0)
    10337     if (dArith3[i].cmd == tok) return 1;
    10338     else i++;
    10339 
    10340   // cmds with many args
    10341   i=0;
    10342   while (dArithM[i].cmd != 0)
    10343     if (dArithM[i].cmd == tok) return 1;
    10344     else i++;
    10345 
    10346   // cmds which are somewhat special (like those having 0 args)
    10347   i=0;
    10348   while (ExtraCmds[i] != 0)
    10349     if (ExtraCmds[i] == tok) return 1;
    10350     else i++;
    10351 
    10352   return 0;
    10353 }
    10354 #endif
  • Singular/ipassign.cc

    rec58bd r56c789  
    704704}
    705705/*=================== table =================*/
    706 struct sValAssign dAssign[]=
    707 {
    708 // proc         res             arg
    709  {jiA_IDEAL,    IDEAL_CMD,      IDEAL_CMD }
    710 ,{jiA_IDEAL_M,  IDEAL_CMD,      MATRIX_CMD }
    711 ,{jiA_RESOLUTION,RESOLUTION_CMD,RESOLUTION_CMD }
    712 ,{jiA_INT,      INT_CMD,        INT_CMD }
    713 ,{jiA_1x1INTMAT, INT_CMD,       INTMAT_CMD }
    714 ,{jiA_IDEAL,    MATRIX_CMD,     MATRIX_CMD }
    715 ,{jiA_MAP_ID,   MAP_CMD,        IDEAL_CMD }
    716 ,{jiA_MAP,      MAP_CMD,        MAP_CMD }
    717 ,{jiA_IDEAL,    MODUL_CMD,      MODUL_CMD }
    718 ,{jiA_MODUL_P,  MODUL_CMD,      POLY_CMD }
    719 ,{jiA_POLY,     POLY_CMD,       POLY_CMD }
    720 ,{jiA_1x1MATRIX,POLY_CMD,       MATRIX_CMD }
    721 ,{jiA_QRING,    QRING_CMD,      IDEAL_CMD }
    722 ,{jiA_RING,     RING_CMD,       RING_CMD }
    723 ,{jiA_RING,     QRING_CMD,      QRING_CMD }
    724 ,{jiA_STRING,   STRING_CMD,     STRING_CMD }
    725 ,{jiA_PROC,     PROC_CMD,       STRING_CMD }
    726 ,{jiA_PROC,     PROC_CMD,       PROC_CMD }
    727 ,{jiA_POLY,     VECTOR_CMD,     VECTOR_CMD }
    728 ,{jiA_INTVEC,   INTVEC_CMD,     INTVEC_CMD }
    729 ,{jiA_INTVEC,   INTMAT_CMD,     INTMAT_CMD }
    730 //,{jiA_INTVEC,   INTMAT_CMD,     INTVEC_CMD }
    731 ,{jiA_NUMBER,   NUMBER_CMD,     NUMBER_CMD }
    732 ,{jiA_BIGINT,   BIGINT_CMD,     BIGINT_CMD }
    733 ,{jiA_LIST_RES, LIST_CMD,       RESOLUTION_CMD }
    734 ,{jiA_LIST,     LIST_CMD,       LIST_CMD }
    735 ,{jiA_LINK,     LINK_CMD,       STRING_CMD }
    736 ,{jiA_LINK,     LINK_CMD,       LINK_CMD }
    737 #ifdef HAVE_FANS
    738 ,{jiA_FAN,      FAN_CMD,        FAN_CMD }
    739 ,{jiA_CONE,     CONE_CMD,       CONE_CMD }
    740 #endif /* HAVE_FANS */
    741 ,{jiA_PACKAGE,  PACKAGE_CMD,    PACKAGE_CMD }
    742 ,{NULL,         0,              0 }
    743 };
    744 struct sValAssign_sys dAssign_sys[]=
    745 {
    746 // sysvars:
    747  {jjECHO,       VECHO,          INT_CMD }
    748 ,{jjPRINTLEVEL, VPRINTLEVEL,    INT_CMD }
    749 ,{jjCOLMAX,     VCOLMAX,        INT_CMD }
    750 ,{jjTIMER,      VTIMER,         INT_CMD }
    751 #ifdef HAVE_RTIMER
    752 ,{jjRTIMER,     VRTIMER,        INT_CMD }
    753 #endif
    754 ,{jjMAXDEG,     VMAXDEG,        INT_CMD }
    755 ,{jjMAXMULT,    VMAXMULT,       INT_CMD }
    756 ,{jjTRACE,      TRACE,          INT_CMD }
    757 ,{jjSHORTOUT,   VSHORTOUT,      INT_CMD }
    758 ,{jjMINPOLY,    VMINPOLY,       NUMBER_CMD }
    759 ,{jjNOETHER,    VNOETHER,       POLY_CMD }
    760 ,{NULL,         0,              0 }
    761 };
     706#define IPASSIGN
     707#define D(A) A
     708#include <Singular/table.h>
    762709/*=================== operations ============================*/
    763710/*2
  • Singular/ipconv.cc

    rec58bd r56c789  
    247247// automatic conversions:
    248248//
    249 struct sConvertTypes dConvertTypes[] =
    250 {
    251 //   input type       output type     convert procedure
    252 //  int -> bigint
    253    { INT_CMD,         BIGINT_CMD,     iiI2BI , NULL },
    254 //  int -> number
    255    { INT_CMD,         NUMBER_CMD,     iiI2N , NULL },
    256    { BIGINT_CMD,      NUMBER_CMD,     iiBI2N , NULL },
    257 //  int -> poly
    258    { INT_CMD,         POLY_CMD,       iiI2P , NULL },
    259    { BIGINT_CMD,      POLY_CMD,       iiBI2P , NULL },
    260 //  int -> vector
    261    { INT_CMD,         VECTOR_CMD,     iiI2V , NULL },
    262    { BIGINT_CMD,      VECTOR_CMD,     iiBI2V , NULL },
    263 //  int -> ideal
    264    { INT_CMD,         IDEAL_CMD,      iiI2Id , NULL },
    265    { BIGINT_CMD,      IDEAL_CMD,      iiBI2Id , NULL },
    266 //  int -> matrix
    267    { INT_CMD,         MATRIX_CMD,     iiI2Id , NULL },
    268    { BIGINT_CMD,      MATRIX_CMD,     iiBI2Id , NULL },
    269 //  int -> intvec
    270    { INT_CMD,         INTVEC_CMD,     iiI2Iv , NULL },
    271 //  intvec -> intmat
    272    { INTVEC_CMD,      INTMAT_CMD,     iiDummy, NULL },
    273 //  intvec -> matrix
    274    { INTVEC_CMD,      MATRIX_CMD,     iiIm2Ma , NULL },
    275 //  intmat -> matrix
    276    { INTMAT_CMD,      MATRIX_CMD,     iiIm2Ma , NULL },
    277 //  number -> poly
    278    { NUMBER_CMD,      POLY_CMD,       iiN2P  , NULL },
    279 //  number -> matrix
    280    { NUMBER_CMD,      MATRIX_CMD,     iiN2Ma  , NULL },
    281 //  number -> ideal
    282 //  number -> vector
    283 //  number -> module
    284 //  poly -> number
    285 //  poly -> ideal
    286    { POLY_CMD,        IDEAL_CMD,      iiP2Id , NULL },
    287 //  poly -> vector
    288    { POLY_CMD,        VECTOR_CMD,     iiP2V , NULL },
    289 //  poly -> matrix
    290    { POLY_CMD,        MATRIX_CMD,     iiP2Id , NULL },
    291 //  vector -> module
    292    { VECTOR_CMD,      MODUL_CMD,      iiP2Id , NULL },
    293 //  vector -> matrix
    294    { VECTOR_CMD,      MATRIX_CMD,     iiV2Ma , NULL },
    295 //  ideal -> module
    296    { IDEAL_CMD,       MODUL_CMD,      iiMa2Mo , NULL },
    297 //  ideal -> matrix
    298    { IDEAL_CMD,       MATRIX_CMD,     iiDummy , NULL },
    299 //  module -> matrix
    300    { MODUL_CMD,       MATRIX_CMD,     iiMo2Ma , NULL },
    301 //  matrix -> ideal
    302 //  matrix -> module
    303    { MATRIX_CMD,      MODUL_CMD,      iiMa2Mo , NULL },
    304 //  intvec
    305 //  link
    306    { STRING_CMD,      LINK_CMD,       iiS2Link , NULL },
    307 // resolution -> list
    308    { RESOLUTION_CMD,  LIST_CMD,       NULL /*iiR2L*/ , iiR2L_l },
    309 // list -> resolution
    310    { LIST_CMD,        RESOLUTION_CMD, iiL2R , NULL },
    311 //  end of list
    312    { 0,               0,              NULL , NULL }
    313 };
    314 
     249#define IPCONV
     250#define D(A) A
     251#include <Singular/table.h>
    315252/*2
    316253* try to convert 'input' of type 'inputType' to 'output' of type 'outputType'
  • Singular/mpsr_Tok.cc

    rec58bd r56c789  
    6060}
    6161
    62 #ifdef GENTABLE
    63 // This is the array which holds all mpsr_cmds
    64 // It is initialized in mpsr_tok.inc
    65 static mpsr_cmd mpsr_cmds[MAX_TOK];
    66 
    67 // This is the array which stores the mapping from token to an mpsr_cmd
    68 // A value is either an index into mpsr_cmds, or MAX_TOK
    69 static short tok2mp[MAX_TOK];
    70 
    71 // This is the array which stores the mapping from (dict, cop) to a
    72 // mpsr_cmd. First index mpdict2srdict(dict), second is cop
    73 static short mp2tok[MAX_SR_DICT][MAX_COP];
    74 
    75 #else
    7662// Here are the actual definition of these token tables
    7763#include"mpsr_Tok.inc"
    78 #endif
    7964
    8065
     
    156141}
    157142
    158 
    159 #ifdef GENTABLE
    160 
    161 #include"ipshell.h" // has declarations of dArith
    162 
    163 
    164 // This the list of all tokens which have an MP representation as a
    165 // cop in the Singular dictionary
    166 short sr_cmds[] =
    167 {
    168   OPTION_CMD,
    169   NAMES_CMD,
    170   ATTRIB_CMD,
    171   CHARSTR_CMD,
    172   CLOSE_CMD,
    173   DEF_CMD,
    174   DEGREE_CMD,
    175   DEFINED_CMD,
    176   E_CMD,
    177   EXECUTE_CMD,
    178   FREEMODULE_CMD,
    179   INT_CMD,
    180   INTERRED_CMD,
    181   INTMAT_CMD,
    182   INTVEC_CMD,
    183   IS_RINGVAR,
    184   KILLATTR_CMD,
    185   MAP_CMD,
    186   MEMORY_CMD,
    187   MONITOR_CMD,
    188   NAMEOF_CMD,
    189   NUMBER_CMD,
    190   NPARS_CMD,
    191   NVARS_CMD,
    192   OPEN_CMD,
    193   ORDSTR_CMD,
    194   PAR_CMD,
    195   PARSTR_CMD,
    196   PARDEG_CMD,
    197   POLY_CMD,
    198   PRINT_CMD,
    199   READ_CMD,
    200   SORTVEC_CMD,
    201   STRING_CMD,
    202   SYSTEM_CMD,
    203   TYPEOF_CMD,
    204   VECTOR_CMD,
    205   VAR_CMD,
    206   VARSTR_CMD,
    207   WEIGHT_CMD,
    208   '(',
    209   COEF_CMD,
    210   DELETE_CMD,
    211   FETCH_CMD,
    212   FIND_CMD,
    213   IMAP_CMD,
    214   INSERT_CMD,
    215   SIMPLIFY_CMD,
    216   SRES_CMD,
    217   DBPRINT_CMD,
    218   TEST_CMD,
    219   PROC_CMD,
    220   MSTD_CMD,
    221   RESERVEDNAME_CMD,
    222   WRITE_CMD,
    223   QRING_CMD,
    224   FGLM_CMD,
    225   FGLMQUOT_CMD,
    226   DUMP_CMD,
    227   GETDUMP_CMD,
    228   STATUS_CMD,
    229   LIB_CMD,
    230   PACKAGE_CMD
    231 };
    232 
    233 // struct used for specifying the cmd <-> cop relations
    234 typedef struct cmd_cop
    235 {
    236   short cmd;
    237   MP_Common_t cop;
    238 } cmd_op;
    239 
    240 typedef struct cmd_dictcop
    241 {
    242   MP_DictTag_t  dict;
    243   cmd_op        cmd_ops[255];
    244 } cmd_dictcop;
    245 
    246 cmd_dictcop cmd_dictcops[] =
    247 {
    248   {
    249     MP_PolyDict,
    250     // This is the list of all tokens which have an MP representation as a
    251     // cop in the Poly dictionary
    252     {
    253       {BETTI_CMD, MP_CopPolyBetti},
    254       {CHARACTERISTIC_CMD, MP_CopPolyChar},
    255       {CHAR_SERIES_CMD, MP_CopPolyCharSeries},
    256       {CONTENT_CMD, MP_CopPolyClearDenom },
    257       {DEG_CMD, MP_CopPolyDeg},
    258       {DIM_CMD, MP_CopPolyDim},
    259       {FAC_CMD, MP_CopPolyFactorize},
    260       {FACSTD_CMD, MP_CopPolyFacStd},
    261       {HILBERT_CMD, MP_CopPolyHilb},
    262       {HOMOG_CMD, MP_CopPolyHomog},
    263       {INDEPSET_CMD, MP_CopPolyInDepSet},
    264       {IDEAL_CMD, MP_CopPolyIdeal},
    265       {KBASE_CMD, MP_CopPolyKbase},
    266       {LEAD_CMD, MP_CopPolyLead},
    267       {LEADCOEF_CMD, MP_CopPolyLeadCoef},
    268       {LEADEXP_CMD, MP_CopPolyLeadExp},
    269       {MAXID_CMD, MP_CopPolyMaxIdeal},
    270       {MINBASE_CMD, MP_CopPolyMinBase},
    271       {MINRES_CMD, MP_CopPolyMinRes},
    272       {MODUL_CMD, MP_CopPolyModule},
    273       {MULTIPLICITY_CMD, MP_CopPolyMultiplicity},
    274       {ORD_CMD, MP_CopPolyOrder},
    275       {PRUNE_CMD, MP_CopPolyPrune},
    276       {QHWEIGHT_CMD, MP_CopPolyQHWeight},
    277       {REGULARITY_CMD, MP_CopPolyRegularity},
    278       {RESULTANT_CMD, MP_CopPolyResultant},
    279       {STD_CMD, MP_CopPolyStd},
    280       {SYZYGY_CMD, MP_CopPolySyz},
    281       {VDIM_CMD, MP_CopPolyVdim},
    282       {COEFFS_CMD,  MP_CopPolyCoeffs},
    283       {CONTRACT_CMD, MP_CopPolyContract},
    284       {ELIMINATION_CMD, MP_CopPolyEliminate},
    285       {JET_CMD, MP_CopPolyJet},
    286       {LIFT_CMD, MP_CopPolyLift},
    287       {LIFTSTD_CMD, MP_CopPolyLiftstd},
    288       {MODULO_CMD, MP_CopPolyModulo},
    289       {MRES_CMD, MP_CopPolyMres},
    290       {QUOTIENT_CMD, MP_CopPolyQuotient},
    291       {REDUCE_CMD, MP_CopPolyReduce},
    292       {PREIMAGE_CMD, MP_CopPolyPreimage},
    293       {RES_CMD, MP_CopPolyRes},
    294       {RING_CMD, MP_CopPolyRing},
    295       {MAX_TOK, 0}
    296     }
    297   },
    298   {
    299     MP_NumberDict,
    300     // This is the list of all tokens which have an MP representation as a
    301     // cop in the Number dictionary
    302     {
    303       {PRIME_CMD, MP_CopNumberPrime},
    304       {EXTGCD_CMD, MP_CopNumberExtGcd},
    305       {GCD_CMD, MP_CopNumberGcd},
    306       {RANDOM_CMD, MP_CopNumberRandom},
    307       {MAX_TOK, 0}
    308     }
    309   },
    310   {
    311     MP_MatrixDict,
    312     // This is the list of all tokens which have an MP representation as a
    313     // cop in the Matrix dictionary
    314     {
    315       {BAREISS_CMD, MP_CopMatrixBareiss},
    316       {COLS_CMD, MP_CopMatrixCols},
    317       {DET_CMD, MP_CopMatrixDet},
    318       {JACOB_CMD, MP_CopMatrixJacobi},
    319       {MATRIX_CMD, MP_CopMatrixDenseMatrix},
    320       {ROWS_CMD, MP_CopMatrixRows},
    321       {TRACE_CMD, MP_CopMatrixTrace},
    322       {TRANSPOSE_CMD, MP_CopMatrixTranspose},
    323       {KOSZUL_CMD, MP_CopMatrixKoszul},
    324       {MINOR_CMD, MP_CopMatrixMinor},
    325       {WEDGE_CMD, MP_CopMatrixWedge},
    326       {MAX_TOK, 0}
    327     }
    328   },
    329   {
    330     MP_BasicDict,
    331     // This is the list of all tokens which have an MP representation as a
    332     // cop in the MP Basic dictionary
    333     {
    334       {PLUSPLUS, MP_CopBasicInc},
    335       {MINUSMINUS,  MP_CopBasicDec},
    336       {COUNT_CMD, MP_CopBasicSize},
    337       {LIST_CMD, MP_CopBasicList},
    338       {'+', MP_CopBasicAdd},
    339       {'-', MP_CopBasicMinus},
    340       {'*', MP_CopBasicMult},
    341       {'/', MP_CopBasicDiv},
    342       {'%', MP_CopBasicMod},
    343       {'^', MP_CopBasicPow},
    344       {GE, MP_CopBasicGreaterEqual},
    345       {'<', MP_CopBasicGreater},
    346       {LE, MP_CopBasicLessEqual},
    347       {'>', MP_CopBasicLess},
    348       {'&', MP_CopBasicAnd},
    349       {'|', MP_CopBasicOr},
    350       {'=', MP_CopBasicAssign},
    351       {EQUAL_EQUAL, MP_CopBasicEqual},
    352       {NOTEQUAL, MP_CopBasicNotEqual},
    353       {DOTDOT, MP_CopBasicRange},
    354       {'[', MP_CopBasicIndex},
    355       {DIFF_CMD, MP_CopBasicDiff},
    356       {INTERSECT_CMD, MP_CopBasicInterSect},
    357       {SUBST_CMD, MP_CopBasicSubst},
    358       {NOT, MP_CopBasicNot},
    359       {COLONCOLON, MP_CopBasicPackage},
    360       {MAX_TOK, 0}
    361     }
    362   }
    363 };
    364 
    365 
    366 // Given a Singular token, find matching (dict,op): Return 1 if one is
    367 // found, 0, otherwise
    368 static short GetMPDictTok(short tok, MP_DictTag_t *dict, MP_Common_t *cop)
    369 {
    370   short i, l, j;
    371   cmd_op *cmd_ops;
    372 
    373   // first, look through Singular specific commands
    374   l = sizeof(sr_cmds)/sizeof(short);
    375   if (l > MAX_COP)
    376   {
    377     fprintf(stderr,
    378             "Error: There are more than 256 entries in MP_SingularDict\n");
    379     exit(1);
    380   }
    381   for (i=0; i<l; i++)
    382     if (sr_cmds[i] == tok)
    383     {
    384       *dict = MP_SingularDict;
    385       *cop = i;
    386       return 1;
    387     }
    388 
    389   // look through all the other dicts
    390   for (j=0; j<MAX_SR_DICT-1; j++)
    391   {
    392     cmd_ops = cmd_dictcops[j].cmd_ops;
    393     for (i=0; (cmd_ops[i]).cmd != MAX_TOK; i++)
    394     {
    395       if (i > MAX_COP)
    396       {
    397         fprintf(stderr,
    398                 "Error: There are more than 256 entries in dict %d's\n",j);
    399         exit(1);
    400       }
    401       if (cmd_ops[i].cmd == tok)
    402       {
    403         *dict = cmd_dictcops[j].dict;
    404         *cop = cmd_ops[i].cop;
    405         return 1;
    406       }
    407     }
    408   }
    409   return 0;
    410 }
    411 
    412 
    413 // This actually generates the tables of mpsr_tok.inc
    414 char *mpsr_Tok_inc;
    415 void mpsr_ttGen()
    416 {
    417   mpsr_cmd mpsrcmds[MAX_TOK];
    418   short tok2mp[MAX_TOK];
    419   short mp2tok[MAX_SR_DICT][MAX_COP];
    420   short max_cmd = 0, i, j;
    421   MP_Common_t cop;
    422   FILE *outfile;
    423   MP_DictTag_t dict;
    424 
    425 
    426   // init all arrays
    427   for (i=0; i<MAX_TOK; i++)
    428   {
    429     mpsrcmds[i].tok = MAX_TOK;
    430     tok2mp[i] = MAX_TOK;
    431   }
    432   for (i=0; i<MAX_SR_DICT; i++)
    433     for (j=0; j<MAX_COP; j++)
    434       mp2tok[i][j] = MAX_TOK;
    435 
    436   // Now go through all the token and test them
    437   for (i=0; i<MAX_TOK; i++)
    438   {
    439     if (IsCmdToken(i))
    440     {
    441       if (GetMPDictTok(i, &dict, &cop))
    442       {
    443         mpsrcmds[max_cmd].tok = i;
    444         mpsrcmds[max_cmd].dict = dict;
    445         mpsrcmds[max_cmd].cop = cop;
    446         tok2mp[i] = max_cmd;
    447         mp2tok[mpdict2srdict(dict)][cop] = i;
    448         max_cmd++;
    449       }
    450       else
    451       {
    452         fprintf(stderr, "Warning: mpsr_ttGen: Unknown Cmd Token: %d(%s)\n",
    453                         i, iiTwoOps(i));
    454       }
    455     }
    456   }
    457 
    458   // Generate the template file
    459   mpsr_Tok_inc=omStrDup("mpsr_Tok.xxxxxxxx");
    460   int pid=getpid();
    461   mpsr_Tok_inc[8]=(pid %10)+'0'; pid/=10;
    462   mpsr_Tok_inc[9]=(pid %10)+'0'; pid/=10;
    463   mpsr_Tok_inc[10]=(pid %10)+'0'; pid/=10;
    464   mpsr_Tok_inc[11]=(pid %10)+'0'; pid/=10;
    465   mpsr_Tok_inc[12]=(pid %10)+'0'; pid/=10;
    466   mpsr_Tok_inc[13]=(pid %10)+'0';
    467 
    468   outfile = myfopen(mpsr_Tok_inc, "w");
    469   if (outfile == NULL)
    470   {
    471     fprintf(stderr, "Error: mpsr_ttGen: Cannot open file mpsr_Tok.inc\n");
    472     exit(1);
    473   }
    474 
    475   // header
    476   fprintf(outfile,
    477    "/***************************************************************\n"
    478    "*\n"
    479    "* File:       mpsr_tok.inc\n"
    480    "* Purpose:    tables for mapping Singular cmds to/from MP (dict, op)\n"
    481    "*\n"
    482    "* THIS FILE WAS AUTOMATICALLY GENERATED BY mpsr_ttGen(). DO NOT EDIT!\n"
    483    "*\n"
    484    "***************************************************************/\n"
    485    "#ifndef MPSR_STRING_TABLES\n"
    486    "mpsr_cmd mpsr_cmds[] =\n"
    487    "{\n"
    488    "  { %d,\t %d,\t %d }", mpsrcmds[0].tok, mpsrcmds[0].dict, mpsrcmds[0].cop);
    489 
    490   // mpsrcmds
    491   for (i=1; i<max_cmd; i++)
    492   {
    493     fprintf(outfile, ",\n  { %d,\t %d,\t %d }",
    494             mpsrcmds[i].tok, mpsrcmds[i].dict, mpsrcmds[i].cop);
    495   }
    496   fprintf(outfile,"\n};\n\n");
    497 
    498   // tok2mp
    499   fprintf(outfile, "short tok2mp[] = { %d", tok2mp[0]);
    500   for (i=1; i<MAX_TOK; i++)
    501     fprintf(outfile, ", %d", tok2mp[i]);
    502   fprintf(outfile, "};\n\n");
    503 
    504   // mp2tok
    505   fprintf(outfile, "short mp2tok[MAX_SR_DICT][MAX_COP] = \n{");
    506   for (i=0; i<MAX_SR_DICT; i++)
    507   {
    508     fprintf(outfile, "\n{\n");
    509     for (j=0; j<MAX_COP; j++)
    510     {
    511       fprintf(outfile, " %d",mp2tok[i][j]);
    512       if  (j!=MAX_COP-1) fprintf(outfile, ",");
    513     }
    514     if (i!=MAX_SR_DICT-1) fprintf(outfile, "},");
    515     else                  fprintf(outfile, "}");
    516   }
    517   fprintf(outfile,"\n};\n\n");
    518 
    519   fprintf(outfile, "#else /* MPSR_STRING_TABLE */\n"
    520     "mpsr_cmd mpsr_cmds[] =\n"
    521     "{\n"
    522     "{ \"%s\",\t %d,\t %d }",
    523     iiTwoOps(mpsrcmds[0].tok), mpsrcmds[0].dict, mpsrcmds[0].cop);
    524 
    525   for (i=1; i<max_cmd; i++)
    526   {
    527     fprintf(outfile, ",\n  { \"%s\",\t %d,\t %d }",
    528             iiTwoOps(mpsrcmds[i].tok), mpsrcmds[i].dict, mpsrcmds[i].cop);
    529   }
    530   fprintf(outfile, ",\n { NULL, \t 0, \t 0}");
    531   fprintf(outfile,"\n};\n\n#endif /* ! MPSR_STRING_TABLE */");
    532 
    533   fclose(outfile);
    534 } // That's all
    535 
    536 #endif // GENTABLE
    537 
    538 #else // NOT HAVE_MPSR
    539 
    540 #ifdef GENTABLE
    541 
    542 // simply touch mpsr_Tok.inc so that Make does not get confused
    543 #if !defined(HPUX_9)
    544 extern "C" int system(char *);
    545 #else
    546 #include <stdio.h>
    547 #endif
    548 
    549 void mpsr_ttGen()
    550 {
    551   system("touch mpsr_Tok.xx");
    552 }
    553 #endif
    554 
    555143#endif // HAVE_MPSR
Note: See TracChangeset for help on using the changeset viewer.