One of these days Crawl will win the Cleanest Code Championship, just you wait… :p
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@4242 c06c8d41-db1a-0410-9941-cceddc491573
5B5DP5S6A6LQMKZYVLQAEMHQZWFWYDHPCKQGRNSCNNYIBQYZ6BIQC
U53UEZG7W3V52N6JWL3X6T3LQUBWQ4FZW3US4WZLKAKLCF7MHMPAC
HAI4YDKI72OBDT5KMMVCO3DOU765OPWCU7GTRKTALFNSDOI4R2LAC
NA7MDJEHYJHBGQXPXGPIHQG2PX4L7YYJH3CDUEJ2EUPOZBF2LFXQC
BLZC4APKXT76IVDHJ7UHBZQJJVW4FOLLDEDAKAGNLF6LZYMWOWOAC
BJXME6SZTKO7R7CAQCD6PKDTNVTU7WQQ54GS5MFB6SB7YFRYRYBQC
LOAHVKQFG57THOYHK6ONP5YUUO2WATATFTW3IETBPJZ5NYO3KZ5AC
32TNF7QPH765BC6VP4KVA4R2REGP6VI7CJ7QW2OOGP66Y7CUNQWQC
YFACWAHJI6DAZDNCI7C4NSSPYFRAKORZTXUFX6PRM6JQ7GCQKHGAC
CRUW4EVU3UDWNKXBCPWWHWXXGE7EMEHKK3PLLUD7NWPYY4K2R3YAC
JJULXW764V5C2HJKZNWQAEWB6QM5YZADD7ZCE35LYTBFEM6PMYCAC
U6OTXM3JN7SGPVIGQ5F6NR2I7J5V7KOWFQ7AVNNRQQDNLBEDMYFQC
AXAM3TX4CUCIPL6ILEJLGJ4D4SMCJYDXGLIB256PBQXXKBIKZ4QAC
25CH7HH4LKXFIZ75YNMXS3TSXO6O27DYSOPLOD45K4OCNFWLS4LQC
L3DRKFURVDCV3EJKGG6GVVQX3D5MZPICTVOKNOD3LGM2PECBA7PQC
JXAB5WYRDGBLKOBEQJLZKIE7YHQ2ZI6LKWEFSNF2TGAHPNUI3SBQC
LP5EK64IEM7AHNYQID4GGKOQJQNZLKY4DCCZN47SIUZ6IXAXH5UAC
5FA5IEAXTMXYS2VUBVDKBKHPKAIOY4GN5SXYJORBYWQIGHVW3FFQC
HBHQQDULNVWISJ75XIL6R6BFEDYRNY22NX3ZTFVNP5ZWJGJSKOEQC
CSRWDG2SUGS4YR4PAFI574EGEXW65P6JDT4ZHWDICS2G2GZIGEUQC
U6ILMKBXTQZYT62IGD2CALYNU4VQGRSTHN6QBFBU7BVUBHWYOEQQC
ND3T5LCZATC63EVQ6SLI7XXMSUL7XICJDNLH3UCYUDEFWTA3N5MQC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
X5WLJCJVW55SXZVP7IKP7ADCJIGNKN4PKAXFECVR6TNK7XSMZR7QC
PVLLIAYFIAU4TQFBIP7B4ARIBUX2CVTSBQECEU6VTONJV4ANHVFAC
DH3YTI6VVI727SQXO4CXSDCSBG2UN3UAWLFULBGRLBVH22ACRXIAC
2TECJQA3PK7OYSSTOWZSQFWMTATJRHHA6JV3IGRHFGS3R7U27RZAC
LBOWQK6P35RBX6CTIW5RFQVGRYNJ6XP3TVAAQCQ5ABBCEQAXIMXQC
QSJECU2LZOQ5K5QUQDQOPQ4J3GAZEE5ZWIIM4DVBXYLVVX5DYLWQC
TM35IHKZZNBCMR3ERBS4EYHGUK5IVCPUT2JUITMT74AYAIUZSYFQC
6PNVX6Q45HH733TZDXYBA6BYPJKDMND5BA4N2MP6HA3QVNCEPN2QC
3VWSZUGYL36SO5AOZRASGK3VHFCFZUGGCGRT3R7BZB36IZPN7OSQC
CZCG4FOXPQXXUCGKK4W2IHUJK2PXUZJ22IAA6UIZ2EU7WX7VLOBQC
NO2HRD7RZS42S55UG4FQ5EFQDY6WYWKGIXHUKYLWF36HHE3VZ7WAC
SDLKLUNFGVKDS55DDJZCBAVIB7NL3RRYPTACAY65SCUQKV6APFSAC
7PRZJ6KZLG26YVTAMXT7YOTQLWZHGWGRTKXZZ52P4XYCQD4GT5WQC
43ZTEB57FU7KE5EVMYWZONNVJBZCGF3JEAJZIY25LC4LGE65PG5QC
TUKBRR44ONNRAUYHTQTQIYIQPFK752EGWEZ5A5PULTTQDEDD7DRAC
HYS3HXTXATFPN7GLN3WBGDCP22UT2D3JBVUS7SP5FE7L54TDCJRQC
7NDXS36TE7QVXTXJWMYSVG5UHCCLPIO4VL6NXFGTDK3ZNKE3A2IAC
HL47H6Q4SA2KSPHWZSOCGHHCDB6JGC4LLHPA4JUHNCCPF2ZGQNTAC
TRCCLE5RJ4VJULBOWOI2WC3RJU7WTEGS7RRQTDQL6W5UU246LKTQC
JR2RAQ523LOWNDYJNK6AZVKI6WVMI622PIV72XWOVZYPXPUKSQWAC
BRGAZR5AXWC2IALBVXO5SB354IRQEIRHSK55RZPGFI4AGIOD4LUQC
LIBWXPN6HLJAIGEFJYLOL4HLIUD236U3WM5QPHIZ3DSB4CCUJERAC
T5XERKCC6UL2UI2HKE34BTKNINTOXOSDCBYGC3A3JY7XMKIQW4GQC
IE3INS4WUXZOBVXB5VWRBYPVPXADD2U2W5H3TBTOYNWJ3EGRSGQQC
WDEFQ6YABDQIGJXW5KT3OGR3EO6FZHXZELIRVIXQ4XDYTVOV5V6AC
F7Q5PX44SLPANIZXCY67TG2W5JTRVJMHGQW54VJLGB4XRH7R6JBQC
CG4TL4AKSN4J7CMATZFJ5N7PSDCQXLS3QYX7PZ3K67KMMBT675OQC
RBAGQ2PB7V5YAM5KSHSZR2E3MLKDSRVM5XYGI2TIXP5QMVBOQHDQC
Y2VKZYSQXLYYQNB6OSQP44IYLT2M56SE2ZW2MHOAZUODKCVDHEAQC
BXXOYFMWNQY4TLLJBFYROSH43KO5F4JQTATU3ZEJNKGIJGOIQN4AC
FCZSQBKDNMJZRJS2LWQQWLUFGOXSKXDJZQIHC7L5S7HXCXQPOMMAC
WCK6TM2ZD56WSOK6SMMKBYAYGG4OUCTILLMVVLMB4QO5I5S2IVNAC
RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC
6KCWO7XCDBGOYSUWVEXC74XC6RZ7ZJQLLSES5IIPCTILTECYMFZAC
BW3XFNOS6LDAQLHOZ6RXARCMKCY5JVLVDSXDSSAX4DSYM3FANQBAC
EOMCPVNQLX3IMLC46EAO67DPBH5KEG2FQTPBLGU62HIRWA3UQ7XQC
2B4AQJIATJ4E7RFN6OTQITZNDBAPQ2VWWXLBCVYSORAFG2GIIDNQC
ID2OZJTHFXL74RVUCS3JCMDQEUHAXCQFZU7235VU6IEVAAUWD2FAC
BFZZ7DFLZM4WNHQOKWDJENZOLMXH3UPHZ437BMISYJ3VSO2Y57WQC
6HQB2N6N75R2RGKJFWRUN7WAC2PNGWQFXTII5DTRLTHZ2BOTMTVAC
GL6SGPBZQPJBVGPOASYVCTAFXS7RNARR6Y5WZMIO5YCTB7ZJY4KAC
XX62GOJVDP352L4BH7MELNYXHMZNA6VAGF7B6RWWOSULX7VJR5YAC
EBKAEAW4GZ3VQNWXMW7AISS3ZUHOBZ56FSWJ6H57I43MTT4Y6XXQC
EWJXUTTGMQTA6Q7ITOYVBPIWMZ55LBHXTLYCEV4YCFPS7DRCJ7GQC
QXQE7C5XDYNF4JSHGDAVMS7HYLOC6YEZFOVFJ3RD7RB6U4AJSFIQC
GSQ72ULBSL6WBJZUB3GJKAPQDXZIQV7B2TDBA5OP2WVGHVJMCQFQC
JYCMD6WMNHXA53K4LLKVTNX6PLRLU25F6J2TYMPQXM2ENAE66NIAC
JM7UAK777RAVDAVLQLEOBRTGNW2B47S5G55XITJXO243IUNZHVYQC
IIN7AVA6JYRBXH6ZYRR7BY7TV6PW7ANAQ2A3PD55FKBKKQFEEF2AC
NEECVIIAOBP72T6O44DWAA6HFSDY3KSWYCFMKAEMDMVOI7XASD7QC
UB73UGG2GEG6AL4T76UILFLTELH4Z5WN54UROLJD6RDR3JG77CXAC
XNYPQTF74HLRSKTEVLTNCDB43YHWOFTQL5TVSNO6WWPAJGZSCYKQC
NQIXUYGUIQTKZUB2IQDII7BBDMZ4VN4NUUTGT2ARQBZTDJUMPKRQC
O6ZMFKDI3XO2SWPNEYHIPYFDWJR4TVDP5BAATK6LVCVETQID6E7AC
TJISAZK5RWKXIIC5UTQNY4KT3UX3ASGBUQQNWZ7ZDULPRYFRZXQQC
IHOKNI4O7EEW4UBMKHP6XOZNEIQSW4AYOT4O3JXUIXNNR553IQAQC
M5JRISNFA35UTUE6EZKABYLNFLD5Y2CM3CEASFEWM4QRNYC3UK3QC
C4WXQRJTDW53PYFWQ4LOINSCI2IWMIQTH5WDSI7QUP72PKDBYHZAC
MZLB3Q7G4EC2BR3OFMG55WPHXPFJGQSLWAIHHFJEAEATPUTYR7EAC
T4IH76FA5TWHFOZUJFHLQXQJENJHWTUZZP4EGNA7D4GTZY7D4ZKAC
TW7QOMTSLYPGUUWHGHLY5G5LV6QQRQIKK4BSE64RY7RDGKVDHCEAC
HNXKX6ZDQJV33E7UKZOLBYWJMRZ4QLEMXVXJZNRCTOIG2KVRTIEAC
RC6L3CIBLJEH4GWRFD7UQNGI6PZT74FRUVOYHSAN2XCC74NZUASQC
NCDWWDJQLAU5ORSAQGZKJJ5E22VTDGGPJMVVBWQFHQ2B3U3UFHDQC
2NCKGJDDPPGP2NXYYPEPVRJIIWEP6M7HE6WYMQN3UNNN3C2JIRFQC
52J7CYVAW3QCUEWA5OKWPDGOP6JZR5NJSE3JDLZFBCR7B6LH5ASAC
SW3RLYFNRT3IJBK6LYKHKP2J2YDU7SXQWAJZX7U6S7ICYW43OMNQC
45EMD3KLQPMERNMIKU5G76H6556XOMIW352TSBP7VLWJX2YYGS7AC
GTPAKUU3R5AS3LQNCCZIP3BWV473RM4EB2AIS4FXAJRXHEOVH2PAC
2WRXQTGYDBLV46WRNVIUKGNA5QS563XZNNW3N2L6PVOCHIP2YGHQC
5BJPWUPLJFS34FUTFJVKA4A52YMIGV6EWDXLNSDCWBJWBGVSQFGQC
XYBPIU6AQ77EID4VNOMI7KQZULZI4VBZHHIGBRYO7QRJVCODEKYAC
ZJLJGSB2XSBQU42OFQMXL3EG4CXAQGOYAU6YTV2SAWZEJIPFH2CAC
TLO257LZSB6ZO36STDUEWJBO2LETXFKTFGXELA6Y4BZBVAEIIINAC
GQL5SIGBHLU3FMCE54XVGLRY5AZHRM6DUEB722REA2DPLGJSN6EQC
YRY2TC3VHOYE47M23UJGUWDGF7H7WGU7WLWI4SUNM4EDNTGUPHGAC
77H4BWWPPGLM3PLZH4QTAJRXIZTSDVNCOKZE223I437FN2UJ34RQC
7AMQN7MITMXBNVDAK5VOXTQ4TZIAOD6ZLOFJG7GQMBTY23Y2BKSAC
T6TL6NTIOBYNUIONGK3JFZJ5ONWV6S4CTIRDC5JMKMCBGG5IY3EAC
ESWIM76FGJL4QFLSHU6AC4D74PT7OPLQ7ZCJYWLZS5UCBAJDXYHAC
BWAQ3FHBBM6G3K3KYP75CRTR343RDQZJRYX5ZGYUEXYBAC3APDLAC
LUNOTEIMYZJ7JL5P55GEHUVSDEZMYX3TWYUB2ABRHAYJEWQSSXIAC
WXSNNK2RXP3DQFAEQGQUZJHFWXJC7ZKG2WURZGL566UDM4YXFSWQC
XRZPPYWPWUOM4SFNI6BHKH2UKJQNLKOV6Y7XIEPEZXE5QYRT26PAC
5K2ANIEXD3CPJM4XNKNPZINP2G4NT7SJBKRN62WNBUKJXFERTILQC
M47QBURKKRV2JFK6U7GQNVWK7RUTBVPBJ5FHURC55SKQSXAUFSBAC
CE6FLTWU5PYFBSGVTIJXQXRMHOIHQ3VJCKHQVIMUUAIFHQ73X7NAC
HSRRNAU5UAYC6B6IQWGJPFROMZBTJICPCH6DJVZDHDTAGOQ6IOYAC
LAMIVDKY7LO5ONX5Z273ZCCEA5UBENOJD5VWNE4AK2EXGFED6BFQC
7NFVYCNQ54IN77PF334ADAF4YQT6LEABMAIZF4Y4BH5C3CYXYQGQC
W2KRIXSCRJPS6WDIYTHVF5IRMF3V5DWECRAWUPVTB7VZ6A2BLD4QC
NXVPOFYKJFWQWKVPQUMWH2Y2KJEZX44BUOBFJ4JD4KFGPEGYHG4QC
HXCUOTXRRUHNEBWC54HLSOKI5PGFQTAQU67ODHQ5HKG5FHIPOHFQC
ZIFFVCQ72K35WGIUMZYN3KOXIUXF2CNXWKG6ZWEZ6LT3NSF3XOQAC
GOPBXMJ7EKKPDSDXCANWW6ARWGNLOQ5DK7WI4UPD7K2GCDSK2HXAC
YH23OR26YDA6C5K74QRWHROMTPGRNZHTHE4HJGPC3JVNAJ62CHGAC
65CM2EZCAFFBWLAYZ7ALBV3BQKNZCYOHYIFY46KU7BZL3LHV36JAC
DBGS3HXMW24VO5GBITT3UI2ZNIISUXUHAEAYUI52QPUT7IO46ITQC
KQNIGKATHT4YSPJFPJGIGPD6VNR5B753SE2JN2LCXZZJNHCGY3DQC
// The a == 0 test is legacy code that I don't dare to remove. I
// have a vague recollection of it being a kludge for conio support.
// The a == 0 test is legacy code that I don't dare to remove. I
// have a vague recollection of it being a kludge for conio support.
/*
* Replacement for getch(). Returns keys from the key buffer if available.
* If not, adds some content to the buffer, and returns some of it.
/*
* Replacement for getch(). Returns keys from the key buffer if available.
* If not, adds some content to the buffer, and returns some of it.
/*
* Replacement for getch(). Returns keys from the key buffer if available.
* If not, adds some content to the buffer, and returns some of it.
/*
* Replacement for getch(). Returns keys from the key buffer if available.
* If not, adds some content to the buffer, and returns some of it.
ASSERT(sx>=0);
ASSERT(sy>=0);
ASSERT(sx+wx<=(src->width));
ASSERT(sy+wy<=(src->height));
ASSERT(dx>=0);
ASSERT(dy>=0);
ASSERT(dx+wx<=(dest->width));
ASSERT(dy+wy<=(dest->height));
ASSERT(sx >= 0);
ASSERT(sy >= 0);
ASSERT(sx + wx <= src->width);
ASSERT(sy + wy <= src->height);
ASSERT(dx >= 0);
ASSERT(dy >= 0);
ASSERT(dx + wx <= dest->width);
ASSERT(dy + wy <= dest->height);
ASSERT(sx>=0);
ASSERT(sy>=0);
ASSERT(sx+wx<=(src->width));
ASSERT(sy+wy<=(src->height));
ASSERT(dx>=0);
ASSERT(dy>=0);
ASSERT(dx+wx<=(dest->width));
ASSERT(dy+wy<=(dest->height));
ASSERT(sx >= 0);
ASSERT(sy >= 0);
ASSERT(sx + wx <= src->width);
ASSERT(sy + wy <= src->height);
ASSERT(dx >= 0);
ASSERT(dy >= 0);
ASSERT(dx + wx <= dest->width);
ASSERT(dy + wy <= dest->height);
ASSERT(sx>=0);
ASSERT(sy>=0);
ASSERT(sx+wx<=(src->width));
ASSERT(sy+wy<=(src->height));
ASSERT(dx>=0);
ASSERT(dy>=0);
ASSERT(dx+wx<=(dest->width));
ASSERT(dy+wy<=(dest->height));
ASSERT(sx >= 0);
ASSERT(sy >= 0);
ASSERT(sx + wx <= src->width);
ASSERT(sy + wy <= src->height);
ASSERT(dx >= 0);
ASSERT(dy >= 0);
ASSERT(dx + wx <= dest->width);
ASSERT(dy + wy <= dest->height);
ASSERT(sx>=0);
ASSERT(sy>=0);
ASSERT(sx+wx<=(src->width));
ASSERT(sy+wy<=(src->height));
ASSERT(dx>=0);
ASSERT(dy>=0);
ASSERT(dx+wx<=(dest->width));
ASSERT(dy+wy<=(dest->height));
ASSERT(sx >= 0);
ASSERT(sy >= 0);
ASSERT(sx + wx <= src->width);
ASSERT(sy + wy <= src->height);
ASSERT(dx >= 0);
ASSERT(dy >= 0);
ASSERT(dx + wx <= dest->width);
ASSERT(dy + wy <= dest->height);
char sig_buf [SIG_CHECK_SIZE];
png_struct *png_ptr;
png_info *info_ptr;
png_byte **png_image;
png_byte *png_pixel;
unsigned int x, y;
int linesize;
png_uint_16 c;
unsigned int i;
char sig_buf [SIG_CHECK_SIZE];
png_struct *png_ptr;
png_info *info_ptr;
png_byte **png_image;
png_byte *png_pixel;
unsigned int x, y;
int linesize;
png_uint_16 c;
unsigned int i;
if(!ifp) { fprintf(stderr, "File not found: %s", fname); return NULL; }
if (fread (sig_buf, 1, SIG_CHECK_SIZE, ifp) != SIG_CHECK_SIZE)
pm_error ("input file empty or too short");
if (png_sig_cmp ((unsigned char *)sig_buf, (png_size_t) 0,
(png_size_t) SIG_CHECK_SIZE) != 0)
{
pm_error ("input file not a PNG file");
}
if (fread (sig_buf, 1, SIG_CHECK_SIZE, ifp) != SIG_CHECK_SIZE)
pm_error ("input file empty or too short");
if (png_sig_cmp ((unsigned char *)sig_buf, (png_size_t) 0, (png_size_t) SIG_CHECK_SIZE) != 0)
pm_error ("input file not a PNG file");
png_ptr = png_create_read_struct (PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
if (png_ptr == NULL)
pm_error ("cannot allocate LIBPNG structure");
png_ptr = png_create_read_struct (PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
if (png_ptr == NULL) {
pm_error ("cannot allocate LIBPNG structure");
}
info_ptr = png_create_info_struct (png_ptr);
if (info_ptr == NULL) {
png_destroy_read_struct (&png_ptr, (png_infopp)NULL, (png_infopp)NULL);
pm_error ("cannot allocate LIBPNG structures");
}
info_ptr = png_create_info_struct (png_ptr);
if (info_ptr == NULL)
{
png_destroy_read_struct (&png_ptr, (png_infopp)NULL, (png_infopp)NULL);
pm_error ("cannot allocate LIBPNG structures");
}
if (setjmp (png_ptr->jmpbuf)) {
png_destroy_read_struct (&png_ptr, (png_infopp)NULL, (png_infopp)NULL);
free (png_ptr);
free (info_ptr);
pm_error ("setjmp returns error condition");
}
if (setjmp (png_ptr->jmpbuf))
{
png_destroy_read_struct (&png_ptr, (png_infopp)NULL, (png_infopp)NULL);
free (png_ptr);
free (info_ptr);
pm_error ("setjmp returns error condition");
}
png_image = (png_byte **)malloc (info_ptr->height * sizeof (png_byte*));
if (png_image == NULL) {
free (png_ptr);
free (info_ptr);
pm_error ("couldn't alloc space for image");
}
if (info_ptr->color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
linesize *= 2;
else if (info_ptr->color_type == PNG_COLOR_TYPE_RGB)
linesize *= 3;
else if (info_ptr->color_type == PNG_COLOR_TYPE_RGB_ALPHA)
linesize *= 4;
if (info_ptr->bit_depth == 16)
linesize = 2 * info_ptr->width;
else
linesize = info_ptr->width;
for (y = 0 ; y < info_ptr->height ; y++)
{
png_image[y] = (png_byte *)malloc (linesize);
if (png_image[y] == NULL)
{
for (x = 0; x < y; x++)
free (png_image[x]);
if (info_ptr->color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
linesize *= 2;
else
if (info_ptr->color_type == PNG_COLOR_TYPE_RGB)
linesize *= 3;
else
if (info_ptr->color_type == PNG_COLOR_TYPE_RGB_ALPHA)
linesize *= 4;
for (y = 0 ; y < info_ptr->height ; y++) {
png_image[y] = (png_byte *)malloc (linesize);
if (png_image[y] == NULL) {
for (x = 0 ; x < y ; x++)
free (png_image[x]);
free (png_image);
free (png_ptr);
free (info_ptr);
pm_error ("couldn't alloc space for image");
free (png_image);
free (png_ptr);
free (info_ptr);
pm_error ("couldn't alloc space for image");
}
info_ptr->sig_bit.red != info_ptr->sig_bit.blue) ) {
pm_message ("different bit depths for color channels not supported");
pm_message ("writing file with %d bit resolution", info_ptr->bit_depth);
} else
if ((info_ptr->color_type == PNG_COLOR_TYPE_PALETTE) &&
(info_ptr->sig_bit.red < 255)) {
for (i = 0 ; i < info_ptr->num_palette ; i++) {
info_ptr->palette[i].red >>= (8 - info_ptr->sig_bit.red);
info_ptr->palette[i].green >>= (8 - info_ptr->sig_bit.green);
info_ptr->palette[i].blue >>= (8 - info_ptr->sig_bit.blue);
}
info_ptr->sig_bit.red != info_ptr->sig_bit.blue) )
{
pm_message ("different bit depths for color channels not "
"supported");
pm_message ("writing file with %d bit resolution",
info_ptr->bit_depth);
}
else if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE
&& info_ptr->sig_bit.red < 255)
{
for (i = 0 ; i < info_ptr->num_palette ; i++)
{
info_ptr->palette[i].red >>= (8 - info_ptr->sig_bit.red);
info_ptr->palette[i].green >>= (8 - info_ptr->sig_bit.green);
info_ptr->palette[i].blue >>= (8 - info_ptr->sig_bit.blue);
}
}
else if ((info_ptr->color_type == PNG_COLOR_TYPE_GRAY
|| info_ptr->color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
&& info_ptr->sig_bit.gray < info_ptr->bit_depth)
{
png_set_shift (png_ptr, &(info_ptr->sig_bit));
}
}
} else
if ((info_ptr->color_type == PNG_COLOR_TYPE_GRAY ||
info_ptr->color_type == PNG_COLOR_TYPE_GRAY_ALPHA) &&
(info_ptr->sig_bit.gray < info_ptr->bit_depth)) {
png_set_shift (png_ptr, &(info_ptr->sig_bit));
}
if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
{
//X11
for (i = 0 ; i < info_ptr->num_palette ; i++)
pix_table[i] = create_pixel(info_ptr->palette[i].red,
}
if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
{
//X11
for (i = 0 ; i < info_ptr->num_palette ; i++)
pix_table[i] = create_pixel(info_ptr->palette[i].red,
info_ptr->palette[i].green, info_ptr->palette[i].blue);
}
else
if (info_ptr->color_type == PNG_COLOR_TYPE_GRAY)
{
info_ptr->palette[i].green, info_ptr->palette[i].blue);
}
else if (info_ptr->color_type == PNG_COLOR_TYPE_GRAY)
{
//X11
for (y = 0 ; y < info_ptr->height ; y++) {
png_pixel = png_image[y];
for (x = 0 ; x < info_ptr->width ; x++) {
c = *png_pixel;
png_pixel++;
XPutPixel(res, x, y, pix_table[c]);
for (y = 0; y < info_ptr->height; y++)
{
png_pixel = png_image[y];
for (x = 0; x < info_ptr->width; x++)
{
c = *png_pixel;
png_pixel++;
XPutPixel(res, x, y, pix_table[c]);
}
std_palette[i].rgbRed = pPal[i].rgbRed ;
std_palette[i].rgbGreen = pPal[i].rgbGreen;
std_palette[i].rgbBlue = pPal[i].rgbBlue ;
std_palette[i].rgbRed = pPal[i].rgbRed ;
std_palette[i].rgbGreen = pPal[i].rgbGreen;
std_palette[i].rgbBlue = pPal[i].rgbBlue ;
backbuf->pDib->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
backbuf->pDib->bmiHeader.biPlanes = 1;
backbuf->pDib->bmiHeader.biBitCount = 8;
backbuf->pDib->bmiHeader.biCompression=BI_RGB;
backbuf->pDib->bmiHeader.biSizeImage=0;
backbuf->pDib->bmiHeader.biXPelsPerMeter=0;
backbuf->pDib->bmiHeader.biYPelsPerMeter=0;
backbuf->pDib->bmiHeader.biClrUsed=0;
backbuf->pDib->bmiHeader.biClrImportant=0;
backbuf->pDib->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
backbuf->pDib->bmiHeader.biPlanes = 1;
backbuf->pDib->bmiHeader.biBitCount = 8;
backbuf->pDib->bmiHeader.biCompression = BI_RGB;
backbuf->pDib->bmiHeader.biSizeImage = 0;
backbuf->pDib->bmiHeader.biXPelsPerMeter = 0;
backbuf->pDib->bmiHeader.biYPelsPerMeter = 0;
backbuf->pDib->bmiHeader.biClrUsed = 0;
backbuf->pDib->bmiHeader.biClrImportant = 0;
backbuf->pDib->bmiHeader.biWidth = mx*dx;
backbuf->pDib->bmiHeader.biHeight = my*dy;
backbuf->Width = mx * dx;
backbuf->Height= my * dy;
backbuf->pDib->bmiHeader.biWidth = mx*dx;
backbuf->pDib->bmiHeader.biHeight = my*dy;
backbuf->Width = mx * dx;
backbuf->Height = my * dy;
scol[i].rgbBlue = map_colors[i][2];
scol[i].rgbGreen = map_colors[i][1];
scol[i].rgbRed = map_colors[i][0];
scol[i].rgbReserved = 0;
scol[i].rgbBlue = map_colors[i][2];
scol[i].rgbGreen = map_colors[i][1];
scol[i].rgbRed = map_colors[i][0];
scol[i].rgbReserved = 0;
if ( (backbuf->pDib->bmiColors[i].rgbRed == 0)
&&(backbuf->pDib->bmiColors[i].rgbGreen == 0)
&&(backbuf->pDib->bmiColors[i].rgbBlue == 0) )
if (backbuf->pDib->bmiColors[i].rgbRed == 0
&& backbuf->pDib->bmiColors[i].rgbGreen == 0
&& backbuf->pDib->bmiColors[i].rgbBlue == 0)
{
(WS_OVERLAPPED | WS_SYSMENU |
WS_MINIMIZEBOX | WS_CAPTION |
WS_VISIBLE),
ox, oy, //pos
rc.right - rc.left, rc.bottom - rc.top, //size
HWND_DESKTOP, NULL, hInst, NULL);
(WS_OVERLAPPED | WS_SYSMENU | WS_MINIMIZEBOX
| WS_CAPTION | WS_VISIBLE),
ox, oy, //pos
rc.right - rc.left, rc.bottom - rc.top, //size
HWND_DESKTOP, NULL, hInst, NULL);
fh=CreateFile(name, GENERIC_READ,0,NULL,OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,NULL);
if (fh == INVALID_HANDLE_VALUE) return NULL;
fh = CreateFile(name, GENERIC_READ, 0, NULL, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, NULL);
if (fh == INVALID_HANDLE_VALUE)
return NULL;
for(x=0;x<wx;x++){
for(y=0;y<wy;y++){
pix = *( dib_ref_pixel(src, sx+x, sy+y) );
*( dib_ref_pixel(dest, dx+x, dy+y) ) = pix;
}}
for (x = 0; x < wx; x++)
for (y = 0; y < wy; y++)
{
pix = *( dib_ref_pixel(src, sx+x, sy+y) );
*( dib_ref_pixel(dest, dx+x, dy+y) ) = pix;
}
for(x=0;x<wx;x++){
for(y=0;y<wy;y++){
pix = *( dib_ref_pixel(src, sx+x, sy+y) );
if(pix!=pix_transparent)
*( dib_ref_pixel(dest, dx+x, dy+y) ) = pix;
}}
for (x = 0; x < wx; x++)
for (y = 0; y < wy; y++)
{
pix = *( dib_ref_pixel(src, sx+x, sy+y) );
if (pix!=pix_transparent)
*( dib_ref_pixel(dest, dx+x, dy+y) ) = pix;
}
for(x=0;x<wx;x++){
for(y=0;y<wy;y++){
pix = *( dib_ref_pixel(src, sx+x, sy+y) );
if (pix == pix_rimcolor) pix = pix_magenta;
*( dib_ref_pixel(dest, dx+x, dy+y) ) = pix;
}}
for (x = 0; x < wx; x++)
for (y = 0; y < wy; y++)
{
pix = *( dib_ref_pixel(src, sx+x, sy+y) );
if (pix == pix_rimcolor) pix = pix_magenta;
*( dib_ref_pixel(dest, dx+x, dy+y) ) = pix;
}
for(x=0;x<wx;x++){
for(y=0;y<wy;y++){
pix = *( dib_ref_pixel(src, sx+x, sy+y) );
if (pix == pix_rimcolor) pix = pix_magenta;
if(pix!=pix_transparent) *( dib_ref_pixel(dest, dx+x, dy+y) ) = pix;
}}
for (x = 0; x < wx; x++)
for (y = 0; y < wy; y++)
{
pix = *( dib_ref_pixel(src, sx+x, sy+y) );
if (pix == pix_rimcolor)
pix = pix_magenta;
if (pix != pix_transparent)
*( dib_ref_pixel(dest, dx+x, dy+y) ) = pix;
}
for(y=0;y<wy;y++){
for(x=0;x<wx;x++){
pix = *( dib_ref_pixel(src, sx+x, sy+y) );
if (mask[count]==0 && pix != pix_transparent)
*( dib_ref_pixel(dest, dx+x, dy+y) ) = pix;
count++;
}}
for (y = 0; y < wy; y++)
for (x = 0; x < wx; x++)
{
pix = *( dib_ref_pixel(src, sx+x, sy+y) );
if (mask[count]==0 && pix != pix_transparent)
*( dib_ref_pixel(dest, dx+x, dy+y) ) = pix;
count++;
}
for(y=0;y<wy;y++){
for(x=0;x<wx;x++){
pix = *( dib_ref_pixel(src, sx+x, sy+y) );
if (pix == pix_rimcolor) pix = pix_magenta;
if (mask[count]==0 && pix != pix_transparent)
*( dib_ref_pixel(dest, dx+x, dy+y) ) = pix;
count++;
}}
for (y = 0; y < wy; y++)
for (x = 0; x < wx; x++)
{
pix = *( dib_ref_pixel(src, sx+x, sy+y) );
if (pix == pix_rimcolor)
pix = pix_magenta;
if (mask[count]==0 && pix != pix_transparent)
*( dib_ref_pixel(dest, dx+x, dy+y) ) = pix;
count++;
}
do {
if (find_description(again, error))
if ( getch() == 0 )
getch();
do
{
// resets 'again'
if (find_description(again, error) && getch() == 0 )
getch();