Commit | Line | Data |
---|---|---|
b13a3ddb | 1 | #define PERL_NO_GET_CONTEXT |
b00687b2 TC |
2 | #include "EXTERN.h" |
3 | #include "perl.h" | |
4 | #include "XSUB.h" | |
5 | #include "imext.h" | |
6 | #include "imperl.h" | |
7 | #include "imicon.h" | |
13eb8ccd | 8 | #include "ppport.h" |
b00687b2 TC |
9 | |
10 | DEFINE_IMAGER_CALLBACKS; | |
11 | ||
12 | MODULE = Imager::File::ICO PACKAGE = Imager::File::ICO | |
13 | ||
14 | PROTOTYPES: DISABLE | |
15 | ||
16 | Imager::ImgRaw | |
f17a0a60 | 17 | i_readico_single(ig, index, masked = 0, alpha_masked = 0) |
b00687b2 TC |
18 | Imager::IO ig |
19 | int index | |
413dc198 | 20 | bool masked |
f17a0a60 | 21 | bool alpha_masked |
b00687b2 TC |
22 | |
23 | void | |
f17a0a60 | 24 | i_readico_multi(ig, masked = 0, alpha_masked = 0) |
b00687b2 | 25 | Imager::IO ig |
413dc198 | 26 | bool masked |
f17a0a60 | 27 | bool alpha_masked |
b00687b2 TC |
28 | PREINIT: |
29 | i_img **imgs; | |
30 | int count; | |
31 | int i; | |
32 | PPCODE: | |
f17a0a60 | 33 | imgs = i_readico_multi(ig, &count, masked, alpha_masked); |
b00687b2 TC |
34 | if (imgs) { |
35 | EXTEND(SP, count); | |
36 | for (i = 0; i < count; ++i) { | |
37 | SV *sv = sv_newmortal(); | |
38 | sv_setref_pv(sv, "Imager::ImgRaw", (void *)imgs[i]); | |
39 | PUSHs(sv); | |
40 | } | |
41 | myfree(imgs); | |
42 | } | |
43 | ||
2b405c9e TC |
44 | int |
45 | i_writeico_wiol(ig, im) | |
46 | Imager::IO ig | |
47 | Imager::ImgRaw im | |
48 | ||
49 | undef_int | |
50 | i_writeico_multi_wiol(ig, ...) | |
51 | Imager::IO ig | |
52 | PREINIT: | |
53 | int i; | |
54 | int img_count; | |
55 | i_img **imgs; | |
56 | CODE: | |
57 | if (items < 2) | |
58 | croak("Usage: i_writeico_multi_wiol(ig, images...)"); | |
59 | img_count = items - 1; | |
60 | RETVAL = 1; | |
61 | if (img_count < 1) { | |
62 | RETVAL = 0; | |
63 | i_clear_error(); | |
64 | i_push_error(0, "You need to specify images to save"); | |
65 | } | |
66 | else { | |
67 | imgs = mymalloc(sizeof(i_img *) * img_count); | |
68 | for (i = 0; i < img_count; ++i) { | |
69 | SV *sv = ST(1+i); | |
70 | imgs[i] = NULL; | |
71 | if (SvROK(sv) && sv_derived_from(sv, "Imager::ImgRaw")) { | |
72 | imgs[i] = INT2PTR(i_img *, SvIV((SV*)SvRV(sv))); | |
73 | } | |
74 | else { | |
75 | i_clear_error(); | |
76 | i_push_error(0, "Only images can be saved"); | |
77 | myfree(imgs); | |
78 | RETVAL = 0; | |
79 | break; | |
80 | } | |
81 | } | |
82 | if (RETVAL) { | |
83 | RETVAL = i_writeico_multi_wiol(ig, imgs, img_count); | |
84 | } | |
85 | myfree(imgs); | |
86 | } | |
87 | OUTPUT: | |
88 | RETVAL | |
89 | ||
90 | int | |
91 | i_writecur_wiol(ig, im) | |
92 | Imager::IO ig | |
93 | Imager::ImgRaw im | |
94 | ||
95 | undef_int | |
96 | i_writecur_multi_wiol(ig, ...) | |
97 | Imager::IO ig | |
98 | PREINIT: | |
99 | int i; | |
100 | int img_count; | |
101 | i_img **imgs; | |
102 | CODE: | |
103 | if (items < 2) | |
104 | croak("Usage: i_writecur_multi_wiol(ig, images...)"); | |
105 | img_count = items - 1; | |
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(1+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_writecur_multi_wiol(ig, imgs, img_count); | |
130 | } | |
131 | myfree(imgs); | |
132 | } | |
133 | OUTPUT: | |
134 | RETVAL | |
b00687b2 TC |
135 | |
136 | BOOT: | |
137 | PERL_INITIALIZE_IMAGER_CALLBACKS; |