Lines Matching defs:reader

30  * The implementation of the HPGL reader.                              *
42 static int hpgs_reader_set_number_of_pens(hpgs_reader *reader, int npens)
44 double *pw =(double *)realloc(reader->pen_widths,npens*sizeof(double));
49 reader->pen_widths = pw;
51 hpgs_color *pc = (hpgs_color *)realloc(reader->pen_colors,npens*sizeof(hpgs_color));
56 reader->pen_colors = pc;
58 for (;reader->npens<npens;++reader->npens)
60 reader->pen_widths[reader->npens] = 1.0;
61 reader->pen_colors[reader->npens].r = 0.0;
62 reader->pen_colors[reader->npens].g = 0.0;
63 reader->pen_colors[reader->npens].b = 0.0;
72 int hpgs_reader_do_setpen(hpgs_reader *reader, int pen)
76 if (hpgs_reader_checkpath(reader)) return -1;
81 if (pen >= reader->npens)
85 if (hpgs_reader_set_number_of_pens(reader,pen+1))
90 if (reader->verbosity)
92 pen, pen % reader->npens);
93 pen = pen % reader->npens;
97 reader->current_pen = pen;
99 width = reader->pen_widths[pen];
101 if (reader->pen_width_relative)
102 width *= hypot(reader->P2.x-reader->P1.x,
103 reader->P2.y-reader->P1.y ) * 0.001 * HP_TO_PT;
105 width *= HP_TO_PT / reader->world_scale;
107 width *= reader->page_scale;
109 if (hpgs_setlinewidth(reader->device,width*reader->lw_factor))
112 return hpgs_setrgbcolor(reader->device,
113 &reader->pen_colors[pen]);
119 int hpgs_reader_do_NP (hpgs_reader *reader)
123 if (!reader->eoc &&
124 hpgs_reader_read_int(reader,&npens)) return -1;
126 if (npens <= reader->npens) return 0;
128 return hpgs_reader_set_number_of_pens(reader,npens);
134 int hpgs_reader_do_SP (hpgs_reader *reader)
138 if (!reader->eoc &&
139 hpgs_reader_read_int(reader,&pen)) return -1;
141 return hpgs_reader_do_setpen(reader,pen);
147 int hpgs_reader_do_PC (hpgs_reader *reader)
152 if (!reader->eoc && hpgs_reader_read_int(reader,&pen)) return -1;
153 if (!reader->eoc && hpgs_reader_read_double(reader,&r)) return -1;
154 if (!reader->eoc && hpgs_reader_read_double(reader,&g)) return -1;
155 if (!reader->eoc && hpgs_reader_read_double(reader,&b)) return -1;
157 if (pen >= reader->npens)
161 if (hpgs_reader_set_number_of_pens(reader,pen+1))
166 if (reader->verbosity)
175 hpgs_reader_set_std_pen_colors(reader,0,reader->npens);
176 pen = reader->current_pen;
182 hpgs_reader_set_std_pen_colors(reader,pen,1);
186 reader->pen_colors[pen].r =
187 (r - reader->min_color.r) / (reader->max_color.r - reader->min_color.r);
188 if (reader->pen_colors[pen].r < 0.0) reader->pen_colors[pen].r = 0.0;
189 if (reader->pen_colors[pen].r > 1.0) reader->pen_colors[pen].r = 1.0;
191 reader->pen_colors[pen].g =
192 (g - reader->min_color.g) / (reader->max_color.g - reader->min_color.g);
193 if (reader->pen_colors[pen].g < 0.0) reader->pen_colors[pen].g = 0.0;
194 if (reader->pen_colors[pen].g > 1.0) reader->pen_colors[pen].g = 1.0;
196 reader->pen_colors[pen].b =
197 (b - reader->min_color.b) / (reader->max_color.b - reader->min_color.b);
198 if (reader->pen_colors[pen].b < 0.0) reader->pen_colors[pen].b = 0.0;
199 if (reader->pen_colors[pen].b > 1.0) reader->pen_colors[pen].b = 1.0;
203 if (pen == reader->current_pen)
204 if (hpgs_setrgbcolor(reader->device,
205 &reader->pen_colors[pen]))
214 int hpgs_reader_do_CR (hpgs_reader *reader)
216 reader->min_color.r = 0.0;
217 reader->min_color.g = 0.0;
218 reader->min_color.b = 0.0;
220 reader->max_color.r = 255.0;
221 reader->max_color.g = 255.0;
222 reader->max_color.b = 255.0;
224 if (!reader->eoc)
226 if (hpgs_reader_read_double(reader,&reader->min_color.r)) return -1;
227 if (reader->eoc) return -1;
228 if (hpgs_reader_read_double(reader,&reader->max_color.r)) return -1;
229 if (reader->eoc) return -1;
230 if (hpgs_reader_read_double(reader,&reader->min_color.g)) return -1;
231 if (reader->eoc) return -1;
232 if (hpgs_reader_read_double(reader,&reader->max_color.g)) return -1;
233 if (reader->eoc) return -1;
234 if (hpgs_reader_read_double(reader,&reader->min_color.b)) return -1;
235 if (reader->eoc) return -1;
236 if (hpgs_reader_read_double(reader,&reader->max_color.b)) return -1;
245 int hpgs_reader_do_LA(hpgs_reader *reader)
267 while (!reader->eoc)
269 if (hpgs_reader_read_int(reader,&kind)) return -1;
270 if (reader->eoc) return -1;
275 if (hpgs_reader_read_double(reader,&rvalue)) return -1;
276 if (hpgs_setmiterlimit(reader->device,rvalue)) return -1;
279 if (hpgs_reader_read_int(reader,&ivalue)) return -1;
281 hpgs_setlinecap(reader->device,caps[ivalue])) return -1;
284 if (hpgs_reader_read_int(reader,&ivalue)) return -1;
286 hpgs_setlinejoin(reader->device,joins[ivalue])) return -1;
298 int hpgs_reader_do_LT(hpgs_reader *reader)
306 if (hpgs_reader_checkpath(reader)) return -1;
308 if (!reader->eoc &&
309 hpgs_reader_read_int(reader,&linetype)) return -1;
311 if (!reader->eoc &&
312 hpgs_reader_read_double(reader,&patlen)) return -1;
314 if (!reader->eoc &&
315 hpgs_reader_read_int(reader,&mode)) return -1;
319 if (reader->verbosity)
330 patlen *= hypot(reader->P2.x-reader->P1.x,
331 reader->P2.y-reader->P1.y ) * 0.01 * HP_TO_PT;
333 ndash = reader->linetype_nsegs[linetype+8];
337 dashes[i] = reader->linetype_segs[linetype+8][i] * patlen;
339 return hpgs_setdash(reader->device,
346 int hpgs_reader_do_PW (hpgs_reader *reader)
351 if (!reader->eoc)
352 if (hpgs_reader_read_double(reader,&width)) return -1;
353 if (!reader->eoc)
355 if (hpgs_reader_read_int(reader,&pen)) return -1;
357 if (pen < 0 || pen >= reader->npens)
359 if (pen >= reader->npens && pen < 256)
361 if (hpgs_reader_set_number_of_pens(reader,pen+1))
366 if (reader->verbosity)
374 if (reader->verbosity >= 2)
375 hpgs_log("PW: pen,width,rel = %d,%g,%d.\n",pen,width,reader->pen_width_relative);
377 if (reader->pen_width_relative)
385 for (i=0;i<reader->npens;++i)
386 reader->pen_widths[i] = width;
389 reader->pen_widths[pen] = width;
391 if (pen < 0 || pen == reader->current_pen)
393 if (hpgs_reader_checkpath(reader)) return -1;
395 if (reader->pen_width_relative)
396 width *= hypot(reader->P2.x-reader->P1.x,
397 reader->P2.y-reader->P1.y ) * 0.001 * HP_TO_PT;
399 width *= HP_TO_PT / reader->world_scale;
401 width *= reader->page_scale;
403 if (hpgs_setlinewidth(reader->device,width*reader->lw_factor))
413 int hpgs_reader_do_WU (hpgs_reader *reader)
415 reader->pen_width_relative=0;
417 if (!reader->eoc &&
418 hpgs_reader_read_int(reader,&reader->pen_width_relative)) return -1;