home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Source Code 1993 July / THE_SOURCE_CODE_CD_ROM.iso / X / mit / demos / gpc / bifparse.yacc < prev    next >
Encoding:
Text File  |  1991-02-15  |  60.7 KB  |  2,363 lines

  1. /*========================================================================
  2. bifparse.y
  3.     yacc grammar input file for yacc demonstration.
  4.  
  5. ========================================================================*/
  6.  
  7. /*----------------*/
  8. /* C declarations */
  9. /*----------------*/
  10.  
  11. %{
  12. /*--------------------------------------------------------------------*\
  13. |
  14. |  Copyright (C) 1989, 1990, 1991,1990, National Computer Graphics Association
  15. |
  16. |  Permission is granted to any individual or institution to use, copy, or
  17. |  redistribute this software so long as it is not sold for profit, provided
  18. |  this copyright notice is retained.
  19. |
  20. |                         Developed for the
  21. |                National Computer Graphics Association
  22. |                         2722 Merrilee Drive
  23. |                         Fairfax, VA  22031
  24. |                           (703) 698-9600
  25. |
  26. |                                by
  27. |                 SimGraphics Engineering Corporation
  28. |                    1137 Huntington Drive  Unit A
  29. |                      South Pasadena, CA  91030
  30. |                           (213) 255-0900
  31. |---------------------------------------------------------------------
  32. |
  33. | Author        :    mjf / SimGraphics Engineering Corportation
  34. |
  35. | File          :    bifparse.y
  36. | Date          :    Fri Feb  9 10:46:55 PST 1990
  37. | Project       :    PLB
  38. | Description   :    
  39. | Status        :    Version 1.0
  40. |
  41. | Revisions     :    
  42. |
  43. \*--------------------------------------------------------------------*/
  44.  
  45. #include <stdio.h>
  46.  
  47. #ifdef SUN4
  48. #include <strings.h>
  49. #else
  50. #include <string.h>
  51. #endif
  52.  
  53. #include <ctype.h>
  54. #include "bifbuild.h"
  55.  
  56. #define STRLENGTH 80
  57. #define REPEAT_TABLE_SIZE 30
  58.  
  59. #ifndef FALSE
  60. #define FALSE 0
  61. #endif /* ifndef FALSE */
  62. #ifndef TRUE
  63. #define TRUE (!FALSE)
  64. #endif /* ifndef TRUE */
  65.  
  66. #define CB_ERM1 "Additional attempt to set color model ignored"
  67. #define CB_ERM2 "Additional attempt to set buffer mode ignored"
  68. #define CB_ERM3 "Additional attempt to set color mode ignored"
  69. #define CB_ERM4 "Additional attempt to set window size ignored"
  70. #define FAS_ERM1 "Additional VERTEX_COLOR set in FILL_AREA_SET3 ignored."
  71. #define FAS_ERM2 "Additional VERTEX_COLOR_INDICES in FILL_AREA_SET3 ignored."
  72. #define FAS_ERM3 "Additional VERTEX_NORMALS set in FILL_AREA_SET3 ignored."
  73. #define FAS_ERM4 "Additional EDGE_VISIBILITY set in FILL_AREA_SET3 ignored."
  74. #define FAS_ERM5 "Additional FACET_COLORS set in FILL_AREA_SET3 ignored."
  75. #define FAS_ERM6 "Additional FACET_COLOR_INDICES in FILL_AREA_SET3 ignored."
  76. #define FAS_ERM7 "Additional FACET_NORMALS set in FILL_AREA_SET3 ignored."
  77. #define GS_ERM1 "Additional CENTER in GEN_SPHERE3 ignored."
  78. #define GS_ERM2 "Additional RADIUS in GEN_SPHERE3 ignored."
  79. #define GS_ERM3 "Additional SCALE_FACTOR in GEN_SPHERE3 ignored."
  80. #define GC_ERM1 "Additional CENTER in GEN_CIRCLE ignored."
  81. #define GC_ERM2 "Additional RADIUS in GEN_CIRCLE ignored."
  82. #define GC3_ERM1 "Additional CENTER in GEN_CIRCLE3 ignored."
  83. #define GC3_ERM2 "Additional RADIUS in GEN_CIRCLE3 ignored."
  84. #define GC3_ERM3 "Additional NORMAL in GEN_CIRCLE3 ignored."
  85. #define WD3B_error(A) \
  86. { \
  87.   char temp[STRLENGTH]; \
  88.   sprintf(temp,"Additional %s in %s ignored.", A, with_data_name ); \
  89.   yyerror(temp); \
  90. }
  91.                 
  92. typedef char StringType[STRLENGTH];
  93.  
  94. static char *with_data_name;
  95. extern FILE *active_file, *last_file;
  96. extern char filenm[128], last_filenm[128];
  97. extern int lineno,last_lineno;
  98.  
  99.  
  100. %}
  101.  
  102. /*-------------------*/
  103. /* yacc declarations */
  104. /*-------------------*/
  105.  
  106. %start  bif_file
  107.  
  108. %union    {
  109.     long        l;
  110.     double        f;
  111.     StringType    str;
  112.     }
  113.  
  114. %token    <l>    LONG
  115. %token    <f>    REAL
  116. %token    <str>    QSTRING
  117.  
  118. /*--------------------------------------------------------------------*\
  119. |    Structures
  120. \*--------------------------------------------------------------------*/
  121. %token        BEGIN_STRUCTURE
  122. %token        END_STRUCTURE
  123.  
  124. /*--------------------------------------------------------------------*\
  125. |    Graphics Primitives
  126. \*--------------------------------------------------------------------*/
  127. %token        LABEL
  128. %token        MARKER
  129. %token        MARKER3
  130. %token        LINE
  131. %token        LINE3
  132. %token        POLYGON
  133. %token        POLYGON3
  134. %token        FILL_AREA_SET
  135. %token        FILL_AREA_SET3
  136. %token        TRIANGLE3
  137. %token        QUAD_MESH3
  138. %token        INDEX_POLYGONS3
  139. %token        GEN_SPHERE3
  140. %token        GEN_CIRCLE
  141. %token        GEN_CIRCLE3
  142. %token        TEXT
  143. %token        TEXT3
  144. %token        ANNOTATION_TEXT3
  145. %token        PIXEL_MAP3
  146. %token        NON_UNIFORM_BSPLINE_CURVE               /* ver 1.0 */
  147. %token        NON_UNIFORM_BSPLINE_SURFACE               /* ver 1.0 */
  148.  
  149. /*--------------------------------------------------------------------*\
  150. |    Primitive Attributes
  151. \*--------------------------------------------------------------------*/
  152. %token        CURVE_APPROXIMATION_CRITERIA            /* ver 1.0 */
  153. %token        TRIMCURVE_APPROXIMATION_CRITERIA        /* ver 1.0 */
  154. %token        SURFACE_APPROXIMATION_CRITERIA            /* ver 1.0 */
  155. %token        MARKER_TYPE
  156. %token        MARKER_SIZE
  157. %token        MARKER_COLOR
  158. %token        MARKER_COLOR_INDEX
  159. %token        LINE_TYPE
  160. %token        LINE_WIDTH
  161. %token        LINE_COLOR
  162. %token        LINE_COLOR_INDEX
  163. %token        LINE_SHADING
  164. %token        INTERIOR_STYLE
  165. %token        INTERIOR_PATTERN_INDEX
  166. %token        INTERIOR_COLOR
  167. %token        INTERIOR_COLOR_INDEX
  168. %token        BACKFACE_INTERIOR_COLOR
  169. %token        BACKFACE_INTERIOR_COLOR_INDEX
  170. %token        INTERIOR_SHADING
  171. %token        INTERIOR_LIGHTING
  172. %token        SURFACE_PROPERTIES
  173. %token        BACKFACE_PROPERTIES
  174. %token        BACKFACE_PROCESSING
  175. %token        EDGE_FLAG
  176. %token        EDGE_TYPE
  177. %token        EDGE_WIDTH
  178. %token        EDGE_COLOR
  179. %token        EDGE_COLOR_INDEX
  180. %token        TEXT_FONT
  181. %token        TEXT_PREC
  182. %token        TEXT_COLOR
  183. %token        TEXT_COLOR_INDEX
  184. %token        TEXT_PATH
  185. %token        TEXT_ALIGN
  186. %token        CHAR_HEIGHT
  187. %token        CHAR_EXP
  188. %token        CHAR_SPACE
  189. %token        CHAR_UP_VECTOR
  190. %token        ANNO_TEXT_CHAR_HEIGHT
  191. %token        ANNO_TEXT_CHAR_UP_VECTOR
  192. %token        ANNO_TEXT_STYLE
  193.  
  194. /*--------------------------------------------------------------------*\
  195. |    Rendering Attributes
  196. \*--------------------------------------------------------------------*/
  197.         /*    DEFINE_LIGHT:        MOVED*/
  198. %token        LIGHT_STATE
  199. %token        DEPTHCUE_INDEX
  200. %token        HLHS_REMOVAL
  201.         /*    DEFINE_COLOR:        MOVED*/
  202.         /*    DEFINE_COLOR_RAMP:    DELETED*/
  203.         /*    COLOR_MODEL:        DELETED*/
  204.         /*    BACKGROUND_COLOR_INDEX:    MOVED*/
  205.  
  206. /*--------------------------------------------------------------------*\
  207. |    Matrix Manipulation Entities
  208. \*--------------------------------------------------------------------*/
  209. %token        IDENTITY3
  210. %token        CONCAT_MATRIX3
  211. %token        INVERT_MATRIX3
  212. %token        ROTATE3
  213. %token        ROTATE_XYZ3
  214. %token        TRANSLATE3
  215. %token        SCALE3
  216. %token        MATRIX3
  217. %token        GET_MATRIX3
  218. %token        PUSH_MATRIX3
  219. %token        POP_MATRIX3
  220. %token        GLOBAL_TRANSFORMATION3
  221. %token        LOCAL_TRANSFORMATION3
  222. %token        APPLY_TO_GLOBAL3
  223. %token        APPLY_TO_LOCAL3
  224. %token        VIEW_ORIENTATION3
  225. %token        VIEW_MAPPING3
  226.         /*    DEFINE_VIEW_SPECIFICATION:    MOVED*/
  227.         /*    DEFAULT_VIEW_SPECIFICATION:    MOVED*/
  228. %token        ACTIVE_VIEW
  229.  
  230. /*--------------------------------------------------------------------*\
  231. |    Structure Hierarchy
  232. \*--------------------------------------------------------------------*/
  233. %token        EXECUTE_STRUCTURE
  234. %token        CALL_STRUCTURE
  235.  
  236. /*--------------------------------------------------------------------*\
  237. |    Verb File Entities
  238. \*--------------------------------------------------------------------*/
  239. %token        READ_GEOMETRY_FILE
  240. %token        CLEAR_GEOMETRY
  241. %token        BEGIN_TEST
  242. %token        END_TEST
  243. %token        PAUSE
  244. %token        SLEEP
  245. %token        INVOKE_AT_FRAME
  246. %token        DEFINE_COLOR            /* MOVED+DELTA */
  247. %token        BACKGROUND_COLOR
  248. %token        BACKGROUND_COLOR_INDEX        /*MOVED*/
  249. %token        DEFINE_VIEW_SPECIFICATION    /*MOVED*/
  250. %token        DEFAULT_VIEW_SPECIFICATION    /*MOVED*/
  251. %token        DEFINE_LIGHT            /*MOVED+DELTA*/
  252. %token        DEFINE_DEPTHCUE
  253. %token        CONFIGURATION
  254.  
  255. /*--------------------------------------------------------------------*\
  256. |    Additional Keywords
  257. \*--------------------------------------------------------------------*/
  258. %token        KNOTS                /* ver 1.0 */
  259. %token        CTRL_POINTS            /* ver 1.0 */
  260. %token        UKNOTS                /* ver 1.0 */
  261. %token        VKNOTS                /* ver 1.0 */
  262. %token        TRIMLOOP            /* ver 1.0 */
  263. %token        TRIMCURVE            /* ver 1.0 */
  264. %token        RATIONAL            /* ver 1.0 */
  265. %token        NON_RATIONAL            /* ver 1.0 */
  266. %token        IGNORE_GROUP
  267. %token        VERTEX_COLORS
  268. %token        VERTEX_NORMALS
  269. %token        VERTEX_COLOR_INDICES
  270. %token        FACET_COLORS
  271. %token        FACET_NORMALS
  272. %token        FACET_COLOR_INDICES
  273. %token        VERTEX_COORDINATES
  274. %token        EDGE_VISIBILITY
  275. %token        ENABLE
  276. %token        DISABLE
  277. %token        STRING
  278. %token        CHAR
  279. %token        STROKE
  280. %token        WORLD
  281. %token        MODELLING
  282. %token        AMBIENT_LIGHT
  283. %token        DIRECTIONAL_LIGHT
  284. %token        POSITIONAL_LIGHT
  285. %token        SPOT_LIGHT
  286. %token        LD_TRANSFORM
  287. %token        ACTIVATE_LIST
  288. %token        DEACTIVATE_LIST
  289.         /*    HLHS_REMOVAL    */
  290. %token        HLHSRID
  291. %token        HLHS_DISABLE
  292. %token        HLHS_ENABLE
  293. %token        MAKE_RAMP
  294. %token        COLOR_LIST
  295. %token        RGB
  296. %token        CIE
  297. %token        HSV
  298. %token        HLS
  299. %token        PRECONCAT
  300. %token        POSTCONCAT
  301. %token        REPLACE
  302. %token        X_AXIS
  303. %token        Y_AXIS
  304. %token        Z_AXIS
  305. %token        PERSPECTIVE
  306. %token        PARALLEL
  307. %token        MATCH_VIEW_AREA
  308. %token        ADJUST_X
  309. %token        ADJUST_Y
  310. %token        GROW
  311. %token        SHRINK
  312. %token        XY_CLIP
  313. %token        NO_XY_CLIP
  314. %token        FRONT_CLIP
  315. %token        NO_FRONT_CLIP
  316. %token        BACK_CLIP
  317. %token        NO_BACK_CLIP
  318. %token        HOLLOW
  319. %token        SOLID
  320. %token        PATTERN
  321. %token        EMPTY
  322. %token        VIEW_MAPPING
  323. %token        VIEW_ORIENTATION
  324. %token        GLOBAL_MODELLING
  325. %token        LOCAL_MODELLING
  326. %token        COMPOSITE_MODELLING
  327. %token        SPECIFY_REPORT_FILE
  328. %token        TO
  329. %token        END
  330. %token        EXECUTE
  331. %token        CALL
  332. %token        WINDOW_SIZE
  333. %token        DOUBLE_BUFFER
  334. %token        SINGLE_BUFFER
  335. %token        TRUE_COLOR
  336. %token        PSEUDO_COLOR
  337. %token        FACET_COLOR_INDICES
  338. %token        FACET_CONNECTIVITY
  339. %token        EXACT
  340. %token        CENTER
  341. %token        RADIUS
  342. %token        SCALE_FACTORS
  343. %token        NORMAL
  344. %token        TEXT_DIRECTION
  345. %token        ADD
  346. %token        AND
  347. %token        CLEAR
  348. %token        INVERT
  349. %token        NAND
  350. %token        NOOP
  351. %token        NOR
  352. %token        OR
  353. %token        SET
  354. %token        SUBTRACT_DEST
  355. %token        SUBTRACT_SOURCE
  356. %token        XOR
  357. %token        PIXEL_VALUES
  358. %token        INTENSITY_VALUES
  359. %token        PIXEL_VALUE_SEGMENTS
  360. %token        INTENSITY_VALUE_SEGMENTS
  361. %token        FIRST_FILE
  362. %token        END_GEOM_FILE
  363. %token    <str>    UNRECOGNIZED_KEYWORD
  364.  
  365.  
  366. %type  <f>    real_num
  367. %type  <l>    rational_non_rational        /* ver 1.0 */
  368. %type  <l>    pre_post_replace        
  369. %type  <l>    matrix_to_get
  370. %type  <l>    axis_flag            
  371. %type  <l>    perspective_flag
  372. %type  <l>    adjust_flag            
  373. %type  <l>    xy_clip_flag            
  374. %type  <l>    front_clip_flag            
  375. %type  <l>    back_clip_flag            
  376. %type  <l>    interior_keyword
  377. %type  <l>    exe_or_call
  378. %type  <l>    pixel_map3_list_type
  379. %type  <l>    replace_function
  380. /*---------------*/
  381. /* Grammar Rules */
  382. /*---------------*/
  383.  
  384. %%
  385.  
  386. /* ------------------------------------------------------------------ */
  387. bif_file                :    /* empty */
  388.             |    FIRST_FILE configuration bif_verb_file
  389.                 { close_reportfile(); }
  390.             |    bif_verb_file
  391.                 { close_reportfile(); }
  392.             |       FIRST_FILE b_configuration bif_geometry_file
  393.                 { close_reportfile(); }
  394.             ;
  395.  
  396. bif_verb_file           :       bif_verb_file_entity
  397.             |       bif_verb_file   bif_verb_file_entity
  398.             ;
  399.  
  400. bif_geometry_file       :       bif_struct_entity
  401.             |       bif_geometry_file bif_struct_entity
  402.             ;
  403.  
  404. bif_verb_file_entity    :       bif_geometry_entity
  405.             |       bif_verb_entity
  406.             |       bif_test_structure
  407.             ;
  408.  
  409. bif_struct_entity       :       struct_header struct_body struct_end
  410.             ;
  411. /* ------------------------------------------------------------------ */
  412. struct_header           :       BEGIN_STRUCTURE LONG ';'
  413.                 { (void)bif_begstr($2); }
  414.             ;
  415.  
  416. struct_body             :       /* empty */
  417.             |       struct_body bif_geometry_entity
  418.             ;
  419.  
  420. /* ------------------------------------------------------------------ */
  421. struct_end              :       END_STRUCTURE ';'
  422.                 { (void)bif_endstr(); }
  423.  
  424. bif_test_structure      :       test_header test_prefix 
  425.                 test_body test_end
  426.             ;
  427. /* ------------------------------------------------------------------ */
  428. test_header             :       BEGIN_TEST LONG ';'
  429.                 { (void)bif_begintest($2); }
  430.             ;
  431. test_prefix        :    /* empty */
  432.             |    test_prefix  define_light
  433.             |    test_prefix  define_view_specification
  434.             ;
  435.  
  436. test_body               :       /* empty */
  437.             |       test_body  bif_geometry_entity
  438.             |    test_body  invoke_at_frame    
  439.             ;
  440.  
  441. test_end                :       END_TEST ';'
  442.                 { (void)bif_endtest(); }
  443.             ;
  444. /* ------------------------------------------------------------------ */
  445. bif_geometry_entity     :     label
  446.             |    marker
  447.             |    marker3     
  448.             |    line
  449.             |    line3 
  450.             |    polygon 
  451.             |     polygon3 
  452.             |    fill_area_set
  453.             |    fill_area_set3
  454.             |    triangle3
  455.             |    quad_mesh3
  456.             |    index_polygons3
  457.             |    gen_sphere3
  458.             |    gen_circle
  459.             |    gen_circle3
  460.             |    text
  461.             |    text3
  462.             |    annotation_text
  463.             |    pixel_map3
  464.             |    non_uniform_bspline_curve     /* rev 1.0 */
  465.             |    non_uniform_bspline_surface     /* rev 1.0 */
  466.             |    curve_approximation_criteria     /* rev 1.0 */
  467.             |    trimcurve_approximation_criteria /* rev 1.0 */
  468.             |    surface_approximation_criteria     /* rev 1.0 */
  469.             |    marker_type
  470.             |    marker_size
  471.             |    marker_color
  472.             |    marker_color_index
  473.             |    line_type
  474.             |    line_width
  475.             |    line_color
  476.             |    line_color_index
  477.             |    line_shading
  478.             |    interior_style
  479.             |    interior_pattern_index
  480.             |    interior_color
  481.             |    interior_color_index
  482.             |    backface_interior_color
  483.             |    backface_interior_color_index
  484.             |    interior_shading
  485.             |    interior_lighting
  486.             |    surface_properties
  487.             |    backface_properties
  488.             |    backface_processing
  489.             |    edge_flag
  490.             |    edge_type
  491.             |    edge_width
  492.             |    edge_color
  493.             |    edge_color_index
  494.             |    text_font
  495.             |    text_prec
  496.             |    text_color
  497.             |    text_color_index
  498.             |    text_path
  499.             |    text_align
  500.             |    char_height
  501.             |    char_exp
  502.             |    char_space
  503.             |    char_up_vector
  504.             |    anno_text_char_height
  505.             |    anno_text_char_up_vector
  506.             |    anno_text_style    
  507.             |    light_state
  508.             |    depthcue_index
  509.             |    hlhs_removal
  510.             |    identity3
  511.             |    concat_matrix3
  512.             |    invert_matrix3
  513.             |    rotate3
  514.             |    rotate_xyz3
  515.             |    translate3
  516.             |    scale3
  517.             |    matrix3
  518.             |    get_matrix3
  519.             |    push_matrix3
  520.             |    pop_matrix3
  521.             |    global_transformation3
  522.             |    local_transformation3
  523.             |    apply_to_global3
  524.             |    apply_to_local3
  525.             |    view_orientation3
  526.             |    view_mapping3
  527.             |    active_view
  528.             |    execute_structure
  529.             |    call_structure
  530.             |    unrecognized_entity
  531.             ;    
  532.  
  533. bif_verb_entity         :       read_geometry_file
  534.             |       clear_geometry
  535.             |    specify_report_file
  536.             |       pause
  537.             |       sleep
  538.             |    define_color
  539.             |    background_color
  540.             |    background_color_index
  541.             |    define_view_specification  
  542.             |    default_view_specification
  543.             |    define_depthcue    
  544.             |    define_light
  545.             ;
  546. /* ------------------------------------------------------------------ */
  547. label                      :       LABEL   /* rev 0.8 */
  548.                 LONG
  549.                 ';'
  550.                 { (void)bif_label($2); } /* rev 0.8 */
  551.             ;
  552. /* ------------------------------------------------------------------ */
  553. marker                  :       MARKER /* rev 0.8 */
  554.                 { (void) bif_marker(BIF_P_BEGIN); } /*rev 0.8*/
  555.                 bif_pair ';'
  556.                 { (void)bif_marker(BIF_P_END  ); }
  557.             ;
  558. /* ------------------------------------------------------------------ */
  559. marker3                 :       MARKER3
  560.                 { (void)bif_marker3(BIF_P_BEGIN); }
  561.                 bif_triplet ';'
  562.                 { (void)bif_marker3(BIF_P_END  ); }
  563.             ;
  564.  
  565. bif_pair                   :       real_num real_num  /* rev 0.8 */
  566.                 {
  567.                  (void)bif_pair($1,$2);  /* rev 0.8 */
  568.                 }
  569.             |       bif_pair real_num real_num 
  570.                 {(void)bif_pair($2,$3); }
  571.             ;
  572.  
  573. bif_triplet             :       real_num real_num real_num
  574.                 {
  575.                  (void)bif_triplet($1,$2,$3); 
  576.                 }
  577.             |       bif_triplet real_num real_num real_num
  578.                 {(void)bif_triplet($2,$3,$4);}
  579.             ;
  580.  
  581. bif_intlist             :       /* empty */
  582.             |       bif_intlist LONG
  583.                 { bif_intlist($2); }
  584.             ;
  585. /* ------------------------------------------------------------------ */
  586. line                    :       LINE /* rev 0.8 */
  587.                 { (void)
  588.                    bif_line(BIF_P_BEGIN); } /* rev 0.8 */
  589.                 bif_pair ';'
  590.                 { (void)bif_line(BIF_P_END  ); }
  591.             ;
  592. /* ------------------------------------------------------------------ */
  593. line3                   :       LINE3
  594.                 { 
  595.                   bif_line3(BIF_P_BEGIN); 
  596.                   not_repeated(-1); 
  597.                   with_data_name = "LINE3";
  598.                 }
  599.                 vertex_coordinates line3_body ';'
  600.                 { 
  601.                   not_repeated(-1); 
  602.                   bif_line3(BIF_P_END  ); 
  603.                 }
  604.             ;
  605.  
  606. line3_body            :       /* empty */
  607.             |    line3_body vertex_colors   
  608.             |    line3_body vertex_color_indices
  609.             ;
  610.  
  611. /* ------------------------------------------------------------------ */
  612. polygon                 :       POLYGON /* rev 0.8 */
  613.                 { (void)
  614.                    bif_polygon(BIF_P_BEGIN); } /* rev 0.8 */
  615.                 bif_pair ';'
  616.                 { (void)bif_polygon(BIF_P_END  ); }
  617.  
  618. /* ------------------------------------------------------------------ */
  619. polygon3                  :       POLYGON3
  620.                 { 
  621.                   bif_polygon3 (BIF_P_BEGIN); 
  622.                   not_repeated(-1); 
  623.                   with_data_name = "POLYGON3";
  624.                 } 
  625.                 vertex_coordinates with_data3_body ';'
  626.                 { 
  627.                   not_repeated(-1); 
  628.                   (void)bif_polygon3 (BIF_P_END  ); 
  629.                 } 
  630.             ;
  631.  
  632. vertex_coordinates      :       { (void)bif_group(VERTEX_COORDINATES); }
  633.                 bif_triplet 
  634.                 { (void)bif_group(BIF_END_OF_GROUP); }
  635.             ;
  636.  
  637. with_data3_body         :       /* empty */
  638.             |    with_data3_body vertex_colors   
  639.             |    with_data3_body vertex_color_indices
  640.             |    with_data3_body vertex_normals
  641.             |    with_data3_body facet_colors    
  642.             |    with_data3_body facet_color_indices
  643.             |    with_data3_body facet_normals
  644.             ;
  645.  
  646. vertex_colors        :       VERTEX_COLORS  
  647.                 { 
  648.                   if(not_repeated(1)) 
  649.                   bif_group(VERTEX_COLORS); 
  650.                   else 
  651.                   { 
  652.                      (void)bif_group(IGNORE_GROUP);  
  653.                      WD3B_error("VERTEX_COLORS"); 
  654.                   } 
  655.                 } 
  656.                 '{' bif_triplet '}' 
  657.                 { (void)bif_group(BIF_END_OF_GROUP); } 
  658.             ; 
  659.  
  660. vertex_color_indices    :       VERTEX_COLOR_INDICES  
  661.                 { 
  662.                   if(not_repeated(2)) 
  663.                   bif_group(VERTEX_COLOR_INDICES); 
  664.                   else 
  665.                   { 
  666.                      (void)bif_group(IGNORE_GROUP);  
  667.                      WD3B_error("VERTEX_COLOR_INDICES"); 
  668.                   } 
  669.                 } 
  670.                 '{' bif_intlist '}' 
  671.                 { (void)bif_group(BIF_END_OF_GROUP); } 
  672.             ; 
  673.  
  674.  
  675. vertex_normals        :       VERTEX_NORMALS  
  676.                 { 
  677.                   if(not_repeated(3)) 
  678.                   bif_group(VERTEX_NORMALS); 
  679.                   else 
  680.                   { 
  681.                      (void)bif_group(IGNORE_GROUP);  
  682.                      WD3B_error("VERTEX_NORMALS"); 
  683.                   } 
  684.                 } 
  685.                 '{' bif_triplet '}' 
  686.                 { (void)bif_group(BIF_END_OF_GROUP); } 
  687.             ; 
  688.  
  689.  
  690. facet_colors        :       FACET_COLORS  
  691.                 { 
  692.                   if(not_repeated(4)) 
  693.                   bif_group(FACET_COLORS); 
  694.                   else 
  695.                   { 
  696.                      (void)bif_group(IGNORE_GROUP);  
  697.                      WD3B_error("FACET_COLORS"); 
  698.                   } 
  699.                 } 
  700.                 '{' bif_triplet '}' 
  701.                 { (void)bif_group(BIF_END_OF_GROUP); } 
  702.             ; 
  703.  
  704.  
  705. facet_color_indices    :       FACET_COLOR_INDICES  
  706.                 { 
  707.                   if(not_repeated(5)) 
  708.                   bif_group(FACET_COLOR_INDICES); 
  709.                   else 
  710.                   { 
  711.                      (void)bif_group(IGNORE_GROUP);  
  712.                      WD3B_error("FACET_COLOR_INDICES"); 
  713.                   } 
  714.                 } 
  715.                 '{' bif_intlist '}' 
  716.                 { (void)bif_group(BIF_END_OF_GROUP); } 
  717.             ; 
  718.  
  719.  
  720. facet_normals        :       FACET_NORMALS  
  721.                 { 
  722.                   if(not_repeated(6)) 
  723.                   bif_group(FACET_NORMALS); 
  724.                   else 
  725.                   { 
  726.                      (void)bif_group(IGNORE_GROUP);  
  727.                      WD3B_error("FACET_NORMALS"); 
  728.                   } 
  729.                 } 
  730.                 '{' bif_triplet '}' 
  731.                 { (void)bif_group(BIF_END_OF_GROUP); } 
  732.             ; 
  733.  
  734. /* ------------------------------------------------------------------ */
  735.                 /* OLD: remove bif_faset3 if no other ref. */
  736. fill_area_set        :       FILL_AREA_SET /* rev 0.8 */
  737.                 { 
  738.                   (void)bif_faset (BIF_P_BEGIN);  /* rev 0.8 */
  739.                   (void)bif_group(VERTEX_COORDINATES); 
  740.                 }
  741.                 bif_pair_set
  742.                 ';'
  743.                 { 
  744.                   (void)bif_group(BIF_END_OF_GROUP); 
  745.                   (void)bif_faset (BIF_P_END  ); 
  746.                 }
  747.             ;
  748.  
  749. bif_intlist_set         :       '{' /* rev 0.8 */
  750.                 { (void)bif_contour(BIF_P_BEGIN); }
  751.                     bif_intlist
  752.                 '}'
  753.                 { (void)bif_contour(BIF_P_END  ); }
  754.             |    bif_intlist_set
  755.                 '{'
  756.                 { (void)bif_contour(BIF_P_BEGIN); }
  757.                     bif_intlist
  758.                 '}'
  759.                 { (void)bif_contour(BIF_P_END  ); }
  760.             ;
  761.  
  762. bif_pair_set            :       '{'  /* rev 0.8 */
  763.                 { (void)bif_contour(BIF_P_BEGIN); }
  764.                 bif_pair
  765.                 '}'
  766.                 { (void)bif_contour(BIF_P_END  ); }
  767.             |       bif_pair_set
  768.                 '{'
  769.                 { (void)bif_contour(BIF_P_BEGIN); }
  770.                 bif_pair
  771.                 '}'
  772.                 { (void)bif_contour(BIF_P_END  ); }
  773.             ;
  774.  
  775. bif_triplet_set         :       '{'
  776.                 { (void)bif_contour(BIF_P_BEGIN); }
  777.                 bif_triplet
  778.                 '}'
  779.                 { (void)bif_contour(BIF_P_END  ); }
  780.             |       bif_triplet_set
  781.                 '{'
  782.                 { (void)bif_contour(BIF_P_BEGIN); }
  783.                 bif_triplet
  784.                 '}'
  785.                 { (void)bif_contour(BIF_P_END  ); }
  786.             ;
  787. /* ------------------------------------------------------------------ */
  788. fill_area_set3          :       FILL_AREA_SET3
  789.                 { 
  790.                   (void)bif_faset3(BIF_P_BEGIN); 
  791.                   (void)bif_group(VERTEX_COORDINATES); 
  792.                 }
  793.                 bif_triplet_set 
  794.                 { 
  795.                    (void)bif_group(BIF_END_OF_GROUP); 
  796.                    (void)not_repeated(-1); 
  797.                  }
  798.                 fasetdata3_body ';'
  799.                 { 
  800.                    (void)not_repeated(-1); 
  801.                    (void)bif_faset3 (BIF_P_END  );
  802.                  }
  803.             ;
  804.  
  805. fasetdata3_body         :      /* empty */ 
  806.             |    fasetdata3_body vertex_colors_set
  807.             |    fasetdata3_body vertex_color_indices_set
  808.             |    fasetdata3_body vertex_normals_set
  809.             |    fasetdata3_body edge_visibility_set
  810.             |    fasetdata3_body facet_colors_set
  811.             |    fasetdata3_body facet_color_indices_set
  812.             |    fasetdata3_body facet_normals_set
  813.             ;
  814.  
  815. vertex_colors_set       :       VERTEX_COLORS
  816.                 { if(not_repeated(1))
  817.                      (void)bif_group(VERTEX_COLORS); 
  818.                   else
  819.                   {
  820.                      (void)bif_group(IGNORE_GROUP); /*rev 0.8*/
  821.                      yyerror(FAS_ERM1);
  822.                   }
  823.                 }
  824.                 '{' bif_triplet_set '}'
  825.                 { (void)bif_group(BIF_END_OF_GROUP); }
  826.             ;
  827.  
  828. vertex_color_indices_set :       VERTEX_COLOR_INDICES
  829.                 { if(not_repeated(2))
  830.                      (void)bif_group(VERTEX_COLOR_INDICES);
  831.                   else
  832.                   {
  833.                      (void)bif_group(IGNORE_GROUP); /*rev 0.8*/
  834.                      yyerror(FAS_ERM2);
  835.                   }
  836.                 }
  837.                 '{' bif_intlist_set '}'
  838.                 { (void)bif_group(BIF_END_OF_GROUP); }
  839.             ;
  840.  
  841. vertex_normals_set      :       VERTEX_NORMALS
  842.                 { if(not_repeated(3))
  843.                      (void)bif_group(VERTEX_NORMALS);
  844.                   else
  845.                   {
  846.                      (void)bif_group(IGNORE_GROUP); 
  847.                      yyerror(FAS_ERM3);
  848.                   }
  849.                 }
  850.                 '{' bif_triplet_set '}'
  851.                 { (void)bif_group(BIF_END_OF_GROUP); }
  852.             ;
  853.  
  854. edge_visibility_set     :       EDGE_VISIBILITY
  855.                 { if(not_repeated(4))
  856.                      (void)bif_group(EDGE_VISIBILITY);
  857.                   else
  858.                   {
  859.                      (void)bif_group(IGNORE_GROUP); 
  860.                      yyerror(FAS_ERM4);
  861.                   }
  862.                 }
  863.                 '{' bif_intlist_set '}'
  864.                 { (void)bif_group(BIF_END_OF_GROUP); }
  865.             ;
  866.  
  867. facet_colors_set        :       FACET_COLORS
  868.                 { if(not_repeated(5))
  869.                      (void)bif_group(FACET_COLORS);
  870.                   else
  871.                   {
  872.                      (void)bif_group(IGNORE_GROUP); 
  873.                      yyerror(FAS_ERM5);
  874.                   }
  875.                 }
  876.                 '{' bif_triplet '}'
  877.                 { (void)bif_group(BIF_END_OF_GROUP); }
  878.             ;
  879.  
  880. facet_color_indices_set :       FACET_COLOR_INDICES
  881.                 { if(not_repeated(6))
  882.                      (void)bif_group(FACET_COLOR_INDICES);
  883.                   else
  884.                   {
  885.                      (void)bif_group(IGNORE_GROUP); 
  886.                      yyerror(FAS_ERM6);
  887.                   }
  888.                 }
  889.                 '{' bif_intlist '}'
  890.                 { (void)bif_group(BIF_END_OF_GROUP); }
  891.             ;
  892.  
  893. facet_normals_set       :       FACET_NORMALS
  894.                 { if(not_repeated(7))
  895.                      (void)bif_group(FACET_NORMALS);
  896.                   else
  897.                   {
  898.                      (void)bif_group(IGNORE_GROUP); 
  899.                      yyerror(FAS_ERM7);
  900.                   }
  901.                 }
  902.                 '{' bif_triplet '}'
  903.                 { (void)bif_group(BIF_END_OF_GROUP); }
  904.             ;
  905.  
  906. /* ------------------------------------------------------------------ */
  907. triangle3         :       TRIANGLE3 /* rev 0.8 */
  908.                 {
  909.                   bif_triangle3 (BIF_P_BEGIN);/* rev 0.8 */
  910.                   not_repeated(-1); 
  911.                   with_data_name = "TRIANGLE3";
  912.                 } 
  913.                 vertex_coordinates with_data3_body ';'
  914.                 {
  915.                   not_repeated(-1); 
  916.                   (void)bif_triangle3 (BIF_P_END  ); 
  917.                 }
  918.             ;
  919. /* ------------------------------------------------------------------ */
  920. quad_mesh3        :    QUAD_MESH3 /* rev 0.8 */
  921.                 LONG LONG
  922.                 {
  923.                   (void)bif_quad_mesh3 (BIF_P_BEGIN);/*rev 0.8*/
  924.                   (void)bif_quadmeshorder($2,$3);    /*rev 0.8*/
  925.                   not_repeated(-1); 
  926.                   with_data_name = "QUAD_MESH3";
  927.                 }
  928.                 vertex_coordinates with_data3_body ';'
  929.                 {
  930.                   not_repeated(-1); 
  931.                   (void)bif_quad_mesh3 (BIF_P_END  ); 
  932.                 }
  933.             ;
  934. /* ------------------------------------------------------------------ */
  935. index_polygons3        :    INDEX_POLYGONS3 /* rev 0.8 */
  936.                 {
  937.                   bif_indexpoly3 (BIF_P_BEGIN); /* rev 0.8 */
  938.                   not_repeated(-1); 
  939.                   with_data_name = "INDEX_POLYGON3";
  940.                 }
  941.                 vertex_coordinates 
  942.                 facet_connectivity
  943.                 index_polygons3_body ';'
  944.                 {
  945.                   not_repeated(-1); 
  946.                   (void)bif_indexpoly3 (BIF_P_END  ); 
  947.                 }
  948.             ;
  949.  
  950. index_polygons3_body    :       /* empty */
  951.             |    index_polygons3_body edge_visibility   
  952.             |    index_polygons3_body vertex_colors   
  953.             |    index_polygons3_body vertex_color_indices
  954.             |    index_polygons3_body vertex_normals
  955.             |    index_polygons3_body facet_colors    
  956.             |    index_polygons3_body facet_color_indices
  957.             |    index_polygons3_body facet_normals
  958.             ;
  959.  
  960.  
  961. edge_visibility        :    EDGE_VISIBILITY
  962.                 { 
  963.                   if(not_repeated(7)) 
  964.                   bif_group(EDGE_VISIBILITY); 
  965.                   else 
  966.                   { 
  967.                      (void)bif_group(IGNORE_GROUP);  
  968.                      WD3B_error("EDGE_VISIBILITY"); 
  969.                   } 
  970.                 } 
  971.                 '{' bif_intlist_set '}' 
  972.                 { (void)bif_group(BIF_END_OF_GROUP); } 
  973.             ; 
  974.  
  975.             ;
  976.  
  977. facet_connectivity    :    FACET_CONNECTIVITY /* rev 0.8 */
  978.                 {(void)bif_group(FACET_CONNECTIVITY);}
  979.                                 /*rev 0.8*/
  980.                 '{' bif_intlist_set '}'
  981.                 {(void)bif_group(BIF_END_OF_GROUP); }
  982.             ;
  983. /* ------------------------------------------------------------------ */
  984. gen_sphere3        :    GEN_SPHERE3 /* rev 0.8 */
  985.                 LONG LONG
  986.                 {
  987.                    (void)bif_sphere3(BIF_P_BEGIN); /* rev 0.8 */
  988.                    (void)bif_sphereorder($2,$3);
  989.                    (void)not_repeated(-1); 
  990.                 }
  991.                 gen_sphere3_body
  992.                 ';'
  993.                 {
  994.                    (void)not_repeated(-1); 
  995.                    (void)bif_sphere3(BIF_P_END); 
  996.                 }
  997.             ;
  998.  
  999. gen_sphere3_body    :    /* empty */
  1000.             |    gen_sphere3_body EXACT
  1001.                 { 
  1002.                   bif_exact(TRUE);
  1003.                 }
  1004.             |    gen_sphere3_body CENTER 
  1005.                 '{' real_num real_num real_num '}'
  1006.                 { 
  1007.                   if(not_repeated(1)) 
  1008.                      bif_center($4,$5,$6); /* rev 0.8 */
  1009.                   else yyerror(GS_ERM1);
  1010.                 }
  1011.             |    gen_sphere3_body RADIUS 
  1012.                 '{' real_num  '}'
  1013.                 { 
  1014.                   if(not_repeated(2)) 
  1015.                      bif_radius($4); /* rev 0.8 */
  1016.                   else yyerror(GS_ERM2);
  1017.                 }
  1018.             |    gen_sphere3_body SCALE_FACTORS 
  1019.                 '{' real_num real_num real_num '}'
  1020.                 { 
  1021.                   if(not_repeated(3)) 
  1022.                      bif_scalefactors($4,$5,$6); /* rev 0.8 */
  1023.                   else yyerror(GS_ERM3);
  1024.                 }
  1025.             ;
  1026. /* ------------------------------------------------------------------ */
  1027. gen_circle        :    GEN_CIRCLE /* rev 0.8: */
  1028.                 LONG
  1029.                 {
  1030.                    (void)bif_gencircle(BIF_P_BEGIN); /*rev 0.8*/
  1031.                    (void)bif_circleedges($2); /* rev 0.8 */
  1032.                    (void)not_repeated(-1); 
  1033.                 }
  1034.                 gen_circle_body
  1035.                 ';'
  1036.                 {
  1037.                    (void)not_repeated(-1); 
  1038.                    (void)bif_gencircle(BIF_P_END);
  1039.                 }
  1040.             ;
  1041.  
  1042. gen_circle_body    :        /* empty */
  1043.             |    gen_circle_body EXACT
  1044.                 { 
  1045.                   bif_exact(TRUE);
  1046.                 }
  1047.             |    gen_circle_body CENTER 
  1048.                 '{' real_num real_num '}'
  1049.                 { 
  1050.                   if(not_repeated(1)) 
  1051.                      bif_center($4,$5,0.0); /* rev 0.8 */
  1052.                   else yyerror(GC_ERM1);
  1053.                 }
  1054.             |    gen_circle_body RADIUS 
  1055.                 '{' real_num '}'
  1056.                 { 
  1057.                   if(not_repeated(2)) 
  1058.                      bif_radius($4); /* rev 0.8 */
  1059.                   else yyerror(GC_ERM2);
  1060.                 }
  1061.             ;
  1062. /* ------------------------------------------------------------------ */
  1063. gen_circle3        :    GEN_CIRCLE3 /* rev 0.8: */
  1064.                 LONG
  1065.                 {
  1066.                    (void)bif_gencircle3(BIF_P_BEGIN);/*rev 0.8*/
  1067.                    (void)bif_circleedges($2); /* rev 0.8 +3 */
  1068.                    (void)not_repeated(-1); 
  1069.                 }
  1070.                 gen_circle3_body
  1071.                 ';'
  1072.                 {
  1073.                    (void)not_repeated(-1); 
  1074.                    (void)bif_gencircle3(BIF_P_END);
  1075.                 }
  1076.             ;
  1077.  
  1078. gen_circle3_body    :    /* empty */
  1079.             |    gen_circle3_body EXACT
  1080.                 { 
  1081.                   bif_exact(TRUE);
  1082.                 }
  1083.             |    gen_circle3_body CENTER 
  1084.                 '{' real_num real_num real_num '}'
  1085.                 { 
  1086.                   if(not_repeated(1)) 
  1087.                      bif_center($4,$5,$6); /* rev 0.8 */
  1088.                   else yyerror(GC3_ERM1);
  1089.                 }
  1090.             |    gen_circle3_body RADIUS 
  1091.                 '{' real_num  '}'
  1092.                 { 
  1093.                   if(not_repeated(2)) 
  1094.                      bif_radius($4); /* rev 0.8 */
  1095.                   else yyerror(GC3_ERM2);
  1096.                 }
  1097.             |    gen_circle3_body NORMAL 
  1098.                 '{' real_num real_num real_num  '}'
  1099.                 { 
  1100.                   if(not_repeated(3)) 
  1101.                      bif_normal($4,$5,$6); /* rev 0.8 */
  1102.                   else yyerror(GC3_ERM3);
  1103.                 }
  1104.             ;
  1105. /* ------------------------------------------------------------------ */
  1106. text            :    TEXT /* rev 0.8 */
  1107.                 real_num real_num
  1108.                 QSTRING
  1109.                 ';'
  1110.                 {bif_text($2,$3,$4);} /* rev 0.8 */
  1111.             ;
  1112. /* ------------------------------------------------------------------ */
  1113. text3                   :       TEXT3
  1114.                 real_num real_num real_num
  1115.                 QSTRING
  1116.                 ';'
  1117.                 { (void)bif_text3($2,$3,$4,$5, /*rev 0.8 delta*/
  1118.                     FALSE,0.,0.,0.,0.,0.,0.); }  /*rev 0.8 delta*/
  1119.             |    TEXT3
  1120.                 real_num real_num real_num
  1121.                 QSTRING
  1122.                 TEXT_DIRECTION
  1123.                 '{'
  1124.                 real_num real_num real_num
  1125.                 real_num real_num real_num
  1126.                 '}'
  1127.                 ';'
  1128.                 { (void)bif_text3($2,$3,$4,$5, /*rev 0.8 delta*/
  1129.                 TRUE,$8,$9,$10,$11,$12,$13);}  /*rev 0.8 delta*/
  1130.             ;
  1131. /* ------------------------------------------------------------------ */
  1132. annotation_text        :    ANNOTATION_TEXT3
  1133.                 real_num real_num real_num
  1134.                 real_num real_num real_num
  1135.                 QSTRING
  1136.                 ';'
  1137.                 {bif_annotationtext($2,$3,$4, /* rev 0.8 */
  1138.                 $5,$6,$7,$8);}
  1139.             ;
  1140. /* ------------------------------------------------------------------ */
  1141. /*
  1142. #ifdef EXTERNAL_NOTE
  1143.     The pixel_map3 entry has been modified to used the generated
  1144.     entities own "final" storage for the pixel map.
  1145.     bif_pixelmap3(BEGIN,..) initializes the pixel_map space, and
  1146.     lets bif_fillpixelbuffer know where to store the pixel values.
  1147. #endif 
  1148. */
  1149. pixel_map3        :    PIXEL_MAP3 /* rev 0.8 */
  1150.                 real_num real_num real_num
  1151.                 LONG LONG
  1152.                 replace_function
  1153.                 pixel_map3_list_type
  1154.                 {
  1155.                    bif_pixelmap3(BIF_P_BEGIN,
  1156.                            $2,$3,$4, $5,$6,$7,$8);
  1157.                 }
  1158.                 '{' pixel_list '}'
  1159.                 pixel_pseudo_color
  1160.                 ';'
  1161.                 {
  1162.                   bif_pixelmap3(BIF_P_END,
  1163.                         0,0,0,0,0,0,0 );
  1164.                 }
  1165.             ;
  1166.  
  1167. replace_function    :    /* empty */ { $$ = REPLACE ; } /* rev 0.8 */
  1168.             |    ADD    {$$=ADD;}    /* rev 0.8 */
  1169.             |    AND    {$$=AND;}    /* rev 0.8 */
  1170.             |    CLEAR    {$$=CLEAR;}    /* rev 0.8 */
  1171.             |    INVERT    {$$=INVERT;}    /* rev 0.8 */
  1172.             |    NAND    {$$=NAND;}    /* rev 0.8 */
  1173.             |    NOOP    {$$=NOOP;}    /* rev 0.8 */
  1174.             |    NOR    {$$=NOR;}    /* rev 0.8 */
  1175.             |    OR    {$$=OR;}    /* rev 0.8 */
  1176.             |    REPLACE    {$$=REPLACE;}    /* rev 0.8 */
  1177.             |    SET    {$$=SET;}    /* rev 0.8 */
  1178.             |    SUBTRACT_DEST   {$$=SUBTRACT_DEST;}  /*rev 0.8*/
  1179.             |    SUBTRACT_SOURCE    {$$=SUBTRACT_SOURCE;}/*rev 0.8*/
  1180.             |    XOR    {$$=XOR;}    /* rev 0.8 */
  1181.             ;
  1182.  
  1183. pixel_map3_list_type    :    PIXEL_VALUES
  1184.                 { $$ = PIXEL_VALUES ;             } /* rev 0.8*/
  1185.             |    INTENSITY_VALUES
  1186.                 { $$ = INTENSITY_VALUES ;         } /* rev 0.8*/
  1187.             |    PIXEL_VALUE_SEGMENTS
  1188.                 { $$ = PIXEL_VALUE_SEGMENTS ;     } /* rev 0.8*/
  1189.             |    INTENSITY_VALUE_SEGMENTS 
  1190.                 { $$ = INTENSITY_VALUE_SEGMENTS ; } /* rev 0.8*/
  1191.             ;
  1192.  
  1193. pixel_list              :       /* empty */
  1194.             |       pixel_list LONG
  1195.                 { bif_fillpixelbuffer($2); }
  1196.             ;
  1197.  
  1198. pixel_pseudo_color    :    /* empty */
  1199.             |    PSEUDO_COLOR
  1200.                 { bif_group(PSEUDO_COLOR); }
  1201.                 '{' bif_intlist '}'
  1202.                 { bif_group(BIF_END_OF_GROUP); }
  1203.             ;
  1204. /*--------------------------------------------------------------------*\
  1205. |     NON_UNIFORM_BSPLINE_CURVE : rev 1.0
  1206. \*--------------------------------------------------------------------*/
  1207. non_uniform_bspline_curve       :       NON_UNIFORM_BSPLINE_CURVE       
  1208.                     rational_non_rational
  1209.                     LONG
  1210.                     { 
  1211.                          (void)bif_nubc(BIF_P_BEGIN);
  1212.                         /*rev1.0*/ 
  1213.                        (void)bif_nubcholder($2,$3);
  1214.                         /*rev1.0*/
  1215.                          (void)bif_group(CTRL_POINTS); 
  1216.                         /* rev 1.0 CTRL_POINTS*/
  1217.                     }
  1218.                     bif_real_list
  1219.                     { 
  1220.                           (void)bif_group(BIF_END_OF_GROUP); 
  1221.                      }
  1222.                     knots
  1223.                     { 
  1224.                           (void)bif_nubc (BIF_P_END);
  1225.                             /*rev 1.0*/
  1226.                      }
  1227.                     ';'
  1228.                 ;
  1229.  
  1230. knots                :    /*empty*/
  1231.                 |
  1232.                     KNOTS
  1233.                     { 
  1234.                          (void)bif_group(KNOTS); 
  1235.                              /* rev 1.0 KNOTS*/
  1236.                      }
  1237.                     '{' bif_real_list '}'
  1238.                     
  1239.                     { 
  1240.                           (void)bif_group(BIF_END_OF_GROUP); 
  1241.                      }
  1242.                 ;
  1243.  
  1244. rational_non_rational        :    RATIONAL    { $$ = RATIONAL; }
  1245.                 |    NON_RATIONAL    { $$ = NON_RATIONAL; }
  1246.                 ;
  1247.  
  1248. bif_real_list                 :       /* empty */
  1249.                 |       bif_real_list real_num 
  1250.                     { bif_real_list($2); } 
  1251.                        /*  rev 1.0 collector */
  1252.                 ;
  1253.  
  1254. /*--------------------------------------------------------------------*\
  1255. |     NON_UNIFORM_BSPLINE_SURFACE rev 1.0
  1256. \*--------------------------------------------------------------------*/
  1257. non_uniform_bspline_surface    :       NON_UNIFORM_BSPLINE_SURFACE       
  1258.                     rational_non_rational
  1259.                     LONG
  1260.                     LONG
  1261.                     LONG LONG
  1262.                     { 
  1263.                          (void)bif_nubs(BIF_P_BEGIN); 
  1264.                          not_repeated(-1); 
  1265.                          with_data_name = 
  1266.                             "NON_UNIFORM_BSPLINE_SURFACE";
  1267.                        (void)bif_nubsholder($2,$3,
  1268.                                 $4,$5,$6); 
  1269.                          (void)bif_group(CTRL_POINTS); 
  1270.                     }
  1271.                     bif_real_list
  1272.                     { 
  1273.                           (void)bif_group(BIF_END_OF_GROUP); 
  1274.                      }
  1275.                     bspline_surf_body
  1276.                     { 
  1277.                           (void)bif_nubs (BIF_P_END  );
  1278.                             /* rev 1.0*/
  1279.                      }
  1280.                     ';'
  1281.                 ;       
  1282.  
  1283. bspline_surf_body        :    /* empty */
  1284.                 |    bspline_surf_body uknots   
  1285.                 |    bspline_surf_body vknots
  1286.                 |    bspline_surf_body trimloop
  1287.                 ;
  1288.  
  1289. trimloop            :    TRIMLOOP
  1290.                     {
  1291.                          (void)bif_group(TRIMLOOP); 
  1292.                           (void)bif_group(BIF_END_OF_GROUP); 
  1293.                     }
  1294.                     '{' 
  1295.                     trimcurve_list
  1296.                     '}' 
  1297.                 ;
  1298.  
  1299. trimcurve_list              :       /* empty */
  1300.                 |       trimcurve_list trimcurve
  1301.                 ;
  1302.  
  1303. trimcurve            :       TRIMCURVE       
  1304.                     '{' 
  1305.                     rational_non_rational
  1306.                     LONG
  1307.                     { 
  1308.                          (void)bif_group(TRIMCURVE); 
  1309.                        bif_intlist($3);
  1310.                        bif_intlist($4);
  1311.                           (void)bif_group(BIF_END_OF_GROUP); 
  1312.                          (void)bif_group(CTRL_POINTS); 
  1313.                     }
  1314.                     bif_real_list
  1315.                     { 
  1316.                           (void)bif_group(BIF_END_OF_GROUP); 
  1317.                      }
  1318.                     knots
  1319.                     '}' 
  1320.                 ;
  1321.  
  1322. uknots                :    UKNOTS
  1323.                     { 
  1324.                       if(not_repeated(1)) 
  1325.                       bif_group(UKNOTS); 
  1326.                           /* rev 1.0 UKNOTS*/
  1327.                       else 
  1328.                       { 
  1329.                          (void)bif_group(IGNORE_GROUP);  
  1330.                          WD3B_error("VERTEX_COLORS"); 
  1331.                       } 
  1332.                     } 
  1333.                     '{' bif_real_list '}'
  1334.                     { 
  1335.                           (void)bif_group(BIF_END_OF_GROUP); 
  1336.                      }
  1337.                 ;
  1338.  
  1339. vknots                :    VKNOTS
  1340.                     { 
  1341.                       if(not_repeated(2)) 
  1342.                       bif_group(VKNOTS); 
  1343.                           /* rev 1.0 VKNOTS*/
  1344.                       else 
  1345.                       { 
  1346.                          (void)bif_group(IGNORE_GROUP);  
  1347.                          WD3B_error("VERTEX_COLORS"); 
  1348.                       } 
  1349.                     } 
  1350.                     '{' bif_real_list '}'
  1351.                     { 
  1352.                           (void)bif_group(BIF_END_OF_GROUP); 
  1353.                      }
  1354.                 ;
  1355.  
  1356. /*--------------------------------------------------------------------*\
  1357. |         CURVE_APPROXIMATION_CRITERIA rev 1.0
  1358. \*--------------------------------------------------------------------*/
  1359. curve_approximation_criteria    :    CURVE_APPROXIMATION_CRITERIA
  1360.                     LONG
  1361.                     real_num 
  1362.                     ';'
  1363.                     {
  1364.                        bif_curve_approx_criteria ($2,$3); 
  1365.                     }/*  rev 1.0 */
  1366.                 ;
  1367.  
  1368. /*--------------------------------------------------------------------*\
  1369. |         TRIMCURVE_APPROXIMATION_CRITERIA rev 1.0
  1370. \*--------------------------------------------------------------------*/
  1371. trimcurve_approximation_criteria :    TRIMCURVE_APPROXIMATION_CRITERIA
  1372.                     LONG
  1373.                     real_num 
  1374.                     ';'
  1375.                     {
  1376.                        bif_trimcurve_approx_criteria ($2,$3); 
  1377.                     }/*  rev 1.0 */
  1378.                 ;
  1379.  
  1380. /*--------------------------------------------------------------------*\
  1381. |         SURFACE_APPROXIMATION_CRITERIA rev 1.0
  1382. \*--------------------------------------------------------------------*/
  1383. surface_approximation_criteria    :    SURFACE_APPROXIMATION_CRITERIA
  1384.                     LONG
  1385.                     real_num 
  1386.                     real_num 
  1387.                     ';'
  1388.                     {
  1389.                        bif_surface_approx_criteria ($2,$3,$4); 
  1390.                     }/*  rev 1.0 */
  1391.                 ;
  1392. /* ------------------------------------------------------------------ */
  1393.  
  1394. /* ------------------------------------------------------------------ */
  1395. marker_type             :       MARKER_TYPE
  1396.                 LONG ';'
  1397.                 { (void)bif_mktype($2); }
  1398.             ;
  1399. /* ------------------------------------------------------------------ */
  1400. marker_size             :       MARKER_SIZE
  1401.                 real_num ';'
  1402.                 { (void)bif_mkscale($2); }
  1403.             ;
  1404. /* ------------------------------------------------------------------ */
  1405. marker_color            :    MARKER_COLOR /* rev 0.8 */
  1406.                     real_num real_num real_num ';'
  1407.                     { (void)
  1408.                       bif_mkcolor($2,$3,$4); }/* rev 0.8 */
  1409.                 ;
  1410. /* ------------------------------------------------------------------ */
  1411. marker_color_index              :       MARKER_COLOR_INDEX
  1412.                     LONG ';'
  1413.                     { (void)bif_mkcolorindex($2); }
  1414.                 ;
  1415. /* ------------------------------------------------------------------ */
  1416. line_type                       :       LINE_TYPE
  1417.                     LONG ';'
  1418.                     { (void)bif_linetype($2); }
  1419.                 ;
  1420. /* ------------------------------------------------------------------ */
  1421. line_width                      :       LINE_WIDTH
  1422.                     real_num ';'
  1423.                     { (void)bif_linewidth($2); }
  1424.                 ;
  1425. /* ------------------------------------------------------------------ */
  1426. line_color            :    LINE_COLOR
  1427.                     real_num real_num real_num ';'
  1428.                     { (void)
  1429.                       bif_linecolor($2,$3,$4); }/*rev 0.8*/
  1430.                 ;
  1431. /* ------------------------------------------------------------------ */
  1432. line_color_index                :       LINE_COLOR_INDEX
  1433.                     LONG ';'
  1434.                     { (void)bif_linecolorindex($2); }
  1435.                 ;
  1436. /* ------------------------------------------------------------------ */
  1437. line_shading            :    LINE_SHADING /* rev 0.8 */
  1438.                     LONG ';'
  1439.                     { (void)
  1440.                       bif_lineshading($2); } /* rev 0.8 */
  1441.                 ;
  1442. /* ------------------------------------------------------------------ */
  1443. interior_style                :       INTERIOR_STYLE
  1444.                     interior_keyword ';'
  1445.                     { (void)
  1446.                        bif_intstyle($2); } /* CHANGED */
  1447.                 ;
  1448.  
  1449. interior_keyword        :    HOLLOW  { $$ = HOLLOW ; } /* rev 0.8 */
  1450.                 |    SOLID   { $$ = SOLID  ; } /* rev 0.8 */
  1451.                 |    PATTERN { $$ = PATTERN; } /* rev 0.8 */
  1452.                 |    EMPTY   { $$ = EMPTY  ; } /* rev 0.8 */
  1453.                 ;
  1454. /* ------------------------------------------------------------------ */
  1455. interior_pattern_index    :    INTERIOR_PATTERN_INDEX /* rev 0.8 */
  1456.                 LONG ';'
  1457.                 { 
  1458.                   (void)bif_intpatternindex($2);/* rev 0.8 */
  1459.                 }
  1460.             ;
  1461. /* ------------------------------------------------------------------ */
  1462. interior_color        :    INTERIOR_COLOR     /* rev 0.8 */
  1463.                 real_num real_num real_num ';'
  1464.                 { 
  1465.                   (void)bif_intcolor($2,$3,$4);/* rev 0.8 */
  1466.                 }
  1467.             ;
  1468. /* ------------------------------------------------------------------ */
  1469. interior_color_index            :       INTERIOR_COLOR_INDEX
  1470.                     LONG ';'
  1471.                     { (void)bif_intcolorindex($2); }
  1472.                 ;
  1473. /* ------------------------------------------------------------------ */
  1474. backface_interior_color        :    BACKFACE_INTERIOR_COLOR /* rev 0.8 */
  1475.                     real_num real_num real_num ';'
  1476.                     { (void)
  1477.                        bif_bkfintcolor($2,$3,$4); }
  1478.                        /* rev 0.8 */
  1479.                 ;
  1480. /* ------------------------------------------------------------------ */
  1481. backface_interior_color_index    :    BACKFACE_INTERIOR_COLOR_INDEX /* rev 0.8 */
  1482.                     LONG ';'
  1483.                     { (void)
  1484.                        bif_bkfintcolorindex($2); }
  1485.                        /* rev 0.8 */
  1486.                 ;
  1487. /* ------------------------------------------------------------------ */
  1488. interior_shading                :       INTERIOR_SHADING
  1489.                     LONG ';'
  1490.                     { (void)bif_intshade($2); }
  1491.                 ;
  1492. /* ------------------------------------------------------------------ */
  1493. interior_lighting               :       INTERIOR_LIGHTING
  1494.                     LONG ';'
  1495.                     { (void)bif_intlight($2); }
  1496.                 ;
  1497. /* ------------------------------------------------------------------ */
  1498. surface_properties              :       SURFACE_PROPERTIES
  1499.                     real_num real_num real_num
  1500.                     real_num real_num real_num
  1501.                     real_num real_num
  1502.                     ';'
  1503.                     { (void)bif_surfprop($2,$3,
  1504.                       $4,$5,$6,$7,
  1505.                       $8,$9); }
  1506.                 ;
  1507. /* ------------------------------------------------------------------ */
  1508. backface_properties        :    BACKFACE_PROPERTIES /* rev 0.8 */
  1509.                     real_num real_num real_num
  1510.                     real_num real_num real_num
  1511.                     real_num real_num
  1512.                     ';'
  1513.                     { (void)bif_bkfprop($2,$3, /* rev 0.8 */
  1514.                       $4,$5,$6,$7,
  1515.                       $8,$9); }
  1516.                 ;
  1517. /* ------------------------------------------------------------------ */
  1518. backface_processing        :    BACKFACE_PROCESSING /* rev 0.8 */
  1519.                     LONG LONG ';'
  1520.                     { (void)
  1521.                        bif_bkfprocessing($2,$3); }
  1522.                        /* rev 0.8 */
  1523.                 ;
  1524. /* ------------------------------------------------------------------ */
  1525. edge_flag                       :       EDGE_FLAG
  1526.                     ENABLE ';'
  1527.                     { (void)bif_edgeflag(ENABLE ); }
  1528.                 |    EDGE_FLAG
  1529.                     DISABLE ';'
  1530.                     { (void)bif_edgeflag(DISABLE ); }
  1531.                 ;
  1532. /* ------------------------------------------------------------------ */
  1533. edge_type            :    EDGE_TYPE /* rev 0.8 */
  1534.                     LONG ';'
  1535.                     { (void)bif_edgetype($2);} /*rev 0.8*/
  1536.                 ;
  1537. /* ------------------------------------------------------------------ */
  1538. edge_width                      :       EDGE_WIDTH
  1539.                     real_num ';'
  1540.                     { (void)bif_edgewidth($2); }
  1541.                 ;
  1542. /* ------------------------------------------------------------------ */
  1543. edge_color        :    EDGE_COLOR /* rev 0.8 */
  1544.                 real_num real_num real_num ';'
  1545.                 { 
  1546.                   (void)bif_edgecolor($2,$3,$4);/* rev 0.8 */
  1547.                 } 
  1548.             ;
  1549. /* ------------------------------------------------------------------ */
  1550. edge_color_index    :    EDGE_COLOR_INDEX /* rev 0.8 */
  1551.                 LONG ';'
  1552.                 { 
  1553.                   (void)bif_edgecolorindex($2);/* rev 0.8 */
  1554.                 } 
  1555.             ;
  1556. /* ------------------------------------------------------------------ */
  1557. text_font                       :       TEXT_FONT
  1558.                     LONG ';'
  1559.                     { (void)bif_textfont($2); }
  1560.                 ;
  1561. /* ------------------------------------------------------------------ */
  1562. text_prec                       :       TEXT_PREC
  1563.                     STRING ';'
  1564.                     { (void)bif_textprec(STRING ); }
  1565.                 |    TEXT_PREC
  1566.                     CHAR ';'
  1567.                     { (void)bif_textprec(CHAR ); }
  1568.                 |    TEXT_PREC
  1569.                     STROKE ';'
  1570.                     { (void)bif_textprec(STROKE ); }
  1571.                 ;
  1572. /* ------------------------------------------------------------------ */
  1573. text_color            :    TEXT_COLOR /* rev 0.8 */
  1574.                     real_num real_num real_num ';'
  1575.                     { (void)
  1576.                        bif_textcolor($2,$3,$4); } 
  1577.                             /* rev 0.8 */
  1578.                 ;
  1579. /* ------------------------------------------------------------------ */
  1580. text_color_index                :       TEXT_COLOR_INDEX
  1581.                     LONG ';'
  1582.                     { (void)bif_textcolorindex($2); }
  1583.                 ;
  1584. /* ------------------------------------------------------------------ */
  1585. text_path                       :       TEXT_PATH
  1586.                     LONG ';'
  1587.                     { (void)bif_textpath($2); }
  1588.                 ;
  1589.  
  1590. /* ------------------------------------------------------------------ */
  1591. text_align                      :       TEXT_ALIGN
  1592.                     LONG LONG ';'
  1593.                     { (void)bif_textalign($2, $3); }
  1594.                 ;
  1595.  
  1596. /* ------------------------------------------------------------------ */
  1597. char_height                     :       CHAR_HEIGHT
  1598.                     real_num ';'
  1599.                     { (void)bif_charheight($2); }
  1600.                 ;
  1601. /* ------------------------------------------------------------------ */
  1602. char_exp            :    CHAR_EXP /* rev 0.8 */
  1603.                     real_num ';'
  1604.                     { (void)bif_charexp($2); } /* rev 0.8 */
  1605.                 ;
  1606. /* ------------------------------------------------------------------ */
  1607. char_space            :    CHAR_SPACE /* rev 0.8 */
  1608.                     real_num ';'
  1609.                     { (void)bif_charspace($2); } 
  1610.                                 /* rev 0.8 */
  1611.                 ;
  1612.                     
  1613. /* ------------------------------------------------------------------ */
  1614. char_up_vector                  :       CHAR_UP_VECTOR
  1615.                     real_num real_num ';'
  1616.                     { (void)bif_charupvector($2, $3); }
  1617.                 ;
  1618. /* ------------------------------------------------------------------ */
  1619. anno_text_char_height        :    ANNO_TEXT_CHAR_HEIGHT    
  1620.                     real_num ';'
  1621.                     { (void)
  1622.                    bif_annotextcharheight($2); } /* rev 0.8 */
  1623.                 ;
  1624. /* ------------------------------------------------------------------ */
  1625. anno_text_char_up_vector    :    ANNO_TEXT_CHAR_UP_VECTOR
  1626.                     real_num real_num ';'
  1627.                     { (void)
  1628.                    bif_annotextcharupvector($2,$3); }/*rev 0.8*/
  1629.                 ;
  1630. /* ------------------------------------------------------------------ */
  1631. anno_text_style            :    ANNO_TEXT_STYLE /* rev 0.8 */
  1632.                     LONG ';'
  1633.                     { (void)
  1634.                           bif_annotextstyle($2); } /*rev 0.8*/
  1635.                 ;
  1636. /* ------------------------------------------------------------------ */
  1637.                 /* NOTE: This section requires an order
  1638.                     to the lists this restriction may
  1639.                     be removed in later releases  */
  1640.  
  1641. light_state                     :       LIGHT_STATE
  1642.                     {(void)bif_lightstate(BIF_P_BEGIN);}
  1643.                     ACTIVATE_LIST
  1644.                     {(void)bif_group(ACTIVATE_LIST);}
  1645.                     '{' bif_intlist '}'
  1646.                     {(void)bif_group(BIF_END_OF_GROUP);}
  1647.                     DEACTIVATE_LIST
  1648.                     {(void)bif_group(DEACTIVATE_LIST);}
  1649.                     '{' bif_intlist '}'
  1650.                     {(void)bif_group(BIF_END_OF_GROUP);}
  1651.                     ';'
  1652.                     {(void)bif_lightstate(BIF_P_END  );}
  1653.                 ;
  1654. /* ------------------------------------------------------------------ */
  1655. depthcue_index            :    DEPTHCUE_INDEX /* rev 0.8 */
  1656.                     LONG ';'
  1657.                     { (void)
  1658.                        bif_depthcueindex($2); } /*rev 0.8*/
  1659.                 ;
  1660. /* ------------------------------------------------------------------ */
  1661. hlhs_removal                    :       HLHS_REMOVAL
  1662.                     HLHS_DISABLE
  1663.                     ';'
  1664.                     {(void)bif_hlhsremoval(HLHS_DISABLE);}
  1665.                 |       HLHS_REMOVAL
  1666.                     HLHS_ENABLE
  1667.                     ';'
  1668.                     {(void)bif_hlhsremoval(HLHS_ENABLE);}
  1669.                 ;
  1670.  
  1671. /* ------------------------------------------------------------------ */
  1672. identity3                       :       IDENTITY3
  1673.                     LONG
  1674.                     ';'
  1675.                     {(void)bif_identity3($2);}
  1676.                 ;
  1677. /* ------------------------------------------------------------------ */
  1678. concat_matrix3                  :       CONCAT_MATRIX3
  1679.                     LONG LONG pre_post_replace
  1680.                     ';'
  1681.                     {(void)bif_concatmatrix3($2,$3,$4);}
  1682.                 ;
  1683.  
  1684. pre_post_replace        :    PRECONCAT    { $$ = PRECONCAT; }
  1685.                 |    POSTCONCAT    { $$ = POSTCONCAT; }
  1686.                 |    REPLACE        { $$ = REPLACE; }
  1687.                 ;
  1688. /* ------------------------------------------------------------------ */
  1689. invert_matrix3                  :       INVERT_MATRIX3
  1690.                     LONG
  1691.                     ';'
  1692.                     {(void)bif_invertmatrix3($2);}
  1693.                 ;
  1694. /* ------------------------------------------------------------------ */
  1695. rotate3                         :       ROTATE3
  1696.                     LONG
  1697.                     real_num 
  1698.                     axis_flag 
  1699.                     pre_post_replace
  1700.                     ';'
  1701.                     {(void)bif_rotate3($2,$3,$4,$5);}
  1702.                 ;
  1703.  
  1704. axis_flag            :    X_AXIS    { $$ = X_AXIS; }
  1705.                 |    Y_AXIS    { $$ = Y_AXIS; }
  1706.                 |    Z_AXIS    { $$ = Z_AXIS; }
  1707.                 ;
  1708. /* ------------------------------------------------------------------ */
  1709. rotate_xyz3                     :       ROTATE_XYZ3
  1710.                     LONG 
  1711.                     real_num real_num real_num 
  1712.                     pre_post_replace
  1713.                     ';'
  1714.                     {(void)bif_rotatexyz3($2,$3,$4,$5,$6);}
  1715.                 ;
  1716. /* ------------------------------------------------------------------ */
  1717. translate3                      :       TRANSLATE3
  1718.                     LONG 
  1719.                     real_num real_num real_num 
  1720.                     pre_post_replace
  1721.                     ';'
  1722.                     {(void)bif_translate3($2,$3,$4,$5,$6);}
  1723.                 ;
  1724. /* ------------------------------------------------------------------ */
  1725. scale3                          :       SCALE3
  1726.                     LONG 
  1727.                     real_num real_num real_num 
  1728.                     pre_post_replace
  1729.                     ';'
  1730.                     {(void)bif_scale3($2,$3,$4,$5,$6);}
  1731.                 ;
  1732. /* ------------------------------------------------------------------ */
  1733. matrix3                         :       MATRIX3
  1734.                     LONG
  1735.                     '{' 
  1736.                     real_num real_num real_num real_num 
  1737.                     '}'
  1738.                     '{' 
  1739.                     real_num real_num real_num real_num
  1740.                     '}'
  1741.                     '{' 
  1742.                     real_num real_num real_num real_num 
  1743.                     '}'
  1744.                     '{' 
  1745.                     real_num real_num real_num real_num 
  1746.                     '}'
  1747.                     pre_post_replace
  1748.                     ';'
  1749.                     {
  1750.                      double amatrix[4][4];
  1751.                      amatrix[0][0] = $4;
  1752.                      amatrix[0][1] = $5;
  1753.                      amatrix[0][2] = $6;
  1754.                      amatrix[0][3] = $7;
  1755.  
  1756.                      amatrix[1][0] = $10;
  1757.                      amatrix[1][1] = $11;
  1758.                      amatrix[1][2] = $12;
  1759.                      amatrix[1][3] = $13;
  1760.  
  1761.                      amatrix[2][0] = $16;
  1762.                      amatrix[2][1] = $17;
  1763.                      amatrix[2][2] = $18;
  1764.                      amatrix[2][3] = $19;
  1765.  
  1766.                      amatrix[3][0] = $22;
  1767.                      amatrix[3][1] = $23;
  1768.                      amatrix[3][2] = $24;
  1769.                      amatrix[3][3] = $25;
  1770.                      (void)bif_matrix3($2,amatrix,$27);
  1771.                     }
  1772.                 ;
  1773.  
  1774. /* ------------------------------------------------------------------ */
  1775. get_matrix3        :    GET_MATRIX3 /* rev 0.8 */
  1776.                 LONG 
  1777.                 matrix_to_get
  1778.                 pre_post_replace ';'
  1779.                 { 
  1780.                   (void)bif_getmatrix3($2,$3,$4);/* rev 0.8 */
  1781.                 } 
  1782.             ;
  1783.  
  1784. matrix_to_get        :    VIEW_MAPPING  /* rev 0.8 */
  1785.                    { $$ = VIEW_MAPPING; }
  1786.             |    VIEW_ORIENTATION   /* rev 0.8 */
  1787.                    { $$ = POSTCONCAT; }
  1788.             |    GLOBAL_MODELLING      /* rev 0.8 */
  1789.                    { $$ = GLOBAL_MODELLING; }
  1790.             |    LOCAL_MODELLING  /* rev 0.8 */
  1791.                    { $$ = LOCAL_MODELLING; }
  1792.             |    COMPOSITE_MODELLING  /* rev 0.8 */
  1793.                    { $$ = COMPOSITE_MODELLING; }
  1794.             ;
  1795. /* ------------------------------------------------------------------ */
  1796. push_matrix3            :    PUSH_MATRIX3 ';'
  1797.                     {(void)bif_pushmatrix3(); } /*rev 0.8*/
  1798.                 ;
  1799. /* ------------------------------------------------------------------ */
  1800. pop_matrix3            :    POP_MATRIX3 ';'
  1801.                     {(void)bif_popmatrix3(); } /* rev 0.8 */
  1802.                 ;
  1803. /* ------------------------------------------------------------------ */
  1804. global_transformation3          :       GLOBAL_TRANSFORMATION3
  1805.                     '{' 
  1806.                     real_num real_num real_num real_num 
  1807.                     '}'
  1808.                     '{' 
  1809.                     real_num real_num real_num real_num 
  1810.                     '}'
  1811.                     '{' 
  1812.                     real_num real_num real_num real_num 
  1813.                     '}'
  1814.                     '{' 
  1815.                     real_num real_num real_num real_num 
  1816.                     '}'
  1817.                     ';'
  1818.                     {
  1819.                      double amatrix[4][4];
  1820.                      amatrix[0][0] = $3;
  1821.                      amatrix[0][1] = $4;
  1822.                      amatrix[0][2] = $5;
  1823.                      amatrix[0][3] = $6;
  1824.  
  1825.                      amatrix[1][0] = $9;
  1826.                      amatrix[1][1] = $10;
  1827.                      amatrix[1][2] = $11;
  1828.                      amatrix[1][3] = $12;
  1829.  
  1830.                      amatrix[2][0] = $15;
  1831.                      amatrix[2][1] = $16;
  1832.                      amatrix[2][2] = $17;
  1833.                      amatrix[2][3] = $18;
  1834.  
  1835.                      amatrix[3][0] = $21;
  1836.                      amatrix[3][1] = $22;
  1837.                      amatrix[3][2] = $23;
  1838.                      amatrix[3][3] = $24;
  1839.  
  1840.                      (void)bif_gtransform3(amatrix);
  1841.                     }
  1842.                 ;
  1843.  
  1844. /* ------------------------------------------------------------------ */
  1845. local_transformation3           :       LOCAL_TRANSFORMATION3
  1846.                     '{' 
  1847.                     real_num real_num real_num real_num 
  1848.                     '}'
  1849.                     '{' 
  1850.                     real_num real_num real_num real_num 
  1851.                     '}'
  1852.                     '{' 
  1853.                     real_num real_num real_num real_num 
  1854.                     '}'
  1855.                     '{' 
  1856.                     real_num real_num real_num real_num 
  1857.                     '}'
  1858.                     pre_post_replace
  1859.                     ';'
  1860.                     {
  1861.                      double amatrix[4][4];
  1862.                      amatrix[0][0] = $3;
  1863.                      amatrix[0][1] = $4;
  1864.                      amatrix[0][2] = $5;
  1865.                      amatrix[0][3] = $6;
  1866.  
  1867.                      amatrix[1][0] = $9;
  1868.                      amatrix[1][1] = $10;
  1869.                      amatrix[1][2] = $11;
  1870.                      amatrix[1][3] = $12;
  1871.  
  1872.                      amatrix[2][0] = $15;
  1873.                      amatrix[2][1] = $16;
  1874.                      amatrix[2][2] = $17;
  1875.                      amatrix[2][3] = $18;
  1876.  
  1877.                      amatrix[3][0] = $21;
  1878.                      amatrix[3][1] = $22;
  1879.                      amatrix[3][2] = $23;
  1880.                      amatrix[3][3] = $24;
  1881.  
  1882.                      (void)bif_ltransform3(amatrix,$26);
  1883.                     }
  1884.                 ;
  1885.  
  1886.  
  1887. /* ------------------------------------------------------------------ */
  1888. apply_to_global3                :       APPLY_TO_GLOBAL3
  1889.                     LONG
  1890.                     ';'
  1891.                     {(void)bif_applytoglobal3($2);}
  1892.                 ;
  1893.  
  1894. /* ------------------------------------------------------------------ */
  1895. apply_to_local3                 :       APPLY_TO_LOCAL3
  1896.                     LONG pre_post_replace
  1897.                     ';'
  1898.                     {(void)bif_applytolocal3($2,$3);}
  1899.                 ;
  1900.  
  1901. /* ------------------------------------------------------------------ */
  1902. view_orientation3               :       VIEW_ORIENTATION3
  1903.                     LONG 
  1904.                     real_num real_num real_num
  1905.                     real_num real_num real_num
  1906.                     real_num real_num real_num
  1907.                     ';'
  1908.                     {
  1909.                      double vrp[3],vpn[3],vup[3];
  1910.                      vrp[0] = $3;
  1911.                      vrp[1] = $4;
  1912.                      vrp[2] = $5;
  1913.  
  1914.                      vpn[0] = $6;
  1915.                      vpn[1] = $7;
  1916.                      vpn[2] = $8;
  1917.  
  1918.                      vup[0] = $9;
  1919.                      vup[1] = $10;
  1920.                      vup[2] = $11;
  1921.  
  1922.                      (void)bif_vieworient3($2,vrp,vpn,vup);
  1923.                     }
  1924.                 ;
  1925.  
  1926. /* ------------------------------------------------------------------ */
  1927. view_mapping3                   :       VIEW_MAPPING3
  1928.                     LONG
  1929.                     real_num real_num real_num real_num
  1930.                     perspective_flag
  1931.                     real_num real_num real_num
  1932.                     real_num real_num 
  1933.                     {
  1934.                      double prp[3];
  1935.                      (void)bif_viewmap3(BIF_P_BEGIN);
  1936.                      prp[0] = $8;
  1937.                      prp[1] = $9;
  1938.                      prp[2] = $10;
  1939.                      (void)bif_viewmapbasic($2, $3, $4,
  1940.                                $5, $6, $7,prp,
  1941.                                $11,$12 );
  1942.                     }
  1943.                     match_view_area
  1944.                     ';'
  1945.                     {(void)bif_viewmap3(BIF_P_END  );}
  1946.                 ;
  1947.  
  1948. perspective_flag        :    PERSPECTIVE    { $$ = PERSPECTIVE; }
  1949.                 |    PARALLEL    { $$ = PARALLEL; }
  1950.                 ;
  1951.  
  1952. match_view_area                 :       /* empty */
  1953.                 |       MATCH_VIEW_AREA
  1954.                     '{' 
  1955.                       real_num real_num real_num real_num 
  1956.                       adjust_flag 
  1957.                     '}'
  1958.                     {
  1959.                      (void)bif_viewmapmatch($3,$4,$5,$6,$7);
  1960.                     }
  1961.                 ;
  1962.  
  1963. adjust_flag            :    ADJUST_X    { $$ = ADJUST_X; }
  1964.                 |    ADJUST_Y    { $$ = ADJUST_Y; }
  1965.                 |    GROW        { $$ = GROW; }
  1966.                 |    SHRINK        { $$ = SHRINK; }
  1967.                 ;
  1968.  
  1969. /* ------------------------------------------------------------------ */
  1970. active_view                     :       ACTIVE_VIEW
  1971.                     LONG
  1972.                     ';'
  1973.                     {(void)bif_activeview($2);}
  1974.                 ;
  1975.  
  1976. /* ------------------------------------------------------------------ */
  1977. execute_structure               :       EXECUTE_STRUCTURE
  1978.                     LONG
  1979.                     ';'
  1980.                     {(void)bif_execstr($2);}
  1981.                 ;
  1982.  
  1983. /* ------------------------------------------------------------------ */
  1984. call_structure                  :       CALL_STRUCTURE
  1985.                     LONG
  1986.                     ';'
  1987.                     {(void)bif_callstr($2);}
  1988.                 ;
  1989.  
  1990. /* ------------------------------------------------------------------ */
  1991. unrecognized_entity        :    UNRECOGNIZED_KEYWORD
  1992.                     { 
  1993.                       char temp[STRLENGTH]; 
  1994.                       sprintf(temp,
  1995.                       "Unsupported entity (%s) ", $1);
  1996.                        yyerror(temp);
  1997.                     }
  1998.                     error
  1999.                     /* any_token_set */
  2000.                     ';'
  2001.                     { 
  2002.                       char temp[STRLENGTH]; 
  2003.                       sprintf(temp,
  2004.                       "End of Unsupported entity (%s) ", 
  2005.                        $1);
  2006.                        yyerror(temp);
  2007.                     }
  2008.                 ;
  2009.  
  2010.  
  2011.  
  2012. /* ------------------------------------------------------------------ */
  2013.                 /* CHANGE: This bif entity will now except
  2014.                     one or more geometry files to be
  2015.                     read */
  2016. read_geometry_file              :       READ_GEOMETRY_FILE
  2017.                     {(void)collapseAllStructures();}
  2018.                     geom_file_names
  2019.                     {(void)expandAllStructures();}
  2020.                     ';'
  2021.                 ;
  2022. /* ------------------------------------------------------------------ */
  2023. geom_file_names                 :       QSTRING            
  2024.                     {(void)bif_readgeom($1);}
  2025.                     bif_geometry_file 
  2026.                     END_GEOM_FILE 
  2027.                 |       geom_file_names
  2028.                     QSTRING
  2029.                     {(void)bif_readgeom($2);}
  2030.                     bif_geometry_file 
  2031.                     END_GEOM_FILE 
  2032.                 ;
  2033. /* ------------------------------------------------------------------ */
  2034. clear_geometry                  :       CLEAR_GEOMETRY
  2035.                     ';'
  2036.                     {(void)bif_cleargeom();}
  2037.                 ;
  2038.  
  2039. /* ------------------------------------------------------------------ */
  2040. specify_report_file        :    SPECIFY_REPORT_FILE
  2041.                     QSTRING    
  2042.                     ';'
  2043.                     {(void)bif_reportfile($2);}
  2044.                 ;
  2045. /* ------------------------------------------------------------------ */
  2046. pause                           :       PAUSE
  2047.                     ';'
  2048.                     {(void)bif_pause();}
  2049.                 ;
  2050.  
  2051. /* ------------------------------------------------------------------ */
  2052. sleep                           :       SLEEP
  2053.                     LONG
  2054.                     ';'
  2055.                     {(void)bif_sleep($2);}
  2056.                 ;
  2057. /* ------------------------------------------------------------------ */
  2058. invoke_at_frame        :    INVOKE_AT_FRAME
  2059.                 invoke_at_frame_body
  2060.                 ';'
  2061.             ;
  2062.  
  2063. invoke_at_frame_body    :    /* empty */
  2064.             |    invoke_at_frame_body     /* rev 0.8 */
  2065.                 LONG
  2066.                 exe_or_call         /* rev 0.8 */
  2067.                 LONG
  2068.                 { (void)bif_invokeatframe /* rev 0.8 */
  2069.                    ($2,$3,$4,$4); }     /* rev 0.8 */
  2070.             |    invoke_at_frame_body
  2071.                 LONG
  2072.                 exe_or_call
  2073.                 LONG
  2074.                 TO LONG
  2075.                 { (void)bif_invokeatframe /* rev 0.8 */
  2076.                    ($2,$3,$4,$6); }     /* rev 0.8 */
  2077.             |    invoke_at_frame_body
  2078.                 LONG
  2079.                 exe_or_call
  2080.                 LONG
  2081.                 TO END
  2082.                 { (void)bif_invokeatframe /* rev 0.8 */
  2083.                    ($2,$3,$4,-1); }     /* rev 0.8 */
  2084.             ;
  2085.  
  2086. exe_or_call        :    EXECUTE { $$ = EXECUTE ; } /* rev 0.8 */
  2087.             |    CALL    { $$ = CALL  ; } /* rev 0.8 */
  2088.             ;
  2089.  
  2090. /* ------------------------------------------------------------------ */
  2091. define_color                    :       DEFINE_COLOR
  2092.                     bif_table_color
  2093.                     ';'
  2094.                 ;
  2095.  
  2096. bif_table_color                    :       LONG  /* rev 0.8 */
  2097.                     real_num real_num real_num
  2098.                     {
  2099.                     (void) bif_definecolor /* rev 0.8 */
  2100.                        ($1,$2,$3,$4); 
  2101.                     }
  2102.                 |       bif_table_color LONG
  2103.                     real_num real_num real_num 
  2104.                     {
  2105.                     (void) bif_definecolor
  2106.                        ($2,$3,$4,$5); 
  2107.                     }
  2108.                 ;
  2109. /* ------------------------------------------------------------------ */
  2110. background_color        :    BACKGROUND_COLOR /* rev 0.8 */
  2111.                     real_num real_num real_num
  2112.                     ';'
  2113.                     {(void)bif_backgroundcolor /* rev 0.8 */
  2114.                        ($2,$3,$4);}
  2115.                 ;
  2116. /* ------------------------------------------------------------------ */
  2117. background_color_index          :       BACKGROUND_COLOR_INDEX
  2118.                     LONG
  2119.                     ';'
  2120.                     {(void)bif_backgroundcolorindex($2);}
  2121.                 ;
  2122. /* ------------------------------------------------------------------ */
  2123. define_view_specification       :       DEFINE_VIEW_SPECIFICATION
  2124.                     LONG LONG LONG
  2125.                     /* real_num real_num    */
  2126.                     xy_clip_flag
  2127.                     front_clip_flag
  2128.                     back_clip_flag
  2129.                     real_num real_num   real_num real_num
  2130.                     ';'
  2131.                     {(void)bif_viewspec($2, $3,  $4,
  2132.                                 /*  $5, $6,   */
  2133.                                 $5, 
  2134.                                 $6,
  2135.                                 $7,
  2136.                                 $8 ,$9 , $10,$11);}
  2137.                 ;
  2138.  
  2139. xy_clip_flag            :    XY_CLIP        { $$ = XY_CLIP; }
  2140.                 |    NO_XY_CLIP    { $$ = NO_XY_CLIP; }
  2141.                 ;
  2142.  
  2143. front_clip_flag            :    FRONT_CLIP    { $$ = FRONT_CLIP; }
  2144.                 |    NO_FRONT_CLIP    { $$ = NO_FRONT_CLIP; }
  2145.                 ;
  2146.  
  2147. back_clip_flag            :    BACK_CLIP    { $$ = BACK_CLIP; }
  2148.                 |    NO_BACK_CLIP    { $$ = NO_BACK_CLIP; }
  2149.                 ;
  2150.  
  2151. /* ------------------------------------------------------------------ */
  2152. default_view_specification      :       DEFAULT_VIEW_SPECIFICATION
  2153.                     LONG real_num perspective_flag
  2154.                     ';'
  2155.                     {
  2156.                      (void)bif_defviewspec($2,$3,$4);
  2157.                     }
  2158.                 ;
  2159. /* ------------------------------------------------------------------ */
  2160. define_light            :       DEFINE_LIGHT
  2161.                 {(void)bif_definelight(BIF_P_BEGIN);}
  2162.                 LONG
  2163.                 real_num real_num real_num
  2164.                 light_type ld_transform ';'
  2165.                 {
  2166.                  (void)bif_lightbasic($3,$4,$5,$6);
  2167.                  (void)bif_definelight(BIF_P_END  );
  2168.                 }
  2169.             ;
  2170.  
  2171. /* OLD:  this routine is no longer used:    bif_lightcoord(WORLD);   */
  2172.  
  2173. light_type              :       /* empty */
  2174.             |       AMBIENT_LIGHT
  2175.             |       DIRECTIONAL_LIGHT
  2176.                 '{' real_num real_num real_num '}'
  2177.                 {
  2178.                  (void)
  2179.                  bif_lightoption(DIRECTIONAL_LIGHT, 
  2180.                      0., 0., 0.,
  2181.                      $3, $4, $5,
  2182.                      0., 0.,
  2183.                      0., 0. );
  2184.                     }
  2185.             |       POSITIONAL_LIGHT
  2186.                 '{' real_num 
  2187.                     real_num 
  2188.                     real_num 
  2189.                     real_num 
  2190.                     real_num '}'
  2191.                 {(void)
  2192.                  bif_lightoption(POSITIONAL_LIGHT, 
  2193.                      $3, $4, $5,
  2194.                      0., 0., 0.,
  2195.                      0., 0.,
  2196.                      $6, $7 );}
  2197.             |       SPOT_LIGHT
  2198.                 '{' real_num real_num real_num
  2199.                     real_num real_num real_num
  2200.                     real_num real_num
  2201.                     real_num real_num '}'
  2202.                 {(void)
  2203.                  bif_lightoption(SPOT_LIGHT, 
  2204.                      $3, $4, $5,
  2205.                      $6, $7, $8,
  2206.                      $9, $10,
  2207.                      $11,$12);}
  2208.             ;
  2209.  
  2210. ld_transform        :    /* empty */
  2211.             |    LD_TRANSFORM
  2212.                 '{' LONG '}'
  2213.                 { (void)bif_ldtransform($3); }
  2214.             ;
  2215. /* ------------------------------------------------------------------ */
  2216. define_depthcue        :    DEFINE_DEPTHCUE /* rev 0.8 */
  2217.                 LONG DISABLE
  2218.                 ';'
  2219.                 {(void)
  2220.                    bif_definedepthcue /* rev 0.8 CHANGED: JMZ */
  2221.                    ($2, DISABLE, 0.,0., 0.,0., 0.,0.,0.0); }
  2222.             |    DEFINE_DEPTHCUE
  2223.                 LONG ENABLE
  2224.                 '{' 
  2225.                 real_num real_num
  2226.                 real_num real_num
  2227.                 real_num real_num real_num
  2228.                 '}' 
  2229.                 ';'
  2230.                 {(void)
  2231.                    bif_definedepthcue /* rev 0.8 CHANGED: JMZ */
  2232.                    ($2, ENABLE, $5,$6, $7,$8, $9,$10,$11); }
  2233.             ;
  2234. /* ------------------------------------------------------------------ */
  2235. b_configuration        :    /* empty */
  2236.                 {
  2237.                    bif_defaultconfig();
  2238.                    bif_openwk();
  2239.                 }
  2240.             ;
  2241.  
  2242. configuration        :    /* empty */
  2243.                 {
  2244.                    bif_defaultconfig();
  2245.                    bif_openwk();
  2246.                 }
  2247.             |    CONFIGURATION
  2248.                 {
  2249.                    (void)not_repeated(-1);
  2250.                    bif_defaultconfig();
  2251.                 }
  2252.                 configuration_body
  2253.                 ';'
  2254.                 {
  2255.                    bif_openwk();
  2256.                    (void)not_repeated(-1);
  2257.                 }
  2258.             ;
  2259.  
  2260. configuration_body    :    /* empty */
  2261.             |    configuration_body RGB
  2262.                 { 
  2263.                   if(not_repeated(1)) bif_colormodel(RGB);
  2264.                   else yyerror(CB_ERM1);
  2265.                 }
  2266.             |    configuration_body CIE
  2267.                 { 
  2268.                   if(not_repeated(1)) bif_colormodel(CIE);
  2269.                   else yyerror(CB_ERM1);
  2270.                 }
  2271.             |    configuration_body HSV
  2272.                 { 
  2273.                   if(not_repeated(1)) bif_colormodel(HSV);
  2274.                   else yyerror(CB_ERM1);
  2275.                 }
  2276.             |    configuration_body HLS
  2277.                 { 
  2278.                   if(not_repeated(1))
  2279.                      bif_colormodel(HLS); /* rev 0.8 mod. */
  2280.                   else yyerror(CB_ERM1);
  2281.                 }
  2282.             |    configuration_body DOUBLE_BUFFER
  2283.                 { if(not_repeated(2))
  2284.                           bif_buffermode(DOUBLE_BUFFER); /*rev 0.8*/
  2285.                   else
  2286.                      yyerror(CB_ERM2);
  2287.                 }
  2288.             |    configuration_body SINGLE_BUFFER
  2289.                 { if(not_repeated(2))
  2290.                      bif_buffermode(SINGLE_BUFFER); 
  2291.                   else
  2292.                      yyerror(CB_ERM2);
  2293.                 }
  2294.             |    configuration_body TRUE_COLOR
  2295.                 { if(not_repeated(3))
  2296.                           bif_colormode(TRUE_COLOR); /* rev 0.8 */
  2297.                   else
  2298.                      yyerror(CB_ERM3);
  2299.                 }
  2300.             |    configuration_body PSEUDO_COLOR
  2301.                 { if(not_repeated(3))
  2302.                           bif_colormode(PSEUDO_COLOR); /* rev 0.8 */
  2303.                   else
  2304.                      yyerror(CB_ERM3);
  2305.                 }
  2306.             |    configuration_body WINDOW_SIZE LONG LONG
  2307.                 { if(not_repeated(4))
  2308.                             (void)bif_window($3,$4);
  2309.                   else
  2310.                      yyerror(CB_ERM4);
  2311.                 }
  2312.             ;
  2313.             
  2314. /* ------------------------------------------------------------------ */
  2315. /* ------------------------------------------------------------------ */
  2316. /* ------------------------------------------------------------------ */
  2317. real_num        :    REAL { $$ = $1; }
  2318.             |    LONG { $$ = (double)$1; }
  2319.             ;
  2320.  
  2321.  
  2322.  
  2323. %%
  2324.  
  2325. /* ------------------------------------------------------------------ */
  2326. /* not_repeated is a utility used by entities in yacc to allow        */
  2327. /* optional date groups to be specified in any order but to detect   */
  2328. /* if an optional group is specified more than once.                  */ 
  2329. /*                                                                    */ 
  2330. /*  code        < 0:       Reinitialize the repeat_table              */ 
  2331. /*  code        > REPEAT_TABLE_SIZE -1: is an error.                  */ 
  2332. /*  return_code = FALSE:   The optional group has been repeated       */
  2333. /*  return_code = TRUE:    The optional group has not been repeated   */
  2334. /* ------------------------------------------------------------------ */
  2335. int not_repeated(code)
  2336. int code;
  2337. {
  2338.     int return_code;
  2339.     static int repeat_table[REPEAT_TABLE_SIZE];
  2340.     int i;
  2341.  
  2342.     return_code = TRUE;
  2343.     if (code < 0)
  2344.     {
  2345.         for(i=0;i<REPEAT_TABLE_SIZE;i++)
  2346.             repeat_table[i]=TRUE;
  2347.     }
  2348.     else if (code > REPEAT_TABLE_SIZE-1)
  2349.     {
  2350.        yyerror
  2351.        ("Program error:  Attempt to index beyond end of repeat_table.");
  2352.        yyerror
  2353.        ("             :  Entity option has been ignored.");
  2354.         return_code = FALSE;
  2355.     }
  2356.     else
  2357.     {
  2358.         if(repeat_table[code])  repeat_table[code] = FALSE;
  2359.         else   return_code = FALSE;
  2360.     }
  2361.     return(return_code);
  2362. }
  2363.