Skip to content
Snippets Groups Projects
Gmsh.tab.cpp 270 KiB
Newer Older
    break;}
case 266:
#line 2904 "Gmsh.y"
{ yyval.d = sqrt(yyvsp[-3].d*yyvsp[-3].d+yyvsp[-1].d*yyvsp[-1].d); ;
    break;}
case 267:
#line 2905 "Gmsh.y"
{ yyval.d = yyvsp[-1].d*(double)rand()/(double)RAND_MAX; ;
    break;}
case 268:
#line 2907 "Gmsh.y"
{ yyval.d = exp(yyvsp[-1].d);      ;
    break;}
case 269:
#line 2908 "Gmsh.y"
{ yyval.d = log(yyvsp[-1].d);      ;
    break;}
case 270:
#line 2909 "Gmsh.y"
{ yyval.d = log10(yyvsp[-1].d);    ;
    break;}
case 271:
{ yyval.d = sqrt(yyvsp[-1].d);     ;
    break;}
case 272:
{ yyval.d = sin(yyvsp[-1].d);      ;
    break;}
case 273:
{ yyval.d = asin(yyvsp[-1].d);     ;
    break;}
case 274:
{ yyval.d = cos(yyvsp[-1].d);      ;
    break;}
case 275:
{ yyval.d = acos(yyvsp[-1].d);     ;
    break;}
case 276:
{ yyval.d = tan(yyvsp[-1].d);      ;
    break;}
case 277:
{ yyval.d = atan(yyvsp[-1].d);     ;
    break;}
case 278:
{ yyval.d = atan2(yyvsp[-3].d, yyvsp[-1].d);;
    break;}
case 279:
#line 2918 "Gmsh.y"
{ yyval.d = sinh(yyvsp[-1].d);     ;
    break;}
case 280:
#line 2919 "Gmsh.y"
{ yyval.d = cosh(yyvsp[-1].d);     ;
    break;}
case 281:
#line 2920 "Gmsh.y"
{ yyval.d = tanh(yyvsp[-1].d);     ;
    break;}
case 282:
#line 2921 "Gmsh.y"
{ yyval.d = fabs(yyvsp[-1].d);     ;
    break;}
case 283:
#line 2922 "Gmsh.y"
{ yyval.d = floor(yyvsp[-1].d);    ;
    break;}
case 284:
#line 2923 "Gmsh.y"
{ yyval.d = ceil(yyvsp[-1].d);     ;
    break;}
case 285:
#line 2924 "Gmsh.y"
{ yyval.d = fmod(yyvsp[-3].d, yyvsp[-1].d); ;
    break;}
case 286:
#line 2925 "Gmsh.y"
{ yyval.d = fmod(yyvsp[-3].d, yyvsp[-1].d); ;
    break;}
case 287:
#line 2926 "Gmsh.y"
{ yyval.d = sqrt(yyvsp[-3].d*yyvsp[-3].d+yyvsp[-1].d*yyvsp[-1].d); ;
    break;}
case 288:
#line 2927 "Gmsh.y"
{ yyval.d = yyvsp[-1].d*(double)rand()/(double)RAND_MAX; ;
    break;}
case 289:
#line 2936 "Gmsh.y"
{ yyval.d = yyvsp[0].d; ;
    break;}
case 290:
#line 2937 "Gmsh.y"
{ yyval.d = 3.141592653589793; ;
    break;}
case 291:
#line 2938 "Gmsh.y"
{ yyval.d = ParUtil::Instance()->rank(); ;
    break;}
case 292:
{ yyval.d = ParUtil::Instance()->size(); ;
    break;}
case 293:
#line 2940 "Gmsh.y"
{ yyval.d = Get_GmshMajorVersion(); ;
    break;}
case 294:
#line 2941 "Gmsh.y"
{ yyval.d = Get_GmshMinorVersion(); ;
    break;}
case 295:
#line 2942 "Gmsh.y"
{ yyval.d = Get_GmshPatchVersion(); ;
    break;}
case 296:
#line 2947 "Gmsh.y"
{
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      Symbol TheSymbol;
      TheSymbol.Name = yyvsp[0].c;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      Symbol *pSymbol;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) {
	yymsg(GERROR, "Unknown variable '%s'", yyvsp[0].c);
	yyval.d = 0.;
	yyval.d = *(double*)List_Pointer_Fast(pSymbol->val, 0);
      Free(yyvsp[0].c);
    ;
    break;}
case 297:
#line 2963 "Gmsh.y"
{
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      char tmpstring[1024];
      sprintf(tmpstring, "%s_%d", yyvsp[-4].c, (int)yyvsp[-1].d) ;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      Symbol TheSymbol;
      TheSymbol.Name = tmpstring;
      Symbol *pSymbol;
      if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) {
	yymsg(GERROR, "Unknown variable '%s'", tmpstring);
	yyval.d = 0.;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      }
      else
	yyval.d = *(double*)List_Pointer_Fast(pSymbol->val, 0);
      Free(yyvsp[-4].c);
    ;
    break;}
case 298:
#line 2978 "Gmsh.y"
{
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      Symbol TheSymbol;
      TheSymbol.Name = yyvsp[-3].c;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      Symbol *pSymbol;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) {
	yymsg(GERROR, "Unknown variable '%s'", yyvsp[-3].c);
	yyval.d = 0.;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	double *pd;
	if((pd = (double*)List_Pointer_Test(pSymbol->val, (int)yyvsp[-1].d)))
	  yyval.d = *pd;
	  yymsg(GERROR, "Uninitialized variable '%s[%d]'", yyvsp[-3].c, (int)yyvsp[-1].d);
	  yyval.d = 0.;
      Free(yyvsp[-3].c);
    ;
    break;}
case 299:
#line 2998 "Gmsh.y"
{
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      Symbol TheSymbol;
      TheSymbol.Name = yyvsp[-2].c;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      Symbol *pSymbol;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) {
	yymsg(GERROR, "Unknown variable '%s'", yyvsp[-2].c);
	yyval.d = 0.;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      }
      else{
	yyval.d = List_Nbr(pSymbol->val);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      }
      Free(yyvsp[-2].c);
    ;
    break;}
case 300:
#line 3012 "Gmsh.y"
{
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      Symbol TheSymbol;
      TheSymbol.Name = yyvsp[-1].c;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      Symbol *pSymbol;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) {
	yymsg(GERROR, "Unknown variable '%s'", yyvsp[-1].c);
	yyval.d = 0.;
	yyval.d = (*(double*)List_Pointer_Fast(pSymbol->val, 0) += yyvsp[0].i);
      Free(yyvsp[-1].c);
    ;
    break;}
case 301:
#line 3025 "Gmsh.y"
{
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      Symbol TheSymbol;
      TheSymbol.Name = yyvsp[-4].c;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      Symbol *pSymbol;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) {
	yymsg(GERROR, "Unknown variable '%s'", yyvsp[-4].c);
	yyval.d = 0.;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	double *pd;
	if((pd = (double*)List_Pointer_Test(pSymbol->val, (int)yyvsp[-2].d)))
	  yyval.d = (*pd += yyvsp[0].i);
	  yymsg(GERROR, "Uninitialized variable '%s[%d]'", yyvsp[-4].c, (int)yyvsp[-2].d);
	  yyval.d = 0.;
      Free(yyvsp[-4].c);
    ;
    break;}
case 302:
#line 3048 "Gmsh.y"
{
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      double (*pNumOpt)(int num, int action, double value);
      StringXNumber *pNumCat;
      if(!(pNumCat = Get_NumberOptionCategory(yyvsp[-2].c))){
	yymsg(GERROR, "Unknown numeric option class '%s'", yyvsp[-2].c);
	yyval.d = 0.;
	if(!(pNumOpt =  (double (*) (int, int, double))Get_NumberOption(yyvsp[0].c, pNumCat))){
	  yymsg(GERROR, "Unknown numeric option '%s.%s'", yyvsp[-2].c, yyvsp[0].c);
	  yyval.d = 0.;
	  yyval.d = pNumOpt(0, GMSH_GET, 0);
      Free(yyvsp[-2].c); Free(yyvsp[0].c);
    ;
    break;}
case 303:
#line 3066 "Gmsh.y"
{
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      double (*pNumOpt)(int num, int action, double value);
      StringXNumber *pNumCat;
      if(!(pNumCat = Get_NumberOptionCategory(yyvsp[-5].c))){
	yymsg(GERROR, "Unknown numeric option class '%s'", yyvsp[-5].c);
	yyval.d = 0.;
	if(!(pNumOpt =  (double (*) (int, int, double))Get_NumberOption(yyvsp[0].c, pNumCat))){
	  yymsg(GERROR, "Unknown numeric option '%s[%d].%s'", yyvsp[-5].c, (int)yyvsp[-3].d, yyvsp[0].c);
	  yyval.d = 0.;
	  yyval.d = pNumOpt((int)yyvsp[-3].d, GMSH_GET, 0);
      Free(yyvsp[-5].c); Free(yyvsp[0].c);
    ;
    break;}
case 304:
#line 3084 "Gmsh.y"
{
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      double (*pNumOpt)(int num, int action, double value);
      StringXNumber *pNumCat;
      if(!(pNumCat = Get_NumberOptionCategory(yyvsp[-3].c))){
	yymsg(GERROR, "Unknown numeric option class '%s'", yyvsp[-3].c);
	yyval.d = 0.;
	if(!(pNumOpt =  (double (*) (int, int, double))Get_NumberOption(yyvsp[-1].c, pNumCat))){
	  yymsg(GERROR, "Unknown numeric option '%s.%s'", yyvsp[-3].c, yyvsp[-1].c);
	  yyval.d = 0.;
	  yyval.d = pNumOpt(0, GMSH_SET|GMSH_GUI, pNumOpt(0, GMSH_GET, 0)+yyvsp[0].i);
      Free(yyvsp[-3].c); Free(yyvsp[-1].c);
    ;
    break;}
case 305:
#line 3102 "Gmsh.y"
{
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      double (*pNumOpt)(int num, int action, double value);
      StringXNumber *pNumCat;
      if(!(pNumCat = Get_NumberOptionCategory(yyvsp[-6].c))){
	yymsg(GERROR, "Unknown numeric option class '%s'", yyvsp[-6].c);
	yyval.d = 0.;
	if(!(pNumOpt =  (double (*) (int, int, double))Get_NumberOption(yyvsp[-1].c, pNumCat))){
	  yymsg(GERROR, "Unknown numeric option '%s[%d].%s'", yyvsp[-6].c, (int)yyvsp[-4].d, yyvsp[-1].c);
	  yyval.d = 0.;
	  yyval.d = pNumOpt((int)yyvsp[-4].d, GMSH_SET|GMSH_GUI, pNumOpt((int)yyvsp[-4].d, GMSH_GET, 0)+yyvsp[0].i);
      Free(yyvsp[-6].c); Free(yyvsp[-1].c);
    ;
    break;}
case 306:
{ 
      yyval.d = GetValue(yyvsp[-3].c, yyvsp[-1].d);
      Free(yyvsp[-3].c);
    ;
    break;}
case 307:
{
      memcpy(yyval.v, yyvsp[0].v, 5*sizeof(double));
    ;
    break;}
case 308:
{
      for(int i = 0; i < 5; i++) yyval.v[i] = -yyvsp[0].v[i];
    ;
    break;}
case 309:
{ 
      for(int i = 0; i < 5; i++) yyval.v[i] = yyvsp[0].v[i];
    ;
    break;}
case 310:
#line 3140 "Gmsh.y"
{ 
      for(int i = 0; i < 5; i++) yyval.v[i] = yyvsp[-2].v[i] - yyvsp[0].v[i];
    ;
    break;}
case 311:
#line 3144 "Gmsh.y"
{
      for(int i = 0; i < 5; i++) yyval.v[i] = yyvsp[-2].v[i] + yyvsp[0].v[i];
    ;
    break;}
case 312:
{ 
      yyval.v[0] = yyvsp[-9].d;  yyval.v[1] = yyvsp[-7].d;  yyval.v[2] = yyvsp[-5].d;  yyval.v[3] = yyvsp[-3].d; yyval.v[4] = yyvsp[-1].d;
    ;
    break;}
case 313:
{ 
      yyval.v[0] = yyvsp[-7].d;  yyval.v[1] = yyvsp[-5].d;  yyval.v[2] = yyvsp[-3].d;  yyval.v[3] = yyvsp[-1].d; yyval.v[4] = 1.0;
    ;
    break;}
case 314:
#line 3159 "Gmsh.y"
{
      yyval.v[0] = yyvsp[-5].d;  yyval.v[1] = yyvsp[-3].d;  yyval.v[2] = yyvsp[-1].d;  yyval.v[3] = 0.0; yyval.v[4] = 1.0;
    ;
    break;}
case 315:
#line 3163 "Gmsh.y"
{
      yyval.v[0] = yyvsp[-5].d;  yyval.v[1] = yyvsp[-3].d;  yyval.v[2] = yyvsp[-1].d;  yyval.v[3] = 0.0; yyval.v[4] = 1.0;
    ;
    break;}
case 316:
#line 3170 "Gmsh.y"
{
      yyval.l = List_Create(2, 1, sizeof(List_T*));
      List_Add(yyval.l, &(yyvsp[0].l));
    ;
    break;}
case 317:
{
      List_Add(yyval.l, &(yyvsp[0].l));
    ;
    break;}
case 318:
#line 3183 "Gmsh.y"
{
      yyval.l = List_Create(2, 1, sizeof(double));
      List_Add(yyval.l, &(yyvsp[0].d));
    ;
    break;}
case 319:
#line 3188 "Gmsh.y"
{
      yyval.l = yyvsp[0].l;
    ;
    break;}
case 320:
#line 3192 "Gmsh.y"
{
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      // creates an empty list
      yyval.l = List_Create(2, 1, sizeof(double));
    ;
    break;}
case 321:
#line 3197 "Gmsh.y"
{
      yyval.l = yyvsp[-1].l;
    ;
    break;}
case 322:
{
      yyval.l = yyvsp[-1].l;
      for(int i = 0; i < List_Nbr(yyval.l); i++){
	double *pd = (double*)List_Pointer(yyval.l, i);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	(*pd) = - (*pd);
      }
    ;
    break;}
case 323:
#line 3209 "Gmsh.y"
{
      yyval.l = yyvsp[-1].l;
      for(int i = 0; i < List_Nbr(yyval.l); i++){
	double *pd = (double*)List_Pointer(yyval.l, i);
	(*pd) *= yyvsp[-4].d;
      }
    ;
    break;}
case 324:
{
      yyval.l = yyvsp[0].l;
      for(int i = 0; i < List_Nbr(yyval.l); i++){
	double *pd = (double*)List_Pointer(yyval.l, i);
	(*pd) = - (*pd);
    ;
    break;}
case 325:
{
      yyval.l = yyvsp[0].l;
      for(int i = 0; i < List_Nbr(yyval.l); i++){
	double *pd = (double*)List_Pointer(yyval.l, i);
	(*pd) *= yyvsp[-2].d;
      }
    ;
    break;}
case 326:
#line 3236 "Gmsh.y"
{ 
      yyval.l = List_Create(2, 1, sizeof(double)); 
      for(double d = yyvsp[-2].d; (yyvsp[-2].d < yyvsp[0].d) ? (d <= yyvsp[0].d) : (d >= yyvsp[0].d); (yyvsp[-2].d < yyvsp[0].d) ? (d += 1.) : (d -= 1.)) 
	List_Add(yyval.l, &d);
    ;
    break;}
case 327:
#line 3242 "Gmsh.y"
{
      yyval.l = List_Create(2, 1, sizeof(double)); 
      if(!yyvsp[0].d || (yyvsp[-4].d < yyvsp[-2].d && yyvsp[0].d < 0) || (yyvsp[-4].d > yyvsp[-2].d && yyvsp[0].d > 0)){
        yymsg(GERROR, "Wrong increment in '%g:%g:%g'", yyvsp[-4].d, yyvsp[-2].d, yyvsp[0].d);
	List_Add(yyval.l, &(yyvsp[-4].d));
	for(double d = yyvsp[-4].d; (yyvsp[0].d > 0) ? (d <= yyvsp[-2].d) : (d >= yyvsp[-2].d); d += yyvsp[0].d)
	  List_Add(yyval.l, &d);
   ;
    break;}
case 328:
#line 3253 "Gmsh.y"
{
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      // Returns the coordinates of a point and fills a list with it.
      // This allows to ensure e.g. that relative point positions are
      // always conserved
      Vertex *v = FindPoint((int)yyvsp[-1].d);
      yyval.l = List_Create(3, 1, sizeof(double));      
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      if(!v) {
	yymsg(GERROR, "Unknown point '%d'", (int) yyvsp[-1].d);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	double d = 0.0;
	List_Add(yyval.l, &d);
	List_Add(yyval.l, &d);
	List_Add(yyval.l, &d);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      }
      else{
	List_Add(yyval.l, &v->Pos.X);
	List_Add(yyval.l, &v->Pos.Y);
	List_Add(yyval.l, &v->Pos.Z);
      }
    ;
    break;}
case 329:
#line 3273 "Gmsh.y"
{
      yyval.l = List_Create(List_Nbr(yyvsp[0].l), 1, sizeof(double));
      for(int i = 0; i < List_Nbr(yyvsp[0].l); i++){
	Shape *s = (Shape*) List_Pointer(yyvsp[0].l, i);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	double d = s->Num;
	List_Add(yyval.l, &d);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      }
      List_Delete(yyvsp[0].l);
    ;
    break;}
case 330:
#line 3283 "Gmsh.y"
{
      yyval.l = List_Create(List_Nbr(yyvsp[0].l), 1, sizeof(double));
      for(int i = 0; i < List_Nbr(yyvsp[0].l); i++){
	Shape *s = (Shape*) List_Pointer(yyvsp[0].l, i);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	double d = s->Num;
	List_Add(yyval.l, &d);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      }
      List_Delete(yyvsp[0].l);
    ;
    break;}
case 331:
#line 3293 "Gmsh.y"
{
      yyval.l = List_Create(List_Nbr(yyvsp[0].l), 1, sizeof(double));
      for(int i = 0; i < List_Nbr(yyvsp[0].l); i++){
	Shape *s = (Shape*) List_Pointer(yyvsp[0].l, i);
	List_Add(yyval.l, &d);
      List_Delete(yyvsp[0].l);
    ;
    break;}
case 332:
#line 3303 "Gmsh.y"
{
      yyval.l = List_Create(2, 1, sizeof(double));
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      Symbol TheSymbol;
      TheSymbol.Name = yyvsp[-2].c;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      Symbol *pSymbol;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) {
	yymsg(GERROR, "Unknown variable '%s'", yyvsp[-2].c);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	double d = 0.0;
	List_Add(yyval.l, &d);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	for(int i = 0; i < List_Nbr(pSymbol->val); i++)
	  List_Add(yyval.l, (double*)List_Pointer_Fast(pSymbol->val, i));
      Free(yyvsp[-2].c);
    ;
    break;}
case 333:
#line 3320 "Gmsh.y"
{
      yyval.l = List_Create(2, 1, sizeof(double));
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      Symbol TheSymbol;
      TheSymbol.Name = yyvsp[-5].c;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      Symbol *pSymbol;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) {
	yymsg(GERROR, "Unknown variable '%s'", yyvsp[-5].c);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	double d = 0.0;
	List_Add(yyval.l, &d);
	for(int i = 0; i < List_Nbr(yyvsp[-2].l); i++){
	  int j = (int)(*(double*)List_Pointer_Fast(yyvsp[-2].l, i));
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	  double *pd;
	  if((pd = (double*)List_Pointer_Test(pSymbol->val, j)))
	    List_Add(yyval.l, pd);
	    yymsg(GERROR, "Uninitialized variable '%s[%d]'", yyvsp[-5].c, j);	  
      Free(yyvsp[-5].c);
      List_Delete(yyvsp[-2].l);
    ;
    break;}
case 334:
#line 3347 "Gmsh.y"
{
      yyval.l = List_Create(2, 1, sizeof(double));
      List_Add(yyval.l, &(yyvsp[0].d));
    ;
    break;}
case 335:
{
      yyval.l = yyvsp[0].l;
    ;
    break;}
case 336:
#line 3356 "Gmsh.y"
{
      List_Add(yyval.l, &(yyvsp[0].d));
    ;
    break;}
case 337:
#line 3360 "Gmsh.y"
{
      for(int i = 0; i < List_Nbr(yyvsp[0].l); i++){
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	double d;
	List_Read(yyvsp[0].l, i, &d);
	List_Add(yyval.l, &d);
      }
      List_Delete(yyvsp[0].l);
    ;
    break;}
case 338:
#line 3373 "Gmsh.y"
{
      yyval.u = CTX.PACK_COLOR((int)yyvsp[-7].d, (int)yyvsp[-5].d, (int)yyvsp[-3].d, (int)yyvsp[-1].d);
    ;
    break;}
case 339:
#line 3377 "Gmsh.y"
{
      yyval.u = CTX.PACK_COLOR((int)yyvsp[-5].d, (int)yyvsp[-3].d, (int)yyvsp[-1].d, 255);
    ;
    break;}
case 340:
#line 3389 "Gmsh.y"
{
      yyval.u = Get_ColorForString(ColorString, -1, yyvsp[0].c, &flag);
      if(flag) yymsg(GERROR, "Unknown color '%s'", yyvsp[0].c);
      Free(yyvsp[0].c);
    ;
    break;}
case 341:
#line 3396 "Gmsh.y"
{
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      unsigned int (*pColOpt)(int num, int action, unsigned int value);
      StringXColor *pColCat;
      if(!(pColCat = Get_ColorOptionCategory(yyvsp[-4].c))){
	yymsg(GERROR, "Unknown color option class '%s'", yyvsp[-4].c);
	yyval.u = 0;
	if(!(pColOpt =  (unsigned int (*) (int, int, unsigned int))Get_ColorOption(yyvsp[0].c, pColCat))){
	  yymsg(GERROR, "Unknown color option '%s.Color.%s'", yyvsp[-4].c, yyvsp[0].c);
	  yyval.u = 0;
	  yyval.u = pColOpt(0, GMSH_GET, 0);
      Free(yyvsp[-4].c); Free(yyvsp[0].c);
    ;
    break;}
case 342:
#line 3418 "Gmsh.y"
{
      yyval.l = yyvsp[-1].l;
    ;
    break;}
case 343:
#line 3422 "Gmsh.y"
{
      yyval.l = List_Create(256, 10, sizeof(unsigned int));
      GmshColorTable *ct = Get_ColorTable((int)yyvsp[-3].d);
	yymsg(GERROR, "View[%d] does not exist", (int)yyvsp[-3].d);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	for(int i = 0; i < ct->size; i++) 
	  List_Add(yyval.l, &ct->table[i]);
      Free(yyvsp[-5].c);
    ;
    break;}
case 344:
#line 3437 "Gmsh.y"
{
      yyval.l = List_Create(256, 10, sizeof(unsigned int));
      List_Add(yyval.l, &(yyvsp[0].u));
    ;
    break;}
case 345:
#line 3442 "Gmsh.y"
{
      List_Add(yyval.l, &(yyvsp[0].u));
    ;
    break;}
case 346:
#line 3449 "Gmsh.y"
{
      yyval.c = yyvsp[0].c;
    ;
    break;}
case 347:
#line 3453 "Gmsh.y"
{
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      Msg(WARNING, "Named string expressions not implemented yet");
    ;
    break;}
case 348:
#line 3460 "Gmsh.y"
{
      yyval.c = yyvsp[0].c;
    ;
    break;}
case 349:
#line 3464 "Gmsh.y"
{
      yyval.c = (char *)Malloc(32*sizeof(char));
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      time_t now;
      time(&now);
      strcpy(yyval.c, ctime(&now));
      yyval.c[strlen(yyval.c) - 1] = '\0';
    ;
    break;}
case 350:
{
      yyval.c = (char *)Malloc((strlen(yyvsp[-3].c)+strlen(yyvsp[-1].c)+1)*sizeof(char));
      strcpy(yyval.c, yyvsp[-3].c);
      strcat(yyval.c, yyvsp[-1].c);
      Free(yyvsp[-3].c);
      Free(yyvsp[-1].c);
    ;
    break;}
case 351:
#line 3480 "Gmsh.y"
{
      yyval.c = (char *)Malloc((strlen(yyvsp[-1].c)+1)*sizeof(char));
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      int i;
      for(i = strlen(yyvsp[-1].c)-1; i >= 0; i--){
	if(yyvsp[-1].c[i] == '.'){
	  strncpy(yyval.c, yyvsp[-1].c, i);
	  yyval.c[i]='\0';
      if(i <= 0) strcpy(yyval.c, yyvsp[-1].c);
      Free(yyvsp[-1].c);
    ;
    break;}
case 352:
#line 3494 "Gmsh.y"
{
      yyval.c = (char *)Malloc((strlen(yyvsp[-1].c)+1)*sizeof(char));
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      int i;
      for(i = strlen(yyvsp[-1].c)-1; i >= 0; i--){
	if(yyvsp[-1].c[i] == '/' || yyvsp[-1].c[i] == '\\')
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	  break;
      }
      if(i <= 0)
	strcpy(yyval.c, yyvsp[-1].c);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      else
	strcpy(yyval.c, &yyvsp[-1].c[i+1]);
      Free(yyvsp[-1].c);
    ;
    break;}
case 353:
#line 3508 "Gmsh.y"
{
      yyval.c = yyvsp[-1].c;
    ;
    break;}
case 354:
#line 3512 "Gmsh.y"
{
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      char tmpstring[1024];
      int i = PrintListOfDouble(yyvsp[-3].c, yyvsp[-1].l, tmpstring);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      if(i < 0){
	yymsg(GERROR, "Too few arguments in Sprintf");
	yyval.c = yyvsp[-3].c;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      else if(i > 0){
	yymsg(GERROR, "%d extra argument%s in Sprintf", i, (i>1)?"s":"");
	yyval.c = yyvsp[-3].c;
	yyval.c = (char*)Malloc((strlen(tmpstring)+1)*sizeof(char));
	strcpy(yyval.c, tmpstring);
	Free(yyvsp[-3].c);
      }
      List_Delete(yyvsp[-1].l);
    ;
    break;}
case 355:
#line 3531 "Gmsh.y"
{ 
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      char* (*pStrOpt)(int num, int action, char *value);
      StringXString *pStrCat;
      if(!(pStrCat = Get_StringOptionCategory(yyvsp[-3].c))){
	yymsg(GERROR, "Unknown string option class '%s'", yyvsp[-3].c);
	yyval.c = (char*)Malloc(sizeof(char));
	yyval.c[0] = '\0';
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      }
	if(!(pStrOpt = (char *(*) (int, int, char *))Get_StringOption(yyvsp[-1].c, pStrCat))){
	  yymsg(GERROR, "Unknown string option '%s.%s'", yyvsp[-3].c, yyvsp[-1].c);
	  yyval.c = (char*)Malloc(sizeof(char));
	  yyval.c[0] = '\0';
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	  char *str = pStrOpt(0, GMSH_GET, NULL);
	  yyval.c = (char*)Malloc((strlen(str)+1)*sizeof(char));
	  strcpy(yyval.c, str);
    ;
    break;}
case 356:
#line 3553 "Gmsh.y"
{ 
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      char* (*pStrOpt)(int num, int action, char *value);
      StringXString *pStrCat;
      if(!(pStrCat = Get_StringOptionCategory(yyvsp[-6].c))){
	yymsg(GERROR, "Unknown string option class '%s'", yyvsp[-6].c);
	yyval.c = (char*)Malloc(sizeof(char));
	yyval.c[0] = '\0';
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      }
	if(!(pStrOpt = (char *(*) (int, int, char *))Get_StringOption(yyvsp[-1].c, pStrCat))){
	  yymsg(GERROR, "Unknown string option '%s[%d].%s'", yyvsp[-6].c, (int)yyvsp[-4].d, yyvsp[-1].c);
	  yyval.c = (char*)Malloc(sizeof(char));
	  yyval.c[0] = '\0';
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	}
	  char *str = pStrOpt((int)yyvsp[-4].d, GMSH_GET, NULL);
	  yyval.c = (char*)Malloc((strlen(str)+1)*sizeof(char));
	  strcpy(yyval.c, str);
    ;
    break;}
}
   /* the action file gets copied in in place of this dollarsign */
#line 543 "/usr/share/bison.simple"

  yyvsp -= yylen;
  yyssp -= yylen;
#ifdef YYLSP_NEEDED
  yylsp -= yylen;
#endif
#if YYDEBUG != 0
  if (yydebug)
    {
      short *ssp1 = yyss - 1;
      fprintf (stderr, "state stack now");
      while (ssp1 != yyssp)
	fprintf (stderr, " %d", *++ssp1);
      fprintf (stderr, "\n");
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    }
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed

#ifdef YYLSP_NEEDED
  yylsp++;
  if (yylen == 0)
    {
      yylsp->first_line = yylloc.first_line;
      yylsp->first_column = yylloc.first_column;
      yylsp->last_line = (yylsp-1)->last_line;
      yylsp->last_column = (yylsp-1)->last_column;
      yylsp->text = 0;
    }
  else
    {
      yylsp->last_line = (yylsp+yylen-1)->last_line;
      yylsp->last_column = (yylsp+yylen-1)->last_column;
    }
#endif
  /* Now "shift" the result of the reduction.
     Determine what state that goes to,
     based on the state we popped back to
     and the rule number reduced by.  */
  yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
  if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
    yystate = yydefgoto[yyn - YYNTBASE];
yyerrlab:   /* here on detecting error */
  if (! yyerrstatus)
    /* If not already recovering from an error, report this error.  */
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed

#ifdef YYERROR_VERBOSE
      yyn = yypact[yystate];
      if (yyn > YYFLAG && yyn < YYLAST)
	{
	  int size = 0;
	  char *msg;
	  int x, count;

	  count = 0;
	  /* Start X at -yyn if nec to avoid negative indexes in yycheck.  */
	  for (x = (yyn < 0 ? -yyn : 0);
	       x < (sizeof(yytname) / sizeof(char *)); x++)
	    if (yycheck[x + yyn] == x)
	      size += strlen(yytname[x]) + 15, count++;
	  msg = (char *) malloc(size + 15);
	  if (msg != 0)
	    {
	      strcpy(msg, "parse error");

	      if (count < 5)
		{
		  count = 0;
		  for (x = (yyn < 0 ? -yyn : 0);
		       x < (sizeof(yytname) / sizeof(char *)); x++)
		    if (yycheck[x + yyn] == x)
		      {
			strcat(msg, count == 0 ? ", expecting `" : " or `");
			strcat(msg, yytname[x]);
			strcat(msg, "'");
			count++;
		      }
		}
	      yyerror(msg);
	      free(msg);
	    }
	  else
	    yyerror ("parse error; also virtual memory exceeded");
	}
      else
#endif /* YYERROR_VERBOSE */
	yyerror("parse error");
    }
  goto yyerrlab1;
yyerrlab1:   /* here on error raised explicitly by an action */
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed

      /* if just tried and failed to reuse lookahead token after an error, discard it.  */
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed

      /* return failure if at end of input */
      if (yychar == YYEOF)
	YYABORT;

#if YYDEBUG != 0
      if (yydebug)
	fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]);
#endif

      yychar = YYEMPTY;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed

  /* Else will try to reuse lookahead token
     after shifting the error token.  */
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed

  yyerrstatus = 3;		/* Each real token shifted decrements this */
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed

  goto yyerrhandle;
yyerrdefault:  /* current state does not do anything special for the error token. */
#if 0
  /* This is wrong; only states that explicitly want error tokens
     should shift them.  */
  yyn = yydefact[yystate];  /* If its default is to accept any token, ok.  Otherwise pop it.*/
  if (yyn) goto yydefault;
#endif
yyerrpop:   /* pop the current state because it cannot handle the error token */
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed

  if (yyssp == yyss) YYABORT;
  yyvsp--;
  yystate = *--yyssp;
#ifdef YYLSP_NEEDED
  yylsp--;
#endif
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed

#if YYDEBUG != 0
  if (yydebug)
      short *ssp1 = yyss - 1;
      fprintf (stderr, "Error: state stack now");
      while (ssp1 != yyssp)
	fprintf (stderr, " %d", *++ssp1);
      fprintf (stderr, "\n");
    }
#endif
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed

yyerrhandle:

  yyn = yypact[yystate];
  if (yyn == YYFLAG)
    goto yyerrdefault;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed

  yyn += YYTERROR;
  if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
    goto yyerrdefault;
  yyn = yytable[yyn];
  if (yyn < 0)
    {
      if (yyn == YYFLAG)
	goto yyerrpop;
      yyn = -yyn;
      goto yyreduce;