Skip to content
Snippets Groups Projects
Commit 46894a41 authored by Christophe Geuzaine's avatar Christophe Geuzaine
Browse files

nouvelle gestion des options

parent 21c83e02
No related branches found
No related tags found
No related merge requests found
/* $Id: Context.cpp,v 1.13 2000-12-06 18:28:30 remacle Exp $ */
/* $Id: Context.cpp,v 1.14 2000-12-06 22:09:53 geuzaine Exp $ */
#include "Gmsh.h"
#include "Const.h"
......@@ -37,6 +37,15 @@ extern StringXColor PrintOptions_Color[] ;
// STRING OPTIONS
StringXString * Get_StringOptionCategory(char * cat){
if (!strcmp(cat,"General")) return GeneralOptions_String ;
else if(!strcmp(cat,"Geometry")) return GeometryOptions_String ;
else if(!strcmp(cat,"Mesh")) return MeshOptions_String ;
else if(!strcmp(cat,"PostProcessing")) return PostProcessingOptions_String ;
else if(!strcmp(cat,"Print")) return PrintOptions_String ;
else return NULL ;
}
void Set_DefaultStringOptions(StringXString s[]){
int i = 0;
while(s[i].str){
......@@ -45,32 +54,36 @@ void Set_DefaultStringOptions(StringXString s[]){
}
}
int Set_StringOption(char *str, StringXString s[], char *val){
char ** Get_StringOption(char *str, StringXString s[]){
int i = 0;
while ((s[i].str != NULL) && (strcmp(s[i].str, str))) i++ ;
if(!s[i].str)
return 0;
else{
*s[i].ptr = val ;
return 1;
}
return NULL;
else
return s[i].ptr;
}
void Print_StringOptions(StringXString s[], FILE *file){
void Print_StringOptions(StringXString s[], char *prefix, FILE *file){
int i = 0;
while(s[i].str){
fprintf(file, " %s = \"%s\";\n", s[i].str, *s[i].ptr) ;
fprintf(file, "%s%s = \"%s\";\n", prefix, s[i].str, *s[i].ptr) ;
i++;
}
}
// NUMBER OPTIONS
StringXNumber * Get_NumberOptionCategory(char * cat){
if (!strcmp(cat,"General")) return GeneralOptions_Number ;
else if(!strcmp(cat,"Geometry")) return GeometryOptions_Number ;
else if(!strcmp(cat,"Mesh")) return MeshOptions_Number ;
else if(!strcmp(cat,"PostProcessing")) return PostProcessingOptions_Number ;
else if(!strcmp(cat,"Print")) return PrintOptions_Number ;
else return NULL ;
}
void Set_DefaultNumberOptions(StringXNumber s[]){
int i = 0;
while(s[i].str){
switch(s[i].type){
case GMSH_INT: *(int*)s[i].ptr = (int)s[i].def; break;
......@@ -82,32 +95,27 @@ void Set_DefaultNumberOptions(StringXNumber s[]){
}
}
int Set_NumberOption(char *str, StringXNumber s[], double val){
void * Get_NumberOption(char *str, StringXNumber s[], int *type){
int i = 0;
while ((s[i].str != NULL) && (strcmp(s[i].str, str))) i++ ;
if(!s[i].str)
return 0;
return NULL;
else{
switch(s[i].type){
case GMSH_INT: *(int*)s[i].ptr = (int)val; break;
case GMSH_LONG: *(long*)s[i].ptr = (long)val; break;
case GMSH_FLOAT: *(float*)s[i].ptr = (float)val; break;
case GMSH_DOUBLE: *(double*)s[i].ptr = (double)val; break;
}
return 1;
*type = s[i].type ;
return s[i].ptr;
}
}
void Print_NumberOptions(StringXNumber s[], FILE *file){
void Print_NumberOptions(StringXNumber s[], char *prefix, FILE *file){
int i = 0;
while(s[i].str){
fprintf(file, "%s%s = ", prefix, s[i].str);
switch(s[i].type){
case GMSH_INT : fprintf(file, " %s = %d;\n", s[i].str, *(int*)s[i].ptr); break;
case GMSH_LONG : fprintf(file, " %s = %ld;\n", s[i].str, *(long*)s[i].ptr); break;
case GMSH_FLOAT : fprintf(file, " %s = %g;\n", s[i].str, *(float*)s[i].ptr); break;
case GMSH_DOUBLE : fprintf(file, " %s = %g;\n", s[i].str, *(double*)s[i].ptr); break;
case GMSH_INT : fprintf(file, "%d;\n", *(int*)s[i].ptr); break;
case GMSH_LONG : fprintf(file, "%ld;\n", *(long*)s[i].ptr); break;
case GMSH_FLOAT : fprintf(file, "%g;\n", *(float*)s[i].ptr); break;
case GMSH_DOUBLE : fprintf(file, "%g;\n", *(double*)s[i].ptr); break;
}
i++;
}
......@@ -116,6 +124,15 @@ void Print_NumberOptions(StringXNumber s[], FILE *file){
// ARRAY OPTIONS
StringXArray * Get_ArrayOptionCategory(char * cat){
if (!strcmp(cat,"General")) return GeneralOptions_Array ;
else if(!strcmp(cat,"Geometry")) return GeometryOptions_Array ;
else if(!strcmp(cat,"Mesh")) return MeshOptions_Array ;
else if(!strcmp(cat,"PostProcessing")) return PostProcessingOptions_Array ;
else if(!strcmp(cat,"Print")) return PrintOptions_Array ;
else return NULL ;
}
void Set_DefaultArrayOptions(StringXArray s[]){
int i = 0;
......@@ -150,48 +167,21 @@ void Set_DefaultArrayOptions(StringXArray s[]){
}
}
int Set_ArrayOption(char *str, StringXArray s[], double *val){
void * Get_ArrayOption(char *str, StringXArray s[], int *type){
int i = 0;
while ((s[i].str != NULL) && (strcmp(s[i].str, str))) i++ ;
if(!s[i].str)
return 0;
return NULL;
else{
switch(s[i].type){
case GMSH_INT:
((int*)s[i].ptr)[0] = (int)val[0];
((int*)s[i].ptr)[1] = (int)val[1];
((int*)s[i].ptr)[2] = (int)val[2];
((int*)s[i].ptr)[3] = (int)val[3];
break;
case GMSH_LONG:
((long*)s[i].ptr)[0] = (long)val[0];
((long*)s[i].ptr)[1] = (long)val[1];
((long*)s[i].ptr)[2] = (long)val[2];
((long*)s[i].ptr)[3] = (long)val[3];
break;
case GMSH_FLOAT:
((float*)s[i].ptr)[0] = (float)val[0];
((float*)s[i].ptr)[1] = (float)val[1];
((float*)s[i].ptr)[2] = (float)val[2];
((float*)s[i].ptr)[3] = (float)val[3];
break;
case GMSH_DOUBLE:
((double*)s[i].ptr)[0] = (double)val[0];
((double*)s[i].ptr)[1] = (double)val[1];
((double*)s[i].ptr)[2] = (double)val[2];
((double*)s[i].ptr)[3] = (double)val[3];
break;
}
return 1;
*type = s[i].type ;
return s[i].ptr;
}
}
void Print_ArrayOptions(StringXArray s[], FILE *file){
void Print_ArrayOptions(StringXArray s[], char *prefix, FILE *file){
int i = 0;
while(s[i].str){
fprintf(file, " %s = {", s[i].str);
fprintf(file, "%s%s = {", prefix, s[i].str);
switch(s[i].type){
case GMSH_INT :
fprintf(file, "%d,%d,%d,%d};\n",
......@@ -221,9 +211,17 @@ void Print_ArrayOptions(StringXArray s[], FILE *file){
// COLORS
StringXColor * Get_ColorOptionCategory(char * cat){
if (!strcmp(cat,"General")) return GeneralOptions_Color ;
else if(!strcmp(cat,"Geometry")) return GeometryOptions_Color ;
else if(!strcmp(cat,"Mesh")) return MeshOptions_Color ;
else if(!strcmp(cat,"PostProcessing")) return PostProcessingOptions_Color ;
else if(!strcmp(cat,"Print")) return PrintOptions_Color ;
else return NULL ;
}
void Set_DefaultColorOptions(StringXColor s[], int num){
int i = 0;
while(s[i].str){
switch(num){
case 0 : *s[i].ptr = s[i].def1; break;
......@@ -234,31 +232,25 @@ void Set_DefaultColorOptions(StringXColor s[], int num){
}
}
int Set_ColorOption(char *str, StringXColor s[], unsigned int val) {
unsigned int * Get_ColorOption(char *str, StringXColor s[]) {
int i = 0;
while ((s[i].str != NULL) && (strcmp(s[i].str, str))) i++ ;
if(!s[i].str)
return 0;
else{
*s[i].ptr = val ;
return 1;
}
return NULL;
else
return s[i].ptr;
}
void Print_ColorOptions(StringXColor s[], FILE *file){
void Print_ColorOptions(StringXColor s[], char *prefix, FILE *file){
int i = 0;
fprintf(file, " Color {\n");
while(s[i].str){
fprintf(file, " %s = {%d,%d,%d};\n",
s[i].str,
fprintf(file, "%sColor.%s = {%d,%d,%d};\n",
prefix, s[i].str,
UNPACK_RED(*s[i].ptr),
UNPACK_GREEN(*s[i].ptr),
UNPACK_BLUE(*s[i].ptr));
i++;
}
fprintf(file, " }\n");
}
int Get_ColorForString(StringX4Int SX4I[], int alpha,
......@@ -350,43 +342,32 @@ void Init_Context(void){
void Print_Context(FILE *file){
fprintf(file, "Options{\n");
fprintf(file, " General{\n");
Print_StringOptions(GeneralOptions_String, file);
Print_NumberOptions(GeneralOptions_Number, file);
Print_ArrayOptions(GeneralOptions_Array, file);
Print_ColorOptions(GeneralOptions_Color, file);
fprintf(file, " }\n");
fprintf(file, " Geometry{\n");
Print_StringOptions(GeometryOptions_String, file);
Print_NumberOptions(GeometryOptions_Number, file);
Print_ArrayOptions(GeometryOptions_Array, file);
Print_ColorOptions(GeometryOptions_Color, file);
fprintf(file, " }\n");
fprintf(file, " Mesh{\n");
Print_StringOptions(MeshOptions_String, file);
Print_NumberOptions(MeshOptions_Number, file);
Print_ArrayOptions(MeshOptions_Array, file);
Print_ColorOptions(MeshOptions_Color, file);
fprintf(file, " }\n");
fprintf(file, " PostProcessing{\n");
Print_StringOptions(PostProcessingOptions_String, file);
Print_NumberOptions(PostProcessingOptions_Number, file);
Print_ArrayOptions(PostProcessingOptions_Array, file);
Print_ColorOptions(PostProcessingOptions_Color, file);
fprintf(file, " }\n");
fprintf(file, " Print{\n");
Print_StringOptions(PrintOptions_String, file);
Print_NumberOptions(PrintOptions_Number, file);
Print_ArrayOptions(PrintOptions_Array, file);
Print_ColorOptions(PrintOptions_Color, file);
fprintf(file, " }\n");
fprintf(file, "Options{\n\n");
Print_StringOptions(GeneralOptions_String, " General.", file);
Print_NumberOptions(GeneralOptions_Number, " General.", file);
Print_ArrayOptions(GeneralOptions_Array, " General.", file);
Print_ColorOptions(GeneralOptions_Color, " General.", file);
fprintf(file, " \n");
Print_StringOptions(GeometryOptions_String, " Geometry.", file);
Print_NumberOptions(GeometryOptions_Number, " Geometry.", file);
Print_ArrayOptions(GeometryOptions_Array, " Geometry.", file);
Print_ColorOptions(GeometryOptions_Color, " Geometry.", file);
fprintf(file, " \n");
Print_StringOptions(MeshOptions_String, " Mesh.", file);
Print_NumberOptions(MeshOptions_Number, " Mesh.", file);
Print_ArrayOptions(MeshOptions_Array, " Mesh.", file);
Print_ColorOptions(MeshOptions_Color, " Mesh.", file);
fprintf(file, " \n");
Print_StringOptions(PostProcessingOptions_String, " PostProcessing.", file);
Print_NumberOptions(PostProcessingOptions_Number, " PostProcessing.", file);
Print_ArrayOptions(PostProcessingOptions_Array, " PostProcessing.", file);
Print_ColorOptions(PostProcessingOptions_Color, " PostProcessing.", file);
fprintf(file, " \n");
Print_StringOptions(PrintOptions_String, " Print.", file);
Print_NumberOptions(PrintOptions_Number, " Print.", file);
Print_ArrayOptions(PrintOptions_Array, " Print.", file);
Print_ColorOptions(PrintOptions_Color, " Print.", file);
fprintf(file, " \n");
fprintf(file, "}\n");
}
......
/* $Id: Context.h,v 1.15 2000-12-06 18:28:30 remacle Exp $ */
/* $Id: Context.h,v 1.16 2000-12-06 22:09:53 geuzaine Exp $ */
#ifndef _CONTEXT_H_
#define _CONTEXT_H_
......@@ -180,21 +180,25 @@ typedef struct {
unsigned int def1, def2, def3 ;
} StringXColor ;
StringXString * Get_StringOptionCategory(char * cat);
StringXNumber * Get_NumberOptionCategory(char * cat);
StringXArray * Get_ArrayOptionCategory(char * cat);
StringXColor * Get_ColorOptionCategory(char * cat);
void Set_DefaultStringOptions(StringXString s[]);
void Set_DefaultNumberOptions(StringXNumber s[]);
void Set_DefaultArrayOptions(StringXArray s[]);
void Set_DefaultColorOptions(StringXColor s[], int num);
int Set_StringOption(char *str, StringXString s[], char *val);
int Set_NumberOption(char *str, StringXNumber s[], double val);
int Set_ArrayOption(char *str, StringXArray s[], double *val);
int Set_ColorOption(char *str, StringXColor s[], unsigned int val);
char ** Get_StringOption(char *str, StringXString s[]);
void * Get_NumberOption(char *str, StringXNumber s[], int *type);
void * Get_ArrayOption(char *str, StringXArray s[], int *type);
unsigned int * Get_ColorOption(char *str, StringXColor s[]);
void Print_StringOptions(StringXString s[], FILE *file);
void Print_NumberOptions(StringXNumber s[], FILE *file);
void Print_ArrayOptions(StringXArray s[], FILE *file);
void Print_ColorOptions(StringXArray s[], FILE *file);
void Print_StringOptions(StringXString s[], char *prefix, FILE *file);
void Print_NumberOptions(StringXNumber s[], char *prefix, FILE *file);
void Print_ArrayOptions(StringXArray s[], char *prefix, FILE *file);
void Print_ColorOptions(StringXArray s[], char *prefix, FILE *file);
void Init_Colors (int num);
void Init_Context (void);
......
%{ /* $Id: Gmsh.l,v 1.8 2000-12-06 18:28:30 remacle Exp $ */
%{ /* $Id: Gmsh.l,v 1.9 2000-12-06 22:09:53 geuzaine Exp $ */
#include <stdio.h>
#include <stdlib.h>
......@@ -69,8 +69,22 @@ stepid {dieze}({digit})*
"newreg" {yylval.d = NEWREG(); return tDOUBLE;}
"newp" {yylval.d = NEWPOINT(); return tDOUBLE;}
"=" return tAFFECT;
"+=" return tAFFECTPLUS ;
"-=" return tAFFECTMINUS ;
"*=" return tAFFECTTIMES ;
"/=" return tAFFECTDIVIDE ;
"..." return tDOTS;
":" return tDOTS ;
"/\\" return tCROSSPRODUCT ;
"||" return tOR ;
"&&" return tAND ;
"++" return tPLUSPLUS ;
"--" return tMINUSMINUS ;
"==" return tEQUAL ;
"!=" return tNOTEQUAL ;
"~=" return tAPPROXEQUAL ;
"<=" return tLESSOREQUAL ;
">=" return tGREATEROREQUAL ;
ACos return tAcos ;
ArcCos return tAcos ;
......@@ -80,7 +94,6 @@ Atan return tAtan ;
ArcTan return tAtan ;
Atan2 return tAtan2 ;
ArcTan2 return tAtan2 ;
Association return tAssociation;
Attractor return tAttractor;
Bump return tBump;
......@@ -111,9 +124,6 @@ Fabs return tFabs ;
Floor return tFloor ;
Fmod return tFmod ;
General return tGeneral;
Geometry return tGeometry;
Hypot return tHypot ;
Include return tInclude;
......@@ -127,7 +137,6 @@ Log return tLog ;
Log10 return tLog10 ;
Layers return tLayers;
Mesh return tMesh;
Modulo return tModulo ;
Nurbs return tNurbs;
......@@ -143,8 +152,7 @@ Point return tPoint;
Power return tProgression;
Progression return tProgression;
Parametric return tParametric;
PostProcessing return tPostProcessing;
Print return tPrint;
Printf return tPrintf ;
Recombine return tRecombine;
Rotate return tRotate;
......@@ -157,6 +165,7 @@ Save return tPhysical;
Spline return tSpline;
Surface return tSurface;
Symmetry return tSymmetry;
Script return tScript;
Transfinite return tTransfinite;
Translate return tTranslate;
......
%{ /* $Id: Gmsh.y,v 1.16 2000-12-06 18:28:30 remacle Exp $ */
%{ /* $Id: Gmsh.y,v 1.17 2000-12-06 22:09:53 geuzaine Exp $ */
#include <stdarg.h>
......@@ -40,17 +40,26 @@ static Shape TheShape;
static int i,j,k,flag,RecursionLevel=0,ImbricatedLoop = 0;
static double d;
static ExtrudeParams extr;
static StringXColor *ColorField ;
static List_T *ListOfDouble_L,*ListOfDouble2_L;
static List_T *ListOfListOfDouble_L;
static void *pNumOpt, *pArrOpt;
static char **pStrOpt;
static unsigned int *pColOpt;
static StringXString *pStrCat;
static StringXNumber *pNumCat;
static StringXArray *pArrCat;
static StringXColor *pColCat;
void yyerror (char *s);
void vyyerror (char *fmt, ...);
%}
%union {
char *c;
int i;
unsigned int u;
double d;
double v[5];
Shape s;
......@@ -63,11 +72,11 @@ void vyyerror (char *fmt, ...);
%token tEND tAFFECT tDOTS tPi
%token tExp tLog tLog10 tSqrt tSin tAsin tCos tAcos tTan
%token tAtan tAtan2 tSinh tCosh tTanh tFabs tFloor tCeil
%token tFmod tModulo tHypot
%token tFmod tModulo tHypot tPrintf
%token tPoint tCircle tEllipsis tLine tSurface tSpline tVolume
%token tCharacteristic tLength tParametric tElliptic
%token tPlane tRuled tTransfinite tComplex tPhysical
%token tUsing tPower tBump tProgression tAssociation
%token tUsing tBump tProgression
%token tRotate tTranslate tSymmetry tDilate tExtrude tDuplicata
%token tLoop tInclude tRecombine tDelete tCoherence
%token tView tOffset tAttractor tLayers
......@@ -77,7 +86,6 @@ void vyyerror (char *fmt, ...);
%token tScalarPoint tVectorPoint tTensorPoint
%token tBSpline tNurbs tOrder tWith tBounds tKnots
%token tColor tOptions tFor tEndFor tScript tExit tMerge
%token tGeneral tGeometry tMesh tPostProcessing tPrint
%token tB_SPLINE_SURFACE_WITH_KNOTS
%token tB_SPLINE_CURVE_WITH_KNOTS
......@@ -94,17 +102,31 @@ void vyyerror (char *fmt, ...);
%token tSolid tEndSolid tVertex tFacet tNormal tOuter tLoopSTL tEndLoop tEndFacet
%type <d> FExpr FExpr_Single
%type <v> VExpr RGBAExpr
%type <v> VExpr VExpr_Single
%type <l> ListOfShapes Duplicata Transform MultipleShape
%type <l> ListOfStrings ListOfDouble ListOfListOfDouble
%type <s> Shape
%type <i> BoolExpr
%left '<' '>'
%type <u> Color
/* ------------------------------------------------------------------ */
/* Operators (with ascending priority) : cf. C language */
/* */
/* Notes: - evaluation order (%left, %right) */
/* - UNARYPREC is a dummy terminal to resolve ambiguous cases */
/* for + and - (which exist in both unary and binary form) */
/* ------------------------------------------------------------------ */
%left tAFFECT tAFFECTPLUS tAFFECTMINUS tAFFECTTIMES tAFFECTDIVIDE
%right '?' tDOTS
%left tAND tOR
%left tNOTEQUAL tEQUAL tAPPROXEQUAL
%left '<' '>' tLESSOREQUAL tGREATEROREQUAL
%left '+' '-'
%left '*' '/' '%'
%left UMINUS
%left tCROSSPRODUCT
%left UNARYPREC '!'
%right '^'
%left tPLUSPLUS tMINUSMINUS
%start All
......@@ -341,6 +363,7 @@ GeomFormatList :
GeomFormat :
View { return 1; }
| Printf { return 1; }
| Affectation { return 1; }
| Shape { return 1; }
| Transform { return 1; }
......@@ -354,9 +377,17 @@ GeomFormat :
/* | Script { return 1; }*/
| Command { return 1; }
| tOptions '{' Options '}' { return 1; }
| tScript '{' Scripts '}' { return 1; }
| error tEND { yyerrok; return 1;}
;
Printf :
tPrintf '(' tBIGSTR ',' FExpr ')' tEND
{
Msg(PARSER_INFO, $3, $5);
}
;
/* ------------
V I E W
------------ */
......@@ -1429,186 +1460,209 @@ Options :
;
Option :
tGeneral '{' GeneralOptions '}'
| tGeometry '{' GeometryOptions '}'
| tMesh '{' MeshOptions '}'
| tPostProcessing '{' PostProcessingOptions '}'
| tPrint '{' PrintOptions '}'
;
GeneralOptions :
/* empty */
| GeneralOptions GeneralOption
;
GeneralOption :
tSTRING tAFFECT tBIGSTR tEND
Printf
{
if(!Set_StringOption($1, GeneralOptions_String, $3))
vyyerror("Unknown General Option (String) '%s'", $1);
}
| tSTRING tAFFECT FExpr tEND
| tSTRING '.' tSTRING tAFFECT tBIGSTR tEND
{
if(!Set_NumberOption($1, GeneralOptions_Number, $3))
vyyerror("Unknown General Option (Number) '%s'", $1);
if(!(pStrCat = Get_StringOptionCategory($1)))
vyyerror("Unknown String Option Class '%s'", $1);
else{
if(!(pStrOpt = Get_StringOption($3, pStrCat)))
vyyerror("Unknown String Option '%s.%s'", $1, $3);
else{
*pStrOpt = $5 ;
}
| tSTRING tAFFECT VExpr tEND
{ if(!Set_ArrayOption($1, GeneralOptions_Array, $3))
vyyerror("Unknown General Option (Array) '%s'", $1);
}
| tColor
{ ColorField = GeneralOptions_Color; }
'{' ColorAffects '}'
;
GeometryOptions :
/* empty */
| GeometryOptions GeometryOption
;
GeometryOption :
tSTRING tAFFECT tBIGSTR tEND
{
if(!Set_StringOption($1, GeometryOptions_String, $3))
vyyerror("Unknown Geometry Option (String) '%s'", $1);
}
| tSTRING tAFFECT FExpr tEND
| tSTRING '.' tSTRING tAFFECT FExpr tEND
{
if(!Set_NumberOption($1, GeometryOptions_Number, $3))
vyyerror("Unknown Geometry Option (Number) '%s'", $1);
if(!(pNumCat = Get_NumberOptionCategory($1)))
vyyerror("Unknown Numeric Option Class '%s'", $1);
else{
if(!(pNumOpt = Get_NumberOption($3, pNumCat, &i)))
vyyerror("Unknown Numeric Option '%s.%s'", $1, $3);
else{
switch(i){
case GMSH_DOUBLE : *(double*)pNumOpt = $5 ; break ;
case GMSH_FLOAT : *(float*)pNumOpt = (float)$5 ; break ;
case GMSH_LONG : *(long*)pNumOpt = (long)$5 ; break ;
case GMSH_INT : *(int*)pNumOpt = (int)$5 ; break ;
}
| tSTRING tAFFECT VExpr tEND
{
if(!Set_ArrayOption($1, GeometryOptions_Array, $3))
vyyerror("Unknown Geometry Option (Array) '%s'", $1);
}
| tColor
{ ColorField = GeometryOptions_Color; }
'{' ColorAffects '}'
;
MeshOptions :
/* empty */
| MeshOptions MeshOption
;
MeshOption :
tSTRING tAFFECT tBIGSTR tEND
{
if(!Set_StringOption($1, MeshOptions_String, $3))
vyyerror("Unknown Mesh Option (String) '%s'", $1);
}
| tSTRING tAFFECT FExpr tEND
{
if(!Set_NumberOption($1, MeshOptions_Number, $3))
vyyerror("Unknown Mesh Option (Number) '%s'", $1);
}
| tSTRING tAFFECT VExpr tEND
| tSTRING '.' tSTRING tAFFECTPLUS FExpr tEND
{
if(!Set_ArrayOption($1, MeshOptions_Array, $3))
vyyerror("Unknown Mesh Option (Array) '%s'", $1);
if(!(pNumCat = Get_NumberOptionCategory($1)))
vyyerror("Unknown Numeric Option Class '%s'", $1);
else{
if(!(pNumOpt = Get_NumberOption($3, pNumCat, &i)))
vyyerror("Unknown Numeric Option '%s.%s'", $1, $3);
else{
switch(i){
case GMSH_DOUBLE : *(double*)pNumOpt += $5 ; break ;
case GMSH_FLOAT : *(float*)pNumOpt += (float)$5 ; break ;
case GMSH_LONG : *(long*)pNumOpt += (long)$5 ; break ;
case GMSH_INT : *(int*)pNumOpt += (int)$5 ; break ;
}
| tColor
{ ColorField = MeshOptions_Color; }
'{' ColorAffects '}'
;
PostProcessingOptions :
/* empty */
| PostProcessingOptions PostProcessingOption
;
PostProcessingOption :
tSTRING tAFFECT tBIGSTR tEND
}
}
}
| tSTRING '.' tSTRING tAFFECTMINUS FExpr tEND
{
if(!Set_StringOption($1, PostProcessingOptions_String, $3))
vyyerror("Unknown PostProcessing Option (String) '%s'", $1);
if(!(pNumCat = Get_NumberOptionCategory($1)))
vyyerror("Unknown Numeric Option Class '%s'", $1);
else{
if(!(pNumOpt = Get_NumberOption($3, pNumCat, &i)))
vyyerror("Unknown Numeric Option '%s.%s'", $1, $3);
else{
switch(i){
case GMSH_DOUBLE : *(double*)pNumOpt -= $5 ; break ;
case GMSH_FLOAT : *(float*)pNumOpt -= (float)$5 ; break ;
case GMSH_LONG : *(long*)pNumOpt -= (long)$5 ; break ;
case GMSH_INT : *(int*)pNumOpt -= (int)$5 ; break ;
}
}
| tSTRING tAFFECT FExpr tEND
}
}
| tSTRING '.' tSTRING tAFFECTTIMES FExpr tEND
{
if(!Set_NumberOption($1, PostProcessingOptions_Number, $3))
vyyerror("Unknown PostProcessing Option (Number) '%s'", $1);
if(!(pNumCat = Get_NumberOptionCategory($1)))
vyyerror("Unknown Numeric Option Class '%s'", $1);
else{
if(!(pNumOpt = Get_NumberOption($3, pNumCat, &i)))
vyyerror("Unknown Numeric Option '%s.%s'", $1, $3);
else{
switch(i){
case GMSH_DOUBLE : *(double*)pNumOpt *= $5 ; break ;
case GMSH_FLOAT : *(float*)pNumOpt *= (float)$5 ; break ;
case GMSH_LONG : *(long*)pNumOpt *= (long)$5 ; break ;
case GMSH_INT : *(int*)pNumOpt *= (int)$5 ; break ;
}
}
| tSTRING tAFFECT VExpr tEND
}
}
| tSTRING '.' tSTRING tAFFECTDIVIDE FExpr tEND
{
if(!Set_ArrayOption($1, PostProcessingOptions_Array, $3))
vyyerror("Unknown PostProcessing (Array) Option '%s'", $1);
if(!(pNumCat = Get_NumberOptionCategory($1)))
vyyerror("Unknown Numeric Option Class '%s'", $1);
else{
if(!(pNumOpt = Get_NumberOption($3, pNumCat, &i)))
vyyerror("Unknown Numeric Option '%s.%s'", $1, $3);
else{
switch(i){
case GMSH_DOUBLE : *(double*)pNumOpt /= $5 ; break ;
case GMSH_FLOAT : *(float*)pNumOpt /= (float)$5 ; break ;
case GMSH_LONG : *(long*)pNumOpt /= (long)$5 ; break ;
case GMSH_INT : *(int*)pNumOpt /= (int)$5 ; break ;
}
| tColor
{ ColorField = PostProcessingOptions_Color; }
'{' ColorAffects '}'
;
PrintOptions :
/* empty */
| PrintOptions PrintOption
;
PrintOption :
tSTRING tAFFECT tBIGSTR tEND
}
}
}
| tSTRING '.' tSTRING tPLUSPLUS tEND
{
if(!Set_StringOption($1, PrintOptions_String, $3))
vyyerror("Unknown Print Option (String) '%s'", $1);
if(!(pNumCat = Get_NumberOptionCategory($1)))
vyyerror("Unknown Numeric Option Class '%s'", $1);
else{
if(!(pNumOpt = Get_NumberOption($3, pNumCat, &i)))
vyyerror("Unknown Numeric Option '%s.%s'", $1, $3);
else{
switch(i){
case GMSH_DOUBLE : *(double*)pNumOpt += 1. ; break ;
case GMSH_FLOAT : *(float*)pNumOpt += 1. ; break ;
case GMSH_LONG : *(long*)pNumOpt += 1 ; break ;
case GMSH_INT : *(int*)pNumOpt += 1 ; break ;
}
| tSTRING tAFFECT FExpr tEND
}
}
}
| tSTRING '.' tSTRING tMINUSMINUS tEND
{
if(!Set_NumberOption($1, PrintOptions_Number, $3))
vyyerror("Unknown Print Option (Number) '%s'", $1);
if(!(pNumCat = Get_NumberOptionCategory($1)))
vyyerror("Unknown Numeric Option Class '%s'", $1);
else{
if(!(pNumOpt = Get_NumberOption($3, pNumCat, &i)))
vyyerror("Unknown Numeric Option '%s.%s'", $1, $3);
else{
switch(i){
case GMSH_DOUBLE : *(double*)pNumOpt -= 1. ; break ;
case GMSH_FLOAT : *(float*)pNumOpt -= 1. ; break ;
case GMSH_LONG : *(long*)pNumOpt -= 1 ; break ;
case GMSH_INT : *(int*)pNumOpt -= 1 ; break ;
}
| tSTRING tAFFECT VExpr tEND
}
}
}
| tSTRING '.' tSTRING tAFFECT VExpr tEND
{
if(!Set_ArrayOption($1, PrintOptions_Array, $3))
vyyerror("Unknown Print Option (Array) '%s'", $1);
if(!(pArrCat = Get_ArrayOptionCategory($1)))
vyyerror("Unknown Array Option Class '%s'", $1);
else{
if(!(pArrOpt = Get_ArrayOption($3, pArrCat, &i)))
vyyerror("Unknown Array Option '%s.%s'", $1, $3);
else{
switch(i){
case GMSH_DOUBLE :
((double*)pNumOpt)[0] = $5[0] ;
((double*)pNumOpt)[1] = $5[1] ;
((double*)pNumOpt)[2] = $5[2] ;
((double*)pNumOpt)[3] = $5[3] ;
break ;
case GMSH_FLOAT :
((float*)pNumOpt)[0] = (float)$5[0] ;
((float*)pNumOpt)[1] = (float)$5[1] ;
((float*)pNumOpt)[2] = (float)$5[2] ;
((float*)pNumOpt)[3] = (float)$5[3] ;
break ;
case GMSH_LONG :
((long*)pNumOpt)[0] = (long)$5[0] ;
((long*)pNumOpt)[1] = (long)$5[1] ;
((long*)pNumOpt)[2] = (long)$5[2] ;
((long*)pNumOpt)[3] = (long)$5[3] ;
break ;
case GMSH_INT :
((int*)pNumOpt)[0] = (int)$5[0] ;
((int*)pNumOpt)[1] = (int)$5[1] ;
((int*)pNumOpt)[2] = (int)$5[2] ;
((int*)pNumOpt)[3] = (int)$5[3] ;
break ;
}
}
}
}
| tSTRING '.' tColor '.' tSTRING tAFFECT Color tEND
{
if(!(pColCat = Get_ColorOptionCategory($1)))
vyyerror("Unknown Color Option Class '%s'", $1);
else{
if(!(pColOpt = Get_ColorOption($5, pColCat)))
vyyerror("Unknown Color Option '%s.%s'", $1, $5);
else{
*pColOpt = $7 ;
}
}
}
| tColor
{ ColorField = PrintOptions_Color; }
'{' ColorAffects '}'
;
ColorAffects :
/* ---------------
S C R I P T S
--------------- */
Scripts :
/* empty */
| ColorAffect ColorAffects
| Scripts Script
;
ColorAffect :
tSTRING tAFFECT tSTRING tEND
{
i = Get_ColorForString(ColorString, -1, $3, &flag);
if(flag) vyyerror("Unknown Color '%s'", $3);
if(!Set_ColorOption($1, ColorField, i))
vyyerror("Unknown Color Field '%s'", $1);
}
| tSTRING tAFFECT '{' tSTRING ',' FExpr '}' tEND
{
i = Get_ColorForString(ColorString, (int)$6, $4, &flag);
if(flag) vyyerror("Unknown Color '%s'", $4);
if(!Set_ColorOption($1, ColorField, i))
vyyerror("Unknown Color Field '%s'", $1);
}
| tSTRING tAFFECT RGBAExpr tEND
{
if(!Set_ColorOption($1, ColorField,
PACK_COLOR((int)$3[0], (int)$3[1], (int)$3[2], (int)$3[3])))
vyyerror("Unknown Color Field '%s'", $1);
}
Script :
Option
/*
| Action
| Loop
| Test
*/
;
RGBAExpr :
'{' FExpr ',' FExpr ',' FExpr ',' FExpr '}'
{
$$[0]=$2;
$$[1]=$4;
$$[2]=$6;
$$[3]=$8;
}
| '{' FExpr ',' FExpr ',' FExpr '}'
{
$$[0]=$2;
$$[1]=$4;
$$[2]=$6;
$$[3]=255.;
}
;
/* ---------------
G E N E R A L
......@@ -1626,13 +1680,24 @@ BoolExpr :
FExpr :
FExpr_Single { $$ = $1; }
| '(' FExpr ')' { $$ = $2 ; }
| '-' FExpr %prec UNARYPREC { $$ = -$2 ; }
| '+' FExpr %prec UNARYPREC { $$ = $2; }
| '!' FExpr { $$ = !$2 ; }
| FExpr '-' FExpr { $$ = $1 - $3 ; }
| FExpr '+' FExpr { $$ = $1 + $3 ; }
| FExpr '*' FExpr { $$ = $1 * $3 ; }
| FExpr '/' FExpr { $$ = $1 / $3 ; }
| FExpr '%' FExpr { $$ = (int)$1 % (int)$3 ; }
| FExpr '^' FExpr { $$ = pow($1,$3) ; }
| '-' FExpr %prec UMINUS { $$ = - $2; }
| '+' FExpr %prec UMINUS { $$ = $2; }
| FExpr '<' FExpr { $$ = $1 < $3 ; }
| FExpr '>' FExpr { $$ = $1 > $3 ; }
| FExpr tLESSOREQUAL FExpr { $$ = $1 <= $3 ; }
| FExpr tGREATEROREQUAL FExpr { $$ = $1 >= $3 ; }
| FExpr tEQUAL FExpr { $$ = $1 == $3 ; }
| FExpr tNOTEQUAL FExpr { $$ = $1 != $3 ; }
| FExpr tAND FExpr { $$ = $1 && $3 ; }
| FExpr tOR FExpr { $$ = $1 || $3 ; }
| FExpr '?' FExpr tDOTS FExpr { $$ = $1? $3 : $5 ; }
| tExp '(' FExpr ')' { $$ = exp($3); }
| tLog '(' FExpr ')' { $$ = log($3); }
| tLog10 '(' FExpr ')' { $$ = log10($3); }
......@@ -1667,6 +1732,57 @@ FExpr_Single :
else $$ = TheSymbol.val ;
Free($1);
}
| tSTRING '.' tSTRING
{
if(!(pNumCat = Get_NumberOptionCategory($1)))
vyyerror("Unknown Numeric Option Class '%s'", $1);
else{
if(!(pNumOpt = Get_NumberOption($3, pNumCat, &i)))
vyyerror("Unknown Numeric Option '%s.%s'", $1, $3);
else{
switch(i){
case GMSH_DOUBLE : $$ = *(double*)pNumOpt ; break ;
case GMSH_FLOAT : $$ = (double)(*(float*)pNumOpt) ; break ;
case GMSH_LONG : $$ = (double)(*(long*)pNumOpt) ; break ;
case GMSH_INT : $$ = (double)(*(int*)pNumOpt) ; break ;
}
}
}
}
| tSTRING '.' tSTRING tPLUSPLUS
{
if(!(pNumCat = Get_NumberOptionCategory($1)))
vyyerror("Unknown Numeric Option Class '%s'", $1);
else{
if(!(pNumOpt = Get_NumberOption($3, pNumCat, &i)))
vyyerror("Unknown Numeric Option '%s.%s'", $1, $3);
else{
switch(i){
case GMSH_DOUBLE : $$ = (*(double*)pNumOpt += 1.) ; break ;
case GMSH_FLOAT : $$ = (double)(*(float*)pNumOpt += 1.) ; break ;
case GMSH_LONG : $$ = (double)(*(long*)pNumOpt += 1) ; break ;
case GMSH_INT : $$ = (double)(*(int*)pNumOpt += 1) ; break ;
}
}
}
}
| tSTRING '.' tSTRING tMINUSMINUS
{
if(!(pNumCat = Get_NumberOptionCategory($1)))
vyyerror("Unknown Numeric Option Class '%s'", $1);
else{
if(!(pNumOpt = Get_NumberOption($3, pNumCat, &i)))
vyyerror("Unknown Numeric Option '%s.%s'", $1, $3);
else{
switch(i){
case GMSH_DOUBLE : $$ = (*(double*)pNumOpt -= 1.) ; break ;
case GMSH_FLOAT : $$ = (double)(*(float*)pNumOpt -= 1.) ; break ;
case GMSH_LONG : $$ = (double)(*(long*)pNumOpt -= 1) ; break ;
case GMSH_INT : $$ = (double)(*(int*)pNumOpt -= 1) ; break ;
}
}
}
}
;
FExpr_Range :
......@@ -1690,37 +1806,43 @@ FExpr_Range :
;
VExpr :
VExpr_Single
{
$$ = $1;
}
| '-' VExpr %prec UNARYPREC
{
for(i=0 ; i<6 ; i++) $$[i] = -$2[i] ;
}
| '+' VExpr %prec UNARYPREC
{
$$ = $2;
}
| VExpr '-' VExpr
{
for(i=0 ; i<6 ; i++) $$[i] = $1[i] - $3[i] ;
}
| VExpr '+' VExpr
{
for(i=0 ; i<6 ; i++) $$[i] = $1[i] + $3[i] ;
}
VExpr_Single :
'{' FExpr ',' FExpr ',' FExpr ',' FExpr ',' FExpr '}'
{
$$[0]=$2;
$$[1]=$4;
$$[2]=$6;
$$[3]=$8;
$$[4]=$10;
$$[0]=$2; $$[1]=$4; $$[2]=$6; $$[3]=$8; $$[4]=$10;
}
| '{' FExpr ',' FExpr ',' FExpr ',' FExpr '}'
{
$$[0]=$2;
$$[1]=$4;
$$[2]=$6;
$$[3]=$8;
$$[4]=1.0;
$$[0]=$2; $$[1]=$4; $$[2]=$6; $$[3]=$8; $$[4]=1.0;
}
| '{' FExpr ',' FExpr ',' FExpr '}'
{
$$[0]=$2;
$$[1]=$4;
$$[2]=$6;
$$[3]=0.0;
$$[4]=1.0;
$$[0]=$2; $$[1]=$4; $$[2]=$6; $$[3]=0.0; $$[4]=1.0;
}
| '(' FExpr ',' FExpr ',' FExpr ')'
{
$$[0]=$2;
$$[1]=$4;
$$[2]=$6;
$$[3]=0.0;
$$[4]=1.0;
$$[0]=$2; $$[1]=$4; $$[2]=$6; $$[3]=0.0; $$[4]=1.0;
}
;
......@@ -1782,12 +1904,6 @@ ListOfDouble :
{
$$=ListOfDouble_L;
}
/*
| '(' RecursiveListOfDouble ')'
{
$$=ListOfDouble_L;
}
*/
;
......@@ -1820,6 +1936,38 @@ RecursiveListOfDouble :
}
;
Color :
'{' FExpr ',' FExpr ',' FExpr ',' FExpr '}'
{
$$ = PACK_COLOR((int)$2, (int)$4, (int)$6, (int)$8);
}
| '{' FExpr ',' FExpr ',' FExpr '}'
{
$$ = PACK_COLOR((int)$2, (int)$4, (int)$6, 255);
}
| '{' tSTRING ',' FExpr '}'
{
$$ = Get_ColorForString(ColorString, (int)$4, $2, &flag);
if(flag) vyyerror("Unknown Color '%s'", $2);
}
| tSTRING
{
$$ = Get_ColorForString(ColorString, -1, $1, &flag);
if(flag) vyyerror("Unknown Color '%s'", $1);
}
| tSTRING '.' tColor '.' tSTRING
{
if(!(pColCat = Get_ColorOptionCategory($1)))
vyyerror("Unknown Color Option Class '%s'", $1);
else{
if(!(pColOpt = Get_ColorOption($5, pColCat)))
vyyerror("Unknown Color Option '%s.%s'", $1, $5);
else{
$$ = *pColOpt ;
}
}
}
;
%%
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment