1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
|
/* Copyright (C) 1989, 1995, 1998 Aladdin Enterprises. All rights reserved.
This software is licensed to a single customer by Artifex Software Inc.
under the terms of a specific OEM agreement.
*/
/*$RCSfile$ $Revision$ */
/* Miscellaneous common types for Ghostscript library */
#ifndef gstypes_INCLUDED
# define gstypes_INCLUDED
/*
* Define a type used internally for unique IDs of various kinds
* (primarily, but not exclusively, character and halftone bitmaps).
* These IDs bear no relation to any other ID space; we generate them all
* ourselves.
*/
typedef ulong gs_id;
#define gs_no_id 0L
/*
* Define a sensible representation of a string, as opposed to
* the C char * type (which can't store arbitrary data, represent
* substrings, or perform concatenation without destroying aliases).
*/
#define GS_STRING_COMMON\
byte *data;\
uint size
typedef struct gs_string_s {
GS_STRING_COMMON;
} gs_string;
#define GS_CONST_STRING_COMMON\
const byte *data;\
uint size
typedef struct gs_const_string_s {
GS_CONST_STRING_COMMON;
} gs_const_string;
/*
* Since strings are allocated differently from ordinary objects, define a
* structure that can reference either a string (if bytes == 0) or a byte
* object (if bytes != 0, in which case data+size point within the object).
*
* Note: for garbage collection purposes, the string_common members must
* come first.
*/
typedef struct gs_bytestring_s {
GS_STRING_COMMON;
byte *bytes; /* see above */
} gs_bytestring;
typedef struct gs_const_bytestring_s {
GS_CONST_STRING_COMMON;
const byte *bytes; /* see above */
} gs_const_bytestring;
#define gs_bytestring_from_string(pbs, dat, siz)\
((pbs)->data = (dat), (pbs)->size = (siz), (pbs)->bytes = 0)
#define gs_bytestring_from_bytes(pbs, byts, offset, siz)\
((pbs)->data = ((pbs)->bytes = (byts)) + (offset), (pbs)->size = (siz))
/*
* Define types for Cartesian points.
*/
typedef struct gs_point_s {
double x, y;
} gs_point;
typedef struct gs_int_point_s {
int x, y;
} gs_int_point;
/*
* Define a scale for oversampling. Clients don't actually use this,
* but this seemed like the handiest place for it.
*/
typedef struct gs_log2_scale_point_s {
int x, y;
} gs_log2_scale_point;
/*
* Define types for rectangles in the Cartesian plane.
* Note that rectangles are half-open, i.e.: their width is
* q.x-p.x and their height is q.y-p.y; they include the points
* (x,y) such that p.x<=x<q.x and p.y<=y<q.y.
*/
typedef struct gs_rect_s {
gs_point p, q; /* origin point, corner point */
} gs_rect;
typedef struct gs_int_rect_s {
gs_int_point p, q;
} gs_int_rect;
#endif /* gstypes_INCLUDED */
|