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

nouvelle gestion des options

parent 21c83e02
Branches
Tags
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