Simple test for asyncio.library.
[AROS-Contrib.git] / gfx / povray / parse.h
blob10934aae2f9af515141362347d51f45eb7755885
1 /****************************************************************************
2 * parse.h
4 * This header file is included by all all language parsing C modules in
5 * POV-Ray.
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.
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.
23 *****************************************************************************/
25 #ifndef PARSE_H
26 #define PARSE_H
29 /*****************************************************************************
30 * Global preprocessor defines
31 ******************************************************************************/
33 #define MAX_STRING_INDEX 127
35 /* Here we create our own little language for doing the parsing. It
36 makes the code easier to read. */
38 #define EXPECT { int Exit_Flag; Exit_Flag = FALSE; \
39 while (!Exit_Flag) {Get_Token(); switch (Token.Token_Id) {
40 #define CASE(x) case x:
41 #define CASE2(x, y) case x: case y:
42 #define CASE3(x, y, z) case x: case y: case z:
43 #define CASE4(w, x, y, z) case w: case x: case y: case z:
44 #define CASE5(v, w, x, y, z) case v: case w: case x: case y: case z:
45 #define CASE6(u, v, w, x, y, z) case u: case v: case w: case x: case y: case z:
46 #define END_CASE break;
47 #define EXIT Exit_Flag = TRUE;
48 #define OTHERWISE default:
49 #define END_EXPECT } } }
50 #define GET(x) Get_Token(); if (Token.Token_Id != x) Parse_Error (x);
51 #define ALLOW(x) Get_Token(); if (Token.Token_Id != x) Unget_Token();
52 #define UNGET Unget_Token();
53 #define CASE_FLOAT CASE2 (LEFT_PAREN_TOKEN, FLOAT_FUNCT_TOKEN)\
54 CASE2 (PLUS_TOKEN, DASH_TOKEN) UNGET
55 #define CASE_VECTOR CASE2 (VECTOR_FUNCT_TOKEN,LEFT_ANGLE_TOKEN) \
56 CASE4 (U_TOKEN,V_TOKEN,UV_ID_TOKEN,VECTOR_4D_ID_TOKEN) CASE_FLOAT
57 #define CASE_EXPRESS CASE_VECTOR
59 #define CASE_COLOUR CASE3 (COLOUR_TOKEN,COLOUR_KEY_TOKEN,COLOUR_ID_TOKEN) UNGET
61 #define MAX_BRACES 200
63 /* Token Definitions for Parser */
65 enum TOKEN_IDS
67 ABS_TOKEN = 0,
68 ATAN2_TOKEN,
69 CEIL_TOKEN,
70 CLOCK_TOKEN,
71 COS_TOKEN,
72 DEGREES_TOKEN,
73 DIV_TOKEN,
74 EXP_TOKEN,
75 FLOAT_ID_TOKEN,
76 FLOAT_TOKEN,
77 FLOOR_TOKEN,
78 INT_TOKEN,
79 LOG_TOKEN,
80 MAX_TOKEN,
81 MIN_TOKEN,
82 MOD_TOKEN,
83 PI_TOKEN,
84 POW_TOKEN,
85 RADIANS_TOKEN,
86 SIN_TOKEN,
87 SQRT_TOKEN,
88 VDOT_TOKEN,
89 VLENGTH_TOKEN,
90 VERSION_TOKEN,
91 ON_TOKEN,
92 OFF_TOKEN,
93 TRUE_TOKEN,
94 FALSE_TOKEN,
95 YES_TOKEN,
96 NO_TOKEN,
97 ACOS_TOKEN,
98 ASIN_TOKEN,
99 TAN_TOKEN,
100 ASC_TOKEN,
101 STRLEN_TOKEN,
102 VAL_TOKEN,
103 FILE_EXISTS_TOKEN,
104 STRCMP_TOKEN,
105 SEED_TOKEN,
106 RAND_TOKEN,
107 CLOCK_DELTA_TOKEN,
108 DIMENSIONS_TOKEN,
109 DIMENSION_SIZE_TOKEN,
110 DEFINED_TOKEN,
111 FLOAT_FUNCT_TOKEN,
113 /*WARNING: All new functions returning a float value must be placed
114 before FLOAT_FUNCT_TOKEN or the parser won't work right. */
116 VAXIS_ROTATE_TOKEN,
117 VCROSS_TOKEN,
118 VECTOR_ID_TOKEN,
119 VNORMALIZE_TOKEN,
120 VROTATE_TOKEN,
121 X_TOKEN,
122 Y_TOKEN,
123 Z_TOKEN,
124 VECTOR_FUNCT_TOKEN,
126 /*WARNING: All new functions returning a vector value must be placed
127 before VECTOR_FUNCT_TOKEN or the parser won't work right. */
129 ALPHA_TOKEN,
130 BLUE_TOKEN,
131 FILTER_TOKEN,
132 TRANSMIT_TOKEN,
133 GREEN_TOKEN,
134 RED_TOKEN,
135 RGBF_TOKEN,
136 RGBFT_TOKEN,
137 RGBT_TOKEN,
138 RGB_TOKEN,
139 COLOUR_KEY_TOKEN,
141 /*WARNING: All new keywords which may preceed a COLOUR must be placed
142 before COLOUR_KEY_TOKEN or the parser won't work right. */
144 COLOR_TOKEN,
145 COLOUR_TOKEN,
146 COLOUR_ID_TOKEN,
148 /*Note:Not 100% sure about the above tokens. May move them up later. */
150 ADAPTIVE_TOKEN,
151 AGATE_TOKEN,
152 ALL_TOKEN,
153 AMBIENT_TOKEN,
154 AMPERSAND_TOKEN,
155 AREA_LIGHT_TOKEN,
156 AT_TOKEN,
157 BACK_QUOTE_TOKEN,
158 BACK_SLASH_TOKEN,
159 BAR_TOKEN,
160 BICUBIC_PATCH_TOKEN,
161 BLOB_TOKEN,
162 BOUNDED_BY_TOKEN,
163 BOX_TOKEN,
164 BOZO_TOKEN,
165 BRICK_TOKEN,
166 BRILLIANCE_TOKEN,
167 BUMPS_TOKEN,
168 BUMP_MAP_TOKEN,
169 BUMP_SIZE_TOKEN,
170 CAMERA_ID_TOKEN,
171 CAMERA_TOKEN,
172 CHECKER_TOKEN,
173 CLIPPED_BY_TOKEN,
174 COLON_TOKEN,
175 COLOR_MAP_TOKEN,
176 COLOUR_MAP_ID_TOKEN,
177 COLOUR_MAP_TOKEN,
178 COMMA_TOKEN,
179 COMPONENT_TOKEN,
180 COMPOSITE_TOKEN,
181 CONE_TOKEN,
182 CRAND_TOKEN,
183 CUBIC_TOKEN,
184 CYLINDER_TOKEN,
185 DASH_TOKEN,
186 DECLARE_TOKEN,
187 DEFAULT_TOKEN,
188 DENTS_TOKEN,
189 DIFFERENCE_TOKEN,
190 DIFFUSE_TOKEN,
191 DIRECTION_TOKEN,
192 DISC_TOKEN,
193 DISTANCE_TOKEN,
194 DOLLAR_TOKEN,
195 END_OF_FILE_TOKEN,
196 EQUALS_TOKEN,
197 EXCLAMATION_TOKEN,
198 FALLOFF_TOKEN,
199 FINISH_ID_TOKEN,
200 FINISH_TOKEN,
201 FLATNESS_TOKEN,
202 FOG_TOKEN,
203 FREQUENCY_TOKEN,
204 GIF_TOKEN,
205 GRADIENT_TOKEN,
206 GRANITE_TOKEN,
207 HASH_TOKEN,
208 HAT_TOKEN,
209 HEIGHT_FIELD_TOKEN,
210 HEXAGON_TOKEN,
211 IDENTIFIER_TOKEN,
212 IFF_TOKEN,
213 IMAGE_MAP_TOKEN,
214 INCLUDE_TOKEN,
215 INTERPOLATE_TOKEN,
216 INTERSECTION_TOKEN,
217 INVERSE_TOKEN,
218 IOR_TOKEN,
219 JITTER_TOKEN,
220 LAMBDA_TOKEN,
221 LEFT_ANGLE_TOKEN,
222 LEFT_CURLY_TOKEN,
223 LEFT_PAREN_TOKEN,
224 LEFT_SQUARE_TOKEN,
225 LEOPARD_TOKEN,
226 LIGHT_SOURCE_TOKEN,
227 LOCATION_TOKEN,
228 LOOKS_LIKE_TOKEN,
229 LOOK_AT_TOKEN,
230 MANDEL_TOKEN,
231 MAP_TYPE_TOKEN,
232 MARBLE_TOKEN,
233 MATERIAL_MAP_TOKEN,
234 MAX_INTERSECTIONS,
235 MAX_TRACE_LEVEL_TOKEN,
236 MERGE_TOKEN,
237 METALLIC_TOKEN,
238 MORTAR_TOKEN,
239 NO_SHADOW_TOKEN,
240 OBJECT_ID_TOKEN,
241 OBJECT_TOKEN,
242 OCTAVES_TOKEN,
243 OMEGA_TOKEN,
244 ONCE_TOKEN,
245 ONION_TOKEN,
246 PERCENT_TOKEN,
247 PHASE_TOKEN,
248 PHONG_SIZE_TOKEN,
249 PHONG_TOKEN,
250 PIGMENT_ID_TOKEN,
251 PIGMENT_TOKEN,
252 PLANE_TOKEN,
253 PLUS_TOKEN,
254 POINT_AT_TOKEN,
255 POLY_TOKEN,
256 POT_TOKEN,
257 QUADRIC_TOKEN,
258 QUARTIC_TOKEN,
259 QUESTION_TOKEN,
260 QUICK_COLOR_TOKEN,
261 QUICK_COLOUR_TOKEN,
262 RADIAL_TOKEN,
263 RADIUS_TOKEN,
264 BRICK_SIZE_TOKEN,
265 REFLECTION_TOKEN,
266 REFRACTION_TOKEN,
267 RIGHT_ANGLE_TOKEN,
268 RIGHT_CURLY_TOKEN,
269 RIGHT_PAREN_TOKEN,
270 RIGHT_SQUARE_TOKEN,
271 RIGHT_TOKEN,
272 RIPPLES_TOKEN,
273 ROTATE_TOKEN,
274 ROUGHNESS_TOKEN,
275 SCALE_TOKEN,
276 SEMI_COLON_TOKEN,
277 SINGLE_QUOTE_TOKEN,
278 SKY_TOKEN,
279 SLASH_TOKEN,
280 SMOOTH_TOKEN,
281 SMOOTH_TRIANGLE_TOKEN,
282 SPECULAR_TOKEN,
283 SPHERE_TOKEN,
284 SPOTLIGHT_TOKEN,
285 SPOTTED_TOKEN,
286 STAR_TOKEN,
287 STRING_LITERAL_TOKEN,
288 STURM_TOKEN,
289 TEXTURE_ID_TOKEN,
290 TEXTURE_TOKEN,
291 TGA_TOKEN,
292 THRESHOLD_TOKEN,
293 TIGHTNESS_TOKEN,
294 TILDE_TOKEN,
295 TILE2_TOKEN,
296 TILES_TOKEN,
297 TNORMAL_ID_TOKEN,
298 TNORMAL_TOKEN,
299 TORUS_TOKEN,
300 TRACK_TOKEN,
301 TRANSFORM_ID_TOKEN,
302 TRANSFORM_TOKEN,
303 TRANSLATE_TOKEN,
304 TRIANGLE_TOKEN,
305 TURBULENCE_TOKEN,
306 TYPE_TOKEN,
307 UNION_TOKEN,
308 UP_TOKEN,
309 USE_COLOR_TOKEN,
310 USE_COLOUR_TOKEN,
311 USE_INDEX_TOKEN,
312 U_STEPS_TOKEN,
313 V_STEPS_TOKEN,
314 WATER_LEVEL_TOKEN,
315 WAVES_TOKEN,
316 WOOD_TOKEN,
317 WRINKLES_TOKEN,
318 BACKGROUND_TOKEN,
319 OPEN_TOKEN,
320 AGATE_TURB_TOKEN,
321 IRID_TOKEN,
322 THICKNESS_TOKEN,
323 IRID_WAVELENGTH_TOKEN,
324 CRACKLE_TOKEN,
325 ADC_BAILOUT_TOKEN,
326 FILL_LIGHT_TOKEN,
327 NUMBER_OF_WAVES_TOKEN,
328 FOG_TYPE_TOKEN,
329 FOG_ALT_TOKEN,
330 FOG_OFFSET_TOKEN,
331 TEXT_TOKEN,
332 TTF_TOKEN,
333 REL_GE_TOKEN,
334 REL_LE_TOKEN,
335 REL_NE_TOKEN,
336 APERTURE_TOKEN,
337 BLUR_SAMPLES_TOKEN,
338 FOCAL_POINT_TOKEN,
339 QUILTED_TOKEN,
340 CONTROL0_TOKEN,
341 CONTROL1_TOKEN,
342 RAINBOW_TOKEN,
343 SKYSPHERE_TOKEN,
344 ANGLE_TOKEN,
345 WIDTH_TOKEN,
346 ARC_ANGLE_TOKEN,
347 PERSPECTIVE_TOKEN,
348 ORTHOGRAPHIC_TOKEN,
349 FISHEYE_TOKEN,
350 ULTRA_WIDE_ANGLE_TOKEN,
351 OMNIMAX_TOKEN,
352 PANORAMIC_TOKEN,
353 LATHE_TOKEN,
354 LINEAR_SPLINE_TOKEN,
355 QUADRATIC_SPLINE_TOKEN,
356 CUBIC_SPLINE_TOKEN,
357 BEZIER_SPLINE_TOKEN,
358 POLYGON_TOKEN,
359 PRISM_TOKEN,
360 LINEAR_SWEEP_TOKEN,
361 CONIC_SWEEP_TOKEN,
362 SOR_TOKEN,
363 SPIRAL1_TOKEN,
364 SPIRAL2_TOKEN,
365 STRENGTH_TOKEN,
366 HIERARCHY_TOKEN,
367 RAMP_WAVE_TOKEN,
368 TRIANGLE_WAVE_TOKEN,
369 SINE_WAVE_TOKEN,
370 SCALLOP_WAVE_TOKEN,
371 PIGMENT_MAP_TOKEN,
372 NORMAL_MAP_TOKEN,
373 SLOPE_MAP_TOKEN,
374 TEXTURE_MAP_TOKEN,
375 PIGMENT_MAP_ID_TOKEN,
376 NORMAL_MAP_ID_TOKEN,
377 SLOPE_MAP_ID_TOKEN,
378 TEXTURE_MAP_ID_TOKEN,
379 SUPERELLIPSOID_TOKEN,
380 QUATERNION_TOKEN,
381 CUBE_TOKEN,
382 MAX_ITERATION_TOKEN,
383 HYPERCOMPLEX_TOKEN,
384 RAINBOW_ID_TOKEN,
385 FOG_ID_TOKEN,
386 SKYSPHERE_ID_TOKEN,
387 FADE_POWER_TOKEN,
388 FADE_DISTANCE_TOKEN,
389 TURB_DEPTH_TOKEN,
390 PPM_TOKEN,
391 PGM_TOKEN,
392 AVERAGE_TOKEN,
393 MESH_TOKEN,
394 WARP_TOKEN,
395 OFFSET_TOKEN,
396 REPEAT_TOKEN,
397 BLACK_HOLE_TOKEN,
398 FLIP_TOKEN,
399 AMBIENT_LIGHT_TOKEN,
400 IF_TOKEN,
401 ELSE_TOKEN,
402 END_TOKEN,
403 SWITCH_TOKEN,
404 CASE_TOKEN,
405 RANGE_TOKEN,
406 WHILE_TOKEN,
407 BREAK_TOKEN,
408 FALLOFF_ANGLE_TOKEN,
409 CAUSTICS_TOKEN,
410 JULIA_FRACTAL_TOKEN,
411 SQR_TOKEN,
412 RECIPROCAL_TOKEN,
413 STR_TOKEN,
414 CONCAT_TOKEN,
415 CHR_TOKEN,
416 SUBSTR_TOKEN,
417 STRING_ID_TOKEN,
418 WARNING_TOKEN,
419 ERROR_TOKEN,
420 RENDER_TOKEN,
421 STATISTICS_TOKEN,
422 DEBUG_TOKEN,
423 VARIANCE_TOKEN,
424 CONFIDENCE_TOKEN,
425 RADIOSITY_TOKEN,
426 BRIGHTNESS_TOKEN,
427 COUNT_TOKEN,
428 DISTANCE_MAXIMUM_TOKEN,
429 ERROR_BOUND_TOKEN,
430 GRAY_THRESHOLD_TOKEN,
431 LOW_ERROR_FACTOR_TOKEN,
432 MINIMUM_REUSE_TOKEN,
433 NEAREST_COUNT_TOKEN,
434 RECURSION_LIMIT_TOKEN,
435 HF_GRAY_16_TOKEN,
436 GLOBAL_SETTINGS_TOKEN,
437 ECCENTRICITY_TOKEN,
438 HOLLOW_TOKEN,
439 MEDIA_ATTENUATION_TOKEN,
440 MEDIA_INTERACTION_TOKEN,
441 MATRIX_TOKEN,
442 PERIOD_TOKEN,
443 SYS_TOKEN,
444 STRUPR_TOKEN,
445 STRLWR_TOKEN,
446 U_TOKEN,
447 V_TOKEN,
448 IFDEF_TOKEN,
449 PNG_TOKEN,
450 PRECISION_TOKEN,
451 SLICE_TOKEN,
452 ASSUMED_GAMMA_TOKEN,
453 ATAN_TOKEN,
454 COSH_TOKEN,
455 SINH_TOKEN,
456 TANH_TOKEN,
457 ATANH_TOKEN,
458 ACOSH_TOKEN,
459 ASINH_TOKEN,
460 PWR_TOKEN,
461 T_TOKEN,
462 IFNDEF_TOKEN,
463 /* Media stuff. */
464 MEDIA_TOKEN,
465 MEDIA_ID_TOKEN,
466 DENSITY_ID_TOKEN,
467 DENSITY_TOKEN,
468 DENSITY_FILE_TOKEN,
469 RATIO_TOKEN,
470 SCATTERING_TOKEN,
471 EMISSION_TOKEN,
472 ABSORPTION_TOKEN,
473 SAMPLES_TOKEN,
474 INTERVALS_TOKEN,
475 INTERIOR_TOKEN,
476 INTERIOR_ID_TOKEN,
477 LOCAL_TOKEN,
478 UNDEF_TOKEN,
479 MACRO_TOKEN,
480 MACRO_ID_TOKEN,
481 PARAMETER_ID_TOKEN,
482 ARRAY_TOKEN,
483 ARRAY_ID_TOKEN,
484 EMPTY_ARRAY_TOKEN,
485 FILE_ID_TOKEN,
486 FOPEN_TOKEN,
487 FCLOSE_TOKEN,
488 WRITE_TOKEN,
489 READ_TOKEN,
490 APPEND_TOKEN,
491 PLANAR_TOKEN,
492 SPHERICAL_TOKEN,
493 BOXED_TOKEN,
494 CYLINDRICAL_TOKEN,
495 CUBIC_WAVE_TOKEN,
496 POLY_WAVE_TOKEN,
497 DENSITY_MAP_TOKEN,
498 DENSITY_MAP_ID_TOKEN,
499 REFLECTION_EXPONENT_TOKEN,
500 DF3_TOKEN,
501 EXTINCTION_TOKEN,
502 MATERIAL_TOKEN,
503 MATERIAL_ID_TOKEN,
504 UV_ID_TOKEN,
505 VECTOR_4D_ID_TOKEN,
506 LAST_TOKEN
510 /*****************************************************************************
511 * Global typedefs
512 ******************************************************************************/
515 /*****************************************************************************
516 * Global variables
517 ******************************************************************************/
519 extern short Not_In_Default;
520 extern short Ok_To_Declare;
521 extern short LValue_Ok;
524 /*****************************************************************************
525 * Global functions
526 ******************************************************************************/
528 void Parse_Error (TOKEN Token_Id);
529 void Parse_Error_Str (char *str);
530 void Parse_Begin (void);
531 void Parse_End (void);
532 void Parse_Comma (void);
533 void Parse_Semi_Colon (void);
534 void Destroy_Frame (void);
535 void Parse (void);
536 void MAError (char *str, size_t size);
537 void Warn_State (TOKEN Token_Id, TOKEN Type);
538 void Warn (DBL Level, char *str);
539 void Only_In (char *s1,char *s2);
540 void Not_With (char *s1,char *s2);
541 void Warn_Compat (int f);
542 void Link_Textures (TEXTURE **Old_Texture, TEXTURE *New_Texture);
544 void Parse_Object_Mods (OBJECT *Object);
545 OBJECT *Parse_Object (void);
546 void Parse_Default (void);
547 void Parse_Declare (void);
548 void Parse_Matrix (MATRIX Matrix);
549 void Destroy_Ident_Data (void *Data, int Type);
550 int Parse_RValue (int Previous, int *NumberPtr, void **DataPtr, int ParFlag, int SemiFlag);
551 char *Get_Token_String (TOKEN Token_Id);
552 void Test_Redefine(TOKEN Previous, TOKEN *NumberPtr, void *Data);
554 #endif