home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Source Code 1993 July / THE_SOURCE_CODE_CD_ROM.iso / X / mit / demos / gpc / brf_ents.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-07-18  |  48.1 KB  |  1,400 lines

  1. /* $XConsortium: brf_ents.c,v 5.2 91/07/18 17:30:08 rws Exp $ */
  2. /***********************************************************
  3. Copyright (c) 1989,1990, 1991 by Sun Microsystems, Inc. and the X Consortium at M.I.T.
  4.  
  5.                         All Rights Reserved
  6.  
  7. Permission to use, copy, modify, and distribute this software and its
  8. documentation for any purpose and without fee is hereby granted,
  9. provided that the above copyright notice appear in all copies and that
  10. both that copyright notice and this permission notice appear in
  11. supporting documentation, and that the names of Sun Microsystems,
  12. the X Consortium, and MIT not be used in advertising or publicity
  13. pertaining to distribution of the software without specific, written
  14. prior permission.
  15.  
  16. SUN MICROSYSTEMS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
  17. INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT
  18. SHALL SUN MICROSYSTEMS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
  19. DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
  20. WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
  21. ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
  22. SOFTWARE.
  23.  
  24. ******************************************************************/
  25.  
  26. /*--------------------------------------------------------------------*\
  27. |
  28. |  Copyright (C) 1989,1990, 1991, National Computer Graphics Association
  29. |
  30. |  Permission is granted to any individual or institution to use, copy, or
  31. |  redistribute this software so long as it is not sold for profit, provided
  32. |  this copyright notice is retained.
  33. |
  34. |                         Developed for the
  35. |                National Computer Graphics Association
  36. |                         2722 Merrilee Drive
  37. |                         Fairfax, VA  22031
  38. |                           (703) 698-9600
  39. |
  40. |                                by
  41. |                 SimGraphics Engineering Corporation
  42. |                    1137 Huntington Drive  Unit A
  43. |                      South Pasadena, CA  91030
  44. |                           (213) 255-0900
  45. |---------------------------------------------------------------------
  46. |
  47. | Author        :    SimGraphics Engineering Corportation
  48. |
  49. | File          :    brf_ents.c
  50. | Date          :    Fri Feb  9 10:46:55 PST 1990
  51. | Project       :    PLB
  52. | Description   :    Initializes, Counts, and Prints to BRF file
  53. |            usage information about each entity type.
  54. | Status        :    Version 1.0
  55. |
  56. | Revisions     :    
  57. |
  58. |       5/90            MFC Tektronix, Inc.: PEX-SI API Binding change.
  59. |
  60. |      12/90            MFC Tektronix, Inc.: PEX-SI PEX5R1 Release.
  61. |
  62. \*--------------------------------------------------------------------*/
  63.  
  64. /*--------------------------------------------------------------------*\
  65. |    Table of Contents
  66. |
  67. |    do_brfgeneric( BIF_Traverser_state,union, 
  68. |                BIF_All BRF_Any_With_Data BRF_state
  69. |        :    Records and reports usage information for the BRF
  70. |    do_brfcallstructure( BIF_Traverser_state,union, 
  71. |                BIF_All BRF_Any_With_Data BRF_state
  72. |        :    call the specified structure
  73. |    do_brfexecutestructure ( BIF_Traverser_state,union, 
  74. |                BIF_All BRF_Any_With_Data BRF_state
  75. |        :    call the specified structure
  76. |    do_brfinvokeatframe ( BIF_Traverser_state,union, 
  77. |                BIF_All BRF_Any_With_Data BRF_state
  78. |        :    call the specified structure
  79. |    do_brftotalpoly ( BIF_Traverser_state,union, 
  80. |                BIF_All BRF_Any_With_Data BRF_state
  81. |        :    call the specified structure
  82. |    do_brfpolygon( BIF_Traverser_state, BIF_Polygon, 
  83. |                BRF_Any_With_Data, BRF_state)
  84. |        :    Records and reports usage information for the BRF
  85. |    do_brfpolygon3( BIF_Traverser_state, BIF_Polygon, 
  86. |                BRF_Any_With_Data, BRF_state)
  87. |        :    Records and reports usage information for the BRF
  88. |    do_brf_fillareaset( BIF_Traverser_state, BIF_Polygon, 
  89. |                BRF_Any_With_Data, BRF_state)
  90. |        :    Records and reports usage information for the BRF
  91. |    do_brffillareaset( BIF_Traverser_state, BIF_Polygon, 
  92. |                BRF_Any_With_Data, BRF_state)
  93. |        :    Records and reports usage information for the BRF
  94. |    do_brftriangle3( BIF_Traverser_state, BIF_Polygon, 
  95. |                BRF_Any_With_Data, BRF_state)
  96. |        :    Records and reports usage information for the BRF
  97. |    do_brfquadmesh( BIF_Traverser_state, BIF_Polygon, 
  98. |                BRF_Any_With_Data, BRF_state)
  99. |        :    Records and reports usage information for the BRF
  100. |    do_brfindexpolygons( BIF_Traverser_state, BIF_Polygon, 
  101. |                BRF_Any_With_Data, BRF_state)
  102. |        :    Records and reports usage information for the BRF
  103. |    open_reportfile( *char )
  104. |        :    Opens the BRF report file
  105. |    close_reportfile()
  106. |        :    Closes the BRF report file
  107. |    check_default_report(char *)
  108. |        :    Opens report file
  109. |    nice_float_8(float)
  110. |        :    Fromats a nice floating point number
  111. |    brf_utl_report1(int,BRF_Any_With_Data* )
  112. |        :    Producde line of printout for BRF_REPORT
  113. |    brf_utl_report2(int,BRF_Any_With_Data* )
  114. |        :    Producde line of printout for BRF_REPORT2
  115. |    brf_utl_report3(int,BRF_Any_With_Data* )
  116. |        :    Producde line of printout for BRF_REPORT3
  117. |
  118. \*--------------------------------------------------------------------*/
  119. #define STRLENGTH 80
  120. #include <math.h>
  121. #include <stdio.h>
  122. #include <string.h>
  123. #include "biftypes.h"
  124. #include "globals.h"
  125. #include "bifparse.h"
  126. #include "brf_ents.h"
  127. #include "brftypes.h"
  128. #include "bifmacro.h"
  129. #include "brfexption.h"
  130.  
  131. #define UNUSED 0 
  132. #define UNOPENED 1
  133. #define USED 2
  134. #define NICE_SPRINTF8(STR,VALUE) sprintf(STR,"|%s",nice_float_8(VALUE));
  135. #define NICE_CAT8(STR,VALUE)     strcat (STR,      nice_float_8(VALUE));
  136. #define NICE_CAT_ENT_NAME                                              \
  137. {    char temp_str2[80];                                            \
  138.     int k;                                                         \
  139.     strncpy(temp_str2, brf_entity->name, 19); temp_str2[19] = '\0';\
  140.     strcat(temp_str2, ":");                           \
  141.     strcat (temp_str, temp_str2);                                  \
  142.     for (k=strlen(brf_entity->name);k<20;k++)                      \
  143.        strcat(temp_str," ");                                       \
  144. }
  145. #define NICE_CAT_ENT_NAME_D                                            \
  146. {    char temp_str2[80];                                            \
  147.     int k;                                                         \
  148.     strncpy(temp_str2, brf_entity->name, 19); temp_str2[19] = '\0';\
  149.     strcat(temp_str2, ":");                           \
  150.     strcat (temp_str, temp_str2);                                  \
  151.     for (k=strlen(brf_entity->name);k<20;k++)                      \
  152.        if (k%2)strcat(temp_str,"."); else strcat(temp_str," ");    \
  153. }
  154.  
  155. char brf_filename[STRLENGTH];
  156. FILE *brf_file;
  157. int  brf_used_flag = UNOPENED;
  158. int i; /* generic counter */
  159. char *nice_float_8();
  160.  
  161. /*----------------------------------------------------------------------*\
  162. | Program: brf_ents.c
  163. | among other things, this code generates most of the report code
  164. |
  165. \*----------------------------------------------------------------------*/
  166.  
  167.  
  168. /*--------------------------------------------------------------------*\
  169. | Procedure     :    do_brfgeneric( BIF_Traverser_state,union,
  170. |                       BIF_All BRF_Any_With_Data BRF_state
  171. |---------------------------------------------------------------------
  172. | Description   :    Records and reports usage information for the BRF
  173. |---------------------------------------------------------------------
  174. | Return        :    FALSE if nothing printed in for BRF_REPORT,2,3
  175. \*--------------------------------------------------------------------*/
  176. int do_brfgeneric( traverser_state,bif_entity,brf_entity, brf_state)
  177. BIF_Traverser_state *traverser_state;
  178. union BIF_All *bif_entity;
  179. BRF_Any_With_Data *brf_entity;
  180. BRF_state *brf_state;
  181. {/* do_brfgeneric */
  182.     char    temp_str[80];
  183.     int k, brf_flag, num_frames;
  184.     int return_value;
  185.     return_value = TRUE;
  186.  
  187.     brf_flag = brf_state->brf_flag;
  188.     num_frames = brf_state->brf_num_frames;
  189.     switch(brf_flag)
  190.     {
  191.       case BRF_COLLECT:
  192.     brf_entity->times_called += num_frames;
  193.     break;
  194.       case BRF_INITIALIZE:
  195.     brf_entity->times_called = 0;
  196.     break;
  197.       case BRF_REPORT:
  198.     if ( brf_entity->times_called > 0 )
  199.     {
  200.         NICE_SPRINTF8( temp_str, 
  201.         ( (float)brf_entity->times_called/ (float)num_frames ));
  202.         NICE_CAT_ENT_NAME
  203.         BRF_appendEndBar(temp_str);
  204.         fprintf(brf_file,temp_str);
  205.     } else return_value = FALSE;
  206.     break;
  207.     }
  208.     return(return_value);
  209. }/* do_brfgeneric */
  210.  
  211. /*----------------------------------------------------------------------*\
  212. | Procedure    :    do_brfcallstructure( BIF_Traverser_state,union,
  213. |                       BIF_All BRF_Any_With_Data BRF_state
  214. |------------------------------------------------------------------------
  215. | Description    :    call the specified structure
  216. |------------------------------------------------------------------------
  217. | Return    :    FALSE if nothing printed in for BRF_REPORT,2,3
  218. \*----------------------------------------------------------------------*/
  219. int do_brfcallstructure(traverser_state,bif_entity,brf_entity, brf_state)
  220. BIF_Traverser_state *traverser_state;
  221. BIF_All *bif_entity;
  222. BRF_Any *brf_entity;
  223. BRF_state *brf_state;
  224. {
  225.     char    temp_str[80];
  226.     int k, brf_flag, num_frames;
  227.     int return_value;
  228.     return_value = TRUE;
  229.  
  230.     num_frames = brf_state->brf_num_frames;
  231.     brf_flag = brf_state->brf_flag;
  232.  
  233.     switch(brf_flag)
  234.     {
  235.       case BRF_COLLECT:
  236.     brf_entity->times_called += num_frames;
  237.     brf_traverser (traverser_state,
  238.                bif_entity->callstructure.structure_ptr->top_of_list,
  239.                brf_state);
  240.     break;
  241.       case BRF_INITIALIZE:
  242.     brf_entity->times_called = 0;
  243.     break;
  244.       case BRF_REPORT:
  245.     if ( brf_entity->times_called > 0 )
  246.     {
  247.         NICE_SPRINTF8( temp_str, 
  248.            ( (float)brf_entity->times_called/ (float)num_frames ));
  249.         NICE_CAT_ENT_NAME
  250.         BRF_appendEndBar(temp_str);
  251.         fprintf(brf_file,temp_str);
  252.     } else return_value = FALSE;
  253.     break;
  254.     }
  255.     return(return_value);
  256. } /* End do_brfcallstructure */
  257.  
  258.  
  259.  
  260.  
  261. /*----------------------------------------------------------------------*\
  262. | Procedure    :    do_brfexecutestructure ( BIF_Traverser_state,union,
  263. |                       BIF_All BRF_Any_With_Data BRF_state
  264. |------------------------------------------------------------------------
  265. | Description    :    call the specified structure
  266. |------------------------------------------------------------------------
  267. | Return    :    FALSE if nothing printed in for BRF_REPORT,2,3
  268. \*----------------------------------------------------------------------*/
  269. int do_brfexecutestructure(traverser_state,bif_entity,brf_entity, brf_state)
  270. BIF_Traverser_state *traverser_state;
  271. BIF_All *bif_entity;
  272. BRF_Any *brf_entity;
  273. BRF_state *brf_state;
  274. {
  275.     char    temp_str[80];
  276.     int k, brf_flag, num_frames;
  277.     int return_value;
  278.     return_value = TRUE;
  279.  
  280.     num_frames = brf_state->brf_num_frames;
  281.     brf_flag = brf_state->brf_flag;
  282. /* Call the traverser */
  283.  
  284.     switch(brf_flag)
  285.     {
  286.       case BRF_COLLECT:
  287.     brf_entity->times_called += num_frames;
  288.     brf_traverser (traverser_state,
  289.                bif_entity->executestructure.structure_ptr->top_of_list,
  290.                brf_state);
  291.     break;
  292.       case BRF_INITIALIZE:
  293.     brf_entity->times_called = 0;
  294.     break;
  295.       case BRF_REPORT:
  296.     if ( brf_entity->times_called > 0 )
  297.     {
  298.         NICE_SPRINTF8( temp_str, 
  299.            ( (float)brf_entity->times_called/ (float)num_frames ));
  300.         NICE_CAT_ENT_NAME
  301.         BRF_appendEndBar(temp_str);
  302.         fprintf(brf_file,temp_str);
  303.     } else return_value = FALSE;
  304.     break;
  305.     }
  306.     return(return_value);
  307. } /* End do_executestructure */
  308.  
  309.  
  310. /*----------------------------------------------------------------------*\
  311. | Procedure    :    do_brfinvokeatframe ( BIF_Traverser_state,union,
  312. |                       BIF_All BRF_Any_With_Data BRF_state
  313. |------------------------------------------------------------------------
  314. | Description    :    call the specified structure
  315. |------------------------------------------------------------------------
  316. | Return    :    FALSE if nothing printed in for BRF_REPORT,2,3
  317. \*----------------------------------------------------------------------*/
  318. int do_brfinvokeatframe(traverser_state,bif_entity,brf_entity, brf_state)
  319. BIF_Traverser_state *traverser_state;
  320. BIF_All *bif_entity;
  321. BRF_Any *brf_entity;
  322. BRF_state *brf_state;
  323. {
  324.     char    temp_str[80];
  325.     int k, brf_flag; 
  326.     int     num_frames,     start_frame,     end_frame;
  327.     int iaf_num_frames, iaf_start_frame, iaf_end_frame;
  328.     BIF_InvokeAtFrame *fent;
  329.     int return_value;
  330.  
  331.     return_value = TRUE;
  332.  
  333.     brf_flag = brf_state->brf_flag;
  334.     num_frames = brf_state->brf_num_frames;
  335.  
  336. /* Call the traverser */
  337.  
  338.     switch(brf_flag)
  339.     {
  340.     case BRF_COLLECT:
  341.             fent = &bif_entity->invokeatframe;
  342.         start_frame     = brf_state->brf_start_frame;
  343.         end_frame      = brf_state->brf_end_frame;
  344.  
  345.         if( fent->endFrame == -1 ) 
  346.         {
  347.             iaf_num_frames = num_frames - fent->startFrame + 1;
  348.             iaf_end_frame  = num_frames;
  349.         } else
  350.         {
  351.             iaf_num_frames = fent->endFrame - fent->startFrame + 1;
  352.             iaf_end_frame  = fent->endFrame;
  353.         }
  354.         iaf_start_frame  = fent->startFrame;
  355.  
  356.  
  357.  
  358.         brf_entity->times_called += num_frames;
  359.  
  360.             brf_state->brf_start_frame = iaf_start_frame;
  361.             brf_state->brf_end_frame   = iaf_end_frame;
  362.         brf_state->brf_num_frames  = iaf_num_frames;
  363.  
  364.         brf_traverser (traverser_state,
  365.            fent->invoke.structure_ptr->top_of_list,
  366.            brf_state);
  367.  
  368.             brf_state->brf_start_frame = start_frame;
  369.             brf_state->brf_end_frame   = end_frame;
  370.         brf_state->brf_num_frames  = num_frames;;
  371.     break;
  372.     case BRF_INITIALIZE:
  373.         brf_entity->times_called     = 0;
  374.     break;
  375.     case BRF_REPORT:
  376.        if ( brf_entity->times_called > 0 )
  377.        {
  378.         NICE_SPRINTF8( temp_str, 
  379.            ( (float)brf_entity->times_called/ (float)num_frames ));
  380.         NICE_CAT_ENT_NAME
  381.         BRF_appendEndBar(temp_str);
  382.         fprintf(brf_file,temp_str);
  383.        } else return_value = FALSE;
  384.     break;
  385.     }
  386.     return(return_value);
  387. } /* End do_invokeatframe */
  388.  
  389. /*----------------------------------------------------------------------*\
  390. | Procedure    :    do_brftotalpoly ( BIF_Traverser_state,union,
  391. |                       BIF_All BRF_Any_With_Data BRF_state
  392. |------------------------------------------------------------------------
  393. | Description    :    call the specified structure
  394. |------------------------------------------------------------------------
  395. | Return    :    FALSE if nothing printed in for BRF_REPORT,2,3
  396. \*----------------------------------------------------------------------*/
  397. int do_brftotalpoly(traverser_state,bif_entity,brf_entity, brf_state)
  398. BIF_Traverser_state *traverser_state;
  399. BIF_All *bif_entity;
  400. BRF_Any_With_Data *brf_entity;
  401. BRF_state *brf_state;
  402. {
  403. char    temp_str[80];
  404. int k, brf_flag, type, tmp;
  405. int num_frames;
  406. BIF_Polygon *polygon;
  407. BIF_Polygon3 *polygon3;
  408. BIF_Fillareaset *fillareaset;
  409. BIF_Fillareaset3 *fillareaset3;
  410. BIF_Triangle3 *triangle3;
  411. BIF_Quadmesh3 *quadmesh3;
  412. BIF_Indexpolygons3 *indexpolygons3;
  413. int return_value;
  414.     return_value = TRUE;
  415.  
  416. #ifdef EXTERNALNOTE
  417.     /* The exception testing normally found in other brf traversal
  418.     routines is not included here as this routine is called after
  419.     the same tests have already been applied elsewhere. */
  420. #endif
  421.  
  422.     brf_flag = brf_state->brf_flag;
  423. /* Call the traverser */
  424.  
  425.     num_frames = brf_state->brf_num_frames;
  426.     switch(brf_flag)
  427.     {
  428.     case BRF_COLLECT:
  429.     type = bif_entity->entity_type;
  430.         switch ( type )
  431.         {
  432.         case POLYGON:
  433.             polygon = (BIF_Polygon *)bif_entity;
  434.             brf_entity->times_called+= num_frames;
  435.             brf_entity->numCoords   += polygon->number*num_frames;
  436.             brf_entity->numFacets+= num_frames;
  437.             brf_entity->numEdges    += polygon->number*num_frames;
  438.             brf_entity->numContours+= num_frames;
  439.         break;
  440.         case POLYGON3:
  441.             polygon3 = (BIF_Polygon3 *)bif_entity;
  442.             brf_entity->times_called+= num_frames;
  443.             brf_entity->numCoords   += polygon3->numCoords
  444.                         *num_frames;
  445.             brf_entity->numFacets+= num_frames;
  446.             brf_entity->numEdges    += polygon3->numEdges
  447.                         *num_frames;
  448.             brf_entity->numContours += polygon3->numFacets
  449.                                                 *num_frames;
  450.             if(polygon3->with_data_flag[VCOLORT]
  451.             || polygon3->with_data_flag[VCOLORI])
  452.             brf_entity->vcolr += polygon3->numCoords
  453.                         *num_frames;
  454.             if(polygon3->with_data_flag[FCOLORT]
  455.             || polygon3->with_data_flag[FCOLORI])
  456.             brf_entity->fcolr += polygon3->numFacets
  457.                         *num_frames;
  458.             if(polygon3->with_data_flag[VNORM])
  459.             brf_entity->vnorm += polygon3->numCoords
  460.                         *num_frames;
  461.             if(polygon3->with_data_flag[FNORM])
  462.             brf_entity->fnorm += polygon3->numFacets
  463.                         *num_frames;
  464.             if(polygon3->with_data_flag[EDATA])
  465.             brf_entity->evisi += polygon3->numEdges
  466.                         *num_frames;
  467.         break;
  468.         case FILL_AREA_SET:
  469.             fillareaset = (BIF_Fillareaset *)bif_entity;
  470.             brf_entity->times_called+= num_frames;
  471.             tmp = fillareaset->sets->num_points;
  472.             brf_entity->numCoords   += tmp*num_frames;
  473.             brf_entity->numFacets+= num_frames;
  474.             brf_entity->numEdges    += tmp;
  475.             brf_entity->numContours += fillareaset->numContours
  476.                         *num_frames;
  477.         break;
  478.         case FILL_AREA_SET3:
  479.             fillareaset3 = (BIF_Fillareaset3 *)bif_entity;
  480.             brf_entity->times_called+= num_frames;
  481.             brf_entity->numCoords   += fillareaset3->numCoords
  482.                         *num_frames;
  483.             brf_entity->numFacets+= num_frames;
  484.             brf_entity->numEdges    += fillareaset3->numEdges
  485.                         *num_frames;
  486.             brf_entity->numContours += fillareaset3->numContours
  487.                         *num_frames;
  488.             if(fillareaset3->with_data_flag[VCOLORT]
  489.             || fillareaset3->with_data_flag[VCOLORI])
  490.             brf_entity->vcolr += fillareaset3->numCoords
  491.                         *num_frames;
  492.             if(fillareaset3->with_data_flag[FCOLORT]
  493.             || fillareaset3->with_data_flag[FCOLORI])
  494.             brf_entity->fcolr += fillareaset3->numFacets
  495.                         *num_frames;
  496.             if(fillareaset3->with_data_flag[VNORM])
  497.             brf_entity->vnorm += fillareaset3->numCoords
  498.                         *num_frames;
  499.             if(fillareaset3->with_data_flag[FNORM])
  500.             brf_entity->fnorm += fillareaset3->numFacets
  501.                         *num_frames;
  502.             if(fillareaset3->with_data_flag[EDATA])
  503.             brf_entity->evisi += fillareaset3->numEdges
  504.                         *num_frames;
  505.         break;
  506.         case TRIANGLE3:
  507.             triangle3 = (BIF_Triangle3 *)bif_entity;
  508.             brf_entity->times_called+= num_frames;
  509.             brf_entity->numCoords   += triangle3->numCoords
  510.                         *num_frames;
  511.             brf_entity->numFacets   += triangle3->numFacets
  512.                         *num_frames;
  513.             brf_entity->numEdges    += triangle3->numEdges
  514.                         *num_frames;
  515.             brf_entity->numContours += triangle3->numFacets
  516.                         *num_frames;
  517.             if(triangle3->with_data_flag[VCOLORT]
  518.             || triangle3->with_data_flag[VCOLORI])
  519.             brf_entity->vcolr += triangle3->numCoords
  520.                         *num_frames;
  521.             if(triangle3->with_data_flag[FCOLORT]
  522.             || triangle3->with_data_flag[FCOLORI])
  523.             brf_entity->fcolr += triangle3->numFacets
  524.                         *num_frames;
  525.             if(triangle3->with_data_flag[VNORM])
  526.             brf_entity->vnorm += triangle3->numCoords
  527.                         *num_frames;
  528.             if(triangle3->with_data_flag[FNORM])
  529.             brf_entity->fnorm += triangle3->numFacets
  530.                         *num_frames;
  531.             if(triangle3->with_data_flag[EDATA])
  532.             brf_entity->evisi += triangle3->numEdges
  533.                         *num_frames;
  534.         break;
  535.         case QUAD_MESH3:
  536.             quadmesh3 = (BIF_Quadmesh3 *)bif_entity;
  537.             brf_entity->times_called+= num_frames;
  538.             brf_entity->numCoords   += quadmesh3->numCoords
  539.                         *num_frames;
  540.             brf_entity->numFacets   += quadmesh3->numFacets
  541.                         *num_frames;
  542.             brf_entity->numEdges    += quadmesh3->numEdges
  543.                         *num_frames;
  544.             brf_entity->numContours += quadmesh3->numFacets
  545.                         *num_frames;
  546.             if(quadmesh3->with_data_flag[VCOLORT]
  547.             || quadmesh3->with_data_flag[VCOLORI])
  548.             brf_entity->vcolr += quadmesh3->numCoords
  549.                         *num_frames;
  550.             if(quadmesh3->with_data_flag[FCOLORT]
  551.             || quadmesh3->with_data_flag[FCOLORI])
  552.             brf_entity->fcolr += quadmesh3->numFacets
  553.                         *num_frames;
  554.             if(quadmesh3->with_data_flag[VNORM])
  555.             brf_entity->vnorm += quadmesh3->numCoords
  556.                         *num_frames;
  557.             if(quadmesh3->with_data_flag[FNORM])
  558.             brf_entity->fnorm += quadmesh3->numFacets
  559.                         *num_frames;
  560.             if(quadmesh3->with_data_flag[EDATA])
  561.             brf_entity->evisi += quadmesh3->numEdges
  562.                         *num_frames;
  563.         break;
  564.         case INDEX_POLYGONS3:
  565.             indexpolygons3 = (BIF_Indexpolygons3 *)bif_entity;
  566.             brf_entity->times_called+= num_frames;
  567.             brf_entity->numCoords   += indexpolygons3->numCoords
  568.                         *num_frames;
  569.             brf_entity->numFacets   += indexpolygons3->numFacets
  570.                         *num_frames;
  571.             brf_entity->numEdges    += indexpolygons3->numEdges
  572.                         *num_frames;
  573.             brf_entity->numContours += indexpolygons3->numFacets
  574.                         *num_frames;
  575.             if(indexpolygons3->with_data_flag[VCOLORT]
  576.             || indexpolygons3->with_data_flag[VCOLORI])
  577.             brf_entity->vcolr += indexpolygons3->numCoords
  578.                         *num_frames;
  579.             if(indexpolygons3->with_data_flag[FCOLORT]
  580.             || indexpolygons3->with_data_flag[FCOLORI])
  581.             brf_entity->fcolr += indexpolygons3->numFacets
  582.                         *num_frames;
  583.             if(indexpolygons3->with_data_flag[VNORM])
  584.             brf_entity->vnorm += indexpolygons3->numCoords
  585.                         *num_frames;
  586.             if(indexpolygons3->with_data_flag[FNORM])
  587.             brf_entity->fnorm += indexpolygons3->numFacets
  588.                         *num_frames;
  589.             if(indexpolygons3->with_data_flag[EDATA])
  590.             brf_entity->evisi += indexpolygons3->numEdges
  591.                         *num_frames;
  592.         break;
  593.         }
  594.     break;
  595.     case BRF_INITIALIZE:
  596.         brf_entity->times_called     = 0;
  597. #ifdef EXTERNALNOTE
  598.         /* Here we init the brf tagged exception counters. When used with the
  599.         global variable plb_exception and the exceptions variable in the bif
  600.         structure, exceptions from all segments of the code can be tagged. It then
  601.         remains to the brf report generator to sweep up these tags and print
  602.         them. In the case of exceptions encountered during building of entities,
  603.         the data_groups count for each unsupported optional data group called
  604.     gets incremented (if appropriate) in the COLLECT case above. 
  605.     The REPORT case below prints all non-zero values for those optional 
  606.     data groups.
  607.     */
  608. #endif
  609.                 brf_entity->exceptions = 0;
  610.                 brf_entity->optional_data[VCOLORT] = 0;
  611.                 brf_entity->optional_data[VCOLORI] = 0;
  612.                 brf_entity->optional_data[VNORM] = 0;
  613.                 brf_entity->optional_data[FCOLORT] = 0;
  614.                 brf_entity->optional_data[FCOLORI] = 0;
  615.                 brf_entity->optional_data[FNORM] = 0;
  616.                 brf_entity->optional_data[EDATA] = 0;
  617.         brf_entity->numCoords         = 0;
  618.         brf_entity->numFacets         = 0;
  619.         brf_entity->numEdges         = 0;
  620.         brf_entity->numContours     = 0;
  621.         brf_entity->vcolr        = 0;
  622.         brf_entity->vnorm        = 0;
  623.         brf_entity->fcolr        = 0;
  624.         brf_entity->fnorm        = 0;
  625.         brf_entity->evisi        = 0;
  626.     break;
  627.     case BRF_REPORT:
  628.         return_value = brf_utl_report1(num_frames,brf_entity);
  629.     break;
  630.     case BRF_REPORT2:
  631.         return_value = brf_utl_report2(num_frames,brf_entity);
  632.     break;
  633.     case BRF_REPORT3:
  634.         return_value = brf_utl_report3(num_frames,brf_entity);
  635.     break;
  636.     }
  637.     return(return_value);
  638.  
  639. } /* End do_totalpoly */
  640.  
  641. /*--------------------------------------------------------------------*\
  642. | Procedure     :    do_brfpolygon( BIF_Traverser_state, BIF_Polygon, 
  643. |                       BRF_Any_With_Data, BRF_state)
  644. |---------------------------------------------------------------------
  645. | Description   :    Records and reports usage information for the BRF
  646. |---------------------------------------------------------------------
  647. | Return        :    FALSE if nothing printed in for BRF_REPORT,2,3
  648. \*--------------------------------------------------------------------*/
  649. int do_brfpolygon( traverser_state,polygon,brf_entity, brf_state)
  650. BIF_Traverser_state *traverser_state;
  651. BIF_Polygon *polygon;
  652. BRF_Any_With_Data *brf_entity;
  653. BRF_state *brf_state;
  654. {/* do_brfpolygon */
  655. char    temp_str[80];
  656. int k, brf_flag, num_frames;
  657. int return_value;
  658.     return_value = TRUE;
  659.     brf_flag = brf_state->brf_flag;
  660.     num_frames = brf_state->brf_num_frames;
  661.     switch(brf_flag)
  662.     {
  663.     case BRF_COLLECT:
  664.         brf_entity->times_called    += num_frames;
  665.         brf_entity->numCoords       += polygon->number*num_frames;
  666.         brf_entity->numFacets        += num_frames;
  667.         brf_entity->numEdges        += polygon->number*num_frames;
  668.         brf_entity->numContours        += num_frames;
  669.         do_brftotalpoly(traverser_state,polygon,
  670.                 (BRF_Any_With_Data *)brf_entity->brf_totals,
  671.                 brf_state);
  672.     break;
  673.     case BRF_INITIALIZE:
  674.         brf_entity->times_called     = 0;
  675. #ifdef EXTERNALNOTE
  676.         /* see comment at line 44   */
  677. #endif
  678.         /* added for error reporting */
  679.                 brf_entity->exceptions = 0;
  680.                 brf_entity->optional_data[VCOLORT] = 0;
  681.                 brf_entity->optional_data[VCOLORI] = 0;
  682.                 brf_entity->optional_data[VNORM] = 0;
  683.                 brf_entity->optional_data[FCOLORT] = 0;
  684.                 brf_entity->optional_data[FCOLORI] = 0;
  685.                 brf_entity->optional_data[FNORM] = 0;
  686.                 brf_entity->optional_data[EDATA] = 0;
  687.         brf_entity->numCoords         = 0;
  688.         brf_entity->numFacets         = 0;
  689.         brf_entity->numEdges         = 0;
  690.         brf_entity->numContours     = 0;
  691.         brf_entity->vcolr        = 0;
  692.         brf_entity->vnorm        = 0;
  693.         brf_entity->fcolr        = 0;
  694.         brf_entity->fnorm        = 0;
  695.         brf_entity->evisi        = 0;
  696.     break;
  697.     case BRF_REPORT:
  698.         return_value = brf_utl_report1(num_frames,brf_entity);
  699.     break;
  700.     }
  701.     return(return_value);
  702. }/* do_brfpolygon */
  703. /*--------------------------------------------------------------------*\
  704. | Procedure     :    do_brfpolygon3( BIF_Traverser_state, BIF_Polygon, 
  705. |                       BRF_Any_With_Data, BRF_state)
  706. |---------------------------------------------------------------------
  707. | Description   :    Records and reports usage information for the BRF
  708. |---------------------------------------------------------------------
  709. | Return        :    FALSE if nothing printed in for BRF_REPORT,2,3
  710. \*--------------------------------------------------------------------*/
  711. int do_brfpolygon3( traverser_state,polygon3,brf_entity, brf_state)
  712. BIF_Traverser_state *traverser_state;
  713. BIF_Polygon3 *polygon3;
  714. BRF_Any_With_Data *brf_entity;
  715. BRF_state *brf_state;
  716. {/* do_brfpolygon3 */
  717. char    temp_str[80];
  718. int k, brf_flag, num_frames;
  719. int return_value;
  720.     return_value = TRUE;
  721.     brf_flag = brf_state->brf_flag;
  722.     num_frames = brf_state->brf_num_frames;
  723.     switch(brf_flag)
  724.     {
  725.     case BRF_COLLECT:
  726.         brf_entity->times_called    += num_frames;
  727.         brf_entity->numCoords   += polygon3->numCoords*num_frames;;
  728.         brf_entity->numFacets        += num_frames;
  729.         brf_entity->numEdges    += polygon3->numEdges*num_frames;;
  730.         brf_entity->numContours     += num_frames;
  731.         if (polygon3->with_data_flag[VCOLORT] ||
  732.             polygon3->with_data_flag[VCOLORI])
  733.             brf_entity->vcolr+= polygon3->numCoords*num_frames;
  734.         if (polygon3->with_data_flag[VNORM])
  735.             brf_entity->vnorm+= polygon3->numCoords*num_frames;
  736.         if (polygon3->with_data_flag[FCOLORT] ||
  737.             polygon3->with_data_flag[FCOLORI])
  738.             brf_entity->fcolr    += num_frames;
  739.         if (polygon3->with_data_flag[FNORM])
  740.             brf_entity->fnorm    += num_frames;
  741.         if (polygon3->with_data_flag[EDATA])
  742.             brf_entity->evisi += polygon3->numEdges*num_frames;
  743.         do_brftotalpoly(traverser_state,polygon3,
  744.             brf_entity->brf_totals, brf_state);
  745.  
  746.     break;
  747.     case BRF_INITIALIZE:
  748.         brf_entity->times_called     = 0;
  749. #ifdef EXTERNALNOTE
  750.         /* see comment at line 44   */
  751. #endif
  752.         /* added for error reporting */
  753.                 brf_entity->exceptions = 0;
  754.                 brf_entity->optional_data[VCOLORT] = 0;
  755.                 brf_entity->optional_data[VCOLORI] = 0;
  756.                 brf_entity->optional_data[VNORM] = 0;
  757.                 brf_entity->optional_data[FCOLORT] = 0;
  758.                 brf_entity->optional_data[FCOLORI] = 0;
  759.                 brf_entity->optional_data[FNORM] = 0;
  760.                 brf_entity->optional_data[EDATA] = 0;
  761.         brf_entity->numCoords         = 0;
  762.         brf_entity->numFacets         = 0;
  763.         brf_entity->numEdges         = 0;
  764.         brf_entity->numContours     = 0;
  765.         brf_entity->vcolr        = 0;
  766.         brf_entity->vnorm        = 0;
  767.         brf_entity->fcolr        = 0;
  768.         brf_entity->fnorm        = 0;
  769.         brf_entity->evisi        = 0;
  770.     break;
  771.     case BRF_REPORT:
  772.         return_value = brf_utl_report1(num_frames,brf_entity);
  773.     break;
  774.     }
  775.     return(return_value);
  776. }/* do_brfpolygon3*/
  777. /*--------------------------------------------------------------------*\
  778. | Procedure     :    do_brf_fillareaset( BIF_Traverser_state, 
  779. |            BIF_Polygon, BRF_Any_With_Data, BRF_state)
  780. |---------------------------------------------------------------------
  781. | Description   :    Records and reports usage information for the BRF
  782. |---------------------------------------------------------------------
  783. | Return        :    FALSE if nothing printed in for BRF_REPORT,2,3
  784. \*--------------------------------------------------------------------*/
  785. int do_brffillareaset( traverser_state,fillareaset,brf_entity, brf_state)
  786. BIF_Traverser_state *traverser_state;
  787. BIF_Fillareaset *fillareaset;
  788. BRF_Any_With_Data *brf_entity;
  789. BRF_state *brf_state;
  790. {/* do_brffillareaset*/
  791. char    temp_str[80];
  792. int k, brf_flag, num_frames, tmp;
  793. int return_value;
  794.     return_value = TRUE;
  795.     brf_flag = brf_state->brf_flag;
  796.     num_frames = brf_state->brf_num_frames;
  797.     switch(brf_flag)
  798.     {
  799.     case BRF_COLLECT:
  800.         brf_entity->times_called    += num_frames;
  801.         tmp = fillareaset->sets->num_points;
  802.         brf_entity->numCoords       += tmp * num_frames;
  803.         brf_entity->numFacets        += num_frames;
  804.         brf_entity->numEdges        += tmp * num_frames;
  805.         brf_entity->numContours     += fillareaset->numContours
  806.                          * num_frames;
  807.         do_brftotalpoly(traverser_state,fillareaset,
  808.                 (BRF_Any_With_Data *)brf_entity->brf_totals,
  809.                 brf_state);
  810.     break;
  811.     case BRF_INITIALIZE:
  812.         brf_entity->times_called     = 0;
  813. #ifdef EXTERNALNOTE
  814.         /* see comment at line 44   */
  815. #endif
  816.         /* added for error reporting */
  817.                 brf_entity->exceptions = 0;
  818.                 brf_entity->optional_data[VCOLORT] = 0;
  819.                 brf_entity->optional_data[VCOLORI] = 0;
  820.                 brf_entity->optional_data[VNORM] = 0;
  821.                 brf_entity->optional_data[FCOLORT] = 0;
  822.                 brf_entity->optional_data[FCOLORI] = 0;
  823.                 brf_entity->optional_data[FNORM] = 0;
  824.                 brf_entity->optional_data[EDATA] = 0;
  825.         brf_entity->numCoords         = 0;
  826.         brf_entity->numFacets         = 0;
  827.         brf_entity->numEdges         = 0;
  828.         brf_entity->numContours     = 0;
  829.         brf_entity->vcolr        = 0;
  830.         brf_entity->vnorm        = 0;
  831.         brf_entity->fcolr        = 0;
  832.         brf_entity->fnorm        = 0;
  833.         brf_entity->evisi        = 0;
  834.     break;
  835.     case BRF_REPORT:
  836.         return_value = brf_utl_report1(num_frames,brf_entity);
  837.     break;
  838.     case BRF_REPORT2:
  839.         return_value = brf_utl_report2(num_frames,brf_entity);
  840.     break;
  841.     case BRF_REPORT3:
  842.         return_value = brf_utl_report3(num_frames,brf_entity);
  843.     break;
  844.     }
  845.     return(return_value);
  846. }/* do_brffillareaset*/
  847. /*--------------------------------------------------------------------*\
  848. | Procedure     :    do_brffillareaset( BIF_Traverser_state, 
  849. |            BIF_Polygon, BRF_Any_With_Data, BRF_state)
  850. |---------------------------------------------------------------------
  851. | Description   :    Records and reports usage information for the BRF
  852. |---------------------------------------------------------------------
  853. | Return        :    FALSE if nothing printed in for BRF_REPORT,2,3
  854. \*--------------------------------------------------------------------*/
  855. int do_brffillareaset3( traverser_state,fillareaset3,brf_entity, brf_state)
  856. BIF_Traverser_state *traverser_state;
  857. BIF_Fillareaset3 *fillareaset3;
  858. BRF_Any_With_Data *brf_entity;
  859. BRF_state *brf_state;
  860. {/*do_brffillareaset3*/
  861. char    temp_str[80];
  862. int k, brf_flag, num_frames;
  863. int return_value;
  864.     return_value = TRUE;
  865.     brf_flag = brf_state->brf_flag;
  866.     num_frames = brf_state->brf_num_frames;
  867.     switch(brf_flag)
  868.     {
  869.     case BRF_COLLECT:
  870.         brf_entity->times_called+= num_frames;
  871.         brf_entity->numCoords   += fillareaset3->numCoords*num_frames;
  872.         brf_entity->numFacets    += num_frames;
  873.         brf_entity->numEdges    += fillareaset3->numEdges*num_frames;
  874.         brf_entity->numContours += fillareaset3->numContours*num_frames;
  875.         if (fillareaset3->with_data_flag[VCOLORT] ||
  876.             fillareaset3->with_data_flag[VCOLORI])
  877.             brf_entity->vcolr+= fillareaset3->numCoords*num_frames;
  878.         if (fillareaset3->with_data_flag[VNORM])
  879.             brf_entity->vnorm+= fillareaset3->numCoords*num_frames;
  880.  
  881.         if (fillareaset3->with_data_flag[FCOLORT] ||
  882.             fillareaset3->with_data_flag[FCOLORI])
  883.             brf_entity->fcolr    += num_frames;
  884.         if (fillareaset3->with_data_flag[FNORM])
  885.             brf_entity->fnorm    += num_frames;
  886.         if (fillareaset3->with_data_flag[EDATA])
  887.             brf_entity->evisi += fillareaset3->numEdges*num_frames;
  888.         do_brftotalpoly(traverser_state,fillareaset3,
  889.                 (BRF_Any_With_Data *)brf_entity->brf_totals,
  890.                 brf_state);
  891.     break;
  892.     case BRF_INITIALIZE:
  893.         brf_entity->times_called     = 0;
  894. #ifdef EXTERNALNOTE
  895.         /* see comment at line 44   */
  896. #endif
  897.         /* added for error reporting */
  898.                 brf_entity->exceptions = 0;
  899.                 brf_entity->optional_data[VCOLORT] = 0;
  900.                 brf_entity->optional_data[VCOLORI] = 0;
  901.                 brf_entity->optional_data[VNORM] = 0;
  902.                 brf_entity->optional_data[FCOLORT] = 0;
  903.                 brf_entity->optional_data[FCOLORI] = 0;
  904.                 brf_entity->optional_data[FNORM] = 0;
  905.                 brf_entity->optional_data[EDATA] = 0;
  906.         brf_entity->numCoords         = 0;
  907.         brf_entity->numFacets         = 0;
  908.         brf_entity->numEdges         = 0;
  909.         brf_entity->numContours     = 0;
  910.         brf_entity->vcolr        = 0;
  911.         brf_entity->vnorm        = 0;
  912.         brf_entity->fcolr        = 0;
  913.         brf_entity->fnorm        = 0;
  914.         brf_entity->evisi        = 0;
  915.     break;
  916.     case BRF_REPORT:
  917.         return_value = brf_utl_report1(num_frames,brf_entity);
  918.     break;
  919.     case BRF_REPORT2:
  920.         return_value = brf_utl_report2(num_frames,brf_entity);
  921.     break;
  922.     case BRF_REPORT3:
  923.         return_value = brf_utl_report3(num_frames,brf_entity);
  924.     break;
  925.     }
  926.     return(return_value);
  927. }/*do_brffillareaset3*/
  928. /*--------------------------------------------------------------------*\
  929. | Procedure     :    do_brftriangle3( BIF_Traverser_state, 
  930. |            BIF_Polygon, BRF_Any_With_Data, BRF_state)
  931. |---------------------------------------------------------------------
  932. | Description   :    Records and reports usage information for the BRF
  933. |---------------------------------------------------------------------
  934. | Return        :    FALSE if nothing printed in for BRF_REPORT,2,3
  935. \*--------------------------------------------------------------------*/
  936. int do_brftriangle3( traverser_state,triangle3,brf_entity, brf_state)
  937. BIF_Traverser_state *traverser_state;
  938. BIF_Triangle3 *triangle3;
  939. BRF_Any_With_Data *brf_entity;
  940. BRF_state *brf_state;
  941. {/*do_brftriangle3*/
  942. char    temp_str[80];
  943. int k, brf_flag, num_frames;
  944. int return_value;
  945.     return_value = TRUE;
  946.     brf_flag = brf_state->brf_flag;
  947.     num_frames = brf_state->brf_num_frames;
  948.     switch(brf_flag)
  949.     {
  950.     case BRF_COLLECT:
  951.         brf_entity->times_called+= num_frames;
  952.         brf_entity->numCoords   += triangle3->numCoords*num_frames;
  953.         brf_entity->numFacets   += triangle3->numFacets*num_frames;
  954.         brf_entity->numEdges    += triangle3->numEdges*num_frames;
  955.         brf_entity->numContours += triangle3->numFacets*num_frames;
  956.         if (triangle3->with_data_flag[VCOLORT] ||
  957.             triangle3->with_data_flag[VCOLORI])
  958.             brf_entity->vcolr+= triangle3->numCoords*num_frames;
  959.         if (triangle3->with_data_flag[VNORM])
  960.             brf_entity->vnorm+= triangle3->numCoords*num_frames;
  961.  
  962.         if (triangle3->with_data_flag[FCOLORT] ||
  963.             triangle3->with_data_flag[FCOLORI])
  964.             brf_entity->fcolr+= triangle3->numFacets*num_frames;
  965.         if (triangle3->with_data_flag[FNORM])
  966.             brf_entity->fnorm+= triangle3->numFacets*num_frames;
  967.         if (triangle3->with_data_flag[EDATA])
  968.             brf_entity->evisi += triangle3->numEdges*num_frames;
  969.         do_brftotalpoly(traverser_state,triangle3,
  970.                 (BRF_Any_With_Data *)brf_entity->brf_totals,
  971.                 brf_state);
  972.     break;
  973.     case BRF_INITIALIZE:
  974.         brf_entity->times_called     = 0;
  975. #ifdef EXTERNALNOTE
  976.         /* see comment at line 44   */
  977. #endif
  978.         /* added for error reporting */
  979.                 brf_entity->exceptions = 0;
  980.                 brf_entity->optional_data[VCOLORT] = 0;
  981.                 brf_entity->optional_data[VCOLORI] = 0;
  982.                 brf_entity->optional_data[VNORM] = 0;
  983.                 brf_entity->optional_data[FCOLORT] = 0;
  984.                 brf_entity->optional_data[FCOLORI] = 0;
  985.                 brf_entity->optional_data[FNORM] = 0;
  986.                 brf_entity->optional_data[EDATA] = 0;
  987.         brf_entity->numCoords         = 0;
  988.         brf_entity->numFacets         = 0;
  989.         brf_entity->numEdges         = 0;
  990.         brf_entity->numContours     = 0;
  991.         brf_entity->vcolr        = 0;
  992.         brf_entity->vnorm        = 0;
  993.         brf_entity->fcolr        = 0;
  994.         brf_entity->fnorm        = 0;
  995.         brf_entity->evisi        = 0;
  996.     break;
  997.     case BRF_REPORT:
  998.         return_value = brf_utl_report1(num_frames,brf_entity);
  999.     break;
  1000.     case BRF_REPORT2:
  1001.         return_value = brf_utl_report2(num_frames,brf_entity);
  1002.     break;
  1003.     case BRF_REPORT3:
  1004.         return_value = brf_utl_report3(num_frames,brf_entity);
  1005.     break;
  1006.     }
  1007.     return(return_value);
  1008. }/*do_brftriangle3*/
  1009. /*--------------------------------------------------------------------*\
  1010. | Procedure     :    do_brfquadmesh( BIF_Traverser_state, 
  1011. |            BIF_Polygon, BRF_Any_With_Data, BRF_state)
  1012. |---------------------------------------------------------------------
  1013. | Description   :    Records and reports usage information for the BRF
  1014. |---------------------------------------------------------------------
  1015. | Return        :    FALSE if nothing printed in for BRF_REPORT,2,3
  1016. \*--------------------------------------------------------------------*/
  1017. int do_brfquadmesh3( traverser_state,quadmesh3,brf_entity, brf_state)
  1018. BIF_Traverser_state *traverser_state;
  1019. BIF_Quadmesh3 *quadmesh3;
  1020. BRF_Any_With_Data *brf_entity;
  1021. BRF_state *brf_state;
  1022. {/*do_brfquadmesh3*/
  1023. char    temp_str[80];
  1024. int k, brf_flag, num_frames;
  1025. int return_value;
  1026.     return_value = TRUE;
  1027.     brf_flag = brf_state->brf_flag;
  1028.     num_frames = brf_state->brf_num_frames;
  1029.     switch(brf_flag)
  1030.     {
  1031.     case BRF_COLLECT:
  1032.         brf_entity->times_called+= num_frames;
  1033.         brf_entity->numCoords   += quadmesh3->numCoords*num_frames;
  1034.         brf_entity->numFacets   += quadmesh3->numFacets*num_frames;
  1035.         brf_entity->numEdges    += quadmesh3->numEdges*num_frames;
  1036.         brf_entity->numContours += quadmesh3->numFacets*num_frames;
  1037.         if (quadmesh3->with_data_flag[VCOLORT] ||
  1038.             quadmesh3->with_data_flag[VCOLORI])
  1039.             brf_entity->vcolr+= quadmesh3->numCoords*num_frames;
  1040.         if (quadmesh3->with_data_flag[VNORM])
  1041.             brf_entity->vnorm+= quadmesh3->numCoords*num_frames;
  1042.  
  1043.         if (quadmesh3->with_data_flag[FCOLORT] ||
  1044.             quadmesh3->with_data_flag[FCOLORI])
  1045.             brf_entity->fcolr+= quadmesh3->numFacets*num_frames;
  1046.         if (quadmesh3->with_data_flag[FNORM])
  1047.             brf_entity->fnorm+= quadmesh3->numFacets*num_frames;
  1048.         if (quadmesh3->with_data_flag[EDATA])
  1049.             brf_entity->evisi += quadmesh3->numEdges*num_frames;
  1050.         do_brftotalpoly(traverser_state,quadmesh3,
  1051.                 (BRF_Any_With_Data *)brf_entity->brf_totals,
  1052.                 brf_state);
  1053.     break;
  1054.     case BRF_INITIALIZE:
  1055.         brf_entity->times_called     = 0;
  1056. #ifdef EXTERNALNOTE
  1057.         /* see comment at line 44   */
  1058. #endif
  1059.         /* added for error reporting */
  1060.                 brf_entity->exceptions = 0;
  1061.                 brf_entity->optional_data[VCOLORT] = 0;
  1062.                 brf_entity->optional_data[VCOLORI] = 0;
  1063.                 brf_entity->optional_data[VNORM] = 0;
  1064.                 brf_entity->optional_data[FCOLORT] = 0;
  1065.                 brf_entity->optional_data[FCOLORI] = 0;
  1066.                 brf_entity->optional_data[FNORM] = 0;
  1067.                 brf_entity->optional_data[EDATA] = 0;
  1068.         brf_entity->numCoords         = 0;
  1069.         brf_entity->numFacets         = 0;
  1070.         brf_entity->numEdges         = 0;
  1071.         brf_entity->numContours     = 0;
  1072.         brf_entity->vcolr        = 0;
  1073.         brf_entity->vnorm        = 0;
  1074.         brf_entity->fcolr        = 0;
  1075.         brf_entity->fnorm        = 0;
  1076.         brf_entity->evisi        = 0;
  1077.     break;
  1078.     case BRF_REPORT:
  1079.         return_value = brf_utl_report1(num_frames,brf_entity);
  1080.     break;
  1081.     case BRF_REPORT2:
  1082.         return_value = brf_utl_report2(num_frames,brf_entity);
  1083.     break;
  1084.     case BRF_REPORT3:
  1085.         return_value = brf_utl_report3(num_frames,brf_entity);
  1086.     break;
  1087.     }
  1088.     return(return_value);
  1089. }/*do_brfquadmesh3*/
  1090. /*--------------------------------------------------------------------*\
  1091. | Procedure     :    do_brfindexpolygons( BIF_Traverser_state, 
  1092. |            BIF_Polygon, BRF_Any_With_Data, BRF_state)
  1093. |---------------------------------------------------------------------
  1094. | Description   :    Records and reports usage information for the BRF
  1095. |---------------------------------------------------------------------
  1096. | Return        :    FALSE if nothing printed in for BRF_REPORT,2,3
  1097. \*--------------------------------------------------------------------*/
  1098. int do_brfindexpolygons3( traverser_state,indexpolygons3,brf_entity, brf_state)
  1099. BIF_Traverser_state *traverser_state;
  1100. BIF_Indexpolygons3 *indexpolygons3;
  1101. BRF_Any_With_Data *brf_entity;
  1102. BRF_state *brf_state;
  1103. {/*do_brfindexpolygons3*/
  1104. int k, brf_flag, num_frames;
  1105. char    temp_str[80];
  1106. char    temp_str2[80];
  1107. int return_value;
  1108.     return_value = TRUE;
  1109.     brf_flag = brf_state->brf_flag;
  1110.     num_frames = brf_state->brf_num_frames;
  1111.  
  1112.     switch(brf_flag)
  1113.     {
  1114.     case BRF_COLLECT:
  1115.         brf_entity->times_called+= num_frames;
  1116.         brf_entity->numCoords   += indexpolygons3->numCoords*num_frames;
  1117.         brf_entity->numFacets   += indexpolygons3->numFacets*num_frames;
  1118.         brf_entity->numEdges    += indexpolygons3->numEdges*num_frames;
  1119.         brf_entity->numContours += indexpolygons3->numFacets*num_frames;
  1120.         if (indexpolygons3->with_data_flag[VCOLORT] ||
  1121.             indexpolygons3->with_data_flag[VCOLORI])
  1122.             brf_entity->vcolr+= indexpolygons3->numCoords
  1123.                         *num_frames;
  1124.         if (indexpolygons3->with_data_flag[VNORM])
  1125.             brf_entity->vnorm+= indexpolygons3->numCoords
  1126.                         *num_frames;
  1127.  
  1128.         if (indexpolygons3->with_data_flag[FCOLORT] ||
  1129.             indexpolygons3->with_data_flag[FCOLORI])
  1130.             brf_entity->fcolr+= indexpolygons3->numFacets
  1131.                         *num_frames;
  1132.         if (indexpolygons3->with_data_flag[FNORM])
  1133.             brf_entity->fnorm+= indexpolygons3->numFacets
  1134.                         *num_frames;
  1135.         if (indexpolygons3->with_data_flag[EDATA])
  1136.             brf_entity->evisi += indexpolygons3->numEdges
  1137.                         *num_frames;
  1138.         do_brftotalpoly(traverser_state,indexpolygons3,
  1139.                 (BRF_Any_With_Data *)brf_entity->brf_totals,
  1140.                 brf_state);
  1141.     break;
  1142.     case BRF_INITIALIZE:
  1143.         brf_entity->times_called     = 0;
  1144. #ifdef EXTERNALNOTE
  1145.         /* see comment at line 44   */
  1146. #endif
  1147.         /* added for error reporting */
  1148.                 brf_entity->exceptions = 0;
  1149.                 brf_entity->optional_data[VCOLORT] = 0;
  1150.                 brf_entity->optional_data[VCOLORI] = 0;
  1151.                 brf_entity->optional_data[VNORM] = 0;
  1152.                 brf_entity->optional_data[FCOLORT] = 0;
  1153.                 brf_entity->optional_data[FCOLORI] = 0;
  1154.                 brf_entity->optional_data[FNORM] = 0;
  1155.                 brf_entity->optional_data[EDATA] = 0;
  1156.         brf_entity->numCoords         = 0;
  1157.         brf_entity->numFacets         = 0;
  1158.         brf_entity->numEdges         = 0;
  1159.         brf_entity->numContours     = 0;
  1160.         brf_entity->vcolr        = 0;
  1161.         brf_entity->vnorm        = 0;
  1162.         brf_entity->fcolr        = 0;
  1163.         brf_entity->fnorm        = 0;
  1164.         brf_entity->evisi        = 0;
  1165.     break;
  1166.     case BRF_REPORT:
  1167.         return_value = brf_utl_report1(num_frames,brf_entity);
  1168.     break;
  1169.     case BRF_REPORT2:
  1170.         return_value = brf_utl_report2(num_frames,brf_entity);
  1171.     break;
  1172.     case BRF_REPORT3:
  1173.         return_value = brf_utl_report3(num_frames,brf_entity);
  1174.     break;
  1175.     }
  1176.     return(return_value);
  1177. }/*end do_brfindexpolygons3*/
  1178.  
  1179. /*----------------------------------------------------------------------*\
  1180. | Procedure    :    open_reportfile( *char )
  1181. |------------------------------------------------------------------------
  1182. | Description    :    Opens the BRF report file
  1183. |------------------------------------------------------------------------
  1184. | Return    : 
  1185. \*----------------------------------------------------------------------*/
  1186. open_reportfile(file_name)
  1187. char *file_name;
  1188. {/*open_reportfile*/
  1189.     if ( strlen(file_name) > STRLENGTH )
  1190.     {
  1191.         yyerror("Report file name too long. Open ignored.");
  1192.     } else
  1193.     {
  1194.         strcpy(brf_filename,file_name);
  1195.         brf_file = fopen(file_name,"w");
  1196.         brf_used_flag = UNUSED;
  1197.         if ( brf_file == NULL )
  1198.         {
  1199.             yyerror("FATAL ERROR: Unable to open report file");
  1200.             exit(-1);
  1201.         }
  1202.         BRF_printHeader ( brf_file );
  1203.     }
  1204. }/*open_reportfile*/
  1205.  
  1206. /*----------------------------------------------------------------------*\
  1207. | Procedure    :    close_reportfile()
  1208. |------------------------------------------------------------------------
  1209. | Description    :    Closes the BRF report file
  1210. |------------------------------------------------------------------------
  1211. | Return    : 
  1212. \*----------------------------------------------------------------------*/
  1213. close_reportfile()
  1214. {/*close_reportfile*/
  1215.     strcpy(brf_filename,"");
  1216.     if (brf_used_flag != UNOPENED)
  1217.         fclose(brf_file);
  1218.     brf_used_flag = UNOPENED;
  1219. }/*close_reportfile*/
  1220.  
  1221. /*----------------------------------------------------------------------*\
  1222. | Procedure    :    check_default_report(char *)
  1223. |------------------------------------------------------------------------
  1224. | Description    :    Opens report file
  1225. |------------------------------------------------------------------------
  1226. | Return    : 
  1227. \*----------------------------------------------------------------------*/
  1228. check_default_report(file_name)
  1229. char *file_name;
  1230. {/*check_default_report*/
  1231.     if ( strlen(file_name) > STRLENGTH )
  1232.     {
  1233.         yyerror("Report file name too long. Open ignored.");
  1234.     } else
  1235.     {
  1236.         if(brf_used_flag == UNOPENED)
  1237.             {
  1238.             strcpy(brf_filename,file_name);
  1239.             brf_file = fopen(file_name,"w");
  1240.             brf_used_flag = UNUSED;
  1241.             if ( brf_file == NULL )
  1242.             {
  1243.                 yyerror(
  1244.                 "FATAL ERROR: Unable to open report file");
  1245.                 exit(-1);
  1246.             }
  1247.             BRF_printHeader ( brf_file );
  1248.         }
  1249.     }
  1250. }/*check_default_report*/
  1251.  
  1252.  
  1253.  
  1254. /*----------------------------------------------------------------------*\
  1255. | Procedure    :    nice_float_8(float)
  1256. |------------------------------------------------------------------------
  1257. | Description    :    Fromats a nice floating point number
  1258. |------------------------------------------------------------------------
  1259. | Return    : 
  1260. \*----------------------------------------------------------------------*/
  1261. char *nice_float_8(f_value)
  1262. float f_value;
  1263. {
  1264.     static char    out_string[80];
  1265.  
  1266.     if ( fabs(f_value) >= 1.0e+100 )
  1267.        sprintf(out_string,"REAL BIG");
  1268.     else if ( fabs(f_value) > 999999.0 )
  1269.        sprintf(out_string,"%8.2e", f_value);
  1270.     else if ( (fabs(f_value) < 1.0) && (fabs(f_value) > 0.000010) )
  1271.        sprintf(out_string," %7.5f", f_value);
  1272.     else if ( (fabs(f_value) <= 0.000010) && (fabs(f_value) > 1.0e-100) )
  1273.        sprintf(out_string,"%8.2e", f_value);
  1274.     else 
  1275.        sprintf(out_string,"%8.1f", f_value);
  1276.     strcat (out_string,"  ");
  1277.     return(out_string);
  1278. }
  1279.  
  1280. /*----------------------------------------------------------------------*\
  1281. | Procedure    :    brf_utl_report1(int,BRF_Any_With_Data* )
  1282. |------------------------------------------------------------------------
  1283. | Description    :    Producde line of printout for BRF_REPORT
  1284. |------------------------------------------------------------------------
  1285. | Return    : 
  1286. \*----------------------------------------------------------------------*/
  1287. brf_utl_report1(num_frames,brf_entity)
  1288. int num_frames;
  1289. BRF_Any_With_Data *brf_entity;
  1290. {
  1291. char    temp_str[80];
  1292. int return_value;
  1293.     return_value = TRUE;
  1294.     if(num_frames >0)
  1295.     {
  1296.        if ( brf_entity->times_called > 0 )
  1297.        {
  1298.         NICE_SPRINTF8( temp_str, 
  1299.            ( (float)brf_entity->times_called/ (float)num_frames ));
  1300.  
  1301.         NICE_CAT_ENT_NAME_D
  1302.  
  1303.         NICE_CAT8(temp_str,
  1304.             (float)brf_entity->numCoords/
  1305.              (float)brf_entity->times_called);
  1306.  
  1307.         NICE_CAT8(temp_str,
  1308.             (float)brf_entity->numFacets/
  1309.             (float)brf_entity->times_called);
  1310.  
  1311.         NICE_CAT8(temp_str,
  1312.             (float)brf_entity->numEdges/
  1313.             (float)brf_entity->times_called);
  1314.  
  1315.         NICE_CAT8(temp_str,
  1316.             (float)brf_entity->numContours/
  1317.             (float)brf_entity->times_called);
  1318.  
  1319.         BRF_appendEndBar(temp_str);
  1320.         fprintf(brf_file,temp_str);
  1321.        } else return_value = FALSE;
  1322.     }
  1323.     return(return_value);
  1324. }
  1325. /*----------------------------------------------------------------------*\
  1326. | Procedure    :    brf_utl_report2(int,BRF_Any_With_Data* )
  1327. |------------------------------------------------------------------------
  1328. | Description    :    Producde line of printout for BRF_REPORT2
  1329. |------------------------------------------------------------------------
  1330. | Return    :    FALSE if nothing printed in for BRF_REPORT,2,3
  1331. \*----------------------------------------------------------------------*/
  1332. brf_utl_report2(num_frames,brf_entity)
  1333. int num_frames;
  1334. BRF_Any_With_Data *brf_entity;
  1335. {
  1336. char    temp_str[80];
  1337. int return_value;
  1338.     return_value = TRUE;
  1339.     if(num_frames >0)
  1340.     {
  1341.        if ( brf_entity->times_called > 0 )
  1342.        {
  1343.         NICE_SPRINTF8( temp_str, 
  1344.            ( (float)brf_entity->times_called/ (float)num_frames ));
  1345.  
  1346.         NICE_CAT_ENT_NAME_D
  1347.         NICE_CAT8(temp_str,
  1348.             (float)brf_entity->vcolr/
  1349.              (float)brf_entity->times_called);
  1350.  
  1351.         NICE_CAT8(temp_str,
  1352.             (float)brf_entity->vnorm/
  1353.             (float)brf_entity->times_called);
  1354.  
  1355.         NICE_CAT8(temp_str,
  1356.             (float)brf_entity->fcolr/
  1357.             (float)brf_entity->times_called);
  1358.  
  1359.         NICE_CAT8(temp_str,
  1360.             (float)brf_entity->fnorm/
  1361.             (float)brf_entity->times_called);
  1362.  
  1363.         BRF_appendEndBar(temp_str);
  1364.         fprintf(brf_file,temp_str);
  1365.        } else return_value = FALSE;
  1366.     }
  1367.     return(return_value);
  1368. }
  1369. /*----------------------------------------------------------------------*\
  1370. | Procedure    :    brf_utl_report3(int,BRF_Any_With_Data* )
  1371. |------------------------------------------------------------------------
  1372. | Description    :    Producde line of printout for BRF_REPORT3
  1373. |------------------------------------------------------------------------
  1374. | Return    :    FALSE if nothing printed in for BRF_REPORT,2,3
  1375. \*----------------------------------------------------------------------*/
  1376. brf_utl_report3(num_frames,brf_entity)
  1377. int num_frames;
  1378. BRF_Any_With_Data *brf_entity;
  1379. {
  1380. char    temp_str[80];
  1381. int return_value;
  1382.     return_value = TRUE;
  1383.     if(num_frames >0)
  1384.     {
  1385.        if ( brf_entity->times_called > 0 )
  1386.        {
  1387.         NICE_SPRINTF8( temp_str, 
  1388.            ( (float)brf_entity->times_called/ (float)num_frames ));
  1389.  
  1390.         NICE_CAT_ENT_NAME_D
  1391.         NICE_CAT8(temp_str,
  1392.             (float)brf_entity->evisi/
  1393.              (float)brf_entity->times_called);
  1394.         BRF_appendEndBar(temp_str);
  1395.         fprintf(brf_file,temp_str);
  1396.        } else return_value = FALSE;
  1397.     }
  1398.     return(return_value);
  1399. }
  1400.