7 double atan2(double y
, double x
);
10 double tanh(double x
);
12 double expm1(double x
);
14 double log10(double x
);
15 double log1p(double x
);
16 double pow(double x
, double y
);
17 double sqrt(double x
);
18 double cbrt(double x
);
19 double ceil(double x
);
20 double floor(double x
);
21 double fabs(double x
);
22 double frexp(double value
, int *eptr
);
23 double ldexp(double value
, int exp
);
24 double modf(double value
, double *iptr
);
26 double erfc(double x
);
27 double atof(const char *nptr
);
28 double hypot(double x
, double y
);
29 double lgamma(double x
);
32 double jn(int n
, double x
);
35 double yn(int n
, double x
);
36 extern struct _iobuf
{
44 typedef unsigned long size_t;
45 typedef char *va_list;
46 struct _iobuf
*fopen(const char *filename
, const char *type
);
47 struct _iobuf
*freopen(const char *filename
, const char *type
, struct _iobuf
*stream
);
48 struct _iobuf
*fdopen(int fildes
, const char *type
);
49 struct _iobuf
*popen(const char *command
, const char *type
);
50 int pclose(struct _iobuf
*stream
);
51 int fflush(struct _iobuf
*stream
);
52 int fclose(struct _iobuf
*stream
);
53 int remove(const char *path
);
54 int rename(const char *from
, const char *to
);
55 struct _iobuf
*tmpfile(void);
56 char *tmpnam(char *s
);
57 int setvbuf(struct _iobuf
*iop
, char *buf
, int type
, size_t size
);
58 int setbuf(struct _iobuf
*stream
, char *buf
);
59 int setbuffer(struct _iobuf
*stream
, char *buf
, size_t size
);
60 int setlinebuf(struct _iobuf
*stream
);
61 int fprintf(struct _iobuf
*stream
, const char *format
, ...);
62 int printf(const char *format
, ...);
63 char *sprintf(char *s
, const char *format
, ...);
64 int vfprintf(struct _iobuf
*stream
, const char *format
, va_list arg
);
65 int vprintf(const char *format
, va_list arg
);
66 int vsprintf(char *s
, const char *format
, va_list arg
);
67 int fscanf(struct _iobuf
*stream
, const char *format
, ...);
68 int scanf(const char *format
, ...);
69 int sscanf(char *s
, const char *format
, ...);
70 int fgetc(struct _iobuf
*stream
);
71 int getw(struct _iobuf
*stream
);
72 char *fgets(char *s
, int n
, struct _iobuf
*stream
);
74 int fputc(int c
, struct _iobuf
*stream
);
75 int putw(int w
, struct _iobuf
*stream
);
76 int fputs(const char *s
, struct _iobuf
*stream
);
77 int puts(const char *s
);
78 int ungetc(int c
, struct _iobuf
*stream
);
79 int fread(void *ptr
, size_t size
, size_t count
, struct _iobuf
*iop
);
80 int fwrite(const void *ptr
, size_t size
, size_t count
, struct _iobuf
*iop
);
81 int fseek(struct _iobuf
*stream
, long offset
, int ptrname
);
82 long ftell(struct _iobuf
*stream
);
83 void rewind(struct _iobuf
*stream
);
84 int fgetpos(struct _iobuf
*stream
, long *pos
);
85 int fsetpos(struct _iobuf
*stream
, const long *pos
);
86 void perror(const char *s
);
87 typedef unsigned char byte
;
88 typedef unsigned char uchar
;
89 typedef unsigned short ushort
;
90 typedef unsigned int uint
;
91 typedef unsigned long ulong
;
92 typedef unsigned char u_char
;
93 typedef unsigned short u_short
;
94 typedef unsigned int u_int
;
95 typedef unsigned long u_long
;
96 typedef unsigned short ushort_
;
97 typedef struct _physadr
{ int r
[1]; } *physadr
;
98 typedef struct label_t
{
101 typedef struct _quad
{ long val
[2]; } quad
;
102 typedef long daddr_t
;
103 typedef char * caddr_t
;
104 typedef u_long ino_t
;
105 typedef long swblk_t
;
109 typedef u_short uid_t
;
110 typedef u_short gid_t
;
111 typedef signed char prio_t
;
112 typedef long fd_mask
;
113 typedef struct fd_set
{
114 fd_mask fds_bits
[(((256 )+(( (sizeof(fd_mask
) * 8 ) )-1))/( (sizeof(fd_mask
) * 8 ) )) ];
116 typedef struct qhdr
{
117 struct qhdr
*link
, *rlink
;
119 typedef char *ptr_ord_t
;
120 typedef double floatp
;
121 typedef char *(*proc_alloc_t
)(unsigned num_elements
, unsigned element_size
, const char *client_name
);
122 typedef void (*proc_free_t
)(char *data
, unsigned num_elements
, unsigned element_size
, const char *client_name
);
123 extern struct _iobuf
*gs_out
;
124 typedef struct gs_point_s
{
127 typedef struct gs_int_point_s
{
130 typedef struct gs_rect_s
{
133 typedef struct gs_int_rect_s
{
136 typedef struct gs_state_s gs_state
;
141 char *gs_malloc(uint
, uint
, const char * );
142 void gs_free(char *, uint
, uint
, const char * );
143 extern char gs_debug
[128];
144 extern int gs_log_error(int, const char *, int );
146 typedef struct gs_fixed_point_s
{
149 typedef struct gs_fixed_rect_s
{
152 typedef struct gs_matrix_s
{
153 long _xx
; float xx
; long _xy
; float xy
; long _yx
; float yx
; long _yy
; float yy
; long _tx
; float tx
; long _ty
; float ty
;
155 void gs_make_identity(gs_matrix
* );
156 int gs_make_translation(floatp
, floatp
, gs_matrix
* ),
157 gs_make_scaling(floatp
, floatp
, gs_matrix
* ),
158 gs_make_rotation(floatp
, gs_matrix
* );
159 int gs_matrix_multiply(const gs_matrix
*, const gs_matrix
*, gs_matrix
* ),
160 gs_matrix_invert(const gs_matrix
*, gs_matrix
* ),
161 gs_matrix_rotate(const gs_matrix
*, floatp
, gs_matrix
* );
162 int gs_point_transform(floatp
, floatp
, const gs_matrix
*, gs_point
* ),
163 gs_point_transform_inverse(floatp
, floatp
, const gs_matrix
*, gs_point
* ),
164 gs_distance_transform(floatp
, floatp
, const gs_matrix
*, gs_point
* ),
165 gs_distance_transform_inverse(floatp
, floatp
, const gs_matrix
*, gs_point
* ),
166 gs_bbox_transform_inverse(gs_rect
*, gs_matrix
*, gs_rect
* );
167 typedef struct gs_matrix_fixed_s
{
168 long _xx
; float xx
; long _xy
; float xy
; long _yx
; float yx
; long _yy
; float yy
; long _tx
; float tx
; long _ty
; float ty
;
169 fixed tx_fixed
, ty_fixed
;
171 extern void gs_update_matrix_fixed(gs_matrix_fixed
* );
172 int gs_point_transform2fixed(gs_matrix_fixed
*, floatp
, floatp
, gs_fixed_point
* ),
173 gs_distance_transform2fixed(gs_matrix_fixed
*, floatp
, floatp
, gs_fixed_point
* );
192 gs_state
*gs_state_alloc(proc_alloc_t
, proc_free_t
);
193 int gs_state_free(gs_state
* );
194 int gs_gsave(gs_state
* ),
195 gs_grestore(gs_state
* ),
196 gs_grestoreall(gs_state
* );
197 gs_state
*gs_gstate(gs_state
* );
198 int gs_currentgstate(gs_state
* , const gs_state
* ),
199 gs_setgstate(gs_state
* , const gs_state
* );
200 gs_state
*gs_state_swap_saved(gs_state
*, gs_state
* );
201 void gs_state_swap(gs_state
*, gs_state
* );
202 int gs_initgraphics(gs_state
* );
203 typedef struct gx_device_s gx_device
;
204 int gs_flushpage(gs_state
* );
205 int gs_copypage(gs_state
* );
206 int gs_output_page(gs_state
*, int, int );
207 int gs_copyscanlines(gx_device
*, int, byte
*, uint
, int *, uint
* );
208 gx_device
* gs_getdevice(int );
209 int gs_copydevice(gx_device
**, gx_device
*, proc_alloc_t
);
210 int gs_makeimagedevice(gx_device
**, gs_matrix
*, uint
, uint
, byte
*, int, proc_alloc_t
);
211 void gs_nulldevice(gs_state
* );
212 int gs_setdevice(gs_state
*, gx_device
* );
213 gx_device
* gs_currentdevice(gs_state
* );
214 const char * gs_devicename(gx_device
* );
215 void gs_deviceinitialmatrix(gx_device
*, gs_matrix
* );
216 int gs_closedevice(gx_device
* );
217 int gs_setlinewidth(gs_state
*, floatp
);
218 float gs_currentlinewidth(const gs_state
* );
219 int gs_setlinecap(gs_state
*, gs_line_cap
);
220 gs_line_cap
gs_currentlinecap(const gs_state
* );
221 int gs_setlinejoin(gs_state
*, gs_line_join
);
222 gs_line_join
gs_currentlinejoin(const gs_state
* );
223 int gs_setmiterlimit(gs_state
*, floatp
);
224 float gs_currentmiterlimit(const gs_state
* );
225 int gs_setdash(gs_state
*, const float *, uint
, floatp
);
226 uint
gs_currentdash_length(const gs_state
* );
227 int gs_currentdash_pattern(const gs_state
*, float * );
228 float gs_currentdash_offset(const gs_state
* );
229 int gs_setflat(gs_state
*, floatp
);
230 float gs_currentflat(const gs_state
* );
231 int gs_setstrokeadjust(gs_state
*, int );
232 int gs_currentstrokeadjust(const gs_state
* );
234 gs_color_space_DeviceGray
= 0,
235 gs_color_space_DeviceRGB
,
236 gs_color_space_DeviceCMYK
238 typedef struct gs_color_s gs_color
;
239 extern const uint gs_color_sizeof
;
240 int gs_setgray(gs_state
*, floatp
);
241 float gs_currentgray(gs_state
* );
242 int gs_sethsbcolor(gs_state
*, floatp
, floatp
, floatp
),
243 gs_currenthsbcolor(gs_state
*, float [3] ),
244 gs_setrgbcolor(gs_state
*, floatp
, floatp
, floatp
),
245 gs_currentrgbcolor(gs_state
*, float [3] );
246 int gs_currentcolorspace(gs_state
*, gs_color_space
* );
247 typedef float (*gs_transfer_proc
)(gs_state
*, floatp
);
248 int gs_settransfer(gs_state
*, gs_transfer_proc
),
249 gs_settransfer_remap(gs_state
*, gs_transfer_proc
, int );
250 gs_transfer_proc
gs_currenttransfer(gs_state
* );
251 int gs_setcolortransfer(gs_state
*, gs_transfer_proc
,
252 gs_transfer_proc
, gs_transfer_proc
,
254 gs_setcolortransfer_remap(gs_state
*, gs_transfer_proc
,
255 gs_transfer_proc
, gs_transfer_proc
,
256 gs_transfer_proc
, int );
257 void gs_currentcolortransfer(gs_state
*, gs_transfer_proc
[4] );
258 int gs_setscreen(gs_state
*, floatp
, floatp
, float (*)(floatp
, floatp
) );
259 int gs_currentscreen(gs_state
*, float *, float *, float (**)(floatp
, floatp
) );
260 int gs_sethalftonephase(gs_state
*, int, int );
261 int gs_currenthalftonephase(gs_state
*, gs_int_point
* );
262 typedef struct gs_screen_enum_s gs_screen_enum
;
263 extern const uint gs_screen_enum_sizeof
;
264 int gs_screen_init(gs_screen_enum
*, gs_state
*, floatp
, floatp
);
265 int gs_screen_currentpoint(gs_screen_enum
*, gs_point
* );
266 int gs_screen_next(gs_screen_enum
*, floatp
);
269 gs_memory_procs memory_procs
;
271 gs_matrix ctm_inverse
;
273 struct gx_path_s
*path
;
274 struct gx_clip_path_s
*clip_path
;
276 struct line_params_s
*line_params
;
277 struct halftone_params_s
*halftone
;
278 float (*ht_proc
)(floatp
, floatp
);
279 gs_int_point ht_phase
;
280 gs_int_point phase_mod
;
281 struct gs_color_s
*color
;
282 struct gx_device_color_s
*dev_color
;
283 struct gx_transfer_s
*transfer
;
284 struct gs_font_s
*font
;
296 struct device_s
*device
;
297 int device_is_shared
;
300 typedef unsigned long gx_bitmap_id
;
301 typedef struct gx_bitmap_s
{
306 ushort rep_width
, rep_height
;
308 typedef unsigned long gx_color_index
;
309 typedef unsigned short gx_color_value
;
310 typedef struct gx_device_color_info_s
{
314 gx_color_value max_gray
;
315 gx_color_value max_rgb
;
317 gx_color_value dither_gray
;
318 gx_color_value dither_rgb
;
320 } gx_device_color_info
;
321 typedef struct gx_device_procs_s gx_device_procs
;
323 int params_size
; gx_device_procs
*procs
; const char *dname
; int width
; int height
; float x_pixels_per_inch
; float y_pixels_per_inch
; float l_margin
, b_margin
, r_margin
, t_margin
; gx_device_color_info color_info
; int is_open
;
325 typedef struct gs_prop_item_s gs_prop_item
;
326 struct gx_device_procs_s
{
327 int (*open_device
)(gx_device
*dev
);
328 void (*get_initial_matrix
)(gx_device
*dev
, gs_matrix
*pmat
);
329 int (*sync_output
)(gx_device
*dev
);
330 int (*output_page
)(gx_device
*dev
, int num_copies
, int flush
);
331 int (*close_device
)(gx_device
*dev
);
332 gx_color_index (*map_rgb_color
)(gx_device
*dev
, gx_color_value red
, gx_color_value green
, gx_color_value blue
);
333 int (*map_color_rgb
)(gx_device
*dev
, gx_color_index color
, gx_color_value rgb
[3] );
334 int (*fill_rectangle
)(gx_device
*dev
, int x
, int y
, int width
, int height
, gx_color_index color
);
335 int (*tile_rectangle
)(gx_device
*dev
, gx_bitmap
*tile
, int x
, int y
, int width
, int height
, gx_color_index color0
, gx_color_index color1
, int phase_x
, int phase_y
);
336 int (*copy_mono
)(gx_device
*dev
, unsigned char *data
, int data_x
, int raster
, gx_bitmap_id id
, int x
, int y
, int width
, int height
, gx_color_index color0
, gx_color_index color1
);
337 int (*copy_color
)(gx_device
*dev
, unsigned char *data
, int data_x
, int raster
, gx_bitmap_id id
, int x
, int y
, int width
, int height
);
338 int (*draw_line
)(gx_device
*dev
, int x0
, int y0
, int x1
, int y1
, gx_color_index color
);
339 int (*get_bits
)(gx_device
*dev
, int y
, unsigned char *data
, unsigned int size
, int pad_to_word
);
340 int (*get_props
)(gx_device
*dev
, gs_prop_item
*plist
);
342 int (*put_props
)(gx_device
*dev
, gs_prop_item
*plist
, int count
);
345 extern unsigned int gx_device_bytes_per_scan_line(gx_device
*dev
, int pad_to_word
);
346 int gx_default_open_device(gx_device
*dev
);
347 void gx_default_get_initial_matrix(gx_device
*dev
, gs_matrix
*pmat
);
348 int gx_default_sync_output(gx_device
*dev
);
349 int gx_default_output_page(gx_device
*dev
, int num_copies
, int flush
);
350 int gx_default_close_device(gx_device
*dev
);
351 gx_color_index
gx_default_map_rgb_color(gx_device
*dev
, gx_color_value red
, gx_color_value green
, gx_color_value blue
);
352 int gx_default_map_color_rgb(gx_device
*dev
, gx_color_index color
, gx_color_value rgb
[3] );
353 int gx_default_tile_rectangle(gx_device
*dev
, gx_bitmap
*tile
, int x
, int y
, int width
, int height
, gx_color_index color0
, gx_color_index color1
, int phase_x
, int phase_y
);
354 int gx_default_copy_color(gx_device
*dev
, unsigned char *data
, int data_x
, int raster
, gx_bitmap_id id
, int x
, int y
, int width
, int height
);
355 int gx_default_draw_line(gx_device
*dev
, int x0
, int y0
, int x1
, int y1
, gx_color_index color
);
356 int gx_default_get_bits(gx_device
*dev
, int y
, unsigned char *data
, unsigned int size
, int pad_to_word
);
357 int gx_default_get_props(gx_device
*dev
, gs_prop_item
*plist
);
358 int gx_default_put_props(gx_device
*dev
, gs_prop_item
*plist
, int count
);
359 typedef struct device_s
{
362 gx_color_index white
, black
;
364 int gs_initmatrix(gs_state
* ),
365 gs_defaultmatrix(const gs_state
*, gs_matrix
* ),
366 gs_currentmatrix(const gs_state
*, gs_matrix
* ),
367 gs_setmatrix(gs_state
*, const gs_matrix
* ),
368 gs_translate(gs_state
*, floatp
, floatp
),
369 gs_scale(gs_state
*, floatp
, floatp
),
370 gs_rotate(gs_state
*, floatp
),
371 gs_concat(gs_state
*, const gs_matrix
* );
372 int gs_transform(gs_state
*, floatp
, floatp
, gs_point
* ),
373 gs_dtransform(gs_state
*, floatp
, floatp
, gs_point
* ),
374 gs_itransform(gs_state
*, floatp
, floatp
, gs_point
* ),
375 gs_idtransform(gs_state
*, floatp
, floatp
, gs_point
* );
377 ctm_set_inverse(gs_state
*pgs
)
378 { int code
= gs_matrix_invert(&*(gs_matrix
*)&(pgs
)->ctm
, &pgs
->ctm_inverse
);
380 if ( code
< 0 ) return code
;
381 pgs
->inverse_valid
= 1;
385 gs_update_matrix_fixed(gs_matrix_fixed
*pmat
)
386 { (*pmat
). tx
= ((float)(((*pmat
). tx_fixed
= ((fixed
)(((*pmat
). tx
)*(float)(1<<12 ) )) )*(1.0/(1<<12 ) ))) , (*pmat
). ty
= ((float)(((*pmat
). ty_fixed
= ((fixed
)(((*pmat
). ty
)*(float)(1<<12 ) )) )*(1.0/(1<<12 ) )));
389 gs_initmatrix(gs_state
*pgs
)
390 { gx_device
*dev
= pgs
->device
->info
;
391 (*dev
->procs
->get_initial_matrix
)(dev
, &*(gs_matrix
*)&(pgs
)->ctm
);
392 (pgs
->ctm
). tx
= ((float)(((pgs
->ctm
). tx_fixed
= ((fixed
)(((pgs
->ctm
). tx
)*(float)(1<<12 ) )) )*(1.0/(1<<12 ) ))) , (pgs
->ctm
). ty
= ((float)(((pgs
->ctm
). ty_fixed
= ((fixed
)(((pgs
->ctm
). ty
)*(float)(1<<12 ) )) )*(1.0/(1<<12 ) ))) , pgs
->inverse_valid
= 0, pgs
->char_tm_valid
= 0;
396 gs_defaultmatrix(const gs_state
*pgs
, gs_matrix
*pmat
)
397 { gx_device
*dev
= pgs
->device
->info
;
398 (*dev
->procs
->get_initial_matrix
)(dev
, pmat
);
402 gs_currentmatrix(const gs_state
*pgs
, gs_matrix
*pmat
)
403 { *pmat
= *(gs_matrix
*)&(pgs
)->ctm
;
407 gs_setmatrix(gs_state
*pgs
, const gs_matrix
*pmat
)
408 { *(gs_matrix
*)&(pgs
)->ctm
= *pmat
;
409 (pgs
->ctm
). tx
= ((float)(((pgs
->ctm
). tx_fixed
= ((fixed
)(((pgs
->ctm
). tx
)*(float)(1<<12 ) )) )*(1.0/(1<<12 ) ))) , (pgs
->ctm
). ty
= ((float)(((pgs
->ctm
). ty_fixed
= ((fixed
)(((pgs
->ctm
). ty
)*(float)(1<<12 ) )) )*(1.0/(1<<12 ) ))) , pgs
->inverse_valid
= 0, pgs
->char_tm_valid
= 0;
413 gs_translate(gs_state
*pgs
, floatp dx
, floatp dy
)
416 if ( (code
= gs_distance_transform(dx
, dy
, &*(gs_matrix
*)&(pgs
)->ctm
, &pt
)) < 0 )
420 (pgs
->ctm
). tx
= ((float)(((pgs
->ctm
). tx_fixed
= ((fixed
)(((pgs
->ctm
). tx
)*(float)(1<<12 ) )) )*(1.0/(1<<12 ) ))) , (pgs
->ctm
). ty
= ((float)(((pgs
->ctm
). ty_fixed
= ((fixed
)(((pgs
->ctm
). ty
)*(float)(1<<12 ) )) )*(1.0/(1<<12 ) ))) , pgs
->inverse_valid
= 0, pgs
->char_tm_valid
= 0;
424 gs_scale(gs_state
*pgs
, floatp sx
, floatp sy
)
429 pgs
->inverse_valid
= 0, pgs
->char_tm_valid
= 0;
433 gs_rotate(gs_state
*pgs
, floatp ang
)
434 { int code
= gs_matrix_rotate(&*(gs_matrix
*)&(pgs
)->ctm
, ang
, &*(gs_matrix
*)&(pgs
)->ctm
);
435 pgs
->inverse_valid
= 0, pgs
->char_tm_valid
= 0;
439 gs_concat(gs_state
*pgs
, const gs_matrix
*pmat
)
440 { int code
= gs_matrix_multiply(pmat
, &*(gs_matrix
*)&(pgs
)->ctm
, &*(gs_matrix
*)&(pgs
)->ctm
);
441 (pgs
->ctm
). tx
= ((float)(((pgs
->ctm
). tx_fixed
= ((fixed
)(((pgs
->ctm
). tx
)*(float)(1<<12 ) )) )*(1.0/(1<<12 ) ))) , (pgs
->ctm
). ty
= ((float)(((pgs
->ctm
). ty_fixed
= ((fixed
)(((pgs
->ctm
). ty
)*(float)(1<<12 ) )) )*(1.0/(1<<12 ) ))) , pgs
->inverse_valid
= 0, pgs
->char_tm_valid
= 0;
445 gs_transform(gs_state
*pgs
, floatp x
, floatp y
, gs_point
*pt
)
446 { return gs_point_transform(x
, y
, &*(gs_matrix
*)&(pgs
)->ctm
, pt
);
449 gs_dtransform(gs_state
*pgs
, floatp dx
, floatp dy
, gs_point
*pt
)
450 { return gs_distance_transform(dx
, dy
, &*(gs_matrix
*)&(pgs
)->ctm
, pt
);
453 gs_itransform(gs_state
*pgs
, floatp x
, floatp y
, gs_point
*pt
)
456 if ( !!(((*(long *)(&((&pgs
->ctm
)->xy
)) | *(long *)(&( (&pgs
->ctm
)->yx
)) ) << 1) == 0) )
457 { return gs_point_transform_inverse(x
, y
, &*(gs_matrix
*)&(pgs
)->ctm
, pt
);
460 { if ( !pgs
->inverse_valid
) { int code
= ctm_set_inverse(pgs
); if ( code
< 0 ) return code
; };
461 return gs_point_transform(x
, y
, &pgs
->ctm_inverse
, pt
);
465 gs_idtransform(gs_state
*pgs
, floatp dx
, floatp dy
, gs_point
*pt
)
468 if ( !!(((*(long *)(&((&pgs
->ctm
)->xy
)) | *(long *)(&( (&pgs
->ctm
)->yx
)) ) << 1) == 0) )
469 { return gs_distance_transform_inverse(dx
, dy
,
470 &*(gs_matrix
*)&(pgs
)->ctm
, pt
);
473 { if ( !pgs
->inverse_valid
) { int code
= ctm_set_inverse(pgs
); if ( code
< 0 ) return code
; };
474 return gs_distance_transform(dx
, dy
, &pgs
->ctm_inverse
, pt
);
478 gs_translate_to_fixed(register gs_state
*pgs
, fixed px
, fixed py
)
479 { pgs
->ctm
.tx
= ((float)((pgs
->ctm
.tx_fixed
= px
)*(1.0/(1<<12 ) )));
480 pgs
->ctm
.ty
= ((float)((pgs
->ctm
.ty_fixed
= py
)*(1.0/(1<<12 ) )));
481 pgs
->inverse_valid
= 0;
482 pgs
->char_tm_valid
= 1;
486 gx_matrix_to_fixed_coeff(const gs_matrix
*pmat
, register fixed_coeff
*pfc
,
493 if ( !((*(long *)(&(ctm
.xx
)) << 1) == 0) )
494 { (void)frexp(ctm
.xx
, &scale
);
496 if ( !((*(long *)(&(ctm
.xy
)) << 1) == 0) )
497 { (void)frexp(ctm
.xy
, &expt
);
498 if ( expt
> scale
) scale
= expt
;
501 if ( !((*(long *)(&(ctm
.yx
)) << 1) == 0) )
502 { (void)frexp(ctm
.yx
, &expt
);
503 if ( expt
> scale
) scale
= expt
;
506 if ( !((*(long *)(&(ctm
.yy
)) << 1) == 0) )
507 { (void)frexp(ctm
.yy
, &expt
);
508 if ( expt
> scale
) scale
= expt
;
510 scale
= sizeof(long) * 8 - 1 - max_bits
- scale
;
513 { pfc
->shift
= shift
;
514 pfc
->round
= (fixed
)1 << (shift
- 1);
521 pfc
->xx
= (((*(long *)(&(ctm
.xx
)) << 1) == 0) ? 0 : (long)ldexp(ctm
.xx
, scale
));
522 pfc
->yy
= (((*(long *)(&(ctm
.yy
)) << 1) == 0) ? 0 : (long)ldexp(ctm
.yy
, scale
));
524 { pfc
->xy
= (((*(long *)(&(ctm
.xy
)) << 1) == 0) ? 0 : (long)ldexp(ctm
.xy
, scale
));
525 pfc
->yx
= (((*(long *)(&(ctm
.yx
)) << 1) == 0) ? 0 : (long)ldexp(ctm
.yx
, scale
));
528 pfc
->xy
= pfc
->yx
= 0;
529 pfc
->max_bits
= max_bits
;