tioga 1.8 → 1.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. data/Tioga_README +46 -11
  2. data/split/Dtable/dtable.c +2 -2
  3. data/split/Dtable/dvector.h +8 -0
  4. data/split/Dtable/namespace.h +16 -8
  5. data/split/Dtable/symbols.h +1 -1
  6. data/split/Dvector/dvector.c +77 -2
  7. data/split/Dvector/dvector_intern.h +2 -0
  8. data/split/Dvector/include/dvector.h +8 -0
  9. data/split/Dvector/lib/Dvector_extras.rb +12 -0
  10. data/split/Dvector/namespace.h +16 -8
  11. data/split/Dvector/symbols.h +1 -1
  12. data/split/Flate/namespace.h +16 -8
  13. data/split/Flate/symbols.h +1 -1
  14. data/split/Function/dvector.h +8 -0
  15. data/split/Function/function.c +2 -1
  16. data/split/Function/namespace.h +16 -8
  17. data/split/Function/symbols.h +1 -1
  18. data/split/Tioga/axes.c +217 -75
  19. data/split/Tioga/dvector.h +8 -0
  20. data/split/Tioga/figures.c +19 -2
  21. data/split/Tioga/figures.h +7 -6
  22. data/split/Tioga/generic.c +14 -1
  23. data/split/Tioga/generic.h +13 -0
  24. data/split/Tioga/init.c +5 -9
  25. data/split/Tioga/lib/Colormaps.rb +33 -2
  26. data/split/Tioga/lib/Doc.rb +30 -0
  27. data/split/Tioga/lib/Executive.rb +4 -2
  28. data/split/Tioga/lib/FigMkr.rb +219 -53
  29. data/split/Tioga/lib/Figures_and_Plots.rb +7 -0
  30. data/split/Tioga/lib/Images.rb +10 -2
  31. data/split/Tioga/lib/Legends.rb +7 -3
  32. data/split/Tioga/lib/Markers.rb +7 -0
  33. data/split/Tioga/lib/TexPreamble.rb +56 -56
  34. data/split/Tioga/lib/Utils.rb +7 -0
  35. data/split/Tioga/lib/maker.rb +1 -0
  36. data/split/Tioga/lib/tioga_ui_cmds.rb +6 -5
  37. data/split/Tioga/namespace.h +16 -8
  38. data/split/Tioga/pdfcolor.c +63 -7
  39. data/split/Tioga/pdfcoords.c +0 -16
  40. data/split/Tioga/pdfimage.c +16 -2
  41. data/split/Tioga/pdfs.h +1 -0
  42. data/split/Tioga/pdftext.c +223 -82
  43. data/split/Tioga/symbols.h +1 -1
  44. data/split/Tioga/texout.c +1 -1
  45. data/split/Tioga/wrappers.c +21 -10
  46. data/split/Tioga/wrappers.h +5 -0
  47. data/split/extconf.rb +27 -15
  48. data/split/namespace.h +16 -8
  49. data/split/scripts/tioga +0 -0
  50. data/split/symbols.h +1 -1
  51. data/tests/Icon_Test.pdf +0 -0
  52. data/tests/tc_Dvector.rb +24 -0
  53. metadata +38 -37
@@ -44,22 +44,6 @@ c_set_subframe(OBJ_PTR fmkr, FM *p,
44
44
  double bottom_margin, int *ierr)
45
45
  {
46
46
  double x, y, w, h;
47
- if (left_margin < 0 || right_margin < 0 || top_margin < 0
48
- || bottom_margin < 0) {
49
- RAISE_ERROR("Sorry: margins for set_subframe must be non-negative",
50
- ierr);
51
- return;
52
- }
53
- if (left_margin + right_margin >= 1.0) {
54
- RAISE_ERROR_gg("Sorry: margins too large: left_margin (%g) "
55
- "right_margin (%g)", left_margin, right_margin, ierr);
56
- return;
57
- }
58
- if (top_margin + bottom_margin >= 1.0) {
59
- RAISE_ERROR_gg("Sorry: margins too large: top_margin (%g) "
60
- "bottom_margin (%g)", top_margin, bottom_margin, ierr);
61
- return;
62
- }
63
47
  x = p->frame_left += left_margin * p->frame_width;
64
48
  p->frame_right -= right_margin * p->frame_width;
65
49
  p->frame_top -= top_margin * p->frame_height;
@@ -157,7 +157,9 @@ Write_JPG(JPG_Info *xo, int *ierr)
157
157
  xo->mask_obj_num, ierr);
158
158
  }
159
159
 
160
-
160
+ extern void
161
+ str_hls_to_rgb_bang(unsigned char* str, long len);
162
+
161
163
  void
162
164
  Write_Sampled(Sampled_Info *xo, int *ierr)
163
165
  {
@@ -168,9 +170,11 @@ Write_Sampled(Sampled_Info *xo, int *ierr)
168
170
  fprintf(OF, "\t/Width %i\n", xo->width);
169
171
  int i, len;
170
172
  unsigned long new_len;
173
+ unsigned char *image_data;
171
174
  unsigned char *buffer;
172
175
  switch (xo->image_type) {
173
176
  case RGB_IMAGE:
177
+ case HLS_IMAGE:
174
178
  fprintf(OF, "\t/ColorSpace /DeviceRGB\n");
175
179
  fprintf(OF, "\t/BitsPerComponent 8\n");
176
180
  break;
@@ -214,9 +218,18 @@ Write_Sampled(Sampled_Info *xo, int *ierr)
214
218
  && xo->value_mask_min <= 255 && xo->value_mask_max <= 255
215
219
  && xo->value_mask_min <= xo->value_mask_max)
216
220
  fprintf(OF, "\t/Mask [%i %i]\n", xo->value_mask_min, xo->value_mask_max);
221
+
222
+ if (xo->image_type == HLS_IMAGE) {
223
+ image_data = ALLOC_N_unsigned_char(xo->length);
224
+ memcpy(image_data, xo->image_data, xo->length);
225
+ str_hls_to_rgb_bang(image_data, xo->length);
226
+ } else {
227
+ image_data = xo->image_data;
228
+ }
229
+
217
230
  new_len = (xo->length * 11)/10 + 100;
218
231
  buffer = ALLOC_N_unsigned_char(new_len);
219
- if (do_flate_compress(buffer, &new_len, xo->image_data, xo->length)
232
+ if (do_flate_compress(buffer, &new_len, image_data, xo->length)
220
233
  != FLATE_OK) {
221
234
  free(buffer);
222
235
  RAISE_ERROR("Error compressing image data", ierr);
@@ -229,6 +242,7 @@ Write_Sampled(Sampled_Info *xo, int *ierr)
229
242
  return;
230
243
  }
231
244
  free(buffer);
245
+ if (xo->image_type == HLS_IMAGE) free(image_data);
232
246
  fprintf(OF, "\nendstream\nendobj\n");
233
247
  }
234
248
 
data/split/Tioga/pdfs.h CHANGED
@@ -96,6 +96,7 @@ extern void Free_Sampled(Sampled_Info *xo);
96
96
  #define SAMPLED_SUBTYPE 2
97
97
 
98
98
  #define RGB_IMAGE 0
99
+ #define HLS_IMAGE 5
99
100
  #define CMYK_IMAGE 4
100
101
  #define GRAY_IMAGE 1
101
102
  #define MONO_IMAGE 2
@@ -458,84 +458,74 @@ c_rotated_string_at_points(OBJ_PTR fmkr, FM *p, double rotation,
458
458
  }
459
459
 
460
460
 
461
+ static OBJ_PTR get1_obj(bool is_list, OBJ_PTR obj, int indx, int* ierr) {
462
+ if (is_list) {
463
+ int len;
464
+ len = Array_Len(obj, ierr); if (*ierr != 0) return 0.0;
465
+ obj = Array_Entry(obj, indx % len, ierr); if (*ierr != 0) return 0.0;
466
+ }
467
+ return obj;
468
+ }
469
+
470
+
471
+ static double get1_dbl(bool is_list, OBJ_PTR obj, int indx, int* ierr) {
472
+ if (is_list) {
473
+ int len = Array_Len(obj, ierr); if (*ierr != 0) return 0.0;
474
+ return Array_Entry_double(obj, indx % len, ierr); if (*ierr != 0) return 0.0;
475
+ }
476
+ return Number_to_double(obj, ierr);
477
+ }
478
+
479
+
480
+ static int get1_int(bool is_list, OBJ_PTR obj, int indx, int* ierr) {
481
+ if (is_list) {
482
+ int len = Array_Len(obj, ierr); if (*ierr != 0) return 0.0;
483
+ return Array_Entry_int(obj, indx % len, ierr); if (*ierr != 0) return 0.0;
484
+ }
485
+ return Number_to_int(obj, ierr);
486
+ }
487
+
488
+
461
489
  void
462
- c_private_show_marker(OBJ_PTR fmkr, FM *p, int int_args,
463
- OBJ_PTR stroke_width, OBJ_PTR string,
464
- OBJ_PTR x, OBJ_PTR y, OBJ_PTR x_vec, OBJ_PTR y_vec,
465
- double h_scale, double v_scale, double scale,
466
- double it_angle, double ascent_angle, double angle,
467
- OBJ_PTR fill_color, OBJ_PTR stroke_color, int *ierr)
490
+ c_private_show_marker(OBJ_PTR fmkr, FM *p, OBJ_PTR args, int *ierr)
468
491
  {
469
- int c, alignment, justification, fnt_num, n, mode;
492
+ OBJ_PTR marker_obj, font_obj, mode_obj, align_obj, just_obj, stroke_width_obj, string, x, y, x_vec, y_vec,
493
+ h_scale_obj, v_scale_obj, scale_obj, it_angle_obj, ascent_angle_obj, angle_obj,
494
+ fill_color_obj, stroke_color_obj;
495
+ int c, alignment, justification, fnt_num, n, num_times, num_per_call, i, mode, len;
496
+ double h_scale, v_scale, scale, it_angle, ascent_angle, angle;
470
497
  unsigned char *text = NULL, buff[2];
471
498
  double *xs, *ys, xloc, yloc, prev_line_width = -1;
472
- bool restore_fill_color = false, restore_stroke_color = false;
473
499
  double stroke_color_R = 0.0, stroke_color_G = 0.0, stroke_color_B = 0.0;
474
- double prev_stroke_color_R = 0.0, prev_stroke_color_G = 0.0,
475
- prev_stroke_color_B = 0.0;
476
500
  double fill_color_R = 0.0, fill_color_G = 0.0, fill_color_B = 0.0;
477
- double prev_fill_color_R = 0.0, prev_fill_color_G = 0.0,
478
- prev_fill_color_B = 0.0;
479
- c = int_args / 100000; int_args -= c * 100000;
480
- fnt_num = int_args / 1000; int_args -= fnt_num * 1000;
481
- mode = int_args / 100; int_args -= mode * 100;
482
- alignment = int_args / 10; int_args -= alignment * 10;
483
- justification = int_args;
484
- if (string == OBJ_NIL) {
485
- if (c < 0 || c > 255) {
486
- RAISE_ERROR_i("Sorry: invalid character code (%i) : "
487
- "must be between 0 and 255", c, ierr);
488
- return;
489
- }
490
- text = buff; text[0] = c; text[1] = '\0';
491
- if (stroke_width != OBJ_NIL) {
492
- double width = Number_to_double(stroke_width, ierr);
493
- if (*ierr != 0) return;
494
- prev_line_width = p->line_width; // restore it later
495
- fprintf(TF, "%0.6f w\n", width * ENLARGE);
496
- }
497
- }
498
- else {
499
- text = (unsigned char *)(String_Ptr(string, ierr));
500
- if (*ierr != 0) return;
501
- }
502
- fprintf(TF, "%d Tr\n", mode);
503
- if (stroke_color != OBJ_NIL &&
504
- (mode == STROKE || mode == FILL_AND_STROKE
505
- || mode == STROKE_AND_CLIP || mode == FILL_STROKE_AND_CLIP)) {
506
- Unpack_RGB(stroke_color, &stroke_color_R, &stroke_color_G,
507
- &stroke_color_B, ierr);
508
- if (*ierr != 0) return;
509
- if (stroke_color_R != p->stroke_color_R
510
- || stroke_color_G != p->stroke_color_G
511
- || stroke_color_B != p->stroke_color_B) {
512
- prev_stroke_color_R = p->stroke_color_R;
513
- prev_stroke_color_G = p->stroke_color_G;
514
- prev_stroke_color_B = p->stroke_color_B;
515
- restore_stroke_color = true;
516
- c_stroke_color_set_RGB(fmkr, p, stroke_color_R, stroke_color_G,
517
- stroke_color_B, ierr);
518
- if (*ierr != 0) return;
519
- }
520
- }
521
- if (fill_color != OBJ_NIL &&
522
- (mode == FILL || mode == FILL_AND_STROKE
523
- || mode == FILL_AND_CLIP || mode == FILL_STROKE_AND_CLIP)) {
524
- Unpack_RGB(fill_color, &fill_color_R, &fill_color_G, &fill_color_B,
525
- ierr);
526
- if (*ierr != 0) return;
527
- if (fill_color_R != p->fill_color_R
528
- || fill_color_G != p->fill_color_G
529
- || fill_color_B != p->fill_color_B) {
530
- prev_fill_color_R = p->fill_color_R;
531
- prev_fill_color_G = p->fill_color_G;
532
- prev_fill_color_B = p->fill_color_B;
533
- restore_fill_color = true;
534
- c_fill_color_set_RGB(fmkr, p, fill_color_R, fill_color_G,
535
- fill_color_B, ierr);
536
- if (*ierr != 0) return;
537
- }
538
- }
501
+ double prev_stroke_color_R, prev_stroke_color_G, prev_stroke_color_B;
502
+ double prev_fill_color_R, prev_fill_color_G, prev_fill_color_B;
503
+ OBJ_PTR fill_color, stroke_color, marker;
504
+ bool do_lists, fill_color_is_list, stroke_color_is_list, stroke_width_is_list, h_scale_is_list;
505
+ bool it_angle_is_list, ascent_angle_is_list, angle_is_list, v_scale_is_list, scale_is_list;
506
+ bool align_is_list, just_is_list, marker_is_list, mode_is_list, font_is_list;
507
+
508
+ i = 0;
509
+ marker_obj = Array_Entry(args, i, ierr); i++;
510
+ font_obj = Array_Entry(args, i, ierr); i++;
511
+ mode_obj = Array_Entry(args, i, ierr); i++;
512
+ align_obj = Array_Entry(args, i, ierr); i++;
513
+ just_obj = Array_Entry(args, i, ierr); i++;
514
+ stroke_width_obj = Array_Entry(args, i, ierr); i++;
515
+ string = Array_Entry(args, i, ierr); i++;
516
+ x = Array_Entry(args, i, ierr); i++;
517
+ y = Array_Entry(args, i, ierr); i++;
518
+ x_vec = Array_Entry(args, i, ierr); i++;
519
+ y_vec = Array_Entry(args, i, ierr); i++;
520
+ h_scale_obj = Array_Entry(args, i, ierr); i++;
521
+ v_scale_obj = Array_Entry(args, i, ierr); i++;
522
+ scale_obj = Array_Entry(args, i, ierr); i++;
523
+ it_angle_obj = Array_Entry(args, i, ierr); i++;
524
+ ascent_angle_obj = Array_Entry(args, i, ierr); i++;
525
+ angle_obj = Array_Entry(args, i, ierr); i++;
526
+ fill_color_obj = Array_Entry(args, i, ierr); i++;
527
+ stroke_color_obj = Array_Entry(args, i, ierr); i++;
528
+
539
529
  if (x == OBJ_NIL) {
540
530
  long xlen, ylen;
541
531
  xs = Vector_Data_for_Read(x_vec, &xlen, ierr);
@@ -556,14 +546,165 @@ c_private_show_marker(OBJ_PTR fmkr, FM *p, int int_args,
556
546
  if (*ierr != 0) return;
557
547
  n = 1;
558
548
  }
559
- c_rotated_string_at_points(fmkr, p, angle, fnt_num, text, scale, n, xs, ys,
560
- alignment, justification, h_scale, v_scale,
561
- it_angle, ascent_angle, ierr);
562
- if (prev_line_width >= 0) c_line_width_set(fmkr, p, prev_line_width, ierr);
563
- if (restore_fill_color)
564
- c_fill_color_set_RGB(fmkr, p, prev_fill_color_R, prev_fill_color_G,
565
- prev_fill_color_B, ierr);
566
- if (restore_stroke_color)
567
- c_stroke_color_set_RGB(fmkr, p, prev_stroke_color_R, prev_stroke_color_G,
568
- prev_stroke_color_B, ierr);
549
+
550
+ prev_stroke_color_R = p->stroke_color_R;
551
+ prev_stroke_color_G = p->stroke_color_G;
552
+ prev_stroke_color_B = p->stroke_color_B;
553
+ prev_fill_color_R = p->fill_color_R;
554
+ prev_fill_color_G = p->fill_color_G;
555
+ prev_fill_color_B = p->fill_color_B;
556
+ prev_line_width = p->line_width;
557
+
558
+ if (marker_obj == OBJ_NIL) {
559
+ marker_is_list = false;
560
+ } else {
561
+ marker = Array_Entry(marker_obj, 0, ierr); if (*ierr != 0) return;
562
+ marker_is_list = !Is_Kind_of_Number(marker);
563
+ }
564
+
565
+ fill_color = Array_Entry(fill_color_obj, 0, ierr); if (*ierr != 0) return;
566
+ stroke_color = Array_Entry(stroke_color_obj, 0, ierr); if (*ierr != 0) return;
567
+ fill_color_is_list = !Is_Kind_of_Number(fill_color);
568
+ stroke_color_is_list = !Is_Kind_of_Number(stroke_color);
569
+
570
+ font_is_list = (font_obj != OBJ_NIL) && (!Is_Kind_of_Integer(font_obj));
571
+ align_is_list = !Is_Kind_of_Integer(align_obj);
572
+ just_is_list = !Is_Kind_of_Integer(just_obj);
573
+ mode_is_list = (mode_obj != OBJ_NIL) && (!Is_Kind_of_Number(mode_obj));
574
+ stroke_width_is_list = stroke_width_obj != OBJ_NIL && !Is_Kind_of_Number(stroke_width_obj);
575
+ h_scale_is_list = !Is_Kind_of_Number(h_scale_obj);
576
+ v_scale_is_list = !Is_Kind_of_Number(v_scale_obj);
577
+ scale_is_list = !Is_Kind_of_Number(scale_obj);
578
+ it_angle_is_list = !Is_Kind_of_Number(it_angle_obj);
579
+ ascent_angle_is_list = !Is_Kind_of_Number(ascent_angle_obj);
580
+ angle_is_list = !Is_Kind_of_Number(angle_obj);
581
+
582
+ do_lists = fill_color_is_list || stroke_color_is_list || h_scale_is_list || v_scale_is_list || scale_is_list ||
583
+ align_is_list || just_is_list || it_angle_is_list || ascent_angle_is_list || angle_is_list;
584
+
585
+ if (do_lists) {
586
+ num_times = n; num_per_call = 1;
587
+ } else {
588
+ num_times = 1; num_per_call = n;
589
+ }
590
+
591
+ for (i=0; i<num_times; i++) {
592
+ alignment = get1_int(align_is_list, align_obj, i, ierr); if (*ierr != 0) return;
593
+ justification = 1+get1_int(just_is_list, just_obj, i, ierr); if (*ierr != 0) return;
594
+ h_scale = get1_dbl(h_scale_is_list, h_scale_obj, i, ierr); if (*ierr != 0) return;
595
+ v_scale = get1_dbl(v_scale_is_list, v_scale_obj, i, ierr); if (*ierr != 0) return;
596
+ scale = get1_dbl(scale_is_list, scale_obj, i, ierr); if (*ierr != 0) return;
597
+ it_angle = get1_dbl(it_angle_is_list, it_angle_obj, i, ierr); if (*ierr != 0) return;
598
+ ascent_angle = get1_dbl(ascent_angle_is_list, ascent_angle_obj, i, ierr); if (*ierr != 0) return;
599
+ angle = get1_dbl(angle_is_list, angle_obj, i, ierr); if (*ierr != 0) return;
600
+ fill_color = get1_obj(fill_color_is_list, fill_color_obj, i, ierr); if (*ierr != 0) return;
601
+ stroke_color = get1_obj(stroke_color_is_list, stroke_color_obj, i, ierr); if (*ierr != 0) return;
602
+
603
+ if (mode_obj != OBJ_NIL) {
604
+ mode = get1_int(mode_is_list, mode_obj, i, ierr); if (*ierr != 0) return;
605
+ } else {
606
+ mode = FILL;
607
+ }
608
+
609
+ if (font_obj != OBJ_NIL) {
610
+ fnt_num = get1_int(font_is_list, font_obj, i, ierr); if (*ierr != 0) return;
611
+ } else {
612
+ fnt_num = 1; // Times_Roman = 1
613
+ }
614
+
615
+ if (marker_obj == OBJ_NIL) {
616
+ text = (unsigned char *)(String_Ptr(string, ierr));
617
+ if (*ierr != 0) return;
618
+ } else {
619
+ marker = get1_obj(marker_is_list, marker_obj, i, ierr); if (*ierr != 0) return;
620
+ font_obj = Array_Entry(marker, 0, ierr); if (*ierr != 0) return;
621
+ fnt_num = Number_to_int(font_obj, ierr); if (*ierr != 0) return;
622
+
623
+ OBJ_PTR glyph_obj = Array_Entry(marker, 1, ierr); if (*ierr != 0) return;
624
+ c = Number_to_int(glyph_obj, ierr); if (*ierr != 0) return;
625
+
626
+ if (mode_obj == OBJ_NIL) {
627
+ len = Array_Len(marker, ierr); if (*ierr != 0) return;
628
+ if (len == 3) {
629
+ mode = STROKE;
630
+ if (stroke_width_obj == OBJ_NIL) {
631
+ OBJ_PTR s = Array_Entry(marker, 2, ierr); if (*ierr != 0) return;
632
+ double width = Number_to_double(s,ierr); if (*ierr != 0) return;
633
+ if (*ierr != 0) return;
634
+ fprintf(TF, "%0.6f w\n", width * ENLARGE);
635
+ }
636
+ }
637
+ }
638
+
639
+ font_obj = Array_Entry(marker, 0, ierr);
640
+ if (*ierr != 0) return;
641
+ fnt_num = Number_to_int(font_obj, ierr); if (*ierr != 0) return;
642
+
643
+ if (c < 0 || c > 255) {
644
+ RAISE_ERROR_i("Sorry: invalid character code (%i) : "
645
+ "must be between 0 and 255", c, ierr);
646
+ return;
647
+ }
648
+ text = buff; text[0] = c; text[1] = '\0';
649
+ }
650
+
651
+ if (stroke_width_obj != OBJ_NIL) {
652
+ double width = get1_dbl(stroke_width_is_list, stroke_width_obj, i, ierr); if (*ierr != 0) return;
653
+ if (*ierr != 0) return;
654
+ fprintf(TF, "%0.6f w\n", width * ENLARGE);
655
+ }
656
+
657
+ if (mode_obj != OBJ_NIL) {
658
+ mode = get1_int(mode_is_list, mode_obj, i, ierr); if (*ierr != 0) return;
659
+ }
660
+
661
+ fprintf(TF, "%d Tr\n", mode);
662
+
663
+ if (stroke_color != OBJ_NIL &&
664
+ (mode == STROKE || mode == FILL_AND_STROKE
665
+ || mode == STROKE_AND_CLIP || mode == FILL_STROKE_AND_CLIP)) {
666
+ Unpack_RGB(stroke_color, &stroke_color_R, &stroke_color_G,
667
+ &stroke_color_B, ierr);
668
+ if (*ierr != 0) return;
669
+ if (stroke_color_R != p->stroke_color_R
670
+ || stroke_color_G != p->stroke_color_G
671
+ || stroke_color_B != p->stroke_color_B) {
672
+ c_stroke_color_set_RGB(fmkr, p, stroke_color_R, stroke_color_G,
673
+ stroke_color_B, ierr);
674
+ if (*ierr != 0) return;
675
+ }
676
+ }
677
+
678
+ if (fill_color != OBJ_NIL &&
679
+ (mode == FILL || mode == FILL_AND_STROKE
680
+ || mode == FILL_AND_CLIP || mode == FILL_STROKE_AND_CLIP)) {
681
+ Unpack_RGB(fill_color, &fill_color_R, &fill_color_G, &fill_color_B,
682
+ ierr);
683
+ if (*ierr != 0) return;
684
+ if (fill_color_R != p->fill_color_R
685
+ || fill_color_G != p->fill_color_G
686
+ || fill_color_B != p->fill_color_B) {
687
+ c_fill_color_set_RGB(fmkr, p, fill_color_R, fill_color_G,
688
+ fill_color_B, ierr);
689
+ if (*ierr != 0) return;
690
+ }
691
+ }
692
+
693
+ c_rotated_string_at_points(fmkr, p, angle, fnt_num, text, scale, num_per_call, xs+i, ys+i,
694
+ alignment, justification, h_scale, v_scale, it_angle, ascent_angle, ierr);
695
+
696
+ if (prev_line_width != p->line_width) c_line_width_set(fmkr, p, prev_line_width, ierr);
697
+ if (prev_fill_color_R != p->fill_color_R
698
+ || prev_fill_color_G != p->fill_color_G
699
+ || prev_fill_color_B != p->fill_color_B)
700
+ c_fill_color_set_RGB(fmkr, p, prev_fill_color_R, prev_fill_color_G,
701
+ prev_fill_color_B, ierr);
702
+ if (prev_stroke_color_R != p->stroke_color_R
703
+ || prev_stroke_color_G != p->stroke_color_G
704
+ || prev_stroke_color_B != p->stroke_color_B)
705
+ c_stroke_color_set_RGB(fmkr, p, prev_stroke_color_R, prev_stroke_color_G,
706
+ prev_stroke_color_B, ierr);
707
+
708
+ }
709
+
569
710
  }
@@ -22,7 +22,7 @@ PRIVATE void * rb_import_symbol_no_raise(VALUE module,
22
22
 
23
23
  #define DECLARE_SYMBOL(ret_type,name,args) \
24
24
  typedef ret_type (*rb_export_##name##_type) args;\
25
- INTERN rb_export_##name##_type name
25
+ INTERN INTERN_EXTERN rb_export_##name##_type name
26
26
 
27
27
  #define IMPLEMENT_SYMBOL(name)\
28
28
  INTERN rb_export_##name##_type name = 0;
data/split/Tioga/texout.c CHANGED
@@ -515,7 +515,7 @@ void c_private_save_measure(OBJ_PTR fmkr, OBJ_PTR measure_name,
515
515
  of arrays (xy) of doubles
516
516
  */
517
517
  OBJ_PTR points = Array_New(0);
518
- OBJ_PTR current_point = NULL;
518
+ OBJ_PTR current_point = OBJ_NIL;
519
519
  int i;
520
520
  for(i = 0; i < 8; i++) {
521
521
  char buf[4];
@@ -143,6 +143,14 @@ OBJ_PTR FM_yaxis_stroke_color_set(OBJ_PTR fmkr, OBJ_PTR val) { int ierr=0;
143
143
  c_yaxis_stroke_color_set(fmkr, Get_FM(fmkr, &ierr), val, &ierr); RETURN_NIL; }
144
144
  OBJ_PTR FM_yaxis_stroke_color_get(OBJ_PTR fmkr) { int ierr=0;
145
145
  return c_yaxis_stroke_color_get(fmkr, Get_FM(fmkr, &ierr), &ierr); }
146
+ OBJ_PTR FM_string_hls_to_rgb_bang(OBJ_PTR fmkr, OBJ_PTR str) { int ierr=0;
147
+ c_string_hls_to_rgb_bang(fmkr, Get_FM(fmkr, &ierr),
148
+ (unsigned char *)String_Ptr(str, &ierr), String_Len(str, &ierr), &ierr);
149
+ return str; }
150
+ OBJ_PTR FM_string_rgb_to_hls_bang(OBJ_PTR fmkr, OBJ_PTR str) { int ierr=0;
151
+ c_string_rgb_to_hls_bang(fmkr, Get_FM(fmkr, &ierr),
152
+ (unsigned char *)String_Ptr(str, &ierr), String_Len(str, &ierr), &ierr);
153
+ return str; }
146
154
 
147
155
  // pdfcoords.c
148
156
  OBJ_PTR FM_private_set_subframe(OBJ_PTR fmkr, OBJ_PTR left_margin, OBJ_PTR right_margin,
@@ -258,6 +266,17 @@ OBJ_PTR FM_private_show_jpg(OBJ_PTR fmkr, OBJ_PTR filename,
258
266
  OBJ_PTR width, OBJ_PTR height, OBJ_PTR image_destination, OBJ_PTR mask_obj_num) { int ierr=0;
259
267
  c_private_show_jpg(fmkr, Get_FM(fmkr, &ierr), String_Ptr(filename, &ierr),
260
268
  Number_to_int(width, &ierr), Number_to_int(height, &ierr), image_destination, Number_to_int(mask_obj_num, &ierr), &ierr); RETURN_NIL; }
269
+
270
+ OBJ_PTR FM_private_show_hls_image(OBJ_PTR fmkr, OBJ_PTR llx, OBJ_PTR lly, OBJ_PTR lrx, OBJ_PTR lry,
271
+ OBJ_PTR ulx, OBJ_PTR uly, OBJ_PTR interpolate, OBJ_PTR w, OBJ_PTR h, OBJ_PTR data, OBJ_PTR mask_obj_num)
272
+ { int ierr=0;
273
+ return c_private_show_image(fmkr, Get_FM(fmkr, &ierr), HLS_IMAGE, Number_to_double(llx, &ierr), Number_to_double(lly, &ierr),
274
+ Number_to_double(lrx, &ierr), Number_to_double(lry, &ierr),
275
+ Number_to_double(ulx, &ierr), Number_to_double(uly, &ierr), (interpolate != OBJ_FALSE), OBJ_FALSE,
276
+ Number_to_int(w, &ierr), Number_to_int(h, &ierr), (unsigned char *)String_Ptr(data, &ierr), String_Len(data, &ierr),
277
+ OBJ_NIL, OBJ_NIL, OBJ_NIL, OBJ_NIL, Number_to_int(mask_obj_num, &ierr), &ierr);
278
+ }
279
+
261
280
  OBJ_PTR FM_private_show_rgb_image(OBJ_PTR fmkr, OBJ_PTR llx, OBJ_PTR lly, OBJ_PTR lrx, OBJ_PTR lry,
262
281
  OBJ_PTR ulx, OBJ_PTR uly, OBJ_PTR interpolate, OBJ_PTR w, OBJ_PTR h, OBJ_PTR data, OBJ_PTR mask_obj_num)
263
282
  { int ierr=0;
@@ -465,16 +484,8 @@ OBJ_PTR FM_register_font(OBJ_PTR fmkr, OBJ_PTR font_name) { int ierr=0;
465
484
  OBJ_PTR FM_marker_string_info(OBJ_PTR fmkr, OBJ_PTR font_number, OBJ_PTR string, OBJ_PTR scale) { int ierr=0;
466
485
  return c_marker_string_info(fmkr, Get_FM(fmkr, &ierr), Number_to_int(font_number, &ierr),
467
486
  (unsigned char *)String_Ptr(string, &ierr), Number_to_double(scale, &ierr), &ierr); }
468
- OBJ_PTR FM_private_show_marker(
469
- OBJ_PTR fmkr, OBJ_PTR integer_args, OBJ_PTR stroke_width, OBJ_PTR string,
470
- OBJ_PTR x, OBJ_PTR y, OBJ_PTR x_vec, OBJ_PTR y_vec,
471
- OBJ_PTR h_scale, OBJ_PTR v_scale, OBJ_PTR scale, OBJ_PTR it_angle,
472
- OBJ_PTR ascent_angle, OBJ_PTR angle,
473
- OBJ_PTR fill_color, OBJ_PTR stroke_color) { int ierr=0;
474
- c_private_show_marker(fmkr, Get_FM(fmkr, &ierr), Number_to_int(integer_args, &ierr), stroke_width,
475
- string, x, y, x_vec, y_vec, Number_to_double(h_scale, &ierr), Number_to_double(v_scale, &ierr),
476
- Number_to_double(scale, &ierr), Number_to_double(it_angle, &ierr), Number_to_double(ascent_angle, &ierr), Number_to_double(angle, &ierr),
477
- fill_color, stroke_color, &ierr); RETURN_NIL; }
487
+ OBJ_PTR FM_private_show_marker(OBJ_PTR fmkr, OBJ_PTR args) { int ierr=0;
488
+ c_private_show_marker(fmkr, Get_FM(fmkr, &ierr), args, &ierr); RETURN_NIL; }
478
489
 
479
490
  // texout.c
480
491
  OBJ_PTR FM_rescale_text(OBJ_PTR fmkr, OBJ_PTR scaling_factor) { int ierr=0;