Commit | Line | Data |
---|---|---|
e5ee047b TC |
1 | #define PERL_NO_GET_CONTEXT |
2 | #ifdef __cplusplus | |
3 | extern "C" { | |
4 | #endif | |
5 | #include "EXTERN.h" | |
6 | #include "perl.h" | |
7 | #include "XSUB.h" | |
8 | #include "imext.h" | |
9 | #include "imperl.h" | |
10 | #include "imtiff.h" | |
11 | ||
12 | DEFINE_IMAGER_CALLBACKS; | |
13 | ||
14 | MODULE = Imager::File::TIFF PACKAGE = Imager::File::TIFF | |
15 | ||
16 | Imager::ImgRaw | |
17 | i_readtiff_wiol(ig, allow_incomplete=0, page=0) | |
18 | Imager::IO ig | |
19 | int allow_incomplete | |
20 | int page | |
21 | ||
22 | void | |
23 | i_readtiff_multi_wiol(ig) | |
24 | Imager::IO ig | |
25 | PREINIT: | |
26 | i_img **imgs; | |
27 | int count; | |
28 | int i; | |
29 | PPCODE: | |
30 | imgs = i_readtiff_multi_wiol(ig, &count); | |
31 | if (imgs) { | |
32 | EXTEND(SP, count); | |
33 | for (i = 0; i < count; ++i) { | |
34 | SV *sv = sv_newmortal(); | |
35 | sv_setref_pv(sv, "Imager::ImgRaw", (void *)imgs[i]); | |
36 | PUSHs(sv); | |
37 | } | |
38 | myfree(imgs); | |
39 | } | |
40 | ||
41 | ||
42 | undef_int | |
43 | i_writetiff_wiol(im, ig) | |
44 | Imager::ImgRaw im | |
45 | Imager::IO ig | |
46 | ||
47 | undef_int | |
48 | i_writetiff_multi_wiol(ig, ...) | |
49 | Imager::IO ig | |
50 | PREINIT: | |
51 | int i; | |
52 | int img_count; | |
53 | i_img **imgs; | |
54 | CODE: | |
55 | if (items < 2) | |
56 | croak("Usage: i_writetiff_multi_wiol(ig, images...)"); | |
57 | img_count = items - 1; | |
58 | RETVAL = 1; | |
59 | if (img_count < 1) { | |
60 | RETVAL = 0; | |
61 | i_clear_error(); | |
62 | i_push_error(0, "You need to specify images to save"); | |
63 | } | |
64 | else { | |
65 | imgs = mymalloc(sizeof(i_img *) * img_count); | |
66 | for (i = 0; i < img_count; ++i) { | |
67 | SV *sv = ST(1+i); | |
68 | imgs[i] = NULL; | |
69 | if (SvROK(sv) && sv_derived_from(sv, "Imager::ImgRaw")) { | |
70 | imgs[i] = INT2PTR(i_img *, SvIV((SV*)SvRV(sv))); | |
71 | } | |
72 | else { | |
73 | i_clear_error(); | |
74 | i_push_error(0, "Only images can be saved"); | |
75 | myfree(imgs); | |
76 | RETVAL = 0; | |
77 | break; | |
78 | } | |
79 | } | |
80 | if (RETVAL) { | |
81 | RETVAL = i_writetiff_multi_wiol(ig, imgs, img_count); | |
82 | } | |
83 | myfree(imgs); | |
84 | } | |
85 | OUTPUT: | |
86 | RETVAL | |
87 | ||
88 | undef_int | |
89 | i_writetiff_wiol_faxable(im, ig, fine) | |
90 | Imager::ImgRaw im | |
91 | Imager::IO ig | |
92 | int fine | |
93 | ||
94 | undef_int | |
95 | i_writetiff_multi_wiol_faxable(ig, fine, ...) | |
96 | Imager::IO ig | |
97 | int fine | |
98 | PREINIT: | |
99 | int i; | |
100 | int img_count; | |
101 | i_img **imgs; | |
102 | CODE: | |
103 | if (items < 3) | |
104 | croak("Usage: i_writetiff_multi_wiol_faxable(ig, fine, images...)"); | |
105 | img_count = items - 2; | |
106 | RETVAL = 1; | |
107 | if (img_count < 1) { | |
108 | RETVAL = 0; | |
109 | i_clear_error(); | |
110 | i_push_error(0, "You need to specify images to save"); | |
111 | } | |
112 | else { | |
113 | imgs = mymalloc(sizeof(i_img *) * img_count); | |
114 | for (i = 0; i < img_count; ++i) { | |
115 | SV *sv = ST(2+i); | |
116 | imgs[i] = NULL; | |
117 | if (SvROK(sv) && sv_derived_from(sv, "Imager::ImgRaw")) { | |
118 | imgs[i] = INT2PTR(i_img *, SvIV((SV*)SvRV(sv))); | |
119 | } | |
120 | else { | |
121 | i_clear_error(); | |
122 | i_push_error(0, "Only images can be saved"); | |
123 | myfree(imgs); | |
124 | RETVAL = 0; | |
125 | break; | |
126 | } | |
127 | } | |
128 | if (RETVAL) { | |
129 | RETVAL = i_writetiff_multi_wiol_faxable(ig, imgs, img_count, fine); | |
130 | } | |
131 | myfree(imgs); | |
132 | } | |
133 | OUTPUT: | |
134 | RETVAL | |
135 | ||
136 | const char * | |
137 | i_tiff_libversion() | |
138 | ||
139 | bool | |
140 | i_tiff_has_compression(name) | |
141 | const char *name | |
142 | ||
143 | ||
144 | BOOT: | |
145 | PERL_INITIALIZE_IMAGER_CALLBACKS; | |
33ca1a7e | 146 | i_tiff_init(); |