home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: Graphics / Graphics.zip / povsrc31.zip / parse.h < prev    next >
C/C++ Source or Header  |  2001-01-23  |  24KB  |  1,095 lines

  1. /****************************************************************************
  2. *                   parse.h
  3. *
  4. *  This header file is included by all all language parsing C modules in
  5. *  POV-Ray.
  6. *
  7. *  from Persistence of Vision(tm) Ray Tracer
  8. *  Copyright 1996,1999 Persistence of Vision Team
  9. *---------------------------------------------------------------------------
  10. *  NOTICE: This source code file is provided so that users may experiment
  11. *  with enhancements to POV-Ray and to port the software to platforms other
  12. *  than those supported by the POV-Ray Team.  There are strict rules under
  13. *  which you are permitted to use this file.  The rules are in the file
  14. *  named POVLEGAL.DOC which should be distributed with this file.
  15. *  If POVLEGAL.DOC is not available or for more info please contact the POV-Ray
  16. *  Team Coordinator by email to team-coord@povray.org or visit us on the web at
  17. *  http://www.povray.org. The latest version of POV-Ray may be found at this site.
  18. *
  19. * This program is based on the popular DKB raytracer version 2.12.
  20. * DKBTrace was originally written by David K. Buck.
  21. * DKBTrace Ver 2.0-2.12 were written by David K. Buck & Aaron A. Collins.
  22. *
  23. * Modified:
  24. *   Sep 1999 - FADE_COLOUR_TOKEN added - Edward Coffey
  25. *
  26. *****************************************************************************/
  27.  
  28. #ifndef PARSE_H
  29. #define PARSE_H
  30.  
  31.  
  32. /*****************************************************************************
  33. * Global preprocessor defines
  34. ******************************************************************************/
  35.  
  36. #define MAX_STRING_INDEX 127
  37.  
  38. /* Here we create our own little language for doing the parsing.  It
  39.   makes the code easier to read. */
  40.  
  41. #define EXPECT { int Exit_Flag; Exit_Flag = FALSE; \
  42.  while (!Exit_Flag) {Get_Token();  switch (Token.Token_Id) {
  43. #define CASE(x) case x:
  44. #define CASE2(x, y) case x: case y:
  45. #define CASE3(x, y, z) case x: case y: case z:
  46. #define CASE4(w, x, y, z) case w: case x: case y: case z:
  47. #define CASE5(v, w, x, y, z) case v: case w: case x: case y: case z:
  48. #define CASE6(u, v, w, x, y, z) case u: case v: case w: case x: case y: case z:
  49. #define END_CASE break;
  50. #define EXIT Exit_Flag = TRUE;
  51. #define OTHERWISE default:
  52. #define END_EXPECT } } }
  53. #define GET(x) Get_Token(); if (Token.Token_Id != x) Parse_Error (x);
  54. #define ALLOW(x) Get_Token(); if (Token.Token_Id != x) Unget_Token();
  55. #define UNGET Unget_Token();
  56. #define CASE_FLOAT CASE2 (LEFT_PAREN_TOKEN, FLOAT_FUNCT_TOKEN)\
  57.  CASE2 (PLUS_TOKEN, DASH_TOKEN) UNGET
  58. #define CASE_VECTOR CASE2 (VECTOR_FUNCT_TOKEN,LEFT_ANGLE_TOKEN) \
  59.  CASE4 (U_TOKEN,V_TOKEN,UV_ID_TOKEN,VECTOR_4D_ID_TOKEN) CASE_FLOAT
  60. #define CASE_EXPRESS CASE_VECTOR
  61.  
  62. #define CASE_COLOUR CASE3 (COLOUR_TOKEN,COLOUR_KEY_TOKEN,COLOUR_ID_TOKEN) UNGET
  63.  
  64. #define MAX_BRACES 200
  65.  
  66. /* Token Definitions for Parser */
  67.  
  68. enum TOKEN_IDS
  69. {
  70.   ABS_TOKEN = 0,
  71.   ATAN2_TOKEN,
  72.   CEIL_TOKEN,
  73.   CLOCK_TOKEN,
  74. #ifdef HfHeightAtPatch
  75.   HF_HEIGHT_AT_TOKEN,
  76. #endif
  77.  
  78. #ifdef GetClockValuesPatch
  79.  CLOCK_ON_TOKEN,
  80.   FRAMENUMBER_TOKEN,
  81.   INITIALFRAME_TOKEN,
  82.   FINALFRAME_TOKEN,
  83.   INITIALCLOCK_TOKEN,
  84.   FINALCLOCK_TOKEN,
  85. #endif
  86.  
  87. #ifdef GetImageSizePatch
  88.   IMAGE_WIDTH_TOKEN,
  89.   IMAGE_HEIGHT_TOKEN,
  90. #endif
  91.  
  92. #ifdef UnofficialBlocking
  93.   UNOFFICIAL_VERSION_TOKEN,
  94. #endif
  95.  
  96.   COS_TOKEN,
  97.   /*dfs--moved these up from below*/
  98.   COSH_TOKEN,
  99.   SINH_TOKEN,
  100.   TANH_TOKEN,
  101.   ATANH_TOKEN,
  102.   ACOSH_TOKEN,
  103.   ASINH_TOKEN,
  104. #ifdef ComplexFunctionsPatch
  105.   /*dfs--*/
  106.   CREAL_TOKEN,
  107.   CIMAG_TOKEN,
  108.   CABS2_TOKEN,
  109.   /*--dfs*/
  110. #endif
  111.   DEGREES_TOKEN,
  112.   DIV_TOKEN,
  113.   EXP_TOKEN,
  114.   FLOAT_ID_TOKEN,
  115.   FLOAT_TOKEN,
  116.   FLOOR_TOKEN,
  117.   INT_TOKEN,
  118.   LOG_TOKEN,
  119.   MAX_TOKEN,
  120.   MIN_TOKEN,
  121.   MOD_TOKEN,
  122.   PI_TOKEN,
  123. #ifdef SignPatch /* Chris Huff jan 2001 */
  124.   SGN_TOKEN,
  125. #endif
  126. #ifdef EvalPatternPatch
  127.   EVALPAT_TOKEN, /*Chris Huff "eval_pattern function"*/
  128. #endif
  129. #if defined(Noise3DPatch) || defined(POVISO)
  130.   NOISE3D_TOKEN,
  131. #endif
  132. #ifdef CubeSqrHatPatch
  133. /*moved up to allow sqr and cube functions*/
  134.   SQR_TOKEN, /*Chris Huff "sqr function"*/
  135.   CUBE_TOKEN, /*Chris Huff "cube function"*/
  136. #endif
  137.   POW_TOKEN,
  138.   RADIANS_TOKEN,
  139.   SIN_TOKEN,
  140.   SQRT_TOKEN,
  141.   VDOT_TOKEN,
  142.   VLENGTH_TOKEN,
  143.   VERSION_TOKEN,
  144.   ON_TOKEN,
  145.   OFF_TOKEN,
  146.   TRUE_TOKEN,
  147.   FALSE_TOKEN,
  148.   YES_TOKEN,
  149.   NO_TOKEN,
  150.   ACOS_TOKEN,
  151.   ASIN_TOKEN,
  152.   TAN_TOKEN,
  153.   ASC_TOKEN,
  154.   STRLEN_TOKEN,
  155.   VAL_TOKEN,
  156.   FILE_EXISTS_TOKEN,
  157.   STRCMP_TOKEN,
  158.   SEED_TOKEN,
  159.   RAND_TOKEN,
  160. #ifdef BsplinePatch
  161.   EVAL_SPLINE_TOKEN,
  162. #endif
  163. #ifdef GetTicksPatch
  164.   START_CHRONO_TOKEN,
  165.   CURRENT_CHRONO_TOKEN,
  166.   GET_CLK_TCK_TOKEN, 
  167. #endif
  168.   CLOCK_DELTA_TOKEN,
  169.   DIMENSIONS_TOKEN,
  170.   DIMENSION_SIZE_TOKEN,
  171.   DEFINED_TOKEN,
  172.   FLOAT_FUNCT_TOKEN,
  173.  
  174. /*WARNING: All new functions returning a float value must be placed
  175.   before FLOAT_FUNCT_TOKEN or the parser won't work right. */
  176.  
  177. #ifdef VturbulencePatch
  178.   VTURBULENCE_TOKEN,   /* Added by bajcik */
  179. #endif
  180.   VAXIS_ROTATE_TOKEN,
  181.   VCROSS_TOKEN,
  182.   VECTOR_ID_TOKEN,
  183.   VNORMALIZE_TOKEN,
  184.   VROTATE_TOKEN,
  185.   X_TOKEN,
  186.   Y_TOKEN,
  187.   Z_TOKEN,
  188. #ifdef BoundPatch
  189.   MIN_EXTENT_TOKEN,
  190.   MAX_EXTENT_TOKEN,
  191. #endif
  192. #ifdef EvalPigmentPatch
  193.   EVALPIG_TOKEN, /*Chris Huff "eval_pigment function"*/
  194. #endif
  195. #ifdef TracePatch
  196.   TRACE_TOKEN,
  197. #endif
  198. #ifdef BsplinePatch
  199.   EVAL_3D_SPLINE_TOKEN,
  200. #endif
  201. #ifdef VtransformPatch
  202.   VTRANSFORM_TOKEN, /*Chris Huff "vtransform function"*/
  203.   VINV_TRANSFORM_TOKEN,/*Chris Huff "vinv_transform function"*/
  204. #endif
  205. #ifdef VWarpPatch
  206.   VWARP_TOKEN, /*Chris Huff "vwarp function"*/
  207. #endif
  208. #ifdef ComplexFunctionsPatch
  209. /*dfs -- complex functions*/
  210.     CCONJ_TOKEN,
  211.     CSQR_TOKEN,
  212.     CSQRT_TOKEN,
  213.     CMULT_TOKEN,
  214.     CDIV_TOKEN,
  215.     CEXP_TOKEN,
  216.     CLOG_TOKEN,
  217.     CPOW_TOKEN,
  218.     CSIN_TOKEN,
  219.     CCOS_TOKEN,
  220.     CTAN_TOKEN,
  221.     CSINH_TOKEN,
  222.     CCOSH_TOKEN,
  223.     CTANH_TOKEN,
  224.     CASIN_TOKEN,
  225.     CACOS_TOKEN,
  226.     CATAN_TOKEN,
  227.     CASINH_TOKEN,
  228.     CACOSH_TOKEN,
  229.     CATANH_TOKEN,
  230. /*--dfs*/
  231. #endif
  232.   VECTOR_FUNCT_TOKEN,
  233.  
  234. /*WARNING: All new functions returning a vector value must be placed
  235.   before VECTOR_FUNCT_TOKEN or the parser won't work right. */
  236.  
  237.   ALPHA_TOKEN,
  238.   BLUE_TOKEN,
  239.   FILTER_TOKEN,
  240.   TRANSMIT_TOKEN,
  241.   GREEN_TOKEN,
  242.   RED_TOKEN,
  243.   RGBF_TOKEN,
  244.   RGBFT_TOKEN,
  245.   RGBT_TOKEN,
  246.   RGB_TOKEN,
  247.   COLOUR_KEY_TOKEN,
  248.  
  249. /*WARNING: All new keywords which may preceed a COLOUR must be placed
  250.   before COLOUR_KEY_TOKEN or the parser won't work right. */
  251.  
  252.   COLOR_TOKEN,   
  253.   COLOUR_TOKEN,
  254.   COLOUR_ID_TOKEN, 
  255.  
  256. /*Note:Not 100% sure about the above tokens.  May move them up later. */
  257.  
  258.   ADAPTIVE_TOKEN,
  259.   AGATE_TOKEN,
  260.   ALL_TOKEN,
  261.   AMBIENT_TOKEN,
  262.   AMPERSAND_TOKEN,
  263.   AREA_LIGHT_TOKEN,
  264.   AT_TOKEN,
  265.   BACK_QUOTE_TOKEN,
  266.   BACK_SLASH_TOKEN,
  267.   BAR_TOKEN,
  268.   BICUBIC_PATCH_TOKEN,
  269.   BLOB_TOKEN,
  270.   BOUNDED_BY_TOKEN,
  271.   BOX_TOKEN,
  272.   BOZO_TOKEN,
  273.   BRICK_TOKEN,
  274.   BRILLIANCE_TOKEN,
  275.   BUMPS_TOKEN,
  276.   BUMP_MAP_TOKEN,
  277.   BUMP_SIZE_TOKEN,
  278.   CAMERA_ID_TOKEN,
  279.   CAMERA_TOKEN,
  280.   CHECKER_TOKEN,
  281.   CLIPPED_BY_TOKEN,
  282.   COLON_TOKEN,
  283.   COLOR_MAP_TOKEN,
  284.   COLOUR_MAP_ID_TOKEN,
  285.   COLOUR_MAP_TOKEN,
  286.   COMMA_TOKEN,
  287.   COMPONENT_TOKEN,
  288.   COMPOSITE_TOKEN,
  289.   CONE_TOKEN,
  290.   CRAND_TOKEN,
  291.   CUBIC_TOKEN,
  292. #ifdef PostProcessCurvesPatch
  293.   CURVES_TOKEN,
  294. #endif
  295.   CYLINDER_TOKEN,
  296.   DASH_TOKEN,
  297.   DECLARE_TOKEN,
  298.   DEFAULT_TOKEN,
  299.   DENTS_TOKEN,
  300.   DIFFERENCE_TOKEN,
  301.   DIFFUSE_TOKEN,
  302.   DIRECTION_TOKEN,
  303.   DISC_TOKEN,
  304.   DISTANCE_TOKEN,
  305.   DOLLAR_TOKEN,
  306.   END_OF_FILE_TOKEN,
  307.   EQUALS_TOKEN,
  308.   EXCLAMATION_TOKEN,
  309.   FALLOFF_TOKEN,
  310.   FINISH_ID_TOKEN,
  311.   FINISH_TOKEN,
  312.   FLATNESS_TOKEN,
  313.   FOG_TOKEN,
  314.   FREQUENCY_TOKEN,
  315.   GIF_TOKEN,
  316.   GRADIENT_TOKEN,
  317.   GRANITE_TOKEN,
  318.   HASH_TOKEN,
  319.   HAT_TOKEN,
  320.   HEIGHT_FIELD_TOKEN,
  321.   HEXAGON_TOKEN,
  322.   IDENTIFIER_TOKEN,
  323.   IFF_TOKEN,
  324.   IMAGE_MAP_TOKEN,
  325.   INCLUDE_TOKEN,
  326.   INTERPOLATE_TOKEN,
  327.   INTERSECTION_TOKEN,
  328.   INVERSE_TOKEN,
  329.   IOR_TOKEN,
  330.   JITTER_TOKEN,
  331.  
  332.   LAMBDA_TOKEN,
  333.   LEFT_ANGLE_TOKEN,
  334.   LEFT_CURLY_TOKEN,
  335.   LEFT_PAREN_TOKEN,
  336.   LEFT_SQUARE_TOKEN,
  337.   LEOPARD_TOKEN,
  338.   LIGHT_SOURCE_TOKEN,
  339. #ifdef PostProcessLimitBrightnessPatch    /* Chris Huff jan 2001 */
  340.   LIMIT_BRIGHTNESS_TOKEN,
  341. #endif
  342.   LOCATION_TOKEN,
  343.   LOOKS_LIKE_TOKEN,
  344.   LOOK_AT_TOKEN,
  345.   MANDEL_TOKEN,
  346.   MAP_TYPE_TOKEN,
  347.   MARBLE_TOKEN,
  348.   MATERIAL_MAP_TOKEN,
  349.   MAX_INTERSECTIONS,
  350.   MAX_TRACE_LEVEL_TOKEN,
  351.   MERGE_TOKEN,
  352.   METALLIC_TOKEN,
  353.   MORTAR_TOKEN,
  354.   NO_SHADOW_TOKEN,
  355.   OBJECT_ID_TOKEN,
  356.   OBJECT_TOKEN,
  357.   OCTAVES_TOKEN,
  358.   OMEGA_TOKEN,
  359.   ONCE_TOKEN,
  360.   ONION_TOKEN,
  361.   PERCENT_TOKEN,
  362.   PHASE_TOKEN,
  363.   PHONG_SIZE_TOKEN,
  364.   PHONG_TOKEN,
  365.   PIGMENT_ID_TOKEN,
  366.   PIGMENT_TOKEN,
  367.   PLANE_TOKEN,
  368.   PLUS_TOKEN,
  369.   POINT_AT_TOKEN,
  370.   POLY_TOKEN,
  371.   POT_TOKEN,
  372.   QUADRIC_TOKEN,
  373.   QUARTIC_TOKEN,
  374.   QUESTION_TOKEN,
  375.   QUICK_COLOR_TOKEN,
  376.   QUICK_COLOUR_TOKEN,
  377.   RADIAL_TOKEN,
  378. #ifdef PostProcessRawImagePatch     /* Chris Huff jan 2001 */
  379.   RAW_IMAGE_TOKEN,
  380. #endif
  381. #ifdef CellsPatch
  382.   CELLS_TOKEN,
  383. #endif
  384. #ifdef VanSicklePatternPatch
  385.   BLOTCHES_TOKEN,
  386.   BANDS_TOKEN,
  387.   SHEET_TOKEN,
  388. #endif
  389. #ifdef PolaricalPatch
  390.   POLARICAL_TOKEN, /* Added by bajcik */
  391. #endif  
  392.   RADIUS_TOKEN,
  393.   BRICK_SIZE_TOKEN,
  394.   REFLECTION_TOKEN,
  395.   REFRACTION_TOKEN,
  396.   RIGHT_ANGLE_TOKEN,
  397.   RIGHT_CURLY_TOKEN,
  398.   RIGHT_PAREN_TOKEN,
  399.   RIGHT_SQUARE_TOKEN,
  400.   RIGHT_TOKEN,
  401.   RIPPLES_TOKEN,
  402.   ROTATE_TOKEN,
  403.   ROUGHNESS_TOKEN,
  404.   SCALE_TOKEN,
  405.   SEMI_COLON_TOKEN,
  406.   SINGLE_QUOTE_TOKEN,
  407.   SKY_TOKEN,
  408.   SLASH_TOKEN,
  409.   SMOOTH_TOKEN,
  410.   SMOOTH_TRIANGLE_TOKEN,
  411.   SPECULAR_TOKEN,
  412.   SPHERE_TOKEN,
  413.   SPOTLIGHT_TOKEN,
  414.   SPOTTED_TOKEN,
  415.   STAR_TOKEN,
  416.   STRING_LITERAL_TOKEN,
  417.   STURM_TOKEN,
  418.   TEXTURE_ID_TOKEN,
  419.   TEXTURE_TOKEN,
  420. #ifdef InteriorTexturePatch
  421.   INTERIOR_TEXTURE_TOKEN,/*Chris Huff: Interior Texture patch*/
  422. #endif
  423. #if defined (ProximityPatch) || defined (BlobPatternPatch)
  424.   MAX_DENSITY_TOKEN, /*Chris Huff blob pattern*/
  425. #endif
  426. #if defined (ProximityPatch) 
  427.   SAMPLE_WEIGHTING_TOKEN, /*Chris Huff blob pattern*/
  428. #endif
  429. #ifdef BlobPatternPatch
  430.   BLOB_PIGMENT_TOKEN,/*Chris Huff blob pigment*/
  431.   DENSITY_FUNCTION_TOKEN,
  432.  #endif
  433.  
  434. #ifdef ProximityPatch
  435.   PROXIMITY_TOKEN,/*Chris Huff proximity pattern*/
  436.   SIDES_TOKEN,/*Chris Huff proximity pattern*/
  437.   SAMPLE_BAILOUT_TOKEN,/*Chris Huff proximity pattern*/
  438. #endif
  439.   TGA_TOKEN,
  440.   THRESHOLD_TOKEN,
  441.   TIGHTNESS_TOKEN,
  442.   TILDE_TOKEN,
  443.   TILE2_TOKEN,
  444.   TILES_TOKEN,
  445.   TNORMAL_ID_TOKEN,
  446.   TNORMAL_TOKEN,
  447.   TORUS_TOKEN,
  448.   TRACK_TOKEN,
  449.   TRANSFORM_ID_TOKEN,
  450.   TRANSFORM_TOKEN,
  451.   TRANSLATE_TOKEN,
  452.   TRIANGLE_TOKEN,
  453.   TURBULENCE_TOKEN,
  454.   TYPE_TOKEN,
  455.   UNION_TOKEN,
  456.   UP_TOKEN,
  457.   USE_COLOR_TOKEN,
  458.   USE_COLOUR_TOKEN,
  459.   USE_INDEX_TOKEN,
  460.   U_STEPS_TOKEN,
  461.   V_STEPS_TOKEN,
  462.   WATER_LEVEL_TOKEN,
  463.   WAVES_TOKEN,
  464.   WOOD_TOKEN,
  465.   WRINKLES_TOKEN,
  466.   BACKGROUND_TOKEN,
  467.   OPEN_TOKEN,
  468.   AGATE_TURB_TOKEN,
  469.   IRID_TOKEN,
  470.   THICKNESS_TOKEN,
  471.   IRID_WAVELENGTH_TOKEN,
  472.   CRACKLE_TOKEN,
  473.   ADC_BAILOUT_TOKEN,
  474.   FILL_LIGHT_TOKEN,
  475.   NUMBER_OF_WAVES_TOKEN,
  476.   FOG_TYPE_TOKEN,
  477.   FOG_ALT_TOKEN,
  478.   FOG_OFFSET_TOKEN,
  479.   TEXT_TOKEN,
  480.   TTF_TOKEN,
  481.   REL_GE_TOKEN,
  482.   REL_LE_TOKEN,
  483.   REL_NE_TOKEN,
  484.   APERTURE_TOKEN,
  485.   BLUR_SAMPLES_TOKEN,
  486.   FOCAL_POINT_TOKEN,
  487.   QUILTED_TOKEN,
  488.   CONTROL0_TOKEN,
  489.   CONTROL1_TOKEN,
  490.   RAINBOW_TOKEN,
  491.   SKYSPHERE_TOKEN,
  492.   ANGLE_TOKEN,
  493.   WIDTH_TOKEN,
  494.   ARC_ANGLE_TOKEN,
  495.   PERSPECTIVE_TOKEN,
  496.   ORTHOGRAPHIC_TOKEN,
  497.   FISHEYE_TOKEN,
  498.   ULTRA_WIDE_ANGLE_TOKEN,
  499.   OMNIMAX_TOKEN,
  500.   PANORAMIC_TOKEN,
  501.   SPHERICAL_CAMERA_TOKEN, /* MH */
  502.   V_ANGLE_TOKEN,
  503.   H_ANGLE_TOKEN,
  504.   LATHE_TOKEN,
  505.   LINEAR_SPLINE_TOKEN,
  506.   QUADRATIC_SPLINE_TOKEN,
  507.   CUBIC_SPLINE_TOKEN,
  508.   BEZIER_SPLINE_TOKEN,
  509.   POLYGON_TOKEN,
  510.   PRISM_TOKEN,
  511.   LINEAR_SWEEP_TOKEN,
  512.   CONIC_SWEEP_TOKEN,
  513.   SOR_TOKEN,
  514.   SPIRAL1_TOKEN,
  515.   SPIRAL2_TOKEN,
  516.   STRENGTH_TOKEN,
  517.   HIERARCHY_TOKEN,
  518.   RAMP_WAVE_TOKEN,
  519.   TRIANGLE_WAVE_TOKEN,
  520.   SINE_WAVE_TOKEN,
  521.   SCALLOP_WAVE_TOKEN,
  522.   PIGMENT_MAP_TOKEN,
  523.   NORMAL_MAP_TOKEN,
  524.   SLOPE_MAP_TOKEN,
  525.   TEXTURE_MAP_TOKEN,
  526.   PIGMENT_MAP_ID_TOKEN,
  527.   NORMAL_MAP_ID_TOKEN,
  528.   SLOPE_MAP_ID_TOKEN,
  529.   TEXTURE_MAP_ID_TOKEN,
  530.   SUPERELLIPSOID_TOKEN,
  531.   QUATERNION_TOKEN,
  532. #ifndef CubeSqrHatPatch
  533.   CUBE_TOKEN, /*moved up to allow cube function*/
  534. #endif
  535.   MAX_ITERATION_TOKEN,
  536.   HYPERCOMPLEX_TOKEN,
  537.   RAINBOW_ID_TOKEN,
  538.   FOG_ID_TOKEN,
  539.   SKYSPHERE_ID_TOKEN,
  540.   FADE_POWER_TOKEN,
  541.   FADE_DISTANCE_TOKEN,
  542.   FADE_COLOUR_TOKEN,
  543.   FADE_COLOR_TOKEN,
  544.   TURB_DEPTH_TOKEN,
  545.   PPM_TOKEN,
  546.   PGM_TOKEN,
  547.   AVERAGE_TOKEN,
  548.   MESH_TOKEN,
  549.   WARP_TOKEN,
  550.   OFFSET_TOKEN,
  551.   REPEAT_TOKEN,
  552.   BLACK_HOLE_TOKEN,
  553.   FLIP_TOKEN,
  554.   AMBIENT_LIGHT_TOKEN,
  555.   IF_TOKEN,
  556.   ELSE_TOKEN,
  557.   END_TOKEN,
  558.   SWITCH_TOKEN,
  559.   CASE_TOKEN,
  560.   RANGE_TOKEN,
  561.   WHILE_TOKEN,
  562.   BREAK_TOKEN,
  563.   FALLOFF_ANGLE_TOKEN,
  564.   CAUSTICS_TOKEN,
  565.   JULIA_FRACTAL_TOKEN,
  566. #ifdef TrianglulairSquarePatch 
  567.   SQUARE_TOKEN,
  568.   TRIANGULAR_TOKEN,
  569. #endif
  570. #ifndef CubeSqrHatPatch
  571.  SQR_TOKEN, /*moved up to allow sqr function*/
  572. #endif 
  573.  #ifdef TimeDatePatch
  574.  GET_DATE_TOKEN,  /*YS get date and time string*/
  575. #endif
  576.   RECIPROCAL_TOKEN,
  577.   STR_TOKEN,
  578.   CONCAT_TOKEN,
  579.   CHR_TOKEN,
  580.   SUBSTR_TOKEN,
  581.   STRING_ID_TOKEN,
  582.   WARNING_TOKEN,
  583.   ERROR_TOKEN,
  584.   RENDER_TOKEN,
  585.   STATISTICS_TOKEN,
  586.   DEBUG_TOKEN,
  587.   VARIANCE_TOKEN,
  588.   CONFIDENCE_TOKEN,
  589.   RADIOSITY_TOKEN,
  590.   BRIGHTNESS_TOKEN,
  591.   COUNT_TOKEN,
  592.   DISTANCE_MAXIMUM_TOKEN,
  593.   ERROR_BOUND_TOKEN,
  594.   GRAY_THRESHOLD_TOKEN,
  595.   LOW_ERROR_FACTOR_TOKEN,
  596.   MINIMUM_REUSE_TOKEN,
  597.   NEAREST_COUNT_TOKEN,
  598.   RECURSION_LIMIT_TOKEN,
  599.   HF_GRAY_16_TOKEN,
  600.   GLOBAL_SETTINGS_TOKEN,
  601.   ECCENTRICITY_TOKEN,
  602.   HOLLOW_TOKEN,
  603.   MEDIA_ATTENUATION_TOKEN,
  604.   MEDIA_INTERACTION_TOKEN,
  605.   MATRIX_TOKEN,
  606.   PERIOD_TOKEN,
  607.   SYS_TOKEN,
  608.   STRUPR_TOKEN,
  609.   STRLWR_TOKEN,
  610.   U_TOKEN,
  611.   V_TOKEN,
  612.   IFDEF_TOKEN,
  613.   PNG_TOKEN,
  614.   PRECISION_TOKEN,
  615.   SLICE_TOKEN,
  616.   ASSUMED_GAMMA_TOKEN,
  617.   ATAN_TOKEN,
  618. /*dfs-- moved these up*/
  619. /*
  620.   COSH_TOKEN,
  621.   SINH_TOKEN,
  622.   TANH_TOKEN,
  623.   ATANH_TOKEN,
  624.   ACOSH_TOKEN,
  625.   ASINH_TOKEN,*/
  626. /*--dfs*/
  627.   PWR_TOKEN,
  628.   T_TOKEN,
  629.   IFNDEF_TOKEN,
  630.   /* Media stuff. */
  631.   MEDIA_TOKEN,
  632.   MEDIA_ID_TOKEN,
  633.   DENSITY_ID_TOKEN,
  634.   DENSITY_TOKEN,
  635.   DENSITY_FILE_TOKEN,
  636.   RATIO_TOKEN,
  637.   SCATTERING_TOKEN,
  638.   EMISSION_TOKEN,
  639.   ABSORPTION_TOKEN,
  640.   SAMPLES_TOKEN,
  641.   INTERVALS_TOKEN,
  642.   INTERIOR_TOKEN,
  643.   INTERIOR_ID_TOKEN,
  644.   LOCAL_TOKEN,
  645.   UNDEF_TOKEN,
  646.   MACRO_TOKEN,
  647.   MACRO_ID_TOKEN, 
  648.   PARAMETER_ID_TOKEN, 
  649.   ARRAY_TOKEN, 
  650.   ARRAY_ID_TOKEN, 
  651.   EMPTY_ARRAY_TOKEN, 
  652.   FILE_ID_TOKEN,
  653.   FOPEN_TOKEN,
  654.   FCLOSE_TOKEN,
  655.   WRITE_TOKEN,
  656.   READ_TOKEN,
  657.   APPEND_TOKEN,
  658.   PLANAR_TOKEN,
  659.   SPHERICAL_TOKEN,
  660.   BOXED_TOKEN,
  661.   CYLINDRICAL_TOKEN,
  662.   CUBIC_WAVE_TOKEN,
  663.   POLY_WAVE_TOKEN,
  664.   DENSITY_MAP_TOKEN,
  665.   DENSITY_MAP_ID_TOKEN,
  666.   REFLECTION_EXPONENT_TOKEN,
  667.   DF3_TOKEN,
  668.   EXTINCTION_TOKEN,
  669.   MATERIAL_TOKEN,
  670.   MATERIAL_ID_TOKEN,
  671. #ifdef BsplinePatch
  672.     INIT_3D_SPLINE_TOKEN,
  673.     INIT_SPLINE_TOKEN,              
  674.     SPLINE_CLOSED_TOKEN,         
  675.     SPLINE_DIRECTION_TOKEN,          
  676.     SPLINE_NATURAL_TOKEN,   
  677. #endif
  678. #ifdef FontAnlignmentPatch
  679.   POSITION_TOKEN,
  680.   ALIGN_LEFT_TOKEN,
  681.   ALIGN_RIGHT_TOKEN,
  682.   ALIGN_CENTER_TOKEN,
  683. #endif
  684.  
  685.   UV_ID_TOKEN,
  686.   VECTOR_4D_ID_TOKEN,
  687. #ifdef CracklePatch 
  688.   FACETS_TOKEN,
  689.   COORDS_TOKEN,
  690.   FORM_TOKEN,
  691.   METRIC_TOKEN,
  692.   SIZE_TOKEN,
  693. #endif
  694. #if defined(CracklePatch) || defined(SolidPatternPatch)
  695.  SOLID_TOKEN,
  696. #endif
  697. #ifdef TorodialPatch
  698.   TOROIDAL_SPIRAL_TOKEN, /*Chris Huff "toroidal spiral pattern"*/
  699. #endif
  700. #ifdef ClothPatternPatch
  701.   CLOTH_TOKEN, /*Chris Huff cloth pattern*/
  702.   CLOTH2_TOKEN, /*Chris Huff cloth2 pattern*/
  703. #endif
  704.   /* NK 1998 */
  705.   UV_MAPPING_TOKEN,
  706.   UV_VECTORS_TOKEN,
  707.   MESH2_TOKEN,
  708.   VERTEX_VECTORS_TOKEN,
  709. #ifdef IsoBlobPatch
  710.   /* begin Lummox JR's added tokens */
  711.   ISOBLOB_TOKEN,
  712. /* end Lummox JR's added tokens */
  713. #endif
  714. #ifdef PatternWarpPatch
  715.   TOROIDAL_TOKEN,
  716.   ORIENTATION_TOKEN,
  717.   DIST_EXP_TOKEN,
  718.   MAJOR_RADIUS_TOKEN,
  719. #endif
  720.   NORMAL_VECTORS_TOKEN,
  721.   FACE_INDICES_TOKEN,
  722.   NORMAL_INDICES_TOKEN,
  723.   UV_INDICES_TOKEN,
  724.   TEXTURE_LIST_TOKEN,
  725.   IMAGE_PATTERN_TOKEN,
  726.   USE_ALPHA_TOKEN,
  727.   RESET_CHILDREN_TOKEN,
  728.   DOUBLE_ILLUMINATE_TOKEN,
  729.   INSIDE_VECTOR_TOKEN,
  730.   /* NK phmap */
  731.   PHOTONS_TOKEN,
  732.   STEPS_TOKEN,
  733.   PASS_THROUGH_TOKEN,
  734.   IGNORE_PHOTONS_TOKEN,
  735.   AUTOSTOP_TOKEN,
  736.   GATHER_TOKEN,
  737.   SPLIT_UNION_TOKEN,
  738.   RANGE_DIVIDER_TOKEN,
  739.   EXPAND_THRESHOLDS_TOKEN,
  740.   SPACING_TOKEN,
  741.   LOAD_FILE_TOKEN,
  742.   SAVE_FILE_TOKEN,
  743.   GLOBAL_TOKEN,
  744.   TARGET_TOKEN,
  745.   INI_OPTION_TOKEN,
  746.   /* NK ---- */
  747.   /* NK rad */
  748.   MAX_SAMPLE_TOKEN,
  749.   PRETRACE_START_TOKEN,
  750.   PRETRACE_END_TOKEN,
  751.   ALWAYS_SAMPLE_TOKEN,
  752.   /* NK ---- */
  753.   /* NK samples */
  754.   AA_LEVEL_TOKEN,
  755.   AA_THRESHOLD_TOKEN,
  756.   METHOD_TOKEN, /*MH*/
  757.   /* NK ---- */
  758.   /* NK fractals */
  759.   FRACTAL_EXTERIOR_TYPE_TOKEN,
  760.   FRACTAL_INTERIOR_TYPE_TOKEN,
  761.   JULIA_TOKEN,
  762.   JULIA3_TOKEN,
  763.   JULIA4_TOKEN,
  764.   MAGNET1J_TOKEN,
  765.   MAGNET1M_TOKEN,
  766.   MAGNET2J_TOKEN,
  767.   MAGNET2M_TOKEN,
  768.   MANDEL3_TOKEN,
  769.   MANDEL4_TOKEN,
  770.   /* NK ---- */
  771.   CREATE_TOKEN,
  772.   LABEL_TOKEN,
  773.   MODIFY_TOKEN,
  774.   DESTROY_TOKEN,
  775.   DISP_NELEMS_TOKEN,
  776.   DISPERSION_TOKEN,
  777. #ifdef RBezierPatch
  778.   BEZIER_PATCH_TOKEN,
  779.   TRIMMED_BY_TOKEN,
  780.   TRIMMED_BY_ID_TOKEN,
  781.   RATIONAL_TOKEN,
  782.   PREVIOUS_TOKEN,
  783.   FIRST_TOKEN, /* not exactly first :-)  */
  784. #endif
  785.   /* NK super */
  786.   B_SPLINE_SPHERE_SWEEP_TOKEN,
  787.   CATMULL_ROM_SPLINE_SPHERE_SWEEP_TOKEN,
  788.   DIM_TOKEN,
  789.   EQUPOTSURFACE_TOKEN,
  790.   FLOAT_W_TOKEN,
  791.   LINEAR_SPHERE_SWEEP_TOKEN,
  792. #ifdef PatternPatch
  793.   PATTERN_TOKEN,
  794. #endif
  795.   ACCURACY_TOKEN,  /*is now part of MegaPov (normal)*/
  796. #ifdef POVISO
  797.   MAX_GRADIENT_TOKEN,
  798.   MAX_TRACE_TOKEN,
  799.   FUNC_TOKEN,
  800.   FUNCTION_TOKEN,
  801.   NOEVAL_TOKEN,
  802.   EVAL_TOKEN,
  803.   LIBNAME_TOKEN,
  804.   LIBRARY_TOKEN,
  805.   FUNC_ID_TOKEN,
  806.   R_TOKEN,
  807.   S_TOKEN,
  808.   LN_TOKEN,
  809.   CUB_TOKEN,
  810.   FUNC3D_TOKEN,
  811.   ALL_INTERSECTIONS_TOKEN,
  812.   PARAMETRIC_TOKEN,
  813.  
  814.   ISOSURFACE_TOKEN,
  815.   
  816.   CLOSE_TOKEN,
  817.   SIGN_TOKEN,
  818.   MAX_GRAD_TOKEN,
  819.   PRECOMPUTE_TOKEN,
  820.   CONTAINED_BY_TOKEN,
  821. #endif
  822.   REFLECTION_BLUR_TOKEN,
  823.   REFLECTION_BLUR_MAX_TOKEN,
  824.   REFLECTION_BLUR_MAX_ADC_TOKEN,
  825.   REFLECTION_FALLOFF_TOKEN,
  826.   REFLECTION_MAX_TOKEN,
  827.   REFLECT_METALLIC_TOKEN,
  828.   REFLECTION_MIN_TOKEN,
  829.   REFLECTION_SAMPLES_TOKEN,
  830.   REFLECTION_TYPE_TOKEN,
  831.   SLOPE_TOKEN,
  832.   SPHERE_SWEEP_DEPTH_TOLERANCE_TOKEN,
  833.   SPHERE_SWEEP_TOKEN,
  834. #ifdef SplinePatch
  835.   SPLINE_ID_TOKEN,
  836.   SPLINE_TOKEN,
  837. #endif
  838. #ifdef CircularOrientAreaLightPatch 
  839.    AREA_LIGHT_ORIENT_TOKEN,    /* Orient token for area lights [ENB 9/97]  */
  840.    AREA_LIGHT_CIRCULAR_TOKEN,  /* Circular token for area lights [ENB 9/97]  */
  841. #endif
  842.  #ifdef NoImageNoReflectionPatch
  843.   NO_IMAGE_TOKEN,       /* Object-ray options [ENB 9/97]  */
  844.   NO_REFLECTION_TOKEN,  /* Object-ray options [ENB 9/97]  */
  845. #endif
  846. #ifdef ColorTrianglePatch
  847.   SMOOTH_COLOR_TRIANGLE_TOKEN,  /* [AP and NK] */
  848. #endif
  849. #ifdef MotionBlurPatch
  850.   MOTION_BLUR_TOKEN,
  851.   MOTION_BLUR2_TOKEN,
  852. #endif
  853. #ifdef BlinnPatch
  854.   BLINN_TOKEN,
  855. #endif
  856. #ifdef NormalBugFix
  857.   NO_BUMP_SCALE_TOKEN,
  858. #endif
  859. #ifdef DisplaceWarpPatch
  860.   DISPLACE_TOKEN,
  861. #endif
  862. #ifdef PostProcessPatch
  863. #ifdef PostProcessKeepDataPatch
  864.   KEEP_DATA_FILE_TOKEN,
  865. #endif
  866.   POST_PROCESS_TOKEN,
  867.   OVERWRITE_FILE_TOKEN,
  868.   FOCAL_BLUR_TOKEN,
  869.   DEPTH_TOKEN,
  870.   SOFT_GLOW_TOKEN,
  871. #ifdef PostProcessColorMatrixPatch
  872.   COLOR_MATRIX_TOKEN,
  873. #endif  
  874. #ifdef PostProcessBlurMatrixPatch
  875.   CONVOLUTION_MATRIX_TOKEN,
  876. #endif
  877. #ifdef PostProcessStepsPatch
  878.   POSTERIZE_TOKEN,
  879. #endif
  880. #ifdef PostProcessFindEdgesPatch
  881.   FIND_EDGES_TOKEN,
  882. #endif  
  883. #ifdef PostProcessInvertPatch
  884.   INVERT_TOKEN,
  885. #endif  
  886. #ifdef PostProcessClipColorsPatch
  887.   CLIP_COLORS_TOKEN,
  888. #endif  
  889.  #ifdef PostProcessMaxPatch
  890.   POST_MAX_TOKEN,
  891. #endif  
  892.  #ifdef PostProcessMinPatch
  893.   POST_MIN_TOKEN,
  894. #endif  
  895.  #ifdef PostProcessSubtractPatch
  896.  SUBTRACT_TOKEN,
  897. #endif  
  898.  #ifdef PostProcessDividePatch
  899.  DIVIDE_TOKEN,
  900. #endif  
  901.  #ifdef PostProcessMultiplyPatch
  902.  MULTIPLY_TOKEN,
  903. #endif  
  904. #ifdef PostProcessAddPatch
  905.   ADD_TOKEN,
  906. #endif  
  907. #ifdef PostProcessExponentPatch
  908.   EXPONENT_TOKEN,
  909. #endif  
  910. #ifdef PostProcessStarsPatch
  911.   STARS_TOKEN,
  912. #endif  
  913.  #ifdef PostProcessPatternBlurPatch
  914.  PATTERN_BLUR_TOKEN,
  915. #endif  
  916. #ifdef PostCartoonPatch
  917.   CARTOON_TOKEN,
  918. #endif
  919. #ifdef AtanWavePatch
  920.   ATAN_WAVE_TOKEN,
  921. #endif
  922. #ifdef SplineWavePatch
  923.   SPLINE_WAVE_TOKEN,
  924. #endif
  925. #endif
  926. #ifdef MultiTextureCsgPatch
  927.   CUTAWAY_TEXTURES_TOKEN,
  928. #endif
  929. #ifdef SetPatch
  930.   SET_TOKEN,
  931. #endif
  932.  
  933.  
  934. #ifdef GlowPatch
  935.   GLOW_TOKEN,
  936. #endif
  937. #ifdef PigmentPatternPatch
  938.   PIGMENT_PATTERN_TOKEN,
  939. #endif
  940.   CONSERVE_ENERGY_TOKEN,
  941.   STRING_TOKEN,
  942.   SYSTEM_TOKEN,
  943.   VECTOR_TOKEN,
  944.   LIGHT_GROUP_TOKEN,
  945.   GROUPS_TOKEN,
  946.   PARALLEL_TOKEN,
  947.   PROJECTED_THROUGH_TOKEN,
  948.   STRING_ENCODING_TOKEN,
  949.   /* NK ---- */
  950. #ifdef NoisePigmentPatch
  951.   NOISE_PIGMENT_TOKEN,
  952. #endif 
  953. #ifdef SampleSpacingPatch
  954.     SAMPLE_SPACING_TOKEN,    /*JB*/
  955.     SAMPLE_JITTER_TOKEN,        /*JB*/
  956. #endif
  957.  
  958. #ifdef EmissionMethodPatch
  959.   EMISSION_TYPE_TOKEN,        /* JB */
  960.   EMISSION_EXTINCTION_TOKEN,    /* JB */
  961. #endif
  962.  
  963.  
  964.   LAST_TOKEN
  965. };
  966.  
  967. #ifdef BsplinePatch
  968.    /* some stuff for the splines */
  969.    #define NATURAL_SPLINE   0
  970.    #define CLOSED_SPLINE    1
  971.    #define DIRECTION_SPLINE 2
  972. #endif
  973.  
  974. /*****************************************************************************
  975. * Global typedefs
  976. ******************************************************************************/
  977. #ifdef BsplinePatch
  978.    typedef struct Knot_Struct KNOT;
  979.   struct Knot_Struct
  980.  {
  981.    DBL  t,y;
  982.  };
  983.   typedef struct Knot3D_Struct KNOT3D;
  984.   struct Knot3D_Struct
  985.  {
  986.   DBL  t;
  987.   VECTOR y;
  988. };
  989.  
  990. typedef struct Coeff_3d_Struct COEFF_3D;
  991.  
  992. struct Coeff_3d_Struct
  993. {
  994.   DBL   c[3][4];
  995. };
  996.  
  997. typedef struct Coeff_1d_Struct COEFF_1D;
  998.  
  999. struct Coeff_1d_Struct
  1000. {
  1001.   DBL c[4];
  1002. };
  1003.  
  1004.  
  1005. typedef struct Spline_3d_Struct SPLINE_3D;
  1006.  
  1007. struct Spline_3d_Struct
  1008. {
  1009.   char     *name;
  1010.   int      type;
  1011.   int      res;
  1012.   KNOT3D   *Knots;
  1013.   COEFF_3D *Coeffs;
  1014.   void     *next;
  1015. };
  1016.  
  1017. typedef struct Spline_Struct SPLINE;
  1018.  
  1019. struct Spline_Struct
  1020. {
  1021.   char     *name;
  1022.   int      type;
  1023.   int      res;
  1024.   KNOT     *Knots;
  1025.   COEFF_1D *Coeffs;
  1026.   void     *next;
  1027. };
  1028.  
  1029.   #endif
  1030.  
  1031.  
  1032. /*****************************************************************************
  1033. * Global variables
  1034. ******************************************************************************/
  1035.  
  1036. extern short Not_In_Default;
  1037. extern short Ok_To_Declare;
  1038. extern short LValue_Ok;
  1039.  
  1040.  
  1041. #ifdef BsplinePatch
  1042.    extern SPLINE   *The_Splines;
  1043.    extern SPLINE_3D *The_3D_Splines;
  1044. #endif
  1045.  
  1046. /*****************************************************************************
  1047. * Global functions
  1048. ******************************************************************************/
  1049.  
  1050.  #ifdef TransformPatch /* Chris Huff april 2000 */
  1051.   TRANSFORM *Parse_Transform (void);/*Chris Huff transform patch*/
  1052. #endif
  1053. void Parse_Error (TOKEN Token_Id);
  1054. void Parse_Error_Str (char *str);
  1055. void Parse_Begin (void);
  1056. void Parse_End (void);
  1057. void Parse_Comma (void);
  1058. void Parse_Semi_Colon (void);
  1059. /* NK persist */
  1060. void Destroy_Frame (int destroyAllObjects);
  1061. void Parse (void);
  1062. void MAError (char *str, size_t size);
  1063. void Warn_State (TOKEN Token_Id, TOKEN Type);
  1064. void Warn (int Level, char *str);
  1065. void Only_In (char *s1,char *s2);
  1066. void Not_With (char *s1,char *s2);
  1067. void Warn_Compat (int f);
  1068. void Link_Textures (TEXTURE **Old_Texture, TEXTURE *New_Texture);
  1069.  
  1070. void Parse_Object_Mods (OBJECT *Object);
  1071. OBJECT *Parse_Object (void);
  1072. void Parse_Default (void);
  1073. #ifdef SetPatch
  1074.     void Parse_Declare(int Modify_Only);
  1075. #else
  1076.     void Parse_Declare (void);
  1077. #endif
  1078. void Parse_Matrix (MATRIX Matrix);
  1079. void Destroy_Ident_Data (void *Data, int Type);
  1080. int Parse_RValue (int Previous, int *NumberPtr, void **DataPtr, int ParFlag, int SemiFlag);
  1081. char *Get_Token_String (TOKEN Token_Id);
  1082. void Test_Redefine(TOKEN Previous, TOKEN *NumberPtr, void *Data);
  1083. #ifdef BsplinePatch
  1084.   void Parse_Init_Spline (void);
  1085.   void Parse_Init_3D_Spline (void);
  1086. #endif
  1087.  
  1088. #ifdef BlobPatternPatch
  1089. OBJECT *Parse_Blob (void);
  1090. #endif
  1091.  
  1092. #endif
  1093.   
  1094.  
  1095.