Subversion Repositories planix.SVN

Rev

Rev 2 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
/* Copyright (C) 1989, 1995, 1998, 2001 Aladdin Enterprises.  All rights reserved.
2
 
3
  This software is provided AS-IS with no warranty, either express or
4
  implied.
5
 
6
  This software is distributed under license and may not be copied,
7
  modified or distributed except as expressly authorized under the terms
8
  of the license contained in the file LICENSE in this distribution.
9
 
10
  For more information about licensing, please refer to
11
  http://www.ghostscript.com/licensing/. For information on
12
  commercial licensing, go to http://www.artifex.com/licensing/ or
13
  contact Artifex Software, Inc., 101 Lucas Valley Road #110,
14
  San Rafael, CA  94903, U.S.A., +1(415)492-9861.
15
*/
16
 
17
/* $Id: gstypes.h,v 1.7 2005/09/05 13:58:55 leonardo Exp $ */
18
/* Miscellaneous common types for Ghostscript library */
19
 
20
#ifndef gstypes_INCLUDED
21
#  define gstypes_INCLUDED
22
 
23
/*
24
 * Define a type used internally for unique IDs of various kinds
25
 * (primarily, but not exclusively, character and halftone bitmaps).
26
 * These IDs bear no relation to any other ID space; we generate them all
27
 * ourselves.
28
 */
29
typedef ulong gs_id;
30
 
31
#define gs_no_id 0L
32
 
33
/*
34
 * Define a sensible representation of a string, as opposed to
35
 * the C char * type (which can't store arbitrary data, represent
36
 * substrings, or perform concatenation without destroying aliases).
37
 *
38
 * If a byte * pointer P is the result of allocating a string of size N,
39
 * then any substring of [P .. P+N) is a valid gs_string, i.e., any
40
 * gs_string S is valid (until the string is deallocated) if it has P <=
41
 * S.data and S.data + S.size <= P + N.
42
 */
43
#define GS_STRING_COMMON\
44
    byte *data;\
45
    uint size
46
typedef struct gs_string_s {
47
    GS_STRING_COMMON;
48
} gs_string;
49
#define GS_CONST_STRING_COMMON\
50
    const byte *data;\
51
    uint size
52
typedef struct gs_const_string_s {
53
    GS_CONST_STRING_COMMON;
54
} gs_const_string;
55
typedef struct gs_param_string_s {
56
    GS_CONST_STRING_COMMON;
57
    bool persistent;
58
} gs_param_string;
59
 
60
/*
61
 * Since strings are allocated differently from ordinary objects, define a
62
 * structure that can reference either a string or a byte object.  If bytes
63
 * == 0, data and size are the same as for a gs_string.  If bytes != 0, data
64
 * and size point within the object addressed by bytes (i.e., the bytes
65
 * member plays the role of P in the consistency condition given for
66
 * gs_string above).  Thus in either case, code can process the string using
67
 * only data and size: bytes is only relevant for garbage collection.
68
 *
69
 * Note: for garbage collection purposes, the string_common members must
70
 * come first.
71
 */
72
typedef struct gs_bytestring_s {
73
    GS_STRING_COMMON;
74
    byte *bytes;		/* see above */
75
} gs_bytestring;
76
typedef struct gs_const_bytestring_s {
77
    GS_CONST_STRING_COMMON;
78
    const byte *bytes;		/* see above */
79
} gs_const_bytestring;
80
 
81
#define gs_bytestring_from_string(pbs, dat, siz)\
82
  ((pbs)->data = (dat), (pbs)->size = (siz), (pbs)->bytes = 0)
83
#define gs_bytestring_from_bytes(pbs, byts, offset, siz)\
84
  ((pbs)->data = ((pbs)->bytes = (byts)) + (offset), (pbs)->size = (siz))
85
 
86
/*
87
 * Define types for Cartesian points.
88
 */
89
typedef struct gs_point_s {
90
    double x, y;
91
} gs_point;
92
typedef struct gs_int_point_s {
93
    int x, y;
94
} gs_int_point;
95
 
96
/*
97
 * Define a scale for oversampling.  Clients don't actually use this,
98
 * but this seemed like the handiest place for it.
99
 */
100
typedef struct gs_log2_scale_point_s {
101
    int x, y;
102
} gs_log2_scale_point;
103
 
104
/*
105
 * Define types for rectangles in the Cartesian plane.
106
 * Note that rectangles are half-open, i.e.: their width is
107
 * q.x-p.x and their height is q.y-p.y; they include the points
108
 * (x,y) such that p.x<=x<q.x and p.y<=y<q.y.
109
 */
110
typedef struct gs_rect_s {
111
    gs_point p, q;		/* origin point, corner point */
112
} gs_rect;
113
typedef struct gs_int_rect_s {
114
    gs_int_point p, q;
115
} gs_int_rect;
116
 
117
/*
118
 * Define a type for a floating-point parameter range.  Note that unlike
119
 * the intervals for gs_rect and gs_int_rect, these intervals are closed
120
 * (i.e., they represent rmin <= x <= rmax, not rmin <= x < rmax).
121
 */
122
typedef struct gs_range_s {
123
    float rmin, rmax;
124
} gs_range_t;
125
 
126
#endif /* gstypes_INCLUDED */