diff options
author | Taru Karttunen <taruti@taruti.net> | 2011-03-30 15:46:40 +0300 |
---|---|---|
committer | Taru Karttunen <taruti@taruti.net> | 2011-03-30 15:46:40 +0300 |
commit | e5888a1ffdae813d7575f5fb02275c6bb07e5199 (patch) | |
tree | d8d51eac403f07814b9e936eed0c9a79195e2450 /sys/src/cmd/gs/src/gdevcgml.h |
Import sources from 2011-03-30 iso image
Diffstat (limited to 'sys/src/cmd/gs/src/gdevcgml.h')
-rwxr-xr-x | sys/src/cmd/gs/src/gdevcgml.h | 408 |
1 files changed, 408 insertions, 0 deletions
diff --git a/sys/src/cmd/gs/src/gdevcgml.h b/sys/src/cmd/gs/src/gdevcgml.h new file mode 100755 index 000000000..e863db881 --- /dev/null +++ b/sys/src/cmd/gs/src/gdevcgml.h @@ -0,0 +1,408 @@ +/* Copyright (C) 1995, 1996 Aladdin Enterprises. All rights reserved. + + This software is provided AS-IS with no warranty, either express or + implied. + + This software is distributed under license and may not be copied, + modified or distributed except as expressly authorized under the terms + of the license contained in the file LICENSE in this distribution. + + For more information about licensing, please refer to + http://www.ghostscript.com/licensing/. For information on + commercial licensing, go to http://www.artifex.com/licensing/ or + contact Artifex Software, Inc., 101 Lucas Valley Road #110, + San Rafael, CA 94903, U.S.A., +1(415)492-9861. +*/ + +/* $Id: gdevcgml.h,v 1.5 2002/06/16 07:25:26 lpd Exp $ */ +/* Interface definitions for CGM-writing library */ + +#ifndef gdevcgml_INCLUDED +# define gdevcgml_INCLUDED + +/* The names in the following follow the CGM standard exactly, */ +/* except that we have substituted the American spellings of */ +/* color (colour) and center (centre). */ + +/* ================ Types ================ */ + +/* Define the abstract type for the CGM writer state. */ +typedef struct cgm_state_s cgm_state; + +/* Define the type for the allocator used by the CGM writer. */ +typedef struct cgm_allocator_s { + void *private_data; + void *(*alloc) (void *, uint); + void (*free) (void *, void *); +} cgm_allocator; + +/* Define types for CGM coordinates. */ +typedef int cgm_int; +typedef double cgm_real; +typedef union cgm_vdc_s { + cgm_int integer; + cgm_real real; +} cgm_vdc; +typedef struct cgm_int_point_s { + cgm_int x, y; +} cgm_int_point; +typedef struct cgm_real_point_s { + cgm_real x, y; +} cgm_real_point; +typedef union cgm_point_s { + cgm_int_point integer; + cgm_real_point real; +} cgm_point; + +/* Define types for colors. */ +typedef struct cgm_rgb_s { + cgm_int r, g, b; +} cgm_rgb; +typedef union cgm_color_s { + cgm_int index; + cgm_rgb rgb; +} cgm_color; + +/* + * Define other types used in CGM elements or API calls. + * If cgm_xxx is an enumerated type, let xxx' be xxx with any of the + * following words dropped: mode, specification, type; then the values + * of the enumerated type are named cgm_xxx'_yyy. + */ +typedef enum { + cgm_vdc_integer = 0, + cgm_vdc_real +} cgm_vdc_type; +typedef struct cgm_string_s { + const char *chars; + uint length; +} cgm_string; +typedef enum { + cgm_scaling_abstract = 0, + cgm_scaling_metric +} cgm_scaling_mode; +typedef enum { + cgm_color_selection_indexed = 0, + cgm_color_selection_direct +} cgm_color_selection_mode; +typedef enum { + cgm_line_marker_absolute = 0, + cgm_line_marker_scaled +} cgm_line_marker_specification_mode; +typedef cgm_line_marker_specification_mode + cgm_line_width_specification_mode, cgm_marker_size_specification_mode, + cgm_edge_width_specification_mode; +typedef union cgm_line_marker_extent_s { + cgm_vdc absolute; + cgm_real scaled; +} cgm_line_marker_extent; +typedef cgm_line_marker_extent + cgm_line_width, cgm_marker_size, cgm_edge_width; +typedef enum { + cgm_transparency_off = 0, + cgm_transparency_on +} cgm_transparency; +typedef enum { + cgm_clip_off = 0, + cgm_clip_on +} cgm_clip_indicator; +typedef struct cgm_precision_s { + enum { + cgm_representation_floating, cgm_representation_fixed + } representation; + int exponent_or_whole_width; + int fraction_width; +} cgm_precision; +typedef enum { + cgm_line_solid = 1, + cgm_line_dash, + cgm_line_dot, + cgm_line_dash_dot, + cgm_line_dash_dot_dot +} cgm_line_type; +typedef enum { + cgm_marker_dot = 1, + cgm_marker_plus, + cgm_marker_asterisk, + cgm_marker_circle, + cgm_marker_cross +} cgm_marker_type; +typedef enum { + cgm_text_precision_string = 0, + cgm_text_precision_character, + cgm_text_precision_stroke +} cgm_text_precision; +typedef enum { + cgm_text_path_right = 0, + cgm_text_path_left, + cgm_text_path_up, + cgm_text_path_down +} cgm_text_path; +typedef enum { + cgm_text_horizontal_normal = 0, + cgm_text_horizontal_left, + cgm_text_horizontal_center, + cgm_text_horizontal_right, + cgm_text_horizontal_continuous +} cgm_text_alignment_horizontal; +typedef enum { + cgm_text_vertical_normal = 0, + cgm_text_vertical_top, + cgm_text_vertical_cap, + cgm_text_vertical_half, + cgm_text_vertical_base, + cgm_text_vertical_bottom, + cgm_text_vertical_continuous +} cgm_text_alignment_vertical; +typedef enum { + cgm_interior_style_hollow = 0, + cgm_interior_style_solid, + cgm_interior_style_pattern, + cgm_interior_style_hatch, + cgm_interior_style_empty +} cgm_interior_style; +typedef enum { + cgm_hatch_horizontal = 1, + cgm_hatch_vertical, + cgm_hatch_positive_slope, + cgm_hatch_negative_slope, + cgm_hatch_combined_v_h_slant, + cgm_hatch_combined_l_r_slant +} cgm_hatch_index; +typedef enum { + cgm_arc_closure_pie = 0, + cgm_arc_closure_chord +} cgm_arc_closure; +typedef enum { + cgm_edge_out_invisible = 0, + cgm_edge_out_visible, + cgm_edge_out_close_invisible, + cgm_edge_out_close_visible +} cgm_edge_out; +typedef struct cgm_polygon_edge_s { + cgm_point vertex; + cgm_edge_out edge_out; +} cgm_polygon_edge; +typedef enum { + cgm_cell_mode_run_length = 0, + cgm_cell_mode_packed +} cgm_cell_representation_mode; +typedef enum { + cgm_edge_solid = 1, + cgm_edge_dash, + cgm_edge_dot, + cgm_edge_dash_dot, + cgm_edge_dash_dot_dot +} cgm_edge_type; +typedef enum { + cgm_aspect_source_individual = 0, + cgm_aspect_source_bundled +} cgm_aspect_source; +typedef enum { + cgm_aspect_line_type = 0, + cgm_aspect_line_width, + cgm_aspect_line_color, + cgm_aspect_marker_type, + cgm_aspect_marker_size, + cgm_aspect_marker_color, + cgm_aspect_text_font_index, + cgm_aspect_text_precision, + cgm_aspect_character_expansion_factor, + cgm_aspect_character_spacing, + cgm_aspect_text_color, + cgm_aspect_interior_style, + cgm_aspect_fill_color, + cgm_aspect_hatch_index, + cgm_aspect_pattern_index, + cgm_aspect_edge_type, + cgm_aspect_edge_width, + cgm_aspect_edge_color +} cgm_aspect_type; +typedef struct cgm_aspect_source_flag_s { + cgm_aspect_type type; + cgm_aspect_source source; +} cgm_aspect_source_flag; + +/* ================ API ================ */ + +typedef enum { + cgm_result_ok = 0, + cgm_result_wrong_state = -1, + cgm_result_out_of_range = -2, + cgm_result_io_error = -3, + cgm_result_out_of_memory = -4 +} cgm_result; + +/* ---------------- Initialize/terminate ---------------- */ + +cgm_state *cgm_initialize(FILE *, const cgm_allocator *); +cgm_result cgm_terminate(cgm_state *); + +/* ---------------- Metafile elements ---------------- */ + +typedef struct cgm_metafile_elements_s { + cgm_int metafile_version; + cgm_string metafile_description; + cgm_vdc_type vdc_type; + int integer_precision; + cgm_precision real_precision; + int index_precision; + int color_precision; + int color_index_precision; + cgm_int maximum_color_index; + cgm_color color_value_extent[2]; + const int *metafile_element_list; + int metafile_element_list_count; + const cgm_string *font_list; + int font_list_count; + /* character_set_list */ + /* character_coding_announcer */ +} cgm_metafile_elements; + +#define cgm_set_METAFILE_VERSION (1L<<0) +#define cgm_set_METAFILE_DESCRIPTION (1L<<1) +#define cgm_set_VDC_TYPE (1L<<2) +#define cgm_set_INTEGER_PRECISION (1L<<3) +#define cgm_set_REAL_PRECISION (1L<<4) +#define cgm_set_INDEX_PRECISION (1L<<5) +#define cgm_set_COLOR_PRECISION (1L<<6) +#define cgm_set_COLOR_INDEX_PRECISION (1L<<7) +#define cgm_set_MAXIMUM_COLOR_INDEX (1L<<8) +#define cgm_set_COLOR_VALUE_EXTENT (1L<<9) +#define cgm_set_METAFILE_ELEMENT_LIST (1L<<10) +#define cgm_set_FONT_LIST (1L<<11) +#define cgm_set_CHARACTER_SET_LIST (1L<<12) +#define cgm_set_CHARACTER_CODING_ANNOUNCER (1L<<13) + +cgm_result + cgm_BEGIN_METAFILE(cgm_state *, const char *, uint), + cgm_set_metafile_elements(cgm_state *, + const cgm_metafile_elements *, long), + cgm_END_METAFILE(cgm_state *); + +/* ---------------- Picture elements ---------------- */ + +typedef struct cgm_picture_elements_s { + cgm_scaling_mode scaling_mode; + cgm_real scale_factor; + cgm_color_selection_mode color_selection_mode; + cgm_line_width_specification_mode line_width_specification_mode; + cgm_marker_size_specification_mode marker_size_specification_mode; + cgm_edge_width_specification_mode edge_width_specification_mode; + cgm_point vdc_extent[2]; + cgm_color background_color; +} cgm_picture_elements; + +#define cgm_set_SCALING_MODE (1L<<0) +#define cgm_set_COLOR_SELECTION_MODE (1L<<1) +#define cgm_set_LINE_WIDTH_SPECIFICATION_MODE (1L<<2) +#define cgm_set_MARKER_SIZE_SPECIFICATION_MODE (1L<<3) +#define cgm_set_EDGE_WIDTH_SPECIFICATION_MODE (1L<<4) +#define cgm_set_VDC_EXTENT (1L<<5) +#define cgm_set_BACKGROUND_COLOR (1L<<6) + +cgm_result + cgm_BEGIN_PICTURE(cgm_state *, const char *, uint), + cgm_set_picture_elements(cgm_state *, + const cgm_picture_elements *, long), + cgm_BEGIN_PICTURE_BODY(cgm_state *), + cgm_END_PICTURE(cgm_state *); + +/* ---------------- Control elements ---------------- */ + +cgm_result + cgm_VDC_INTEGER_PRECISION(cgm_state *, int), + cgm_VDC_REAL_PRECISION(cgm_state *, const cgm_precision *), + cgm_AUXILIARY_COLOR(cgm_state *, const cgm_color *), + cgm_TRANSPARENCY(cgm_state *, cgm_transparency), + cgm_CLIP_RECTANGLE(cgm_state *, const cgm_point[2]), + cgm_CLIP_INDICATOR(cgm_state *, cgm_clip_indicator); + +/* ---------------- Graphical primitive elements ---------------- */ + +cgm_result + cgm_POLYLINE(cgm_state *, const cgm_point *, int), + cgm_DISJOINT_POLYLINE(cgm_state *, const cgm_point *, int), + cgm_POLYMARKER(cgm_state *, const cgm_point *, int), + cgm_TEXT(cgm_state *, const cgm_point *, bool, const char *, uint), + cgm_RESTRICTED_TEXT(cgm_state *, const cgm_vdc *, const cgm_vdc *, + const cgm_point *, bool, const char *, uint), + cgm_APPEND_TEXT(cgm_state *, bool, const char *, uint), + cgm_POLYGON(cgm_state *, const cgm_point *, int), + cgm_POLYGON_SET(cgm_state *, const cgm_polygon_edge *, int), + cgm_CELL_ARRAY(cgm_state *, const cgm_point * /*[3] */ , cgm_int, + cgm_int, cgm_int, cgm_cell_representation_mode, + const byte *, uint, uint), + cgm_RECTANGLE(cgm_state *, const cgm_point *, const cgm_point *), + cgm_CIRCLE(cgm_state *, const cgm_point *, const cgm_vdc *), + cgm_CIRCULAR_ARC_3_POINT(cgm_state *, const cgm_point *, + const cgm_point *, const cgm_point *), + cgm_CIRCULAR_ARC_3_POINT_CLOSE(cgm_state *, const cgm_point *, + const cgm_point *, + const cgm_point *, cgm_arc_closure), + cgm_CIRCULAR_ARC_CENTER(cgm_state *, const cgm_point *, + const cgm_vdc *, const cgm_vdc *, + const cgm_vdc *, const cgm_vdc *, + const cgm_vdc *), + cgm_CIRCULAR_ARC_CENTER_CLOSE(cgm_state *, const cgm_point *, + const cgm_vdc *, const cgm_vdc *, + const cgm_vdc *, const cgm_vdc *, + const cgm_vdc *, cgm_arc_closure), + cgm_ELLIPSE(cgm_state *, const cgm_point *, const cgm_point *, + const cgm_point *), + cgm_ELLIPTICAL_ARC(cgm_state *, const cgm_point *, + const cgm_point *, const cgm_point *, + const cgm_vdc *, const cgm_vdc *, + const cgm_vdc *, const cgm_vdc *), + cgm_ELLIPTICAL_ARC_CLOSE(cgm_state *, const cgm_point *, + const cgm_point *, const cgm_point *, + const cgm_vdc *, const cgm_vdc *, + const cgm_vdc *, const cgm_vdc *, + cgm_arc_closure); + +/* ---------------- Attribute elements ---------------- */ + +cgm_result + cgm_LINE_BUNDLE_INDEX(cgm_state *, cgm_int), + cgm_LINE_TYPE(cgm_state *, cgm_line_type), + cgm_LINE_WIDTH(cgm_state *, const cgm_line_width *), + cgm_LINE_COLOR(cgm_state *, const cgm_color *), + cgm_MARKER_BUNDLE_INDEX(cgm_state *, cgm_int), + cgm_MARKER_TYPE(cgm_state *, cgm_marker_type), + cgm_MARKER_SIZE(cgm_state *, const cgm_marker_size *), + cgm_MARKER_COLOR(cgm_state *, const cgm_color *), + cgm_TEXT_BUNDLE_INDEX(cgm_state *, cgm_int), + cgm_TEXT_FONT_INDEX(cgm_state *, cgm_int), + cgm_TEXT_PRECISION(cgm_state *, cgm_text_precision), + cgm_CHARACTER_EXPANSION_FACTOR(cgm_state *, cgm_real), + cgm_CHARACTER_SPACING(cgm_state *, cgm_real), + cgm_TEXT_COLOR(cgm_state *, const cgm_color *), + cgm_CHARACTER_HEIGHT(cgm_state *, const cgm_vdc *), + cgm_CHARACTER_ORIENTATION(cgm_state *, const cgm_vdc *, + const cgm_vdc *, const cgm_vdc *, + const cgm_vdc *), + cgm_TEXT_PATH(cgm_state *, cgm_text_path), + cgm_TEXT_ALIGNMENT(cgm_state *, cgm_text_alignment_horizontal, + cgm_text_alignment_vertical, cgm_real, cgm_real), + cgm_CHARACTER_SET_INDEX(cgm_state *, cgm_int), + /* The following should be cgm_ALTERNATE_..., but the VAX DEC C */ + /* compiler gives an error for names longer than 31 characters. */ + cgm_ALT_CHARACTER_SET_INDEX(cgm_state *, cgm_int), + cgm_FILL_BUNDLE_INDEX(cgm_state *, cgm_int), + cgm_INTERIOR_STYLE(cgm_state *, cgm_interior_style), + cgm_FILL_COLOR(cgm_state *, const cgm_color *), + cgm_HATCH_INDEX(cgm_state *, cgm_hatch_index), + cgm_PATTERN_INDEX(cgm_state *, cgm_int), + cgm_EDGE_BUNDLE_INDEX(cgm_state *, cgm_int), + cgm_EDGE_TYPE(cgm_state *, cgm_edge_type), + cgm_EDGE_WIDTH(cgm_state *, const cgm_edge_width *), + cgm_EDGE_COLOR(cgm_state *, const cgm_color *), + cgm_EDGE_VISIBILITY(cgm_state *, bool), + cgm_FILL_REFERENCE_POINT(cgm_state *, const cgm_point *), + /* PATTERN_TABLE */ + cgm_PATTERN_SIZE(cgm_state *, const cgm_vdc *, const cgm_vdc *, + const cgm_vdc *, const cgm_vdc *), + cgm_COLOR_TABLE(cgm_state *, cgm_int, const cgm_color *, int), + cgm_ASPECT_SOURCE_FLAGS(cgm_state *, const cgm_aspect_source_flag *, int); + +#endif /* gdevcgml_INCLUDED */ |