Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?h64020
Toshihiro Shimizu 890ddd
?s 00077 / 00001 / 08351
Toshihiro Shimizu 890ddd
?d D 1.105 00 / 11 / 24 20 : 06 : 53 vincenzo 105 104
Toshihiro Shimizu 890ddd
?c rop_mirror per cmapped
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00015 / 00003 / 08337
Toshihiro Shimizu 890ddd
?d D 1.104 00 / 02 / 18 15 : 59 : 01 max 104 103
Toshihiro Shimizu 890ddd
?c fix baco in rop_premultiply RGBM64 RGBM64;
Toshihiro Shimizu 890ddd
rop_copy funz.su RAS_BW, RAS_BW
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00001 / 00000 / 08339
Toshihiro Shimizu 890ddd
?d D 1.103 00 / 01 / 12 12 : 08 : 57 vincenzo 103 102
Toshihiro Shimizu 890ddd
?c rop_copy CM24->GR16
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00005 / 00000 / 08334
Toshihiro Shimizu 890ddd
?d D 1.102 99 / 11 / 25 11 : 02 : 20 max 102 101
Toshihiro Shimizu 890ddd
?c rop mirror gestisce WB e BW
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00002 / 00000 / 08332
Toshihiro Shimizu 890ddd
?d D 1.101 99 / 11 / 12 16 : 22 : 09 vincenzo 101 100
Toshihiro Shimizu 890ddd
?c rop_copy_cm16s12->rgbm
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00002 / 00001 / 08330
Toshihiro Shimizu 890ddd
?d D 1.100 99 / 10 / 28 10 : 10 : 09 max 100 99
Toshihiro Shimizu 890ddd
?c rop_mirror supporta anche rastype RAS_WB
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00016 / 00000 / 08315
Toshihiro Shimizu 890ddd
?d D 1.99 99 / 08 / 20 09 : 53 : 22 vincenzo 99 98
Toshihiro Shimizu 890ddd
?c messaggi(disattivati) di diagnostica sulla memoria
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00090 / 00000 / 08225
Toshihiro Shimizu 890ddd
?d D 1.98 99 / 05 / 17 17 : 28 : 42 vincenzo 98 97
Toshihiro Shimizu 890ddd
?c CM16S12
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00006 / 00021 / 08219
Toshihiro Shimizu 890ddd
?d D 1.97 99 / 04 / 01 17 : 59 : 05 vincenzo 97 96
Toshihiro Shimizu 890ddd
?c conversioni varie utilizzate per salvare i.mov
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00374 / 00191 / 07866
Toshihiro Shimizu 890ddd
?d D 1.96 99 / 03 / 26 19 : 19 : 15 vincenzo 96 95
Toshihiro Shimizu 890ddd
?c rop_xrgb1555
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00484 / 00000 / 07573
Toshihiro Shimizu 890ddd
?d D 1.95 99 / 03 / 03 16 : 08 : 21 max 95 94
Toshihiro Shimizu 890ddd
?c + rop_copy rgbx64->rgbx, rgbx64->rgb16;
Toshihiro Shimizu 890ddd
+ rop_zoom_out rgbx64->rgbx, rgbx64->rgb16, rgbm64->rgbm
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00013 / 00009 / 07560
Toshihiro Shimizu 890ddd
?d D 1.94 99 / 02 / 25 17:04:34 tross 94 93
Toshihiro Shimizu 890ddd
?c rop_subimage_to_raster anche per RGBM64
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00007 / 00006 / 07562
Toshihiro Shimizu 890ddd
?d D 1.93 99 / 02 / 20 15:51:08 tross 93 92
Toshihiro Shimizu 890ddd
?c corretta rop_clear(sbagliava se y1 != 0)
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00001 / 00001 / 07567
Toshihiro Shimizu 890ddd
?d D 1.92 99 / 02 / 17 19:07:11 vincenzo 92 91
Toshihiro Shimizu 890ddd
?c la clone_raster fa anche gli extra
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00020 / 00016 / 07548
Toshihiro Shimizu 890ddd
?d D 1.91 99 / 02 / 15 17:31:49 tross 91 90
Toshihiro Shimizu 890ddd
?c corretta la clone_raster per CM
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00029 / 00002 / 07535
Toshihiro Shimizu 890ddd
?d D 1.90 99 / 02 / 15 17:22:14 vincenzo 90 89
Toshihiro Shimizu 890ddd
?c RAS_GR16
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00713 / 00426 / 06824
Toshihiro Shimizu 890ddd
?d D 1.89 99 / 01 / 11 18:03:57 tross 89 88
Shinya Kitaoka 120a6e
?c migliorati extra:corretti bachi e aggiunte funz -
Shinya Kitaoka 120a6e
                           corretta
Shinya Kitaoka 120a6e
                               rop_custom_fill_cmap_penramp(baco tcheck cm24)
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00034 / 00002 / 07216
Shinya Kitaoka 120a6e
?d D 1.88 98 / 12 / 14
Shinya Kitaoka 120a6e
                        16:
Shinya Kitaoka 120a6e
                        21:17 vincenzo 88 87
Toshihiro Shimizu 890ddd
?c ristrutturazione megagalattica per le dll
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00013 / 00000 / 07205
Shinya Kitaoka 120a6e
?d D 1.87 98 / 10 / 23
Shinya Kitaoka 120a6e
                        17:
Shinya Kitaoka 120a6e
                        21:44 vincenzo 87 86
Toshihiro Shimizu 890ddd
?c convert_raster
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00007 / 00001 / 07198
Shinya Kitaoka 120a6e
?d D 1.86 98 / 09 / 24
Shinya Kitaoka 120a6e
                        18:
Shinya Kitaoka 120a6e
                        32:38 tross 86 85
Toshihiro Shimizu 890ddd
?c messa cmap.info in create_raster()
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00003 / 00000 / 07196
Shinya Kitaoka 120a6e
?d D 1.85 98 / 09 / 14
Shinya Kitaoka 120a6e
                        16:
Shinya Kitaoka 120a6e
                        15:32 vincenzo 85 84
Toshihiro Shimizu 890ddd
?c clone_raster mette anchge la cmap
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 01500 / 00701 / 05696
Shinya Kitaoka 120a6e
?d D 1.84 98 / 09 / 14
Shinya Kitaoka 120a6e
                        15:
Shinya Kitaoka 120a6e
                        57:39 tross 84 83
Toshihiro Shimizu 890ddd
?c modifiche per CM24, velocizzati[un] premult_lpixel
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00044 / 00064 / 06353
Shinya Kitaoka 120a6e
?d D 1.83 98 / 08 / 14
Shinya Kitaoka 120a6e
                        17:
Shinya Kitaoka 120a6e
                        14:44 tross 83 82
Toshihiro Shimizu 890ddd
?c tolti UNICM
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00013 / 00014 / 06404
Shinya Kitaoka 120a6e
?d D 1.82 98 / 08 / 14
Shinya Kitaoka 120a6e
                        14:
Shinya Kitaoka 120a6e
                        39:55 tross 82 81
Toshihiro Shimizu 890ddd
?c tolto cmap.size
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00348 / 00177 / 06070
Shinya Kitaoka 120a6e
?d D 1.81 98 / 07 / 16
Shinya Kitaoka 120a6e
                        20:
Shinya Kitaoka 120a6e
                        02:00 tross 81 80
Toshihiro Shimizu 890ddd
?c rop_copy e rop_zoom_out rgb_rgb16
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00028 / 00000 / 06219
Shinya Kitaoka 120a6e
?d D 1.80 98 / 07 / 10
Shinya Kitaoka 120a6e
                        18:
Shinya Kitaoka 120a6e
                        32:08 vincenzo 80 79
Toshihiro Shimizu 890ddd
?c create_subraster e clone_raster
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00005 / 00014 / 06214
Shinya Kitaoka 120a6e
?d D 1.79 98 / 06 / 09
Shinya Kitaoka 120a6e
                        17:
Shinya Kitaoka 120a6e
                        29:54 vincenzo 79 78
Toshihiro Shimizu 890ddd
?c eliminata struct cmap_color
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00025 / 00025 / 06203
Shinya Kitaoka 120a6e
?d D 1.78 98 / 03 / 26
Shinya Kitaoka 120a6e
                        01:
Shinya Kitaoka 120a6e
                        07:03 tross 78 77
Toshihiro Shimizu 890ddd
?c assert(FALSE)-- > abort()per problemi di GP piena
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00038 / 00000 / 06190
Shinya Kitaoka 120a6e
?d D 1.77 98 / 03 / 13
Shinya Kitaoka 120a6e
                        18:
Shinya Kitaoka 120a6e
                        35:34 vincenzo 77 76
Toshihiro Shimizu 890ddd
?c create_raster e release_raster
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00002 / 00002 / 06188
Shinya Kitaoka 120a6e
?d D 1.76 98 / 03 / 09
Shinya Kitaoka 120a6e
                        15:
Shinya Kitaoka 120a6e
                        00:15 vincenzo 76 75
Toshihiro Shimizu 890ddd
?c rop_image_to_(sub)raster non inizializzava native_buffer
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00004 / 00004 / 06186
Shinya Kitaoka 120a6e
?d D 1.75 98 / 02 / 23
Shinya Kitaoka 120a6e
                        12:
Shinya Kitaoka 120a6e
                        35:57 vincenzo 75 74
Toshihiro Shimizu 890ddd
?c sbagliata scansione raster su premultiply
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00082 / 00002 / 06108
Shinya Kitaoka 120a6e
?d D 1.74 98 / 02 / 23
Shinya Kitaoka 120a6e
                        11:
Shinya Kitaoka 120a6e
                        15:21 tross 74 73
Toshihiro Shimizu 890ddd
?c rop_premultiply()
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00056 / 00051 / 06054
Shinya Kitaoka 120a6e
?d D 1.73 97 / 12 / 01
Shinya Kitaoka 120a6e
                        18:
Shinya Kitaoka 120a6e
                        26:04 vincenzo 73 72
Toshihiro Shimizu 890ddd
?c rgbx->bw_q, cm16->bw_q
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00020 / 00000 / 06085
Shinya Kitaoka 120a6e
?d D 1.72 97 / 11 / 28
Shinya Kitaoka 120a6e
                        17:
Shinya Kitaoka 120a6e
                        31:32 vincenzo 72 71
Toshihiro Shimizu 890ddd
?c gestione RAS_CMxSy(copy, pixbytes pix_to_ras etc)
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00017 / 00001 / 06068
Shinya Kitaoka 120a6e
?d D 1.71 97 / 11 / 18
Shinya Kitaoka 120a6e
                        16:
Shinya Kitaoka 120a6e
                        42:31 tross 71 70
Toshihiro Shimizu 890ddd
?c rop_copy RAS_CMxSy
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00033 / 00001 / 06036
Shinya Kitaoka 120a6e
?d D 1.70 97 / 09 / 26
Shinya Kitaoka 120a6e
                        12:
Shinya Kitaoka 120a6e
                        25:32 vincenzo 70 69
Toshihiro Shimizu 890ddd
?c rop_copy_rgb16_rgbm
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00010 / 00007 / 06027
Shinya Kitaoka 120a6e
?d D 1.69 97 / 09 / 23
Shinya Kitaoka 120a6e
                        15:
Shinya Kitaoka 120a6e
                        53:42 tross 69 68
Toshihiro Shimizu 890ddd
?c migliorata la rop_copy_bw
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00043 / 00003 / 05991
Shinya Kitaoka 120a6e
?d D 1.68 97 / 09 / 23
Shinya Kitaoka 120a6e
                        00:
Shinya Kitaoka 120a6e
                        00:23 tross 68 67
Toshihiro Shimizu 890ddd
?c rop_copy_bw_bw
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00038 / 00000 / 05956
Shinya Kitaoka 120a6e
?d D 1.67 97 / 09 / 22
Shinya Kitaoka 120a6e
                        22:
Shinya Kitaoka 120a6e
                        20:35 tross 67 66
Toshihiro Shimizu 890ddd
?c rop_copy_rgbx_rgb(vincenzo)
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00006 / 00016 / 05950
Shinya Kitaoka 120a6e
?d D 1.66 97 / 04 / 01
Shinya Kitaoka 120a6e
                        18:
Shinya Kitaoka 120a6e
                        46:33 vincenzo 66 65
Toshihiro Shimizu 890ddd
?c esportata la dither
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00037 / 00021 / 05929
Shinya Kitaoka 120a6e
?d D 1.65 97 / 03 / 27
Shinya Kitaoka 120a6e
                        19:
Shinya Kitaoka 120a6e
                        54:27 tross 65 64
Toshihiro Shimizu 890ddd
?c rop_copy_rgbm64_rgbm con random round
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00001 / 00001 / 05949
Shinya Kitaoka 120a6e
?d D 1.64 97 / 01 / 03
Shinya Kitaoka 120a6e
                        15:
Shinya Kitaoka 120a6e
                        10:39 roberto 64 63
Toshihiro Shimizu 890ddd
?c Corretto bug in rop_copy_90(CASE-- __OR)
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00453 / 00002 / 05497
Shinya Kitaoka 120a6e
?d D 1.63 96 / 11 / 24
Shinya Kitaoka 120a6e
                        22:
Shinya Kitaoka 120a6e
                        36:00 tross 63 62
Toshihiro Shimizu 890ddd
?c rop_copy_90_rgb_rgb16, rop_zoom_out_90_rgb_rgb16 / rgbm
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00381 / 00003 / 05118
Shinya Kitaoka 120a6e
?d D 1.62 96 / 09 / 14
Shinya Kitaoka 120a6e
                        21:
Shinya Kitaoka 120a6e
                        54:23 tross 62 61
Toshihiro Shimizu 890ddd
?c rop_zoom_out_bw_rgb16 / rgbm
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00577 / 00323 / 04544
Shinya Kitaoka 120a6e
?d D 1.61 96 / 09 / 12
Shinya Kitaoka 120a6e
                        19:
Shinya Kitaoka 120a6e
                        44:13 tross 61 60
Toshihiro Shimizu 890ddd
?c rop_zoom_out_bw_rgbm / rgb16, corretto rop_zoom_out_90_gr8_...
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00026 / 00026 / 04841
Shinya Kitaoka 120a6e
?d D 1.60 96 / 08 / 05
Shinya Kitaoka 120a6e
                        18:
Shinya Kitaoka 120a6e
                        15:12 vincenzo 60 59
Toshihiro Shimizu 890ddd
?c gl_color->LPIXEL
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00002 / 00001 / 04865
Shinya Kitaoka 120a6e
?d D 1.59 96 / 07 / 12
Shinya Kitaoka 120a6e
                        18:
Shinya Kitaoka 120a6e
                        41:01 vincenzo 59 58
Toshihiro Shimizu 890ddd
?c messo RGBM64 rop_pixbytes
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00246 / 00123 / 04620
Shinya Kitaoka 120a6e
?d D 1.58 96 / 07 / 10
Shinya Kitaoka 120a6e
                        17:
Shinya Kitaoka 120a6e
                        57:56 vincenzo 58 57
Toshihiro Shimizu 890ddd
?c introdotto rop_copy per RAS_RGBM64
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00280 / 00086 / 04463
Shinya Kitaoka 120a6e
?d D 1.57 96 / 07 / 10
Shinya Kitaoka 120a6e
                        01:
Shinya Kitaoka 120a6e
                        01:58 tross 57 56
Toshihiro Shimizu 890ddd
?c rop_zoom_out_90, per ora solo gr8-- > rgb16 / rgbm
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00279 / 00110 / 04270
Shinya Kitaoka 120a6e
?d D 1.56 96 / 07 / 09
Shinya Kitaoka 120a6e
                        16:
Shinya Kitaoka 120a6e
                        44:14 tross 56 55
Toshihiro Shimizu 890ddd
?c cmap.offset-- > cmap.info.offset_mask etc.
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00238 / 00065 / 04142
Shinya Kitaoka 120a6e
?d D 1.55 96 / 07 / 01
Shinya Kitaoka 120a6e
                        16:
Shinya Kitaoka 120a6e
                        24:22 tross 55 54
Toshihiro Shimizu 890ddd
?c rop_copy_90_bw / gr8_rgb16 
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00205 / 00009 / 04002
Shinya Kitaoka 120a6e
?d D 1.54 96 / 06 / 27
Shinya Kitaoka 120a6e
                        20:
Shinya Kitaoka 120a6e
                        46:24 tross 54 53
Toshihiro Shimizu 890ddd
?c rop_copy_bw / gr8_rgb16, rop_zoom_out_gr8_rgb16, aggiornati nomi macro RGB16
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00094 / 00047 / 03917
Shinya Kitaoka 120a6e
?d D 1.53 96 / 06 / 27
Shinya Kitaoka 120a6e
                        04:
Shinya Kitaoka 120a6e
                        39:24 tross 53 52
Toshihiro Shimizu 890ddd
?c conversioni pix_type<->ras_type
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00675 / 00343 / 03289
Toshihiro Shimizu 890ddd
?d D 1.52 96 / 06 / 26 02:04:18 tross 52 51
Toshihiro Shimizu 890ddd
?c potrebbero funziare un po' di copy e zoom_out ->rgb16
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00002 / 00001 / 03630
Toshihiro Shimizu 890ddd
?d D 1.51 96 / 05 / 15 22:11:20 tross 51 50
Toshihiro Shimizu 890ddd
?c tmsg.h
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00011 / 00000 / 03620
Toshihiro Shimizu 890ddd
?d D 1.50 96 / 05 / 11 13:34:15 tross 50 49
Toshihiro Shimizu 890ddd
?c variabili non inizializzate
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00001 / 00001 / 03619
Toshihiro Shimizu 890ddd
?d D 1.49 96 / 04 / 10 02:05:56 tross 49 48
Toshihiro Shimizu 890ddd
?c rop_zoom_out_rgb_rgbm(con baco corretto)
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00112 / 00001 / 03508
Toshihiro Shimizu 890ddd
?d D 1.48 96 / 04 / 10 02:01:59 tross 48 47
Toshihiro Shimizu 890ddd
?c 
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00104 / 00010 / 03405
Toshihiro Shimizu 890ddd
?d D 1.47 96 / 03 / 19 18:04:11 tross 47 46
Toshihiro Shimizu 890ddd
?c rop_zoom_out_gr8_rgbm
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00139 / 00010 / 03276
Toshihiro Shimizu 890ddd
?d D 1.46 96 / 03 / 18 20:22:38 tross 46 45
Toshihiro Shimizu 890ddd
?c rop_zoom_out_rgbx
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00003 / 00002 / 03283
Toshihiro Shimizu 890ddd
?d D 1.45 96 / 02 / 08 23:16:51 tross 45 44
Toshihiro Shimizu 890ddd
?c mancava la rop_copy_90 RGB--> RGB_
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00000 / 00002 / 03285
Shinya Kitaoka 120a6e
?d D 1.44 96 / 02 / 07
Shinya Kitaoka 120a6e
                        18:
Shinya Kitaoka 120a6e
                        24:05 tross 44 43
Toshihiro Shimizu 890ddd
?c tolta una printf
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00091 / 00000 / 03196
Shinya Kitaoka 120a6e
?d D 1.43 95 / 11 / 21
Shinya Kitaoka 120a6e
                        16:
Shinya Kitaoka 120a6e
                        33:23 roberto 43 42
Toshihiro Shimizu 890ddd
?c Introdotta rgb to rgbm
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00004 / 00001 / 03192
Shinya Kitaoka 120a6e
?d D 1.42 95 / 10 / 09
Shinya Kitaoka 120a6e
                        14:
Shinya Kitaoka 120a6e
                        57:40 vinz 42 41
Toshihiro Shimizu 890ddd
?c aggiunti i rop_copy RAS_CM16-- > quantized type
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00061 / 00042 / 03132
Shinya Kitaoka 120a6e
?d D 1.41 95 / 10 / 04
Shinya Kitaoka 120a6e
                        18:
Shinya Kitaoka 120a6e
                        16:37 tross 41 40
Shinya Kitaoka 120a6e
?c corretto baco di
Shinya Kitaoka 120a6e
                  rop_copy:fatto rop_copy_same()
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00061 / 00001 / 03113
Shinya Kitaoka 120a6e
?d D 1.40 95 / 10 / 04
Shinya Kitaoka 120a6e
                        16:
Shinya Kitaoka 120a6e
                        05:47 tross 40 39
Toshihiro Shimizu 890ddd
?c rop_[sub] image_to_raster()
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00095 / 00017 / 03019
Shinya Kitaoka 120a6e
?d D 1.39 95 / 10 / 04
Shinya Kitaoka 120a6e
                        12:
Shinya Kitaoka 120a6e
                        27:49 vinz 39 38
Toshihiro Shimizu 890ddd
?c aggiunto il rop_shrink
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00007 / 00007 / 03029
Shinya Kitaoka 120a6e
?d D 1.38 95 / 09 / 25
Shinya Kitaoka 120a6e
                        02:
Shinya Kitaoka 120a6e
                        26:09 tross 38 37
Toshihiro Shimizu 890ddd
?c corretto baco(poco visibile)nei rop_zoom_out... _rgbm()
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00001 / 00004 / 03035
Shinya Kitaoka 120a6e
?d D 1.37 95 / 09 / 20
Shinya Kitaoka 120a6e
                        15:
Shinya Kitaoka 120a6e
                        57:00 tross 37 36
Toshihiro Shimizu 890ddd
?c migliorate rop_custom_fill_cmap_ramp / buffer
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00060 / 00000 / 02979
Shinya Kitaoka 120a6e
?d D 1.36 95 / 09 / 19
Shinya Kitaoka 120a6e
                        17:
Shinya Kitaoka 120a6e
                        22:55 tross 36 35
Toshihiro Shimizu 890ddd
?c rop_custom_fill_cmap_ramp / buffer
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00002 / 00006 / 02977
Shinya Kitaoka 120a6e
?d D 1.35 95 / 07 / 28
Shinya Kitaoka 120a6e
                        21:
Shinya Kitaoka 120a6e
                        35:43 tross 35 34
Toshihiro Shimizu 890ddd
?c estetica
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00004 / 00000 / 02979
Shinya Kitaoka 120a6e
?d D 1.34 95 / 07 / 28
Shinya Kitaoka 120a6e
                        17:
Shinya Kitaoka 120a6e
                        17:40 grisu 34 33
Toshihiro Shimizu 890ddd
?c corretto un baco sull' offset della cmap
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00001 / 00001 / 02978
Shinya Kitaoka 120a6e
?d D 1.33 95 / 07 / 28
Shinya Kitaoka 120a6e
                        15:
Shinya Kitaoka 120a6e
                        22:33 tross 33 32
Toshihiro Shimizu 890ddd
?c corretto baco di un controllo in rop_fill_cmap_buffer
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00119 / 00005 / 02860
Shinya Kitaoka 120a6e
?d D 1.32 95 / 07 / 27
Shinya Kitaoka 120a6e
                        21:
Shinya Kitaoka 120a6e
                        36:31 tross 32 31
Toshihiro Shimizu 890ddd
?c rop_fill_cmap_ramp / buffer
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00275 / 00022 / 02590
Shinya Kitaoka 120a6e
?d D 1.31 95 / 07 / 27
Shinya Kitaoka 120a6e
                        00:
Shinya Kitaoka 120a6e
                        05:00 tross 31 30
Toshihiro Shimizu 890ddd
?c rop_zoom_out_cm16_rgbm, rop_zoom_out_rgbm
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00003 / 00001 / 02609
Shinya Kitaoka 120a6e
?d D 1.30 95 / 07 / 09
Shinya Kitaoka 120a6e
                        22:
Shinya Kitaoka 120a6e
                        23:39 tross 30 29
Toshihiro Shimizu 890ddd
?c messaggio in rop_zoom_out access violation
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00043 / 00034 / 02567
Shinya Kitaoka 120a6e
?d D 1.29 95 / 07 / 04
Shinya Kitaoka 120a6e
                        01:
Shinya Kitaoka 120a6e
                        50:38 tross 29 28
Toshihiro Shimizu 890ddd
?c rop_zoom_out a scacchiera, cmap_offset presottratto a varie funz
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00531 / 00005 / 02070
Shinya Kitaoka 120a6e
?d D 1.28 95 / 07 / 04
Shinya Kitaoka 120a6e
                        00:
Shinya Kitaoka 120a6e
                        46:11 tross 28 27
Toshihiro Shimizu 890ddd
?c con rop_zoom_out funzionante per cm16_rgb_
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00003 / 00001 / 02072
Shinya Kitaoka 120a6e
?d D 1.27 95 / 07 / 03
Shinya Kitaoka 120a6e
                        15:
Shinya Kitaoka 120a6e
                        38:32 tross 27 26
Toshihiro Shimizu 890ddd
?c messaggio completo in caso di access violation
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00086 / 00000 / 01987
Shinya Kitaoka 120a6e
?d D 1.26 94 / 12 / 28
Shinya Kitaoka 120a6e
                        21:
Shinya Kitaoka 120a6e
                        07:43 tross 26 25
Toshihiro Shimizu 890ddd
?c aggiunta rop_copy_90_rgbm
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00043 / 00000 / 01944
Shinya Kitaoka 120a6e
?d D 1.25 94 / 11 / 30
Shinya Kitaoka 120a6e
                        22:
Shinya Kitaoka 120a6e
                        03:25 tross 25 24
Toshihiro Shimizu 890ddd
?c aggiunto rop_add / remove_white_to / from_cmap
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00001 / 00001 / 01943
Shinya Kitaoka 120a6e
?d D 1.24 94 / 10 / 26
Shinya Kitaoka 120a6e
                        00:
Shinya Kitaoka 120a6e
                        28:46 tross 24 23
Toshihiro Shimizu 890ddd
?c corretto baco rop_copy_rgb_rgbm
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00147 / 00014 / 01797
Shinya Kitaoka 120a6e
?d D 1.23 94 / 09 / 16
Shinya Kitaoka 120a6e
                        19:
Shinya Kitaoka 120a6e
                        45:57 tross 23 22
Toshihiro Shimizu 890ddd
?c cm8
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00231 / 00000 / 01580
Shinya Kitaoka 120a6e
?d D 1.22 94 / 09 / 16
Shinya Kitaoka 120a6e
                        00:
Shinya Kitaoka 120a6e
                        02:27 tross 22 21
Toshihiro Shimizu 890ddd
?c rop_copy_90_bw / gr8_rgbm
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00243 / 00027 / 01337
Shinya Kitaoka 120a6e
?d D 1.21 94 / 09 / 11
Shinya Kitaoka 120a6e
                        20:
Shinya Kitaoka 120a6e
                        52:53 tross 21 20
Toshihiro Shimizu 890ddd
?c con rop_copy_90-- > cm16
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00243 / 00000 / 01121
Shinya Kitaoka 120a6e
?d D 1.20 94 / 09 / 05
Shinya Kitaoka 120a6e
                        23:
Shinya Kitaoka 120a6e
                        18:47 tross 20 19
Toshihiro Shimizu 890ddd
?c iniziato rop_reduce
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00059 / 00000 / 01062
Shinya Kitaoka 120a6e
?d D 1.19 94 / 06 / 07
Shinya Kitaoka 120a6e
                        07:
Shinya Kitaoka 120a6e
                        01:19 tross 19 18
Toshihiro Shimizu 890ddd
?c rop_copy WB->RGBM
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00096 / 00004 / 00966
Shinya Kitaoka 120a6e
?d D 1.18 94 / 06 / 01
Shinya Kitaoka 120a6e
                        00:
Shinya Kitaoka 120a6e
                        42:00 tross 18 17
Toshihiro Shimizu 890ddd
?c con cura dimagrante per entrare nella cassetta
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00124 / 00001 / 00846
Shinya Kitaoka 120a6e
?d D 1.17 94 / 04 / 29
Shinya Kitaoka 120a6e
                        23:
Shinya Kitaoka 120a6e
                        15:12 tross 17 16
Toshihiro Shimizu 890ddd
?c rop_copy_90_bw_gr8
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00009 / 00009 / 00838
Shinya Kitaoka 120a6e
?d D 1.16 94 / 04 / 14
Shinya Kitaoka 120a6e
                        23:
Shinya Kitaoka 120a6e
                        21:49 tross 16 15
Toshihiro Shimizu 890ddd
?c wrap((+7) / 8)
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00155 / 00001 / 00692
Shinya Kitaoka 120a6e
?d D 1.15 94 / 04 / 06
Shinya Kitaoka 120a6e
                        16:
Shinya Kitaoka 120a6e
                        19:14 tross 15 14
Toshihiro Shimizu 890ddd
?c rop_copy_90_bw piu' veloce
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00273 / 00068 / 00420
Shinya Kitaoka 120a6e
?d D 1.14 94 / 04 / 06
Shinya Kitaoka 120a6e
                        03:
Shinya Kitaoka 120a6e
                        25:39 tross 14 13
Toshihiro Shimizu 890ddd
?c rop_copy_90 pare funzionare per bw e gr8
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00003 / 00003 / 00485
Shinya Kitaoka 120a6e
?d D 1.13 94 / 03 / 31
Shinya Kitaoka 120a6e
                        19:
Shinya Kitaoka 120a6e
                        38:31 tross 13 12
Toshihiro Shimizu 890ddd
?c 
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00012 / 00008 / 00476
Shinya Kitaoka 120a6e
?d D 1.12 94 / 03 / 30
Shinya Kitaoka 120a6e
                        21:
Shinya Kitaoka 120a6e
                        06:15 tross 12 11
Toshihiro Shimizu 890ddd
?c 
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00001 / 00001 / 00483
Shinya Kitaoka 120a6e
?d D 1.11 94 / 03 / 30
Shinya Kitaoka 120a6e
                        20:
Shinya Kitaoka 120a6e
                        46:54 tross 11 10
Toshihiro Shimizu 890ddd
?c 
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00030 / 00048 / 00454
Shinya Kitaoka 120a6e
?d D 1.10 94 / 03 / 30
Shinya Kitaoka 120a6e
                        20:
Shinya Kitaoka 120a6e
                        45:37 tross 10 9
Toshihiro Shimizu 890ddd
?c rimesso a posto il wrap(in pixel)
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00007 / 00000 / 00495
Shinya Kitaoka 120a6e
?d D 1.9 94 / 03 / 30
Shinya Kitaoka 120a6e
                        17:
Shinya Kitaoka 120a6e
                        30:50 tross 9 8
Toshihiro Shimizu 890ddd
?c rop_pixbytes
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00021 / 00006 / 00474
Shinya Kitaoka 120a6e
?d D 1.8 94 / 03 / 13
Shinya Kitaoka 120a6e
                        17:
Shinya Kitaoka 120a6e
                        41:53 tross 8 7
Toshihiro Shimizu 890ddd
?c corretto baco su rop_copy tra dimensioni diverse
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00005 / 00001 / 00475
Shinya Kitaoka 120a6e
?d D 1.7 94 / 03 / 11
Shinya Kitaoka 120a6e
                        14:
Shinya Kitaoka 120a6e
                        04:27 tross 7 6
Toshihiro Shimizu 890ddd
?c bachetto rop_copy, per 3.01j
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00187 / 00001 / 00289
Shinya Kitaoka 120a6e
?d D 1.6 94 / 03 / 11
Shinya Kitaoka 120a6e
                        13:
Shinya Kitaoka 120a6e
                        48:45 tross 6 5
Toshihiro Shimizu 890ddd
?c per 3.01j
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00024 / 00027 / 00266
Shinya Kitaoka 120a6e
?d D 1.5 94 / 03 / 02
Shinya Kitaoka 120a6e
                        15:
Shinya Kitaoka 120a6e
                        14:56 tross 5 4
Toshihiro Shimizu 890ddd
?c cmap per copy bw->cm16 sempre lunga 256
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00125 / 00008 / 00168
Shinya Kitaoka 120a6e
?d D 1.4 94 / 02 / 28
Shinya Kitaoka 120a6e
                        15:
Shinya Kitaoka 120a6e
                        53:37 tross 4 3
Toshihiro Shimizu 890ddd
?c rop_copy per RAS_BW e RAS_WB
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00002 / 00000 / 00174
Shinya Kitaoka 120a6e
?d D 1.3 94 / 02 / 19
Shinya Kitaoka 120a6e
                        22:
Shinya Kitaoka 120a6e
                        17:18 tross 3 2
Toshihiro Shimizu 890ddd
?c per fullwarn su os_4
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00024 / 00019 / 00150
Shinya Kitaoka 120a6e
?d D 1.2 94 / 02 / 10
Shinya Kitaoka 120a6e
                        14:
Shinya Kitaoka 120a6e
                        04:52 tross 2 1
Toshihiro Shimizu 890ddd
?c cambiati i RAS_
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?s 00169 / 00000 / 00000
Shinya Kitaoka 120a6e
?d D 1.1 94 / 02 / 04
Shinya Kitaoka 120a6e
                        22:
Shinya Kitaoka 120a6e
                        02:58 tross 1 0
Shinya Kitaoka 120a6e
?c date and time created 94 / 02 / 04
Shinya Kitaoka 120a6e
                        22:
Shinya Kitaoka 120a6e
                        02:58 by tross
Toshihiro Shimizu 890ddd
?e
Toshihiro Shimizu 890ddd
?u
Toshihiro Shimizu 890ddd
?U
Toshihiro Shimizu 890ddd
?f e 0
Toshihiro Shimizu 890ddd
?t
Toshihiro Shimizu 890ddd
?T
Toshihiro Shimizu 890ddd
?I 14
Toshihiro Shimizu 890ddd
?D 32
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
#ifdef DEBUG
Toshihiro Shimizu 890ddd
#include "stopwatch.h"
Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?E 32
Toshihiro Shimizu 890ddd
?E 14
Toshihiro Shimizu 890ddd
?I 1
Toshihiro Shimizu 890ddd
#include <stdio.h>
Toshihiro Shimizu 890ddd
#include <string.h>
Toshihiro Shimizu 890ddd
?I 40
Toshihiro Shimizu 890ddd
#include <stdlib.h>
Toshihiro Shimizu 890ddd
?E 40
Toshihiro Shimizu 890ddd
?I 32
Toshihiro Shimizu 890ddd
#include <assert.h>
Toshihiro Shimizu 890ddd
?E 32
Toshihiro Shimizu 890ddd
#include "toonz.h"
Toshihiro Shimizu 890ddd
?I 51
Toshihiro Shimizu 890ddd
#include "tmsg.h"
Toshihiro Shimizu 890ddd
?E 51
Toshihiro Shimizu 890ddd
?D 39
Toshihiro Shimizu 890ddd
#include "raster.h"
Toshihiro Shimizu 890ddd
?E 39
Toshihiro Shimizu 890ddd
?I 39
Toshihiro Shimizu 890ddd
?D 40
Toshihiro Shimizu 890ddd
#include "rasterwork.h"
Toshihiro Shimizu 890ddd
?E 40
Toshihiro Shimizu 890ddd
?I 40
Toshihiro Shimizu 890ddd
#include "raster.h"
Toshihiro Shimizu 890ddd
?E 40
Toshihiro Shimizu 890ddd
?E 39
Toshihiro Shimizu 890ddd
#include "raster_p.h"
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?I 99
Toshihiro Shimizu 890ddd
#define MEMORY_PRINTF
Toshihiro Shimizu 890ddd
?E 99
Toshihiro Shimizu 890ddd
?I 32
Toshihiro Shimizu 890ddd
#define STW_DISABLE
Toshihiro Shimizu 890ddd
#include "stopwatch.h"
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?I 61
Shinya Kitaoka 120a6e
#define BUFBYTE(X, Y, BUF, BYTEWRAP, BITOFFS)                                  \
Shinya Kitaoka 120a6e
  (((UCHAR *)(BUF))[(((X) + (BITOFFS)) >> 3) + (Y) * (BYTEWRAP)])
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
#define GET_BIT(X, Y, BUF, BYTEWRAP, BITOFFS)                                  \
Shinya Kitaoka 120a6e
  ((BUFBYTE(X, Y, BUF, BYTEWRAP, BITOFFS) >> (7 - (((X) + (BITOFFS)) & 7))) &  \
Shinya Kitaoka 120a6e
   (UCHAR)1)
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
#define SET_BIT_0(X, Y, BUF, BYTEWRAP, BITOFFS)                                \
Shinya Kitaoka 120a6e
  (BUFBYTE(X, Y, BUF, BYTEWRAP, BITOFFS) &=                                    \
Shinya Kitaoka 120a6e
   ~(1 << (7 - (((X) + (BITOFFS)) & 7))))
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
#define SET_BIT_1(X, Y, BUF, BYTEWRAP, BITOFFS)                                \
Shinya Kitaoka 120a6e
  (BUFBYTE(X, Y, BUF, BYTEWRAP, BITOFFS) |=                                    \
Shinya Kitaoka 120a6e
   (1 << (7 - (((X) + (BITOFFS)) & 7))))
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
#define BITCPY(XO, YO, BUFO, BYTEWRAPO, BITOFFSO, XI, YI, BUFI, BYTEWRAPI,     \
Shinya Kitaoka 120a6e
               BITOFFSI)                                                       \
Shinya Kitaoka 120a6e
  {                                                                            \
Shinya Kitaoka 120a6e
    if (GET_BIT(XI, YI, BUFI, BYTEWRAPI, BITOFFSI))                            \
Shinya Kitaoka 120a6e
      SET_BIT_1(XO, YO, BUFO, BYTEWRAPO, BITOFFSO);                            \
Shinya Kitaoka 120a6e
    else                                                                       \
Shinya Kitaoka 120a6e
      SET_BIT_0(XO, YO, BUFO, BYTEWRAPO, BITOFFSO);                            \
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?I 62
Shinya Kitaoka 120a6e
#define GET_BWBIT(BIT, BUF) (((BUF)[(BIT) >> 3] >> (7 - ((BIT)&7))) & 1)
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?I 84
Toshihiro Shimizu 890ddd
#define MAGICFAC (257U * 256U + 1U)
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
#define MAP24 PIX_CM24_PENMAP_COLMAP_TO_RGBM
Toshihiro Shimizu 890ddd
#define MAP24_64 PIX_CM24_PENMAP_COLMAP_TO_RGBM64
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?I 95
Shinya Kitaoka 120a6e
#define PIX_RGB16_FROM_USHORT(R, G, B)                                         \
Shinya Kitaoka 120a6e
  (((((R)*BYTE_FROM_USHORT_MAGICFAC) + (1 << 23)) >> 16) & 0xf800 |            \
Shinya Kitaoka 120a6e
   ((((G)*BYTE_FROM_USHORT_MAGICFAC) + (1 << 23)) >> 21) & 0x07e0 |            \
Shinya Kitaoka 120a6e
   ((((B)*BYTE_FROM_USHORT_MAGICFAC) + (1 << 23)) >> 27))
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?D 96
Toshihiro Shimizu 890ddd
#define PIX_RGB16_FROM_RGBX64(L) (PIX_RGB16_FROM_USHORT((L).r, (L).g, (L).b))
Toshihiro Shimizu 890ddd
?E 96
Toshihiro Shimizu 890ddd
?I 96
Shinya Kitaoka 120a6e
#define PIX_XRGB1555_FROM_USHORT(R, G, B)                                      \
Shinya Kitaoka 120a6e
  (((((R)*BYTE_FROM_USHORT_MAGICFAC) + (1 << 23)) >> 17) & 0x7c00 |            \
Shinya Kitaoka 120a6e
   ((((G)*BYTE_FROM_USHORT_MAGICFAC) + (1 << 23)) >> 22) & 0x03e0 |            \
Shinya Kitaoka 120a6e
   ((((B)*BYTE_FROM_USHORT_MAGICFAC) + (1 << 23)) >> 27))
Toshihiro Shimizu 890ddd
?E 96
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?I 96
Toshihiro Shimizu 890ddd
#define PIX_RGB16_FROM_RGBX64(L) (PIX_RGB16_FROM_USHORT((L).r, (L).g, (L).b))
Shinya Kitaoka 120a6e
#define PIX_XRGB1555_FROM_RGBX64(L)                                            \
Shinya Kitaoka 120a6e
  (PIX_XRGB1555_FROM_USHORT((L).r, (L).g, (L).b))
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?E 96
Toshihiro Shimizu 890ddd
?E 95
Toshihiro Shimizu 890ddd
?E 84
Toshihiro Shimizu 890ddd
?I 66
Toshihiro Shimizu 890ddd
?D 74
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?E 74
Toshihiro Shimizu 890ddd
?E 66
Toshihiro Shimizu 890ddd
?E 62
Shinya Kitaoka 120a6e
    /*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?E 61
Toshihiro Shimizu 890ddd
?D 52
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?E 52
Toshihiro Shimizu 890ddd
?E 32
Toshihiro Shimizu 890ddd
?I 6
Toshihiro Shimizu 890ddd
?D 14
Shinya Kitaoka 120a6e
    /* TOGLIERE QUESTA ROBA (chiedere a Walter) */
Shinya Kitaoka 120a6e
?E 14 static void rop_copy_90_bw(RASTER *rin, RASTER *rout, int x1, int y1,
Shinya Kitaoka 120a6e
                                  int x2, int y2, int newx, int newy,
Toshihiro Shimizu 890ddd
?D 14 int ninety, int flip);
Toshihiro Shimizu 890ddd
?E 14
Toshihiro Shimizu 890ddd
?I 14
Toshihiro Shimizu 890ddd
		           int mirror, int ninety);
Shinya Kitaoka 120a6e
?E 14 static void rop_copy_90_gr8(RASTER *rin, RASTER *rout, int x1, int y1,
Shinya Kitaoka 120a6e
                                  int x2, int y2, int newx, int newy,
Toshihiro Shimizu 890ddd
?D 14 int ninety, int flip);
Toshihiro Shimizu 890ddd
?E 14
Toshihiro Shimizu 890ddd
?I 14
Toshihiro Shimizu 890ddd
		            int mirror, int ninety);
Shinya Kitaoka 120a6e
?I 21 static void rop_copy_90_gr8_cm16(RASTER *rin, RASTER *rout, int x1,
Shinya Kitaoka 120a6e
                                       int y1, int x2, int y2, int newx,
Shinya Kitaoka 120a6e
                                       int newy, int mirror, int ninety);
Shinya Kitaoka 120a6e
?I 84 static void rop_copy_90_gr8_cm24(RASTER *rin, RASTER *rout, int x1,
Shinya Kitaoka 120a6e
                                       int y1, int x2, int y2, int newx,
Shinya Kitaoka 120a6e
                                       int newy, int mirror, int ninety);
Toshihiro Shimizu 890ddd
?E 84
Shinya Kitaoka 120a6e
?I 22 static void rop_copy_90_gr8_rgbm(RASTER *rin, RASTER *rout, int x1,
Shinya Kitaoka 120a6e
                                        int y1, int x2, int y2, int newx,
Shinya Kitaoka 120a6e
                                        int newy, int mirror, int ninety);
Shinya Kitaoka 120a6e
?I 55 static void rop_copy_90_gr8_rgb16(RASTER *rin, RASTER *rout, int x1,
Shinya Kitaoka 120a6e
                                        int y1, int x2, int y2, int newx,
Shinya Kitaoka 120a6e
                                        int newy, int mirror, int ninety);
Toshihiro Shimizu 890ddd
?E 55
Shinya Kitaoka 120a6e
?I 23 static void rop_copy_90_cm8_cm16(RASTER *rin, RASTER *rout, int x1,
Shinya Kitaoka 120a6e
                                        int y1, int x2, int y2, int newx,
Shinya Kitaoka 120a6e
                                        int newy, int mirror, int ninety);
Shinya Kitaoka 120a6e
?I 84 static void rop_copy_90_cm8_cm24(RASTER *rin, RASTER *rout, int x1,
Shinya Kitaoka 120a6e
                                       int y1, int x2, int y2, int newx,
Shinya Kitaoka 120a6e
                                       int newy, int mirror, int ninety);
Toshihiro Shimizu 890ddd
?E 84
Toshihiro Shimizu 890ddd
?E 23
Toshihiro Shimizu 890ddd
?E 22
Toshihiro Shimizu 890ddd
?E 21
Shinya Kitaoka 120a6e
?I 17 static void rop_copy_90_bw_gr8(RASTER *rin, RASTER *rout, int x1, int y1,
Shinya Kitaoka 120a6e
                                      int x2, int y2, int newx, int newy,
Shinya Kitaoka 120a6e
                                      int mirror, int ninety);
Shinya Kitaoka 120a6e
?I 21 static void rop_copy_90_bw_cm16(RASTER *rin, RASTER *rout, int x1, int y1,
Shinya Kitaoka 120a6e
                                      int x2, int y2, int newx, int newy,
Shinya Kitaoka 120a6e
                                      int mirror, int ninety);
Shinya Kitaoka 120a6e
?I 84 static void rop_copy_90_bw_cm24(RASTER *rin, RASTER *rout, int x1, int y1,
Shinya Kitaoka 120a6e
                                      int x2, int y2, int newx, int newy,
Shinya Kitaoka 120a6e
                                      int mirror, int ninety);
Toshihiro Shimizu 890ddd
?E 84
Shinya Kitaoka 120a6e
?I 55 static void rop_copy_90_bw_rgb16(RASTER *rin, RASTER *rout, int x1,
Shinya Kitaoka 120a6e
                                        int y1, int x2, int y2, int newx,
Shinya Kitaoka 120a6e
                                        int newy, int mirror, int ninety);
Toshihiro Shimizu 890ddd
?E 55
Shinya Kitaoka 120a6e
?I 22 static void rop_copy_90_bw_rgbm(RASTER *rin, RASTER *rout, int x1,
Shinya Kitaoka 120a6e
                                       int y1, int x2, int y2, int newx,
Shinya Kitaoka 120a6e
                                       int newy, int mirror, int ninety);
Shinya Kitaoka 120a6e
?I 26 static void rop_copy_90_rgbm(RASTER *rin, RASTER *rout, int x1, int y1,
Shinya Kitaoka 120a6e
                                   int x2, int y2, int newx, int newy,
Shinya Kitaoka 120a6e
                                   int mirror, int ninety);
Shinya Kitaoka 120a6e
?I 63 static void rop_copy_90_rgb_rgb16(RASTER *rin, RASTER *rout, int x1,
Shinya Kitaoka 120a6e
                                        int y1, int x2, int y2, int newx,
Shinya Kitaoka 120a6e
                                        int newy, int mirror, int ninety);
Toshihiro Shimizu 890ddd
?E 63
Shinya Kitaoka 120a6e
?I 43 static void rop_copy_90_rgb_rgbm(RASTER *rin, RASTER *rout, int x1,
Shinya Kitaoka 120a6e
                                        int y1, int x2, int y2, int newx,
Shinya Kitaoka 120a6e
                                        int newy, int mirror, int ninety);
Toshihiro Shimizu 890ddd
?E 43
Toshihiro Shimizu 890ddd
?I 40
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
?I 104 static void rop_copy_bw(RASTER *rin, RASTER *rout, int x1, int y1,
Shinya Kitaoka 120a6e
                                int x2, int y2, int newx, int newy);
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?E 104
Shinya Kitaoka 120a6e
    /*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?I 88
Toshihiro Shimizu 890ddd
?D 89 static LPIXEL
Shinya Kitaoka 120a6e
rop_premult(LPIXEL color) {
Shinya Kitaoka 120a6e
  UINT m, mm;
Shinya Kitaoka 120a6e
  LPIXEL new_color;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  m = color.m;
Shinya Kitaoka 120a6e
  if (m == 255)
Shinya Kitaoka 120a6e
    new_color = color;
Shinya Kitaoka 120a6e
  else if (m == 0) {
Shinya Kitaoka 120a6e
    new_color.r = 0;
Shinya Kitaoka 120a6e
    new_color.g = 0;
Shinya Kitaoka 120a6e
    new_color.b = 0;
Shinya Kitaoka 120a6e
    new_color.m = 0;
Shinya Kitaoka 120a6e
  } else {
Shinya Kitaoka 120a6e
    mm          = m * MAGICFAC;
Shinya Kitaoka 120a6e
    new_color.r = (color.r * mm + (1U << 23)) >> 24;
Shinya Kitaoka 120a6e
    new_color.g = (color.g * mm + (1U << 23)) >> 24;
Shinya Kitaoka 120a6e
    new_color.b = (color.b * mm + (1U << 23)) >> 24;
Shinya Kitaoka 120a6e
    new_color.m = m;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  return new_color;
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?E 89
Toshihiro Shimizu 890ddd
?E 88
Toshihiro Shimizu 890ddd
?D 79 void rop_image_to_raster(IMAGE *img, RASTER *ras, int build_cmap)
Toshihiro Shimizu 890ddd
?E 79
Toshihiro Shimizu 890ddd
?I 79 void rop_image_to_raster(IMAGE *img, RASTER *ras, int get_cmap)
Shinya Kitaoka 120a6e
?E 79 {
Shinya Kitaoka 120a6e
  rop_subimage_to_raster(img, 0, 0, img->pixmap.xsize - 1,
Shinya Kitaoka 120a6e
                         img->pixmap.ysize - 1,
Toshihiro Shimizu 890ddd
?D 79 ras, build_cmap);
Toshihiro Shimizu 890ddd
?E 79
Toshihiro Shimizu 890ddd
?I 79
Toshihiro Shimizu 890ddd
			ras, get_cmap);
Toshihiro Shimizu 890ddd
?E 79
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
void rop_subimage_to_raster (IMAGE *img,
Toshihiro Shimizu 890ddd
                             int img_x0, int img_y0, int img_x1, int img_y1,
Toshihiro Shimizu 890ddd
?D 79
Toshihiro Shimizu 890ddd
                             RASTER *ras, int build_cmap)
Toshihiro Shimizu 890ddd
?E 79
Toshihiro Shimizu 890ddd
?I 79
Toshihiro Shimizu 890ddd
                             RASTER *ras, int get_cmap)
Toshihiro Shimizu 890ddd
?E 79
Toshihiro Shimizu 890ddd
{
Shinya Kitaoka 120a6e
  int i;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  NOT_LESS_THAN(0, img_x0)
Shinya Kitaoka 120a6e
  NOT_LESS_THAN(0, img_y0)
Shinya Kitaoka 120a6e
  NOT_MORE_THAN(img->pixmap.xsize - 1, img_x1)
Shinya Kitaoka 120a6e
  NOT_MORE_THAN(img->pixmap.ysize - 1, img_y1)
Shinya Kitaoka 120a6e
  assert(img_x0 <= img_x1);
Shinya Kitaoka 120a6e
  assert(img_y0 <= img_y1);
Shinya Kitaoka 120a6e
  memset(ras, 0, sizeof(*ras));
Shinya Kitaoka 120a6e
  switch (img->type) {
Shinya Kitaoka 120a6e
    CASE CMAPPED : ras->type = RAS_CM16;
Shinya Kitaoka 120a6e
    ?D 76 ras->buffer = (USHORT *)img->pixmap.buffer + img_x0
Toshihiro Shimizu 890ddd
?E 76
Toshihiro Shimizu 890ddd
?I 76 ras->native_buffer = ras->buffer = (USHORT *)img->pixmap.buffer + img_x0
Toshihiro Shimizu 890ddd
?E 76 + img_y0 * img->pixmap.xsize;
Shinya Kitaoka 120a6e
    ?I 84 CASE CMAPPED24 : ras->type = RAS_CM24;
Shinya Kitaoka 120a6e
    ras->native_buffer               = ras->buffer =
Shinya Kitaoka 120a6e
        (ULONG *)img->pixmap.buffer + img_x0 + img_y0 * img->pixmap.xsize;
Shinya Kitaoka 120a6e
    ?E 84 CASE RGB : ras->type = RAS_RGBM;
Shinya Kitaoka 120a6e
    ?D 76 ras->buffer = (ULONG *)img->pixmap.buffer + img_x0
Toshihiro Shimizu 890ddd
?E 76
Toshihiro Shimizu 890ddd
?I 76
Toshihiro Shimizu 890ddd
?D 94 ras->native_buffer = ras->buffer = (ULONG *)img->pixmap.buffer + img_x0
Toshihiro Shimizu 890ddd
?E 94
Toshihiro Shimizu 890ddd
?I 94 ras->native_buffer = ras->buffer = (LPIXEL *)img->pixmap.buffer + img_x0
Toshihiro Shimizu 890ddd
?E 94
Toshihiro Shimizu 890ddd
?E 76 + img_y0 * img->pixmap.xsize;
Shinya Kitaoka 120a6e
    ?I 94 CASE RGB64 : ras->type        = RAS_RGBM64;
Shinya Kitaoka 120a6e
    ras->native_buffer                  = ras->buffer =
Shinya Kitaoka 120a6e
        (SPIXEL *)img->pixmap.buffer + img_x0 + img_y0 * img->pixmap.xsize;
Shinya Kitaoka 120a6e
    ?E 94
Toshihiro Shimizu 890ddd
?D 78 DEFAULT : assert(FALSE);
Shinya Kitaoka 120a6e
    ?E 78
Toshihiro Shimizu 890ddd
?I 78 DEFAULT : abort();
Shinya Kitaoka 120a6e
    ?E 78
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  ?I 89 ras->extra_mask = img->pixmap.extra_mask;
Shinya Kitaoka 120a6e
  if (img->type != CMAPPED24 && img->pixmap.extra_mask)
Shinya Kitaoka 120a6e
    ras->native_extra = ras->extra =
Shinya Kitaoka 120a6e
        img->pixmap.extra + img_x0 + img_y0 * img->pixmap.xsize;
Shinya Kitaoka 120a6e
  else
Shinya Kitaoka 120a6e
    ras->native_extra = ras->extra = NIL;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  ?E 89 ras->wrap       = img->pixmap.xsize;
Shinya Kitaoka 120a6e
  ras->lx               = img_x1 - img_x0 + 1;
Shinya Kitaoka 120a6e
  ras->ly               = img_y1 - img_y0 + 1;
Shinya Kitaoka 120a6e
  ?D 56 ras->glob_matte = 0xff;
Shinya Kitaoka 120a6e
  if (ras->type == RAS_CM16)
Shinya Kitaoka 120a6e
    ?E 56
Toshihiro Shimizu 890ddd
?I 56
Toshihiro Shimizu 890ddd
?D 84 if (ras->type == RAS_CM8 || ras->type == RAS_CM16)
Toshihiro Shimizu 890ddd
?E 84
Shinya Kitaoka 120a6e
?I 84 if (ras->type == RAS_CM8 || ras->type == RAS_CM16 ||
Shinya Kitaoka 120a6e
           ras->type == RAS_CM24)
Toshihiro Shimizu 890ddd
?E 84
Shinya Kitaoka 120a6e
?E 56 {
Shinya Kitaoka 120a6e
      ?D 56 ras->cmap.offset = img->cmap.offset;
Shinya Kitaoka 120a6e
      ras->cmap.size         = img->cmap.size;
Shinya Kitaoka 120a6e
      ?E 56
Toshihiro Shimizu 890ddd
?I 56
Shinya Kitaoka 120a6e
?D 82 ras->cmap.size        = img->cmap.size;
Shinya Kitaoka 120a6e
      ?E 82 ras->cmap.info   = img->cmap.info;
Shinya Kitaoka 120a6e
      ?E 56
Shinya Kitaoka 120a6e
?D 79 if (build_cmap) {
Shinya Kitaoka 120a6e
        TMALLOC(ras->cmap.buffer, ras->cmap.size)
Shinya Kitaoka 120a6e
        for (i                        = 0; i < ras->cmap.size; i++) {
Shinya Kitaoka 120a6e
          ?D 60 ras->cmap.buffer[i].r = img->cmap.buffer[i].red;
Shinya Kitaoka 120a6e
          ras->cmap.buffer[i].g       = img->cmap.buffer[i].green;
Shinya Kitaoka 120a6e
          ras->cmap.buffer[i].b       = img->cmap.buffer[i].blue;
Shinya Kitaoka 120a6e
          ras->cmap.buffer[i].m       = img->cmap.buffer[i].matte;
Shinya Kitaoka 120a6e
          ?E 60
Shinya Kitaoka 120a6e
?I 60 ras->cmap.buffer[i].r          = img->cmap.buffer[i].r;
Shinya Kitaoka 120a6e
          ras->cmap.buffer[i].g       = img->cmap.buffer[i].g;
Shinya Kitaoka 120a6e
          ras->cmap.buffer[i].b       = img->cmap.buffer[i].b;
Shinya Kitaoka 120a6e
          ras->cmap.buffer[i].m       = img->cmap.buffer[i].m;
Shinya Kitaoka 120a6e
          ?E 60
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
      }
Shinya Kitaoka 120a6e
      ?E 79
Toshihiro Shimizu 890ddd
?I 79 if (get_cmap)
Toshihiro Shimizu 890ddd
?D 84 ras->cmap.buffer = img->cmap.buffer;
Shinya Kitaoka 120a6e
      ?E 84
Shinya Kitaoka 120a6e
?I 84 {
Shinya Kitaoka 120a6e
        ras->cmap.buffer    = img->cmap.buffer;
Shinya Kitaoka 120a6e
        ras->cmap.penbuffer = img->cmap.penbuffer;
Shinya Kitaoka 120a6e
        ras->cmap.colbuffer = img->cmap.colbuffer;
Shinya Kitaoka 120a6e
      }
Shinya Kitaoka 120a6e
      ?E 84
Toshihiro Shimizu 890ddd
?E 79 else ?D 84 ras->cmap.buffer = NIL;
Shinya Kitaoka 120a6e
      ?E 84
Shinya Kitaoka 120a6e
?I 84 {
Shinya Kitaoka 120a6e
        ras->cmap.buffer    = NIL;
Shinya Kitaoka 120a6e
        ras->cmap.penbuffer = NIL;
Shinya Kitaoka 120a6e
        ras->cmap.colbuffer = NIL;
Shinya Kitaoka 120a6e
      }
Shinya Kitaoka 120a6e
      ?E 84
Shinya Kitaoka 120a6e
    }
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
?E 40
Toshihiro Shimizu 890ddd
?E 26
Toshihiro Shimizu 890ddd
?E 22
Toshihiro Shimizu 890ddd
?E 21
Toshihiro Shimizu 890ddd
?E 17
Toshihiro Shimizu 890ddd
?E 14
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?E 6
Shinya Kitaoka 120a6e
    /*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?I 88
Shinya Kitaoka 120a6e
    /* ATTENZIONE !!!!! Esiste una copia esatta di questa func
Shinya Kitaoka 120a6e
in sources/util/image/timage/timg.c, per evitare che la image dipenda dalla
Shinya Kitaoka 120a6e
raster; ogni modifica di questa va anche riportata li'. Vincenzo */
Toshihiro Shimizu 890ddd
 
Toshihiro Shimizu 890ddd
?E 88 int
Shinya Kitaoka 120a6e
rop_pixbits(RAS_TYPE rastertype) {
Shinya Kitaoka 120a6e
  ?D 2
Shinya Kitaoka 120a6e
      /* attenzione: appena entra il primo tipo non multiplo di 8 bits
Shinya Kitaoka 120a6e
* tutto il codice di questo pacchetto va ricontrollato da cima a fondo
Shinya Kitaoka 120a6e
*/
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
?E 2 switch (rastertype) {
Shinya Kitaoka 120a6e
    ?D 2 CASE RAS_BW : return 8;
Shinya Kitaoka 120a6e
    CASE RAS_CM : return 16;
Shinya Kitaoka 120a6e
    ?E 2
Toshihiro Shimizu 890ddd
?I 2
Toshihiro Shimizu 890ddd
?D 39 CASE RAS_BW : return 1;
Shinya Kitaoka 120a6e
    CASE RAS_WB : return 1;
Shinya Kitaoka 120a6e
    CASE RAS_GR8 : return 8;
Shinya Kitaoka 120a6e
    ?I 23 CASE RAS_CM8 : return 8;
Shinya Kitaoka 120a6e
    ?E 23 CASE RAS_CM16 : return 16;
Shinya Kitaoka 120a6e
    CASE RAS_RGB : return 24;
Shinya Kitaoka 120a6e
    CASE RAS_RGB_ : return 32;
Shinya Kitaoka 120a6e
    ?E 2 CASE RAS_RGBM : return 32;
Shinya Kitaoka 120a6e
    ?E 39
Toshihiro Shimizu 890ddd
?I 39 CASE RAS_BW : return 1;
Shinya Kitaoka 120a6e
    CASE RAS_MBW16 : return 16;
Shinya Kitaoka 120a6e
    CASE RAS_WB : return 1;
Shinya Kitaoka 120a6e
    CASE RAS_GR8 : return 8;
Shinya Kitaoka 120a6e
    ?I 90 CASE RAS_GR16 : return 16;
Shinya Kitaoka 120a6e
    ?E 90 CASE RAS_CM8 : return 8;
Shinya Kitaoka 120a6e
    ?D 83 CASE RAS_UNICM8 : return 8;
Shinya Kitaoka 120a6e
    ?E 83
Toshihiro Shimizu 890ddd
?I 72 CASE RAS_CM8S8 : return 8;
Shinya Kitaoka 120a6e
    CASE RAS_CM8S4 : return 8;
Shinya Kitaoka 120a6e
    ?E 72 CASE RAS_CM16 : return 16;
Shinya Kitaoka 120a6e
    ?I 98 CASE RAS_CM16S12 : return 16;
Shinya Kitaoka 120a6e
    ?E 98
Toshihiro Shimizu 890ddd
?D 83 CASE RAS_UNICM16 : return 16;
Shinya Kitaoka 120a6e
    ?I 53 CASE RAS_RGB16 : return 16;
Shinya Kitaoka 120a6e
    ?E 83
Toshihiro Shimizu 890ddd
?I 72 CASE RAS_CM16S8 : return 16;
Shinya Kitaoka 120a6e
    CASE RAS_CM16S4 : return 16;
Shinya Kitaoka 120a6e
    ?I 84 CASE RAS_CM24 : return 32;
Shinya Kitaoka 120a6e
    ?E 84
Toshihiro Shimizu 890ddd
?I 83 CASE RAS_RGB16 : return 16;
Shinya Kitaoka 120a6e
    ?I 96
Toshihiro Shimizu 890ddd
?D 97 CASE RAS_XRGB1555 : return 16;
Shinya Kitaoka 120a6e
    ?E 97
Toshihiro Shimizu 890ddd
?I 97 CASE RAS_RLEBW : return 1;
Shinya Kitaoka 120a6e
    ?E 97
Toshihiro Shimizu 890ddd
?E 96
Toshihiro Shimizu 890ddd
?E 83
Toshihiro Shimizu 890ddd
?E 72
Toshihiro Shimizu 890ddd
?E 53 CASE RAS_RGB : return 24;
Shinya Kitaoka 120a6e
    CASE RAS_RGB_ : return 32;
Shinya Kitaoka 120a6e
    CASE RAS_RGBM : return 32;
Shinya Kitaoka 120a6e
    ?I 58 CASE RAS_RGBM64 : return 64;
Shinya Kitaoka 120a6e
    CASE RAS_RGB_64 : return 64;
Shinya Kitaoka 120a6e
    ?E 58
Toshihiro Shimizu 890ddd
?E 39 DEFAULT : msg(MSG_IE, "rop_pixbits: invalid rastertype");
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  ?I 3 return 0;
Shinya Kitaoka 120a6e
  ?E 3
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?I 39
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?E 39
Shinya Kitaoka 120a6e
    /*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?I 9 int
Shinya Kitaoka 120a6e
rop_pixbytes(RAS_TYPE rastertype) {
Shinya Kitaoka 120a6e
  return (rop_pixbits(rastertype) + 7) >> 3;
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
?E 9 int rop_fillerbits(RAS_TYPE rastertype) {
Shinya Kitaoka 120a6e
  switch (rastertype) {
Shinya Kitaoka 120a6e
    ?D 2 CASE RAS_BW : return FALSE;
Shinya Kitaoka 120a6e
    CASE RAS_CM : return FALSE;
Shinya Kitaoka 120a6e
    ?E 2
Toshihiro Shimizu 890ddd
?I 2
Toshihiro Shimizu 890ddd
?D 39 CASE RAS_BW : return TRUE;
Shinya Kitaoka 120a6e
    CASE RAS_WB : return TRUE;
Shinya Kitaoka 120a6e
    CASE RAS_GR8 : return FALSE;
Shinya Kitaoka 120a6e
    ?I 23 CASE RAS_CM8 : return FALSE;
Shinya Kitaoka 120a6e
    ?E 23 CASE RAS_CM16 : return FALSE;
Shinya Kitaoka 120a6e
    CASE RAS_RGB : return FALSE;
Shinya Kitaoka 120a6e
    CASE RAS_RGB_ : return FALSE;
Shinya Kitaoka 120a6e
    ?E 2 CASE RAS_RGBM : return FALSE;
Shinya Kitaoka 120a6e
    ?E 39
Toshihiro Shimizu 890ddd
?I 39
Toshihiro Shimizu 890ddd
?D 84 CASE RAS_BW : return TRUE;
Shinya Kitaoka 120a6e
    CASE RAS_WB : return TRUE;
Shinya Kitaoka 120a6e
    CASE RAS_MBW16 : return FALSE;
Shinya Kitaoka 120a6e
    CASE RAS_GR8 : return FALSE;
Shinya Kitaoka 120a6e
    CASE RAS_CM8 : return FALSE;
Shinya Kitaoka 120a6e
    ?D 83 CASE RAS_UNICM8 : return FALSE;
Shinya Kitaoka 120a6e
    ?E 83 CASE RAS_CM16 : return FALSE;
Shinya Kitaoka 120a6e
    ?D 83 CASE RAS_UNICM16 : return FALSE;
Shinya Kitaoka 120a6e
    ?E 83
Toshihiro Shimizu 890ddd
?I 53 CASE RAS_RGB16 : return FALSE;
Shinya Kitaoka 120a6e
    ?E 53 CASE RAS_RGB : return FALSE;
Shinya Kitaoka 120a6e
    CASE RAS_RGB_ : return FALSE;
Shinya Kitaoka 120a6e
    CASE RAS_RGBM : return FALSE;
Shinya Kitaoka 120a6e
    ?I 59 CASE RAS_RGBM64 : return FALSE;
Shinya Kitaoka 120a6e
    ?E 59
Toshihiro Shimizu 890ddd
?E 39 DEFAULT : msg(MSG_IE, "rop_fillerbits: invalid rastertype");
Shinya Kitaoka 120a6e
    ?E 84
Toshihiro Shimizu 890ddd
?I 84 CASE RAS_BW : return TRUE;
Shinya Kitaoka 120a6e
    CASE RAS_WB : return TRUE;
Shinya Kitaoka 120a6e
  DEFAULT:
Shinya Kitaoka 120a6e
    return FALSE;
Shinya Kitaoka 120a6e
    ?E 84
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  ?I 3 return 0;
Shinya Kitaoka 120a6e
  ?E 3
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
?I 53 RAS_TYPE rop_standard_ras_type_of_pix_type(PIX_TYPE pix_type) {
Shinya Kitaoka 120a6e
  switch (pix_type) {
Shinya Kitaoka 120a6e
    ?D 96 CASE PIX_NONE : return RAS_NONE;
Shinya Kitaoka 120a6e
    CASE PIX_BW : return RAS_BW;
Shinya Kitaoka 120a6e
    CASE PIX_WB : return RAS_WB;
Shinya Kitaoka 120a6e
    CASE PIX_GR8 : return RAS_GR8;
Shinya Kitaoka 120a6e
    CASE PIX_CM8 : return RAS_CM8;
Shinya Kitaoka 120a6e
    CASE PIX_CM16 : return RAS_CM16;
Shinya Kitaoka 120a6e
    ?I 84 CASE PIX_CM24 : return RAS_CM24;
Shinya Kitaoka 120a6e
    ?E 84
Toshihiro Shimizu 890ddd
?I 72 CASE PIX_CM8S8 : return RAS_CM8S8;
Shinya Kitaoka 120a6e
    CASE PIX_CM8S4 : return RAS_CM8S4;
Shinya Kitaoka 120a6e
    CASE PIX_CM16S8 : return RAS_CM16S8;
Shinya Kitaoka 120a6e
    CASE PIX_CM16S4 : return RAS_CM16S4;
Shinya Kitaoka 120a6e
    ?E 72 CASE PIX_RGB16 : return RAS_RGB16;
Shinya Kitaoka 120a6e
    CASE PIX_RGB : return RAS_RGB;
Shinya Kitaoka 120a6e
    CASE PIX_RGB_ : return RAS_RGB_;
Shinya Kitaoka 120a6e
    CASE PIX_RGBM : return RAS_RGBM;
Shinya Kitaoka 120a6e
    ?E 96
Toshihiro Shimizu 890ddd
?I 96 CASE PIX_NONE : return RAS_NONE;
Shinya Kitaoka 120a6e
    CASE PIX_BW : return RAS_BW;
Shinya Kitaoka 120a6e
    CASE PIX_WB : return RAS_WB;
Shinya Kitaoka 120a6e
    CASE PIX_GR8 : return RAS_GR8;
Shinya Kitaoka 120a6e
    CASE PIX_CM8 : return RAS_CM8;
Shinya Kitaoka 120a6e
    CASE PIX_CM16 : return RAS_CM16;
Shinya Kitaoka 120a6e
    CASE PIX_CM24 : return RAS_CM24;
Shinya Kitaoka 120a6e
    CASE PIX_CM8S8 : return RAS_CM8S8;
Shinya Kitaoka 120a6e
    CASE PIX_CM8S4 : return RAS_CM8S4;
Shinya Kitaoka 120a6e
    ?I 98 CASE PIX_CM16S12 : return RAS_CM16S12;
Shinya Kitaoka 120a6e
    ?E 98 CASE PIX_CM16S8 : return RAS_CM16S8;
Shinya Kitaoka 120a6e
    CASE PIX_CM16S4 : return RAS_CM16S4;
Shinya Kitaoka 120a6e
    CASE PIX_RGB16 : return RAS_RGB16;
Shinya Kitaoka 120a6e
    ?D 97 CASE PIX_XRGB1555 : return RAS_XRGB1555;
Shinya Kitaoka 120a6e
    ?E 97 CASE PIX_RGB : return RAS_RGB;
Shinya Kitaoka 120a6e
    CASE PIX_RGB_ : return RAS_RGB_;
Shinya Kitaoka 120a6e
    CASE PIX_RGBM : return RAS_RGBM;
Shinya Kitaoka 120a6e
    ?E 96 DEFAULT :
Toshihiro Shimizu 890ddd
?D 63 assert(FALSE);
Shinya Kitaoka 120a6e
    return RAS_NONE;
Shinya Kitaoka 120a6e
    ?E 63
Toshihiro Shimizu 890ddd
?I 63
Toshihiro Shimizu 890ddd
?D 78 assert(FALSE);
Shinya Kitaoka 120a6e
    ?E 78
Toshihiro Shimizu 890ddd
?I 78 abort();
Shinya Kitaoka 120a6e
    ?E 78
Toshihiro Shimizu 890ddd
?E 63
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  ?I 63 return RAS_NONE;
Shinya Kitaoka 120a6e
  ?E 63
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
PIX_TYPE rop_pix_type_of_ras_type(RAS_TYPE ras_type) {
Shinya Kitaoka 120a6e
  switch (ras_type) {
Shinya Kitaoka 120a6e
    ?D 96 CASE RAS_NONE : return PIX_NONE;
Shinya Kitaoka 120a6e
    CASE RAS_BW : return PIX_BW;
Shinya Kitaoka 120a6e
    CASE RAS_WB : return PIX_WB;
Shinya Kitaoka 120a6e
    CASE RAS_GR8 : return PIX_GR8;
Shinya Kitaoka 120a6e
    ?I 90 CASE RAS_GR16 : return PIX_RGB16;
Shinya Kitaoka 120a6e
    ?E 90 CASE RAS_CM8 : return PIX_CM8;
Shinya Kitaoka 120a6e
    CASE RAS_CM16 : return PIX_CM16;
Shinya Kitaoka 120a6e
    CASE RAS_RGB16 : return PIX_RGB16;
Shinya Kitaoka 120a6e
    CASE RAS_RGB : return PIX_RGB;
Shinya Kitaoka 120a6e
    CASE RAS_RGB_ : return PIX_RGB_;
Shinya Kitaoka 120a6e
    CASE RAS_RGBM : return PIX_RGBM;
Shinya Kitaoka 120a6e
    CASE RAS_MBW16 : return PIX_BW;
Shinya Kitaoka 120a6e
    ?D 83 CASE RAS_UNICM8 : return PIX_CM8;
Shinya Kitaoka 120a6e
    CASE RAS_UNICM16 : return PIX_CM16;
Shinya Kitaoka 120a6e
    ?E 83
Toshihiro Shimizu 890ddd
?I 72 CASE RAS_CM8S8 : return PIX_CM8S8;
Shinya Kitaoka 120a6e
    CASE RAS_CM8S4 : return PIX_CM8S4;
Shinya Kitaoka 120a6e
    CASE RAS_CM16S8 : return PIX_CM16S8;
Shinya Kitaoka 120a6e
    CASE RAS_CM16S4 : return PIX_CM16S4;
Shinya Kitaoka 120a6e
    ?I 84 CASE RAS_CM24 : return PIX_CM24;
Shinya Kitaoka 120a6e
    ?E 96
Toshihiro Shimizu 890ddd
?I 96 CASE RAS_NONE : return PIX_NONE;
Shinya Kitaoka 120a6e
    CASE RAS_BW : return PIX_BW;
Shinya Kitaoka 120a6e
    CASE RAS_WB : return PIX_WB;
Shinya Kitaoka 120a6e
    CASE RAS_GR8 : return PIX_GR8;
Shinya Kitaoka 120a6e
    CASE RAS_GR16 : return PIX_RGB16;
Shinya Kitaoka 120a6e
    CASE RAS_CM8 : return PIX_CM8;
Shinya Kitaoka 120a6e
    CASE RAS_CM16 : return PIX_CM16;
Shinya Kitaoka 120a6e
    CASE RAS_RGB16 : return PIX_RGB16;
Shinya Kitaoka 120a6e
    ?D 97 CASE RAS_XRGB1555 : return PIX_XRGB1555;
Shinya Kitaoka 120a6e
    ?E 97 CASE RAS_RGB : return PIX_RGB;
Shinya Kitaoka 120a6e
    CASE RAS_RGB_ : return PIX_RGB_;
Shinya Kitaoka 120a6e
    CASE RAS_RGBM : return PIX_RGBM;
Shinya Kitaoka 120a6e
    CASE RAS_MBW16 : return PIX_BW;
Shinya Kitaoka 120a6e
    CASE RAS_CM8S8 : return PIX_CM8S8;
Shinya Kitaoka 120a6e
    CASE RAS_CM8S4 : return PIX_CM8S4;
Shinya Kitaoka 120a6e
    ?I 98 CASE RAS_CM16S12 : return PIX_CM16S12;
Shinya Kitaoka 120a6e
    ?E 98 CASE RAS_CM16S8 : return PIX_CM16S8;
Shinya Kitaoka 120a6e
    CASE RAS_CM16S4 : return PIX_CM16S4;
Shinya Kitaoka 120a6e
    CASE RAS_CM24 : return PIX_CM24;
Shinya Kitaoka 120a6e
    ?E 96
Toshihiro Shimizu 890ddd
?E 84
Toshihiro Shimizu 890ddd
?E 72 DEFAULT :
Toshihiro Shimizu 890ddd
?D 63 assert(FALSE);
Shinya Kitaoka 120a6e
    return PIX_NONE;
Shinya Kitaoka 120a6e
    ?E 63
Toshihiro Shimizu 890ddd
?I 63
Toshihiro Shimizu 890ddd
?D 78 assert(FALSE);
Shinya Kitaoka 120a6e
    ?E 78
Toshihiro Shimizu 890ddd
?I 78 abort();
Shinya Kitaoka 120a6e
    ?E 78
Toshihiro Shimizu 890ddd
?E 63
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  ?I 63 return PIX_NONE;
Shinya Kitaoka 120a6e
  ?E 63
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
?I 74 void rop_premultiply(RASTER *rin, RASTER *rout) {
Shinya Kitaoka 120a6e
  int x, y, wrapin, wrapout, lx, ly;
Shinya Kitaoka 120a6e
  LPIXEL *in, *out, val, transp;
Shinya Kitaoka 120a6e
  SPIXEL *in64, *out64, val64, transp64;
Shinya Kitaoka 120a6e
  UINT m;
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  ?D 84
Toshihiro Shimizu 890ddd
#define MAGICFAC (257U * 256U + 1U)
Toshihiro Shimizu 890ddd
?E 84
Shinya Kitaoka 120a6e
#define PREMULT(V, M)                                                          \
Shinya Kitaoka 120a6e
  {                                                                            \
Shinya Kitaoka 120a6e
    UINT mm = (M)*MAGICFAC;                                                    \
Shinya Kitaoka 120a6e
    (V).r   = ((V).r * mm + (1U << 23)) >> 24;                                 \
Shinya Kitaoka 120a6e
    (V).g   = ((V).g * mm + (1U << 23)) >> 24;                                 \
Shinya Kitaoka 120a6e
    (V).b   = ((V).b * mm + (1U << 23)) >> 24;                                 \
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
#define PREMULT64(V, M)                                                        \
Shinya Kitaoka 120a6e
  {                                                                            \
Shinya Kitaoka 120a6e
    double mf = (double)(M) * (1.0 / 65535.0);                                 \
Shinya Kitaoka 120a6e
    (V).r     = (USHORT)((double)((V).r) * mf + 0.5);                          \
Shinya Kitaoka 120a6e
    (V).g = (USHORT)((double)((V).g) * mf + 0.5);                              \
Shinya Kitaoka 120a6e
    (V).b = (USHORT)((double)((V).b) * mf + 0.5);                              \
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
      assert(rin->lx == rout->lx && rin->ly == rout->ly);
Shinya Kitaoka 120a6e
  wrapin  = rin->wrap;
Shinya Kitaoka 120a6e
  wrapout = rout->wrap;
Shinya Kitaoka 120a6e
  lx      = rin->lx;
Shinya Kitaoka 120a6e
  ly      = rin->ly;
Shinya Kitaoka 120a6e
  switch (RASRAS(rin->type, rout->type)) {
Shinya Kitaoka 120a6e
    CASE RASRAS(RAS_RGBM64, RAS_RGBM64)
Shinya Kitaoka 120a6e
        : transp64.r = transp64.g = transp64.b = transp64.m = 0;
Shinya Kitaoka 120a6e
    ?D 75 for (y = ly; y > 0; y--)
Toshihiro Shimizu 890ddd
?E 75
Toshihiro Shimizu 890ddd
?I 75 for (y = 0; y < ly; y++)
Shinya Kitaoka 120a6e
?E 75 {
Shinya Kitaoka 120a6e
      in64 = ((SPIXEL *)rin->buffer) + y * wrapin;
Shinya Kitaoka 120a6e
      out64        = ((SPIXEL *)rout->buffer) + y * wrapout;
Shinya Kitaoka 120a6e
      ?D 75 for (x = lx; x > 0; x--)
Toshihiro Shimizu 890ddd
?E 75
Shinya Kitaoka 120a6e
?I 75 for (x            = 0; x < lx; x++)
Shinya Kitaoka 120a6e
?E 75 {
Shinya Kitaoka 120a6e
        val64            = *in64++;
Shinya Kitaoka 120a6e
        m                = val64.m;
Shinya Kitaoka 120a6e
        if (!m) *out64++ = transp64;
Shinya Kitaoka 120a6e
        ?D 104 else if (m == 255U)
Toshihiro Shimizu 890ddd
?E 104
Toshihiro Shimizu 890ddd
?I 104 else if (m == 0xffff)
Shinya Kitaoka 120a6e
?E 104 *out64++         = val64;
Shinya Kitaoka 120a6e
        else {
Shinya Kitaoka 120a6e
          PREMULT64(val64, m)
Shinya Kitaoka 120a6e
          *out64++ = val64;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
      }
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    CASE RASRAS(RAS_RGBM, RAS_RGBM)
Shinya Kitaoka 120a6e
        : transp.r = transp.g = transp.b = transp.m = 0;
Shinya Kitaoka 120a6e
    ?D 75 for (y = ly; y > 0; y--)
Toshihiro Shimizu 890ddd
?E 75
Toshihiro Shimizu 890ddd
?I 75 for (y = 0; y < ly; y++)
Shinya Kitaoka 120a6e
?E 75 {
Shinya Kitaoka 120a6e
      in = ((LPIXEL *)rin->buffer) + y * wrapin;
Shinya Kitaoka 120a6e
      out          = ((LPIXEL *)rout->buffer) + y * wrapout;
Shinya Kitaoka 120a6e
      ?D 75 for (x = lx; x > 0; x--)
Toshihiro Shimizu 890ddd
?E 75
Toshihiro Shimizu 890ddd
?I 75 for (x = 0; x < lx; x++)
Shinya Kitaoka 120a6e
?E 75 {
Shinya Kitaoka 120a6e
        val   = *in++;
Shinya Kitaoka 120a6e
        m     = val.m;
Shinya Kitaoka 120a6e
        if (!m)
Shinya Kitaoka 120a6e
          *out++ = transp;
Shinya Kitaoka 120a6e
        else if (m == 255U)
Shinya Kitaoka 120a6e
          *out++ = val;
Shinya Kitaoka 120a6e
        else {
Shinya Kitaoka 120a6e
          PREMULT(val, m)
Shinya Kitaoka 120a6e
          *out++ = val;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
      }
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
  DEFAULT:
Shinya Kitaoka 120a6e
    ?D 78 assert(FALSE);
Shinya Kitaoka 120a6e
    ?E 78
Toshihiro Shimizu 890ddd
?I 78 abort();
Shinya Kitaoka 120a6e
    ?E 78
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  ?I 89 if (rout->extra_mask)
Shinya Kitaoka 120a6e
      rop_copy_extra(rin, rout, 0, 0, lx - 1, ly - 1, 0, 0);
Shinya Kitaoka 120a6e
  ?E 89
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?E 74
Toshihiro Shimizu 890ddd
?E 53
Shinya Kitaoka 120a6e
?I 41 static void rop_copy_same(RASTER *rin, RASTER *rout, int x1, int y1,
Shinya Kitaoka 120a6e
                                 int x2, int y2, int newx, int newy) {
Shinya Kitaoka 120a6e
  UCHAR *rowin, *rowout;
Shinya Kitaoka 120a6e
  int rowsize, bytewrapin, bytewrapout, d;
Shinya Kitaoka 120a6e
  int pixbits_in, pixbits_out;
Shinya Kitaoka 120a6e
  int pixbytes_in, pixbytes_out;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  ?I 104 if (((rin->type == RAS_BW) && (rout->type == RAS_BW)) ||
Shinya Kitaoka 120a6e
             ((rin->type == RAS_WB) && (rout->type == RAS_WB))) {
Shinya Kitaoka 120a6e
    rop_copy_bw(rin, rout, x1, y1, x2, y2, newx, newy);
Shinya Kitaoka 120a6e
    return;
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  ?E 104 pixbits_in = rop_pixbits(rin->type);
Shinya Kitaoka 120a6e
  pixbytes_in       = rop_pixbytes(rin->type);
Shinya Kitaoka 120a6e
  pixbits_out       = rop_pixbits(rout->type);
Shinya Kitaoka 120a6e
  pixbytes_out      = rop_pixbytes(rout->type);
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  /* pixsize compatibili */
Shinya Kitaoka 120a6e
  assert(pixbits_in == pixbits_out);
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  /* per adesso niente pixel non multipli di 8 bits */
Shinya Kitaoka 120a6e
  assert(!rop_fillerbits(rin->type));
Shinya Kitaoka 120a6e
  assert(!rop_fillerbits(rout->type));
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  /* copia */
Shinya Kitaoka 120a6e
  rowsize     = pixbytes_in * (x2 - x1 + 1);
Shinya Kitaoka 120a6e
  bytewrapin  = rin->wrap * pixbytes_in;
Shinya Kitaoka 120a6e
  bytewrapout = rout->wrap * pixbytes_out;
Shinya Kitaoka 120a6e
  rowin = (UCHAR *)rin->buffer + y1 * bytewrapin + ((x1 * pixbits_in) >> 3);
Shinya Kitaoka 120a6e
  rowout =
Shinya Kitaoka 120a6e
      (UCHAR *)rout->buffer + newy * bytewrapout + ((newx * pixbits_out) >> 3);
Shinya Kitaoka 120a6e
  d = y2 - y1 + 1;
Shinya Kitaoka 120a6e
  while (d-- > 0) {
Shinya Kitaoka 120a6e
    memmove(rowout, rowin, rowsize);
Shinya Kitaoka 120a6e
    rowin += bytewrapin;
Shinya Kitaoka 120a6e
    rowout += bytewrapout;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  ?I 89 if (rin->type == RAS_CM24 && rout->type == RAS_CM24)
Shinya Kitaoka 120a6e
      CLEAR_NEW_EXTRA_BITS_OF_RECT(rout, newx, newy, newx + x2 - x1,
Shinya Kitaoka 120a6e
                                   newy + y2 - y1, rin)
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
void rop_copy_extra(RASTER *rin, RASTER *rout, int x1, int y1, int x2, int y2,
Shinya Kitaoka 120a6e
                    int newx, int newy) {
Shinya Kitaoka 120a6e
  UCHAR *rowin, *rowout, *pixin, *pixout;
Shinya Kitaoka 120a6e
  ULONG *rowin24, *rowout24, *pixin24, *pixout24;
Shinya Kitaoka 120a6e
  int wrapin, wrapout, x, y, lx, ly, tmp;
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  if (!rout->extra_mask) return;
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  if (x1 > x2) {
Shinya Kitaoka 120a6e
    tmp = x1;
Shinya Kitaoka 120a6e
    x1  = x2;
Shinya Kitaoka 120a6e
    x2  = tmp;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  if (y1 > y2) {
Shinya Kitaoka 120a6e
    tmp = y1;
Shinya Kitaoka 120a6e
    y1  = y2;
Shinya Kitaoka 120a6e
    y2  = tmp;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  lx = x2 - x1 + 1;
Shinya Kitaoka 120a6e
  ly = y2 - y1 + 1;
Shinya Kitaoka 120a6e
  if (rin->extra_mask) {
Shinya Kitaoka 120a6e
    wrapin  = rin->wrap;
Shinya Kitaoka 120a6e
    wrapout = rout->wrap;
Shinya Kitaoka 120a6e
    if (rin->type == RAS_CM24) {
Shinya Kitaoka 120a6e
      rowin24 = (ULONG *)rin->buffer + x1 + y1 * wrapin;
Shinya Kitaoka 120a6e
      if (rout->type == RAS_CM24) {
Shinya Kitaoka 120a6e
        rowout24 = (ULONG *)rout->buffer + newx + newy * wrapout;
Shinya Kitaoka 120a6e
        for (y = 0; y < ly; y++) {
Shinya Kitaoka 120a6e
          pixin24  = rowin24;
Shinya Kitaoka 120a6e
          pixout24 = rowout24;
Shinya Kitaoka 120a6e
          for (x = 0; x < lx; x++) {
Shinya Kitaoka 120a6e
            *pixout24 = *pixout24 & 0x00ffffff | *pixin24 & 0xff000000;
Shinya Kitaoka 120a6e
            pixin24++;
Shinya Kitaoka 120a6e
            pixout24++;
Shinya Kitaoka 120a6e
          }
Shinya Kitaoka 120a6e
          rowin24 += wrapin;
Shinya Kitaoka 120a6e
          rowout24 += wrapout;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
      } else {
Shinya Kitaoka 120a6e
        rowout = rout->extra + newx + newy * wrapout;
Shinya Kitaoka 120a6e
        for (y = 0; y < ly; y++) {
Shinya Kitaoka 120a6e
          pixin24 = rowin24;
Shinya Kitaoka 120a6e
          pixout  = rowout;
Shinya Kitaoka 120a6e
          for (x = 0; x < lx; x++) {
Shinya Kitaoka 120a6e
            *pixout = (UCHAR)(*pixin24 >> 24);
Shinya Kitaoka 120a6e
            pixin24++;
Shinya Kitaoka 120a6e
            pixout++;
Shinya Kitaoka 120a6e
          }
Shinya Kitaoka 120a6e
          rowin24 += wrapin;
Shinya Kitaoka 120a6e
          rowout += wrapout;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
      }
Shinya Kitaoka 120a6e
    } else {
Shinya Kitaoka 120a6e
      rowin = rin->extra + x1 + y1 * wrapin;
Shinya Kitaoka 120a6e
      if (rout->type == RAS_CM24) {
Shinya Kitaoka 120a6e
        rowout24 = (ULONG *)rout->buffer + newx + newy * wrapout;
Shinya Kitaoka 120a6e
        for (y = 0; y < ly; y++) {
Shinya Kitaoka 120a6e
          pixin    = rowin;
Shinya Kitaoka 120a6e
          pixout24 = rowout24;
Shinya Kitaoka 120a6e
          for (x = 0; x < lx; x++) {
Shinya Kitaoka 120a6e
            *pixout24 = *pixout24 & 0x00ffffff | *pixin << 24;
Shinya Kitaoka 120a6e
            pixin++;
Shinya Kitaoka 120a6e
            pixout24++;
Shinya Kitaoka 120a6e
          }
Shinya Kitaoka 120a6e
          rowin += wrapin;
Shinya Kitaoka 120a6e
          rowout24 += wrapout;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
      } else {
Shinya Kitaoka 120a6e
        rowout = rout->extra + newx + newy * wrapout;
Shinya Kitaoka 120a6e
        for (y = 0; y < ly; y++) {
Shinya Kitaoka 120a6e
          memmove(rowout, rowin, lx);
Shinya Kitaoka 120a6e
          rowin += wrapin;
Shinya Kitaoka 120a6e
          rowout += wrapout;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
      }
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  CLEAR_NEW_EXTRA_BITS_OF_RECT(rout, newx, newy, newx + lx - 1, newy + ly - 1,
Shinya Kitaoka 120a6e
                               rin)
Shinya Kitaoka 120a6e
  ?E 89
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?E 41
Shinya Kitaoka 120a6e
?I 18 static void rop_copy_gr8_rgbm(RASTER *rin, RASTER *rout, int x1, int y1,
Shinya Kitaoka 120a6e
                                     int x2, int y2, int newx, int newy) {
Shinya Kitaoka 120a6e
  LPIXEL *rowout, *pixout;
Shinya Kitaoka 120a6e
  UCHAR *rowin, *pixin;
Shinya Kitaoka 120a6e
  int wrapin, wrapout;
Shinya Kitaoka 120a6e
  int x, lx, ly;
Shinya Kitaoka 120a6e
  LPIXEL tmp;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  lx      = x2 - x1 + 1;
Shinya Kitaoka 120a6e
  ly      = y2 - y1 + 1;
Shinya Kitaoka 120a6e
  wrapin  = rin->wrap;
Shinya Kitaoka 120a6e
  wrapout = rout->wrap;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  rowin  = (UCHAR *)rin->buffer + wrapin * y1 + x1;
Shinya Kitaoka 120a6e
  rowout = (LPIXEL *)rout->buffer + wrapout * newy + newx;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  while (ly-- > 0) {
Shinya Kitaoka 120a6e
    pixin  = rowin;
Shinya Kitaoka 120a6e
    pixout = rowout;
Shinya Kitaoka 120a6e
    for (x = 0; x < lx; x++) {
Shinya Kitaoka 120a6e
      tmp.r     = *pixin;
Shinya Kitaoka 120a6e
      tmp.g     = *pixin;
Shinya Kitaoka 120a6e
      tmp.b     = *pixin;
Shinya Kitaoka 120a6e
      tmp.m     = 0xff;
Shinya Kitaoka 120a6e
      *pixout++ = tmp;
Shinya Kitaoka 120a6e
      pixin++;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    rowin += wrapin;
Shinya Kitaoka 120a6e
    rowout += wrapout;
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?I 20
Shinya Kitaoka 120a6e
?D 84 static void rop_reduce_gr8_rgbm(RASTER *rin, RASTER *rout, int x1,
Shinya Kitaoka 120a6e
                                       int y1, int x2, int y2, int newx,
Shinya Kitaoka 120a6e
                                       int newy, int factor) {
Shinya Kitaoka 120a6e
  printf("rop_reduce_gr8_rgbm not implemented yet\n");
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?E 84
Toshihiro Shimizu 890ddd
?I 28
Toshihiro Shimizu 890ddd
static void rop_zoom_out_gr8_rgbm(RASTER *rin, RASTER *rout,
Toshihiro Shimizu 890ddd
?D 31
Toshihiro Shimizu 890ddd
                                int x1, int y1, int x2, int y2,
Toshihiro Shimizu 890ddd
			        int newx, int newy, int factor)
Toshihiro Shimizu 890ddd
?E 31
Toshihiro Shimizu 890ddd
?I 31
Toshihiro Shimizu 890ddd
                                  int x1, int y1, int x2, int y2,
Toshihiro Shimizu 890ddd
			          int newx, int newy, int abs_zoom_level)
Toshihiro Shimizu 890ddd
?E 31
Toshihiro Shimizu 890ddd
{
Shinya Kitaoka 120a6e
  ?D 47 printf("rop_zoom_out_gr8_rgbm not implemented yet\n");
Shinya Kitaoka 120a6e
  ?E 47
Toshihiro Shimizu 890ddd
?I 47 UCHAR *rowin, *pixin, *in;
Shinya Kitaoka 120a6e
  LPIXEL *rowout, *pixout, valout;
Shinya Kitaoka 120a6e
  int tmp;
Shinya Kitaoka 120a6e
  int wrapin, wrapout;
Shinya Kitaoka 120a6e
  int x, y, lx, ly, xlast, ylast, xrest, yrest, i, j;
Shinya Kitaoka 120a6e
  int factor, fac_fac_2_bits;
Shinya Kitaoka 120a6e
  int fac_fac, yrest_fac, fac_xrest, yrest_xrest;
Shinya Kitaoka 120a6e
  int fac_fac_2, yrest_fac_2, fac_xrest_2, yrest_xrest_2;
Shinya Kitaoka 120a6e
  int fac_fac_4;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  lx             = x2 - x1 + 1;
Shinya Kitaoka 120a6e
  ly             = y2 - y1 + 1;
Shinya Kitaoka 120a6e
  factor         = 1 << abs_zoom_level;
Shinya Kitaoka 120a6e
  ?D 61 xrest    = lx % factor;
Shinya Kitaoka 120a6e
  yrest          = ly % factor;
Shinya Kitaoka 120a6e
  ?E 61
Shinya Kitaoka 120a6e
?I 61 xrest     = lx & (factor - 1);
Shinya Kitaoka 120a6e
  yrest          = ly & (factor - 1);
Shinya Kitaoka 120a6e
  ?E 61 xlast    = x2 - xrest + 1;
Shinya Kitaoka 120a6e
  ylast          = y2 - yrest + 1;
Shinya Kitaoka 120a6e
  fac_fac        = factor * factor;
Shinya Kitaoka 120a6e
  fac_fac_2      = fac_fac >> 1;
Shinya Kitaoka 120a6e
  fac_fac_4      = fac_fac >> 2;
Shinya Kitaoka 120a6e
  fac_fac_2_bits = 2 * abs_zoom_level - 1;
Shinya Kitaoka 120a6e
  yrest_fac      = yrest * factor;
Shinya Kitaoka 120a6e
  yrest_fac_2    = yrest_fac >> 1;
Shinya Kitaoka 120a6e
  fac_xrest      = factor * xrest;
Shinya Kitaoka 120a6e
  fac_xrest_2    = fac_xrest >> 1;
Shinya Kitaoka 120a6e
  yrest_xrest    = yrest * xrest;
Shinya Kitaoka 120a6e
  yrest_xrest_2  = yrest_xrest >> 1;
Shinya Kitaoka 120a6e
  wrapin         = rin->wrap;
Shinya Kitaoka 120a6e
  wrapout        = rout->wrap;
Shinya Kitaoka 120a6e
  valout.m       = 0xff;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  rowin  = (UCHAR *)rin->buffer + wrapin * y1 + x1;
Shinya Kitaoka 120a6e
  rowout = (LPIXEL *)rout->buffer + wrapout * newy + newx;
Shinya Kitaoka 120a6e
  for (y = y1; y < ylast; y += factor) {
Shinya Kitaoka 120a6e
    pixin  = rowin;
Shinya Kitaoka 120a6e
    pixout = rowout;
Shinya Kitaoka 120a6e
    for (x = x1; x < xlast; x += factor) {
Shinya Kitaoka 120a6e
      tmp = 0;
Shinya Kitaoka 120a6e
      in  = pixin;
Shinya Kitaoka 120a6e
      for (j = 0; j < factor; j += 2) {
Shinya Kitaoka 120a6e
        for (i = 0; i < factor; i += 2) {
Shinya Kitaoka 120a6e
          tmp += *in;
Shinya Kitaoka 120a6e
          in += wrapin;
Shinya Kitaoka 120a6e
          in++;
Shinya Kitaoka 120a6e
          tmp += *in;
Shinya Kitaoka 120a6e
          in -= wrapin;
Shinya Kitaoka 120a6e
          in++;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
        in += 2 * wrapin - factor;
Shinya Kitaoka 120a6e
      }
Shinya Kitaoka 120a6e
      valout.r = valout.g = valout.b = (tmp + fac_fac_4) >> fac_fac_2_bits;
Shinya Kitaoka 120a6e
      *pixout++                      = valout;
Shinya Kitaoka 120a6e
      pixin += factor;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    if (xrest) {
Shinya Kitaoka 120a6e
      tmp = 0;
Shinya Kitaoka 120a6e
      for (j = 0; j < factor; j++)
Shinya Kitaoka 120a6e
        for (i = 0; i < xrest; i++) {
Shinya Kitaoka 120a6e
          tmp += pixin[i + j * wrapin];
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
      valout.r = valout.g = valout.b = (tmp + fac_xrest_2) / fac_xrest;
Shinya Kitaoka 120a6e
      *pixout                        = valout;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    rowin += wrapin * factor;
Shinya Kitaoka 120a6e
    rowout += wrapout;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  if (yrest) {
Shinya Kitaoka 120a6e
    pixin  = rowin;
Shinya Kitaoka 120a6e
    pixout = rowout;
Shinya Kitaoka 120a6e
    for (x = x1; x < xlast; x += factor) {
Shinya Kitaoka 120a6e
      tmp = 0;
Shinya Kitaoka 120a6e
      for (j = 0; j < yrest; j++)
Shinya Kitaoka 120a6e
        for (i = 0; i < factor; i++) {
Shinya Kitaoka 120a6e
          tmp += pixin[i + j * wrapin];
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
      valout.r = valout.g = valout.b = (tmp + yrest_fac_2) / yrest_fac;
Shinya Kitaoka 120a6e
      *pixout++                      = valout;
Shinya Kitaoka 120a6e
      pixin += factor;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    if (xrest) {
Shinya Kitaoka 120a6e
      tmp = 0;
Shinya Kitaoka 120a6e
      for (j = 0; j < yrest; j++)
Shinya Kitaoka 120a6e
        for (i = 0; i < xrest; i++) {
Shinya Kitaoka 120a6e
          tmp += pixin[i + j * wrapin];
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
      valout.r = valout.g = valout.b = (tmp + yrest_xrest_2) / yrest_xrest;
Shinya Kitaoka 120a6e
      *pixout                        = valout;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  ?E 47
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?E 28
Toshihiro Shimizu 890ddd
?E 20
Toshihiro Shimizu 890ddd
?E 18
Shinya Kitaoka 120a6e
?D 2 static void rop_copy_cm_rgbm(RASTER *rin, RASTER *rout, int x1, int y1,
Shinya Kitaoka 120a6e
                                   int x2, int y2, int newx, int newy)
Toshihiro Shimizu 890ddd
?E 2
Shinya Kitaoka 120a6e
?I 2 static void rop_copy_cm16_rgbm(RASTER *rin, RASTER *rout, int x1, int y1,
Shinya Kitaoka 120a6e
                                     int x2, int y2, int newx, int newy)
Shinya Kitaoka 120a6e
?E 2 {
Shinya Kitaoka 120a6e
  LPIXEL *rowout, *pixout, *cmap;
Shinya Kitaoka 120a6e
  USHORT *rowin, *pixin;
Shinya Kitaoka 120a6e
  ?D 18 int wrapin, wrapout, tmp, cmap_offset;
Shinya Kitaoka 120a6e
  ?E 18
Toshihiro Shimizu 890ddd
?I 18
Toshihiro Shimizu 890ddd
?D 29 int wrapin, wrapout, cmap_offset;
Shinya Kitaoka 120a6e
  ?E 29
Toshihiro Shimizu 890ddd
?I 29 int wrapin, wrapout;
Shinya Kitaoka 120a6e
  ?E 29
Toshihiro Shimizu 890ddd
?E 18 int x, lx, ly;
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  ?D 84 if (!rin->cmap.buffer) {
Shinya Kitaoka 120a6e
    ?D 2 printf("### INTERNAL ERROR - rop_copy_2_4; missing color map\n");
Shinya Kitaoka 120a6e
    return;
Shinya Kitaoka 120a6e
    ?E 2
Toshihiro Shimizu 890ddd
?I 2 printf("### INTERNAL ERROR - rop_copy_cm16_rgbm; missing color map\n");
Shinya Kitaoka 120a6e
    return;
Shinya Kitaoka 120a6e
    ?E 2
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  ?E 84
Shinya Kitaoka 120a6e
?D 29 cmap   = rin->cmap.buffer;
Shinya Kitaoka 120a6e
  cmap_offset = rin->cmap.offset;
Shinya Kitaoka 120a6e
  ?E 29
Toshihiro Shimizu 890ddd
?I 29
Shinya Kitaoka 120a6e
?D 56 cmap   = rin->cmap.buffer - rin->cmap.offset;
Shinya Kitaoka 120a6e
  ?E 56
Shinya Kitaoka 120a6e
?I 56 cmap   = rin->cmap.buffer - rin->cmap.info.offset_mask;
Shinya Kitaoka 120a6e
  ?E 56
Shinya Kitaoka 120a6e
?E 29 lx     = x2 - x1 + 1;
Shinya Kitaoka 120a6e
  ly          = y2 - y1 + 1;
Shinya Kitaoka 120a6e
  ?D 8 wrapin = rin->wrap;
Shinya Kitaoka 120a6e
  wrapout     = rout->wrap;
Shinya Kitaoka 120a6e
  ?E 8
Toshihiro Shimizu 890ddd
?I 8
Shinya Kitaoka 120a6e
?D 10 if ((rin->wrap % sizeof(USHORT)) || (rout->wrap % sizeof(LPIXEL))) {
Shinya Kitaoka 120a6e
    printf("### INTERNAL ERROR - rop_copy_cm16_rgbm; bad wrap\n");
Shinya Kitaoka 120a6e
    return;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  wrapin      = rin->wrap / sizeof(USHORT);
Shinya Kitaoka 120a6e
  wrapout     = rout->wrap / sizeof(LPIXEL);
Shinya Kitaoka 120a6e
  ?E 10
Toshihiro Shimizu 890ddd
?I 10 wrapin = rin->wrap;
Shinya Kitaoka 120a6e
  wrapout     = rout->wrap;
Shinya Kitaoka 120a6e
  ?E 10
Toshihiro Shimizu 890ddd
?E 8
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
?D 2 rowin   = (USHORT *)rin->buffer + wrapin * y1 + x1;
Shinya Kitaoka 120a6e
  rowout      = (LPIXEL *)rout->buffer + wrapout * newy + newx;
Shinya Kitaoka 120a6e
  ?E 2
Shinya Kitaoka 120a6e
?I 2 rowin   = (USHORT *)rin->buffer + wrapin * y1 + x1;
Shinya Kitaoka 120a6e
  rowout      = (LPIXEL *)rout->buffer + wrapout * newy + newx;
Shinya Kitaoka 120a6e
  ?E 2
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
      while (ly-- > 0) {
Shinya Kitaoka 120a6e
    pixin  = rowin;
Shinya Kitaoka 120a6e
    pixout = rowout;
Shinya Kitaoka 120a6e
    for (x = 0; x < lx; x++)
Shinya Kitaoka 120a6e
			?D 29 *pixout++ = cmap[*pixin++ - cmap_offset];
Shinya Kitaoka 120a6e
    ?E 29
Shinya Kitaoka 120a6e
?I 29 *pixout++    = cmap[*pixin++];
Shinya Kitaoka 120a6e
    ?E 29 rowin += wrapin;
Shinya Kitaoka 120a6e
    rowout += wrapout;
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?I 4
Shinya Kitaoka 120a6e
    /*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?I 84 static void
Shinya Kitaoka 120a6e
rop_copy_cm24_rgbm(RASTER *rin, RASTER *rout, int x1, int y1, int x2, int y2,
Shinya Kitaoka 120a6e
                   int newx, int newy) {
Shinya Kitaoka 120a6e
  LPIXEL *rowout, *pixout, valout, *penmap, *colmap;
Shinya Kitaoka 120a6e
  ULONG *rowin, *pixin, valin;
Shinya Kitaoka 120a6e
  ?I 89 UCHAR *exrow, *expix;
Shinya Kitaoka 120a6e
  ?E 89 int wrapin, wrapout;
Shinya Kitaoka 120a6e
  ?D 89 int x, lx, ly;
Shinya Kitaoka 120a6e
  ?E 89
Toshihiro Shimizu 890ddd
?I 89 int x, lx, ly, lines;
Shinya Kitaoka 120a6e
  ?E 89
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
      penmap   = rin->cmap.penbuffer;
Shinya Kitaoka 120a6e
  colmap       = rin->cmap.colbuffer;
Shinya Kitaoka 120a6e
  lx           = x2 - x1 + 1;
Shinya Kitaoka 120a6e
  ly           = y2 - y1 + 1;
Shinya Kitaoka 120a6e
  ?I 89 lines  = ly;
Shinya Kitaoka 120a6e
  ?E 89 wrapin = rin->wrap;
Shinya Kitaoka 120a6e
  wrapout      = rout->wrap;
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  rowin  = (ULONG *)rin->buffer + wrapin * y1 + x1;
Shinya Kitaoka 120a6e
  rowout = (LPIXEL *)rout->buffer + wrapout * newy + newx;
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  ?D 89 while (ly-- > 0)
Toshihiro Shimizu 890ddd
?E 89
Toshihiro Shimizu 890ddd
?I 89 if (rin->extra_mask & rout->extra_mask)
Shinya Kitaoka 120a6e
?E 89 {
Shinya Kitaoka 120a6e
    ?D 89 pixin = rowin;
Shinya Kitaoka 120a6e
    pixout      = rowout;
Shinya Kitaoka 120a6e
    for (x = 0; x < lx; x++) {
Shinya Kitaoka 120a6e
      valin = *pixin++;
Shinya Kitaoka 120a6e
      MAP24(valin, penmap, colmap, valout)
Shinya Kitaoka 120a6e
      *pixout++ = valout;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    rowin += wrapin;
Shinya Kitaoka 120a6e
    rowout += wrapout;
Shinya Kitaoka 120a6e
    ?E 89
Toshihiro Shimizu 890ddd
?I 89 exrow = rout->extra + wrapout * newy + newx;
Shinya Kitaoka 120a6e
    while (lines-- > 0) {
Shinya Kitaoka 120a6e
      pixin  = rowin;
Shinya Kitaoka 120a6e
      pixout = rowout;
Shinya Kitaoka 120a6e
      expix  = exrow;
Shinya Kitaoka 120a6e
      for (x = 0; x < lx; x++) {
Shinya Kitaoka 120a6e
        valin = *pixin++;
Shinya Kitaoka 120a6e
        MAP24(valin, penmap, colmap, valout)
Shinya Kitaoka 120a6e
        *pixout++ = valout;
Shinya Kitaoka 120a6e
        *expix++  = (UCHAR)(valin >> 24);
Shinya Kitaoka 120a6e
      }
Shinya Kitaoka 120a6e
      rowin += wrapin;
Shinya Kitaoka 120a6e
      rowout += wrapout;
Shinya Kitaoka 120a6e
      exrow += wrapout;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    ?E 89
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  ?I 89 else while (lines-- > 0) {
Shinya Kitaoka 120a6e
    pixin  = rowin;
Shinya Kitaoka 120a6e
    pixout = rowout;
Shinya Kitaoka 120a6e
    for (x = 0; x < lx; x++) {
Shinya Kitaoka 120a6e
      valin = *pixin++;
Shinya Kitaoka 120a6e
      MAP24(valin, penmap, colmap, valout)
Shinya Kitaoka 120a6e
      *pixout++ = valout;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    rowin += wrapin;
Shinya Kitaoka 120a6e
    rowout += wrapout;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  CLEAR_NEW_EXTRA_BITS_OF_RECT(rout, newx, newy, newx + lx - 1, newy + ly - 1,
Shinya Kitaoka 120a6e
                               rin)
Shinya Kitaoka 120a6e
  ?E 89
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?E 84
Shinya Kitaoka 120a6e
?I 58 static void rop_copy_cm16_rgbm64(RASTER *rin, RASTER *rout, int x1,
Shinya Kitaoka 120a6e
                                        int y1, int x2, int y2, int newx,
Shinya Kitaoka 120a6e
                                        int newy) {
Shinya Kitaoka 120a6e
  SPIXEL *rowout, *pixout;
Shinya Kitaoka 120a6e
  LPIXEL *cmap, src_pix;
Shinya Kitaoka 120a6e
  USHORT *rowin, *pixin;
Shinya Kitaoka 120a6e
  int wrapin, wrapout;
Shinya Kitaoka 120a6e
  int x, lx, ly;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  ?D 84 if (!rin->cmap.buffer) {
Shinya Kitaoka 120a6e
    printf("### INTERNAL ERROR - rop_copy_cm16_rgbm; missing color map\n");
Shinya Kitaoka 120a6e
    return;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  ?E 84 cmap = rin->cmap.buffer - rin->cmap.info.offset_mask;
Shinya Kitaoka 120a6e
  lx         = x2 - x1 + 1;
Shinya Kitaoka 120a6e
  ly         = y2 - y1 + 1;
Shinya Kitaoka 120a6e
  wrapin     = rin->wrap;
Shinya Kitaoka 120a6e
  wrapout    = rout->wrap;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  rowin  = (USHORT *)rin->buffer + wrapin * y1 + x1;
Shinya Kitaoka 120a6e
  rowout = (SPIXEL *)rout->buffer + wrapout * newy + newx;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  while (ly-- > 0) {
Shinya Kitaoka 120a6e
    pixin  = rowin;
Shinya Kitaoka 120a6e
    pixout = rowout;
Shinya Kitaoka 120a6e
    for (x = 0; x < lx; x++) {
Shinya Kitaoka 120a6e
      src_pix = cmap[*pixin++];
Shinya Kitaoka 120a6e
      ?D 60 ROP_RGBM_TO_RGBM64(src_pix, *pixout)
Toshihiro Shimizu 890ddd
?E 60
Toshihiro Shimizu 890ddd
?I 60 PIX_RGBM_TO_RGBM64(src_pix, *pixout)
Toshihiro Shimizu 890ddd
?E 60 pixout++;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    rowin += wrapin;
Shinya Kitaoka 120a6e
    rowout += wrapout;
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
?I 84 static void rop_copy_cm24_rgbm64(RASTER *rin, RASTER *rout, int x1,
Shinya Kitaoka 120a6e
                                       int y1, int x2, int y2, int newx,
Shinya Kitaoka 120a6e
                                       int newy) {
Shinya Kitaoka 120a6e
  SPIXEL *rowout, *pixout, valout;
Shinya Kitaoka 120a6e
  LPIXEL *penmap, *colmap;
Shinya Kitaoka 120a6e
  ULONG *rowin, *pixin, valin;
Shinya Kitaoka 120a6e
  ?I 89 UCHAR *exrow, *expix;
Shinya Kitaoka 120a6e
  ?E 89 int wrapin, wrapout;
Shinya Kitaoka 120a6e
  ?D 89 int x, lx, ly;
Shinya Kitaoka 120a6e
  ?E 89
Toshihiro Shimizu 890ddd
?I 89 int x, lx, ly, lines;
Shinya Kitaoka 120a6e
  ?E 89
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
      penmap   = rin->cmap.penbuffer;
Shinya Kitaoka 120a6e
  colmap       = rin->cmap.colbuffer;
Shinya Kitaoka 120a6e
  lx           = x2 - x1 + 1;
Shinya Kitaoka 120a6e
  ly           = y2 - y1 + 1;
Shinya Kitaoka 120a6e
  ?I 89 lines  = ly;
Shinya Kitaoka 120a6e
  ?E 89 wrapin = rin->wrap;
Shinya Kitaoka 120a6e
  wrapout      = rout->wrap;
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  rowin  = (ULONG *)rin->buffer + wrapin * y1 + x1;
Shinya Kitaoka 120a6e
  rowout = (SPIXEL *)rout->buffer + wrapout * newy + newx;
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  ?D 89 while (ly-- > 0)
Toshihiro Shimizu 890ddd
?E 89
Toshihiro Shimizu 890ddd
?I 89 if (rin->extra_mask && rout->extra_mask)
Shinya Kitaoka 120a6e
?E 89 {
Shinya Kitaoka 120a6e
    ?D 89 pixin = rowin;
Shinya Kitaoka 120a6e
    pixout      = rowout;
Shinya Kitaoka 120a6e
    for (x = 0; x < lx; x++) {
Shinya Kitaoka 120a6e
      valin = *pixin++;
Shinya Kitaoka 120a6e
      MAP24_64(valin, penmap, colmap, valout)
Shinya Kitaoka 120a6e
      *pixout++ = valout;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    rowin += wrapin;
Shinya Kitaoka 120a6e
    rowout += wrapout;
Shinya Kitaoka 120a6e
    ?E 89
Toshihiro Shimizu 890ddd
?I 89 exrow = rout->extra + wrapout * newy + newx;
Shinya Kitaoka 120a6e
    while (lines-- > 0) {
Shinya Kitaoka 120a6e
      pixin  = rowin;
Shinya Kitaoka 120a6e
      pixout = rowout;
Shinya Kitaoka 120a6e
      expix  = exrow;
Shinya Kitaoka 120a6e
      for (x = 0; x < lx; x++) {
Shinya Kitaoka 120a6e
        valin = *pixin++;
Shinya Kitaoka 120a6e
        MAP24_64(valin, penmap, colmap, valout)
Shinya Kitaoka 120a6e
        *pixout++ = valout;
Shinya Kitaoka 120a6e
        *expix++  = (UCHAR)(valin >> 24);
Shinya Kitaoka 120a6e
      }
Shinya Kitaoka 120a6e
      rowin += wrapin;
Shinya Kitaoka 120a6e
      rowout += wrapout;
Shinya Kitaoka 120a6e
      exrow += wrapout;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    ?E 89
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  ?I 89 else while (lines-- > 0) {
Shinya Kitaoka 120a6e
    pixin  = rowin;
Shinya Kitaoka 120a6e
    pixout = rowout;
Shinya Kitaoka 120a6e
    for (x = 0; x < lx; x++) {
Shinya Kitaoka 120a6e
      valin = *pixin++;
Shinya Kitaoka 120a6e
      MAP24_64(valin, penmap, colmap, valout)
Shinya Kitaoka 120a6e
      *pixout++ = valout;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    rowin += wrapin;
Shinya Kitaoka 120a6e
    rowout += wrapout;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  CLEAR_NEW_EXTRA_BITS_OF_RECT(rout, newx, newy, newx + lx - 1, newy + ly - 1,
Shinya Kitaoka 120a6e
                               rin)
Shinya Kitaoka 120a6e
  ?E 89
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?E 84
Toshihiro Shimizu 890ddd
static void rop_copy_rgbm_rgbm64(RASTER *rin, RASTER *rout,
Toshihiro Shimizu 890ddd
?D 65
Toshihiro Shimizu 890ddd
                               int x1, int y1, int x2, int y2,
Toshihiro Shimizu 890ddd
			       int newx, int newy)
Toshihiro Shimizu 890ddd
?E 65
Toshihiro Shimizu 890ddd
?I 65
Toshihiro Shimizu 890ddd
                                 int x1, int y1, int x2, int y2,
Toshihiro Shimizu 890ddd
			         int newx, int newy)
Toshihiro Shimizu 890ddd
?E 65
Toshihiro Shimizu 890ddd
{
Shinya Kitaoka 120a6e
  SPIXEL *rowout, *pixout;
Shinya Kitaoka 120a6e
  LPIXEL *rowin, *pixin;
Shinya Kitaoka 120a6e
  int wrapin, wrapout;
Shinya Kitaoka 120a6e
  int x, lx, ly;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  lx      = x2 - x1 + 1;
Shinya Kitaoka 120a6e
  ly      = y2 - y1 + 1;
Shinya Kitaoka 120a6e
  wrapin  = rin->wrap;
Shinya Kitaoka 120a6e
  wrapout = rout->wrap;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  rowin  = (LPIXEL *)rin->buffer + wrapin * y1 + x1;
Shinya Kitaoka 120a6e
  rowout = (SPIXEL *)rout->buffer + wrapout * newy + newx;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  while (ly-- > 0) {
Shinya Kitaoka 120a6e
    pixin  = rowin;
Shinya Kitaoka 120a6e
    pixout = rowout;
Shinya Kitaoka 120a6e
    for (x = 0; x < lx; x++) {
Shinya Kitaoka 120a6e
      ?D 60 ROP_RGBM_TO_RGBM64(*pixin, *pixout)
Toshihiro Shimizu 890ddd
?E 60
Toshihiro Shimizu 890ddd
?I 60 PIX_RGBM_TO_RGBM64(*pixin, *pixout)
Toshihiro Shimizu 890ddd
?E 60 pixin++;
Shinya Kitaoka 120a6e
      pixout++;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    rowin += wrapin;
Shinya Kitaoka 120a6e
    rowout += wrapout;
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
static void rop_copy_rgbm64_rgbm(RASTER *rin, RASTER *rout,
Toshihiro Shimizu 890ddd
?D 65
Toshihiro Shimizu 890ddd
                               int x1, int y1, int x2, int y2,
Toshihiro Shimizu 890ddd
			       int newx, int newy)
Toshihiro Shimizu 890ddd
?E 65
Toshihiro Shimizu 890ddd
?I 65
Toshihiro Shimizu 890ddd
                                 int x1, int y1, int x2, int y2,
Toshihiro Shimizu 890ddd
			         int newx, int newy)
Toshihiro Shimizu 890ddd
?E 65
Toshihiro Shimizu 890ddd
{
Shinya Kitaoka 120a6e
  LPIXEL *rowout, *pixout;
Shinya Kitaoka 120a6e
  SPIXEL *rowin, *pixin;
Shinya Kitaoka 120a6e
  int wrapin, wrapout;
Shinya Kitaoka 120a6e
  int x, lx, ly;
Shinya Kitaoka 120a6e
  ?I 65
Toshihiro Shimizu 890ddd
?D 66 UINT random_round;
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
#define BYTE_FROM_USHORT_CUSTOM_ROUNDED(X, R)                                  \
Shinya Kitaoka 120a6e
  ((((X)*BYTE_FROM_USHORT_MAGICFAC) + (R)) >> 24)
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
#define RGBM64_TO_RGBM_CUSTOM_ROUNDED(S, L, R)                                 \
Shinya Kitaoka 120a6e
  {                                                                            \
Shinya Kitaoka 120a6e
    (L).r = BYTE_FROM_USHORT_CUSTOM_ROUNDED((S).r, (R));                       \
Shinya Kitaoka 120a6e
    (L).g = BYTE_FROM_USHORT_CUSTOM_ROUNDED((S).g, (R));                       \
Shinya Kitaoka 120a6e
    (L).b = BYTE_FROM_USHORT_CUSTOM_ROUNDED((S).b, (R));                       \
Shinya Kitaoka 120a6e
    (L).m = PIX_BYTE_FROM_USHORT((S).m);                                       \
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  ?E 66
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?D 66 tnz_random_seed(180461);
Shinya Kitaoka 120a6e
  ?E 66
Toshihiro Shimizu 890ddd
?I 66 PIX_INIT_DITHER_RGBM64_TO_RGBM
Toshihiro Shimizu 890ddd
?E 66
Toshihiro Shimizu 890ddd
?E 65
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
      lx  = x2 - x1 + 1;
Shinya Kitaoka 120a6e
  ly      = y2 - y1 + 1;
Shinya Kitaoka 120a6e
  wrapin  = rin->wrap;
Shinya Kitaoka 120a6e
  wrapout = rout->wrap;
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  rowin  = (SPIXEL *)rin->buffer + wrapin * y1 + x1;
Shinya Kitaoka 120a6e
  rowout = (LPIXEL *)rout->buffer + wrapout * newy + newx;
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  while (ly-- > 0) {
Shinya Kitaoka 120a6e
    pixin  = rowin;
Shinya Kitaoka 120a6e
    pixout = rowout;
Shinya Kitaoka 120a6e
    for (x = 0; x < lx; x++) {
Shinya Kitaoka 120a6e
      ?D 60 ROP_RGBM64_TO_RGBM(*pixin, *pixout)
Toshihiro Shimizu 890ddd
?E 60
Toshihiro Shimizu 890ddd
?I 60
Toshihiro Shimizu 890ddd
?D 65 PIX_RGBM64_TO_RGBM(*pixin, *pixout)
Toshihiro Shimizu 890ddd
?E 65
Toshihiro Shimizu 890ddd
?I 65
Toshihiro Shimizu 890ddd
?D 66 random_round = tnz_random_uint();
Shinya Kitaoka 120a6e
      random_round &= (1U << 24) - 1;
Shinya Kitaoka 120a6e
      RGBM64_TO_RGBM_CUSTOM_ROUNDED(*pixin, *pixout, random_round)
Shinya Kitaoka 120a6e
      ?E 66
Toshihiro Shimizu 890ddd
?I 66 PIX_DITHER_RGBM64_TO_RGBM(*pixin, *pixout) 
Toshihiro Shimizu 890ddd
?E 66
Toshihiro Shimizu 890ddd
?E 65
Toshihiro Shimizu 890ddd
?E 60 pixin++;
Shinya Kitaoka 120a6e
      pixout++;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    rowin += wrapin;
Shinya Kitaoka 120a6e
    rowout += wrapout;
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
?I 95 static void rop_copy_rgbx64_rgbx(RASTER *rin, RASTER *rout, int x1,
Shinya Kitaoka 120a6e
                                       int y1, int x2, int y2, int newx,
Shinya Kitaoka 120a6e
                                       int newy) {
Shinya Kitaoka 120a6e
  LPIXEL *rowout, *pixout;
Shinya Kitaoka 120a6e
  SPIXEL *rowin, *pixin;
Shinya Kitaoka 120a6e
  int wrapin, wrapout;
Shinya Kitaoka 120a6e
  int x, lx, ly;
Shinya Kitaoka 120a6e
  UINT random_round;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  PIX_INIT_DITHER_RGBM64_TO_RGBM
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  lx      = x2 - x1 + 1;
Shinya Kitaoka 120a6e
  ly      = y2 - y1 + 1;
Shinya Kitaoka 120a6e
  wrapin  = rin->wrap;
Shinya Kitaoka 120a6e
  wrapout = rout->wrap;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  rowin  = (SPIXEL *)rin->buffer + wrapin * y1 + x1;
Shinya Kitaoka 120a6e
  rowout = (LPIXEL *)rout->buffer + wrapout * newy + newx;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  while (ly-- > 0) {
Shinya Kitaoka 120a6e
    pixin  = rowin;
Shinya Kitaoka 120a6e
    pixout = rowout;
Shinya Kitaoka 120a6e
    for (x = 0; x < lx; x++) {
Shinya Kitaoka 120a6e
      random_round = tnz_random_uint() & ((1U << 24) - 1);
Shinya Kitaoka 120a6e
      pixout->r    = PIX_DITHER_BYTE_FROM_USHORT(pixin->r, random_round);
Shinya Kitaoka 120a6e
      pixout->g    = PIX_DITHER_BYTE_FROM_USHORT(pixin->g, random_round);
Shinya Kitaoka 120a6e
      pixout->b    = PIX_DITHER_BYTE_FROM_USHORT(pixin->b, random_round);
Shinya Kitaoka 120a6e
      pixout->m    = 0xff;
Shinya Kitaoka 120a6e
      pixin++;
Shinya Kitaoka 120a6e
      pixout++;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    rowin += wrapin;
Shinya Kitaoka 120a6e
    rowout += wrapout;
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?E 95
Toshihiro Shimizu 890ddd
?E 58
Toshihiro Shimizu 890ddd
?I 20
Shinya Kitaoka 120a6e
?D 84 static void rop_reduce_cm16_rgbm(RASTER *rin, RASTER *rout, int x1,
Shinya Kitaoka 120a6e
                                        int y1, int x2, int y2, int newx,
Shinya Kitaoka 120a6e
                                        int newy, int factor)
Toshihiro Shimizu 890ddd
?E 84
Shinya Kitaoka 120a6e
?I 84 static void rop_zoom_out_cm16_rgbm(RASTER *rin, RASTER *rout, int x1,
Shinya Kitaoka 120a6e
                                          int y1, int x2, int y2, int newx,
Shinya Kitaoka 120a6e
                                          int newy, int abs_zoom_level)
Shinya Kitaoka 120a6e
?E 84 {
Shinya Kitaoka 120a6e
  ?D 28 printf("rop_reduce_cm16_rgbm not implemented yet\n");
Shinya Kitaoka 120a6e
  ?E 28
Toshihiro Shimizu 890ddd
?I 28
Toshihiro Shimizu 890ddd
?D 84 USHORT *rowin, *pixin;
Shinya Kitaoka 120a6e
  ?E 84
Shinya Kitaoka 120a6e
?I 84 USHORT *rowin, *pixin, *in;
Shinya Kitaoka 120a6e
  ?E 84 LPIXEL *rowout, *pixout, *cmap, valin, valout;
Shinya Kitaoka 120a6e
  int tmp_r, tmp_g, tmp_b, tmp_m;
Shinya Kitaoka 120a6e
  ?D 29 int wrapin, wrapout, cmap_offset;
Shinya Kitaoka 120a6e
  ?E 29
Shinya Kitaoka 120a6e
?I 29 int wrapin, wrapout;
Shinya Kitaoka 120a6e
  ?E 29 int x, y, lx, ly, xlast, ylast, xrest, yrest, i, j;
Shinya Kitaoka 120a6e
  ?I 84 int factor, fac_fac_2_bits;
Shinya Kitaoka 120a6e
  ?E 84 int fac_fac, yrest_fac, fac_xrest, yrest_xrest;
Shinya Kitaoka 120a6e
  int fac_fac_2, yrest_fac_2, fac_xrest_2, yrest_xrest_2;
Shinya Kitaoka 120a6e
  ?I 84 int fac_fac_4;
Shinya Kitaoka 120a6e
  ?E 84
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
?D 29 cmap       = rin->cmap.buffer;
Shinya Kitaoka 120a6e
  cmap_offset     = rin->cmap.offset;
Shinya Kitaoka 120a6e
  ?E 29
Shinya Kitaoka 120a6e
?I 29
Shinya Kitaoka 120a6e
?D 56 cmap       = rin->cmap.buffer - rin->cmap.offset;
Shinya Kitaoka 120a6e
  ?E 56
Shinya Kitaoka 120a6e
?I 56 cmap       = rin->cmap.buffer - rin->cmap.info.offset_mask;
Shinya Kitaoka 120a6e
  ?E 56
Shinya Kitaoka 120a6e
?E 29 lx         = x2 - x1 + 1;
Shinya Kitaoka 120a6e
  ly              = y2 - y1 + 1;
Shinya Kitaoka 120a6e
  ?I 84 factor    = 1 << abs_zoom_level;
Shinya Kitaoka 120a6e
  ?E 84
Shinya Kitaoka 120a6e
?D 61 xrest      = lx % factor;
Shinya Kitaoka 120a6e
  yrest           = ly % factor;
Shinya Kitaoka 120a6e
  ?E 61
Shinya Kitaoka 120a6e
?I 61 xrest      = lx & (factor - 1);
Shinya Kitaoka 120a6e
  yrest           = ly & (factor - 1);
Shinya Kitaoka 120a6e
  ?E 61 xlast     = x2 - xrest + 1;
Shinya Kitaoka 120a6e
  ylast           = y2 - yrest + 1;
Shinya Kitaoka 120a6e
  fac_fac         = factor * factor;
Shinya Kitaoka 120a6e
  fac_fac_2       = fac_fac >> 1;
Shinya Kitaoka 120a6e
  ?I 84 fac_fac_4 = fac_fac >> 2;
Shinya Kitaoka 120a6e
  fac_fac_2_bits  = 2 * abs_zoom_level - 1;
Shinya Kitaoka 120a6e
  ?E 84 yrest_fac = yrest * factor;
Shinya Kitaoka 120a6e
  yrest_fac_2     = yrest_fac >> 1;
Shinya Kitaoka 120a6e
  fac_xrest       = factor * xrest;
Shinya Kitaoka 120a6e
  fac_xrest_2     = fac_xrest >> 1;
Shinya Kitaoka 120a6e
  yrest_xrest     = yrest * xrest;
Shinya Kitaoka 120a6e
  yrest_xrest_2   = yrest_xrest >> 1;
Shinya Kitaoka 120a6e
  wrapin          = rin->wrap;
Shinya Kitaoka 120a6e
  wrapout         = rout->wrap;
Shinya Kitaoka 120a6e
  ?I 84 valout.m  = 0xff;
Shinya Kitaoka 120a6e
  ?E 84
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
      rowin = (USHORT *)rin->buffer + wrapin * y1 + x1;
Shinya Kitaoka 120a6e
  rowout    = (LPIXEL *)rout->buffer + wrapout * newy + newx;
Shinya Kitaoka 120a6e
  for (y = y1; y < ylast; y += factor) {
Shinya Kitaoka 120a6e
    pixin  = rowin;
Shinya Kitaoka 120a6e
    pixout = rowout;
Shinya Kitaoka 120a6e
    for (x = x1; x < xlast; x += factor) {
Shinya Kitaoka 120a6e
      tmp_r = tmp_g = tmp_b = tmp_m = 0;
Shinya Kitaoka 120a6e
      ?D 84 for (j = 0; j < factor; j++) for (i = 0; i < factor; i++)
Shinya Kitaoka 120a6e
?E 84
Shinya Kitaoka 120a6e
?I 84 in = pixin;
Shinya Kitaoka 120a6e
      for (j = 0; j < factor; j += 2) {
Shinya Kitaoka 120a6e
        for (i = 0; i < factor; i += 2)
Shinya Kitaoka 120a6e
					?E 84 {
Shinya Kitaoka 120a6e
            ?D 29 valin = cmap[pixin[i + j * wrapin] - cmap_offset];
Shinya Kitaoka 120a6e
            ?E 29
Shinya Kitaoka 120a6e
?I 29
Shinya Kitaoka 120a6e
?D 84 valin            = cmap[pixin[i + j * wrapin]];
Shinya Kitaoka 120a6e
            ?E 84
Shinya Kitaoka 120a6e
?I 84 valin            = cmap[*in];
Shinya Kitaoka 120a6e
            tmp_r += valin.r;
Shinya Kitaoka 120a6e
            tmp_g += valin.g;
Shinya Kitaoka 120a6e
            tmp_b += valin.b;
Shinya Kitaoka 120a6e
            tmp_m += valin.m;
Shinya Kitaoka 120a6e
            in += wrapin;
Shinya Kitaoka 120a6e
            in++;
Shinya Kitaoka 120a6e
            valin = cmap[*in];
Shinya Kitaoka 120a6e
            ?E 84
Shinya Kitaoka 120a6e
?E 29 tmp_r += valin.r;
Shinya Kitaoka 120a6e
            tmp_g += valin.g;
Shinya Kitaoka 120a6e
            tmp_b += valin.b;
Shinya Kitaoka 120a6e
            tmp_m += valin.m;
Shinya Kitaoka 120a6e
            ?I 84 in -= wrapin;
Shinya Kitaoka 120a6e
            in++;
Shinya Kitaoka 120a6e
            ?E 84
Shinya Kitaoka 120a6e
          }
Shinya Kitaoka 120a6e
        ?D 84 valout.r = (tmp_r + fac_fac_2) / fac_fac;
Shinya Kitaoka 120a6e
        valout.g       = (tmp_g + fac_fac_2) / fac_fac;
Shinya Kitaoka 120a6e
        valout.b       = (tmp_b + fac_fac_2) / fac_fac;
Shinya Kitaoka 120a6e
        valout.m       = (tmp_m + fac_fac_2) / fac_fac;
Shinya Kitaoka 120a6e
        ?E 84
Shinya Kitaoka 120a6e
?I 84 in += 2 * wrapin - factor;
Shinya Kitaoka 120a6e
      }
Shinya Kitaoka 120a6e
      valout.r        = (tmp_r + fac_fac_4) >> fac_fac_2_bits;
Shinya Kitaoka 120a6e
      valout.g        = (tmp_g + fac_fac_4) >> fac_fac_2_bits;
Shinya Kitaoka 120a6e
      valout.b        = (tmp_b + fac_fac_4) >> fac_fac_2_bits;
Shinya Kitaoka 120a6e
      valout.m        = (tmp_m + fac_fac_4) >> fac_fac_2_bits;
Shinya Kitaoka 120a6e
      ?E 84 *pixout++ = valout;
Shinya Kitaoka 120a6e
      pixin += factor;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    if (xrest) {
Shinya Kitaoka 120a6e
      tmp_r = tmp_g = tmp_b = tmp_m = 0;
Shinya Kitaoka 120a6e
      for (j = 0; j < factor; j++)
Shinya Kitaoka 120a6e
        for (i = 0; i < xrest; i++) {
Shinya Kitaoka 120a6e
          ?D 29 valin = cmap[pixin[i + j * wrapin] - cmap_offset];
Shinya Kitaoka 120a6e
          ?E 29
Shinya Kitaoka 120a6e
?I 29 valin          = cmap[pixin[i + j * wrapin]];
Shinya Kitaoka 120a6e
          ?E 29 tmp_r += valin.r;
Shinya Kitaoka 120a6e
          tmp_g += valin.g;
Shinya Kitaoka 120a6e
          tmp_b += valin.b;
Shinya Kitaoka 120a6e
          tmp_m += valin.m;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
      valout.r = (tmp_r + fac_xrest_2) / fac_xrest;
Shinya Kitaoka 120a6e
      valout.g = (tmp_g + fac_xrest_2) / fac_xrest;
Shinya Kitaoka 120a6e
      valout.b = (tmp_b + fac_xrest_2) / fac_xrest;
Shinya Kitaoka 120a6e
      valout.m = (tmp_m + fac_xrest_2) / fac_xrest;
Shinya Kitaoka 120a6e
      *pixout  = valout;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    rowin += wrapin * factor;
Shinya Kitaoka 120a6e
    rowout += wrapout;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  if (yrest) {
Shinya Kitaoka 120a6e
    pixin  = rowin;
Shinya Kitaoka 120a6e
    pixout = rowout;
Shinya Kitaoka 120a6e
    for (x = x1; x < xlast; x += factor) {
Shinya Kitaoka 120a6e
      tmp_r = tmp_g = tmp_b = tmp_m = 0;
Shinya Kitaoka 120a6e
      for (j = 0; j < yrest; j++)
Shinya Kitaoka 120a6e
        for (i = 0; i < factor; i++) {
Shinya Kitaoka 120a6e
          ?D 29 valin = cmap[pixin[i + j * wrapin] - cmap_offset];
Shinya Kitaoka 120a6e
          ?E 29
Shinya Kitaoka 120a6e
?I 29 valin          = cmap[pixin[i + j * wrapin]];
Shinya Kitaoka 120a6e
          ?E 29 tmp_r += valin.r;
Shinya Kitaoka 120a6e
          tmp_g += valin.g;
Shinya Kitaoka 120a6e
          tmp_b += valin.b;
Shinya Kitaoka 120a6e
          tmp_m += valin.m;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
      valout.r  = (tmp_r + yrest_fac_2) / yrest_fac;
Shinya Kitaoka 120a6e
      valout.g  = (tmp_g + yrest_fac_2) / yrest_fac;
Shinya Kitaoka 120a6e
      valout.b  = (tmp_b + yrest_fac_2) / yrest_fac;
Shinya Kitaoka 120a6e
      valout.m  = (tmp_m + yrest_fac_2) / yrest_fac;
Shinya Kitaoka 120a6e
      *pixout++ = valout;
Shinya Kitaoka 120a6e
      pixin += factor;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    if (xrest) {
Shinya Kitaoka 120a6e
      tmp_r = tmp_g = tmp_b = tmp_m = 0;
Shinya Kitaoka 120a6e
      for (j = 0; j < yrest; j++)
Shinya Kitaoka 120a6e
        for (i = 0; i < xrest; i++) {
Shinya Kitaoka 120a6e
          ?D 29 valin = cmap[pixin[i + j * wrapin] - cmap_offset];
Shinya Kitaoka 120a6e
          ?E 29
Shinya Kitaoka 120a6e
?I 29 valin          = cmap[pixin[i + j * wrapin]];
Shinya Kitaoka 120a6e
          ?E 29 tmp_r += valin.r;
Shinya Kitaoka 120a6e
          tmp_g += valin.g;
Shinya Kitaoka 120a6e
          tmp_b += valin.b;
Shinya Kitaoka 120a6e
          tmp_m += valin.m;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
      valout.r = (tmp_r + yrest_xrest_2) / yrest_xrest;
Shinya Kitaoka 120a6e
      valout.g = (tmp_g + yrest_xrest_2) / yrest_xrest;
Shinya Kitaoka 120a6e
      valout.b = (tmp_b + yrest_xrest_2) / yrest_xrest;
Shinya Kitaoka 120a6e
      valout.m = (tmp_m + yrest_xrest_2) / yrest_xrest;
Shinya Kitaoka 120a6e
      *pixout  = valout;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
}
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
/*---------------------------------------------------------------------------*/
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
?D 84 static void rop_zoom_out_cm16_rgbm(RASTER *rin, RASTER *rout,
Shinya Kitaoka 120a6e
?E 84
Shinya Kitaoka 120a6e
?I 84 static void rop_zoom_out_cm24_rgbm(RASTER *rin, RASTER *rout,
Shinya Kitaoka 120a6e
?E 84
Shinya Kitaoka 120a6e
?D 31 int x1, int y1, int x2, int y2, int newx, int newy, int factor)
Shinya Kitaoka 120a6e
?E 31
Shinya Kitaoka 120a6e
?I 31 int x1, int y1, int x2, int y2, int newx, int newy, int abs_zoom_level)
Shinya Kitaoka 120a6e
?E 31 {
Shinya Kitaoka 120a6e
  ?D 31 printf(" rop_zoom_out_cm16_rgbm not implemented yet\n");
Shinya Kitaoka 120a6e
  ?E 31
Shinya Kitaoka 120a6e
?I 31
Shinya Kitaoka 120a6e
?D 84 USHORT *rowin, *pixin, *in;
Shinya Kitaoka 120a6e
  LPIXEL *rowout, *pixout, *cmap, valin, valout;
Shinya Kitaoka 120a6e
  ?E 84
Shinya Kitaoka 120a6e
?I 84 ULONG *rowin, *pixin, *in, win;
Shinya Kitaoka 120a6e
  LPIXEL *rowout, *pixout, *penmap, *colmap, valin, valout;
Shinya Kitaoka 120a6e
  ?E 84 int tmp_r, tmp_g, tmp_b, tmp_m;
Shinya Kitaoka 120a6e
  int wrapin, wrapout;
Shinya Kitaoka 120a6e
  int x, y, lx, ly, xlast, ylast, xrest, yrest, i, j;
Shinya Kitaoka 120a6e
  int factor, fac_fac_2_bits;
Shinya Kitaoka 120a6e
  int fac_fac, yrest_fac, fac_xrest, yrest_xrest;
Shinya Kitaoka 120a6e
  int fac_fac_2, yrest_fac_2, fac_xrest_2, yrest_xrest_2;
Shinya Kitaoka 120a6e
  int fac_fac_4;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  ?D 56 cmap     = rin->cmap.buffer - rin->cmap.offset;
Shinya Kitaoka 120a6e
  ?E 56
Shinya Kitaoka 120a6e
?I 56
Shinya Kitaoka 120a6e
?D 84 cmap      = rin->cmap.buffer - rin->cmap.info.offset_mask;
Shinya Kitaoka 120a6e
  ?E 84
Shinya Kitaoka 120a6e
?I 84 penmap    = rin->cmap.penbuffer;
Shinya Kitaoka 120a6e
  colmap         = rin->cmap.colbuffer;
Shinya Kitaoka 120a6e
  ?E 84
Shinya Kitaoka 120a6e
?E 56 lx        = x2 - x1 + 1;
Shinya Kitaoka 120a6e
  ly             = y2 - y1 + 1;
Shinya Kitaoka 120a6e
  factor         = 1 << abs_zoom_level;
Shinya Kitaoka 120a6e
  ?D 61 xrest    = lx % factor;
Shinya Kitaoka 120a6e
  yrest          = ly % factor;
Shinya Kitaoka 120a6e
  ?E 61
Shinya Kitaoka 120a6e
?I 61 xrest     = lx & (factor - 1);
Shinya Kitaoka 120a6e
  yrest          = ly & (factor - 1);
Shinya Kitaoka 120a6e
  ?E 61 xlast    = x2 - xrest + 1;
Shinya Kitaoka 120a6e
  ylast          = y2 - yrest + 1;
Shinya Kitaoka 120a6e
  fac_fac        = factor * factor;
Shinya Kitaoka 120a6e
  fac_fac_2      = fac_fac >> 1;
Shinya Kitaoka 120a6e
  fac_fac_4      = fac_fac >> 2;
Shinya Kitaoka 120a6e
  fac_fac_2_bits = 2 * abs_zoom_level - 1;
Shinya Kitaoka 120a6e
  yrest_fac      = yrest * factor;
Shinya Kitaoka 120a6e
  yrest_fac_2    = yrest_fac >> 1;
Shinya Kitaoka 120a6e
  fac_xrest      = factor * xrest;
Shinya Kitaoka 120a6e
  fac_xrest_2    = fac_xrest >> 1;
Shinya Kitaoka 120a6e
  yrest_xrest    = yrest * xrest;
Shinya Kitaoka 120a6e
  yrest_xrest_2  = yrest_xrest >> 1;
Shinya Kitaoka 120a6e
  wrapin         = rin->wrap;
Shinya Kitaoka 120a6e
  wrapout        = rout->wrap;
Shinya Kitaoka 120a6e
  valout.m       = 0xff;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  ?D 84 rowin  = (USHORT *)rin->buffer + wrapin * y1 + x1;
Shinya Kitaoka 120a6e
  ?E 84
Shinya Kitaoka 120a6e
?I 84 rowin   = (ULONG *)rin->buffer + wrapin * y1 + x1;
Shinya Kitaoka 120a6e
  ?E 84 rowout = (LPIXEL *)rout->buffer + wrapout * newy + newx;
Shinya Kitaoka 120a6e
  for (y = y1; y < ylast; y += factor) {
Shinya Kitaoka 120a6e
    pixin  = rowin;
Shinya Kitaoka 120a6e
    pixout = rowout;
Shinya Kitaoka 120a6e
    for (x = x1; x < xlast; x += factor) {
Shinya Kitaoka 120a6e
      tmp_r = tmp_g = tmp_b = tmp_m = 0;
Shinya Kitaoka 120a6e
      in                            = pixin;
Shinya Kitaoka 120a6e
      for (j = 0; j < factor; j += 2) {
Shinya Kitaoka 120a6e
        for (i = 0; i < factor; i += 2) {
Shinya Kitaoka 120a6e
          ?D 84 valin = cmap[*in];
Shinya Kitaoka 120a6e
          ?E 84
Shinya Kitaoka 120a6e
?I 84 win            = *in;
Shinya Kitaoka 120a6e
          MAP24(win, penmap, colmap, valin)
Shinya Kitaoka 120a6e
          ?E 84 tmp_r += valin.r;
Shinya Kitaoka 120a6e
          tmp_g += valin.g;
Shinya Kitaoka 120a6e
          tmp_b += valin.b;
Shinya Kitaoka 120a6e
          tmp_m += valin.m;
Shinya Kitaoka 120a6e
          ?D 38 in += factor;
Shinya Kitaoka 120a6e
          in++;
Shinya Kitaoka 120a6e
          ?E 38
Shinya Kitaoka 120a6e
?I 38 in += wrapin;
Shinya Kitaoka 120a6e
          in++;
Shinya Kitaoka 120a6e
          ?E 38
Shinya Kitaoka 120a6e
?D 84 valin = cmap[*in];
Shinya Kitaoka 120a6e
          ?E 84
Shinya Kitaoka 120a6e
?I 84 win   = *in;
Shinya Kitaoka 120a6e
          MAP24(win, penmap, colmap, valin)
Shinya Kitaoka 120a6e
          ?E 84 tmp_r += valin.r;
Shinya Kitaoka 120a6e
          tmp_g += valin.g;
Shinya Kitaoka 120a6e
          tmp_b += valin.b;
Shinya Kitaoka 120a6e
          tmp_m += valin.m;
Shinya Kitaoka 120a6e
          ?D 38 in -= factor;
Shinya Kitaoka 120a6e
          ?E 38
Shinya Kitaoka 120a6e
?I 38 in -= wrapin;
Shinya Kitaoka 120a6e
          ?E 38 in++;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
        in += 2 * wrapin - factor;
Shinya Kitaoka 120a6e
      }
Shinya Kitaoka 120a6e
      valout.r  = (tmp_r + fac_fac_4) >> fac_fac_2_bits;
Shinya Kitaoka 120a6e
      valout.g  = (tmp_g + fac_fac_4) >> fac_fac_2_bits;
Shinya Kitaoka 120a6e
      valout.b  = (tmp_b + fac_fac_4) >> fac_fac_2_bits;
Shinya Kitaoka 120a6e
      valout.m  = (tmp_m + fac_fac_4) >> fac_fac_2_bits;
Shinya Kitaoka 120a6e
      *pixout++ = valout;
Shinya Kitaoka 120a6e
      pixin += factor;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    if (xrest) {
Shinya Kitaoka 120a6e
      tmp_r = tmp_g = tmp_b = tmp_m = 0;
Shinya Kitaoka 120a6e
      for (j = 0; j < factor; j++)
Shinya Kitaoka 120a6e
        for (i = 0; i < xrest; i++) {
Shinya Kitaoka 120a6e
          ?D 84 valin = cmap[pixin[i + j * wrapin]];
Shinya Kitaoka 120a6e
          ?E 84
Shinya Kitaoka 120a6e
?I 84 win            = pixin[i + j * wrapin];
Shinya Kitaoka 120a6e
          MAP24(win, penmap, colmap, valin)
Shinya Kitaoka 120a6e
          ?E 84 tmp_r += valin.r;
Shinya Kitaoka 120a6e
          tmp_g += valin.g;
Shinya Kitaoka 120a6e
          tmp_b += valin.b;
Shinya Kitaoka 120a6e
          tmp_m += valin.m;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
      valout.r = (tmp_r + fac_xrest_2) / fac_xrest;
Shinya Kitaoka 120a6e
      valout.g = (tmp_g + fac_xrest_2) / fac_xrest;
Shinya Kitaoka 120a6e
      valout.b = (tmp_b + fac_xrest_2) / fac_xrest;
Shinya Kitaoka 120a6e
      valout.m = (tmp_m + fac_xrest_2) / fac_xrest;
Shinya Kitaoka 120a6e
      *pixout  = valout;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    rowin += wrapin * factor;
Shinya Kitaoka 120a6e
    rowout += wrapout;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  if (yrest) {
Shinya Kitaoka 120a6e
    pixin  = rowin;
Shinya Kitaoka 120a6e
    pixout = rowout;
Shinya Kitaoka 120a6e
    for (x = x1; x < xlast; x += factor) {
Shinya Kitaoka 120a6e
      tmp_r = tmp_g = tmp_b = tmp_m = 0;
Shinya Kitaoka 120a6e
      for (j = 0; j < yrest; j++)
Shinya Kitaoka 120a6e
        for (i = 0; i < factor; i++) {
Shinya Kitaoka 120a6e
          ?D 84 valin = cmap[pixin[i + j * wrapin]];
Shinya Kitaoka 120a6e
          ?E 84
Shinya Kitaoka 120a6e
?I 84 win            = pixin[i + j * wrapin];
Shinya Kitaoka 120a6e
          MAP24(win, penmap, colmap, valin)
Shinya Kitaoka 120a6e
          ?E 84 tmp_r += valin.r;
Shinya Kitaoka 120a6e
          tmp_g += valin.g;
Shinya Kitaoka 120a6e
          tmp_b += valin.b;
Shinya Kitaoka 120a6e
          tmp_m += valin.m;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
      valout.r  = (tmp_r + yrest_fac_2) / yrest_fac;
Shinya Kitaoka 120a6e
      valout.g  = (tmp_g + yrest_fac_2) / yrest_fac;
Shinya Kitaoka 120a6e
      valout.b  = (tmp_b + yrest_fac_2) / yrest_fac;
Shinya Kitaoka 120a6e
      valout.m  = (tmp_m + yrest_fac_2) / yrest_fac;
Shinya Kitaoka 120a6e
      *pixout++ = valout;
Shinya Kitaoka 120a6e
      pixin += factor;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    if (xrest) {
Shinya Kitaoka 120a6e
      tmp_r = tmp_g = tmp_b = tmp_m = 0;
Shinya Kitaoka 120a6e
      for (j = 0; j < yrest; j++)
Shinya Kitaoka 120a6e
        for (i = 0; i < xrest; i++) {
Shinya Kitaoka 120a6e
          ?D 84 valin = cmap[pixin[i + j * wrapin]];
Shinya Kitaoka 120a6e
          ?E 84
Shinya Kitaoka 120a6e
?I 84 win            = pixin[i + j * wrapin];
Shinya Kitaoka 120a6e
          MAP24(win, penmap, colmap, valin)
Shinya Kitaoka 120a6e
          ?E 84 tmp_r += valin.r;
Shinya Kitaoka 120a6e
          tmp_g += valin.g;
Shinya Kitaoka 120a6e
          tmp_b += valin.b;
Shinya Kitaoka 120a6e
          tmp_m += valin.m;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
      valout.r = (tmp_r + yrest_xrest_2) / yrest_xrest;
Shinya Kitaoka 120a6e
      valout.g = (tmp_g + yrest_xrest_2) / yrest_xrest;
Shinya Kitaoka 120a6e
      valout.b = (tmp_b + yrest_xrest_2) / yrest_xrest;
Shinya Kitaoka 120a6e
      valout.m = (tmp_m + yrest_xrest_2) / yrest_xrest;
Shinya Kitaoka 120a6e
      *pixout  = valout;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  ?E 31
Shinya Kitaoka 120a6e
}
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
/*---------------------------------------------------------------------------*/
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
?D 46 static void rop_reduce_cm16_rgb_(RASTER *rin, RASTER *rout,
Shinya Kitaoka 120a6e
?E 46
Shinya Kitaoka 120a6e
?I 46
Shinya Kitaoka 120a6e
?D 84 static void rop_reduce_cm16_rgbx(RASTER *rin, RASTER *rout,
Shinya Kitaoka 120a6e
?E 46 int x1, int y1, int x2, int y2,
Shinya Kitaoka 120a6e
													int newx, int newy, int factor)
Shinya Kitaoka 120a6e
?E 84
Shinya Kitaoka 120a6e
?I 84 static void rop_zoom_out_cm16_rgbx(RASTER *rin, RASTER *rout,
Shinya Kitaoka 120a6e
													int x1, int y1, int x2, int y2,
Shinya Kitaoka 120a6e
													int newx, int newy, int abs_zoom_level)
Shinya Kitaoka 120a6e
?E 84 {
Shinya Kitaoka 120a6e
	?D 84 USHORT *rowin, *pixin;
Toshihiro Shimizu 890ddd
	?E 84
Toshihiro Shimizu 890ddd
?I 84 USHORT *rowin, *pixin, *in;
Toshihiro Shimizu 890ddd
	?E 84 LPIXEL *rowout, *pixout, *cmap, valin, valout;
Shinya Kitaoka 120a6e
	?D 84 int tmp_r, tmp_g, tmp_b, tmp_m;
Shinya Kitaoka 120a6e
	?E 84
Shinya Kitaoka 120a6e
?I 84 int tmp_r, tmp_g, tmp_b;
Shinya Kitaoka 120a6e
	?E 84
Shinya Kitaoka 120a6e
?D 29 int wrapin, wrapout, cmap_offset;
Toshihiro Shimizu 890ddd
	?E 29
Toshihiro Shimizu 890ddd
?I 29 int wrapin, wrapout;
Toshihiro Shimizu 890ddd
	?E 29 int x, y, lx, ly, xlast, ylast, xrest, yrest, i, j;
Toshihiro Shimizu 890ddd
	?I 84 int factor, fac_fac_2_bits;
Toshihiro Shimizu 890ddd
	?E 84 int fac_fac, yrest_fac, fac_xrest, yrest_xrest;
Toshihiro Shimizu 890ddd
	int fac_fac_2, yrest_fac_2, fac_xrest_2, yrest_xrest_2;
Toshihiro Shimizu 890ddd
	?I 84 int fac_fac_4;
Toshihiro Shimizu 890ddd
	?E 84
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?D 29 cmap = rin->cmap.buffer;
Toshihiro Shimizu 890ddd
	cmap_offset = rin->cmap.offset;
Toshihiro Shimizu 890ddd
	?E 29
Toshihiro Shimizu 890ddd
?I 29
Toshihiro Shimizu 890ddd
?D 56 cmap = rin->cmap.buffer - rin->cmap.offset;
Toshihiro Shimizu 890ddd
	?E 56
Toshihiro Shimizu 890ddd
?I 56 cmap = rin->cmap.buffer - rin->cmap.info.offset_mask;
Toshihiro Shimizu 890ddd
	?E 56
Toshihiro Shimizu 890ddd
?E 29 lx = x2 - x1 + 1;
Toshihiro Shimizu 890ddd
	ly = y2 - y1 + 1;
Toshihiro Shimizu 890ddd
	?I 84 factor = 1 << abs_zoom_level;
Toshihiro Shimizu 890ddd
	?E 84
Toshihiro Shimizu 890ddd
?D 61 xrest = lx % factor;
Toshihiro Shimizu 890ddd
	yrest = ly % factor;
Toshihiro Shimizu 890ddd
	?E 61
Toshihiro Shimizu 890ddd
?I 61 xrest = lx & (factor - 1);
Toshihiro Shimizu 890ddd
	yrest = ly & (factor - 1);
Toshihiro Shimizu 890ddd
	?E 61 xlast = x2 - xrest + 1;
Toshihiro Shimizu 890ddd
	ylast = y2 - yrest + 1;
Toshihiro Shimizu 890ddd
	fac_fac = factor * factor;
Toshihiro Shimizu 890ddd
	fac_fac_2 = fac_fac >> 1;
Toshihiro Shimizu 890ddd
	?I 84 fac_fac_4 = fac_fac >> 2;
Toshihiro Shimizu 890ddd
	fac_fac_2_bits = 2 * abs_zoom_level - 1;
Toshihiro Shimizu 890ddd
	?E 84 yrest_fac = yrest * factor;
Toshihiro Shimizu 890ddd
	yrest_fac_2 = yrest_fac >> 1;
Toshihiro Shimizu 890ddd
	fac_xrest = factor * xrest;
Toshihiro Shimizu 890ddd
	fac_xrest_2 = fac_xrest >> 1;
Toshihiro Shimizu 890ddd
	yrest_xrest = yrest * xrest;
Toshihiro Shimizu 890ddd
	yrest_xrest_2 = yrest_xrest >> 1;
Toshihiro Shimizu 890ddd
	wrapin = rin->wrap;
Toshihiro Shimizu 890ddd
	wrapout = rout->wrap;
Shinya Kitaoka 120a6e
	valout.m = 0xff;
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
	rowin = (USHORT *)rin->buffer + wrapin * y1 + x1;
Toshihiro Shimizu 890ddd
	rowout = (LPIXEL *)rout->buffer + wrapout * newy + newx;
Toshihiro Shimizu 890ddd
	for (y = y1; y < ylast; y += factor) {
Toshihiro Shimizu 890ddd
		pixin = rowin;
Toshihiro Shimizu 890ddd
		pixout = rowout;
Toshihiro Shimizu 890ddd
		for (x = x1; x < xlast; x += factor) {
Shinya Kitaoka 120a6e
			?D 84 tmp_r = tmp_g = tmp_b = tmp_m = 0;
Shinya Kitaoka 120a6e
			for (j = 0; j < factor; j++)
Shinya Kitaoka 120a6e
				for (i = 0; i < factor; i++)
Shinya Kitaoka 120a6e
					?E 84
Shinya Kitaoka 120a6e
?I 84 tmp_r = tmp_g = tmp_b = 0;
Shinya Kitaoka 120a6e
			in = pixin;
Toshihiro Shimizu 890ddd
			for (j = 0; j < factor; j += 2) {
Toshihiro Shimizu 890ddd
				for (i = 0; i < factor; i += 2)
Toshihiro Shimizu 890ddd
					?E 84
Toshihiro Shimizu 890ddd
					{
Toshihiro Shimizu 890ddd
						?D 29 valin = cmap[pixin[i + j * wrapin] - cmap_offset];
Toshihiro Shimizu 890ddd
						?E 29
Toshihiro Shimizu 890ddd
?I 29
Toshihiro Shimizu 890ddd
?D 84 valin = cmap[pixin[i + j * wrapin]];
Toshihiro Shimizu 890ddd
						?E 84
Toshihiro Shimizu 890ddd
?I 84 valin = cmap[*in];
Toshihiro Shimizu 890ddd
						tmp_r += valin.r;
Toshihiro Shimizu 890ddd
						tmp_g += valin.g;
Toshihiro Shimizu 890ddd
						tmp_b += valin.b;
Toshihiro Shimizu 890ddd
						in += wrapin;
Toshihiro Shimizu 890ddd
						in++;
Toshihiro Shimizu 890ddd
						valin = cmap[*in];
Toshihiro Shimizu 890ddd
						?E 84
Toshihiro Shimizu 890ddd
?E 29 tmp_r += valin.r;
Toshihiro Shimizu 890ddd
						tmp_g += valin.g;
Toshihiro Shimizu 890ddd
						tmp_b += valin.b;
Toshihiro Shimizu 890ddd
						?I 84 in -= wrapin;
Toshihiro Shimizu 890ddd
						in++;
Toshihiro Shimizu 890ddd
						?E 84
Toshihiro Shimizu 890ddd
					}
Toshihiro Shimizu 890ddd
				?D 84 valout.r = (tmp_r + fac_fac_2) / fac_fac;
Toshihiro Shimizu 890ddd
				valout.g = (tmp_g + fac_fac_2) / fac_fac;
Toshihiro Shimizu 890ddd
				valout.b = (tmp_b + fac_fac_2) / fac_fac;
Toshihiro Shimizu 890ddd
				?E 84
Toshihiro Shimizu 890ddd
?I 84 in += 2 * wrapin - factor;
Toshihiro Shimizu 890ddd
			}
Toshihiro Shimizu 890ddd
			valout.r = (tmp_r + fac_fac_4) >> fac_fac_2_bits;
Toshihiro Shimizu 890ddd
			valout.g = (tmp_g + fac_fac_4) >> fac_fac_2_bits;
Toshihiro Shimizu 890ddd
			valout.b = (tmp_b + fac_fac_4) >> fac_fac_2_bits;
Toshihiro Shimizu 890ddd
			?E 84
Toshihiro Shimizu 890ddd
				*pixout++ = valout;
Toshihiro Shimizu 890ddd
			pixin += factor;
Toshihiro Shimizu 890ddd
		}
Toshihiro Shimizu 890ddd
		if (xrest) {
Shinya Kitaoka 120a6e
			?D 84 tmp_r = tmp_g = tmp_b = tmp_m = 0;
Shinya Kitaoka 120a6e
			?E 84
Shinya Kitaoka 120a6e
?I 84 tmp_r = tmp_g = tmp_b = 0;
Shinya Kitaoka 120a6e
			?E 84 for (j = 0; j < factor; j++) for (i = 0; i < xrest; i++)
Shinya Kitaoka 120a6e
			{
Shinya Kitaoka 120a6e
				?D 29 valin = cmap[pixin[i + j * wrapin] - cmap_offset];
Shinya Kitaoka 120a6e
				?E 29
Toshihiro Shimizu 890ddd
?I 29 valin = cmap[pixin[i + j * wrapin]];
Shinya Kitaoka 120a6e
				?E 29 tmp_r += valin.r;
Shinya Kitaoka 120a6e
				tmp_g += valin.g;
Shinya Kitaoka 120a6e
				tmp_b += valin.b;
Shinya Kitaoka 120a6e
			}
Toshihiro Shimizu 890ddd
			valout.r = (tmp_r + fac_xrest_2) / fac_xrest;
Toshihiro Shimizu 890ddd
			valout.g = (tmp_g + fac_xrest_2) / fac_xrest;
Toshihiro Shimizu 890ddd
			valout.b = (tmp_b + fac_xrest_2) / fac_xrest;
Toshihiro Shimizu 890ddd
			*pixout = valout;
Toshihiro Shimizu 890ddd
		}
Toshihiro Shimizu 890ddd
		rowin += wrapin * factor;
Toshihiro Shimizu 890ddd
		rowout += wrapout;
Toshihiro Shimizu 890ddd
	}
Toshihiro Shimizu 890ddd
	if (yrest) {
Toshihiro Shimizu 890ddd
		pixin = rowin;
Toshihiro Shimizu 890ddd
		pixout = rowout;
Toshihiro Shimizu 890ddd
		for (x = x1; x < xlast; x += factor) {
Shinya Kitaoka 120a6e
			?D 84 tmp_r = tmp_g = tmp_b = tmp_m = 0;
Shinya Kitaoka 120a6e
			?E 84
Shinya Kitaoka 120a6e
?I 84 tmp_r = tmp_g = tmp_b = 0;
Shinya Kitaoka 120a6e
			?E 84 for (j = 0; j < yrest; j++) for (i = 0; i < factor; i++)
Shinya Kitaoka 120a6e
			{
Shinya Kitaoka 120a6e
				?D 29 valin = cmap[pixin[i + j * wrapin] - cmap_offset];
Shinya Kitaoka 120a6e
				?E 29
Toshihiro Shimizu 890ddd
?I 29 valin = cmap[pixin[i + j * wrapin]];
Shinya Kitaoka 120a6e
				?E 29 tmp_r += valin.r;
Shinya Kitaoka 120a6e
				tmp_g += valin.g;
Shinya Kitaoka 120a6e
				tmp_b += valin.b;
Shinya Kitaoka 120a6e
			}
Toshihiro Shimizu 890ddd
			valout.r = (tmp_r + yrest_fac_2) / yrest_fac;
Toshihiro Shimizu 890ddd
			valout.g = (tmp_g + yrest_fac_2) / yrest_fac;
Toshihiro Shimizu 890ddd
			valout.b = (tmp_b + yrest_fac_2) / yrest_fac;
Toshihiro Shimizu 890ddd
			*pixout++ = valout;
Toshihiro Shimizu 890ddd
			pixin += factor;
Toshihiro Shimizu 890ddd
		}
Toshihiro Shimizu 890ddd
		if (xrest) {
Shinya Kitaoka 120a6e
			?D 84 tmp_r = tmp_g = tmp_b = tmp_m = 0;
Shinya Kitaoka 120a6e
			?E 84
Shinya Kitaoka 120a6e
?I 84 tmp_r = tmp_g = tmp_b = 0;
Shinya Kitaoka 120a6e
			?E 84 for (j = 0; j < yrest; j++) for (i = 0; i < xrest; i++)
Shinya Kitaoka 120a6e
			{
Shinya Kitaoka 120a6e
				?D 29 valin = cmap[pixin[i + j * wrapin] - cmap_offset];
Shinya Kitaoka 120a6e
				?E 29
Toshihiro Shimizu 890ddd
?I 29 valin = cmap[pixin[i + j * wrapin]];
Shinya Kitaoka 120a6e
				?E 29 tmp_r += valin.r;
Shinya Kitaoka 120a6e
				tmp_g += valin.g;
Shinya Kitaoka 120a6e
				tmp_b += valin.b;
Shinya Kitaoka 120a6e
			}
Toshihiro Shimizu 890ddd
			valout.r = (tmp_r + yrest_xrest_2) / yrest_xrest;
Toshihiro Shimizu 890ddd
			valout.g = (tmp_g + yrest_xrest_2) / yrest_xrest;
Toshihiro Shimizu 890ddd
			valout.b = (tmp_b + yrest_xrest_2) / yrest_xrest;
Toshihiro Shimizu 890ddd
			*pixout = valout;
Toshihiro Shimizu 890ddd
		}
Toshihiro Shimizu 890ddd
	}
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
									   /*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
?D 46 static void rop_zoom_out_cm16_rgb_(RASTER *rin, RASTER *rout,
Shinya Kitaoka 120a6e
?E 46
Shinya Kitaoka 120a6e
?I 46
Shinya Kitaoka 120a6e
?D 84 static void rop_zoom_out_cm16_rgbx(RASTER *rin, RASTER *rout,
Toshihiro Shimizu 890ddd
?E 84
Shinya Kitaoka 120a6e
?I 84 static void rop_zoom_out_cm24_rgbx(RASTER *rin, RASTER *rout,
Toshihiro Shimizu 890ddd
?E 84
Shinya Kitaoka 120a6e
?E 46 int x1, int y1, int x2, int y2, int newx, int newy, int abs_zoom_level) {
Shinya Kitaoka 120a6e
?D 29
Shinya Kitaoka 120a6e
USHORT *rowin, *pixin;
Shinya Kitaoka 120a6e
?E 29
Shinya Kitaoka 120a6e
?I 29
Shinya Kitaoka 120a6e
?D 84
Shinya Kitaoka 120a6e
USHORT *rowin, *pixin, *in;
Shinya Kitaoka 120a6e
?E 29
Shinya Kitaoka 120a6e
LPIXEL *rowout, *pixout, *cmap, valin, valout;
Shinya Kitaoka 120a6e
?E 84
Shinya Kitaoka 120a6e
?I 84
Shinya Kitaoka 120a6e
ULONG *rowin, *pixin, *in, win;
Shinya Kitaoka 120a6e
LPIXEL *rowout, *pixout, *penmap, *colmap, valin, valout;
Shinya Kitaoka 120a6e
?E 84
Shinya Kitaoka 120a6e
?D 46
Shinya Kitaoka 120a6e
int tmp_r, tmp_g, tmp_b, tmp_m;
Shinya Kitaoka 120a6e
?E 46
Shinya Kitaoka 120a6e
?I 46
Shinya Kitaoka 120a6e
int tmp_r, tmp_g, tmp_b;
Shinya Kitaoka 120a6e
?E 46
Shinya Kitaoka 120a6e
?D 29
Shinya Kitaoka 120a6e
int wrapin, wrapout, cmap_offset;
Shinya Kitaoka 120a6e
?E 29
Shinya Kitaoka 120a6e
?I 29
Shinya Kitaoka 120a6e
int wrapin, wrapout;
Shinya Kitaoka 120a6e
?E 29
Shinya Kitaoka 120a6e
int x, y, lx, ly, xlast, ylast, xrest, yrest, i, j;
Shinya Kitaoka 120a6e
?D 29
Shinya Kitaoka 120a6e
int factor, fac_fac_bits;
Shinya Kitaoka 120a6e
?E 29
Shinya Kitaoka 120a6e
?I 29
Shinya Kitaoka 120a6e
int factor, fac_fac_2_bits;
Shinya Kitaoka 120a6e
?E 29
Shinya Kitaoka 120a6e
int fac_fac  , yrest_fac,   fac_xrest,   yrest_xrest;
Shinya Kitaoka 120a6e
int fac_fac_2, yrest_fac_2, fac_xrest_2, yrest_xrest_2;
Shinya Kitaoka 120a6e
?I 29
Shinya Kitaoka 120a6e
int fac_fac_4;
Shinya Kitaoka 120a6e
?E 29
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
?D 29
Shinya Kitaoka 120a6e
cmap=rin->cmap.buffer;
Shinya Kitaoka 120a6e
cmap_offset=rin->cmap.offset;
Shinya Kitaoka 120a6e
?E 29
Shinya Kitaoka 120a6e
?I 29
Shinya Kitaoka 120a6e
?D 56
Shinya Kitaoka 120a6e
cmap=rin->cmap.buffer - rin->cmap.offset;
Shinya Kitaoka 120a6e
?E 56
Toshihiro Shimizu 890ddd
?I 56
Toshihiro Shimizu 890ddd
?D 84
Toshihiro Shimizu 890ddd
cmap=rin->cmap.buffer - rin->cmap.info.offset_mask;
Toshihiro Shimizu 890ddd
?E 84
Toshihiro Shimizu 890ddd
?I 84
Toshihiro Shimizu 890ddd
penmap=rin->cmap.penbuffer;
Toshihiro Shimizu 890ddd
colmap=rin->cmap.colbuffer;
Toshihiro Shimizu 890ddd
?E 84
Toshihiro Shimizu 890ddd
?E 56
Toshihiro Shimizu 890ddd
?E 29
Toshihiro Shimizu 890ddd
lx=x2-x1+1;
Toshihiro Shimizu 890ddd
ly=y2-y1+1;
Toshihiro Shimizu 890ddd
factor = 1 << abs_zoom_level;
Toshihiro Shimizu 890ddd
?D 61
Toshihiro Shimizu 890ddd
xrest = lx % factor;
Toshihiro Shimizu 890ddd
yrest = ly % factor;
Toshihiro Shimizu 890ddd
?E 61
Toshihiro Shimizu 890ddd
?I 61
Toshihiro Shimizu 890ddd
xrest = lx & (factor - 1);
Toshihiro Shimizu 890ddd
yrest = ly & (factor - 1);
Toshihiro Shimizu 890ddd
?E 61
Toshihiro Shimizu 890ddd
xlast = x2 - xrest + 1;
Toshihiro Shimizu 890ddd
ylast = y2 - yrest + 1;
Toshihiro Shimizu 890ddd
fac_fac     = factor * factor; fac_fac_2     = fac_fac     >> 1;
Toshihiro Shimizu 890ddd
?D 29
Toshihiro Shimizu 890ddd
fac_fac_bits= 2 * abs_zoom_level;
Toshihiro Shimizu 890ddd
?E 29
Toshihiro Shimizu 890ddd
?I 29
Toshihiro Shimizu 890ddd
fac_fac_4   = fac_fac >> 2;    fac_fac_2_bits= 2 * abs_zoom_level - 1;
Toshihiro Shimizu 890ddd
?E 29
Toshihiro Shimizu 890ddd
yrest_fac   = yrest  * factor; yrest_fac_2   = yrest_fac   >> 1;
Toshihiro Shimizu 890ddd
fac_xrest   = factor * xrest;  fac_xrest_2   = fac_xrest   >> 1;
Toshihiro Shimizu 890ddd
yrest_xrest = yrest  * xrest;  yrest_xrest_2 = yrest_xrest >> 1;
Toshihiro Shimizu 890ddd
wrapin  = rin ->wrap;
Toshihiro Shimizu 890ddd
wrapout = rout->wrap;
Toshihiro Shimizu 890ddd
valout.m = 0xff;
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?D 84
Toshihiro Shimizu 890ddd
rowin  = (USHORT*)rin->buffer + wrapin*y1 + x1;
Toshihiro Shimizu 890ddd
?E 84
Toshihiro Shimizu 890ddd
?I 84
Toshihiro Shimizu 890ddd
rowin  = (ULONG *)rin->buffer + wrapin*y1 + x1;
Toshihiro Shimizu 890ddd
?E 84
Toshihiro Shimizu 890ddd
rowout = (LPIXEL*)rout->buffer + wrapout*newy + newx;
Toshihiro Shimizu 890ddd
for (y = y1; y < ylast; y += factor)
Toshihiro Shimizu 890ddd
  {
Toshihiro Shimizu 890ddd
  pixin  = rowin;
Toshihiro Shimizu 890ddd
  pixout = rowout;
Toshihiro Shimizu 890ddd
  for (x = x1; x < xlast; x += factor)
Toshihiro Shimizu 890ddd
    {
Toshihiro Shimizu 890ddd
?D 46
Toshihiro Shimizu 890ddd
    tmp_r = tmp_g = tmp_b = tmp_m = 0;
Toshihiro Shimizu 890ddd
?E 46
Toshihiro Shimizu 890ddd
?I 46
Toshihiro Shimizu 890ddd
    tmp_r = tmp_g = tmp_b = 0;
Toshihiro Shimizu 890ddd
?E 46
Toshihiro Shimizu 890ddd
?D 29
Toshihiro Shimizu 890ddd
    for (j = 0; j < factor; j++)
Toshihiro Shimizu 890ddd
      for (i = 0; i < factor; i++)
Toshihiro Shimizu 890ddd
?E 29
Toshihiro Shimizu 890ddd
?I 29
Toshihiro Shimizu 890ddd
    in = pixin;
Toshihiro Shimizu 890ddd
    for (j = 0; j < factor; j+=2)
Toshihiro Shimizu 890ddd
      {
Toshihiro Shimizu 890ddd
      for (i = 0; i < factor; i+=2)
Toshihiro Shimizu 890ddd
?E 29
Toshihiro Shimizu 890ddd
        {
Toshihiro Shimizu 890ddd
?D 29
Toshihiro Shimizu 890ddd
        valin = cmap[pixin[i + j*wrapin] - cmap_offset];
Toshihiro Shimizu 890ddd
?E 29
Toshihiro Shimizu 890ddd
?I 29
Toshihiro Shimizu 890ddd
?D 84
Toshihiro Shimizu 890ddd
        valin = cmap[*in];
Toshihiro Shimizu 890ddd
?E 84
Toshihiro Shimizu 890ddd
?I 84
Toshihiro Shimizu 890ddd
	win = *in;
Toshihiro Shimizu 890ddd
        MAP24 (win, penmap, colmap, valin)
Toshihiro Shimizu 890ddd
?E 84
Toshihiro Shimizu 890ddd
?E 29
Toshihiro Shimizu 890ddd
	tmp_r += valin.r;
Toshihiro Shimizu 890ddd
	tmp_g += valin.g;
Toshihiro Shimizu 890ddd
	tmp_b += valin.b;
Toshihiro Shimizu 890ddd
?I 29
Toshihiro Shimizu 890ddd
?D 38
Toshihiro Shimizu 890ddd
	in += factor;
Toshihiro Shimizu 890ddd
?E 38
Toshihiro Shimizu 890ddd
?I 38
Toshihiro Shimizu 890ddd
	in += wrapin;
Toshihiro Shimizu 890ddd
?E 38
Toshihiro Shimizu 890ddd
        in++;
Toshihiro Shimizu 890ddd
?D 84
Toshihiro Shimizu 890ddd
        valin = cmap[*in];
Toshihiro Shimizu 890ddd
?E 84
Toshihiro Shimizu 890ddd
?I 84
Toshihiro Shimizu 890ddd
	win = *in;
Toshihiro Shimizu 890ddd
        MAP24 (win, penmap, colmap, valin)
Toshihiro Shimizu 890ddd
?E 84
Toshihiro Shimizu 890ddd
	tmp_r += valin.r;
Toshihiro Shimizu 890ddd
	tmp_g += valin.g;
Toshihiro Shimizu 890ddd
	tmp_b += valin.b;
Toshihiro Shimizu 890ddd
?D 38
Toshihiro Shimizu 890ddd
	in -= factor;
Toshihiro Shimizu 890ddd
?E 38
Toshihiro Shimizu 890ddd
?I 38
Toshihiro Shimizu 890ddd
	in -= wrapin;
Toshihiro Shimizu 890ddd
?E 38
Toshihiro Shimizu 890ddd
        in++;
Toshihiro Shimizu 890ddd
?E 29
Toshihiro Shimizu 890ddd
	}
Toshihiro Shimizu 890ddd
?D 29
Toshihiro Shimizu 890ddd
    valout.r = (tmp_r + fac_fac_2) >> fac_fac_bits;
Toshihiro Shimizu 890ddd
    valout.g = (tmp_g + fac_fac_2) >> fac_fac_bits;
Toshihiro Shimizu 890ddd
    valout.b = (tmp_b + fac_fac_2) >> fac_fac_bits;
Toshihiro Shimizu 890ddd
?E 29
Toshihiro Shimizu 890ddd
?I 29
Toshihiro Shimizu 890ddd
      in += 2 * wrapin - factor;
Toshihiro Shimizu 890ddd
      }
Toshihiro Shimizu 890ddd
    valout.r = (tmp_r + fac_fac_4) >> fac_fac_2_bits;
Toshihiro Shimizu 890ddd
    valout.g = (tmp_g + fac_fac_4) >> fac_fac_2_bits;
Toshihiro Shimizu 890ddd
    valout.b = (tmp_b + fac_fac_4) >> fac_fac_2_bits;
Toshihiro Shimizu 890ddd
?E 29
Toshihiro Shimizu 890ddd
    *pixout++ = valout;
Toshihiro Shimizu 890ddd
    pixin += factor;
Toshihiro Shimizu 890ddd
    }
Toshihiro Shimizu 890ddd
  if (xrest)
Toshihiro Shimizu 890ddd
    {
Toshihiro Shimizu 890ddd
?D 46
Toshihiro Shimizu 890ddd
    tmp_r = tmp_g = tmp_b = tmp_m = 0;
Toshihiro Shimizu 890ddd
?E 46
Toshihiro Shimizu 890ddd
?I 46
Toshihiro Shimizu 890ddd
    tmp_r = tmp_g = tmp_b = 0;
Toshihiro Shimizu 890ddd
?E 46
Toshihiro Shimizu 890ddd
    for (j = 0; j < factor; j++)
Toshihiro Shimizu 890ddd
      for (i = 0; i < xrest; i++)
Toshihiro Shimizu 890ddd
        {
Toshihiro Shimizu 890ddd
?D 29
Toshihiro Shimizu 890ddd
        valin = cmap[pixin[i + j*wrapin] - cmap_offset];
Toshihiro Shimizu 890ddd
?E 29
Toshihiro Shimizu 890ddd
?I 29
Toshihiro Shimizu 890ddd
?D 84
Toshihiro Shimizu 890ddd
        valin = cmap[pixin[i + j*wrapin]];
Toshihiro Shimizu 890ddd
?E 84
Toshihiro Shimizu 890ddd
?I 84
Toshihiro Shimizu 890ddd
	win = pixin[i + j*wrapin];
Toshihiro Shimizu 890ddd
        MAP24 (win, penmap, colmap, valin)
Toshihiro Shimizu 890ddd
?E 84
Toshihiro Shimizu 890ddd
?E 29
Toshihiro Shimizu 890ddd
	tmp_r += valin.r;
Toshihiro Shimizu 890ddd
	tmp_g += valin.g;
Toshihiro Shimizu 890ddd
	tmp_b += valin.b;
Toshihiro Shimizu 890ddd
	}
Toshihiro Shimizu 890ddd
    valout.r = (tmp_r + fac_xrest_2) / fac_xrest;
Toshihiro Shimizu 890ddd
    valout.g = (tmp_g + fac_xrest_2) / fac_xrest;
Toshihiro Shimizu 890ddd
    valout.b = (tmp_b + fac_xrest_2) / fac_xrest;
Toshihiro Shimizu 890ddd
    *pixout = valout;
Toshihiro Shimizu 890ddd
    }
Toshihiro Shimizu 890ddd
  rowin  += wrapin * factor;
Toshihiro Shimizu 890ddd
  rowout += wrapout;
Toshihiro Shimizu 890ddd
  }
Toshihiro Shimizu 890ddd
if (yrest)
Toshihiro Shimizu 890ddd
  {
Toshihiro Shimizu 890ddd
  pixin  = rowin;
Toshihiro Shimizu 890ddd
  pixout = rowout;
Toshihiro Shimizu 890ddd
  for (x = x1; x < xlast; x += factor)
Toshihiro Shimizu 890ddd
    {
Toshihiro Shimizu 890ddd
?D 46
Toshihiro Shimizu 890ddd
    tmp_r = tmp_g = tmp_b = tmp_m = 0;
Toshihiro Shimizu 890ddd
?E 46
Toshihiro Shimizu 890ddd
?I 46
Toshihiro Shimizu 890ddd
    tmp_r = tmp_g = tmp_b = 0;
Toshihiro Shimizu 890ddd
?E 46
Toshihiro Shimizu 890ddd
    for (j = 0; j < yrest; j++)
Toshihiro Shimizu 890ddd
      for (i = 0; i < factor; i++)
Toshihiro Shimizu 890ddd
        {
Toshihiro Shimizu 890ddd
?D 29
Toshihiro Shimizu 890ddd
        valin = cmap[pixin[i + j*wrapin] - cmap_offset];
Toshihiro Shimizu 890ddd
?E 29
Toshihiro Shimizu 890ddd
?I 29
Toshihiro Shimizu 890ddd
?D 84
Toshihiro Shimizu 890ddd
        valin = cmap[pixin[i + j*wrapin]];
Toshihiro Shimizu 890ddd
?E 84
Toshihiro Shimizu 890ddd
?I 84
Toshihiro Shimizu 890ddd
	win = pixin[i + j*wrapin];
Toshihiro Shimizu 890ddd
        MAP24 (win, penmap, colmap, valin)
Toshihiro Shimizu 890ddd
?E 84
Toshihiro Shimizu 890ddd
?E 29
Toshihiro Shimizu 890ddd
	tmp_r += valin.r;
Toshihiro Shimizu 890ddd
	tmp_g += valin.g;
Toshihiro Shimizu 890ddd
	tmp_b += valin.b;
Toshihiro Shimizu 890ddd
	}
Toshihiro Shimizu 890ddd
    valout.r = (tmp_r + yrest_fac_2) / yrest_fac;
Toshihiro Shimizu 890ddd
    valout.g = (tmp_g + yrest_fac_2) / yrest_fac;
Toshihiro Shimizu 890ddd
    valout.b = (tmp_b + yrest_fac_2) / yrest_fac;
Toshihiro Shimizu 890ddd
    *pixout++ = valout;
Toshihiro Shimizu 890ddd
    pixin += factor;
Toshihiro Shimizu 890ddd
    }
Toshihiro Shimizu 890ddd
  if (xrest)
Toshihiro Shimizu 890ddd
    {
Toshihiro Shimizu 890ddd
?D 46
Toshihiro Shimizu 890ddd
    tmp_r = tmp_g = tmp_b = tmp_m = 0;
Toshihiro Shimizu 890ddd
?E 46
Toshihiro Shimizu 890ddd
?I 46
Toshihiro Shimizu 890ddd
    tmp_r = tmp_g = tmp_b = 0;
Toshihiro Shimizu 890ddd
?E 46
Toshihiro Shimizu 890ddd
    for (j = 0; j < yrest; j++)
Toshihiro Shimizu 890ddd
      for (i = 0; i < xrest; i++)
Toshihiro Shimizu 890ddd
        {
Toshihiro Shimizu 890ddd
?D 29
Toshihiro Shimizu 890ddd
        valin = cmap[pixin[i + j*wrapin] - cmap_offset];
Toshihiro Shimizu 890ddd
?E 29
Toshihiro Shimizu 890ddd
?I 29
Toshihiro Shimizu 890ddd
?D 84
Toshihiro Shimizu 890ddd
        valin = cmap[pixin[i + j*wrapin]];
Toshihiro Shimizu 890ddd
?E 84
Toshihiro Shimizu 890ddd
?I 84
Toshihiro Shimizu 890ddd
	win = pixin[i + j*wrapin];
Toshihiro Shimizu 890ddd
        MAP24 (win, penmap, colmap, valin)
Toshihiro Shimizu 890ddd
?E 84
Toshihiro Shimizu 890ddd
?E 29
Toshihiro Shimizu 890ddd
	tmp_r += valin.r;
Toshihiro Shimizu 890ddd
	tmp_g += valin.g;
Toshihiro Shimizu 890ddd
	tmp_b += valin.b;
Toshihiro Shimizu 890ddd
	}
Toshihiro Shimizu 890ddd
    valout.r = (tmp_r + yrest_xrest_2) / yrest_xrest;
Toshihiro Shimizu 890ddd
    valout.g = (tmp_g + yrest_xrest_2) / yrest_xrest;
Toshihiro Shimizu 890ddd
    valout.b = (tmp_b + yrest_xrest_2) / yrest_xrest;
Toshihiro Shimizu 890ddd
    *pixout = valout;
Toshihiro Shimizu 890ddd
    }
Toshihiro Shimizu 890ddd
  }
Toshihiro Shimizu 890ddd
?E 28 }
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
													   /*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?I 81 static void rop_copy_rgb_rgb16(RASTER *rin, RASTER *rout, int x1, int y1, int x2, int y2, int newx, int newy) {
Toshihiro Shimizu 890ddd
USHORT *rowout, *pixout;
Toshihiro Shimizu 890ddd
UCHAR  *rowin, *pixin;
Toshihiro Shimizu 890ddd
int bytewrapin, wrapout;
Toshihiro Shimizu 890ddd
int x, lx, ly;
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
lx=x2-x1+1;
Toshihiro Shimizu 890ddd
ly=y2-y1+1;
Toshihiro Shimizu 890ddd
bytewrapin = rin ->wrap * 3;
Toshihiro Shimizu 890ddd
wrapout    = rout->wrap;
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
rowin  = (UCHAR*) rin ->buffer + bytewrapin * y1 + x1 * 3;
Toshihiro Shimizu 890ddd
rowout = (USHORT*)rout->buffer + wrapout * newy  + newx;
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
while(ly-->0)
Toshihiro Shimizu 890ddd
  {
Toshihiro Shimizu 890ddd
   pixin=rowin;
Toshihiro Shimizu 890ddd
   pixout=rowout;
Toshihiro Shimizu 890ddd
   for(x=0;x
Toshihiro Shimizu 890ddd
     {
Toshihiro Shimizu 890ddd
     *pixout++ = PIX_RGB16_FROM_BYTES(pixin[0], pixin[1], pixin[2]);
Toshihiro Shimizu 890ddd
     pixin += 3;
Toshihiro Shimizu 890ddd
     }
Toshihiro Shimizu 890ddd
   rowin+=bytewrapin;
Toshihiro Shimizu 890ddd
   rowout+=wrapout;
Toshihiro Shimizu 890ddd
  } }
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
													   /*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?E 81
Toshihiro Shimizu 890ddd
?E 20
Toshihiro Shimizu 890ddd
?I 18 static void rop_copy_rgb_rgbm(RASTER *rin, RASTER *rout, int x1, int y1, int x2, int y2, int newx, int newy) {
Toshihiro Shimizu 890ddd
LPIXEL *rowout, *pixout;
Toshihiro Shimizu 890ddd
UCHAR  *rowin, *pixin;
Toshihiro Shimizu 890ddd
?D 81
Toshihiro Shimizu 890ddd
int wrapin, wrapout;
Toshihiro Shimizu 890ddd
?E 81
Toshihiro Shimizu 890ddd
?I 81
Toshihiro Shimizu 890ddd
int bytewrapin, wrapout;
Toshihiro Shimizu 890ddd
?E 81
Toshihiro Shimizu 890ddd
int x, lx, ly;
Toshihiro Shimizu 890ddd
LPIXEL tmp;
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
lx=x2-x1+1;
Toshihiro Shimizu 890ddd
ly=y2-y1+1;
Toshihiro Shimizu 890ddd
?D 81
Toshihiro Shimizu 890ddd
wrapin  = rin ->wrap * 3;
Toshihiro Shimizu 890ddd
wrapout = rout->wrap;
Toshihiro Shimizu 890ddd
?E 81
Toshihiro Shimizu 890ddd
?I 81
Toshihiro Shimizu 890ddd
bytewrapin = rin ->wrap * 3;
Toshihiro Shimizu 890ddd
wrapout    = rout->wrap;
Toshihiro Shimizu 890ddd
?E 81
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?D 24
Toshihiro Shimizu 890ddd
rowin  = (UCHAR*) rin ->buffer + wrapin*y1    + x1;
Toshihiro Shimizu 890ddd
?E 24
Toshihiro Shimizu 890ddd
?I 24
Toshihiro Shimizu 890ddd
?D 81
Toshihiro Shimizu 890ddd
rowin  = (UCHAR*) rin ->buffer + wrapin*y1    + x1 * 3;
Toshihiro Shimizu 890ddd
?E 24
Toshihiro Shimizu 890ddd
rowout = (LPIXEL*)rout->buffer + wrapout*newy + newx;
Toshihiro Shimizu 890ddd
?E 81
Toshihiro Shimizu 890ddd
?I 81
Toshihiro Shimizu 890ddd
rowin  = (UCHAR*) rin ->buffer + bytewrapin * y1 + x1 * 3;
Toshihiro Shimizu 890ddd
rowout = (LPIXEL*)rout->buffer + wrapout * newy  + newx;
Toshihiro Shimizu 890ddd
?E 81
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?I 45
Toshihiro Shimizu 890ddd
tmp.m = 0xff;
Toshihiro Shimizu 890ddd
?E 45
Toshihiro Shimizu 890ddd
while(ly-->0)
Toshihiro Shimizu 890ddd
  {
Toshihiro Shimizu 890ddd
   pixin=rowin;
Toshihiro Shimizu 890ddd
   pixout=rowout;
Toshihiro Shimizu 890ddd
   for(x=0;x
Toshihiro Shimizu 890ddd
     {
Toshihiro Shimizu 890ddd
     tmp.r = *pixin++;
Toshihiro Shimizu 890ddd
     tmp.g = *pixin++;
Toshihiro Shimizu 890ddd
     tmp.b = *pixin++;
Toshihiro Shimizu 890ddd
?D 45
Toshihiro Shimizu 890ddd
     tmp.m = 0xff;
Toshihiro Shimizu 890ddd
?E 45
Toshihiro Shimizu 890ddd
     *pixout++ = tmp;
Toshihiro Shimizu 890ddd
     }
Toshihiro Shimizu 890ddd
?D 81
Toshihiro Shimizu 890ddd
   rowin+=wrapin;
Toshihiro Shimizu 890ddd
?E 81
Toshihiro Shimizu 890ddd
?I 81
Toshihiro Shimizu 890ddd
   rowin+=bytewrapin;
Toshihiro Shimizu 890ddd
?E 81
Toshihiro Shimizu 890ddd
   rowout+=wrapout;
Toshihiro Shimizu 890ddd
  } }
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
													   /*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?I 67 static void rop_copy_rgbx_rgb(RASTER *rin, RASTER *rout, int x1, int y1, int x2, int y2, int newx, int newy) {
Toshihiro Shimizu 890ddd
UCHAR *rowout, *pixout;
Toshihiro Shimizu 890ddd
LPIXEL  *rowin, *pixin;
Toshihiro Shimizu 890ddd
int wrapin, wrapout;
Toshihiro Shimizu 890ddd
int x, lx, ly;
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
lx=x2-x1+1;
Toshihiro Shimizu 890ddd
ly=y2-y1+1;
Toshihiro Shimizu 890ddd
wrapin  = rin ->wrap;
Toshihiro Shimizu 890ddd
wrapout = rout->wrap * 3;
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
rowin  = (LPIXEL*) rin ->buffer + wrapin*y1    + x1;
Toshihiro Shimizu 890ddd
rowout = (UCHAR*)rout->buffer + wrapout*newy + newx * 3;
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
while(ly-->0)
Toshihiro Shimizu 890ddd
  {
Toshihiro Shimizu 890ddd
   pixin=rowin;
Toshihiro Shimizu 890ddd
   pixout=rowout;
Toshihiro Shimizu 890ddd
   for(x=0;x
Toshihiro Shimizu 890ddd
     {
Toshihiro Shimizu 890ddd
     *pixout++ = pixin->b;
Toshihiro Shimizu 890ddd
     *pixout++ = pixin->g;
Toshihiro Shimizu 890ddd
     *pixout++ = pixin->r;
Toshihiro Shimizu 890ddd
     }
Toshihiro Shimizu 890ddd
   rowin+=wrapin;
Toshihiro Shimizu 890ddd
   rowout+=wrapout;
Toshihiro Shimizu 890ddd
  } }
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
													   /*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?I 81
Toshihiro Shimizu 890ddd
?D 84 static void rop_reduce_rgb_rgb16(RASTER *rin, RASTER *rout, int x1, int y1, int x2, int y2, int newx, int newy, int factor) { printf("rop_reduce_rgb_rgb16 not implemented yet\n"); }
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
													   /*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?E 81
Toshihiro Shimizu 890ddd
?E 67
Toshihiro Shimizu 890ddd
?I 20 static void rop_reduce_rgb_rgbm(RASTER *rin, RASTER *rout, int x1, int y1, int x2, int y2, int newx, int newy, int factor) { printf("rop_reduce_rgb_rgbm not implemented yet\n"); }
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
													   /*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?E 84
Toshihiro Shimizu 890ddd
?I 81 static void rop_zoom_out_rgb_rgb16(RASTER *rin, RASTER *rout, int x1, int y1, int x2, int y2, int newx, int newy, int abs_zoom_level) {
Toshihiro Shimizu 890ddd
UCHAR  *rowin, *pixin, *in;
Toshihiro Shimizu 890ddd
USHORT *rowout, *pixout;
Toshihiro Shimizu 890ddd
int tmp_r, tmp_g, tmp_b;
Toshihiro Shimizu 890ddd
int wrapin_pixels, wrapin_bytes, wrapout;
Toshihiro Shimizu 890ddd
int x, y, lx, ly, xlast, ylast, xrest, yrest, i, j;
Toshihiro Shimizu 890ddd
int factor, fac_fac_2_bits;
Toshihiro Shimizu 890ddd
int fac_fac  , yrest_fac,   fac_xrest,   yrest_xrest;
Toshihiro Shimizu 890ddd
int fac_fac_2, yrest_fac_2, fac_xrest_2, yrest_xrest_2;
Toshihiro Shimizu 890ddd
int fac_fac_4;
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
lx=x2-x1+1;
Toshihiro Shimizu 890ddd
ly=y2-y1+1;
Toshihiro Shimizu 890ddd
factor = 1 << abs_zoom_level;
Toshihiro Shimizu 890ddd
xrest = lx & (factor - 1);
Toshihiro Shimizu 890ddd
yrest = ly & (factor - 1);
Toshihiro Shimizu 890ddd
xlast = x2 - xrest + 1;
Toshihiro Shimizu 890ddd
ylast = y2 - yrest + 1;
Toshihiro Shimizu 890ddd
fac_fac     = factor * factor; fac_fac_2     = fac_fac     >> 1;
Toshihiro Shimizu 890ddd
fac_fac_4   = fac_fac >> 2;    fac_fac_2_bits= 2 * abs_zoom_level - 1;
Toshihiro Shimizu 890ddd
yrest_fac   = yrest  * factor; yrest_fac_2   = yrest_fac   >> 1;
Toshihiro Shimizu 890ddd
fac_xrest   = factor * xrest;  fac_xrest_2   = fac_xrest   >> 1;
Toshihiro Shimizu 890ddd
yrest_xrest = yrest  * xrest;  yrest_xrest_2 = yrest_xrest >> 1;
Toshihiro Shimizu 890ddd
wrapin_pixels = rin->wrap;
Toshihiro Shimizu 890ddd
wrapin_bytes  = wrapin_pixels * 3;
Toshihiro Shimizu 890ddd
wrapout = rout->wrap;
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
rowin  = (UCHAR *)rin->buffer + wrapin_bytes * y1 + 3 * x1;
Toshihiro Shimizu 890ddd
rowout = (USHORT*)rout->buffer + wrapout * newy + newx;
Toshihiro Shimizu 890ddd
for (y = y1; y < ylast; y += factor)
Toshihiro Shimizu 890ddd
  {
Toshihiro Shimizu 890ddd
  pixin  = rowin;
Toshihiro Shimizu 890ddd
  pixout = rowout;
Toshihiro Shimizu 890ddd
  for (x = x1; x < xlast; x += factor)
Toshihiro Shimizu 890ddd
    {
Toshihiro Shimizu 890ddd
    tmp_r = tmp_g = tmp_b = 0;
Toshihiro Shimizu 890ddd
    in = pixin;
Toshihiro Shimizu 890ddd
    for (j = 0; j < factor; j+=2)
Toshihiro Shimizu 890ddd
      {
Toshihiro Shimizu 890ddd
      for (i = 0; i < factor; i+=2)
Toshihiro Shimizu 890ddd
        {
Toshihiro Shimizu 890ddd
        tmp_r += *in++;
Toshihiro Shimizu 890ddd
        tmp_g += *in++;
Toshihiro Shimizu 890ddd
        tmp_b += *in++;
Toshihiro Shimizu 890ddd
	in += wrapin_bytes;
Toshihiro Shimizu 890ddd
        tmp_r += *in++;
Toshihiro Shimizu 890ddd
        tmp_g += *in++;
Toshihiro Shimizu 890ddd
        tmp_b += *in++;
Toshihiro Shimizu 890ddd
	in -= wrapin_bytes;
Toshihiro Shimizu 890ddd
	}
Toshihiro Shimizu 890ddd
      in += 6 * wrapin_pixels - 3 * factor;
Toshihiro Shimizu 890ddd
      }
Toshihiro Shimizu 890ddd
    tmp_r = (tmp_r + fac_fac_4) >> fac_fac_2_bits;
Toshihiro Shimizu 890ddd
    tmp_g = (tmp_g + fac_fac_4) >> fac_fac_2_bits;
Toshihiro Shimizu 890ddd
    tmp_b = (tmp_b + fac_fac_4) >> fac_fac_2_bits;
Toshihiro Shimizu 890ddd
    *pixout++ = PIX_RGB16_FROM_BYTES (tmp_r, tmp_g, tmp_b);
Toshihiro Shimizu 890ddd
    pixin += 3 * factor;
Toshihiro Shimizu 890ddd
    }
Toshihiro Shimizu 890ddd
  if (xrest)
Toshihiro Shimizu 890ddd
    {
Toshihiro Shimizu 890ddd
    tmp_r = tmp_g = tmp_b = 0;
Toshihiro Shimizu 890ddd
    for (j = 0; j < factor; j++)
Toshihiro Shimizu 890ddd
      for (i = 0; i < xrest; i++)
Toshihiro Shimizu 890ddd
        {
Toshihiro Shimizu 890ddd
	tmp_r += pixin[3*i + j*wrapin_bytes];
Toshihiro Shimizu 890ddd
	tmp_g += pixin[3*i + j*wrapin_bytes + 1];
Toshihiro Shimizu 890ddd
	tmp_b += pixin[3*i + j*wrapin_bytes + 2];
Toshihiro Shimizu 890ddd
	}
Toshihiro Shimizu 890ddd
    tmp_r = (tmp_r + fac_xrest_2) / fac_xrest;
Toshihiro Shimizu 890ddd
    tmp_g = (tmp_g + fac_xrest_2) / fac_xrest;
Toshihiro Shimizu 890ddd
    tmp_b = (tmp_b + fac_xrest_2) / fac_xrest;
Toshihiro Shimizu 890ddd
    *pixout = PIX_RGB16_FROM_BYTES (tmp_r, tmp_g, tmp_b);
Toshihiro Shimizu 890ddd
    }
Toshihiro Shimizu 890ddd
  rowin  += wrapin_bytes * factor;
Toshihiro Shimizu 890ddd
  rowout += wrapout;
Toshihiro Shimizu 890ddd
  }
Toshihiro Shimizu 890ddd
if (yrest)
Toshihiro Shimizu 890ddd
  {
Toshihiro Shimizu 890ddd
  pixin  = rowin;
Toshihiro Shimizu 890ddd
  pixout = rowout;
Toshihiro Shimizu 890ddd
  for (x = x1; x < xlast; x += factor)
Toshihiro Shimizu 890ddd
    {
Toshihiro Shimizu 890ddd
    tmp_r = tmp_g = tmp_b = 0;
Toshihiro Shimizu 890ddd
    for (j = 0; j < yrest; j++)
Toshihiro Shimizu 890ddd
      for (i = 0; i < factor; i++)
Toshihiro Shimizu 890ddd
        {
Toshihiro Shimizu 890ddd
	tmp_r += pixin[3*i + j*wrapin_bytes];
Toshihiro Shimizu 890ddd
	tmp_g += pixin[3*i + j*wrapin_bytes + 1];
Toshihiro Shimizu 890ddd
	tmp_b += pixin[3*i + j*wrapin_bytes + 2];
Toshihiro Shimizu 890ddd
	}
Toshihiro Shimizu 890ddd
    tmp_r = (tmp_r + yrest_fac_2) / yrest_fac;
Toshihiro Shimizu 890ddd
    tmp_g = (tmp_g + yrest_fac_2) / yrest_fac;
Toshihiro Shimizu 890ddd
    tmp_b = (tmp_b + yrest_fac_2) / yrest_fac;
Toshihiro Shimizu 890ddd
    *pixout++ = PIX_RGB16_FROM_BYTES (tmp_r, tmp_g, tmp_b);
Toshihiro Shimizu 890ddd
    pixin += 3 * factor;
Toshihiro Shimizu 890ddd
    }
Toshihiro Shimizu 890ddd
  if (xrest)
Toshihiro Shimizu 890ddd
    {
Toshihiro Shimizu 890ddd
    tmp_r = tmp_g = tmp_b = 0;
Toshihiro Shimizu 890ddd
    for (j = 0; j < yrest; j++)
Toshihiro Shimizu 890ddd
      for (i = 0; i < xrest; i++)
Toshihiro Shimizu 890ddd
        {
Toshihiro Shimizu 890ddd
	tmp_r += pixin[3*i + j*wrapin_bytes];
Toshihiro Shimizu 890ddd
	tmp_g += pixin[3*i + j*wrapin_bytes + 1];
Toshihiro Shimizu 890ddd
	tmp_b += pixin[3*i + j*wrapin_bytes + 2];
Toshihiro Shimizu 890ddd
	}
Toshihiro Shimizu 890ddd
    tmp_r = (tmp_r + yrest_xrest_2) / yrest_xrest;
Toshihiro Shimizu 890ddd
    tmp_g = (tmp_g + yrest_xrest_2) / yrest_xrest;
Toshihiro Shimizu 890ddd
    tmp_b = (tmp_b + yrest_xrest_2) / yrest_xrest;
Toshihiro Shimizu 890ddd
    *pixout = PIX_RGB16_FROM_BYTES (tmp_r, tmp_g, tmp_b);
Toshihiro Shimizu 890ddd
    }
Toshihiro Shimizu 890ddd
  } }
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
													   /*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?E 81
Toshihiro Shimizu 890ddd
?I 28 static void rop_zoom_out_rgb_rgbm(RASTER *rin, RASTER *rout,
Toshihiro Shimizu 890ddd
?D 31 int x1, int y1, int x2, int y2, int newx, int newy, int factor)
Toshihiro Shimizu 890ddd
?E 31
Toshihiro Shimizu 890ddd
?I 31 int x1,
Toshihiro Shimizu 890ddd
													   int y1, int x2, int y2, int newx, int newy, int abs_zoom_level)
Toshihiro Shimizu 890ddd
?E 31 {
Toshihiro Shimizu 890ddd
?D 48
Toshihiro Shimizu 890ddd
printf ("rop_zoom_out_rgb_rgbm not implemented yet\n");
Toshihiro Shimizu 890ddd
?E 48
Toshihiro Shimizu 890ddd
?I 48
Toshihiro Shimizu 890ddd
UCHAR  *rowin, *pixin, *in;
Toshihiro Shimizu 890ddd
LPIXEL *rowout, *pixout, valout;
Toshihiro Shimizu 890ddd
int tmp_r, tmp_g, tmp_b;
Toshihiro Shimizu 890ddd
int wrapin_pixels, wrapin_bytes, wrapout;
Toshihiro Shimizu 890ddd
int x, y, lx, ly, xlast, ylast, xrest, yrest, i, j;
Toshihiro Shimizu 890ddd
int factor, fac_fac_2_bits;
Toshihiro Shimizu 890ddd
int fac_fac  , yrest_fac,   fac_xrest,   yrest_xrest;
Toshihiro Shimizu 890ddd
int fac_fac_2, yrest_fac_2, fac_xrest_2, yrest_xrest_2;
Toshihiro Shimizu 890ddd
int fac_fac_4;
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
lx=x2-x1+1;
Toshihiro Shimizu 890ddd
ly=y2-y1+1;
Toshihiro Shimizu 890ddd
factor = 1 << abs_zoom_level;
Toshihiro Shimizu 890ddd
?D 61
Toshihiro Shimizu 890ddd
xrest = lx % factor;
Toshihiro Shimizu 890ddd
yrest = ly % factor;
Toshihiro Shimizu 890ddd
?E 61
Toshihiro Shimizu 890ddd
?I 61
Toshihiro Shimizu 890ddd
xrest = lx & (factor - 1);
Toshihiro Shimizu 890ddd
yrest = ly & (factor - 1);
Toshihiro Shimizu 890ddd
?E 61
Toshihiro Shimizu 890ddd
xlast = x2 - xrest + 1;
Toshihiro Shimizu 890ddd
ylast = y2 - yrest + 1;
Toshihiro Shimizu 890ddd
fac_fac     = factor * factor; fac_fac_2     = fac_fac     >> 1;
Toshihiro Shimizu 890ddd
fac_fac_4   = fac_fac >> 2;    fac_fac_2_bits= 2 * abs_zoom_level - 1;
Toshihiro Shimizu 890ddd
yrest_fac   = yrest  * factor; yrest_fac_2   = yrest_fac   >> 1;
Toshihiro Shimizu 890ddd
fac_xrest   = factor * xrest;  fac_xrest_2   = fac_xrest   >> 1;
Toshihiro Shimizu 890ddd
yrest_xrest = yrest  * xrest;  yrest_xrest_2 = yrest_xrest >> 1;
Toshihiro Shimizu 890ddd
wrapin_pixels = rin->wrap;
Toshihiro Shimizu 890ddd
wrapin_bytes  = wrapin_pixels * 3;
Toshihiro Shimizu 890ddd
wrapout = rout->wrap;
Toshihiro Shimizu 890ddd
valout.m = 0xff;
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
rowin  = (UCHAR *)rin->buffer + wrapin_bytes*y1 + 3*x1;
Toshihiro Shimizu 890ddd
rowout = (LPIXEL*)rout->buffer + wrapout*newy + newx;
Toshihiro Shimizu 890ddd
for (y = y1; y < ylast; y += factor)
Toshihiro Shimizu 890ddd
  {
Toshihiro Shimizu 890ddd
  pixin  = rowin;
Toshihiro Shimizu 890ddd
  pixout = rowout;
Toshihiro Shimizu 890ddd
  for (x = x1; x < xlast; x += factor)
Toshihiro Shimizu 890ddd
    {
Toshihiro Shimizu 890ddd
    tmp_r = tmp_g = tmp_b = 0;
Toshihiro Shimizu 890ddd
    in = pixin;
Toshihiro Shimizu 890ddd
    for (j = 0; j < factor; j+=2)
Toshihiro Shimizu 890ddd
      {
Toshihiro Shimizu 890ddd
      for (i = 0; i < factor; i+=2)
Toshihiro Shimizu 890ddd
        {
Toshihiro Shimizu 890ddd
        tmp_r += *in++;
Toshihiro Shimizu 890ddd
        tmp_g += *in++;
Toshihiro Shimizu 890ddd
        tmp_b += *in++;
Toshihiro Shimizu 890ddd
	in += wrapin_bytes;
Toshihiro Shimizu 890ddd
        tmp_r += *in++;
Toshihiro Shimizu 890ddd
        tmp_g += *in++;
Toshihiro Shimizu 890ddd
        tmp_b += *in++;
Toshihiro Shimizu 890ddd
	in -= wrapin_bytes;
Toshihiro Shimizu 890ddd
	}
Toshihiro Shimizu 890ddd
      in += 6 * wrapin_pixels - 3 * factor;
Toshihiro Shimizu 890ddd
      }
Toshihiro Shimizu 890ddd
    valout.r = (tmp_r + fac_fac_4) >> fac_fac_2_bits;
Toshihiro Shimizu 890ddd
    valout.g = (tmp_g + fac_fac_4) >> fac_fac_2_bits;
Toshihiro Shimizu 890ddd
    valout.b = (tmp_b + fac_fac_4) >> fac_fac_2_bits;
Toshihiro Shimizu 890ddd
    *pixout++ = valout;
Toshihiro Shimizu 890ddd
    pixin += 3 * factor;
Toshihiro Shimizu 890ddd
    }
Toshihiro Shimizu 890ddd
  if (xrest)
Toshihiro Shimizu 890ddd
    {
Toshihiro Shimizu 890ddd
    tmp_r = tmp_g = tmp_b = 0;
Toshihiro Shimizu 890ddd
    for (j = 0; j < factor; j++)
Toshihiro Shimizu 890ddd
      for (i = 0; i < xrest; i++)
Toshihiro Shimizu 890ddd
        {
Toshihiro Shimizu 890ddd
	tmp_r += pixin[3*i + j*wrapin_bytes];
Toshihiro Shimizu 890ddd
	tmp_g += pixin[3*i + j*wrapin_bytes + 1];
Toshihiro Shimizu 890ddd
	tmp_b += pixin[3*i + j*wrapin_bytes + 2];
Toshihiro Shimizu 890ddd
	}
Toshihiro Shimizu 890ddd
    valout.r = (tmp_r + fac_xrest_2) / fac_xrest;
Toshihiro Shimizu 890ddd
    valout.g = (tmp_g + fac_xrest_2) / fac_xrest;
Toshihiro Shimizu 890ddd
    valout.b = (tmp_b + fac_xrest_2) / fac_xrest;
Toshihiro Shimizu 890ddd
    *pixout = valout;
Toshihiro Shimizu 890ddd
    }
Toshihiro Shimizu 890ddd
  rowin  += wrapin_bytes * factor;
Toshihiro Shimizu 890ddd
  rowout += wrapout;
Toshihiro Shimizu 890ddd
  }
Toshihiro Shimizu 890ddd
if (yrest)
Toshihiro Shimizu 890ddd
  {
Toshihiro Shimizu 890ddd
  pixin  = rowin;
Toshihiro Shimizu 890ddd
  pixout = rowout;
Toshihiro Shimizu 890ddd
  for (x = x1; x < xlast; x += factor)
Toshihiro Shimizu 890ddd
    {
Toshihiro Shimizu 890ddd
    tmp_r = tmp_g = tmp_b = 0;
Toshihiro Shimizu 890ddd
    for (j = 0; j < yrest; j++)
Toshihiro Shimizu 890ddd
      for (i = 0; i < factor; i++)
Toshihiro Shimizu 890ddd
        {
Toshihiro Shimizu 890ddd
	tmp_r += pixin[3*i + j*wrapin_bytes];
Toshihiro Shimizu 890ddd
	tmp_g += pixin[3*i + j*wrapin_bytes + 1];
Toshihiro Shimizu 890ddd
	tmp_b += pixin[3*i + j*wrapin_bytes + 2];
Toshihiro Shimizu 890ddd
	}
Toshihiro Shimizu 890ddd
    valout.r = (tmp_r + yrest_fac_2) / yrest_fac;
Toshihiro Shimizu 890ddd
    valout.g = (tmp_g + yrest_fac_2) / yrest_fac;
Toshihiro Shimizu 890ddd
    valout.b = (tmp_b + yrest_fac_2) / yrest_fac;
Toshihiro Shimizu 890ddd
    *pixout++ = valout;
Toshihiro Shimizu 890ddd
?D 49
Toshihiro Shimizu 890ddd
    pixin += factor;
Toshihiro Shimizu 890ddd
?E 49
Toshihiro Shimizu 890ddd
?I 49
Toshihiro Shimizu 890ddd
    pixin += 3 * factor;
Toshihiro Shimizu 890ddd
?E 49
Toshihiro Shimizu 890ddd
    }
Toshihiro Shimizu 890ddd
  if (xrest)
Toshihiro Shimizu 890ddd
    {
Toshihiro Shimizu 890ddd
    tmp_r = tmp_g = tmp_b = 0;
Toshihiro Shimizu 890ddd
    for (j = 0; j < yrest; j++)
Toshihiro Shimizu 890ddd
      for (i = 0; i < xrest; i++)
Toshihiro Shimizu 890ddd
        {
Toshihiro Shimizu 890ddd
	tmp_r += pixin[3*i + j*wrapin_bytes];
Toshihiro Shimizu 890ddd
	tmp_g += pixin[3*i + j*wrapin_bytes + 1];
Toshihiro Shimizu 890ddd
	tmp_b += pixin[3*i + j*wrapin_bytes + 2];
Toshihiro Shimizu 890ddd
	}
Toshihiro Shimizu 890ddd
    valout.r = (tmp_r + yrest_xrest_2) / yrest_xrest;
Toshihiro Shimizu 890ddd
    valout.g = (tmp_g + yrest_xrest_2) / yrest_xrest;
Toshihiro Shimizu 890ddd
    valout.b = (tmp_b + yrest_xrest_2) / yrest_xrest;
Toshihiro Shimizu 890ddd
    *pixout = valout;
Toshihiro Shimizu 890ddd
    }
Toshihiro Shimizu 890ddd
  }
Toshihiro Shimizu 890ddd
?E 48 }
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
													/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?I 68
Toshihiro Shimizu 890ddd
?D 69 static void rop_copy_bw_bw(RASTER *rin, RASTER *rout, int x1, int y1, int x2, int y2, int newx, int newy)
Toshihiro Shimizu 890ddd
?E 69
Toshihiro Shimizu 890ddd
?I 69 static void rop_copy_bw(RASTER *rin, RASTER *rout, int x1, int y1, int x2, int y2, int newx, int newy)
Toshihiro Shimizu 890ddd
?E 69 {
Toshihiro Shimizu 890ddd
UINT mask;
Toshihiro Shimizu 890ddd
?D 69
Toshihiro Shimizu 890ddd
int yin, yout, byte, byte1, byte2, newbyte, bytewrapin, bytewrapout;
Toshihiro Shimizu 890ddd
?E 69
Toshihiro Shimizu 890ddd
?I 69
Toshihiro Shimizu 890ddd
int yin, yout, byte, byte1, byte2, newbyte, bytewrapin, bytewrapout, rest;
Toshihiro Shimizu 890ddd
?E 69
Toshihiro Shimizu 890ddd
UCHAR *bytein, *byteout;
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?D 69
Toshihiro Shimizu 890ddd
if ((x1 & 7) || ((x2 + 1) & 7))
Toshihiro Shimizu 890ddd
?E 69
Toshihiro Shimizu 890ddd
?I 69
Toshihiro Shimizu 890ddd
if ((x1 & 7) || (newx & 7))
Toshihiro Shimizu 890ddd
?E 69
Toshihiro Shimizu 890ddd
  {
Toshihiro Shimizu 890ddd
?D 69
Toshihiro Shimizu 890ddd
  msg (MSG_IE, "rop_copy_bw_bw: x coordinates must be multiples of 8");
Toshihiro Shimizu 890ddd
?E 69
Toshihiro Shimizu 890ddd
?I 69
Toshihiro Shimizu 890ddd
  rop_copy_90_bw (rin, rout, x1, y1, x2, y2, newx, newy, FALSE, 0);
Toshihiro Shimizu 890ddd
?E 69
Toshihiro Shimizu 890ddd
  return;
Toshihiro Shimizu 890ddd
  }
Toshihiro Shimizu 890ddd
mask = rin->type == rout->type ? 0x0 : 0xff;
Toshihiro Shimizu 890ddd
byte1 = x1 >> 3;
Toshihiro Shimizu 890ddd
byte2 = ((x2 + 1) >> 3) - 1;
Toshihiro Shimizu 890ddd
?I 69
Toshihiro Shimizu 890ddd
rest  = (x2 + 1) & 7;
Toshihiro Shimizu 890ddd
?E 69
Toshihiro Shimizu 890ddd
newbyte = newx >> 3;
Toshihiro Shimizu 890ddd
bytewrapin  = (rin->wrap  + 7) >> 3;
Toshihiro Shimizu 890ddd
bytewrapout = (rout->wrap + 7) >> 3;
Toshihiro Shimizu 890ddd
for (yin = y1, yout = newy; yin <= y2; yin++, yout++)
Toshihiro Shimizu 890ddd
  {
Toshihiro Shimizu 890ddd
  bytein  = (UCHAR *)rin->buffer  + yin  * bytewrapin  + byte1;
Toshihiro Shimizu 890ddd
  byteout = (UCHAR *)rout->buffer + yout * bytewrapout + newbyte;
Toshihiro Shimizu 890ddd
  if (mask)
Toshihiro Shimizu 890ddd
    for (byte = byte1; byte <= byte2; byte++)
Toshihiro Shimizu 890ddd
      *byteout++ = *bytein++ ^ mask;
Toshihiro Shimizu 890ddd
  else
Toshihiro Shimizu 890ddd
    for (byte = byte1; byte <= byte2; byte++)
Toshihiro Shimizu 890ddd
      *byteout++ = *bytein++;
Toshihiro Shimizu 890ddd
?I 69
Toshihiro Shimizu 890ddd
  if (rest)
Toshihiro Shimizu 890ddd
    *byteout |= (*bytein ^ mask) & (~0U << (7 - rest));
Toshihiro Shimizu 890ddd
?E 69
Toshihiro Shimizu 890ddd
  } }
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
													/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?E 68
Toshihiro Shimizu 890ddd
?E 28
Toshihiro Shimizu 890ddd
?E 20
Toshihiro Shimizu 890ddd
?E 18 static void rop_copy_bw_cm16(RASTER *rin, RASTER *rout, int x1, int y1, int x2, int y2, int newx, int newy) {
Toshihiro Shimizu 890ddd
UCHAR  *rowin, *bytein;
Toshihiro Shimizu 890ddd
USHORT *rowout, *pixout;
Toshihiro Shimizu 890ddd
LPIXEL *cmap;
Toshihiro Shimizu 890ddd
?I 5
Toshihiro Shimizu 890ddd
?D 21
Toshihiro Shimizu 890ddd
int i_0, i_1, i_t;
Toshihiro Shimizu 890ddd
?E 21
Toshihiro Shimizu 890ddd
?I 21
Toshihiro Shimizu 890ddd
USHORT i_0, i_1, i_t;
Toshihiro Shimizu 890ddd
?E 21
Toshihiro Shimizu 890ddd
?E 5
Toshihiro Shimizu 890ddd
?D 18
Toshihiro Shimizu 890ddd
int wrapin, wrapout, tmp, cmap_offset, bit, bit_offs, startbit;
Toshihiro Shimizu 890ddd
?E 18
Toshihiro Shimizu 890ddd
?I 18
Toshihiro Shimizu 890ddd
int wrapin, wrapout, cmap_offset, bit, bit_offs, startbit;
Toshihiro Shimizu 890ddd
?E 18
Toshihiro Shimizu 890ddd
int x, lx, ly;
Toshihiro Shimizu 890ddd
?D 5
Toshihiro Shimizu 890ddd
int reversed;
Toshihiro Shimizu 890ddd
?E 5
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?D 68
Toshihiro Shimizu 890ddd
if(!rout->cmap.buffer)
Toshihiro Shimizu 890ddd
?E 68
Toshihiro Shimizu 890ddd
?I 68
Toshihiro Shimizu 890ddd
?D 84
Toshihiro Shimizu 890ddd
if ( !rout->cmap.buffer)
Toshihiro Shimizu 890ddd
?E 68
Toshihiro Shimizu 890ddd
  {
Toshihiro Shimizu 890ddd
?D 68
Toshihiro Shimizu 890ddd
   msg (MSG_IE, "rop_copy_bw_cm16: missing color map");
Toshihiro Shimizu 890ddd
   return;
Toshihiro Shimizu 890ddd
?E 68
Toshihiro Shimizu 890ddd
?I 68
Toshihiro Shimizu 890ddd
  msg (MSG_IE, "rop_copy_bw_cm16: missing color map");
Toshihiro Shimizu 890ddd
  return;
Toshihiro Shimizu 890ddd
?E 68
Toshihiro Shimizu 890ddd
  }
Toshihiro Shimizu 890ddd
?E 84
Toshihiro Shimizu 890ddd
cmap=rout->cmap.buffer;
Toshihiro Shimizu 890ddd
?D 56
Toshihiro Shimizu 890ddd
cmap_offset=rout->cmap.offset;
Toshihiro Shimizu 890ddd
?E 56
Toshihiro Shimizu 890ddd
?I 56
Toshihiro Shimizu 890ddd
cmap_offset=rout->cmap.info.offset_mask;
Toshihiro Shimizu 890ddd
?E 56
Toshihiro Shimizu 890ddd
?D 5
Toshihiro Shimizu 890ddd
switch (rin->type)
Toshihiro Shimizu 890ddd
?E 5
Toshihiro Shimizu 890ddd
?I 5
Toshihiro Shimizu 890ddd
if (cmap[0].r==0)
Toshihiro Shimizu 890ddd
?E 5
Toshihiro Shimizu 890ddd
  {
Toshihiro Shimizu 890ddd
?D 5
Toshihiro Shimizu 890ddd
  CASE RAS_BW: reversed = cmap[0].r!=0;
Toshihiro Shimizu 890ddd
  CASE RAS_WB: reversed = cmap[0].r==0;
Toshihiro Shimizu 890ddd
  DEFAULT: msg (MSG_IE, "rop_copy_bw_cm16: invalid rastertype");
Toshihiro Shimizu 890ddd
?E 5
Toshihiro Shimizu 890ddd
?I 5
Toshihiro Shimizu 890ddd
  i_0 = cmap_offset;
Toshihiro Shimizu 890ddd
  i_1 = cmap_offset + 255;
Toshihiro Shimizu 890ddd
?E 5
Toshihiro Shimizu 890ddd
  }
Toshihiro Shimizu 890ddd
?I 5
Toshihiro Shimizu 890ddd
else
Toshihiro Shimizu 890ddd
  {
Toshihiro Shimizu 890ddd
  i_0 = cmap_offset + 255;
Toshihiro Shimizu 890ddd
  i_1 = cmap_offset;
Toshihiro Shimizu 890ddd
  }
Toshihiro Shimizu 890ddd
if (rin->type==RAS_WB)
Toshihiro Shimizu 890ddd
  {
Toshihiro Shimizu 890ddd
  i_t = i_0;
Toshihiro Shimizu 890ddd
  i_0 = i_1;
Toshihiro Shimizu 890ddd
  i_1 = i_t;
Toshihiro Shimizu 890ddd
  }
Toshihiro Shimizu 890ddd
?E 5
Toshihiro Shimizu 890ddd
lx=x2-x1+1;
Toshihiro Shimizu 890ddd
ly=y2-y1+1;
Toshihiro Shimizu 890ddd
?D 8
Toshihiro Shimizu 890ddd
wrapin  = rin->wrap;
Toshihiro Shimizu 890ddd
wrapout = rout->wrap;
Toshihiro Shimizu 890ddd
?E 8
Toshihiro Shimizu 890ddd
?I 8
Toshihiro Shimizu 890ddd
?D 10
Toshihiro Shimizu 890ddd
if ((rin->wrap % sizeof(UCHAR)) || (rout->wrap % sizeof(USHORT)))
Toshihiro Shimizu 890ddd
  {
Toshihiro Shimizu 890ddd
   printf("### INTERNAL ERROR - rop_copy_bw_cm16; bad wrap\n");
Toshihiro Shimizu 890ddd
   return;
Toshihiro Shimizu 890ddd
  }
Toshihiro Shimizu 890ddd
wrapin  = rin->wrap  / sizeof(UCHAR);
Toshihiro Shimizu 890ddd
wrapout = rout->wrap / sizeof(USHORT);
Toshihiro Shimizu 890ddd
?E 8
Toshihiro Shimizu 890ddd
bit_offs = rin->bit_offs;
Toshihiro Shimizu 890ddd
?E 10
Toshihiro Shimizu 890ddd
?I 10
Toshihiro Shimizu 890ddd
?D 16
Toshihiro Shimizu 890ddd
wrapin   = rin ->wrap / 8;
Toshihiro Shimizu 890ddd
?E 16
Toshihiro Shimizu 890ddd
?I 16
Toshihiro Shimizu 890ddd
?D 47
Toshihiro Shimizu 890ddd
wrapin   = (rin->wrap + 7) / 8;
Toshihiro Shimizu 890ddd
?E 47
Toshihiro Shimizu 890ddd
?I 47
Toshihiro Shimizu 890ddd
wrapin   = (rin->wrap + 7) >> 3;
Toshihiro Shimizu 890ddd
?E 47
Toshihiro Shimizu 890ddd
?E 16
Toshihiro Shimizu 890ddd
bit_offs = rin ->bit_offs;
Toshihiro Shimizu 890ddd
wrapout  = rout->wrap;
Toshihiro Shimizu 890ddd
?E 10
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
rowin = (UCHAR*)rin->buffer + wrapin*y1 + ((x1 + bit_offs)>>3);
Toshihiro Shimizu 890ddd
startbit = 7 - ((x1 + bit_offs) & 7);
Toshihiro Shimizu 890ddd
rowout = (USHORT*)rout->buffer + wrapout*newy + newx;
Toshihiro Shimizu 890ddd
while (ly-- > 0)
Toshihiro Shimizu 890ddd
  {
Toshihiro Shimizu 890ddd
  bytein = rowin;
Toshihiro Shimizu 890ddd
  bit    = startbit;
Toshihiro Shimizu 890ddd
  pixout = rowout;
Toshihiro Shimizu 890ddd
?D 5
Toshihiro Shimizu 890ddd
  if (reversed)
Toshihiro Shimizu 890ddd
    for (x = lx; x > 0; x--)
Toshihiro Shimizu 890ddd
      {
Toshihiro Shimizu 890ddd
      *pixout++ = cmap_offset + 1 - ((*bytein >> bit) & 1);
Toshihiro Shimizu 890ddd
      if (bit==0)
Toshihiro Shimizu 890ddd
        {
Toshihiro Shimizu 890ddd
        bytein++;
Toshihiro Shimizu 890ddd
        bit = 7;
Toshihiro Shimizu 890ddd
        }
Toshihiro Shimizu 890ddd
      else
Toshihiro Shimizu 890ddd
        bit--;
Toshihiro Shimizu 890ddd
      }
Toshihiro Shimizu 890ddd
  else
Toshihiro Shimizu 890ddd
    for (x = lx; x > 0; x--)
Toshihiro Shimizu 890ddd
?E 5
Toshihiro Shimizu 890ddd
?I 5
Toshihiro Shimizu 890ddd
  for (x = lx; x > 0; x--)
Toshihiro Shimizu 890ddd
    {
Toshihiro Shimizu 890ddd
    *pixout++ = ((*bytein >> bit) & 1) ? i_1 : i_0;
Toshihiro Shimizu 890ddd
    if (bit==0)
Toshihiro Shimizu 890ddd
?E 5
Toshihiro Shimizu 890ddd
      {
Toshihiro Shimizu 890ddd
?D 5
Toshihiro Shimizu 890ddd
      *pixout++ = cmap_offset + ((*bytein >> bit) & 1);
Toshihiro Shimizu 890ddd
      if (bit==0)
Toshihiro Shimizu 890ddd
        {
Toshihiro Shimizu 890ddd
        bytein++;
Toshihiro Shimizu 890ddd
        bit = 7;
Toshihiro Shimizu 890ddd
        }
Toshihiro Shimizu 890ddd
      else
Toshihiro Shimizu 890ddd
        bit--;
Toshihiro Shimizu 890ddd
?E 5
Toshihiro Shimizu 890ddd
?I 5
Toshihiro Shimizu 890ddd
      bytein++;
Toshihiro Shimizu 890ddd
      bit = 7;
Toshihiro Shimizu 890ddd
?E 5
Toshihiro Shimizu 890ddd
      }
Toshihiro Shimizu 890ddd
?I 5
Toshihiro Shimizu 890ddd
    else
Toshihiro Shimizu 890ddd
      bit--;
Toshihiro Shimizu 890ddd
    }
Toshihiro Shimizu 890ddd
?E 5
Toshihiro Shimizu 890ddd
  rowin  += wrapin;
Toshihiro Shimizu 890ddd
  rowout += wrapout;
Toshihiro Shimizu 890ddd
  } }
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
													/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?I 20
Toshihiro Shimizu 890ddd
?D 84 static void rop_reduce_bw_cm16(RASTER *rin, RASTER *rout, int x1, int y1, int x2, int y2, int newx, int newy, int factor)
Toshihiro Shimizu 890ddd
?E 84
Toshihiro Shimizu 890ddd
?I 84 static void rop_copy_bw_cm24(RASTER *rin, RASTER *rout, int x1, int y1, int x2, int y2, int newx, int newy)
Toshihiro Shimizu 890ddd
?E 84 {
Toshihiro Shimizu 890ddd
?D 84
Toshihiro Shimizu 890ddd
printf ("rop_reduce_bw_cm16 not implemented yet\n");
Toshihiro Shimizu 890ddd
?E 84
Toshihiro Shimizu 890ddd
?I 84
Toshihiro Shimizu 890ddd
UCHAR  *rowin, *bytein;
Toshihiro Shimizu 890ddd
ULONG  *rowout, *pixout;
Toshihiro Shimizu 890ddd
LPIXEL *penmap, *colmap;
Toshihiro Shimizu 890ddd
ULONG  i_0, i_1, i_t;
Toshihiro Shimizu 890ddd
int wrapin, wrapout, bit, bit_offs, startbit;
Toshihiro Shimizu 890ddd
int x, lx, ly;
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
penmap=rout->cmap.penbuffer;
Toshihiro Shimizu 890ddd
colmap=rout->cmap.colbuffer;
Toshihiro Shimizu 890ddd
if (penmap[0].r + colmap[0].r==0)
Toshihiro Shimizu 890ddd
  {
Toshihiro Shimizu 890ddd
  i_0 = 0;
Toshihiro Shimizu 890ddd
  i_1 = 255;
Toshihiro Shimizu 890ddd
  }
Toshihiro Shimizu 890ddd
else
Toshihiro Shimizu 890ddd
  {
Toshihiro Shimizu 890ddd
  i_0 = 255;
Toshihiro Shimizu 890ddd
  i_1 = 0;
Toshihiro Shimizu 890ddd
  }
Toshihiro Shimizu 890ddd
if (rin->type==RAS_WB)
Toshihiro Shimizu 890ddd
  {
Toshihiro Shimizu 890ddd
  i_t = i_0;
Toshihiro Shimizu 890ddd
  i_0 = i_1;
Toshihiro Shimizu 890ddd
  i_1 = i_t;
Toshihiro Shimizu 890ddd
  }
Toshihiro Shimizu 890ddd
lx=x2-x1+1;
Toshihiro Shimizu 890ddd
ly=y2-y1+1;
Toshihiro Shimizu 890ddd
wrapin   = (rin->wrap + 7) >> 3;
Toshihiro Shimizu 890ddd
bit_offs = rin ->bit_offs;
Toshihiro Shimizu 890ddd
wrapout  = rout->wrap;
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
rowin = (UCHAR*)rin->buffer + wrapin*y1 + ((x1 + bit_offs)>>3);
Toshihiro Shimizu 890ddd
startbit = 7 - ((x1 + bit_offs) & 7);
Toshihiro Shimizu 890ddd
rowout = (ULONG*)rout->buffer + wrapout*newy + newx;
Toshihiro Shimizu 890ddd
while (ly-- > 0)
Toshihiro Shimizu 890ddd
  {
Toshihiro Shimizu 890ddd
  bytein = rowin;
Toshihiro Shimizu 890ddd
  bit    = startbit;
Toshihiro Shimizu 890ddd
  pixout = rowout;
Toshihiro Shimizu 890ddd
  for (x = lx; x > 0; x--)
Toshihiro Shimizu 890ddd
    {
Toshihiro Shimizu 890ddd
    *pixout++ = ((*bytein >> bit) & 1) ? i_1 : i_0;
Toshihiro Shimizu 890ddd
    if (bit==0)
Toshihiro Shimizu 890ddd
      {
Toshihiro Shimizu 890ddd
      bytein++;
Toshihiro Shimizu 890ddd
      bit = 7;
Toshihiro Shimizu 890ddd
      }
Toshihiro Shimizu 890ddd
    else
Toshihiro Shimizu 890ddd
      bit--;
Toshihiro Shimizu 890ddd
    }
Toshihiro Shimizu 890ddd
  rowin  += wrapin;
Toshihiro Shimizu 890ddd
  rowout += wrapout;
Toshihiro Shimizu 890ddd
  }
Toshihiro Shimizu 890ddd
?I 89
Toshihiro Shimizu 890ddd
if (rout->extra_mask)
Toshihiro Shimizu 890ddd
  rop_copy_extra (rin, rout, x1, y1, x2, y2, newx, newy);
Toshihiro Shimizu 890ddd
?E 89
Toshihiro Shimizu 890ddd
?E 84 }
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
													/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?I 28 static void rop_zoom_out_bw_cm16(RASTER *rin, RASTER *rout,
Toshihiro Shimizu 890ddd
?D 31 int x1, int y1, int x2, int y2, int newx, int newy, int factor)
Toshihiro Shimizu 890ddd
?E 31
Toshihiro Shimizu 890ddd
?I 31 int x1,
Toshihiro Shimizu 890ddd
													int y1, int x2, int y2, int newx, int newy, int abs_zoom_level)
Toshihiro Shimizu 890ddd
?E 31 { printf("rop_zoom_out_bw_cm16 not implemented yet\n"); }
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
									   /*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?I 84 static void rop_zoom_out_bw_cm24(RASTER *rin, RASTER *rout, int x1, int y1, int x2, int y2, int newx, int newy, int abs_zoom_level) { printf("rop_zoom_out_bw_cm24 not implemented yet\n"); }
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
									   /*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?E 84
Toshihiro Shimizu 890ddd
?E 28
Toshihiro Shimizu 890ddd
?E 20
Toshihiro Shimizu 890ddd
?I 19 static void rop_copy_bw_rgbm(RASTER *rin, RASTER *rout, int x1, int y1, int x2, int y2, int newx, int newy) {
Toshihiro Shimizu 890ddd
UCHAR  *rowin, *bytein;
Toshihiro Shimizu 890ddd
LPIXEL *rowout, *pixout;
Toshihiro Shimizu 890ddd
LPIXEL rgb_0, rgb_1;
Toshihiro Shimizu 890ddd
int wrapin, wrapout, bit, bit_offs, startbit;
Toshihiro Shimizu 890ddd
int x, lx, ly;
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
if (rin->type==RAS_WB)
Toshihiro Shimizu 890ddd
  {
Toshihiro Shimizu 890ddd
  rgb_0.r = 0xff;  rgb_0.g = 0xff;  rgb_0.b = 0xff;  rgb_0.m = 0xff;
Toshihiro Shimizu 890ddd
  rgb_1.r = 0x00;  rgb_1.g = 0x00;  rgb_1.b = 0x00;  rgb_1.m = 0xff;
Toshihiro Shimizu 890ddd
  }
Toshihiro Shimizu 890ddd
else
Toshihiro Shimizu 890ddd
  {
Toshihiro Shimizu 890ddd
  rgb_0.r = 0x00;  rgb_0.g = 0x00;  rgb_0.b = 0x00;  rgb_0.m = 0xff;
Toshihiro Shimizu 890ddd
  rgb_1.r = 0xff;  rgb_1.g = 0xff;  rgb_1.b = 0xff;  rgb_1.m = 0xff;
Toshihiro Shimizu 890ddd
  }
Toshihiro Shimizu 890ddd
lx=x2-x1+1;
Toshihiro Shimizu 890ddd
ly=y2-y1+1;
Toshihiro Shimizu 890ddd
?D 47
Toshihiro Shimizu 890ddd
wrapin   = (rin->wrap + 7) / 8;
Toshihiro Shimizu 890ddd
?E 47
Toshihiro Shimizu 890ddd
?I 47
Toshihiro Shimizu 890ddd
wrapin   = (rin->wrap + 7) >> 3;
Toshihiro Shimizu 890ddd
?E 47
Toshihiro Shimizu 890ddd
bit_offs = rin ->bit_offs;
Toshihiro Shimizu 890ddd
wrapout  = rout->wrap;
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
rowin = (UCHAR*)rin->buffer + wrapin*y1 + ((x1 + bit_offs)>>3);
Toshihiro Shimizu 890ddd
startbit = 7 - ((x1 + bit_offs) & 7);
Toshihiro Shimizu 890ddd
rowout = (LPIXEL*)rout->buffer + wrapout*newy + newx;
Toshihiro Shimizu 890ddd
while (ly-- > 0)
Toshihiro Shimizu 890ddd
  {
Toshihiro Shimizu 890ddd
  bytein = rowin;
Toshihiro Shimizu 890ddd
  bit    = startbit;
Toshihiro Shimizu 890ddd
  pixout = rowout;
Toshihiro Shimizu 890ddd
  for (x = lx; x > 0; x--)
Toshihiro Shimizu 890ddd
    {
Toshihiro Shimizu 890ddd
    *pixout++ = ((*bytein >> bit) & 1) ? rgb_1 : rgb_0;
Toshihiro Shimizu 890ddd
    if (bit==0)
Toshihiro Shimizu 890ddd
      {
Toshihiro Shimizu 890ddd
      bytein++;
Toshihiro Shimizu 890ddd
      bit = 7;
Toshihiro Shimizu 890ddd
      }
Toshihiro Shimizu 890ddd
    else
Toshihiro Shimizu 890ddd
      bit--;
Toshihiro Shimizu 890ddd
    }
Toshihiro Shimizu 890ddd
  rowin  += wrapin;
Toshihiro Shimizu 890ddd
  rowout += wrapout;
Toshihiro Shimizu 890ddd
  } }
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
									   /*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?I 20
Toshihiro Shimizu 890ddd
?D 84 static void rop_reduce_bw_rgbm(RASTER *rin, RASTER *rout, int x1, int y1, int x2, int y2, int newx, int newy, int factor) { printf("rop_reduce_bw_rgbm not implemented yet\n"); }
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
									   /*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?E 84
Toshihiro Shimizu 890ddd
?I 28 static void rop_zoom_out_bw_rgbm(RASTER *rin, RASTER *rout,
Toshihiro Shimizu 890ddd
?D 31 int x1, int y1, int x2, int y2, int newx, int newy, int factor)
Toshihiro Shimizu 890ddd
?E 31
Toshihiro Shimizu 890ddd
?I 31 int x1,
Toshihiro Shimizu 890ddd
									   int y1, int x2, int y2, int newx, int newy, int abs_zoom_level)
Toshihiro Shimizu 890ddd
?E 31
Toshihiro Shimizu 890ddd
{
Shinya Kitaoka 120a6e
  ?D 61 printf("rop_zoom_out_bw_rgbm not implemented yet\n");
Shinya Kitaoka 120a6e
  ?E 61
Toshihiro Shimizu 890ddd
?I 61 UCHAR *rowin, *bytein, *in;
Shinya Kitaoka 120a6e
  LPIXEL *rowout, *pixout, valout;
Shinya Kitaoka 120a6e
  int val_0, val_1, tmp;
Shinya Kitaoka 120a6e
  int wrapin, wrapout, bitin, bit, bit_offs, startbit;
Shinya Kitaoka 120a6e
  int x, y, lx, ly, xlast, ylast, xrest, yrest, i, j;
Shinya Kitaoka 120a6e
  int factor, fac_fac_2_bits;
Shinya Kitaoka 120a6e
  int fac_fac, yrest_fac, fac_xrest, yrest_xrest;
Shinya Kitaoka 120a6e
  int fac_fac_2, yrest_fac_2, fac_xrest_2, yrest_xrest_2;
Shinya Kitaoka 120a6e
  int fac_fac_4;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  if (rin->type == RAS_WB) {
Shinya Kitaoka 120a6e
    val_0 = 0xff;
Shinya Kitaoka 120a6e
    val_1 = 0x00;
Shinya Kitaoka 120a6e
  } else {
Shinya Kitaoka 120a6e
    val_0 = 0x00;
Shinya Kitaoka 120a6e
    val_1 = 0xff;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  lx             = x2 - x1 + 1;
Shinya Kitaoka 120a6e
  ly             = y2 - y1 + 1;
Shinya Kitaoka 120a6e
  factor         = 1 << abs_zoom_level;
Shinya Kitaoka 120a6e
  xrest          = lx & (factor - 1);
Shinya Kitaoka 120a6e
  yrest          = ly & (factor - 1);
Shinya Kitaoka 120a6e
  xlast          = x2 - xrest + 1;
Shinya Kitaoka 120a6e
  ylast          = y2 - yrest + 1;
Shinya Kitaoka 120a6e
  fac_fac        = factor * factor;
Shinya Kitaoka 120a6e
  fac_fac_2      = fac_fac >> 1;
Shinya Kitaoka 120a6e
  fac_fac_4      = fac_fac >> 2;
Shinya Kitaoka 120a6e
  fac_fac_2_bits = 2 * abs_zoom_level - 1;
Shinya Kitaoka 120a6e
  yrest_fac      = yrest * factor;
Shinya Kitaoka 120a6e
  yrest_fac_2    = yrest_fac >> 1;
Shinya Kitaoka 120a6e
  fac_xrest      = factor * xrest;
Shinya Kitaoka 120a6e
  fac_xrest_2    = fac_xrest >> 1;
Shinya Kitaoka 120a6e
  yrest_xrest    = yrest * xrest;
Shinya Kitaoka 120a6e
  yrest_xrest_2  = yrest_xrest >> 1;
Shinya Kitaoka 120a6e
  wrapin         = (rin->wrap + 7) >> 3;
Shinya Kitaoka 120a6e
  bit_offs       = rin->bit_offs;
Shinya Kitaoka 120a6e
  wrapout        = rout->wrap;
Shinya Kitaoka 120a6e
  valout.m       = 0xff;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  rowin    = (UCHAR *)rin->buffer + wrapin * y1 + ((x1 + bit_offs) >> 3);
Shinya Kitaoka 120a6e
  startbit = 7 - ((x1 + bit_offs) & 7);
Shinya Kitaoka 120a6e
  rowout   = (LPIXEL *)rout->buffer + wrapout * newy + newx;
Shinya Kitaoka 120a6e
  for (y = y1; y < ylast; y += factor) {
Shinya Kitaoka 120a6e
    bytein = rowin;
Shinya Kitaoka 120a6e
    bitin  = startbit;
Shinya Kitaoka 120a6e
    pixout = rowout;
Shinya Kitaoka 120a6e
    for (x = x1; x < xlast; x += factor) {
Shinya Kitaoka 120a6e
      tmp = 0;
Shinya Kitaoka 120a6e
      in  = bytein;
Shinya Kitaoka 120a6e
      bit = bitin;
Shinya Kitaoka 120a6e
      for (j = 0; j < factor; j += 2) {
Shinya Kitaoka 120a6e
        for (i = 0; i < factor; i += 2) {
Shinya Kitaoka 120a6e
          tmp += ((*in >> bit) & 1);
Shinya Kitaoka 120a6e
          in += wrapin;
Shinya Kitaoka 120a6e
          if (bit == 0) {
Shinya Kitaoka 120a6e
            in++;
Shinya Kitaoka 120a6e
            bit = 7;
Shinya Kitaoka 120a6e
          } else
Shinya Kitaoka 120a6e
            bit--;
Shinya Kitaoka 120a6e
          tmp += ((*in >> bit) & 1);
Shinya Kitaoka 120a6e
          in -= wrapin;
Shinya Kitaoka 120a6e
          if (bit == 0) {
Shinya Kitaoka 120a6e
            in++;
Shinya Kitaoka 120a6e
            bit = 7;
Shinya Kitaoka 120a6e
          } else
Shinya Kitaoka 120a6e
            bit--;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
        in += 2 * wrapin;
Shinya Kitaoka 120a6e
        bit += factor;
Shinya Kitaoka 120a6e
        while (bit > 7) {
Shinya Kitaoka 120a6e
          in--;
Shinya Kitaoka 120a6e
          bit -= 8;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
      }
Shinya Kitaoka 120a6e
      tmp      = tmp * val_1 + (fac_fac_2 - tmp) * val_0;
Shinya Kitaoka 120a6e
      valout.r = valout.g = valout.b = (tmp + fac_fac_4) >> fac_fac_2_bits;
Shinya Kitaoka 120a6e
      *pixout++                      = valout;
Shinya Kitaoka 120a6e
      bitin -= factor;
Shinya Kitaoka 120a6e
      while (bitin < 0) {
Shinya Kitaoka 120a6e
        bytein++;
Shinya Kitaoka 120a6e
        bitin += 8;
Shinya Kitaoka 120a6e
      }
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    if (xrest) {
Shinya Kitaoka 120a6e
      tmp = 0;
Shinya Kitaoka 120a6e
      for (j = 0; j < factor; j++)
Shinya Kitaoka 120a6e
        for (i = 0; i < xrest; i++) {
Shinya Kitaoka 120a6e
          tmp += GET_BIT(i, j, bytein, wrapin, 7 - bitin);
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
      tmp      = tmp * val_1 + (fac_xrest - tmp) * val_0;
Shinya Kitaoka 120a6e
      valout.r = valout.g = valout.b = (tmp + fac_xrest_2) / fac_xrest;
Shinya Kitaoka 120a6e
      *pixout                        = valout;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    rowin += wrapin * factor;
Shinya Kitaoka 120a6e
    rowout += wrapout;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  if (yrest) {
Shinya Kitaoka 120a6e
    bytein = rowin;
Shinya Kitaoka 120a6e
    bitin  = startbit;
Shinya Kitaoka 120a6e
    pixout = rowout;
Shinya Kitaoka 120a6e
    for (x = x1; x < xlast; x += factor) {
Shinya Kitaoka 120a6e
      tmp = 0;
Shinya Kitaoka 120a6e
      for (j = 0; j < yrest; j++)
Shinya Kitaoka 120a6e
        for (i = 0; i < factor; i++) {
Shinya Kitaoka 120a6e
          tmp += GET_BIT(i, j, bytein, wrapin, 7 - bitin);
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
      tmp      = tmp * val_1 + (yrest_fac - tmp) * val_0;
Shinya Kitaoka 120a6e
      valout.r = valout.g = valout.b = (tmp + yrest_fac_2) / yrest_fac;
Shinya Kitaoka 120a6e
      *pixout++                      = valout;
Shinya Kitaoka 120a6e
      bitin -= factor;
Shinya Kitaoka 120a6e
      while (bitin < 0) {
Shinya Kitaoka 120a6e
        bytein++;
Shinya Kitaoka 120a6e
        bitin += 8;
Shinya Kitaoka 120a6e
      }
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    if (xrest) {
Shinya Kitaoka 120a6e
      tmp = 0;
Shinya Kitaoka 120a6e
      for (j = 0; j < yrest; j++)
Shinya Kitaoka 120a6e
        for (i = 0; i < xrest; i++) {
Shinya Kitaoka 120a6e
          tmp += GET_BIT(i, j, bytein, wrapin, 7 - bitin);
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
      tmp      = tmp * val_1 + (yrest_xrest - tmp) * val_0;
Shinya Kitaoka 120a6e
      valout.r = valout.g = valout.b = (tmp + yrest_xrest_2) / yrest_xrest;
Shinya Kitaoka 120a6e
      *pixout                        = valout;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  ?E 61
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?E 28
Toshihiro Shimizu 890ddd
?E 20
Shinya Kitaoka 120a6e
?E 19 static void rop_copy_gr8_cm16(RASTER *rin, RASTER *rout, int x1, int y1,
Shinya Kitaoka 120a6e
                                     int x2, int y2, int newx, int newy) {
Shinya Kitaoka 120a6e
  UCHAR *rowin, *bytein;
Shinya Kitaoka 120a6e
  USHORT *rowout, *pixout;
Shinya Kitaoka 120a6e
  LPIXEL *cmap;
Shinya Kitaoka 120a6e
  ?D 18 int wrapin, wrapout, tmp, cmap_offset;
Shinya Kitaoka 120a6e
  ?E 18
Toshihiro Shimizu 890ddd
?I 18 int wrapin, wrapout, cmap_offset;
Shinya Kitaoka 120a6e
  ?E 18 int x, lx, ly;
Shinya Kitaoka 120a6e
  int i, reversed;
Shinya Kitaoka 120a6e
  ?E 4
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?I 4
Shinya Kitaoka 120a6e
?D 84 if (!rout->cmap.buffer) {
Shinya Kitaoka 120a6e
    msg(MSG_IE, "rop_copy_gr8_cm16: missing color map");
Shinya Kitaoka 120a6e
    return;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  ?E 84 cmap        = rout->cmap.buffer;
Shinya Kitaoka 120a6e
  ?D 56 cmap_offset = rout->cmap.offset;
Shinya Kitaoka 120a6e
  ?E 56
Shinya Kitaoka 120a6e
?I 56 cmap_offset  = rout->cmap.info.offset_mask;
Shinya Kitaoka 120a6e
  ?E 56 reversed    = cmap[0].r != 0;
Shinya Kitaoka 120a6e
  lx                = x2 - x1 + 1;
Shinya Kitaoka 120a6e
  ly                = y2 - y1 + 1;
Shinya Kitaoka 120a6e
  ?D 8 wrapin       = rin->wrap;
Shinya Kitaoka 120a6e
  wrapout           = rout->wrap;
Shinya Kitaoka 120a6e
  ?E 8
Toshihiro Shimizu 890ddd
?I 8
Shinya Kitaoka 120a6e
?D 10 if ((rin->wrap % sizeof(UCHAR)) || (rout->wrap % sizeof(USHORT))) {
Shinya Kitaoka 120a6e
    printf("### INTERNAL ERROR - rop_copy_gr8_cm16; bad wrap\n");
Shinya Kitaoka 120a6e
    return;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  wrapin      = rin->wrap / sizeof(UCHAR);
Shinya Kitaoka 120a6e
  wrapout     = rout->wrap / sizeof(USHORT);
Shinya Kitaoka 120a6e
  ?E 10
Toshihiro Shimizu 890ddd
?I 10 wrapin = rin->wrap;
Shinya Kitaoka 120a6e
  wrapout     = rout->wrap;
Shinya Kitaoka 120a6e
  ?E 10
Toshihiro Shimizu 890ddd
?E 8
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
      rowin = (UCHAR *)rin->buffer + wrapin * y1 + x1;
Shinya Kitaoka 120a6e
  rowout    = (USHORT *)rout->buffer + wrapout * newy + newx;
Shinya Kitaoka 120a6e
  while (ly-- > 0) {
Shinya Kitaoka 120a6e
    bytein = rowin;
Shinya Kitaoka 120a6e
    pixout = rowout;
Shinya Kitaoka 120a6e
    if (reversed)
Shinya Kitaoka 120a6e
      for (x = lx; x > 0; x--) *pixout++ = cmap_offset + (255 - *bytein++);
Shinya Kitaoka 120a6e
    else
Shinya Kitaoka 120a6e
      for (x = lx; x > 0; x--) *pixout++ = cmap_offset + *bytein++;
Shinya Kitaoka 120a6e
    rowin += wrapin;
Shinya Kitaoka 120a6e
    rowout += wrapout;
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?E 4
Shinya Kitaoka 120a6e
    /*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?I 20
Toshihiro Shimizu 890ddd
?D 84 static void
Shinya Kitaoka 120a6e
rop_reduce_gr8_cm16(RASTER *rin, RASTER *rout, int x1, int y1, int x2, int y2,
Shinya Kitaoka 120a6e
                    int newx, int newy, int factor)
Toshihiro Shimizu 890ddd
?E 84
Shinya Kitaoka 120a6e
?I 84 static void rop_copy_gr8_cm24(RASTER *rin, RASTER *rout, int x1, int y1,
Shinya Kitaoka 120a6e
                                     int x2, int y2, int newx, int newy)
Shinya Kitaoka 120a6e
?E 84 {
Shinya Kitaoka 120a6e
  ?D 84 printf("rop_reduce_gr8_cm16 not implemented yet\n");
Shinya Kitaoka 120a6e
  ?E 84
Shinya Kitaoka 120a6e
?I 84 UCHAR *rowin, *bytein;
Shinya Kitaoka 120a6e
  ULONG *rowout, *pixout;
Shinya Kitaoka 120a6e
  LPIXEL *penmap, *colmap;
Shinya Kitaoka 120a6e
  int wrapin, wrapout;
Shinya Kitaoka 120a6e
  int x, lx, ly;
Shinya Kitaoka 120a6e
  int i, reversed;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  penmap   = rout->cmap.penbuffer;
Shinya Kitaoka 120a6e
  colmap   = rout->cmap.colbuffer;
Shinya Kitaoka 120a6e
  reversed = penmap[0].r + colmap[0].r != 0;
Shinya Kitaoka 120a6e
  lx       = x2 - x1 + 1;
Shinya Kitaoka 120a6e
  ly       = y2 - y1 + 1;
Shinya Kitaoka 120a6e
  wrapin   = rin->wrap;
Shinya Kitaoka 120a6e
  wrapout  = rout->wrap;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  rowin  = (UCHAR *)rin->buffer + wrapin * y1 + x1;
Shinya Kitaoka 120a6e
  rowout = (ULONG *)rout->buffer + wrapout * newy + newx;
Shinya Kitaoka 120a6e
  while (ly-- > 0) {
Shinya Kitaoka 120a6e
    bytein = rowin;
Shinya Kitaoka 120a6e
    pixout = rowout;
Shinya Kitaoka 120a6e
    if (reversed)
Shinya Kitaoka 120a6e
      for (x = lx; x > 0; x--) *pixout++ = 255 - *bytein++;
Shinya Kitaoka 120a6e
    else
Shinya Kitaoka 120a6e
      for (x = lx; x > 0; x--) *pixout++ = *bytein++;
Shinya Kitaoka 120a6e
    rowin += wrapin;
Shinya Kitaoka 120a6e
    rowout += wrapout;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  ?I 89 if (rout->extra_mask)
Shinya Kitaoka 120a6e
      rop_copy_extra(rin, rout, x1, y1, x2, y2, newx, newy);
Shinya Kitaoka 120a6e
  ?E 89
Toshihiro Shimizu 890ddd
?E 84
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?I 28
Toshihiro Shimizu 890ddd
static void rop_zoom_out_gr8_cm16(RASTER *rin, RASTER *rout,
Toshihiro Shimizu 890ddd
?D 31
Toshihiro Shimizu 890ddd
                                int x1, int y1, int x2, int y2,
Toshihiro Shimizu 890ddd
			        int newx, int newy, int factor)
Toshihiro Shimizu 890ddd
?E 31
Toshihiro Shimizu 890ddd
?I 31
Toshihiro Shimizu 890ddd
                                  int x1, int y1, int x2, int y2,
Toshihiro Shimizu 890ddd
			          int newx, int newy, int abs_zoom_level)
Toshihiro Shimizu 890ddd
?E 31
Toshihiro Shimizu 890ddd
{
Shinya Kitaoka 120a6e
  printf("rop_zoom_out_gr8_cm16 not implemented yet\n");
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
?I 84 static void rop_zoom_out_gr8_cm24(RASTER *rin, RASTER *rout, int x1,
Shinya Kitaoka 120a6e
                                        int y1, int x2, int y2, int newx,
Shinya Kitaoka 120a6e
                                        int newy, int abs_zoom_level) {
Shinya Kitaoka 120a6e
  printf("rop_zoom_out_gr8_cm24 not implemented yet\n");
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?E 84
Toshihiro Shimizu 890ddd
?E 28
Shinya Kitaoka 120a6e
?I 23 static void rop_copy_cm8_cm16(RASTER *rin, RASTER *rout, int x1, int y1,
Shinya Kitaoka 120a6e
                                     int x2, int y2, int newx, int newy) {
Shinya Kitaoka 120a6e
  UCHAR *rowin, *pixin;
Shinya Kitaoka 120a6e
  USHORT *rowout, *pixout;
Shinya Kitaoka 120a6e
  LPIXEL *cmapin, *cmapout;
Shinya Kitaoka 120a6e
  int wrapin, wrapout, cmapin_offset, cmapout_offset, cmap_offset_delta;
Shinya Kitaoka 120a6e
  int x, lx, ly;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  ?D 84 if (!rin->cmap.buffer || !rout->cmap.buffer) {
Shinya Kitaoka 120a6e
    msg(MSG_IE, "rop_copy_cm8_cm16: missing color map");
Shinya Kitaoka 120a6e
    return;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  ?E 84 cmapin            = rin->cmap.buffer;
Shinya Kitaoka 120a6e
  cmapout                 = rout->cmap.buffer;
Shinya Kitaoka 120a6e
  ?D 56 cmapin_offset     = rin->cmap.offset;
Shinya Kitaoka 120a6e
  cmapout_offset          = rout->cmap.offset;
Shinya Kitaoka 120a6e
  ?E 56
Shinya Kitaoka 120a6e
?I 56 cmapin_offset      = rin->cmap.info.offset_mask;
Shinya Kitaoka 120a6e
  cmapout_offset          = rout->cmap.info.offset_mask;
Shinya Kitaoka 120a6e
  ?E 56 cmap_offset_delta = cmapout_offset - cmapin_offset;
Shinya Kitaoka 120a6e
  lx                      = x2 - x1 + 1;
Shinya Kitaoka 120a6e
  ly                      = y2 - y1 + 1;
Shinya Kitaoka 120a6e
  wrapin                  = rin->wrap;
Shinya Kitaoka 120a6e
  wrapout                 = rout->wrap;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  rowin  = (UCHAR *)rin->buffer + wrapin * y1 + x1;
Shinya Kitaoka 120a6e
  rowout = (USHORT *)rout->buffer + wrapout * newy + newx;
Shinya Kitaoka 120a6e
  while (ly-- > 0) {
Shinya Kitaoka 120a6e
    pixin  = rowin;
Shinya Kitaoka 120a6e
    pixout = rowout;
Shinya Kitaoka 120a6e
    for (x = lx; x > 0; x--) *pixout++ = *pixin++ + cmap_offset_delta;
Shinya Kitaoka 120a6e
    rowin += wrapin;
Shinya Kitaoka 120a6e
    rowout += wrapout;
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?E 23
Shinya Kitaoka 120a6e
?D 84 static void rop_reduce_bw_gr8(
Shinya Kitaoka 120a6e
    RASTER *rin,
Shinya Kitaoka 120a6e
    RASTER *rout,
Toshihiro Shimizu 890ddd
?E 84
Shinya Kitaoka 120a6e
?I 84 static void rop_copy_cm8_cm24(
Shinya Kitaoka 120a6e
        RASTER *rin, RASTER *rout,
Toshihiro Shimizu 890ddd
?E 84 int x1, int y1, int x2, int y2,
Shinya Kitaoka 120a6e
?D 84 int newx, int newy,
Shinya Kitaoka 120a6e
        int factor) { printf("rop_reduce_bw_gr8 not implemented yet\n"); }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
    /*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?I 28 static void rop_zoom_out_bw_gr8(RASTER *rin, RASTER *rout,
Toshihiro Shimizu 890ddd
?D 31 int x1, int y1, int x2, int y2, int newx, int newy, int factor)
Toshihiro Shimizu 890ddd
?E 31
Toshihiro Shimizu 890ddd
?I 31 int x1,
Shinya Kitaoka 120a6e
    int y1, int x2, int y2, int newx, int newy, int abs_zoom_level)
Shinya Kitaoka 120a6e
?E 31 {
Shinya Kitaoka 120a6e
  printf("rop_zoom_out_bw_gr8 not implemented yet\n");
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?E 28
Toshihiro Shimizu 890ddd
static void rop_reduce_gr8(RASTER *rin, RASTER *rout,
Toshihiro Shimizu 890ddd
                           int x1, int y1, int x2, int y2,
Toshihiro Shimizu 890ddd
			   int newx, int newy, int factor)
Toshihiro Shimizu 890ddd
?E 84
Toshihiro Shimizu 890ddd
?I 84
Toshihiro Shimizu 890ddd
			      int newx, int newy)
Toshihiro Shimizu 890ddd
?E 84
Toshihiro Shimizu 890ddd
{
Shinya Kitaoka 120a6e
  ?D 84 UCHAR *rowin, *bytein;
Shinya Kitaoka 120a6e
  UCHAR *rowout, *byteout;
Shinya Kitaoka 120a6e
  int tmp;
Shinya Kitaoka 120a6e
  int wrapin, wrapout;
Shinya Kitaoka 120a6e
  int x, y, lx, ly, xlast, ylast, xrest, yrest, i, j;
Shinya Kitaoka 120a6e
  ?E 84
Toshihiro Shimizu 890ddd
?I 84 UCHAR *rowin, *pixin;
Shinya Kitaoka 120a6e
  ULONG *rowout, *pixout;
Shinya Kitaoka 120a6e
  int wrapin, wrapout, cmapin_offset, cmap_offset_delta;
Shinya Kitaoka 120a6e
  int x, lx, ly;
Shinya Kitaoka 120a6e
  ?E 84
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?I 84 cmapin_offset = rin->cmap.info.offset_mask;
Shinya Kitaoka 120a6e
  cmap_offset_delta  = -cmapin_offset;
Shinya Kitaoka 120a6e
  ?E 84 lx           = x2 - x1 + 1;
Shinya Kitaoka 120a6e
  ly                 = y2 - y1 + 1;
Shinya Kitaoka 120a6e
  ?D 61 xrest        = lx % factor;
Shinya Kitaoka 120a6e
  yrest              = ly % factor;
Shinya Kitaoka 120a6e
  ?E 61
Toshihiro Shimizu 890ddd
?I 61
Shinya Kitaoka 120a6e
?D 84 xrest         = lx & (factor - 1);
Shinya Kitaoka 120a6e
  yrest              = ly & (factor - 1);
Shinya Kitaoka 120a6e
  ?E 61
Shinya Kitaoka 120a6e
?D 28 xlast         = x2 - xrest - (factor - 1);
Shinya Kitaoka 120a6e
  ylast              = y2 - yrest - (factor - 1);
Shinya Kitaoka 120a6e
  ?E 28
Shinya Kitaoka 120a6e
?I 28 xlast         = x2 - xrest + 1;
Shinya Kitaoka 120a6e
  ylast              = y2 - yrest + 1;
Shinya Kitaoka 120a6e
  ?E 84
Shinya Kitaoka 120a6e
?E 28 wrapin        = rin->wrap;
Shinya Kitaoka 120a6e
  wrapout            = rout->wrap;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  ?D 84 rowin = (UCHAR *)rin->buffer + wrapin * y1 + x1;
Shinya Kitaoka 120a6e
  rowout      = (UCHAR *)rout->buffer + wrapout * newy + newx;
Shinya Kitaoka 120a6e
  ?D 28 for (y = y1; y <= ylast; y += factor)
Toshihiro Shimizu 890ddd
?E 28
Toshihiro Shimizu 890ddd
?I 28 for (y = y1; y < ylast; y += factor)
Toshihiro Shimizu 890ddd
?E 84
Toshihiro Shimizu 890ddd
?I 84 rowin = (UCHAR *)rin->buffer + wrapin * y1 + x1;
Shinya Kitaoka 120a6e
  rowout     = (ULONG *)rout->buffer + wrapout * newy + newx;
Shinya Kitaoka 120a6e
  while (ly-- > 0)
Toshihiro Shimizu 890ddd
		?E 84
Shinya Kitaoka 120a6e
?E 28 {
Shinya Kitaoka 120a6e
      ?D 84 bytein = rowin;
Shinya Kitaoka 120a6e
      byteout      = rowout;
Shinya Kitaoka 120a6e
      for (x = x1; x < xlast; x += factor) {
Shinya Kitaoka 120a6e
        tmp = 0;
Shinya Kitaoka 120a6e
        for (j = 0; j < factor; j++)
Shinya Kitaoka 120a6e
          for (i   = 0; i < factor; i++) tmp += bytein[i + j * wrapin];
Shinya Kitaoka 120a6e
        *byteout++ = tmp / (factor * factor);
Shinya Kitaoka 120a6e
        bytein += factor;
Shinya Kitaoka 120a6e
      }
Shinya Kitaoka 120a6e
      if (xrest) {
Shinya Kitaoka 120a6e
        tmp = 0;
Shinya Kitaoka 120a6e
        for (j = 0; j < factor; j++)
Shinya Kitaoka 120a6e
          for (i = 0; i < xrest; i++) tmp += bytein[i + j * wrapin];
Shinya Kitaoka 120a6e
        *byteout = tmp / (factor * xrest);
Shinya Kitaoka 120a6e
      }
Shinya Kitaoka 120a6e
      rowin += wrapin * factor;
Shinya Kitaoka 120a6e
      ?E 84
Shinya Kitaoka 120a6e
?I 84 pixin = rowin;
Shinya Kitaoka 120a6e
      pixout = rowout;
Shinya Kitaoka 120a6e
      for (x = lx; x > 0; x--) *pixout++ = *pixin++ + cmap_offset_delta;
Shinya Kitaoka 120a6e
      rowin += wrapin;
Shinya Kitaoka 120a6e
      ?E 84 rowout += wrapout;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
  ?I 89 if (rout->extra_mask)
Shinya Kitaoka 120a6e
      rop_copy_extra(rin, rout, x1, y1, x2, y2, newx, newy);
Shinya Kitaoka 120a6e
  ?E 89
Shinya Kitaoka 120a6e
?D 84 if (yrest) {
Shinya Kitaoka 120a6e
    bytein  = rowin;
Shinya Kitaoka 120a6e
    byteout = rowout;
Shinya Kitaoka 120a6e
    for (x = x1; x < xlast; x += factor) {
Shinya Kitaoka 120a6e
      tmp = 0;
Shinya Kitaoka 120a6e
      for (j = 0; j < yrest; j++)
Shinya Kitaoka 120a6e
        for (i   = 0; i < factor; i++) tmp += bytein[i + j * wrapin];
Shinya Kitaoka 120a6e
      *byteout++ = tmp / (yrest * factor);
Shinya Kitaoka 120a6e
      bytein += factor;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    if (xrest) {
Shinya Kitaoka 120a6e
      tmp = 0;
Shinya Kitaoka 120a6e
      for (j = 0; j < yrest; j++)
Shinya Kitaoka 120a6e
        for (i = 0; i < xrest; i++) tmp += bytein[i + j * wrapin];
Shinya Kitaoka 120a6e
      *byteout = tmp / (yrest * xrest);
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  ?E 84
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
?I 28
Shinya Kitaoka 120a6e
?D 84
Shinya Kitaoka 120a6e
static void rop_zoom_out_gr8(RASTER *rin, RASTER *rout,
Shinya Kitaoka 120a6e
?D 31
Shinya Kitaoka 120a6e
                              int x1, int y1, int x2, int y2,
Shinya Kitaoka 120a6e
			      int newx, int newy, int factor)
Shinya Kitaoka 120a6e
?E 31
Shinya Kitaoka 120a6e
?I 31
Shinya Kitaoka 120a6e
                             int x1, int y1, int x2, int y2,
Shinya Kitaoka 120a6e
			     int newx, int newy, int abs_zoom_level)
Shinya Kitaoka 120a6e
?E 84
Shinya Kitaoka 120a6e
?I 84
Shinya Kitaoka 120a6e
static void rop_zoom_out_bw_gr8(RASTER *rin, RASTER *rout,
Shinya Kitaoka 120a6e
                                int x1, int y1, int x2, int y2,
Shinya Kitaoka 120a6e
			        int newx, int newy, int abs_zoom_level)
Shinya Kitaoka 120a6e
?E 84
Shinya Kitaoka 120a6e
?E 31
Shinya Kitaoka 120a6e
{
Shinya Kitaoka 120a6e
  ?D 84 printf("rop_zoom_out_gr8 not implemented yet\n");
Shinya Kitaoka 120a6e
  ?E 84
Shinya Kitaoka 120a6e
?I 84 printf("rop_zoom_out_bw_gr8 not implemented yet\n");
Shinya Kitaoka 120a6e
  ?E 84
Shinya Kitaoka 120a6e
}
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
?E 28
Shinya Kitaoka 120a6e
?D 84 static void rop_reduce_cm16(RASTER *rin, RASTER *rout, int x1, int y1,
Shinya Kitaoka 120a6e
                                   int x2, int y2, int newx, int newy,
Shinya Kitaoka 120a6e
                                   int factor)
Shinya Kitaoka 120a6e
?E 84
Shinya Kitaoka 120a6e
?I 84 static void rop_zoom_out_gr8(RASTER *rin, RASTER *rout, int x1, int y1,
Shinya Kitaoka 120a6e
                                    int x2, int y2, int newx, int newy,
Shinya Kitaoka 120a6e
                                    int abs_zoom_level)
Shinya Kitaoka 120a6e
?E 84 {
Shinya Kitaoka 120a6e
  ?D 84 printf("rop_reduce_cm16 not implemented yet\n");
Shinya Kitaoka 120a6e
  ?E 84
Shinya Kitaoka 120a6e
?I 84 printf("rop_zoom_out_gr8 not implemented yet\n");
Shinya Kitaoka 120a6e
  ?E 84
Toshihiro Shimizu 890ddd
}
Shinya Kitaoka 120a6e

Toshihiro Shimizu 890ddd
/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
?I 28
Shinya Kitaoka 120a6e
static void rop_zoom_out_cm16(RASTER *rin, RASTER *rout,
Shinya Kitaoka 120a6e
?D 31
Shinya Kitaoka 120a6e
                            int x1, int y1, int x2, int y2,
Shinya Kitaoka 120a6e
			    int newx, int newy, int factor)
Shinya Kitaoka 120a6e
?E 31
Shinya Kitaoka 120a6e
?I 31
Shinya Kitaoka 120a6e
                              int x1, int y1, int x2, int y2,
Shinya Kitaoka 120a6e
			      int newx, int newy, int abs_zoom_level)
Shinya Kitaoka 120a6e
?E 31
Toshihiro Shimizu 890ddd
{
Shinya Kitaoka 120a6e
  printf("rop_zoom_out_cm16 not implemented yet\n");
Shinya Kitaoka 120a6e
}
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
?E 28
Shinya Kitaoka 120a6e
?D 84 static void rop_reduce_rgbm(RASTER *rin, RASTER *rout, int x1, int y1,
Shinya Kitaoka 120a6e
                                   int x2, int y2, int newx, int newy,
Shinya Kitaoka 120a6e
                                   int factor)
Shinya Kitaoka 120a6e
?E 84
Shinya Kitaoka 120a6e
?I 84 static void rop_zoom_out_cm24(RASTER *rin, RASTER *rout, int x1, int y1,
Shinya Kitaoka 120a6e
                                     int x2, int y2, int newx, int newy,
Shinya Kitaoka 120a6e
                                     int abs_zoom_level)
Shinya Kitaoka 120a6e
?E 84 {
Shinya Kitaoka 120a6e
  ?D 84 printf("rop_reduce_rgbm not implemented yet\n");
Shinya Kitaoka 120a6e
  ?E 84
Shinya Kitaoka 120a6e
?I 84 printf("rop_zoom_out_cm24 not implemented yet\n");
Shinya Kitaoka 120a6e
  ?E 84
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
?I 28
Shinya Kitaoka 120a6e
static void rop_zoom_out_rgbm(RASTER *rin, RASTER *rout,
Shinya Kitaoka 120a6e
?D 31
Shinya Kitaoka 120a6e
                            int x1, int y1, int x2, int y2,
Shinya Kitaoka 120a6e
			    int newx, int newy, int factor)
Shinya Kitaoka 120a6e
?E 31
Shinya Kitaoka 120a6e
?I 31
Shinya Kitaoka 120a6e
                              int x1, int y1, int x2, int y2,
Shinya Kitaoka 120a6e
			      int newx, int newy, int abs_zoom_level)
Shinya Kitaoka 120a6e
?E 31
Shinya Kitaoka 120a6e
{
Shinya Kitaoka 120a6e
  ?D 31 printf("rop_zoom_out_rgbm not implemented yet\n");
Shinya Kitaoka 120a6e
  ?E 31
Shinya Kitaoka 120a6e
?I 31 LPIXEL *rowin, *pixin, *in, valin;
Shinya Kitaoka 120a6e
  LPIXEL *rowout, *pixout, valout;
Shinya Kitaoka 120a6e
  int tmp_r, tmp_g, tmp_b, tmp_m;
Shinya Kitaoka 120a6e
  int wrapin, wrapout;
Shinya Kitaoka 120a6e
  int x, y, lx, ly, xlast, ylast, xrest, yrest, i, j;
Shinya Kitaoka 120a6e
  int factor, fac_fac_2_bits;
Shinya Kitaoka 120a6e
  int fac_fac, yrest_fac, fac_xrest, yrest_xrest;
Shinya Kitaoka 120a6e
  int fac_fac_2, yrest_fac_2, fac_xrest_2, yrest_xrest_2;
Shinya Kitaoka 120a6e
  int fac_fac_4;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  lx             = x2 - x1 + 1;
Shinya Kitaoka 120a6e
  ly             = y2 - y1 + 1;
Shinya Kitaoka 120a6e
  factor         = 1 << abs_zoom_level;
Shinya Kitaoka 120a6e
  ?D 61 xrest    = lx % factor;
Shinya Kitaoka 120a6e
  yrest          = ly % factor;
Shinya Kitaoka 120a6e
  ?E 61
Shinya Kitaoka 120a6e
?I 61 xrest     = lx & (factor - 1);
Shinya Kitaoka 120a6e
  yrest          = ly & (factor - 1);
Shinya Kitaoka 120a6e
  ?E 61 xlast    = x2 - xrest + 1;
Shinya Kitaoka 120a6e
  ylast          = y2 - yrest + 1;
Shinya Kitaoka 120a6e
  fac_fac        = factor * factor;
Shinya Kitaoka 120a6e
  fac_fac_2      = fac_fac >> 1;
Shinya Kitaoka 120a6e
  fac_fac_4      = fac_fac >> 2;
Shinya Kitaoka 120a6e
  fac_fac_2_bits = 2 * abs_zoom_level - 1;
Shinya Kitaoka 120a6e
  yrest_fac      = yrest * factor;
Shinya Kitaoka 120a6e
  yrest_fac_2    = yrest_fac >> 1;
Shinya Kitaoka 120a6e
  fac_xrest      = factor * xrest;
Shinya Kitaoka 120a6e
  fac_xrest_2    = fac_xrest >> 1;
Shinya Kitaoka 120a6e
  yrest_xrest    = yrest * xrest;
Shinya Kitaoka 120a6e
  yrest_xrest_2  = yrest_xrest >> 1;
Shinya Kitaoka 120a6e
  wrapin         = rin->wrap;
Shinya Kitaoka 120a6e
  wrapout        = rout->wrap;
Shinya Kitaoka 120a6e
  valout.m       = 0xff;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  rowin  = (LPIXEL *)rin->buffer + wrapin * y1 + x1;
Shinya Kitaoka 120a6e
  rowout = (LPIXEL *)rout->buffer + wrapout * newy + newx;
Shinya Kitaoka 120a6e
  for (y = y1; y < ylast; y += factor) {
Shinya Kitaoka 120a6e
    pixin  = rowin;
Shinya Kitaoka 120a6e
    pixout = rowout;
Shinya Kitaoka 120a6e
    for (x = x1; x < xlast; x += factor) {
Shinya Kitaoka 120a6e
      tmp_r = tmp_g = tmp_b = tmp_m = 0;
Shinya Kitaoka 120a6e
      in                            = pixin;
Shinya Kitaoka 120a6e
      for (j = 0; j < factor; j += 2) {
Shinya Kitaoka 120a6e
        for (i = 0; i < factor; i += 2) {
Shinya Kitaoka 120a6e
          valin = *in;
Shinya Kitaoka 120a6e
          tmp_r += valin.r;
Shinya Kitaoka 120a6e
          tmp_g += valin.g;
Shinya Kitaoka 120a6e
          tmp_b += valin.b;
Shinya Kitaoka 120a6e
          tmp_m += valin.m;
Shinya Kitaoka 120a6e
          ?D 38 in += factor;
Shinya Kitaoka 120a6e
          ?E 38
Shinya Kitaoka 120a6e
?I 38 in += wrapin;
Shinya Kitaoka 120a6e
          ?E 38 in++;
Shinya Kitaoka 120a6e
          valin = *in;
Shinya Kitaoka 120a6e
          tmp_r += valin.r;
Shinya Kitaoka 120a6e
          tmp_g += valin.g;
Shinya Kitaoka 120a6e
          tmp_b += valin.b;
Shinya Kitaoka 120a6e
          tmp_m += valin.m;
Shinya Kitaoka 120a6e
          ?D 38 in -= factor;
Shinya Kitaoka 120a6e
          ?E 38
Shinya Kitaoka 120a6e
?I 38 in -= wrapin;
Shinya Kitaoka 120a6e
          ?E 38 in++;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
        in += 2 * wrapin - factor;
Shinya Kitaoka 120a6e
      }
Shinya Kitaoka 120a6e
      valout.r  = (tmp_r + fac_fac_4) >> fac_fac_2_bits;
Shinya Kitaoka 120a6e
      valout.g  = (tmp_g + fac_fac_4) >> fac_fac_2_bits;
Shinya Kitaoka 120a6e
      valout.b  = (tmp_b + fac_fac_4) >> fac_fac_2_bits;
Shinya Kitaoka 120a6e
      valout.m  = (tmp_m + fac_fac_4) >> fac_fac_2_bits;
Shinya Kitaoka 120a6e
      *pixout++ = valout;
Shinya Kitaoka 120a6e
      pixin += factor;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    if (xrest) {
Shinya Kitaoka 120a6e
      tmp_r = tmp_g = tmp_b = tmp_m = 0;
Shinya Kitaoka 120a6e
      for (j = 0; j < factor; j++)
Shinya Kitaoka 120a6e
        for (i = 0; i < xrest; i++) {
Shinya Kitaoka 120a6e
          valin = pixin[i + j * wrapin];
Shinya Kitaoka 120a6e
          tmp_r += valin.r;
Shinya Kitaoka 120a6e
          tmp_g += valin.g;
Shinya Kitaoka 120a6e
          tmp_b += valin.b;
Shinya Kitaoka 120a6e
          tmp_m += valin.m;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
      valout.r = (tmp_r + fac_xrest_2) / fac_xrest;
Shinya Kitaoka 120a6e
      valout.g = (tmp_g + fac_xrest_2) / fac_xrest;
Shinya Kitaoka 120a6e
      valout.b = (tmp_b + fac_xrest_2) / fac_xrest;
Shinya Kitaoka 120a6e
      valout.m = (tmp_m + fac_xrest_2) / fac_xrest;
Shinya Kitaoka 120a6e
      *pixout  = valout;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    rowin += wrapin * factor;
Shinya Kitaoka 120a6e
    rowout += wrapout;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  if (yrest) {
Shinya Kitaoka 120a6e
    pixin  = rowin;
Shinya Kitaoka 120a6e
    pixout = rowout;
Shinya Kitaoka 120a6e
    for (x = x1; x < xlast; x += factor) {
Shinya Kitaoka 120a6e
      tmp_r = tmp_g = tmp_b = tmp_m = 0;
Shinya Kitaoka 120a6e
      for (j = 0; j < yrest; j++)
Shinya Kitaoka 120a6e
        for (i = 0; i < factor; i++) {
Shinya Kitaoka 120a6e
          valin = pixin[i + j * wrapin];
Shinya Kitaoka 120a6e
          tmp_r += valin.r;
Shinya Kitaoka 120a6e
          tmp_g += valin.g;
Shinya Kitaoka 120a6e
          tmp_b += valin.b;
Shinya Kitaoka 120a6e
          tmp_m += valin.m;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
      valout.r  = (tmp_r + yrest_fac_2) / yrest_fac;
Shinya Kitaoka 120a6e
      valout.g  = (tmp_g + yrest_fac_2) / yrest_fac;
Shinya Kitaoka 120a6e
      valout.b  = (tmp_b + yrest_fac_2) / yrest_fac;
Shinya Kitaoka 120a6e
      valout.m  = (tmp_m + yrest_fac_2) / yrest_fac;
Shinya Kitaoka 120a6e
      *pixout++ = valout;
Shinya Kitaoka 120a6e
      pixin += factor;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    if (xrest) {
Shinya Kitaoka 120a6e
      tmp_r = tmp_g = tmp_b = tmp_m = 0;
Shinya Kitaoka 120a6e
      for (j = 0; j < yrest; j++)
Shinya Kitaoka 120a6e
        for (i = 0; i < xrest; i++) {
Shinya Kitaoka 120a6e
          valin = pixin[i + j * wrapin];
Shinya Kitaoka 120a6e
          tmp_r += valin.r;
Shinya Kitaoka 120a6e
          tmp_g += valin.g;
Shinya Kitaoka 120a6e
          tmp_b += valin.b;
Shinya Kitaoka 120a6e
          tmp_m += valin.m;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
      valout.r = (tmp_r + yrest_xrest_2) / yrest_xrest;
Shinya Kitaoka 120a6e
      valout.g = (tmp_g + yrest_xrest_2) / yrest_xrest;
Shinya Kitaoka 120a6e
      valout.b = (tmp_b + yrest_xrest_2) / yrest_xrest;
Shinya Kitaoka 120a6e
      valout.m = (tmp_m + yrest_xrest_2) / yrest_xrest;
Shinya Kitaoka 120a6e
      *pixout  = valout;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  ?E 31
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
?I 46 static void rop_zoom_out_rgbx(RASTER *rin, RASTER *rout, int x1, int y1,
Shinya Kitaoka 120a6e
                                    int x2, int y2, int newx, int newy,
Shinya Kitaoka 120a6e
                                    int abs_zoom_level) {
Shinya Kitaoka 120a6e
  LPIXEL *rowin, *pixin, *in, valin;
Shinya Kitaoka 120a6e
  LPIXEL *rowout, *pixout, valout;
Shinya Kitaoka 120a6e
  int tmp_r, tmp_g, tmp_b;
Shinya Kitaoka 120a6e
  int wrapin, wrapout;
Shinya Kitaoka 120a6e
  int x, y, lx, ly, xlast, ylast, xrest, yrest, i, j;
Shinya Kitaoka 120a6e
  int factor, fac_fac_2_bits;
Shinya Kitaoka 120a6e
  int fac_fac, yrest_fac, fac_xrest, yrest_xrest;
Shinya Kitaoka 120a6e
  int fac_fac_2, yrest_fac_2, fac_xrest_2, yrest_xrest_2;
Shinya Kitaoka 120a6e
  int fac_fac_4;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  lx             = x2 - x1 + 1;
Shinya Kitaoka 120a6e
  ly             = y2 - y1 + 1;
Shinya Kitaoka 120a6e
  factor         = 1 << abs_zoom_level;
Shinya Kitaoka 120a6e
  ?D 61 xrest    = lx % factor;
Shinya Kitaoka 120a6e
  yrest          = ly % factor;
Shinya Kitaoka 120a6e
  ?E 61
Shinya Kitaoka 120a6e
?I 61 xrest     = lx & (factor - 1);
Shinya Kitaoka 120a6e
  yrest          = ly & (factor - 1);
Shinya Kitaoka 120a6e
  ?E 61 xlast    = x2 - xrest + 1;
Shinya Kitaoka 120a6e
  ylast          = y2 - yrest + 1;
Shinya Kitaoka 120a6e
  fac_fac        = factor * factor;
Shinya Kitaoka 120a6e
  fac_fac_2      = fac_fac >> 1;
Shinya Kitaoka 120a6e
  fac_fac_4      = fac_fac >> 2;
Shinya Kitaoka 120a6e
  fac_fac_2_bits = 2 * abs_zoom_level - 1;
Shinya Kitaoka 120a6e
  yrest_fac      = yrest * factor;
Shinya Kitaoka 120a6e
  yrest_fac_2    = yrest_fac >> 1;
Shinya Kitaoka 120a6e
  fac_xrest      = factor * xrest;
Shinya Kitaoka 120a6e
  fac_xrest_2    = fac_xrest >> 1;
Shinya Kitaoka 120a6e
  yrest_xrest    = yrest * xrest;
Shinya Kitaoka 120a6e
  yrest_xrest_2  = yrest_xrest >> 1;
Shinya Kitaoka 120a6e
  wrapin         = rin->wrap;
Shinya Kitaoka 120a6e
  wrapout        = rout->wrap;
Shinya Kitaoka 120a6e
  valout.m       = 0xff;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  rowin  = (LPIXEL *)rin->buffer + wrapin * y1 + x1;
Shinya Kitaoka 120a6e
  rowout = (LPIXEL *)rout->buffer + wrapout * newy + newx;
Shinya Kitaoka 120a6e
  for (y = y1; y < ylast; y += factor) {
Shinya Kitaoka 120a6e
    pixin  = rowin;
Shinya Kitaoka 120a6e
    pixout = rowout;
Shinya Kitaoka 120a6e
    for (x = x1; x < xlast; x += factor) {
Shinya Kitaoka 120a6e
      tmp_r = tmp_g = tmp_b = 0;
Shinya Kitaoka 120a6e
      in                    = pixin;
Shinya Kitaoka 120a6e
      for (j = 0; j < factor; j += 2) {
Shinya Kitaoka 120a6e
        for (i = 0; i < factor; i += 2) {
Shinya Kitaoka 120a6e
          valin = *in;
Shinya Kitaoka 120a6e
          tmp_r += valin.r;
Shinya Kitaoka 120a6e
          tmp_g += valin.g;
Shinya Kitaoka 120a6e
          tmp_b += valin.b;
Shinya Kitaoka 120a6e
          in += wrapin;
Shinya Kitaoka 120a6e
          in++;
Shinya Kitaoka 120a6e
          valin = *in;
Shinya Kitaoka 120a6e
          tmp_r += valin.r;
Shinya Kitaoka 120a6e
          tmp_g += valin.g;
Shinya Kitaoka 120a6e
          tmp_b += valin.b;
Shinya Kitaoka 120a6e
          in -= wrapin;
Shinya Kitaoka 120a6e
          in++;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
        in += 2 * wrapin - factor;
Shinya Kitaoka 120a6e
      }
Shinya Kitaoka 120a6e
      valout.r  = (tmp_r + fac_fac_4) >> fac_fac_2_bits;
Shinya Kitaoka 120a6e
      valout.g  = (tmp_g + fac_fac_4) >> fac_fac_2_bits;
Shinya Kitaoka 120a6e
      valout.b  = (tmp_b + fac_fac_4) >> fac_fac_2_bits;
Shinya Kitaoka 120a6e
      *pixout++ = valout;
Shinya Kitaoka 120a6e
      pixin += factor;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    if (xrest) {
Shinya Kitaoka 120a6e
      tmp_r = tmp_g = tmp_b = 0;
Shinya Kitaoka 120a6e
      for (j = 0; j < factor; j++)
Shinya Kitaoka 120a6e
        for (i = 0; i < xrest; i++) {
Shinya Kitaoka 120a6e
          valin = pixin[i + j * wrapin];
Shinya Kitaoka 120a6e
          tmp_r += valin.r;
Shinya Kitaoka 120a6e
          tmp_g += valin.g;
Shinya Kitaoka 120a6e
          tmp_b += valin.b;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
      valout.r = (tmp_r + fac_xrest_2) / fac_xrest;
Shinya Kitaoka 120a6e
      valout.g = (tmp_g + fac_xrest_2) / fac_xrest;
Shinya Kitaoka 120a6e
      valout.b = (tmp_b + fac_xrest_2) / fac_xrest;
Shinya Kitaoka 120a6e
      *pixout  = valout;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    rowin += wrapin * factor;
Shinya Kitaoka 120a6e
    rowout += wrapout;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  if (yrest) {
Shinya Kitaoka 120a6e
    pixin  = rowin;
Shinya Kitaoka 120a6e
    pixout = rowout;
Shinya Kitaoka 120a6e
    for (x = x1; x < xlast; x += factor) {
Shinya Kitaoka 120a6e
      tmp_r = tmp_g = tmp_b = 0;
Shinya Kitaoka 120a6e
      for (j = 0; j < yrest; j++)
Shinya Kitaoka 120a6e
        for (i = 0; i < factor; i++) {
Shinya Kitaoka 120a6e
          valin = pixin[i + j * wrapin];
Shinya Kitaoka 120a6e
          tmp_r += valin.r;
Shinya Kitaoka 120a6e
          tmp_g += valin.g;
Shinya Kitaoka 120a6e
          tmp_b += valin.b;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
      valout.r  = (tmp_r + yrest_fac_2) / yrest_fac;
Shinya Kitaoka 120a6e
      valout.g  = (tmp_g + yrest_fac_2) / yrest_fac;
Shinya Kitaoka 120a6e
      valout.b  = (tmp_b + yrest_fac_2) / yrest_fac;
Shinya Kitaoka 120a6e
      *pixout++ = valout;
Shinya Kitaoka 120a6e
      pixin += factor;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    if (xrest) {
Shinya Kitaoka 120a6e
      tmp_r = tmp_g = tmp_b = 0;
Shinya Kitaoka 120a6e
      for (j = 0; j < yrest; j++)
Shinya Kitaoka 120a6e
        for (i = 0; i < xrest; i++) {
Shinya Kitaoka 120a6e
          valin = pixin[i + j * wrapin];
Shinya Kitaoka 120a6e
          tmp_r += valin.r;
Shinya Kitaoka 120a6e
          tmp_g += valin.g;
Shinya Kitaoka 120a6e
          tmp_b += valin.b;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
      valout.r = (tmp_r + yrest_xrest_2) / yrest_xrest;
Shinya Kitaoka 120a6e
      valout.g = (tmp_g + yrest_xrest_2) / yrest_xrest;
Shinya Kitaoka 120a6e
      valout.b = (tmp_b + yrest_xrest_2) / yrest_xrest;
Shinya Kitaoka 120a6e
      *pixout  = valout;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
}
Shinya Kitaoka 120a6e
?I 95
Shinya Kitaoka 120a6e
    /*---------------------------------------------------------------------------*/
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
    static void
Shinya Kitaoka 120a6e
    rop_zoom_out_rgbx64_rgbx(RASTER *rin, RASTER *rout, int x1, int y1, int x2,
Shinya Kitaoka 120a6e
                             int y2, int newx, int newy, int abs_zoom_level) {
Shinya Kitaoka 120a6e
  SPIXEL *rowin, *pixin, *in, valin;
Shinya Kitaoka 120a6e
  LPIXEL *rowout, *pixout, valout;
Shinya Kitaoka 120a6e
  int tmp_r, tmp_g, tmp_b;
Shinya Kitaoka 120a6e
  int wrapin, wrapout;
Shinya Kitaoka 120a6e
  int x, y, lx, ly, xlast, ylast, xrest, yrest, i, j;
Shinya Kitaoka 120a6e
  int factor, fac_fac_2_bits;
Shinya Kitaoka 120a6e
  int fac_fac, yrest_fac, fac_xrest, yrest_xrest;
Shinya Kitaoka 120a6e
  int fac_fac_2, yrest_fac_2, fac_xrest_2, yrest_xrest_2;
Shinya Kitaoka 120a6e
  int fac_fac_4;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  lx             = x2 - x1 + 1;
Shinya Kitaoka 120a6e
  ly             = y2 - y1 + 1;
Shinya Kitaoka 120a6e
  factor         = 1 << abs_zoom_level;
Shinya Kitaoka 120a6e
  xrest          = lx & (factor - 1);
Shinya Kitaoka 120a6e
  yrest          = ly & (factor - 1);
Shinya Kitaoka 120a6e
  xlast          = x2 - xrest + 1;
Shinya Kitaoka 120a6e
  ylast          = y2 - yrest + 1;
Shinya Kitaoka 120a6e
  fac_fac        = factor * factor;
Shinya Kitaoka 120a6e
  fac_fac_2      = fac_fac >> 1;
Shinya Kitaoka 120a6e
  fac_fac_4      = fac_fac >> 2;
Shinya Kitaoka 120a6e
  fac_fac_2_bits = 2 * abs_zoom_level - 1;
Shinya Kitaoka 120a6e
  yrest_fac      = yrest * factor;
Shinya Kitaoka 120a6e
  yrest_fac_2    = yrest_fac >> 1;
Shinya Kitaoka 120a6e
  fac_xrest      = factor * xrest;
Shinya Kitaoka 120a6e
  fac_xrest_2    = fac_xrest >> 1;
Shinya Kitaoka 120a6e
  yrest_xrest    = yrest * xrest;
Shinya Kitaoka 120a6e
  yrest_xrest_2  = yrest_xrest >> 1;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  wrapin   = rin->wrap;
Shinya Kitaoka 120a6e
  wrapout  = rout->wrap;
Shinya Kitaoka 120a6e
  valout.m = 0xff;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  rowin  = (SPIXEL *)rin->buffer + wrapin * y1 + x1;
Shinya Kitaoka 120a6e
  rowout = (LPIXEL *)rout->buffer + wrapout * newy + newx;
Shinya Kitaoka 120a6e
  for (y = y1; y < ylast; y += factor) {
Shinya Kitaoka 120a6e
    pixin  = rowin;
Shinya Kitaoka 120a6e
    pixout = rowout;
Shinya Kitaoka 120a6e
    for (x = x1; x < xlast; x += factor) {
Shinya Kitaoka 120a6e
      tmp_r = tmp_g = tmp_b = 0;
Shinya Kitaoka 120a6e
      in                    = pixin;
Shinya Kitaoka 120a6e
      for (j = 0; j < factor; j += 2) {
Shinya Kitaoka 120a6e
        for (i = 0; i < factor; i += 2) {
Shinya Kitaoka 120a6e
          valin = *in;
Shinya Kitaoka 120a6e
          tmp_r += valin.r;
Shinya Kitaoka 120a6e
          tmp_g += valin.g;
Shinya Kitaoka 120a6e
          tmp_b += valin.b;
Shinya Kitaoka 120a6e
          in += wrapin;
Shinya Kitaoka 120a6e
          in++;
Shinya Kitaoka 120a6e
          valin = *in;
Shinya Kitaoka 120a6e
          tmp_r += valin.r;
Shinya Kitaoka 120a6e
          tmp_g += valin.g;
Shinya Kitaoka 120a6e
          tmp_b += valin.b;
Shinya Kitaoka 120a6e
          in -= wrapin;
Shinya Kitaoka 120a6e
          in++;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
        in += 2 * wrapin - factor;
Shinya Kitaoka 120a6e
      }
Shinya Kitaoka 120a6e
      valout.r  = PIX_BYTE_FROM_USHORT((tmp_r + fac_fac_4) >> fac_fac_2_bits);
Shinya Kitaoka 120a6e
      valout.g  = PIX_BYTE_FROM_USHORT((tmp_g + fac_fac_4) >> fac_fac_2_bits);
Shinya Kitaoka 120a6e
      valout.b  = PIX_BYTE_FROM_USHORT((tmp_b + fac_fac_4) >> fac_fac_2_bits);
Shinya Kitaoka 120a6e
      *pixout++ = valout;
Shinya Kitaoka 120a6e
      pixin += factor;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    if (xrest) {
Shinya Kitaoka 120a6e
      tmp_r = tmp_g = tmp_b = 0;
Shinya Kitaoka 120a6e
      for (j = 0; j < factor; j++)
Shinya Kitaoka 120a6e
        for (i = 0; i < xrest; i++) {
Shinya Kitaoka 120a6e
          valin = pixin[i + j * wrapin];
Shinya Kitaoka 120a6e
          tmp_r += valin.r;
Shinya Kitaoka 120a6e
          tmp_g += valin.g;
Shinya Kitaoka 120a6e
          tmp_b += valin.b;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
      valout.r = PIX_BYTE_FROM_USHORT((tmp_r + fac_xrest_2) / fac_xrest);
Shinya Kitaoka 120a6e
      valout.g = PIX_BYTE_FROM_USHORT((tmp_g + fac_xrest_2) / fac_xrest);
Shinya Kitaoka 120a6e
      valout.b = PIX_BYTE_FROM_USHORT((tmp_b + fac_xrest_2) / fac_xrest);
Shinya Kitaoka 120a6e
      *pixout  = valout;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    rowin += wrapin * factor;
Shinya Kitaoka 120a6e
    rowout += wrapout;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  if (yrest) {
Shinya Kitaoka 120a6e
    pixin  = rowin;
Shinya Kitaoka 120a6e
    pixout = rowout;
Shinya Kitaoka 120a6e
    for (x = x1; x < xlast; x += factor) {
Shinya Kitaoka 120a6e
      tmp_r = tmp_g = tmp_b = 0;
Shinya Kitaoka 120a6e
      for (j = 0; j < yrest; j++)
Shinya Kitaoka 120a6e
        for (i = 0; i < factor; i++) {
Shinya Kitaoka 120a6e
          valin = pixin[i + j * wrapin];
Shinya Kitaoka 120a6e
          tmp_r += valin.r;
Shinya Kitaoka 120a6e
          tmp_g += valin.g;
Shinya Kitaoka 120a6e
          tmp_b += valin.b;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
      valout.r  = PIX_BYTE_FROM_USHORT((tmp_r + yrest_fac_2) / yrest_fac);
Shinya Kitaoka 120a6e
      valout.g  = PIX_BYTE_FROM_USHORT((tmp_g + yrest_fac_2) / yrest_fac);
Shinya Kitaoka 120a6e
      valout.b  = PIX_BYTE_FROM_USHORT((tmp_b + yrest_fac_2) / yrest_fac);
Shinya Kitaoka 120a6e
      *pixout++ = valout;
Shinya Kitaoka 120a6e
      pixin += factor;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    if (xrest) {
Shinya Kitaoka 120a6e
      tmp_r = tmp_g = tmp_b = 0;
Shinya Kitaoka 120a6e
      for (j = 0; j < yrest; j++)
Shinya Kitaoka 120a6e
        for (i = 0; i < xrest; i++) {
Shinya Kitaoka 120a6e
          valin = pixin[i + j * wrapin];
Shinya Kitaoka 120a6e
          tmp_r += valin.r;
Shinya Kitaoka 120a6e
          tmp_g += valin.g;
Shinya Kitaoka 120a6e
          tmp_b += valin.b;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
      valout.r = PIX_BYTE_FROM_USHORT((tmp_r + yrest_xrest_2) / yrest_xrest);
Shinya Kitaoka 120a6e
      valout.g = PIX_BYTE_FROM_USHORT((tmp_g + yrest_xrest_2) / yrest_xrest);
Shinya Kitaoka 120a6e
      valout.b = PIX_BYTE_FROM_USHORT((tmp_b + yrest_xrest_2) / yrest_xrest);
Shinya Kitaoka 120a6e
      *pixout  = valout;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
}
Shinya Kitaoka 120a6e
/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
static void rop_zoom_out_rgbm64_rgbm(RASTER *rin, RASTER *rout, int x1, int y1,
Shinya Kitaoka 120a6e
                                     int x2, int y2, int newx, int newy,
Shinya Kitaoka 120a6e
                                     int abs_zoom_level) {
Shinya Kitaoka 120a6e
  SPIXEL *rowin, *pixin, *in, valin;
Shinya Kitaoka 120a6e
  LPIXEL *rowout, *pixout, valout;
Shinya Kitaoka 120a6e
  int tmp_r, tmp_g, tmp_b, tmp_m;
Shinya Kitaoka 120a6e
  int wrapin, wrapout;
Shinya Kitaoka 120a6e
  int x, y, lx, ly, xlast, ylast, xrest, yrest, i, j;
Shinya Kitaoka 120a6e
  int factor, fac_fac_2_bits;
Shinya Kitaoka 120a6e
  int fac_fac, yrest_fac, fac_xrest, yrest_xrest;
Shinya Kitaoka 120a6e
  int fac_fac_2, yrest_fac_2, fac_xrest_2, yrest_xrest_2;
Shinya Kitaoka 120a6e
  int fac_fac_4;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  lx             = x2 - x1 + 1;
Shinya Kitaoka 120a6e
  ly             = y2 - y1 + 1;
Shinya Kitaoka 120a6e
  factor         = 1 << abs_zoom_level;
Shinya Kitaoka 120a6e
  xrest          = lx & (factor - 1);
Shinya Kitaoka 120a6e
  yrest          = ly & (factor - 1);
Shinya Kitaoka 120a6e
  xlast          = x2 - xrest + 1;
Shinya Kitaoka 120a6e
  ylast          = y2 - yrest + 1;
Shinya Kitaoka 120a6e
  fac_fac        = factor * factor;
Shinya Kitaoka 120a6e
  fac_fac_2      = fac_fac >> 1;
Shinya Kitaoka 120a6e
  fac_fac_4      = fac_fac >> 2;
Shinya Kitaoka 120a6e
  fac_fac_2_bits = 2 * abs_zoom_level - 1;
Shinya Kitaoka 120a6e
  yrest_fac      = yrest * factor;
Shinya Kitaoka 120a6e
  yrest_fac_2    = yrest_fac >> 1;
Shinya Kitaoka 120a6e
  fac_xrest      = factor * xrest;
Shinya Kitaoka 120a6e
  fac_xrest_2    = fac_xrest >> 1;
Shinya Kitaoka 120a6e
  yrest_xrest    = yrest * xrest;
Shinya Kitaoka 120a6e
  yrest_xrest_2  = yrest_xrest >> 1;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  wrapin     = rin->wrap;
Shinya Kitaoka 120a6e
  wrapout    = rout->wrap;
Shinya Kitaoka 120a6e
  ?E 95
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
?I 95 rowin = (SPIXEL *)rin->buffer + wrapin * y1 + x1;
Shinya Kitaoka 120a6e
  rowout     = (LPIXEL *)rout->buffer + wrapout * newy + newx;
Shinya Kitaoka 120a6e
  for (y = y1; y < ylast; y += factor) {
Shinya Kitaoka 120a6e
    pixin  = rowin;
Shinya Kitaoka 120a6e
    pixout = rowout;
Shinya Kitaoka 120a6e
    for (x = x1; x < xlast; x += factor) {
Shinya Kitaoka 120a6e
      tmp_r = tmp_g = tmp_b = tmp_m = 0;
Shinya Kitaoka 120a6e
      in                            = pixin;
Shinya Kitaoka 120a6e
      for (j = 0; j < factor; j += 2) {
Shinya Kitaoka 120a6e
        for (i = 0; i < factor; i += 2) {
Shinya Kitaoka 120a6e
          valin = *in;
Shinya Kitaoka 120a6e
          tmp_r += valin.r;
Shinya Kitaoka 120a6e
          tmp_g += valin.g;
Shinya Kitaoka 120a6e
          tmp_b += valin.b;
Shinya Kitaoka 120a6e
          tmp_m += valin.m;
Shinya Kitaoka 120a6e
          in += wrapin;
Shinya Kitaoka 120a6e
          in++;
Shinya Kitaoka 120a6e
          valin = *in;
Shinya Kitaoka 120a6e
          tmp_r += valin.r;
Shinya Kitaoka 120a6e
          tmp_g += valin.g;
Shinya Kitaoka 120a6e
          tmp_b += valin.b;
Shinya Kitaoka 120a6e
          tmp_m += valin.m;
Shinya Kitaoka 120a6e
          in -= wrapin;
Shinya Kitaoka 120a6e
          in++;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
        in += 2 * wrapin - factor;
Shinya Kitaoka 120a6e
      }
Shinya Kitaoka 120a6e
      valout.r  = PIX_BYTE_FROM_USHORT((tmp_r + fac_fac_4) >> fac_fac_2_bits);
Shinya Kitaoka 120a6e
      valout.g  = PIX_BYTE_FROM_USHORT((tmp_g + fac_fac_4) >> fac_fac_2_bits);
Shinya Kitaoka 120a6e
      valout.b  = PIX_BYTE_FROM_USHORT((tmp_b + fac_fac_4) >> fac_fac_2_bits);
Shinya Kitaoka 120a6e
      valout.m  = PIX_BYTE_FROM_USHORT((tmp_m + fac_fac_4) >> fac_fac_2_bits);
Shinya Kitaoka 120a6e
      *pixout++ = valout;
Shinya Kitaoka 120a6e
      pixin += factor;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    if (xrest) {
Shinya Kitaoka 120a6e
      tmp_r = tmp_g = tmp_b = tmp_m = 0;
Shinya Kitaoka 120a6e
      for (j = 0; j < factor; j++)
Shinya Kitaoka 120a6e
        for (i = 0; i < xrest; i++) {
Shinya Kitaoka 120a6e
          valin = pixin[i + j * wrapin];
Shinya Kitaoka 120a6e
          tmp_r += valin.r;
Shinya Kitaoka 120a6e
          tmp_g += valin.g;
Shinya Kitaoka 120a6e
          tmp_b += valin.b;
Shinya Kitaoka 120a6e
          tmp_m += valin.m;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
      valout.r = PIX_BYTE_FROM_USHORT((tmp_r + fac_xrest_2) / fac_xrest);
Shinya Kitaoka 120a6e
      valout.g = PIX_BYTE_FROM_USHORT((tmp_g + fac_xrest_2) / fac_xrest);
Shinya Kitaoka 120a6e
      valout.b = PIX_BYTE_FROM_USHORT((tmp_b + fac_xrest_2) / fac_xrest);
Shinya Kitaoka 120a6e
      valout.m = PIX_BYTE_FROM_USHORT((tmp_m + fac_xrest_2) / fac_xrest);
Shinya Kitaoka 120a6e
      *pixout  = valout;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    rowin += wrapin * factor;
Shinya Kitaoka 120a6e
    rowout += wrapout;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  if (yrest) {
Shinya Kitaoka 120a6e
    pixin  = rowin;
Shinya Kitaoka 120a6e
    pixout = rowout;
Shinya Kitaoka 120a6e
    for (x = x1; x < xlast; x += factor) {
Shinya Kitaoka 120a6e
      tmp_r = tmp_g = tmp_b = tmp_m = 0;
Shinya Kitaoka 120a6e
      for (j = 0; j < yrest; j++)
Shinya Kitaoka 120a6e
        for (i = 0; i < factor; i++) {
Shinya Kitaoka 120a6e
          valin = pixin[i + j * wrapin];
Shinya Kitaoka 120a6e
          tmp_r += valin.r;
Shinya Kitaoka 120a6e
          tmp_g += valin.g;
Shinya Kitaoka 120a6e
          tmp_b += valin.b;
Shinya Kitaoka 120a6e
          tmp_m += valin.m;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
      valout.r  = PIX_BYTE_FROM_USHORT((tmp_r + yrest_fac_2) / yrest_fac);
Shinya Kitaoka 120a6e
      valout.g  = PIX_BYTE_FROM_USHORT((tmp_g + yrest_fac_2) / yrest_fac);
Shinya Kitaoka 120a6e
      valout.b  = PIX_BYTE_FROM_USHORT((tmp_b + yrest_fac_2) / yrest_fac);
Shinya Kitaoka 120a6e
      valout.m  = PIX_BYTE_FROM_USHORT((tmp_m + yrest_fac_2) / yrest_fac);
Shinya Kitaoka 120a6e
      *pixout++ = valout;
Shinya Kitaoka 120a6e
      pixin += factor;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    if (xrest) {
Shinya Kitaoka 120a6e
      tmp_r = tmp_g = tmp_b = tmp_m = 0;
Shinya Kitaoka 120a6e
      for (j = 0; j < yrest; j++)
Shinya Kitaoka 120a6e
        for (i = 0; i < xrest; i++) {
Shinya Kitaoka 120a6e
          valin = pixin[i + j * wrapin];
Shinya Kitaoka 120a6e
          tmp_r += valin.r;
Shinya Kitaoka 120a6e
          tmp_g += valin.g;
Shinya Kitaoka 120a6e
          tmp_b += valin.b;
Shinya Kitaoka 120a6e
          tmp_m += valin.m;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
      valout.r = PIX_BYTE_FROM_USHORT((tmp_r + yrest_xrest_2) / yrest_xrest);
Shinya Kitaoka 120a6e
      valout.g = PIX_BYTE_FROM_USHORT((tmp_g + yrest_xrest_2) / yrest_xrest);
Shinya Kitaoka 120a6e
      valout.b = PIX_BYTE_FROM_USHORT((tmp_b + yrest_xrest_2) / yrest_xrest);
Shinya Kitaoka 120a6e
      valout.m = PIX_BYTE_FROM_USHORT((tmp_m + yrest_xrest_2) / yrest_xrest);
Shinya Kitaoka 120a6e
      *pixout  = valout;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
}
Shinya Kitaoka 120a6e
?E 95
Shinya Kitaoka 120a6e
    /*---------------------------------------------------------------------------*/
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
?I 54 static void
Shinya Kitaoka 120a6e
rop_copy_bw_rgb16(RASTER *rin, RASTER *rout, int x1, int y1, int x2, int y2,
Shinya Kitaoka 120a6e
                  int newx, int newy) {
Shinya Kitaoka 120a6e
  UCHAR *rowin, *bytein;
Shinya Kitaoka 120a6e
  USHORT *rowout, *pixout;
Shinya Kitaoka 120a6e
  USHORT rgb_0, rgb_1;
Shinya Kitaoka 120a6e
  int wrapin, wrapout, bit, bit_offs, startbit;
Shinya Kitaoka 120a6e
  int x, lx, ly;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  if (rin->type == RAS_WB) {
Shinya Kitaoka 120a6e
    rgb_0 = 0xffff;
Shinya Kitaoka 120a6e
    rgb_1 = 0x0000;
Shinya Kitaoka 120a6e
  } else {
Shinya Kitaoka 120a6e
    rgb_0 = 0x0000;
Shinya Kitaoka 120a6e
    rgb_1 = 0xffff;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  lx       = x2 - x1 + 1;
Shinya Kitaoka 120a6e
  ly       = y2 - y1 + 1;
Shinya Kitaoka 120a6e
  wrapin   = (rin->wrap + 7) >> 3;
Shinya Kitaoka 120a6e
  bit_offs = rin->bit_offs;
Shinya Kitaoka 120a6e
  wrapout  = rout->wrap;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  rowin    = (UCHAR *)rin->buffer + wrapin * y1 + ((x1 + bit_offs) >> 3);
Shinya Kitaoka 120a6e
  startbit = 7 - ((x1 + bit_offs) & 7);
Shinya Kitaoka 120a6e
  rowout   = (USHORT *)rout->buffer + wrapout * newy + newx;
Shinya Kitaoka 120a6e
  while (ly-- > 0) {
Shinya Kitaoka 120a6e
    bytein = rowin;
Shinya Kitaoka 120a6e
    bit    = startbit;
Shinya Kitaoka 120a6e
    pixout = rowout;
Shinya Kitaoka 120a6e
    for (x = lx; x > 0; x--) {
Shinya Kitaoka 120a6e
      *pixout++ = ((*bytein >> bit) & 1) ? rgb_1 : rgb_0;
Shinya Kitaoka 120a6e
      if (bit == 0) {
Shinya Kitaoka 120a6e
        bytein++;
Shinya Kitaoka 120a6e
        bit = 7;
Shinya Kitaoka 120a6e
      } else
Shinya Kitaoka 120a6e
        bit--;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    rowin += wrapin;
Shinya Kitaoka 120a6e
    rowout += wrapout;
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
?I 61 static void rop_zoom_out_bw_rgb16(RASTER *rin, RASTER *rout, int x1,
Shinya Kitaoka 120a6e
                                        int y1, int x2, int y2, int newx,
Shinya Kitaoka 120a6e
                                        int newy, int abs_zoom_level) {
Shinya Kitaoka 120a6e
  UCHAR *rowin, *bytein, *in;
Shinya Kitaoka 120a6e
  USHORT *rowout, *pixout;
Shinya Kitaoka 120a6e
  int val_0, val_1, tmp;
Shinya Kitaoka 120a6e
  int wrapin, wrapout, bitin, bit, bit_offs, startbit;
Shinya Kitaoka 120a6e
  int x, y, lx, ly, xlast, ylast, xrest, yrest, i, j;
Shinya Kitaoka 120a6e
  int factor, fac_fac_2_bits;
Shinya Kitaoka 120a6e
  int fac_fac, yrest_fac, fac_xrest, yrest_xrest;
Shinya Kitaoka 120a6e
  int fac_fac_2, yrest_fac_2, fac_xrest_2, yrest_xrest_2;
Shinya Kitaoka 120a6e
  int fac_fac_4;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  if (rin->type == RAS_WB) {
Shinya Kitaoka 120a6e
    val_0 = 0xff;
Shinya Kitaoka 120a6e
    val_1 = 0x00;
Shinya Kitaoka 120a6e
  } else {
Shinya Kitaoka 120a6e
    val_0 = 0x00;
Shinya Kitaoka 120a6e
    val_1 = 0xff;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  lx             = x2 - x1 + 1;
Shinya Kitaoka 120a6e
  ly             = y2 - y1 + 1;
Shinya Kitaoka 120a6e
  factor         = 1 << abs_zoom_level;
Shinya Kitaoka 120a6e
  xrest          = lx & (factor - 1);
Shinya Kitaoka 120a6e
  yrest          = ly & (factor - 1);
Shinya Kitaoka 120a6e
  xlast          = x2 - xrest + 1;
Shinya Kitaoka 120a6e
  ylast          = y2 - yrest + 1;
Shinya Kitaoka 120a6e
  fac_fac        = factor * factor;
Shinya Kitaoka 120a6e
  fac_fac_2      = fac_fac >> 1;
Shinya Kitaoka 120a6e
  fac_fac_4      = fac_fac >> 2;
Shinya Kitaoka 120a6e
  fac_fac_2_bits = 2 * abs_zoom_level - 1;
Shinya Kitaoka 120a6e
  yrest_fac      = yrest * factor;
Shinya Kitaoka 120a6e
  yrest_fac_2    = yrest_fac >> 1;
Shinya Kitaoka 120a6e
  fac_xrest      = factor * xrest;
Shinya Kitaoka 120a6e
  fac_xrest_2    = fac_xrest >> 1;
Shinya Kitaoka 120a6e
  yrest_xrest    = yrest * xrest;
Shinya Kitaoka 120a6e
  yrest_xrest_2  = yrest_xrest >> 1;
Shinya Kitaoka 120a6e
  wrapin         = (rin->wrap + 7) >> 3;
Shinya Kitaoka 120a6e
  bit_offs       = rin->bit_offs;
Shinya Kitaoka 120a6e
  wrapout        = rout->wrap;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  rowin    = (UCHAR *)rin->buffer + wrapin * y1 + ((x1 + bit_offs) >> 3);
Shinya Kitaoka 120a6e
  startbit = 7 - ((x1 + bit_offs) & 7);
Shinya Kitaoka 120a6e
  rowout   = (USHORT *)rout->buffer + wrapout * newy + newx;
Shinya Kitaoka 120a6e
  for (y = y1; y < ylast; y += factor) {
Shinya Kitaoka 120a6e
    bytein = rowin;
Shinya Kitaoka 120a6e
    bitin  = startbit;
Shinya Kitaoka 120a6e
    pixout = rowout;
Shinya Kitaoka 120a6e
    for (x = x1; x < xlast; x += factor) {
Shinya Kitaoka 120a6e
      tmp = 0;
Shinya Kitaoka 120a6e
      in  = bytein;
Shinya Kitaoka 120a6e
      bit = bitin;
Shinya Kitaoka 120a6e
      for (j = 0; j < factor; j += 2) {
Shinya Kitaoka 120a6e
        for (i = 0; i < factor; i += 2) {
Shinya Kitaoka 120a6e
          tmp += ((*in >> bit) & 1);
Shinya Kitaoka 120a6e
          in += wrapin;
Shinya Kitaoka 120a6e
          if (bit == 0) {
Shinya Kitaoka 120a6e
            in++;
Shinya Kitaoka 120a6e
            bit = 7;
Shinya Kitaoka 120a6e
          } else
Shinya Kitaoka 120a6e
            bit--;
Shinya Kitaoka 120a6e
          tmp += ((*in >> bit) & 1);
Shinya Kitaoka 120a6e
          in -= wrapin;
Shinya Kitaoka 120a6e
          if (bit == 0) {
Shinya Kitaoka 120a6e
            in++;
Shinya Kitaoka 120a6e
            bit = 7;
Shinya Kitaoka 120a6e
          } else
Shinya Kitaoka 120a6e
            bit--;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
        in += 2 * wrapin;
Shinya Kitaoka 120a6e
        bit += factor;
Shinya Kitaoka 120a6e
        while (bit > 7) {
Shinya Kitaoka 120a6e
          in--;
Shinya Kitaoka 120a6e
          bit -= 8;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
      }
Shinya Kitaoka 120a6e
      tmp       = tmp * val_1 + (fac_fac_2 - tmp) * val_0;
Shinya Kitaoka 120a6e
      tmp       = (tmp + fac_fac_4) >> fac_fac_2_bits;
Shinya Kitaoka 120a6e
      *pixout++ = PIX_RGB16_FROM_BYTES(tmp, tmp, tmp);
Shinya Kitaoka 120a6e
      bitin -= factor;
Shinya Kitaoka 120a6e
      while (bitin < 0) {
Shinya Kitaoka 120a6e
        bytein++;
Shinya Kitaoka 120a6e
        bitin += 8;
Shinya Kitaoka 120a6e
      }
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    if (xrest) {
Shinya Kitaoka 120a6e
      tmp = 0;
Shinya Kitaoka 120a6e
      for (j = 0; j < factor; j++)
Shinya Kitaoka 120a6e
        for (i = 0; i < xrest; i++) {
Shinya Kitaoka 120a6e
          tmp += GET_BIT(i, j, bytein, wrapin, 7 - bitin);
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
      tmp     = tmp * val_1 + (fac_xrest - tmp) * val_0;
Shinya Kitaoka 120a6e
      tmp     = (tmp + fac_xrest_2) / fac_xrest;
Shinya Kitaoka 120a6e
      *pixout = PIX_RGB16_FROM_BYTES(tmp, tmp, tmp);
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    rowin += wrapin * factor;
Shinya Kitaoka 120a6e
    rowout += wrapout;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  if (yrest) {
Shinya Kitaoka 120a6e
    bytein = rowin;
Shinya Kitaoka 120a6e
    bitin  = startbit;
Shinya Kitaoka 120a6e
    pixout = rowout;
Shinya Kitaoka 120a6e
    for (x = x1; x < xlast; x += factor) {
Shinya Kitaoka 120a6e
      tmp = 0;
Shinya Kitaoka 120a6e
      for (j = 0; j < yrest; j++)
Shinya Kitaoka 120a6e
        for (i = 0; i < factor; i++) {
Shinya Kitaoka 120a6e
          tmp += GET_BIT(i, j, bytein, wrapin, 7 - bitin);
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
      tmp       = tmp * val_1 + (yrest_fac - tmp) * val_0;
Shinya Kitaoka 120a6e
      tmp       = (tmp + yrest_fac_2) / yrest_fac;
Shinya Kitaoka 120a6e
      *pixout++ = PIX_RGB16_FROM_BYTES(tmp, tmp, tmp);
Shinya Kitaoka 120a6e
      bitin -= factor;
Shinya Kitaoka 120a6e
      while (bitin < 0) {
Shinya Kitaoka 120a6e
        bytein++;
Shinya Kitaoka 120a6e
        bitin += 8;
Shinya Kitaoka 120a6e
      }
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    if (xrest) {
Shinya Kitaoka 120a6e
      tmp = 0;
Shinya Kitaoka 120a6e
      for (j = 0; j < yrest; j++)
Shinya Kitaoka 120a6e
        for (i = 0; i < xrest; i++) {
Shinya Kitaoka 120a6e
          tmp += GET_BIT(i, j, bytein, wrapin, 7 - bitin);
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
      tmp     = tmp * val_1 + (yrest_xrest - tmp) * val_0;
Shinya Kitaoka 120a6e
      tmp     = (tmp + yrest_xrest_2) / yrest_xrest;
Shinya Kitaoka 120a6e
      *pixout = PIX_RGB16_FROM_BYTES(tmp, tmp, tmp);
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
?E 61 static void rop_copy_gr8_rgb16(RASTER *rin, RASTER *rout, int x1, int y1,
Shinya Kitaoka 120a6e
                                     int x2, int y2, int newx, int newy) {
Shinya Kitaoka 120a6e
  UCHAR *rowin, *pixin, val;
Shinya Kitaoka 120a6e
  USHORT *rowout, *pixout;
Shinya Kitaoka 120a6e
  int wrapin, wrapout;
Shinya Kitaoka 120a6e
  int x, y, lx, ly;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  lx      = x2 - x1 + 1;
Shinya Kitaoka 120a6e
  ly      = y2 - y1 + 1;
Shinya Kitaoka 120a6e
  wrapin  = rin->wrap;
Shinya Kitaoka 120a6e
  wrapout = rout->wrap;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  rowin  = (UCHAR *)rin->buffer + wrapin * y1 + x1;
Shinya Kitaoka 120a6e
  rowout = (USHORT *)rout->buffer + wrapout * newy + newx;
Shinya Kitaoka 120a6e
  while (ly-- > 0) {
Shinya Kitaoka 120a6e
    pixin  = rowin;
Shinya Kitaoka 120a6e
    pixout = rowout;
Shinya Kitaoka 120a6e
    for (x = 0; x < lx; x++) {
Shinya Kitaoka 120a6e
      val             = *pixin++;
Shinya Kitaoka 120a6e
      ?D 60 *pixout++ = ROP_RGB16_FROM_BYTES(val, val, val);
Shinya Kitaoka 120a6e
      ?E 60
Shinya Kitaoka 120a6e
?I 60 *pixout++      = PIX_RGB16_FROM_BYTES(val, val, val);
Shinya Kitaoka 120a6e
      ?E 60
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    rowin += wrapin;
Shinya Kitaoka 120a6e
    rowout += wrapout;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
}
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
static void rop_zoom_out_gr8_rgb16(RASTER *rin, RASTER *rout, int x1, int y1,
Shinya Kitaoka 120a6e
                                   int x2, int y2, int newx, int newy,
Shinya Kitaoka 120a6e
                                   int abs_zoom_level) {
Shinya Kitaoka 120a6e
  UCHAR *rowin, *pixin, *in;
Shinya Kitaoka 120a6e
  USHORT *rowout, *pixout;
Shinya Kitaoka 120a6e
  int tmp;
Shinya Kitaoka 120a6e
  int wrapin, wrapout;
Shinya Kitaoka 120a6e
  int x, y, lx, ly, xlast, ylast, xrest, yrest, i, j;
Shinya Kitaoka 120a6e
  int factor, fac_fac_2_bits;
Shinya Kitaoka 120a6e
  int fac_fac, yrest_fac, fac_xrest, yrest_xrest;
Shinya Kitaoka 120a6e
  int fac_fac_2, yrest_fac_2, fac_xrest_2, yrest_xrest_2;
Shinya Kitaoka 120a6e
  int fac_fac_4;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  lx             = x2 - x1 + 1;
Shinya Kitaoka 120a6e
  ly             = y2 - y1 + 1;
Shinya Kitaoka 120a6e
  factor         = 1 << abs_zoom_level;
Shinya Kitaoka 120a6e
  ?D 61 xrest    = lx % factor;
Shinya Kitaoka 120a6e
  yrest          = ly % factor;
Shinya Kitaoka 120a6e
  ?E 61
Shinya Kitaoka 120a6e
?I 61 xrest     = lx & (factor - 1);
Shinya Kitaoka 120a6e
  yrest          = ly & (factor - 1);
Shinya Kitaoka 120a6e
  ?E 61 xlast    = x2 - xrest + 1;
Shinya Kitaoka 120a6e
  ylast          = y2 - yrest + 1;
Shinya Kitaoka 120a6e
  fac_fac        = factor * factor;
Shinya Kitaoka 120a6e
  fac_fac_2      = fac_fac >> 1;
Shinya Kitaoka 120a6e
  fac_fac_4      = fac_fac >> 2;
Shinya Kitaoka 120a6e
  fac_fac_2_bits = 2 * abs_zoom_level - 1;
Shinya Kitaoka 120a6e
  yrest_fac      = yrest * factor;
Shinya Kitaoka 120a6e
  yrest_fac_2    = yrest_fac >> 1;
Shinya Kitaoka 120a6e
  fac_xrest      = factor * xrest;
Shinya Kitaoka 120a6e
  fac_xrest_2    = fac_xrest >> 1;
Shinya Kitaoka 120a6e
  yrest_xrest    = yrest * xrest;
Shinya Kitaoka 120a6e
  yrest_xrest_2  = yrest_xrest >> 1;
Shinya Kitaoka 120a6e
  wrapin         = rin->wrap;
Shinya Kitaoka 120a6e
  wrapout        = rout->wrap;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  rowin  = (UCHAR *)rin->buffer + wrapin * y1 + x1;
Shinya Kitaoka 120a6e
  rowout = (USHORT *)rout->buffer + wrapout * newy + newx;
Shinya Kitaoka 120a6e
  for (y = y1; y < ylast; y += factor) {
Shinya Kitaoka 120a6e
    pixin  = rowin;
Shinya Kitaoka 120a6e
    pixout = rowout;
Shinya Kitaoka 120a6e
    for (x = x1; x < xlast; x += factor) {
Shinya Kitaoka 120a6e
      tmp = 0;
Shinya Kitaoka 120a6e
      in  = pixin;
Shinya Kitaoka 120a6e
      for (j = 0; j < factor; j += 2) {
Shinya Kitaoka 120a6e
        for (i = 0; i < factor; i += 2) {
Shinya Kitaoka 120a6e
          tmp += *in;
Shinya Kitaoka 120a6e
          in += wrapin;
Shinya Kitaoka 120a6e
          in++;
Shinya Kitaoka 120a6e
          tmp += *in;
Shinya Kitaoka 120a6e
          in -= wrapin;
Shinya Kitaoka 120a6e
          in++;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
        in += 2 * wrapin - factor;
Shinya Kitaoka 120a6e
      }
Shinya Kitaoka 120a6e
      tmp             = (tmp + fac_fac_4) >> fac_fac_2_bits;
Shinya Kitaoka 120a6e
      ?D 60 *pixout++ = ROP_RGB16_FROM_BYTES(tmp, tmp, tmp);
Shinya Kitaoka 120a6e
      ?E 60
Shinya Kitaoka 120a6e
?I 60 *pixout++      = PIX_RGB16_FROM_BYTES(tmp, tmp, tmp);
Shinya Kitaoka 120a6e
      ?E 60 pixin += factor;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    if (xrest) {
Shinya Kitaoka 120a6e
      tmp = 0;
Shinya Kitaoka 120a6e
      for (j = 0; j < factor; j++)
Shinya Kitaoka 120a6e
        for (i = 0; i < xrest; i++) {
Shinya Kitaoka 120a6e
          tmp += pixin[i + j * wrapin];
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
      tmp           = (tmp + fac_xrest_2) / fac_xrest;
Shinya Kitaoka 120a6e
      ?D 60 *pixout = ROP_RGB16_FROM_BYTES(tmp, tmp, tmp);
Shinya Kitaoka 120a6e
      ?E 60
Shinya Kitaoka 120a6e
?I 60 *pixout      = PIX_RGB16_FROM_BYTES(tmp, tmp, tmp);
Shinya Kitaoka 120a6e
      ?E 60
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    rowin += wrapin * factor;
Shinya Kitaoka 120a6e
    rowout += wrapout;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  if (yrest) {
Shinya Kitaoka 120a6e
    pixin  = rowin;
Shinya Kitaoka 120a6e
    pixout = rowout;
Shinya Kitaoka 120a6e
    for (x = x1; x < xlast; x += factor) {
Shinya Kitaoka 120a6e
      tmp = 0;
Shinya Kitaoka 120a6e
      for (j = 0; j < yrest; j++)
Shinya Kitaoka 120a6e
        for (i = 0; i < factor; i++) {
Shinya Kitaoka 120a6e
          tmp += pixin[i + j * wrapin];
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
      tmp             = (tmp + yrest_fac_2) / yrest_fac;
Shinya Kitaoka 120a6e
      ?D 60 *pixout++ = ROP_RGB16_FROM_BYTES(tmp, tmp, tmp);
Shinya Kitaoka 120a6e
      ?E 60
Shinya Kitaoka 120a6e
?I 60 *pixout++      = PIX_RGB16_FROM_BYTES(tmp, tmp, tmp);
Shinya Kitaoka 120a6e
      ?E 60 pixin += factor;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    if (xrest) {
Shinya Kitaoka 120a6e
      tmp = 0;
Shinya Kitaoka 120a6e
      for (j = 0; j < yrest; j++)
Shinya Kitaoka 120a6e
        for (i = 0; i < xrest; i++) {
Shinya Kitaoka 120a6e
          tmp += pixin[i + j * wrapin];
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
      tmp           = (tmp + yrest_xrest_2) / yrest_xrest;
Shinya Kitaoka 120a6e
      ?D 60 *pixout = ROP_RGB16_FROM_BYTES(tmp, tmp, tmp);
Shinya Kitaoka 120a6e
      ?E 60
Shinya Kitaoka 120a6e
?I 60 *pixout      = PIX_RGB16_FROM_BYTES(tmp, tmp, tmp);
Shinya Kitaoka 120a6e
      ?E 60
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?E 54
Shinya Kitaoka 120a6e
?I 52 static void rop_copy_cm16_rgb16(RASTER *rin, RASTER *rout, int x1,
Shinya Kitaoka 120a6e
                                       int y1, int x2, int y2, int newx,
Shinya Kitaoka 120a6e
                                       int newy) {
Shinya Kitaoka 120a6e
  USHORT *rowin, *pixin;
Shinya Kitaoka 120a6e
  LPIXEL *cmap, val;
Shinya Kitaoka 120a6e
  USHORT *rowout, *pixout;
Shinya Kitaoka 120a6e
  int wrapin, wrapout;
Shinya Kitaoka 120a6e
  int x, y, lx, ly;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  ?D 56 cmap = rin->cmap.buffer - rin->cmap.offset;
Shinya Kitaoka 120a6e
  ?E 56
Shinya Kitaoka 120a6e
?I 56 cmap  = rin->cmap.buffer - rin->cmap.info.offset_mask;
Shinya Kitaoka 120a6e
  ?E 56 lx   = x2 - x1 + 1;
Shinya Kitaoka 120a6e
  ly         = y2 - y1 + 1;
Shinya Kitaoka 120a6e
  wrapin     = rin->wrap;
Shinya Kitaoka 120a6e
  wrapout    = rout->wrap;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  rowin  = (USHORT *)rin->buffer + wrapin * y1 + x1;
Shinya Kitaoka 120a6e
  rowout = (USHORT *)rout->buffer + wrapout * newy + newx;
Shinya Kitaoka 120a6e
  while (ly-- > 0) {
Shinya Kitaoka 120a6e
    pixin  = rowin;
Shinya Kitaoka 120a6e
    pixout = rowout;
Shinya Kitaoka 120a6e
    for (x = 0; x < lx; x++) {
Shinya Kitaoka 120a6e
      val             = cmap[*pixin++];
Shinya Kitaoka 120a6e
      ?D 54 *pixout++ = BYTES_TO_RGB16(val.r, val.g, val.b);
Shinya Kitaoka 120a6e
      ?E 54
Toshihiro Shimizu 890ddd
?I 54
Shinya Kitaoka 120a6e
?D 60 *pixout++      = ROP_RGB16_FROM_BYTES(val.r, val.g, val.b);
Shinya Kitaoka 120a6e
      ?E 60
Shinya Kitaoka 120a6e
?I 60 *pixout++      = PIX_RGB16_FROM_BYTES(val.r, val.g, val.b);
Shinya Kitaoka 120a6e
      ?E 60
Toshihiro Shimizu 890ddd
?E 54
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    rowin += wrapin;
Shinya Kitaoka 120a6e
    rowout += wrapout;
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
?I 96 static void rop_copy_cm16_xrgb1555(RASTER *rin, RASTER *rout, int x1,
Shinya Kitaoka 120a6e
                                         int y1, int x2, int y2, int newx,
Shinya Kitaoka 120a6e
                                         int newy) {
Shinya Kitaoka 120a6e
  USHORT *rowin, *pixin;
Shinya Kitaoka 120a6e
  LPIXEL *cmap, val;
Shinya Kitaoka 120a6e
  USHORT *rowout, *pixout;
Shinya Kitaoka 120a6e
  int wrapin, wrapout;
Shinya Kitaoka 120a6e
  int x, y, lx, ly;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  cmap    = rin->cmap.buffer - rin->cmap.info.offset_mask;
Shinya Kitaoka 120a6e
  lx      = x2 - x1 + 1;
Shinya Kitaoka 120a6e
  ly      = y2 - y1 + 1;
Shinya Kitaoka 120a6e
  wrapin  = rin->wrap;
Shinya Kitaoka 120a6e
  wrapout = rout->wrap;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  rowin  = (USHORT *)rin->buffer + wrapin * y1 + x1;
Shinya Kitaoka 120a6e
  rowout = (USHORT *)rout->buffer + wrapout * newy + newx;
Shinya Kitaoka 120a6e
  while (ly-- > 0) {
Shinya Kitaoka 120a6e
    pixin  = rowin;
Shinya Kitaoka 120a6e
    pixout = rowout;
Shinya Kitaoka 120a6e
    for (x = 0; x < lx; x++) {
Shinya Kitaoka 120a6e
      val       = cmap[*pixin++];
Shinya Kitaoka 120a6e
      *pixout++ = PIX_XRGB1555_FROM_BYTES(val.r, val.g, val.b);
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    rowin += wrapin;
Shinya Kitaoka 120a6e
    rowout += wrapout;
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?E 96
Shinya Kitaoka 120a6e
?I 84 static void rop_copy_cm24_rgb16(RASTER *rin, RASTER *rout, int x1,
Shinya Kitaoka 120a6e
                                       int y1, int x2, int y2, int newx,
Shinya Kitaoka 120a6e
                                       int newy) {
Shinya Kitaoka 120a6e
  ULONG *rowin, *pixin, win;
Shinya Kitaoka 120a6e
  LPIXEL *penmap, *colmap, val;
Shinya Kitaoka 120a6e
  USHORT *rowout, *pixout;
Shinya Kitaoka 120a6e
  int wrapin, wrapout;
Shinya Kitaoka 120a6e
  int x, y, lx, ly;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  penmap  = rin->cmap.penbuffer;
Shinya Kitaoka 120a6e
  colmap  = rin->cmap.colbuffer;
Shinya Kitaoka 120a6e
  lx      = x2 - x1 + 1;
Shinya Kitaoka 120a6e
  ly      = y2 - y1 + 1;
Shinya Kitaoka 120a6e
  wrapin  = rin->wrap;
Shinya Kitaoka 120a6e
  wrapout = rout->wrap;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  rowin  = (ULONG *)rin->buffer + wrapin * y1 + x1;
Shinya Kitaoka 120a6e
  rowout = (USHORT *)rout->buffer + wrapout * newy + newx;
Shinya Kitaoka 120a6e
  ?I 89
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
?E 89 while (ly-- > 0) {
Shinya Kitaoka 120a6e
    pixin  = rowin;
Shinya Kitaoka 120a6e
    pixout = rowout;
Shinya Kitaoka 120a6e
    for (x = 0; x < lx; x++) {
Shinya Kitaoka 120a6e
      win = *pixin++;
Shinya Kitaoka 120a6e
      MAP24(win, penmap, colmap, val)
Shinya Kitaoka 120a6e
      *pixout++ = PIX_RGB16_FROM_BYTES(val.r, val.g, val.b);
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    rowin += wrapin;
Shinya Kitaoka 120a6e
    rowout += wrapout;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  ?I 89 if (rout->extra_mask)
Shinya Kitaoka 120a6e
      rop_copy_extra(rin, rout, x1, y1, x2, y2, newx, newy);
Shinya Kitaoka 120a6e
  ?E 89
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
?I 96 static void rop_copy_cm24_xrgb1555(RASTER *rin, RASTER *rout, int x1,
Shinya Kitaoka 120a6e
                                         int y1, int x2, int y2, int newx,
Shinya Kitaoka 120a6e
                                         int newy) {
Shinya Kitaoka 120a6e
  ULONG *rowin, *pixin, win;
Shinya Kitaoka 120a6e
  LPIXEL *penmap, *colmap, val;
Shinya Kitaoka 120a6e
  USHORT *rowout, *pixout;
Shinya Kitaoka 120a6e
  int wrapin, wrapout;
Shinya Kitaoka 120a6e
  int x, y, lx, ly;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  penmap  = rin->cmap.penbuffer;
Shinya Kitaoka 120a6e
  colmap  = rin->cmap.colbuffer;
Shinya Kitaoka 120a6e
  lx      = x2 - x1 + 1;
Shinya Kitaoka 120a6e
  ly      = y2 - y1 + 1;
Shinya Kitaoka 120a6e
  wrapin  = rin->wrap;
Shinya Kitaoka 120a6e
  wrapout = rout->wrap;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  rowin  = (ULONG *)rin->buffer + wrapin * y1 + x1;
Shinya Kitaoka 120a6e
  rowout = (USHORT *)rout->buffer + wrapout * newy + newx;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  while (ly-- > 0) {
Shinya Kitaoka 120a6e
    pixin  = rowin;
Shinya Kitaoka 120a6e
    pixout = rowout;
Shinya Kitaoka 120a6e
    for (x = 0; x < lx; x++) {
Shinya Kitaoka 120a6e
      win = *pixin++;
Shinya Kitaoka 120a6e
      MAP24(win, penmap, colmap, val)
Shinya Kitaoka 120a6e
      *pixout++ = PIX_XRGB1555_FROM_BYTES(val.r, val.g, val.b);
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    rowin += wrapin;
Shinya Kitaoka 120a6e
    rowout += wrapout;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  if (rout->extra_mask) rop_copy_extra(rin, rout, x1, y1, x2, y2, newx, newy);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?E 96
Shinya Kitaoka 120a6e
?E 84 static void rop_zoom_out_cm16_rgb16(RASTER *rin, RASTER *rout, int x1,
Shinya Kitaoka 120a6e
                                           int y1, int x2, int y2, int newx,
Shinya Kitaoka 120a6e
                                           int newy, int abs_zoom_level) {
Shinya Kitaoka 120a6e
  USHORT *rowin, *pixin, *in;
Shinya Kitaoka 120a6e
  LPIXEL *cmap, valin;
Shinya Kitaoka 120a6e
  USHORT *rowout, *pixout;
Shinya Kitaoka 120a6e
  int tmp_r, tmp_g, tmp_b;
Shinya Kitaoka 120a6e
  int wrapin, wrapout;
Shinya Kitaoka 120a6e
  int x, y, lx, ly, xlast, ylast, xrest, yrest, i, j;
Shinya Kitaoka 120a6e
  int factor, fac_fac_2_bits;
Shinya Kitaoka 120a6e
  int fac_fac, yrest_fac, fac_xrest, yrest_xrest;
Shinya Kitaoka 120a6e
  int fac_fac_2, yrest_fac_2, fac_xrest_2, yrest_xrest_2;
Shinya Kitaoka 120a6e
  int fac_fac_4;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  ?D 56 cmap     = rin->cmap.buffer - rin->cmap.offset;
Shinya Kitaoka 120a6e
  ?E 56
Shinya Kitaoka 120a6e
?I 56 cmap      = rin->cmap.buffer - rin->cmap.info.offset_mask;
Shinya Kitaoka 120a6e
  ?E 56 lx       = x2 - x1 + 1;
Shinya Kitaoka 120a6e
  ly             = y2 - y1 + 1;
Shinya Kitaoka 120a6e
  factor         = 1 << abs_zoom_level;
Shinya Kitaoka 120a6e
  ?D 61 xrest    = lx % factor;
Shinya Kitaoka 120a6e
  yrest          = ly % factor;
Shinya Kitaoka 120a6e
  ?E 61
Shinya Kitaoka 120a6e
?I 61 xrest     = lx & (factor - 1);
Shinya Kitaoka 120a6e
  yrest          = ly & (factor - 1);
Shinya Kitaoka 120a6e
  ?E 61 xlast    = x2 - xrest + 1;
Shinya Kitaoka 120a6e
  ylast          = y2 - yrest + 1;
Shinya Kitaoka 120a6e
  fac_fac        = factor * factor;
Shinya Kitaoka 120a6e
  fac_fac_2      = fac_fac >> 1;
Shinya Kitaoka 120a6e
  fac_fac_4      = fac_fac >> 2;
Shinya Kitaoka 120a6e
  fac_fac_2_bits = 2 * abs_zoom_level - 1;
Shinya Kitaoka 120a6e
  yrest_fac      = yrest * factor;
Shinya Kitaoka 120a6e
  yrest_fac_2    = yrest_fac >> 1;
Shinya Kitaoka 120a6e
  fac_xrest      = factor * xrest;
Shinya Kitaoka 120a6e
  fac_xrest_2    = fac_xrest >> 1;
Shinya Kitaoka 120a6e
  yrest_xrest    = yrest * xrest;
Shinya Kitaoka 120a6e
  yrest_xrest_2  = yrest_xrest >> 1;
Shinya Kitaoka 120a6e
  wrapin         = rin->wrap;
Shinya Kitaoka 120a6e
  wrapout        = rout->wrap;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  rowin  = (USHORT *)rin->buffer + wrapin * y1 + x1;
Shinya Kitaoka 120a6e
  rowout = (USHORT *)rout->buffer + wrapout * newy + newx;
Shinya Kitaoka 120a6e
  for (y = y1; y < ylast; y += factor) {
Shinya Kitaoka 120a6e
    pixin  = rowin;
Shinya Kitaoka 120a6e
    pixout = rowout;
Shinya Kitaoka 120a6e
    for (x = x1; x < xlast; x += factor) {
Shinya Kitaoka 120a6e
      tmp_r = tmp_g = tmp_b = 0;
Shinya Kitaoka 120a6e
      in                    = pixin;
Shinya Kitaoka 120a6e
      for (j = 0; j < factor; j += 2) {
Shinya Kitaoka 120a6e
        for (i = 0; i < factor; i += 2) {
Shinya Kitaoka 120a6e
          valin = cmap[*in];
Shinya Kitaoka 120a6e
          tmp_r += valin.r;
Shinya Kitaoka 120a6e
          tmp_g += valin.g;
Shinya Kitaoka 120a6e
          tmp_b += valin.b;
Shinya Kitaoka 120a6e
          in += wrapin;
Shinya Kitaoka 120a6e
          in++;
Shinya Kitaoka 120a6e
          valin = cmap[*in];
Shinya Kitaoka 120a6e
          tmp_r += valin.r;
Shinya Kitaoka 120a6e
          tmp_g += valin.g;
Shinya Kitaoka 120a6e
          tmp_b += valin.b;
Shinya Kitaoka 120a6e
          in -= wrapin;
Shinya Kitaoka 120a6e
          in++;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
        in += 2 * wrapin - factor;
Shinya Kitaoka 120a6e
      }
Shinya Kitaoka 120a6e
      tmp_r           = (tmp_r + fac_fac_4) >> fac_fac_2_bits;
Shinya Kitaoka 120a6e
      tmp_g           = (tmp_g + fac_fac_4) >> fac_fac_2_bits;
Shinya Kitaoka 120a6e
      tmp_b           = (tmp_b + fac_fac_4) >> fac_fac_2_bits;
Shinya Kitaoka 120a6e
      ?D 54 *pixout++ = BYTES_TO_RGB16(tmp_r, tmp_g, tmp_b);
Shinya Kitaoka 120a6e
      ?E 54
Toshihiro Shimizu 890ddd
?I 54
Shinya Kitaoka 120a6e
?D 60 *pixout++      = ROP_RGB16_FROM_BYTES(tmp_r, tmp_g, tmp_b);
Shinya Kitaoka 120a6e
      ?E 60
Shinya Kitaoka 120a6e
?I 60 *pixout++      = PIX_RGB16_FROM_BYTES(tmp_r, tmp_g, tmp_b);
Shinya Kitaoka 120a6e
      ?E 60
Toshihiro Shimizu 890ddd
?E 54 pixin += factor;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    if (xrest) {
Shinya Kitaoka 120a6e
      tmp_r = tmp_g = tmp_b = 0;
Shinya Kitaoka 120a6e
      for (j = 0; j < factor; j++)
Shinya Kitaoka 120a6e
        for (i = 0; i < xrest; i++) {
Shinya Kitaoka 120a6e
          valin = cmap[pixin[i + j * wrapin]];
Shinya Kitaoka 120a6e
          tmp_r += valin.r;
Shinya Kitaoka 120a6e
          tmp_g += valin.g;
Shinya Kitaoka 120a6e
          tmp_b += valin.b;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
      tmp_r         = (tmp_r + fac_xrest_2) / fac_xrest;
Shinya Kitaoka 120a6e
      tmp_g         = (tmp_g + fac_xrest_2) / fac_xrest;
Shinya Kitaoka 120a6e
      tmp_b         = (tmp_b + fac_xrest_2) / fac_xrest;
Shinya Kitaoka 120a6e
      ?D 54 *pixout = BYTES_TO_RGB16(tmp_r, tmp_g, tmp_b);
Shinya Kitaoka 120a6e
      ?E 54
Toshihiro Shimizu 890ddd
?I 54
Shinya Kitaoka 120a6e
?D 60 *pixout      = ROP_RGB16_FROM_BYTES(tmp_r, tmp_g, tmp_b);
Shinya Kitaoka 120a6e
      ?E 60
Shinya Kitaoka 120a6e
?I 60 *pixout      = PIX_RGB16_FROM_BYTES(tmp_r, tmp_g, tmp_b);
Shinya Kitaoka 120a6e
      ?E 60
Toshihiro Shimizu 890ddd
?E 54
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    rowin += wrapin * factor;
Shinya Kitaoka 120a6e
    rowout += wrapout;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  if (yrest) {
Shinya Kitaoka 120a6e
    pixin  = rowin;
Shinya Kitaoka 120a6e
    pixout = rowout;
Shinya Kitaoka 120a6e
    for (x = x1; x < xlast; x += factor) {
Shinya Kitaoka 120a6e
      tmp_r = tmp_g = tmp_b = 0;
Shinya Kitaoka 120a6e
      for (j = 0; j < yrest; j++)
Shinya Kitaoka 120a6e
        for (i = 0; i < factor; i++) {
Shinya Kitaoka 120a6e
          valin = cmap[pixin[i + j * wrapin]];
Shinya Kitaoka 120a6e
          tmp_r += valin.r;
Shinya Kitaoka 120a6e
          tmp_g += valin.g;
Shinya Kitaoka 120a6e
          tmp_b += valin.b;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
      tmp_r           = (tmp_r + yrest_fac_2) / yrest_fac;
Shinya Kitaoka 120a6e
      tmp_g           = (tmp_g + yrest_fac_2) / yrest_fac;
Shinya Kitaoka 120a6e
      tmp_b           = (tmp_b + yrest_fac_2) / yrest_fac;
Shinya Kitaoka 120a6e
      ?D 54 *pixout++ = BYTES_TO_RGB16(tmp_r, tmp_g, tmp_b);
Shinya Kitaoka 120a6e
      ?E 54
Toshihiro Shimizu 890ddd
?I 54
Shinya Kitaoka 120a6e
?D 60 *pixout++      = ROP_RGB16_FROM_BYTES(tmp_r, tmp_g, tmp_b);
Shinya Kitaoka 120a6e
      ?E 60
Shinya Kitaoka 120a6e
?I 60 *pixout++      = PIX_RGB16_FROM_BYTES(tmp_r, tmp_g, tmp_b);
Shinya Kitaoka 120a6e
      ?E 60
Toshihiro Shimizu 890ddd
?E 54 pixin += factor;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    if (xrest) {
Shinya Kitaoka 120a6e
      tmp_r = tmp_g = tmp_b = 0;
Shinya Kitaoka 120a6e
      for (j = 0; j < yrest; j++)
Shinya Kitaoka 120a6e
        for (i = 0; i < xrest; i++) {
Shinya Kitaoka 120a6e
          valin = cmap[pixin[i + j * wrapin]];
Shinya Kitaoka 120a6e
          tmp_r += valin.r;
Shinya Kitaoka 120a6e
          tmp_g += valin.g;
Shinya Kitaoka 120a6e
          tmp_b += valin.b;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
      tmp_r         = (tmp_r + yrest_xrest_2) / yrest_xrest;
Shinya Kitaoka 120a6e
      tmp_g         = (tmp_g + yrest_xrest_2) / yrest_xrest;
Shinya Kitaoka 120a6e
      tmp_b         = (tmp_b + yrest_xrest_2) / yrest_xrest;
Shinya Kitaoka 120a6e
      ?D 54 *pixout = BYTES_TO_RGB16(tmp_r, tmp_g, tmp_b);
Shinya Kitaoka 120a6e
      ?E 54
Toshihiro Shimizu 890ddd
?I 54
Shinya Kitaoka 120a6e
?D 60 *pixout      = ROP_RGB16_FROM_BYTES(tmp_r, tmp_g, tmp_b);
Shinya Kitaoka 120a6e
      ?E 60
Shinya Kitaoka 120a6e
?I 60 *pixout      = PIX_RGB16_FROM_BYTES(tmp_r, tmp_g, tmp_b);
Shinya Kitaoka 120a6e
      ?E 60
Toshihiro Shimizu 890ddd
?E 54
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
?I 84 static void rop_zoom_out_cm24_rgb16(RASTER *rin, RASTER *rout, int x1,
Shinya Kitaoka 120a6e
                                          int y1, int x2, int y2, int newx,
Shinya Kitaoka 120a6e
                                          int newy, int abs_zoom_level) {
Shinya Kitaoka 120a6e
  ULONG *rowin, *pixin, *in, win;
Shinya Kitaoka 120a6e
  LPIXEL *penmap, *colmap, valin;
Shinya Kitaoka 120a6e
  USHORT *rowout, *pixout;
Shinya Kitaoka 120a6e
  int tmp_r, tmp_g, tmp_b;
Shinya Kitaoka 120a6e
  int wrapin, wrapout;
Shinya Kitaoka 120a6e
  int x, y, lx, ly, xlast, ylast, xrest, yrest, i, j;
Shinya Kitaoka 120a6e
  int factor, fac_fac_2_bits;
Shinya Kitaoka 120a6e
  int fac_fac, yrest_fac, fac_xrest, yrest_xrest;
Shinya Kitaoka 120a6e
  int fac_fac_2, yrest_fac_2, fac_xrest_2, yrest_xrest_2;
Shinya Kitaoka 120a6e
  int fac_fac_4;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  penmap         = rin->cmap.penbuffer;
Shinya Kitaoka 120a6e
  colmap         = rin->cmap.colbuffer;
Shinya Kitaoka 120a6e
  lx             = x2 - x1 + 1;
Shinya Kitaoka 120a6e
  ly             = y2 - y1 + 1;
Shinya Kitaoka 120a6e
  factor         = 1 << abs_zoom_level;
Shinya Kitaoka 120a6e
  xrest          = lx & (factor - 1);
Shinya Kitaoka 120a6e
  yrest          = ly & (factor - 1);
Shinya Kitaoka 120a6e
  xlast          = x2 - xrest + 1;
Shinya Kitaoka 120a6e
  ylast          = y2 - yrest + 1;
Shinya Kitaoka 120a6e
  fac_fac        = factor * factor;
Shinya Kitaoka 120a6e
  fac_fac_2      = fac_fac >> 1;
Shinya Kitaoka 120a6e
  fac_fac_4      = fac_fac >> 2;
Shinya Kitaoka 120a6e
  fac_fac_2_bits = 2 * abs_zoom_level - 1;
Shinya Kitaoka 120a6e
  yrest_fac      = yrest * factor;
Shinya Kitaoka 120a6e
  yrest_fac_2    = yrest_fac >> 1;
Shinya Kitaoka 120a6e
  fac_xrest      = factor * xrest;
Shinya Kitaoka 120a6e
  fac_xrest_2    = fac_xrest >> 1;
Shinya Kitaoka 120a6e
  yrest_xrest    = yrest * xrest;
Shinya Kitaoka 120a6e
  yrest_xrest_2  = yrest_xrest >> 1;
Shinya Kitaoka 120a6e
  wrapin         = rin->wrap;
Shinya Kitaoka 120a6e
  wrapout        = rout->wrap;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  rowin  = (ULONG *)rin->buffer + wrapin * y1 + x1;
Shinya Kitaoka 120a6e
  rowout = (USHORT *)rout->buffer + wrapout * newy + newx;
Shinya Kitaoka 120a6e
  for (y = y1; y < ylast; y += factor) {
Shinya Kitaoka 120a6e
    pixin  = rowin;
Shinya Kitaoka 120a6e
    pixout = rowout;
Shinya Kitaoka 120a6e
    for (x = x1; x < xlast; x += factor) {
Shinya Kitaoka 120a6e
      tmp_r = tmp_g = tmp_b = 0;
Shinya Kitaoka 120a6e
      in                    = pixin;
Shinya Kitaoka 120a6e
      for (j = 0; j < factor; j += 2) {
Shinya Kitaoka 120a6e
        for (i = 0; i < factor; i += 2) {
Shinya Kitaoka 120a6e
          win = *in;
Shinya Kitaoka 120a6e
          MAP24_64(win, penmap, colmap, valin)
Shinya Kitaoka 120a6e
          tmp_r += valin.r;
Shinya Kitaoka 120a6e
          tmp_g += valin.g;
Shinya Kitaoka 120a6e
          tmp_b += valin.b;
Shinya Kitaoka 120a6e
          in += wrapin;
Shinya Kitaoka 120a6e
          in++;
Shinya Kitaoka 120a6e
          win = *in;
Shinya Kitaoka 120a6e
          MAP24_64(win, penmap, colmap, valin)
Shinya Kitaoka 120a6e
          tmp_r += valin.r;
Shinya Kitaoka 120a6e
          tmp_g += valin.g;
Shinya Kitaoka 120a6e
          tmp_b += valin.b;
Shinya Kitaoka 120a6e
          in -= wrapin;
Shinya Kitaoka 120a6e
          in++;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
        in += 2 * wrapin - factor;
Shinya Kitaoka 120a6e
      }
Shinya Kitaoka 120a6e
      tmp_r     = (tmp_r + fac_fac_4) >> fac_fac_2_bits;
Shinya Kitaoka 120a6e
      tmp_g     = (tmp_g + fac_fac_4) >> fac_fac_2_bits;
Shinya Kitaoka 120a6e
      tmp_b     = (tmp_b + fac_fac_4) >> fac_fac_2_bits;
Shinya Kitaoka 120a6e
      *pixout++ = PIX_RGB16_FROM_BYTES(tmp_r, tmp_g, tmp_b);
Shinya Kitaoka 120a6e
      pixin += factor;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    if (xrest) {
Shinya Kitaoka 120a6e
      tmp_r = tmp_g = tmp_b = 0;
Shinya Kitaoka 120a6e
      for (j = 0; j < factor; j++)
Shinya Kitaoka 120a6e
        for (i = 0; i < xrest; i++) {
Shinya Kitaoka 120a6e
          win = pixin[i + j * wrapin];
Shinya Kitaoka 120a6e
          MAP24_64(win, penmap, colmap, valin)
Shinya Kitaoka 120a6e
          tmp_r += valin.r;
Shinya Kitaoka 120a6e
          tmp_g += valin.g;
Shinya Kitaoka 120a6e
          tmp_b += valin.b;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
      tmp_r   = (tmp_r + fac_xrest_2) / fac_xrest;
Shinya Kitaoka 120a6e
      tmp_g   = (tmp_g + fac_xrest_2) / fac_xrest;
Shinya Kitaoka 120a6e
      tmp_b   = (tmp_b + fac_xrest_2) / fac_xrest;
Shinya Kitaoka 120a6e
      *pixout = PIX_RGB16_FROM_BYTES(tmp_r, tmp_g, tmp_b);
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    rowin += wrapin * factor;
Shinya Kitaoka 120a6e
    rowout += wrapout;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  if (yrest) {
Shinya Kitaoka 120a6e
    pixin  = rowin;
Shinya Kitaoka 120a6e
    pixout = rowout;
Shinya Kitaoka 120a6e
    for (x = x1; x < xlast; x += factor) {
Shinya Kitaoka 120a6e
      tmp_r = tmp_g = tmp_b = 0;
Shinya Kitaoka 120a6e
      for (j = 0; j < yrest; j++)
Shinya Kitaoka 120a6e
        for (i = 0; i < factor; i++) {
Shinya Kitaoka 120a6e
          win = pixin[i + j * wrapin];
Shinya Kitaoka 120a6e
          MAP24_64(win, penmap, colmap, valin)
Shinya Kitaoka 120a6e
          tmp_r += valin.r;
Shinya Kitaoka 120a6e
          tmp_g += valin.g;
Shinya Kitaoka 120a6e
          tmp_b += valin.b;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
      tmp_r     = (tmp_r + yrest_fac_2) / yrest_fac;
Shinya Kitaoka 120a6e
      tmp_g     = (tmp_g + yrest_fac_2) / yrest_fac;
Shinya Kitaoka 120a6e
      tmp_b     = (tmp_b + yrest_fac_2) / yrest_fac;
Shinya Kitaoka 120a6e
      *pixout++ = PIX_RGB16_FROM_BYTES(tmp_r, tmp_g, tmp_b);
Shinya Kitaoka 120a6e
      pixin += factor;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    if (xrest) {
Shinya Kitaoka 120a6e
      tmp_r = tmp_g = tmp_b = 0;
Shinya Kitaoka 120a6e
      for (j = 0; j < yrest; j++)
Shinya Kitaoka 120a6e
        for (i = 0; i < xrest; i++) {
Shinya Kitaoka 120a6e
          win = pixin[i + j * wrapin];
Shinya Kitaoka 120a6e
          MAP24_64(win, penmap, colmap, valin)
Shinya Kitaoka 120a6e
          tmp_r += valin.r;
Shinya Kitaoka 120a6e
          tmp_g += valin.g;
Shinya Kitaoka 120a6e
          tmp_b += valin.b;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
      tmp_r   = (tmp_r + yrest_xrest_2) / yrest_xrest;
Shinya Kitaoka 120a6e
      tmp_g   = (tmp_g + yrest_xrest_2) / yrest_xrest;
Shinya Kitaoka 120a6e
      tmp_b   = (tmp_b + yrest_xrest_2) / yrest_xrest;
Shinya Kitaoka 120a6e
      *pixout = PIX_RGB16_FROM_BYTES(tmp_r, tmp_g, tmp_b);
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
?E 84 static void rop_copy_rgbx_rgb16(RASTER *rin, RASTER *rout, int x1, int y1,
Shinya Kitaoka 120a6e
                                      int x2, int y2, int newx, int newy) {
Shinya Kitaoka 120a6e
  LPIXEL *rowin, *pixin, val;
Shinya Kitaoka 120a6e
  USHORT *rowout, *pixout;
Shinya Kitaoka 120a6e
  int wrapin, wrapout;
Shinya Kitaoka 120a6e
  int x, y, lx, ly;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  lx      = x2 - x1 + 1;
Shinya Kitaoka 120a6e
  ly      = y2 - y1 + 1;
Shinya Kitaoka 120a6e
  wrapin  = rin->wrap;
Shinya Kitaoka 120a6e
  wrapout = rout->wrap;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  rowin  = (LPIXEL *)rin->buffer + wrapin * y1 + x1;
Shinya Kitaoka 120a6e
  rowout = (USHORT *)rout->buffer + wrapout * newy + newx;
Shinya Kitaoka 120a6e
  while (ly-- > 0) {
Shinya Kitaoka 120a6e
    pixin  = rowin;
Shinya Kitaoka 120a6e
    pixout = rowout;
Shinya Kitaoka 120a6e
    for (x = 0; x < lx; x++) {
Shinya Kitaoka 120a6e
      val = *pixin++;
Shinya Kitaoka 120a6e
      ?D 70 *pixout++ =
Shinya Kitaoka 120a6e
          (val.r << 8) & 0xf800 | (val.g << 3) & 0x7e0 | (val.b >> 3);
Shinya Kitaoka 120a6e
      ?E 70
Shinya Kitaoka 120a6e
?I 70 *pixout++ = PIX_RGB16_FROM_RGBX(val);
Shinya Kitaoka 120a6e
      ?E 70
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    rowin += wrapin;
Shinya Kitaoka 120a6e
    rowout += wrapout;
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
?I 95
Shinya Kitaoka 120a6e
    /*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd
?I 96
Toshihiro Shimizu 890ddd
#define SWAP_SHORT(N) (((N) >> 8) | ((N) << 8))
Toshihiro Shimizu 890ddd
?E 96
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?I 96
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
    static void
Shinya Kitaoka 120a6e
    rop_copy_rgbx_xrgb1555(RASTER *rin, RASTER *rout, int x1, int y1, int x2,
Shinya Kitaoka 120a6e
                           int y2, int newx, int newy) {
Shinya Kitaoka 120a6e
  LPIXEL *rowin, *pixin, val;
Shinya Kitaoka 120a6e
  USHORT *rowout, *pixout, outval;
Shinya Kitaoka 120a6e
  int wrapin, wrapout;
Shinya Kitaoka 120a6e
  int x, y, lx, ly;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  lx      = x2 - x1 + 1;
Shinya Kitaoka 120a6e
  ly      = y2 - y1 + 1;
Shinya Kitaoka 120a6e
  wrapin  = rin->wrap;
Shinya Kitaoka 120a6e
  wrapout = rout->wrap;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  rowin  = (LPIXEL *)rin->buffer + wrapin * y1 + x1;
Shinya Kitaoka 120a6e
  rowout = (USHORT *)rout->buffer + wrapout * newy + newx;
Shinya Kitaoka 120a6e
  while (ly-- > 0) {
Shinya Kitaoka 120a6e
    pixin  = rowin;
Shinya Kitaoka 120a6e
    pixout = rowout;
Shinya Kitaoka 120a6e
    for (x = 0; x < lx; x++) {
Shinya Kitaoka 120a6e
      val       = *pixin++;
Shinya Kitaoka 120a6e
      outval    = PIX_XRGB1555_FROM_RGBX(val);
Shinya Kitaoka 120a6e
      *pixout++ = SWAP_SHORT(outval);
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    rowin += wrapin;
Shinya Kitaoka 120a6e
    rowout += wrapout;
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
?E 96 static void rop_copy_rgbx64_rgb16(RASTER *rin, RASTER *rout, int x1,
Shinya Kitaoka 120a6e
                                        int y1, int x2, int y2, int newx,
Shinya Kitaoka 120a6e
                                        int newy) {
Shinya Kitaoka 120a6e
  SPIXEL *rowin, *pixin, val;
Shinya Kitaoka 120a6e
  USHORT *rowout, *pixout;
Shinya Kitaoka 120a6e
  int wrapin, wrapout;
Shinya Kitaoka 120a6e
  int x, y, lx, ly;
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  lx         = x2 - x1 + 1;
Shinya Kitaoka 120a6e
  ly         = y2 - y1 + 1;
Shinya Kitaoka 120a6e
  wrapin     = rin->wrap;
Shinya Kitaoka 120a6e
  wrapout    = rout->wrap;
Shinya Kitaoka 120a6e
  ?E 95
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?I 95 rowin = (SPIXEL *)rin->buffer + wrapin * y1 + x1;
Shinya Kitaoka 120a6e
  rowout     = (USHORT *)rout->buffer + wrapout * newy + newx;
Shinya Kitaoka 120a6e
  while (ly-- > 0) {
Shinya Kitaoka 120a6e
    pixin  = rowin;
Shinya Kitaoka 120a6e
    pixout = rowout;
Shinya Kitaoka 120a6e
    for (x = 0; x < lx; x++) {
Shinya Kitaoka 120a6e
      val       = *pixin++;
Shinya Kitaoka 120a6e
      *pixout++ = PIX_RGB16_FROM_RGBX64(val);
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    rowin += wrapin;
Shinya Kitaoka 120a6e
    rowout += wrapout;
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
?E 95
Shinya Kitaoka 120a6e
    /*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?I 96 static void
Shinya Kitaoka 120a6e
rop_copy_rgbx64_xrgb1555(RASTER *rin, RASTER *rout, int x1, int y1, int x2,
Shinya Kitaoka 120a6e
                         int y2, int newx, int newy) {
Shinya Kitaoka 120a6e
  SPIXEL *rowin, *pixin, val;
Shinya Kitaoka 120a6e
  USHORT *rowout, *pixout;
Shinya Kitaoka 120a6e
  int wrapin, wrapout;
Shinya Kitaoka 120a6e
  int x, y, lx, ly;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  lx      = x2 - x1 + 1;
Shinya Kitaoka 120a6e
  ly      = y2 - y1 + 1;
Shinya Kitaoka 120a6e
  wrapin  = rin->wrap;
Shinya Kitaoka 120a6e
  wrapout = rout->wrap;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  rowin  = (SPIXEL *)rin->buffer + wrapin * y1 + x1;
Shinya Kitaoka 120a6e
  rowout = (USHORT *)rout->buffer + wrapout * newy + newx;
Shinya Kitaoka 120a6e
  while (ly-- > 0) {
Shinya Kitaoka 120a6e
    pixin  = rowin;
Shinya Kitaoka 120a6e
    pixout = rowout;
Shinya Kitaoka 120a6e
    for (x = 0; x < lx; x++) {
Shinya Kitaoka 120a6e
      val       = *pixin++;
Shinya Kitaoka 120a6e
      *pixout++ = PIX_XRGB1555_FROM_RGBX64(val);
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    rowin += wrapin;
Shinya Kitaoka 120a6e
    rowout += wrapout;
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?E 96
Shinya Kitaoka 120a6e
?I 70 static void rop_copy_rgb16_rgbm(RASTER *rin, RASTER *rout, int x1,
Shinya Kitaoka 120a6e
                                       int y1, int x2, int y2, int newx,
Shinya Kitaoka 120a6e
                                       int newy) {
Shinya Kitaoka 120a6e
  USHORT *rowin, *pixin;
Shinya Kitaoka 120a6e
  LPIXEL *rowout, *pixout;
Shinya Kitaoka 120a6e
  int wrapin, wrapout;
Shinya Kitaoka 120a6e
  int x, y, lx, ly;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  lx      = x2 - x1 + 1;
Shinya Kitaoka 120a6e
  ly      = y2 - y1 + 1;
Shinya Kitaoka 120a6e
  wrapin  = rin->wrap;
Shinya Kitaoka 120a6e
  wrapout = rout->wrap;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  rowin  = (USHORT *)rin->buffer + wrapin * y1 + x1;
Shinya Kitaoka 120a6e
  rowout = (LPIXEL *)rout->buffer + wrapout * newy + newx;
Shinya Kitaoka 120a6e
  while (ly-- > 0) {
Shinya Kitaoka 120a6e
    pixin  = rowin;
Shinya Kitaoka 120a6e
    pixout = rowout;
Shinya Kitaoka 120a6e
    for (x = 0; x < lx; x++, *pixin++, *pixout++)
Shinya Kitaoka 120a6e
      PIX_RGB16_TO_RGBM(*pixin, *pixout)
Shinya Kitaoka 120a6e
    rowin += wrapin;
Shinya Kitaoka 120a6e
    rowout += wrapout;
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
?I 96 static void rop_copy_xrgb1555_rgbm(RASTER *rin, RASTER *rout, int x1,
Shinya Kitaoka 120a6e
                                         int y1, int x2, int y2, int newx,
Shinya Kitaoka 120a6e
                                         int newy) {
Shinya Kitaoka 120a6e
  USHORT *rowin, *pixin;
Shinya Kitaoka 120a6e
  LPIXEL *rowout, *pixout;
Shinya Kitaoka 120a6e
  int wrapin, wrapout;
Shinya Kitaoka 120a6e
  int x, y, lx, ly;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  lx      = x2 - x1 + 1;
Shinya Kitaoka 120a6e
  ly      = y2 - y1 + 1;
Shinya Kitaoka 120a6e
  wrapin  = rin->wrap;
Shinya Kitaoka 120a6e
  wrapout = rout->wrap;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  rowin  = (USHORT *)rin->buffer + wrapin * y1 + x1;
Shinya Kitaoka 120a6e
  rowout = (LPIXEL *)rout->buffer + wrapout * newy + newx;
Shinya Kitaoka 120a6e
  while (ly-- > 0) {
Shinya Kitaoka 120a6e
    pixin  = rowin;
Shinya Kitaoka 120a6e
    pixout = rowout;
Shinya Kitaoka 120a6e
    for (x = 0; x < lx; x++, *pixin++, *pixout++)
Shinya Kitaoka 120a6e
      PIX_XRGB1555_TO_RGBM(*pixin, *pixout)
Shinya Kitaoka 120a6e
    rowin += wrapin;
Shinya Kitaoka 120a6e
    rowout += wrapout;
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?E 96
Shinya Kitaoka 120a6e
?E 70 static void rop_zoom_out_rgbx_rgb16(RASTER *rin, RASTER *rout, int x1,
Shinya Kitaoka 120a6e
                                           int y1, int x2, int y2, int newx,
Shinya Kitaoka 120a6e
                                           int newy, int abs_zoom_level) {
Shinya Kitaoka 120a6e
  LPIXEL *rowin, *pixin, *in, valin;
Shinya Kitaoka 120a6e
  USHORT *rowout, *pixout;
Shinya Kitaoka 120a6e
  int tmp_r, tmp_g, tmp_b;
Shinya Kitaoka 120a6e
  int wrapin, wrapout;
Shinya Kitaoka 120a6e
  int x, y, lx, ly, xlast, ylast, xrest, yrest, i, j;
Shinya Kitaoka 120a6e
  int factor, fac_fac_2_bits;
Shinya Kitaoka 120a6e
  int fac_fac, yrest_fac, fac_xrest, yrest_xrest;
Shinya Kitaoka 120a6e
  int fac_fac_2, yrest_fac_2, fac_xrest_2, yrest_xrest_2;
Shinya Kitaoka 120a6e
  int fac_fac_4;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  lx             = x2 - x1 + 1;
Shinya Kitaoka 120a6e
  ly             = y2 - y1 + 1;
Shinya Kitaoka 120a6e
  factor         = 1 << abs_zoom_level;
Shinya Kitaoka 120a6e
  ?D 61 xrest    = lx % factor;
Shinya Kitaoka 120a6e
  yrest          = ly % factor;
Shinya Kitaoka 120a6e
  ?E 61
Shinya Kitaoka 120a6e
?I 61 xrest     = lx & (factor - 1);
Shinya Kitaoka 120a6e
  yrest          = ly & (factor - 1);
Shinya Kitaoka 120a6e
  ?E 61 xlast    = x2 - xrest + 1;
Shinya Kitaoka 120a6e
  ylast          = y2 - yrest + 1;
Shinya Kitaoka 120a6e
  fac_fac        = factor * factor;
Shinya Kitaoka 120a6e
  fac_fac_2      = fac_fac >> 1;
Shinya Kitaoka 120a6e
  fac_fac_4      = fac_fac >> 2;
Shinya Kitaoka 120a6e
  fac_fac_2_bits = 2 * abs_zoom_level - 1;
Shinya Kitaoka 120a6e
  yrest_fac      = yrest * factor;
Shinya Kitaoka 120a6e
  yrest_fac_2    = yrest_fac >> 1;
Shinya Kitaoka 120a6e
  fac_xrest      = factor * xrest;
Shinya Kitaoka 120a6e
  fac_xrest_2    = fac_xrest >> 1;
Shinya Kitaoka 120a6e
  yrest_xrest    = yrest * xrest;
Shinya Kitaoka 120a6e
  yrest_xrest_2  = yrest_xrest >> 1;
Shinya Kitaoka 120a6e
  wrapin         = rin->wrap;
Shinya Kitaoka 120a6e
  wrapout        = rout->wrap;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  rowin  = (LPIXEL *)rin->buffer + wrapin * y1 + x1;
Shinya Kitaoka 120a6e
  rowout = (USHORT *)rout->buffer + wrapout * newy + newx;
Shinya Kitaoka 120a6e
  for (y = y1; y < ylast; y += factor) {
Shinya Kitaoka 120a6e
    pixin  = rowin;
Shinya Kitaoka 120a6e
    pixout = rowout;
Shinya Kitaoka 120a6e
    for (x = x1; x < xlast; x += factor) {
Shinya Kitaoka 120a6e
      tmp_r = tmp_g = tmp_b = 0;
Shinya Kitaoka 120a6e
      in                    = pixin;
Shinya Kitaoka 120a6e
      for (j = 0; j < factor; j += 2) {
Shinya Kitaoka 120a6e
        for (i = 0; i < factor; i += 2) {
Shinya Kitaoka 120a6e
          valin = *in;
Shinya Kitaoka 120a6e
          tmp_r += valin.r;
Shinya Kitaoka 120a6e
          tmp_g += valin.g;
Shinya Kitaoka 120a6e
          tmp_b += valin.b;
Shinya Kitaoka 120a6e
          in += wrapin;
Shinya Kitaoka 120a6e
          in++;
Shinya Kitaoka 120a6e
          valin = *in;
Shinya Kitaoka 120a6e
          tmp_r += valin.r;
Shinya Kitaoka 120a6e
          tmp_g += valin.g;
Shinya Kitaoka 120a6e
          tmp_b += valin.b;
Shinya Kitaoka 120a6e
          in -= wrapin;
Shinya Kitaoka 120a6e
          in++;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
        in += 2 * wrapin - factor;
Shinya Kitaoka 120a6e
      }
Shinya Kitaoka 120a6e
      tmp_r           = (tmp_r + fac_fac_4) >> fac_fac_2_bits;
Shinya Kitaoka 120a6e
      tmp_g           = (tmp_g + fac_fac_4) >> fac_fac_2_bits;
Shinya Kitaoka 120a6e
      tmp_b           = (tmp_b + fac_fac_4) >> fac_fac_2_bits;
Shinya Kitaoka 120a6e
      ?D 54 *pixout++ = BYTES_TO_RGB16(tmp_r, tmp_g, tmp_b);
Shinya Kitaoka 120a6e
      ?E 54
Toshihiro Shimizu 890ddd
?I 54
Shinya Kitaoka 120a6e
?D 60 *pixout++      = ROP_RGB16_FROM_BYTES(tmp_r, tmp_g, tmp_b);
Shinya Kitaoka 120a6e
      ?E 60
Shinya Kitaoka 120a6e
?I 60 *pixout++      = PIX_RGB16_FROM_BYTES(tmp_r, tmp_g, tmp_b);
Shinya Kitaoka 120a6e
      ?E 60
Toshihiro Shimizu 890ddd
?E 54 pixin += factor;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    if (xrest) {
Shinya Kitaoka 120a6e
      tmp_r = tmp_g = tmp_b = 0;
Shinya Kitaoka 120a6e
      for (j = 0; j < factor; j++)
Shinya Kitaoka 120a6e
        for (i = 0; i < xrest; i++) {
Shinya Kitaoka 120a6e
          valin = pixin[i + j * wrapin];
Shinya Kitaoka 120a6e
          tmp_r += valin.r;
Shinya Kitaoka 120a6e
          tmp_g += valin.g;
Shinya Kitaoka 120a6e
          tmp_b += valin.b;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
      tmp_r         = (tmp_r + fac_xrest_2) / fac_xrest;
Shinya Kitaoka 120a6e
      tmp_g         = (tmp_g + fac_xrest_2) / fac_xrest;
Shinya Kitaoka 120a6e
      tmp_b         = (tmp_b + fac_xrest_2) / fac_xrest;
Shinya Kitaoka 120a6e
      ?D 54 *pixout = BYTES_TO_RGB16(tmp_r, tmp_g, tmp_b);
Shinya Kitaoka 120a6e
      ?E 54
Toshihiro Shimizu 890ddd
?I 54
Shinya Kitaoka 120a6e
?D 60 *pixout      = ROP_RGB16_FROM_BYTES(tmp_r, tmp_g, tmp_b);
Shinya Kitaoka 120a6e
      ?E 60
Shinya Kitaoka 120a6e
?I 60 *pixout      = PIX_RGB16_FROM_BYTES(tmp_r, tmp_g, tmp_b);
Shinya Kitaoka 120a6e
      ?E 60
Toshihiro Shimizu 890ddd
?E 54
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    rowin += wrapin * factor;
Shinya Kitaoka 120a6e
    rowout += wrapout;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  if (yrest) {
Shinya Kitaoka 120a6e
    pixin  = rowin;
Shinya Kitaoka 120a6e
    pixout = rowout;
Shinya Kitaoka 120a6e
    for (x = x1; x < xlast; x += factor) {
Shinya Kitaoka 120a6e
      tmp_r = tmp_g = tmp_b = 0;
Shinya Kitaoka 120a6e
      for (j = 0; j < yrest; j++)
Shinya Kitaoka 120a6e
        for (i = 0; i < factor; i++) {
Shinya Kitaoka 120a6e
          valin = pixin[i + j * wrapin];
Shinya Kitaoka 120a6e
          tmp_r += valin.r;
Shinya Kitaoka 120a6e
          tmp_g += valin.g;
Shinya Kitaoka 120a6e
          tmp_b += valin.b;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
      tmp_r           = (tmp_r + yrest_fac_2) / yrest_fac;
Shinya Kitaoka 120a6e
      tmp_g           = (tmp_g + yrest_fac_2) / yrest_fac;
Shinya Kitaoka 120a6e
      tmp_b           = (tmp_b + yrest_fac_2) / yrest_fac;
Shinya Kitaoka 120a6e
      ?D 54 *pixout++ = BYTES_TO_RGB16(tmp_r, tmp_g, tmp_b);
Shinya Kitaoka 120a6e
      ?E 54
Toshihiro Shimizu 890ddd
?I 54
Shinya Kitaoka 120a6e
?D 60 *pixout++      = ROP_RGB16_FROM_BYTES(tmp_r, tmp_g, tmp_b);
Shinya Kitaoka 120a6e
      ?E 60
Shinya Kitaoka 120a6e
?I 60 *pixout++      = PIX_RGB16_FROM_BYTES(tmp_r, tmp_g, tmp_b);
Shinya Kitaoka 120a6e
      ?E 60
Toshihiro Shimizu 890ddd
?E 54 pixin += factor;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    if (xrest) {
Shinya Kitaoka 120a6e
      tmp_r = tmp_g = tmp_b = 0;
Shinya Kitaoka 120a6e
      for (j = 0; j < yrest; j++)
Shinya Kitaoka 120a6e
        for (i = 0; i < xrest; i++) {
Shinya Kitaoka 120a6e
          valin = pixin[i + j * wrapin];
Shinya Kitaoka 120a6e
          tmp_r += valin.r;
Shinya Kitaoka 120a6e
          tmp_g += valin.g;
Shinya Kitaoka 120a6e
          tmp_b += valin.b;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
      tmp_r         = (tmp_r + yrest_xrest_2) / yrest_xrest;
Shinya Kitaoka 120a6e
      tmp_g         = (tmp_g + yrest_xrest_2) / yrest_xrest;
Shinya Kitaoka 120a6e
      tmp_b         = (tmp_b + yrest_xrest_2) / yrest_xrest;
Shinya Kitaoka 120a6e
      ?D 54 *pixout = BYTES_TO_RGB16(tmp_r, tmp_g, tmp_b);
Shinya Kitaoka 120a6e
      ?E 54
Toshihiro Shimizu 890ddd
?I 54
Shinya Kitaoka 120a6e
?D 60 *pixout      = ROP_RGB16_FROM_BYTES(tmp_r, tmp_g, tmp_b);
Shinya Kitaoka 120a6e
      ?E 60
Shinya Kitaoka 120a6e
?I 60 *pixout      = PIX_RGB16_FROM_BYTES(tmp_r, tmp_g, tmp_b);
Shinya Kitaoka 120a6e
      ?E 60
Toshihiro Shimizu 890ddd
?E 54
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
?I 95 static void rop_zoom_out_rgbx64_rgb16(RASTER *rin, RASTER *rout, int x1,
Shinya Kitaoka 120a6e
                                            int y1, int x2, int y2, int newx,
Shinya Kitaoka 120a6e
                                            int newy, int abs_zoom_level) {
Shinya Kitaoka 120a6e
  SPIXEL *rowin, *pixin, *in, valin;
Shinya Kitaoka 120a6e
  USHORT *rowout, *pixout;
Shinya Kitaoka 120a6e
  int tmp_r, tmp_g, tmp_b;
Shinya Kitaoka 120a6e
  int wrapin, wrapout;
Shinya Kitaoka 120a6e
  int x, y, lx, ly, xlast, ylast, xrest, yrest, i, j;
Shinya Kitaoka 120a6e
  int factor, fac_fac_2_bits;
Shinya Kitaoka 120a6e
  int fac_fac, yrest_fac, fac_xrest, yrest_xrest;
Shinya Kitaoka 120a6e
  int fac_fac_2, yrest_fac_2, fac_xrest_2, yrest_xrest_2;
Shinya Kitaoka 120a6e
  int fac_fac_4;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  lx             = x2 - x1 + 1;
Shinya Kitaoka 120a6e
  ly             = y2 - y1 + 1;
Shinya Kitaoka 120a6e
  factor         = 1 << abs_zoom_level;
Shinya Kitaoka 120a6e
  xrest          = lx & (factor - 1);
Shinya Kitaoka 120a6e
  yrest          = ly & (factor - 1);
Shinya Kitaoka 120a6e
  xlast          = x2 - xrest + 1;
Shinya Kitaoka 120a6e
  ylast          = y2 - yrest + 1;
Shinya Kitaoka 120a6e
  fac_fac        = factor * factor;
Shinya Kitaoka 120a6e
  fac_fac_4      = fac_fac >> 2;
Shinya Kitaoka 120a6e
  fac_fac_2_bits = 2 * abs_zoom_level - 1;
Shinya Kitaoka 120a6e
  yrest_fac      = yrest * factor;
Shinya Kitaoka 120a6e
  yrest_fac_2    = yrest_fac >> 1;
Shinya Kitaoka 120a6e
  fac_xrest      = factor * xrest;
Shinya Kitaoka 120a6e
  fac_xrest_2    = fac_xrest >> 1;
Shinya Kitaoka 120a6e
  yrest_xrest    = yrest * xrest;
Shinya Kitaoka 120a6e
  yrest_xrest_2  = yrest_xrest >> 1;
Shinya Kitaoka 120a6e
  /*dafare*/
Shinya Kitaoka 120a6e
  wrapin  = rin->wrap;
Shinya Kitaoka 120a6e
  wrapout = rout->wrap;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  rowin  = (SPIXEL *)rin->buffer + wrapin * y1 + x1;
Shinya Kitaoka 120a6e
  rowout = (USHORT *)rout->buffer + wrapout * newy + newx;
Shinya Kitaoka 120a6e
  for (y = y1; y < ylast; y += factor) {
Shinya Kitaoka 120a6e
    pixin  = rowin;
Shinya Kitaoka 120a6e
    pixout = rowout;
Shinya Kitaoka 120a6e
    for (x = x1; x < xlast; x += factor) {
Shinya Kitaoka 120a6e
      tmp_r = tmp_g = tmp_b = 0;
Shinya Kitaoka 120a6e
      in                    = pixin;
Shinya Kitaoka 120a6e
      for (j = 0; j < factor; j += 2) {
Shinya Kitaoka 120a6e
        for (i = 0; i < factor; i += 2) {
Shinya Kitaoka 120a6e
          valin = *in;
Shinya Kitaoka 120a6e
          tmp_r += valin.r;
Shinya Kitaoka 120a6e
          tmp_g += valin.g;
Shinya Kitaoka 120a6e
          tmp_b += valin.b;
Shinya Kitaoka 120a6e
          in += wrapin;
Shinya Kitaoka 120a6e
          in++;
Shinya Kitaoka 120a6e
          valin = *in;
Shinya Kitaoka 120a6e
          tmp_r += valin.r;
Shinya Kitaoka 120a6e
          tmp_g += valin.g;
Shinya Kitaoka 120a6e
          tmp_b += valin.b;
Shinya Kitaoka 120a6e
          in -= wrapin;
Shinya Kitaoka 120a6e
          in++;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
        in += 2 * wrapin - factor;
Shinya Kitaoka 120a6e
      }
Shinya Kitaoka 120a6e
      tmp_r     = (tmp_r + fac_fac_4) >> fac_fac_2_bits;
Shinya Kitaoka 120a6e
      tmp_g     = (tmp_g + fac_fac_4) >> fac_fac_2_bits;
Shinya Kitaoka 120a6e
      tmp_b     = (tmp_b + fac_fac_4) >> fac_fac_2_bits;
Shinya Kitaoka 120a6e
      *pixout++ = PIX_RGB16_FROM_USHORT(tmp_r, tmp_g, tmp_b);
Shinya Kitaoka 120a6e
      pixin += factor;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    if (xrest) {
Shinya Kitaoka 120a6e
      tmp_r = tmp_g = tmp_b = 0;
Shinya Kitaoka 120a6e
      for (j = 0; j < factor; j++)
Shinya Kitaoka 120a6e
        for (i = 0; i < xrest; i++) {
Shinya Kitaoka 120a6e
          valin = pixin[i + j * wrapin];
Shinya Kitaoka 120a6e
          tmp_r += valin.r;
Shinya Kitaoka 120a6e
          tmp_g += valin.g;
Shinya Kitaoka 120a6e
          tmp_b += valin.b;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
      tmp_r   = (tmp_r + fac_xrest_2) / fac_xrest;
Shinya Kitaoka 120a6e
      tmp_g   = (tmp_g + fac_xrest_2) / fac_xrest;
Shinya Kitaoka 120a6e
      tmp_b   = (tmp_b + fac_xrest_2) / fac_xrest;
Shinya Kitaoka 120a6e
      *pixout = PIX_RGB16_FROM_USHORT(tmp_r, tmp_g, tmp_b);
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    rowin += wrapin * factor;
Shinya Kitaoka 120a6e
    rowout += wrapout;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  if (yrest) {
Shinya Kitaoka 120a6e
    pixin  = rowin;
Shinya Kitaoka 120a6e
    pixout = rowout;
Shinya Kitaoka 120a6e
    for (x = x1; x < xlast; x += factor) {
Shinya Kitaoka 120a6e
      tmp_r = tmp_g = tmp_b = 0;
Shinya Kitaoka 120a6e
      for (j = 0; j < yrest; j++)
Shinya Kitaoka 120a6e
        for (i = 0; i < factor; i++) {
Shinya Kitaoka 120a6e
          valin = pixin[i + j * wrapin];
Shinya Kitaoka 120a6e
          tmp_r += valin.r;
Shinya Kitaoka 120a6e
          tmp_g += valin.g;
Shinya Kitaoka 120a6e
          tmp_b += valin.b;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
      tmp_r     = (tmp_r + yrest_fac_2) / yrest_fac;
Shinya Kitaoka 120a6e
      tmp_g     = (tmp_g + yrest_fac_2) / yrest_fac;
Shinya Kitaoka 120a6e
      tmp_b     = (tmp_b + yrest_fac_2) / yrest_fac;
Shinya Kitaoka 120a6e
      *pixout++ = PIX_RGB16_FROM_USHORT(tmp_r, tmp_g, tmp_b);
Shinya Kitaoka 120a6e
      pixin += factor;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    if (xrest) {
Shinya Kitaoka 120a6e
      tmp_r = tmp_g = tmp_b = 0;
Shinya Kitaoka 120a6e
      for (j = 0; j < yrest; j++)
Shinya Kitaoka 120a6e
        for (i = 0; i < xrest; i++) {
Shinya Kitaoka 120a6e
          valin = pixin[i + j * wrapin];
Shinya Kitaoka 120a6e
          tmp_r += valin.r;
Shinya Kitaoka 120a6e
          tmp_g += valin.g;
Shinya Kitaoka 120a6e
          tmp_b += valin.b;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
      tmp_r   = (tmp_r + yrest_xrest_2) / yrest_xrest;
Shinya Kitaoka 120a6e
      tmp_g   = (tmp_g + yrest_xrest_2) / yrest_xrest;
Shinya Kitaoka 120a6e
      tmp_b   = (tmp_b + yrest_xrest_2) / yrest_xrest;
Shinya Kitaoka 120a6e
      *pixout = PIX_RGB16_FROM_USHORT(tmp_r, tmp_g, tmp_b);
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?E 95
Toshihiro Shimizu 890ddd
?E 52
Toshihiro Shimizu 890ddd
?E 46
Toshihiro Shimizu 890ddd
?E 28
Toshihiro Shimizu 890ddd
?E 20
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
    /* copia un rettangolo da rin a rout.
Shinya Kitaoka 120a6e
* Le coordinate sono relative ai due raster: (0, 0) corrisponde
Shinya Kitaoka 120a6e
* al primo pixel del raster.
Shinya Kitaoka 120a6e
*
Shinya Kitaoka 120a6e
*/
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
    void
Shinya Kitaoka 120a6e
    rop_copy(RASTER *rin, RASTER *rout, int x1, int y1, int x2, int y2,
Shinya Kitaoka 120a6e
             int newx, int newy) {
Shinya Kitaoka 120a6e
  ?D 13 char *rowin, *rowout;
Shinya Kitaoka 120a6e
  ?E 13
Toshihiro Shimizu 890ddd
?I 13
Toshihiro Shimizu 890ddd
?D 41 UCHAR *rowin, *rowout;
Shinya Kitaoka 120a6e
  ?E 13
Toshihiro Shimizu 890ddd
?D 10 int rowsize, wrapin, wrapout, d, tmp;
Shinya Kitaoka 120a6e
  ?E 10
Toshihiro Shimizu 890ddd
?I 10 int rowsize, bytewrapin, bytewrapout, d, tmp;
Shinya Kitaoka 120a6e
  ?E 10
Toshihiro Shimizu 890ddd
?D 12 int pixbits_in, pixbits_out;
Shinya Kitaoka 120a6e
  ?E 12
Toshihiro Shimizu 890ddd
?I 12 int pixbits_in, pixbits_out;
Shinya Kitaoka 120a6e
  int pixbytes_in, pixbytes_out;
Shinya Kitaoka 120a6e
  ?E 41
Toshihiro Shimizu 890ddd
?I 41 int tmp;
Shinya Kitaoka 120a6e
  ?E 41
Toshihiro Shimizu 890ddd
?E 12
Toshihiro Shimizu 890ddd
?I 4 int rasras;
Shinya Kitaoka 120a6e
  ?E 4
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
      /* raddrizzo gli estremi */
Shinya Kitaoka 120a6e
      if (x1 > x2) {
Shinya Kitaoka 120a6e
    tmp = x1;
Shinya Kitaoka 120a6e
    x1  = x2;
Shinya Kitaoka 120a6e
    x2  = tmp;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  if (y1 > y2) {
Shinya Kitaoka 120a6e
    tmp = y1;
Shinya Kitaoka 120a6e
    y1  = y2;
Shinya Kitaoka 120a6e
    y2  = tmp;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  /* controllo gli sconfinamenti */
Shinya Kitaoka 120a6e
  if (x1 < 0 || y1 < 0 || x2 >= rin->lx || y2 >= rin->ly || newx < 0 ||
Shinya Kitaoka 120a6e
      newy < 0 || newx + x2 - x1 >= rout->lx || newy + y2 - y1 >= rout->ly)
Shinya Kitaoka 120a6e
    ?D 27 {
Shinya Kitaoka 120a6e
      printf("### INTERNAL ERROR - rop_copy; access violation\n");
Shinya Kitaoka 120a6e
      return;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
  ?E 27
Shinya Kitaoka 120a6e
?I 27 {
Shinya Kitaoka 120a6e
    printf(
Shinya Kitaoka 120a6e
        "### INTERNAL ERROR - rop_copy; access violation\n"
Shinya Kitaoka 120a6e
        " ((%d,%d)(%d,%d)in(%dx%d)->(%d,%d)in(%dx%d))\n",
Shinya Kitaoka 120a6e
        x1, y1, x2, y2, rin->lx, rin->ly, newx, newy, rout->lx, rout->ly);
Shinya Kitaoka 120a6e
    return;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  ?E 27
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?D 2 if (rin->type == RAS_CM && rout->type == RAS_RGBM) 
Toshihiro Shimizu 890ddd
?E 2
Toshihiro Shimizu 890ddd
?I 2
Toshihiro Shimizu 890ddd
?D 4 if (rin->type == RAS_CM16 && rout->type == RAS_RGBM) 
Shinya Kitaoka 120a6e
?E 2 {
Shinya Kitaoka 120a6e
    ?D 2 rop_copy_cm_rgbm(rin, rout, x1, y1, x2, y2, newx, newy);
Shinya Kitaoka 120a6e
    ?E 2
Toshihiro Shimizu 890ddd
?I 2 rop_copy_cm16_rgbm(rin, rout, x1, y1, x2, y2, newx, newy);
Shinya Kitaoka 120a6e
    ?E 2 return;
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  ?E 4
Toshihiro Shimizu 890ddd
?D 10 pixbits_in = rop_pixbits(rin->type);
Shinya Kitaoka 120a6e
  pixbits_out     = rop_pixbits(rout->type);
Shinya Kitaoka 120a6e
  ?E 10
Toshihiro Shimizu 890ddd
?I 10
Toshihiro Shimizu 890ddd
?D 23 pixbits_in = rop_pixbits(rin->type);
Shinya Kitaoka 120a6e
  pixbytes_in     = rop_pixbytes(rin->type);
Shinya Kitaoka 120a6e
  pixbits_out     = rop_pixbits(rout->type);
Shinya Kitaoka 120a6e
  pixbytes_out    = rop_pixbytes(rout->type);
Shinya Kitaoka 120a6e
  ?E 23
Toshihiro Shimizu 890ddd
?E 10
Toshihiro Shimizu 890ddd
?D 4
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?E 4
Toshihiro Shimizu 890ddd
?I 4
Shinya Kitaoka 120a6e
?D 96 rasras     = RASRAS(rin->type, rout->type);
Shinya Kitaoka 120a6e
  switch (rasras)
Shinya Kitaoka 120a6e
    ?E 96
Toshihiro Shimizu 890ddd
?I 96 if (rin->type == rout->type)
Shinya Kitaoka 120a6e
        rop_copy_same(rin, rout, x1, y1, x2, y2, newx, newy);
Shinya Kitaoka 120a6e
  else ?E 96 {
Shinya Kitaoka 120a6e
    ?I 73
Shinya Kitaoka 120a6e
?D 96 CASE RASRAS(RAS_RGBM64, RAS_RGBM64)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_RGB_64, RAS_RGB_64)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_RGBM, RAS_RGB_)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_RGBM, RAS_RGBM)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_RGB_, RAS_RGB_)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_RGB, RAS_RGB)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_RGB16, RAS_RGB16)
Shinya Kitaoka 120a6e
        :
Shinya Kitaoka 120a6e
?D 83 __OR RASRAS(RAS_UNICM16, RAS_UNICM16)
Shinya Kitaoka 120a6e
        :
Shinya Kitaoka 120a6e
?E 83 __OR RASRAS(RAS_CM16S8, RAS_CM16S8)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_CM16S4, RAS_CM16S4)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_CM16, RAS_CM16)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_MBW16, RAS_MBW16)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_GR8, RAS_GR8)
Shinya Kitaoka 120a6e
        :
Shinya Kitaoka 120a6e
?I 90 __OR RASRAS(RAS_GR16, RAS_GR16)
Shinya Kitaoka 120a6e
        :
Toshihiro Shimizu 890ddd
?E 90
Shinya Kitaoka 120a6e
?D 83 __OR RASRAS(RAS_UNICM8, RAS_UNICM8)
Shinya Kitaoka 120a6e
        :
Shinya Kitaoka 120a6e
?E 83 __OR RASRAS(RAS_CM8, RAS_CM8)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_CM8S8, RAS_CM8S8)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_CM8S4, RAS_CM8S4)
Shinya Kitaoka 120a6e
        :
Shinya Kitaoka 120a6e
?I 84 __OR RASRAS(RAS_CM24, RAS_CM24)
Shinya Kitaoka 120a6e
        :
Toshihiro Shimizu 890ddd
?E 84 rop_copy_same(rin, rout, x1, y1, x2, y2, newx, newy);
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
    ?E 73
Shinya Kitaoka 120a6e
?D 18 CASE RASRAS(RAS_CM16, RAS_RGBM)
Shinya Kitaoka 120a6e
        :
Toshihiro Shimizu 890ddd
?E 18
Shinya Kitaoka 120a6e
?I 18 CASE RASRAS(RAS_GR8, RAS_RGB_)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_GR8, RAS_RGBM)
Shinya Kitaoka 120a6e
        : rop_copy_gr8_rgbm(rin, rout, x1, y1, x2, y2, newx, newy);
Shinya Kitaoka 120a6e
    ?D 41 return;
Shinya Kitaoka 120a6e
    ?E 41
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        CASE RASRAS(RAS_CM16, RAS_RGB_)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_CM16, RAS_RGBM)
Shinya Kitaoka 120a6e
        :
Toshihiro Shimizu 890ddd
?E 18 rop_copy_cm16_rgbm(rin, rout, x1, y1, x2, y2, newx, newy);
Shinya Kitaoka 120a6e
    ?D 41 return;
Shinya Kitaoka 120a6e
    ?E 41
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
?I 84 CASE RASRAS(RAS_CM24, RAS_RGB_)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_CM24, RAS_RGBM)
Shinya Kitaoka 120a6e
        : rop_copy_cm24_rgbm(rin, rout, x1, y1, x2, y2, newx, newy);
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
    ?E 84
Shinya Kitaoka 120a6e
?I 58 CASE RASRAS(RAS_CM16, RAS_RGB_64)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_CM16, RAS_RGBM64)
Shinya Kitaoka 120a6e
        : rop_copy_cm16_rgbm64(rin, rout, x1, y1, x2, y2, newx, newy);
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
    ?I 84 CASE RASRAS(RAS_CM24, RAS_RGB_64)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_CM24, RAS_RGBM64)
Shinya Kitaoka 120a6e
        : rop_copy_cm24_rgbm64(rin, rout, x1, y1, x2, y2, newx, newy);
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
    ?E 84 CASE RASRAS(RAS_RGBM, RAS_RGBM64)
Shinya Kitaoka 120a6e
        : rop_copy_rgbm_rgbm64(rin, rout, x1, y1, x2, y2, newx, newy);
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
    CASE RASRAS(RAS_RGBM64, RAS_RGBM)
Shinya Kitaoka 120a6e
        : rop_copy_rgbm64_rgbm(rin, rout, x1, y1, x2, y2, newx, newy);
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
    ?I 95 CASE RASRAS(RAS_RGB_64, RAS_RGB_)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_RGBM64, RAS_RGB_)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_RGB_64, RAS_RGBM)
Shinya Kitaoka 120a6e
        : rop_copy_rgbx64_rgbx(rin, rout, x1, y1, x2, y2, newx, newy);
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
    ?E 95
Shinya Kitaoka 120a6e
?I 81 CASE RASRAS(RAS_RGB, RAS_RGB16)
Shinya Kitaoka 120a6e
        : rop_copy_rgb_rgb16(rin, rout, x1, y1, x2, y2, newx, newy);
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
    ?E 81
Toshihiro Shimizu 890ddd
?E 58
Shinya Kitaoka 120a6e
?I 18 CASE RASRAS(RAS_RGB, RAS_RGB_)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_RGB, RAS_RGBM)
Shinya Kitaoka 120a6e
        : rop_copy_rgb_rgbm(rin, rout, x1, y1, x2, y2, newx, newy);
Shinya Kitaoka 120a6e
    ?D 41 return;
Shinya Kitaoka 120a6e
    ?E 41
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
?I 68 CASE RASRAS(RAS_BW, RAS_BW)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_BW, RAS_WB)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_WB, RAS_BW)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_WB, RAS_WB)
Shinya Kitaoka 120a6e
        :
Toshihiro Shimizu 890ddd
?D 69 rop_copy_bw_bw(rin, rout, x1, y1, x2, y2, newx, newy);
Shinya Kitaoka 120a6e
    ?E 69
Toshihiro Shimizu 890ddd
?I 69 rop_copy_bw(rin, rout, x1, y1, x2, y2, newx, newy);
Shinya Kitaoka 120a6e
    ?E 69
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?E 68
Shinya Kitaoka 120a6e
?E 18 CASE RASRAS(RAS_BW, RAS_CM16)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_WB, RAS_CM16)
Shinya Kitaoka 120a6e
        : rop_copy_bw_cm16(rin, rout, x1, y1, x2, y2, newx, newy);
Shinya Kitaoka 120a6e
    ?I 19
Toshihiro Shimizu 890ddd
?D 41 return;
Shinya Kitaoka 120a6e
    ?E 41
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
?I 84 CASE RASRAS(RAS_BW, RAS_CM24)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_WB, RAS_CM24)
Shinya Kitaoka 120a6e
        : rop_copy_bw_cm24(rin, rout, x1, y1, x2, y2, newx, newy);
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
    ?E 84 CASE RASRAS(RAS_BW, RAS_RGB_)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_BW, RAS_RGBM)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_WB, RAS_RGB_)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_WB, RAS_RGBM)
Shinya Kitaoka 120a6e
        : rop_copy_bw_rgbm(rin, rout, x1, y1, x2, y2, newx, newy);
Shinya Kitaoka 120a6e
    ?E 19
Toshihiro Shimizu 890ddd
?D 41 return;
Shinya Kitaoka 120a6e
    ?E 41
Toshihiro Shimizu 890ddd
?I 6
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
        CASE RASRAS(RAS_GR8, RAS_CM16)
Shinya Kitaoka 120a6e
        : rop_copy_gr8_cm16(rin, rout, x1, y1, x2, y2, newx, newy);
Shinya Kitaoka 120a6e
    ?D 41 return;
Shinya Kitaoka 120a6e
    ?E 41
Toshihiro Shimizu 890ddd
?I 23
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
?I 84 CASE RASRAS(RAS_GR8, RAS_CM24)
Shinya Kitaoka 120a6e
        : rop_copy_gr8_cm24(rin, rout, x1, y1, x2, y2, newx, newy);
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
    ?E 84 CASE RASRAS(RAS_CM8, RAS_CM16)
Shinya Kitaoka 120a6e
        : rop_copy_cm8_cm16(rin, rout, x1, y1, x2, y2, newx, newy);
Shinya Kitaoka 120a6e
    ?D 41 return;
Shinya Kitaoka 120a6e
    ?I 39 CASE RASRAS(RAS_CM16, RAS_BW)
Shinya Kitaoka 120a6e
        : rop_copy_cm8_cm16(rin, rout, x1, y1, x2, y2, newx, newy);
Shinya Kitaoka 120a6e
    return;
Shinya Kitaoka 120a6e
  DEFAULT:
Shinya Kitaoka 120a6e
    rop_copy_quantize(rasras, rin, rout, x1, y1, x2, y2, newx, newy);
Shinya Kitaoka 120a6e
    return;
Shinya Kitaoka 120a6e
    ?E 39
Toshihiro Shimizu 890ddd
?E 23
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  ?I 23 pixbits_in = rop_pixbits(rin->type);
Shinya Kitaoka 120a6e
  pixbytes_in      = rop_pixbytes(rin->type);
Shinya Kitaoka 120a6e
  pixbits_out      = rop_pixbits(rout->type);
Shinya Kitaoka 120a6e
  pixbytes_out     = rop_pixbytes(rout->type);
Shinya Kitaoka 120a6e
  ?E 41
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
?I 84 CASE RASRAS(RAS_CM8, RAS_CM24)
Shinya Kitaoka 120a6e
      : rop_copy_cm8_cm24(rin, rout, x1, y1, x2, y2, newx, newy);
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  ?E 84
Toshihiro Shimizu 890ddd
?E 23
Toshihiro Shimizu 890ddd
?D 41
Shinya Kitaoka 120a6e
      /* pixsize compatibili */
Shinya Kitaoka 120a6e
      if (pixbits_in != pixbits_out) {
Shinya Kitaoka 120a6e
    printf("### INTERNAL ERROR - rop_copy; different pixel size\n");
Shinya Kitaoka 120a6e
    return;
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  /* per adesso niente pixel non multipli di 8 bits */
Shinya Kitaoka 120a6e
  if (rop_fillerbits(rin->type) || rop_fillerbits(rout->type)) {
Shinya Kitaoka 120a6e
    printf("### INTERNAL ERROR - rop_copy; fillerbits not allowed\n");
Shinya Kitaoka 120a6e
    return;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  ?E 41
Toshihiro Shimizu 890ddd
?I 41
Shinya Kitaoka 120a6e
?D 52 CASE RASRAS(RAS_GR8, RAS_GR8)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_CM8, RAS_CM8)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_CM16, RAS_CM16)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_RGB, RAS_RGB)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_RGB_, RAS_RGB_)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_RGBM, RAS_RGB_)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_RGBM, RAS_RGBM)
Shinya Kitaoka 120a6e
      :
Toshihiro Shimizu 890ddd
?E 52
Toshihiro Shimizu 890ddd
?I 52
Shinya Kitaoka 120a6e
?D 73 CASE RASRAS(RAS_GR8, RAS_GR8)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_CM8, RAS_CM8)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_CM16, RAS_CM16)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_RGB16, RAS_RGB16)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_RGB, RAS_RGB)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_RGB_, RAS_RGB_)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_RGBM, RAS_RGB_)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_RGBM, RAS_RGBM)
Shinya Kitaoka 120a6e
      :
Shinya Kitaoka 120a6e
?I 58 __OR RASRAS(RAS_RGBM64, RAS_RGBM64)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_RGB_64, RAS_RGB_64)
Shinya Kitaoka 120a6e
      :
Toshihiro Shimizu 890ddd
?E 58
Shinya Kitaoka 120a6e
?E 52 __OR RASRAS(RAS_MBW16, RAS_MBW16)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_UNICM8, RAS_UNICM8)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_UNICM16, RAS_UNICM16)
Shinya Kitaoka 120a6e
      :
Shinya Kitaoka 120a6e
?I 72 __OR RASRAS(RAS_CM8S8, RAS_CM8S8)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_CM8S4, RAS_CM8S4)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_CM16S8, RAS_CM16S8)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_CM16S4, RAS_CM16S4)
Shinya Kitaoka 120a6e
      :
Toshihiro Shimizu 890ddd
?E 72 rop_copy_same(rin, rout, x1, y1, x2, y2, newx, newy);
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  ?D 71 CASE RASRAS(RAS_RGBM, RAS_UNICM16)
Shinya Kitaoka 120a6e
      :
Toshihiro Shimizu 890ddd
?E 71
Shinya Kitaoka 120a6e
?I 71 CASE RASRAS(RAS_RGB_, RAS_UNICM16)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_RGBM, RAS_UNICM16)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_RGB_, RAS_UNICM8)
Shinya Kitaoka 120a6e
      :
Shinya Kitaoka 120a6e
?E 71 __OR RASRAS(RAS_RGBM, RAS_UNICM8)
Shinya Kitaoka 120a6e
      :
Shinya Kitaoka 120a6e
?I 71 __OR RASRAS(RAS_RGB_, RAS_GR8)
Shinya Kitaoka 120a6e
      :
Shinya Kitaoka 120a6e
?E 71 __OR RASRAS(RAS_RGBM, RAS_GR8)
Shinya Kitaoka 120a6e
      :
Shinya Kitaoka 120a6e
?I 71 __OR RASRAS(RAS_RGB_, RAS_MBW16)
Shinya Kitaoka 120a6e
      :
Shinya Kitaoka 120a6e
?E 71 __OR RASRAS(RAS_RGBM, RAS_MBW16)
Shinya Kitaoka 120a6e
      :
Shinya Kitaoka 120a6e
?I 72 __OR RASRAS(RAS_RGB_, RAS_BW)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_RGBM, RAS_BW)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_RGB16, RAS_BW)
Shinya Kitaoka 120a6e
      :
Toshihiro Shimizu 890ddd
?E 72
Shinya Kitaoka 120a6e
?I 42 __OR RASRAS(RAS_CM16, RAS_UNICM16)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_CM16, RAS_UNICM8)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_CM16, RAS_GR8)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_CM16, RAS_MBW16)
Shinya Kitaoka 120a6e
      :
Shinya Kitaoka 120a6e
?E 42 __OR RASRAS(RAS_UNICM16, RAS_UNICM8)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_UNICM16, RAS_GR8)
Shinya Kitaoka 120a6e
      :
Shinya Kitaoka 120a6e
?I 71 __OR RASRAS(RAS_RGB_, RAS_CM16S8)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_RGBM, RAS_CM16S8)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_RGB_, RAS_CM16S4)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_RGBM, RAS_CM16S4)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_RGB_, RAS_CM8S8)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_RGBM, RAS_CM8S8)
Shinya Kitaoka 120a6e
      :
Shinya Kitaoka 120a6e
?I 72 __OR RASRAS(RAS_RGB16, RAS_CM8S8)
Shinya Kitaoka 120a6e
      :
Shinya Kitaoka 120a6e
?E 72 __OR RASRAS(RAS_RGB_, RAS_CM8S4)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_RGBM, RAS_CM8S4)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_CM16, RAS_CM16S8)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_CM16, RAS_CM16S4)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_CM16, RAS_CM8S8)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_CM16, RAS_CM8S4)
Shinya Kitaoka 120a6e
      :
Toshihiro Shimizu 890ddd
?E 71
Shinya Kitaoka 120a6e
?D 42 __OR RASRAS(RAS_CM16, RAS_MBW16)
Shinya Kitaoka 120a6e
      :
Toshihiro Shimizu 890ddd
?E 42 rop_copy_quantize(rasras, rin, rout, x1, y1, x2, y2, newx, newy);
Shinya Kitaoka 120a6e
  ?E 41
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?E 73
Shinya Kitaoka 120a6e
?I 54 CASE RASRAS(RAS_BW, RAS_RGB16)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_WB, RAS_RGB16)
Shinya Kitaoka 120a6e
      : rop_copy_bw_rgb16(rin, rout, x1, y1, x2, y2, newx, newy);
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  CASE RASRAS(RAS_GR8, RAS_RGB16)
Shinya Kitaoka 120a6e
      : rop_copy_gr8_rgb16(rin, rout, x1, y1, x2, y2, newx, newy);
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  ?E 54
Shinya Kitaoka 120a6e
?I 52 CASE RASRAS(RAS_CM16, RAS_RGB16)
Shinya Kitaoka 120a6e
      : rop_copy_cm16_rgb16(rin, rout, x1, y1, x2, y2, newx, newy);
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  ?I 84 CASE RASRAS(RAS_CM24, RAS_RGB16)
Shinya Kitaoka 120a6e
      : rop_copy_cm24_rgb16(rin, rout, x1, y1, x2, y2, newx, newy);
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  ?E 84 CASE RASRAS(RAS_RGB_, RAS_RGB16)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_RGBM, RAS_RGB16)
Shinya Kitaoka 120a6e
      : rop_copy_rgbx_rgb16(rin, rout, x1, y1, x2, y2, newx, newy);
Shinya Kitaoka 120a6e
  ?I 70
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
?I 95 CASE RASRAS(RAS_RGB_64, RAS_RGB16)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_RGBM64, RAS_RGB16)
Shinya Kitaoka 120a6e
      : rop_copy_rgbx64_rgb16(rin, rout, x1, y1, x2, y2, newx, newy);
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  ?E 95
Shinya Kitaoka 120a6e
?D 74 CASE RASRAS(RAS_RGB16, RAS_RGBM)
Shinya Kitaoka 120a6e
      :
Toshihiro Shimizu 890ddd
?E 74
Shinya Kitaoka 120a6e
?I 74 CASE RASRAS(RAS_RGB16, RAS_RGB_)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_RGB16, RAS_RGBM)
Shinya Kitaoka 120a6e
      :
Toshihiro Shimizu 890ddd
?E 74 rop_copy_rgb16_rgbm(rin, rout, x1, y1, x2, y2, newx, newy);
Shinya Kitaoka 120a6e
  ?E 70
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
?I 67 CASE RASRAS(RAS_RGB_, RAS_RGB)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_RGBM, RAS_RGB)
Shinya Kitaoka 120a6e
      : rop_copy_rgbx_rgb(rin, rout, x1, y1, x2, y2, newx, newy);
Shinya Kitaoka 120a6e
  ?I 73
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
?D 83 CASE RASRAS(RAS_RGBM, RAS_UNICM16)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_RGBM, RAS_CM16S8)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_RGBM, RAS_CM16S4)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_RGBM, RAS_MBW16)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_RGBM, RAS_UNICM8)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_RGBM, RAS_GR8)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_RGBM, RAS_CM8S8)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_RGBM, RAS_CM8S4)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_RGBM, RAS_BW)
Shinya Kitaoka 120a6e
      :
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
      __OR RASRAS(RAS_RGB_, RAS_UNICM16)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_RGB_, RAS_CM16S8)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_RGB_, RAS_CM16S4)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_RGB_, RAS_MBW16)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_RGB_, RAS_UNICM8)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_RGB_, RAS_GR8)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_RGB_, RAS_CM8S8)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_RGB_, RAS_CM8S4)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_RGB_, RAS_BW)
Shinya Kitaoka 120a6e
      :
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
      __OR RASRAS(RAS_RGB16, RAS_CM8S8)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_RGB16, RAS_BW)
Shinya Kitaoka 120a6e
      :
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
      __OR RASRAS(RAS_CM16, RAS_UNICM16)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_CM16, RAS_CM16S8)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_CM16, RAS_CM16S4)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_CM16, RAS_MBW16)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_CM16, RAS_UNICM8)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_CM16, RAS_GR8)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_CM16, RAS_CM8S8)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_CM16, RAS_CM8S4)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_CM16, RAS_BW)
Shinya Kitaoka 120a6e
      :
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
      __OR RASRAS(RAS_UNICM16, RAS_UNICM8)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_UNICM16, RAS_GR8)
Shinya Kitaoka 120a6e
      :
Toshihiro Shimizu 890ddd
?E 83
Shinya Kitaoka 120a6e
?I 83 CASE RASRAS(RAS_RGBM, RAS_CM16S8)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_RGBM, RAS_CM16S4)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_RGBM, RAS_MBW16)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_RGBM, RAS_GR8)
Shinya Kitaoka 120a6e
      :
Shinya Kitaoka 120a6e
?I 90 __OR RASRAS(RAS_RGBM64, RAS_GR8)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_RGBM, RAS_GR16)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_RGBM64, RAS_GR16)
Shinya Kitaoka 120a6e
      :
Shinya Kitaoka 120a6e
?E 90 __OR RASRAS(RAS_RGBM, RAS_CM8S8)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_RGBM, RAS_CM8S4)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_RGBM, RAS_BW)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_RGB_, RAS_CM16S8)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_RGB_, RAS_CM16S4)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_RGB_, RAS_MBW16)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_RGB_, RAS_GR8)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_RGB_, RAS_CM8S8)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_RGB_, RAS_CM8S4)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_RGB_, RAS_BW)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_RGB16, RAS_CM8S8)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_RGB16, RAS_BW)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_CM16, RAS_CM16S8)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_CM16, RAS_CM16S4)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_CM16, RAS_MBW16)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_CM16, RAS_GR8)
Shinya Kitaoka 120a6e
      :
Shinya Kitaoka 120a6e
?I 90 __OR RASRAS(RAS_CM16, RAS_GR16)
Shinya Kitaoka 120a6e
      :
Shinya Kitaoka 120a6e
?E 90 __OR RASRAS(RAS_CM16, RAS_CM8S8)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_CM16, RAS_CM8S4)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_CM16, RAS_BW)
Shinya Kitaoka 120a6e
      :
Shinya Kitaoka 120a6e
?I 84 __OR RASRAS(RAS_CM24, RAS_CM16S8)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_CM24, RAS_CM16S4)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_CM24, RAS_MBW16)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_CM24, RAS_GR8)
Shinya Kitaoka 120a6e
      :
Shinya Kitaoka 120a6e
?D 89 __OR RASRAS(RAS_CM24, RAS_CM8S8)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_CM24, RAS_CM8S4)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_CM24, RAS_BW)
Shinya Kitaoka 120a6e
      :
Toshihiro Shimizu 890ddd
?E 84
Toshihiro Shimizu 890ddd
?E 83 rop_copy_quantize(rasras, rin, rout, x1, y1, x2, y2, newx, newy);
Shinya Kitaoka 120a6e
  ?E 73
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?E 67
Toshihiro Shimizu 890ddd
?E 52
Toshihiro Shimizu 890ddd
?D 41
Shinya Kitaoka 120a6e
      /* copia */
Toshihiro Shimizu 890ddd
?D 10 rowsize = (pixbits_in * (x2 - x1 + 1)) >> 3;
Shinya Kitaoka 120a6e
  ?I 7
Toshihiro Shimizu 890ddd
#ifdef CHE_CAVOLO_VADO_A_SCRIVERE___WALTER
Toshihiro Shimizu 890ddd
?E 7 wrapin = (rin->wrap * pixbits_in) >> 3;
Shinya Kitaoka 120a6e
  wrapout    = (rout->wrap * pixbits_out) >> 3;
Shinya Kitaoka 120a6e
  ?D 7
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?E 7
Toshihiro Shimizu 890ddd
?I 7
Toshihiro Shimizu 890ddd
#else
Shinya Kitaoka 120a6e
      wrapin = rin->wrap;
Shinya Kitaoka 120a6e
  wrapout    = rout->wrap;
Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd
?E 7 rowin = (char *)rin->buffer + y1 * wrapin + ((x1 * pixbits_in) >> 3);
Shinya Kitaoka 120a6e
  rowout = (char *)rout->buffer + newy * wrapout + ((newx * pixbits_out) >> 3);
Toshihiro Shimizu 890ddd
?E 10
Toshihiro Shimizu 890ddd
?I 10
Toshihiro Shimizu 890ddd
?D 11
Toshihiro Shimizu 890ddd
rowsize = pixbytes_in * (x2-x1+1));
Toshihiro Shimizu 890ddd
?E 11
Shinya Kitaoka 120a6e
?I 11 rowsize   = pixbytes_in * (x2 - x1 + 1);
Toshihiro Shimizu 890ddd
?E 11 bytewrapin = rin->wrap * pixbytes_in;
Shinya Kitaoka 120a6e
bytewrapout      = rout->wrap * pixbytes_out;
Toshihiro Shimizu 890ddd
?D 12 rowin = (UCHAR *)rin->buffer + y1 * wrapin + ((x1 * pixbits_in) >> 3);
Toshihiro Shimizu 890ddd
rowout = (UCHAR *)rout->buffer + newy * wrapout + ((newx * pixbits_out) >> 3);
Toshihiro Shimizu 890ddd
?E 12
Shinya Kitaoka 120a6e
?I 12 rowin =
Shinya Kitaoka 120a6e
    (UCHAR *)rin->buffer + y1 * bytewrapin + ((x1 * pixbits_in) >> 3);
Shinya Kitaoka 120a6e
rowout =
Shinya Kitaoka 120a6e
    (UCHAR *)rout->buffer + newy * bytewrapout + ((newx * pixbits_out) >> 3);
Toshihiro Shimizu 890ddd
?E 12
Toshihiro Shimizu 890ddd
?E 10 d = y2 - y1 + 1;
Toshihiro Shimizu 890ddd
while (d-- > 0) {
Shinya Kitaoka 120a6e
  memmove(rowout, rowin, rowsize);
Shinya Kitaoka 120a6e
  ?D 10 rowin += wrapin;
Shinya Kitaoka 120a6e
  rowout += wrapout;
Shinya Kitaoka 120a6e
  ?E 10
Toshihiro Shimizu 890ddd
?I 10 rowin += bytewrapin;
Shinya Kitaoka 120a6e
  rowout += bytewrapout;
Shinya Kitaoka 120a6e
  ?E 41
Toshihiro Shimizu 890ddd
?I 41 DEFAULT :
Toshihiro Shimizu 890ddd
?D 52 assert(FALSE);
Shinya Kitaoka 120a6e
  ?E 52
Toshihiro Shimizu 890ddd
?I 52 assert(!"rop_copy; invalid raster combination");
Shinya Kitaoka 120a6e
  ?E 52
Toshihiro Shimizu 890ddd
?E 41
Toshihiro Shimizu 890ddd
?I 20
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd
?D 84
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
    /* copia un rettangolo da rin a rout.
Shinya Kitaoka 120a6e
* Le coordinate sono relative ai due raster: (0, 0) corrisponde
Shinya Kitaoka 120a6e
* al primo pixel del raster.
Shinya Kitaoka 120a6e
* Riduce le dimensioni di un certo fattore facendo la media dei valori
Shinya Kitaoka 120a6e
* dei pixel.
Shinya Kitaoka 120a6e
*/
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
    void
Shinya Kitaoka 120a6e
    rop_reduce(RASTER *rin, RASTER *rout, int x1, int y1, int x2, int y2,
Shinya Kitaoka 120a6e
               int newx, int newy, int factor) {
Shinya Kitaoka 120a6e
  int tmp, newlx, newly;
Shinya Kitaoka 120a6e
  int rasras;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  if (factor == 1) rop_copy(rin, rout, x1, y1, x2, y2, newx, newy);
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  /* raddrizzo gli estremi */
Shinya Kitaoka 120a6e
  if (x1 > x2) {
Shinya Kitaoka 120a6e
    tmp = x1;
Shinya Kitaoka 120a6e
    x1  = x2;
Shinya Kitaoka 120a6e
    x2  = tmp;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  if (y1 > y2) {
Shinya Kitaoka 120a6e
    tmp = y1;
Shinya Kitaoka 120a6e
    y1  = y2;
Shinya Kitaoka 120a6e
    y2  = tmp;
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  /* controllo gli sconfinamenti */
Shinya Kitaoka 120a6e
  newlx = (x2 - x1 + factor) / factor;
Shinya Kitaoka 120a6e
  newly = (y2 - y1 + factor) / factor;
Shinya Kitaoka 120a6e
  if (x1 < 0 || y1 < 0 || x2 >= rin->lx || y2 >= rin->ly || newx < 0 ||
Shinya Kitaoka 120a6e
      newy < 0 || newx + newlx > rout->lx || newy + newly > rout->ly) {
Shinya Kitaoka 120a6e
    printf("### INTERNAL ERROR - rop_reduce; access violation\n");
Shinya Kitaoka 120a6e
    return;
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  rasras = RASRAS(rin->type, rout->type);
Shinya Kitaoka 120a6e
  switch (rasras) {
Shinya Kitaoka 120a6e
    CASE RASRAS(RAS_GR8, RAS_RGB_)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_GR8, RAS_RGBM)
Shinya Kitaoka 120a6e
        : rop_reduce_gr8_rgbm(rin, rout, x1, y1, x2, y2, newx, newy, factor);
Shinya Kitaoka 120a6e
    return;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
    CASE RASRAS(RAS_CM16, RAS_RGB_)
Shinya Kitaoka 120a6e
        :
Shinya Kitaoka 120a6e
?D 28 __OR RASRAS(RAS_CM16, RAS_RGBM)
Shinya Kitaoka 120a6e
        :
Toshihiro Shimizu 890ddd
?E 28
Toshihiro Shimizu 890ddd
?I 28
Toshihiro Shimizu 890ddd
?D 46 rop_reduce_cm16_rgb_(rin, rout, x1, y1, x2, y2, newx, newy, factor);
Shinya Kitaoka 120a6e
    ?E 46
Toshihiro Shimizu 890ddd
?I 46 rop_reduce_cm16_rgbx(rin, rout, x1, y1, x2, y2, newx, newy, factor);
Shinya Kitaoka 120a6e
    ?E 46 return;
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
    CASE RASRAS(RAS_CM16, RAS_RGBM)
Shinya Kitaoka 120a6e
        :
Toshihiro Shimizu 890ddd
?E 28 rop_reduce_cm16_rgbm(rin, rout, x1, y1, x2, y2, newx, newy, factor);
Shinya Kitaoka 120a6e
    return;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
    ?I 81 CASE RASRAS(RAS_RGB, RAS_RGB16)
Shinya Kitaoka 120a6e
        : rop_reduce_rgb_rgb16(rin, rout, x1, y1, x2, y2, newx, newy, factor);
Shinya Kitaoka 120a6e
    return;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
    ?E 81 CASE RASRAS(RAS_RGB, RAS_RGB_)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_RGB, RAS_RGBM)
Shinya Kitaoka 120a6e
        : rop_reduce_rgb_rgbm(rin, rout, x1, y1, x2, y2, newx, newy, factor);
Shinya Kitaoka 120a6e
    return;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
    CASE RASRAS(RAS_BW, RAS_CM16)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_WB, RAS_CM16)
Shinya Kitaoka 120a6e
        : rop_reduce_bw_cm16(rin, rout, x1, y1, x2, y2, newx, newy, factor);
Shinya Kitaoka 120a6e
    return;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
    CASE RASRAS(RAS_BW, RAS_RGB_)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_BW, RAS_RGBM)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_WB, RAS_RGB_)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_WB, RAS_RGBM)
Shinya Kitaoka 120a6e
        : rop_reduce_bw_rgbm(rin, rout, x1, y1, x2, y2, newx, newy, factor);
Shinya Kitaoka 120a6e
    return;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
    CASE RASRAS(RAS_GR8, RAS_CM16)
Shinya Kitaoka 120a6e
        : rop_reduce_gr8_cm16(rin, rout, x1, y1, x2, y2, newx, newy, factor);
Shinya Kitaoka 120a6e
    return;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
    CASE RASRAS(RAS_WB, RAS_GR8)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_BW, RAS_GR8)
Shinya Kitaoka 120a6e
        : rop_reduce_bw_gr8(rin, rout, x1, y1, x2, y2, newx, newy, factor);
Shinya Kitaoka 120a6e
    return;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
    CASE RASRAS(RAS_GR8, RAS_GR8)
Shinya Kitaoka 120a6e
        : rop_reduce_gr8(rin, rout, x1, y1, x2, y2, newx, newy, factor);
Shinya Kitaoka 120a6e
    return;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
    CASE RASRAS(RAS_CM16, RAS_CM16)
Shinya Kitaoka 120a6e
        : rop_reduce_cm16(rin, rout, x1, y1, x2, y2, newx, newy, factor);
Shinya Kitaoka 120a6e
    return;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
    CASE RASRAS(RAS_RGB_, RAS_RGB_)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_RGB_, RAS_RGBM)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_RGBM, RAS_RGB_)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_RGBM, RAS_RGBM)
Shinya Kitaoka 120a6e
        : rop_reduce_rgbm(rin, rout, x1, y1, x2, y2, newx, newy, factor);
Shinya Kitaoka 120a6e
    return;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  DEFAULT:
Shinya Kitaoka 120a6e
    ?D 52 printf(
Shinya Kitaoka 120a6e
        "### INTERNAL ERROR - rop_reduce; invalid raster combination\n");
Shinya Kitaoka 120a6e
    ?E 52
Toshihiro Shimizu 890ddd
?I 52 assert(!"rop_reduce; invalid raster combination");
Shinya Kitaoka 120a6e
    ?E 52
Toshihiro Shimizu 890ddd
?I 28
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd
?E 84
Toshihiro Shimizu 890ddd
?I 39
Shinya Kitaoka 120a6e
    /* copia un rettangolo da rin a rout.
Shinya Kitaoka 120a6e
* Le coordinate sono relative ai due raster: (0, 0) corrisponde
Shinya Kitaoka 120a6e
* al primo pixel del raster.
Shinya Kitaoka 120a6e
* Riduce le dimensioni di un fattore di subsampling pari a shrink.
Shinya Kitaoka 120a6e
* I due raster devono essere dello stesso tipo.
Shinya Kitaoka 120a6e
*/
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
    void
Shinya Kitaoka 120a6e
    rop_shrink(RASTER *rin, RASTER *rout, int x1, int y1, int x2, int y2,
Shinya Kitaoka 120a6e
               int newx, int newy, int shrink) {
Shinya Kitaoka 120a6e
  UCHAR *curr_pixin, *bufferin;
Shinya Kitaoka 120a6e
  int i, j, tmp, bpp;
Shinya Kitaoka 120a6e
  int xsize, ysize, wrapin, wrapout;
Shinya Kitaoka 120a6e
  UCHAR *curr_pixout, *bufferout;
Shinya Kitaoka 120a6e
  ?I 84 USHORT *curr_pixin_2, *curr_pixout_2;
Shinya Kitaoka 120a6e
  ULONG *curr_pixin_4, *curr_pixout_4;
Shinya Kitaoka 120a6e
  ?E 84
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
      if (shrink == 1) return;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  /* raddrizzo gli estremi */
Shinya Kitaoka 120a6e
  if (x1 > x2) {
Shinya Kitaoka 120a6e
    tmp = x1;
Shinya Kitaoka 120a6e
    x1  = x2;
Shinya Kitaoka 120a6e
    x2  = tmp;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  if (y1 > y2) {
Shinya Kitaoka 120a6e
    tmp = y1;
Shinya Kitaoka 120a6e
    y1  = y2;
Shinya Kitaoka 120a6e
    y2  = tmp;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  ?E 39
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?I 39
Shinya Kitaoka 120a6e
      /* controllo gli sconfinamenti */
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
      if (x1 < 0 || y1 < 0 || x2 >= rin->lx || y2 >= rin->ly || newx < 0 ||
Shinya Kitaoka 120a6e
          newy < 0 || newx + (x2 - x1 + shrink) / shrink > rout->lx ||
Shinya Kitaoka 120a6e
          newy + (y2 - y1 + shrink) / shrink > rout->ly ||
Shinya Kitaoka 120a6e
          rin->type != rout->type) {
Shinya Kitaoka 120a6e
    printf("### INTERNAL ERROR - rop_shrink; access violation\n");
Shinya Kitaoka 120a6e
    return;
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  bpp = rop_pixbytes(rin->type);
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  xsize = (x2 - x1 + shrink) / shrink;
Shinya Kitaoka 120a6e
  ysize = (y2 - y1 + shrink) / shrink;
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  wrapin = rin->wrap * bpp;
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  bufferin = (UCHAR *)(rin->buffer) + wrapin * y1 + x1 * bpp;
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  wrapout   = rout->wrap * bpp;
Shinya Kitaoka 120a6e
  bufferout = (UCHAR *)(rout->buffer) + wrapout * newy + newx * bpp;
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  wrapin *= shrink;
Shinya Kitaoka 120a6e
  ?D 84 shrink *= bpp;
Shinya Kitaoka 120a6e
  ?E 84
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
      for (i = 0; i < ysize; i++) {
Shinya Kitaoka 120a6e
    curr_pixin  = bufferin;
Shinya Kitaoka 120a6e
    curr_pixout = bufferout;
Shinya Kitaoka 120a6e
    bufferin += wrapin;
Shinya Kitaoka 120a6e
    bufferout += wrapout;
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
    ?D 84 for (j = 0; j < xsize; j++)
Toshihiro Shimizu 890ddd
?E 84
Toshihiro Shimizu 890ddd
?I 84 switch (bpp)
Shinya Kitaoka 120a6e
?E 84 {
Shinya Kitaoka 120a6e
      ?D 84 memcpy(curr_pixout, curr_pixin, bpp);
Shinya Kitaoka 120a6e
      curr_pixin += shrink;
Shinya Kitaoka 120a6e
      curr_pixout += bpp;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd
?E 39
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
    /* copia un rettangolo da rin a rout.
Shinya Kitaoka 120a6e
* Le coordinate sono relative ai due raster: (0, 0) corrisponde
Shinya Kitaoka 120a6e
* al primo pixel del raster.
Shinya Kitaoka 120a6e
* Riduce le dimensioni di una potenza di due facendo la media dei valori
Toshihiro Shimizu 890ddd
?D 29
Shinya Kitaoka 120a6e
* dei pixel, ma solo su circa 3/4 dei pixel.
Toshihiro Shimizu 890ddd
?E 29
Toshihiro Shimizu 890ddd
?I 29
Shinya Kitaoka 120a6e
* dei pixel, ma solo su una parte dei pixel.
Toshihiro Shimizu 890ddd
?E 29
Shinya Kitaoka 120a6e
*/
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
    void
Shinya Kitaoka 120a6e
    rop_zoom_out(RASTER *rin, RASTER *rout, int x1, int y1, int x2, int y2,
Shinya Kitaoka 120a6e
                 int newx, int newy, int abs_zoom_level) {
Shinya Kitaoka 120a6e
  int tmp, newlx, newly;
Shinya Kitaoka 120a6e
  int rasras, factor, abszl;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  abszl  = abs_zoom_level;
Shinya Kitaoka 120a6e
  factor = 1 << abs_zoom_level;
Shinya Kitaoka 120a6e
  if (factor == 1) rop_copy(rin, rout, x1, y1, x2, y2, newx, newy);
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  /* raddrizzo gli estremi */
Shinya Kitaoka 120a6e
  if (x1 > x2) {
Shinya Kitaoka 120a6e
    tmp = x1;
Shinya Kitaoka 120a6e
    x1  = x2;
Shinya Kitaoka 120a6e
    x2  = tmp;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  if (y1 > y2) {
Shinya Kitaoka 120a6e
    tmp = y1;
Shinya Kitaoka 120a6e
    y1  = y2;
Shinya Kitaoka 120a6e
    y2  = tmp;
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  /* controllo gli sconfinamenti */
Shinya Kitaoka 120a6e
  newlx = (x2 - x1 + factor) / factor;
Shinya Kitaoka 120a6e
  newly = (y2 - y1 + factor) / factor;
Shinya Kitaoka 120a6e
  if (x1 < 0 || y1 < 0 || x2 >= rin->lx || y2 >= rin->ly || newx < 0 ||
Shinya Kitaoka 120a6e
      newy < 0 || newx + newlx > rout->lx || newy + newly > rout->ly)
Shinya Kitaoka 120a6e
    ?D 30 {
Shinya Kitaoka 120a6e
      printf("### INTERNAL ERROR - rop_zoom_out; access violation\n");
Shinya Kitaoka 120a6e
      return;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
  ?E 30
Shinya Kitaoka 120a6e
?I 30 {
Shinya Kitaoka 120a6e
    printf(
Shinya Kitaoka 120a6e
        "### INTERNAL ERROR - rop_zoom_out; access violation\n"
Shinya Kitaoka 120a6e
        " ((%d,%d)(%d,%d)in(%dx%d)->(%d,%d)in(%dx%d))\n",
Shinya Kitaoka 120a6e
        x1, y1, x2, y2, rin->lx, rin->ly, newx, newy, rout->lx, rout->ly);
Shinya Kitaoka 120a6e
    return;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  ?E 30
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
      rasras = RASRAS(rin->type, rout->type);
Shinya Kitaoka 120a6e
  switch (rasras) {
Shinya Kitaoka 120a6e
    CASE RASRAS(RAS_GR8, RAS_RGB_)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_GR8, RAS_RGBM)
Shinya Kitaoka 120a6e
        : rop_zoom_out_gr8_rgbm(rin, rout, x1, y1, x2, y2, newx, newy, abszl);
Shinya Kitaoka 120a6e
    ?D 57 return;
Shinya Kitaoka 120a6e
    ?E 57
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        CASE RASRAS(RAS_CM16, RAS_RGB_)
Shinya Kitaoka 120a6e
        :
Toshihiro Shimizu 890ddd
?D 46 rop_zoom_out_cm16_rgb_(rin, rout, x1, y1, x2, y2, newx, newy, abszl);
Shinya Kitaoka 120a6e
    ?E 46
Toshihiro Shimizu 890ddd
?I 46 rop_zoom_out_cm16_rgbx(rin, rout, x1, y1, x2, y2, newx, newy, abszl);
Shinya Kitaoka 120a6e
    ?E 46
Toshihiro Shimizu 890ddd
?D 57 return;
Shinya Kitaoka 120a6e
    ?E 57
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        CASE RASRAS(RAS_CM16, RAS_RGBM)
Shinya Kitaoka 120a6e
        : rop_zoom_out_cm16_rgbm(rin, rout, x1, y1, x2, y2, newx, newy, abszl);
Shinya Kitaoka 120a6e
    ?D 57 return;
Shinya Kitaoka 120a6e
    ?E 57
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
?I 81 CASE RASRAS(RAS_RGB, RAS_RGB16)
Shinya Kitaoka 120a6e
        : rop_zoom_out_rgb_rgb16(rin, rout, x1, y1, x2, y2, newx, newy, abszl);
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
    ?E 81 CASE RASRAS(RAS_RGB, RAS_RGB_)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_RGB, RAS_RGBM)
Shinya Kitaoka 120a6e
        : rop_zoom_out_rgb_rgbm(rin, rout, x1, y1, x2, y2, newx, newy, abszl);
Shinya Kitaoka 120a6e
    ?D 57 return;
Shinya Kitaoka 120a6e
    ?E 57
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        CASE RASRAS(RAS_BW, RAS_CM16)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_WB, RAS_CM16)
Shinya Kitaoka 120a6e
        : rop_zoom_out_bw_cm16(rin, rout, x1, y1, x2, y2, newx, newy, abszl);
Shinya Kitaoka 120a6e
    ?D 57 return;
Shinya Kitaoka 120a6e
    ?E 57
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        CASE RASRAS(RAS_BW, RAS_RGB_)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_BW, RAS_RGBM)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_WB, RAS_RGB_)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_WB, RAS_RGBM)
Shinya Kitaoka 120a6e
        : rop_zoom_out_bw_rgbm(rin, rout, x1, y1, x2, y2, newx, newy, abszl);
Shinya Kitaoka 120a6e
    ?D 57 return;
Shinya Kitaoka 120a6e
    ?E 57
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        CASE RASRAS(RAS_GR8, RAS_CM16)
Shinya Kitaoka 120a6e
        : rop_zoom_out_gr8_cm16(rin, rout, x1, y1, x2, y2, newx, newy, abszl);
Shinya Kitaoka 120a6e
    ?D 57 return;
Shinya Kitaoka 120a6e
    ?E 57
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        CASE RASRAS(RAS_WB, RAS_GR8)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_BW, RAS_GR8)
Shinya Kitaoka 120a6e
        : rop_zoom_out_bw_gr8(rin, rout, x1, y1, x2, y2, newx, newy, abszl);
Shinya Kitaoka 120a6e
    ?D 57 return;
Shinya Kitaoka 120a6e
    ?E 57
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        CASE RASRAS(RAS_GR8, RAS_GR8)
Shinya Kitaoka 120a6e
        : rop_zoom_out_gr8(rin, rout, x1, y1, x2, y2, newx, newy, abszl);
Shinya Kitaoka 120a6e
    ?D 57 return;
Shinya Kitaoka 120a6e
    ?E 57
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        CASE RASRAS(RAS_CM16, RAS_CM16)
Shinya Kitaoka 120a6e
        : rop_zoom_out_cm16(rin, rout, x1, y1, x2, y2, newx, newy, abszl);
Shinya Kitaoka 120a6e
    ?D 57 return;
Shinya Kitaoka 120a6e
    ?E 57
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        CASE RASRAS(RAS_RGB_, RAS_RGB_)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_RGB_, RAS_RGBM)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_RGBM, RAS_RGB_)
Shinya Kitaoka 120a6e
        :
Shinya Kitaoka 120a6e
?D 46 __OR RASRAS(RAS_RGBM, RAS_RGBM)
Shinya Kitaoka 120a6e
        :
Toshihiro Shimizu 890ddd
?E 46
Toshihiro Shimizu 890ddd
?I 46 rop_zoom_out_rgbx(rin, rout, x1, y1, x2, y2, newx, newy, abszl);
Shinya Kitaoka 120a6e
    ?D 57 return;
Shinya Kitaoka 120a6e
    ?E 57
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
        CASE RASRAS(RAS_RGBM, RAS_RGBM)
Shinya Kitaoka 120a6e
        :
Toshihiro Shimizu 890ddd
?E 46 rop_zoom_out_rgbm(rin, rout, x1, y1, x2, y2, newx, newy, abszl);
Shinya Kitaoka 120a6e
    ?D 57 return;
Shinya Kitaoka 120a6e
    ?E 57
Toshihiro Shimizu 890ddd
?I 54
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
?I 61 CASE RASRAS(RAS_BW, RAS_RGB16)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_WB, RAS_RGB16)
Shinya Kitaoka 120a6e
        : rop_zoom_out_bw_rgb16(rin, rout, x1, y1, x2, y2, newx, newy, abszl);
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
    ?E 61 CASE RASRAS(RAS_GR8, RAS_RGB16)
Shinya Kitaoka 120a6e
        : rop_zoom_out_gr8_rgb16(rin, rout, x1, y1, x2, y2, newx, newy, abszl);
Shinya Kitaoka 120a6e
    ?E 54
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
?I 52 CASE RASRAS(RAS_CM16, RAS_RGB16)
Shinya Kitaoka 120a6e
        : rop_zoom_out_cm16_rgb16(rin, rout, x1, y1, x2, y2, newx, newy, abszl);
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
    CASE RASRAS(RAS_RGB_, RAS_RGB16)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_RGBM, RAS_RGB16)
Shinya Kitaoka 120a6e
        : rop_zoom_out_rgbx_rgb16(rin, rout, x1, y1, x2, y2, newx, newy, abszl);
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
    ?E 52 DEFAULT :
Shinya Kitaoka 120a6e
?D 52 printf(
Shinya Kitaoka 120a6e
        "### INTERNAL ERROR - rop_zoom_out; invalid raster combination\n");
Shinya Kitaoka 120a6e
    ?E 52
Toshihiro Shimizu 890ddd
?I 52 assert(!"rop_zoom_out; invalid raster combination");
Shinya Kitaoka 120a6e
    ?E 52
Toshihiro Shimizu 890ddd
?E 28
Toshihiro Shimizu 890ddd
?E 20
Toshihiro Shimizu 890ddd
?E 10
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?D 14
Toshihiro Shimizu 890ddd
/*   TOPPA TEMPORANEA PER INPUT, rifare completamente
Toshihiro Shimizu 890ddd
 *
Toshihiro Shimizu 890ddd
 *   chiedere a Walter
Toshihiro Shimizu 890ddd
?E 14
Toshihiro Shimizu 890ddd
?I 14
Toshihiro Shimizu 890ddd
/* copia un rettangolo da rin a rout,
Toshihiro Shimizu 890ddd
 * specchiandolo orizzontalmente se mirror e' dispari,
Toshihiro Shimizu 890ddd
 * e poi ruotandolo del multiplo di novanta gradi specificato
Toshihiro Shimizu 890ddd
 * da ninety in senso antiorario
Toshihiro Shimizu 890ddd
?E 14
Toshihiro Shimizu 890ddd
 *
Toshihiro Shimizu 890ddd
 */
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?I 14
Toshihiro Shimizu 890ddd
?D 17
Toshihiro Shimizu 890ddd
/* RIVEDERE COMPLETAMENTE, PER ADESSO FUNZIA SOLO PER BW->BW e GR8->GR8 */
Toshihiro Shimizu 890ddd
?E 17
Toshihiro Shimizu 890ddd
?I 17
Toshihiro Shimizu 890ddd
?D 23
Toshihiro Shimizu 890ddd
/* RIVEDERE COMPLETAMENTE, PER ADESSO FUNZIA SOLO PER POCHI TIPI DI RASTER */
Toshihiro Shimizu 890ddd
?E 17
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?E 23
Toshihiro Shimizu 890ddd
?E 14
Toshihiro Shimizu 890ddd
void rop_copy_90(RASTER *rin, RASTER *rout,
Toshihiro Shimizu 890ddd
                 int x1, int y1, int x2, int y2, int newx, int newy,
Toshihiro Shimizu 890ddd
?D 14
Toshihiro Shimizu 890ddd
		 int ninety, int flip)
Toshihiro Shimizu 890ddd
?E 14
Toshihiro Shimizu 890ddd
?I 14
Toshihiro Shimizu 890ddd
?D 15
Toshihiro Shimizu 890ddd
		 int mirror, int ninety)
Toshihiro Shimizu 890ddd
?E 15
Toshihiro Shimizu 890ddd
?I 15
Toshihiro Shimizu 890ddd
                 int mirror, int ninety)
Toshihiro Shimizu 890ddd
?E 15
Toshihiro Shimizu 890ddd
?E 14
Toshihiro Shimizu 890ddd
{
Shinya Kitaoka 120a6e
  ?D 13 char *rowin, *rowout;
Shinya Kitaoka 120a6e
  ?E 13
Toshihiro Shimizu 890ddd
?I 13
Toshihiro Shimizu 890ddd
?D 23 UCHAR *rowin, *rowout;
Shinya Kitaoka 120a6e
  ?E 13
Toshihiro Shimizu 890ddd
?D 10 int rowsize, wrapin, wrapout, d, tmp;
Shinya Kitaoka 120a6e
  ?E 10
Toshihiro Shimizu 890ddd
?I 10
Toshihiro Shimizu 890ddd
?D 14 int rowsize, bytewrapin, bytewrapout, d, tmp;
Shinya Kitaoka 120a6e
  ?E 14
Toshihiro Shimizu 890ddd
?I 14 int rowsize, bytewrapin, bytewrapout, d, tmp, newdx, newdy;
Shinya Kitaoka 120a6e
  ?E 14
Toshihiro Shimizu 890ddd
?E 10
Toshihiro Shimizu 890ddd
?D 12 int pixbits_in, pixbits_out;
Shinya Kitaoka 120a6e
  ?E 12
Toshihiro Shimizu 890ddd
?I 12 int pixbits_in, pixbits_out;
Shinya Kitaoka 120a6e
  int pixbytes_in, pixbytes_out;
Shinya Kitaoka 120a6e
  ?E 23
Toshihiro Shimizu 890ddd
?I 23 int newdx, newdy, tmp;
Shinya Kitaoka 120a6e
  ?E 23
Toshihiro Shimizu 890ddd
?E 12 int rasras;
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  ?D 14 if (ninety != 1 || flip != 1) {
Shinya Kitaoka 120a6e
    printf("### INTERNAL ERROR - rop_copy_90; ?????????????????\n");
Shinya Kitaoka 120a6e
    return;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  ?E 14
Toshihiro Shimizu 890ddd
?I 14 mirror &= 1;
Shinya Kitaoka 120a6e
  ninety &= 3;
Shinya Kitaoka 120a6e
  ?I 18
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
      if (!ninety && !mirror) {
Shinya Kitaoka 120a6e
    rop_copy(rin, rout, x1, y1, x2, y2, newx, newy);
Shinya Kitaoka 120a6e
    return;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  ?E 18
Toshihiro Shimizu 890ddd
?E 14
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
      /* raddrizzo gli estremi */
Shinya Kitaoka 120a6e
      if (x1 > x2) {
Shinya Kitaoka 120a6e
    tmp = x1;
Shinya Kitaoka 120a6e
    x1  = x2;
Shinya Kitaoka 120a6e
    x2  = tmp;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  if (y1 > y2) {
Shinya Kitaoka 120a6e
    tmp = y1;
Shinya Kitaoka 120a6e
    y1  = y2;
Shinya Kitaoka 120a6e
    y2  = tmp;
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  ?I 14 switch (ninety) {
Shinya Kitaoka 120a6e
    CASE 0 : __OR 2 : newdx = x2 - x1 + 1;
Shinya Kitaoka 120a6e
    newdy                   = y2 - y1 + 1;
Shinya Kitaoka 120a6e
    CASE 1 : __OR 3 : newdx = y2 - y1 + 1;
Shinya Kitaoka 120a6e
    newdy                   = x2 - x1 + 1;
Shinya Kitaoka 120a6e
    ?I 50
Toshihiro Shimizu 890ddd
?D 78 DEFAULT : assert(FALSE);
Shinya Kitaoka 120a6e
    newdx = newdy = 0;
Shinya Kitaoka 120a6e
    ?E 78
Toshihiro Shimizu 890ddd
?I 78 DEFAULT : abort();
Shinya Kitaoka 120a6e
    newdx = newdy = 0;
Shinya Kitaoka 120a6e
    ?E 78
Toshihiro Shimizu 890ddd
?E 50
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?E 14
Toshihiro Shimizu 890ddd
/* controllo gli sconfinamenti */
Toshihiro Shimizu 890ddd
if(x1<0 || y1<0 || x2>=rin->lx || y2>=rin->ly
Toshihiro Shimizu 890ddd
  || newx<0 || newy<0 || 
Toshihiro Shimizu 890ddd
?D 14
Toshihiro Shimizu 890ddd
     newx+x2-x1>=rout->lx || newy+y2-y1>=rout->ly)
Toshihiro Shimizu 890ddd
?E 14
Toshihiro Shimizu 890ddd
?I 14
Toshihiro Shimizu 890ddd
     newx+newdx>rout->lx || newy+newdy>rout->ly)
Toshihiro Shimizu 890ddd
?E 14
Toshihiro Shimizu 890ddd
{
Shinya Kitaoka 120a6e
  printf("### INTERNAL ERROR - rop_copy_90; access violation\n");
Shinya Kitaoka 120a6e
  return;
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
?D 12 pixbits_in  = rop_pixbits(rin->type);
Shinya Kitaoka 120a6e
pixbits_out       = rop_pixbits(rout->type);
Toshihiro Shimizu 890ddd
?E 12
Toshihiro Shimizu 890ddd
?I 12
Toshihiro Shimizu 890ddd
?D 23 pixbits_in = rop_pixbits(rin->type);
Shinya Kitaoka 120a6e
pixbytes_in       = rop_pixbytes(rin->type);
Shinya Kitaoka 120a6e
pixbits_out       = rop_pixbits(rout->type);
Shinya Kitaoka 120a6e
pixbytes_out      = rop_pixbytes(rout->type);
Toshihiro Shimizu 890ddd
?E 23
Shinya Kitaoka 120a6e
?E 12 rasras     = RASRAS(rin->type, rout->type);
Toshihiro Shimizu 890ddd
switch (rasras) {
Shinya Kitaoka 120a6e
  CASE RASRAS(RAS_WB, RAS_WB)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_BW, RAS_BW)
Shinya Kitaoka 120a6e
      :
Toshihiro Shimizu 890ddd
?D 14
Shinya Kitaoka 120a6e
      /*
Shinya Kitaoka 120a6e
rop_copy_90_bw(rin, rout, x1, y1, x2, y2, newx, newy, ninety, flip);
Shinya Kitaoka 120a6e
*/
Shinya Kitaoka 120a6e
      rop_copy(rin, rout, x1, y1, x2, y2, newx, newy);
Shinya Kitaoka 120a6e
  ?E 14
Toshihiro Shimizu 890ddd
?I 14 rop_copy_90_bw(rin, rout, x1, y1, x2, y2, newx, newy, mirror, ninety);
Shinya Kitaoka 120a6e
  ?E 14 return;
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  ?I 17 CASE RASRAS(RAS_WB, RAS_GR8)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_BW, RAS_GR8)
Shinya Kitaoka 120a6e
      : rop_copy_90_bw_gr8(rin, rout, x1, y1, x2, y2, newx, newy, mirror,
Shinya Kitaoka 120a6e
                           ninety);
Shinya Kitaoka 120a6e
  return;
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  ?I 21 CASE RASRAS(RAS_WB, RAS_CM16)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_BW, RAS_CM16)
Shinya Kitaoka 120a6e
      : rop_copy_90_bw_cm16(rin, rout, x1, y1, x2, y2, newx, newy, mirror,
Shinya Kitaoka 120a6e
                            ninety);
Shinya Kitaoka 120a6e
  return;
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  ?I 55 CASE RASRAS(RAS_WB, RAS_RGB16)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_BW, RAS_RGB16)
Shinya Kitaoka 120a6e
      : rop_copy_90_bw_rgb16(rin, rout, x1, y1, x2, y2, newx, newy, mirror,
Shinya Kitaoka 120a6e
                             ninety);
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  ?E 55
Shinya Kitaoka 120a6e
?I 22 CASE RASRAS(RAS_WB, RAS_RGB_)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_WB, RAS_RGBM)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_BW, RAS_RGB_)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_BW, RAS_RGBM)
Shinya Kitaoka 120a6e
      : rop_copy_90_bw_rgbm(rin, rout, x1, y1, x2, y2, newx, newy, mirror,
Shinya Kitaoka 120a6e
                            ninety);
Shinya Kitaoka 120a6e
  return;
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  ?E 22
Toshihiro Shimizu 890ddd
?E 21
Shinya Kitaoka 120a6e
?E 17 CASE RASRAS(RAS_GR8, RAS_GR8)
Shinya Kitaoka 120a6e
      :
Toshihiro Shimizu 890ddd
?D 14
Shinya Kitaoka 120a6e
      /*
Shinya Kitaoka 120a6e
rop_copy_90_gr8(rin, rout, x1, y1, x2, y2, newx, newy, ninety, flip);
Shinya Kitaoka 120a6e
*/
Shinya Kitaoka 120a6e
      rop_copy(rin, rout, x1, y1, x2, y2, newx, newy);
Shinya Kitaoka 120a6e
  ?E 14
Toshihiro Shimizu 890ddd
?I 14 rop_copy_90_gr8(rin, rout, x1, y1, x2, y2, newx, newy, mirror, ninety);
Shinya Kitaoka 120a6e
  ?E 14 return;
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  ?I 21 CASE RASRAS(RAS_GR8, RAS_CM16)
Shinya Kitaoka 120a6e
      : rop_copy_90_gr8_cm16(rin, rout, x1, y1, x2, y2, newx, newy, mirror,
Shinya Kitaoka 120a6e
                             ninety);
Shinya Kitaoka 120a6e
  return;
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  ?I 55 CASE RASRAS(RAS_GR8, RAS_RGB16)
Shinya Kitaoka 120a6e
      : rop_copy_90_gr8_rgb16(rin, rout, x1, y1, x2, y2, newx, newy, mirror,
Shinya Kitaoka 120a6e
                              ninety);
Shinya Kitaoka 120a6e
  return;
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  ?E 55
Shinya Kitaoka 120a6e
?I 22 CASE RASRAS(RAS_GR8, RAS_RGB_)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_GR8, RAS_RGBM)
Shinya Kitaoka 120a6e
      : rop_copy_90_gr8_rgbm(rin, rout, x1, y1, x2, y2, newx, newy, mirror,
Shinya Kitaoka 120a6e
                             ninety);
Shinya Kitaoka 120a6e
  return;
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  ?I 23 CASE RASRAS(RAS_CM8, RAS_CM16)
Shinya Kitaoka 120a6e
      : rop_copy_90_cm8_cm16(rin, rout, x1, y1, x2, y2, newx, newy, mirror,
Shinya Kitaoka 120a6e
                             ninety);
Shinya Kitaoka 120a6e
  return;
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  ?I 26 CASE RASRAS(RAS_RGB_, RAS_RGB_)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_RGBM, RAS_RGB_)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_RGBM, RAS_RGBM)
Shinya Kitaoka 120a6e
      : rop_copy_90_rgbm(rin, rout, x1, y1, x2, y2, newx, newy, mirror, ninety);
Shinya Kitaoka 120a6e
  return;
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  ?I 63 CASE RASRAS(RAS_RGB, RAS_RGB16)
Shinya Kitaoka 120a6e
      : rop_copy_90_rgb_rgb16(rin, rout, x1, y1, x2, y2, newx, newy, mirror,
Shinya Kitaoka 120a6e
                              ninety);
Shinya Kitaoka 120a6e
  return;
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  ?E 63
Shinya Kitaoka 120a6e
?I 45 CASE RASRAS(RAS_RGB, RAS_RGB_)
Shinya Kitaoka 120a6e
      :
Toshihiro Shimizu 890ddd
?E 45
Toshihiro Shimizu 890ddd
?I 43
Shinya Kitaoka 120a6e
?D 64 CASE RASRAS(RAS_RGB, RAS_RGBM)
Shinya Kitaoka 120a6e
      :
Toshihiro Shimizu 890ddd
?E 64
Shinya Kitaoka 120a6e
?I 64 __OR RASRAS(RAS_RGB, RAS_RGBM)
Shinya Kitaoka 120a6e
      :
Shinya Kitaoka 120a6e
?E 64 rop_copy_90_rgb_rgbm(rin, rout, x1, y1, x2, y2, newx, newy, mirror,
Shinya Kitaoka 120a6e
                            ninety);
Shinya Kitaoka 120a6e
  return;
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  ?E 43
Toshihiro Shimizu 890ddd
?E 26
Toshihiro Shimizu 890ddd
?E 23
Toshihiro Shimizu 890ddd
?E 22
Toshihiro Shimizu 890ddd
?E 21 DEFAULT :
Toshihiro Shimizu 890ddd
?D 45 printf("### INTERNAL ERROR - rop_copy_90; ?????????????????\n");
Shinya Kitaoka 120a6e
  ?E 45
Toshihiro Shimizu 890ddd
?I 45
Toshihiro Shimizu 890ddd
?D 78 assert(FALSE);
Shinya Kitaoka 120a6e
  ?E 78
Toshihiro Shimizu 890ddd
?I 78 abort();
Shinya Kitaoka 120a6e
  ?E 78
Toshihiro Shimizu 890ddd
?E 45
Toshihiro Shimizu 890ddd
    
Toshihiro Shimizu 890ddd
?E 6
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
?I 6
Toshihiro Shimizu 890ddd
?D 21
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
    /* QUI NON CI SI ARRIVA */
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?E 6
Toshihiro Shimizu 890ddd
?E 4
Shinya Kitaoka 120a6e
    /* pixsize compatibili */
Shinya Kitaoka 120a6e
    if (pixbits_in != pixbits_out) {
Shinya Kitaoka 120a6e
  printf("### INTERNAL ERROR - rop_copy; different pixel size\n");
Shinya Kitaoka 120a6e
  return;
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
/* per adesso niente pixel non multipli di 8 bits */
Shinya Kitaoka 120a6e
?D 2 if (pixbits_in & 7) {
Shinya Kitaoka 120a6e
  printf("### INTERNAL ERROR - rop_copy; byte fraction pixels\n");
Shinya Kitaoka 120a6e
  ?E 2
Shinya Kitaoka 120a6e
?I 2 if (rop_fillerbits(rin->type) || rop_fillerbits(rout->type)) {
Shinya Kitaoka 120a6e
    printf("### INTERNAL ERROR - rop_copy; fillerbits not allowed\n");
Shinya Kitaoka 120a6e
    ?E 2 return;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  ?D 4
Toshihiro Shimizu 890ddd
  
Toshihiro Shimizu 890ddd
?E 4
Toshihiro Shimizu 890ddd
?I 4
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?E 4
Shinya Kitaoka 120a6e
      /* copia */
Shinya Kitaoka 120a6e
      rowsize     = (pixbits_in * (x2 - x1 + 1)) >> 3;
Shinya Kitaoka 120a6e
  ?D 10 wrapin    = (rin->wrap * pixbits_in) >> 3;
Shinya Kitaoka 120a6e
  wrapout         = (rout->wrap * pixbits_out) >> 3;
Shinya Kitaoka 120a6e
  ?E 10
Toshihiro Shimizu 890ddd
?I 10 bytewrapin = rin->wrap * pixbytes_in;
Shinya Kitaoka 120a6e
  bytewrapout     = rout->wrap * pixbytes_out;
Shinya Kitaoka 120a6e
  ?E 10
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?D 10 rowin = (char *)rin->buffer + y1 * wrapin + ((x1 * pixbits_in) >> 3);
Shinya Kitaoka 120a6e
  rowout = (char *)rout->buffer + newy * wrapout + ((newx * pixbits_out) >> 3);
Shinya Kitaoka 120a6e
  ?E 10
Toshihiro Shimizu 890ddd
?I 10
Toshihiro Shimizu 890ddd
?D 12 rowin = (UCHAR *)rin->buffer + y1 * wrapin + ((x1 * pixbits_in) >> 3);
Shinya Kitaoka 120a6e
  rowout = (UCHAR *)rout->buffer + newy * wrapout + ((newx * pixbits_out) >> 3);
Shinya Kitaoka 120a6e
  ?E 12
Shinya Kitaoka 120a6e
?I 12 rowin =
Shinya Kitaoka 120a6e
      (UCHAR *)rin->buffer + y1 * bytewrapin + ((x1 * pixbits_in) >> 3);
Shinya Kitaoka 120a6e
  rowout =
Shinya Kitaoka 120a6e
      (UCHAR *)rout->buffer + newy * bytewrapout + ((newx * pixbits_out) >> 3);
Shinya Kitaoka 120a6e
  ?E 12
Toshihiro Shimizu 890ddd
?E 10 d = y2 - y1 + 1;
Shinya Kitaoka 120a6e
  while (d-- > 0) {
Shinya Kitaoka 120a6e
    memmove(rowout, rowin, rowsize);
Shinya Kitaoka 120a6e
    ?D 10 rowin += wrapin;
Shinya Kitaoka 120a6e
    rowout += wrapout;
Shinya Kitaoka 120a6e
    ?E 10
Toshihiro Shimizu 890ddd
?I 10 rowin += bytewrapin;
Shinya Kitaoka 120a6e
    rowout += bytewrapout;
Shinya Kitaoka 120a6e
    ?E 10
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  ?E 21
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?I 15
Toshihiro Shimizu 890ddd
#ifdef VERSIONE_LENTA
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?E 15
Toshihiro Shimizu 890ddd
?I 6
Toshihiro Shimizu 890ddd
static void rop_copy_90_bw(RASTER *rin, RASTER *rout,
Toshihiro Shimizu 890ddd
                           int x1, int y1, int x2, int y2,
Toshihiro Shimizu 890ddd
			   int newx, int newy,
Toshihiro Shimizu 890ddd
?D 14
Toshihiro Shimizu 890ddd
		           int ninety, int flip)
Toshihiro Shimizu 890ddd
?E 14
Toshihiro Shimizu 890ddd
?I 14
Toshihiro Shimizu 890ddd
		           int mirror, int ninety)
Toshihiro Shimizu 890ddd
?E 14
Toshihiro Shimizu 890ddd
{
Shinya Kitaoka 120a6e
  ?D 14
Toshihiro Shimizu 890ddd
#ifdef WALTER
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
      UCHAR *rowin,
Shinya Kitaoka 120a6e
      *bytein;
Shinya Kitaoka 120a6e
  LPIXEL *cmap;
Shinya Kitaoka 120a6e
  int wrapin, wrapout, tmp, cmap_offset, bit, bit_offs, startbit;
Shinya Kitaoka 120a6e
  int x, lx, ly;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
#define SET_BIT(BYTE, BIT, VAL)                                                \
Shinya Kitaoka 120a6e
  {                                                                            \
Shinya Kitaoka 120a6e
    if (VAL)                                                                   \
Shinya Kitaoka 120a6e
      *BYTE |= (1 << (BIT));                                                   \
Shinya Kitaoka 120a6e
    else                                                                       \
Shinya Kitaoka 120a6e
      *BYTE &= ~(1 << (BIT));                                                  \
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  ?E 14
Toshihiro Shimizu 890ddd
?I 14 UCHAR *bufin, *bufout;
Shinya Kitaoka 120a6e
  int bytewrapin, bytewrapout, bitoffsin, bitoffsout, wrapin;
Shinya Kitaoka 120a6e
  int u, v, lu, lv, su, sv, u00, v00, u0, v0, dudx, dudy, dvdx, dvdy;
Shinya Kitaoka 120a6e
  int x, y, lx, ly;
Shinya Kitaoka 120a6e
  int u1, v1, u2, v2;
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  ?D 61
Shinya Kitaoka 120a6e
#define BUFBYTE(X, Y, BUF, BYTEWRAP, BITOFFS)                                  \
Shinya Kitaoka 120a6e
  (((UCHAR *)(BUF))[(((X) + (BITOFFS)) >> 3) + (Y) * (BYTEWRAP)])
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
#define GET_BIT(X, Y, BUF, BYTEWRAP, BITOFFS)                                  \
Shinya Kitaoka 120a6e
  ((BUFBYTE(X, Y, BUF, BYTEWRAP, BITOFFS) >> (7 - (((X) + (BITOFFS)) & 7))) & 1)
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
#define SET_BIT_0(X, Y, BUF, BYTEWRAP, BITOFFS)                                \
Shinya Kitaoka 120a6e
  (BUFBYTE(X, Y, BUF, BYTEWRAP, BITOFFS) &=                                    \
Shinya Kitaoka 120a6e
   ~(1 << (7 - (((X) + (BITOFFS)) & 7))))
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
#define SET_BIT_1(X, Y, BUF, BYTEWRAP, BITOFFS)                                \
Shinya Kitaoka 120a6e
  (BUFBYTE(X, Y, BUF, BYTEWRAP, BITOFFS) |=                                    \
Shinya Kitaoka 120a6e
   (1 << (7 - (((X) + (BITOFFS)) & 7))))
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?E 61
Toshihiro Shimizu 890ddd
#ifdef DEBUG
Shinya Kitaoka 120a6e
      STW_INIT(0, "rop_copy_90_bw")
Toshihiro Shimizu 890ddd
?E 84
Shinya Kitaoka 120a6e
?I 84 CASE 1 : for (j = 0; j < xsize; j++) {
Shinya Kitaoka 120a6e
    *curr_pixout = *curr_pixin;
Shinya Kitaoka 120a6e
    curr_pixin += shrink;
Shinya Kitaoka 120a6e
    curr_pixout++;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  CASE 2 : curr_pixin_2 = (USHORT *)curr_pixin;
Shinya Kitaoka 120a6e
  curr_pixout_2         = (USHORT *)curr_pixout;
Shinya Kitaoka 120a6e
  for (j = 0; j < xsize; j++) {
Shinya Kitaoka 120a6e
    *curr_pixout_2 = *curr_pixin_2;
Shinya Kitaoka 120a6e
    curr_pixin_2 += shrink;
Shinya Kitaoka 120a6e
    curr_pixout_2++;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  CASE 4 : curr_pixin_4 = (ULONG *)curr_pixin;
Shinya Kitaoka 120a6e
  curr_pixout_4         = (ULONG *)curr_pixout;
Shinya Kitaoka 120a6e
  for (j = 0; j < xsize; j++) {
Shinya Kitaoka 120a6e
    *curr_pixout_4 = *curr_pixin_4;
Shinya Kitaoka 120a6e
    ?E 84
Toshihiro Shimizu 890ddd
?I 84 curr_pixin_4 += shrink;
Shinya Kitaoka 120a6e
    curr_pixout_4++;
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
DEFAULT:
Shinya Kitaoka 120a6e
  for (j = 0; j < xsize; j++) {
Shinya Kitaoka 120a6e
    memcpy(curr_pixout, curr_pixin, bpp);
Shinya Kitaoka 120a6e
    curr_pixin += shrink * bpp;
Shinya Kitaoka 120a6e
    curr_pixout += bpp;
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
/* copia un rettangolo da rin a rout.
Toshihiro Shimizu 890ddd
 * Le coordinate sono relative ai due raster: (0, 0) corrisponde
Toshihiro Shimizu 890ddd
 * al primo pixel del raster.
Toshihiro Shimizu 890ddd
 * Riduce le dimensioni di una potenza di due facendo la media dei valori
Toshihiro Shimizu 890ddd
 * dei pixel, ma solo su una parte dei pixel.
Toshihiro Shimizu 890ddd
 */
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
void rop_zoom_out(RASTER *rin, RASTER *rout, int x1, int y1, int x2, int y2,
Shinya Kitaoka 120a6e
                  int newx, int newy, int abs_zoom_level) {
Shinya Kitaoka 120a6e
  int tmp, newlx, newly;
Shinya Kitaoka 120a6e
  int rasras, factor, abszl;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  abszl  = abs_zoom_level;
Shinya Kitaoka 120a6e
  factor = 1 << abs_zoom_level;
Shinya Kitaoka 120a6e
  if (factor == 1) rop_copy(rin, rout, x1, y1, x2, y2, newx, newy);
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  /* raddrizzo gli estremi */
Shinya Kitaoka 120a6e
  if (x1 > x2) {
Shinya Kitaoka 120a6e
    tmp = x1;
Shinya Kitaoka 120a6e
    x1  = x2;
Shinya Kitaoka 120a6e
    x2  = tmp;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  if (y1 > y2) {
Shinya Kitaoka 120a6e
    tmp = y1;
Shinya Kitaoka 120a6e
    y1  = y2;
Shinya Kitaoka 120a6e
    y2  = tmp;
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  /* controllo gli sconfinamenti */
Shinya Kitaoka 120a6e
  newlx = (x2 - x1 + factor) / factor;
Shinya Kitaoka 120a6e
  newly = (y2 - y1 + factor) / factor;
Shinya Kitaoka 120a6e
  ?E 89
Shinya Kitaoka 120a6e
?I 89 __OR RASRAS(RAS_CM24, RAS_CM8S8)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_CM24, RAS_CM8S4)
Shinya Kitaoka 120a6e
      : __OR RASRAS(RAS_CM24, RAS_BW)
Shinya Kitaoka 120a6e
      : rop_copy_quantize(rasras, rin, rout, x1, y1, x2, y2, newx, newy);
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
DEFAULT:
Shinya Kitaoka 120a6e
  assert(!"rop_copy; invalid raster combination");
Shinya Kitaoka 120a6e
  ?E 96
Toshihiro Shimizu 890ddd
?I 96 rasras = RASRAS(rin->type, rout->type);
Shinya Kitaoka 120a6e
  switch (rasras) {
Shinya Kitaoka 120a6e
    CASE RASRAS(RAS_RGBM, RAS_RGB_)
Shinya Kitaoka 120a6e
        : rop_copy_same(rin, rout, x1, y1, x2, y2, newx, newy);
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
    CASE RASRAS(RAS_GR8, RAS_RGB_)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_GR8, RAS_RGBM)
Shinya Kitaoka 120a6e
        : rop_copy_gr8_rgbm(rin, rout, x1, y1, x2, y2, newx, newy);
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
    CASE RASRAS(RAS_CM16, RAS_RGB_)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_CM16, RAS_RGBM)
Shinya Kitaoka 120a6e
        : rop_copy_cm16_rgbm(rin, rout, x1, y1, x2, y2, newx, newy);
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
    CASE RASRAS(RAS_CM24, RAS_RGB_)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_CM24, RAS_RGBM)
Shinya Kitaoka 120a6e
        : rop_copy_cm24_rgbm(rin, rout, x1, y1, x2, y2, newx, newy);
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
    CASE RASRAS(RAS_CM16, RAS_RGB_64)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_CM16, RAS_RGBM64)
Shinya Kitaoka 120a6e
        : rop_copy_cm16_rgbm64(rin, rout, x1, y1, x2, y2, newx, newy);
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
    CASE RASRAS(RAS_CM24, RAS_RGB_64)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_CM24, RAS_RGBM64)
Shinya Kitaoka 120a6e
        : rop_copy_cm24_rgbm64(rin, rout, x1, y1, x2, y2, newx, newy);
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
    CASE RASRAS(RAS_RGBM, RAS_RGBM64)
Shinya Kitaoka 120a6e
        : rop_copy_rgbm_rgbm64(rin, rout, x1, y1, x2, y2, newx, newy);
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
    CASE RASRAS(RAS_RGBM64, RAS_RGBM)
Shinya Kitaoka 120a6e
        : rop_copy_rgbm64_rgbm(rin, rout, x1, y1, x2, y2, newx, newy);
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
    CASE RASRAS(RAS_RGB_64, RAS_RGB_)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_RGBM64, RAS_RGB_)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_RGB_64, RAS_RGBM)
Shinya Kitaoka 120a6e
        : rop_copy_rgbx64_rgbx(rin, rout, x1, y1, x2, y2, newx, newy);
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
    CASE RASRAS(RAS_RGB, RAS_RGB16)
Shinya Kitaoka 120a6e
        : rop_copy_rgb_rgb16(rin, rout, x1, y1, x2, y2, newx, newy);
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
    CASE RASRAS(RAS_RGB, RAS_RGB_)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_RGB, RAS_RGBM)
Shinya Kitaoka 120a6e
        : rop_copy_rgb_rgbm(rin, rout, x1, y1, x2, y2, newx, newy);
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
    ?D 104 CASE RASRAS(RAS_BW, RAS_BW)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_BW, RAS_WB)
Shinya Kitaoka 120a6e
        :
Toshihiro Shimizu 890ddd
?E 104
Shinya Kitaoka 120a6e
?I 104 CASE RASRAS(RAS_BW, RAS_WB)
Shinya Kitaoka 120a6e
        :
Shinya Kitaoka 120a6e
?E 104 __OR RASRAS(RAS_WB, RAS_BW)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_WB, RAS_WB)
Shinya Kitaoka 120a6e
        : rop_copy_bw(rin, rout, x1, y1, x2, y2, newx, newy);
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
    CASE RASRAS(RAS_BW, RAS_CM16)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_WB, RAS_CM16)
Shinya Kitaoka 120a6e
        : rop_copy_bw_cm16(rin, rout, x1, y1, x2, y2, newx, newy);
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
    CASE RASRAS(RAS_BW, RAS_CM24)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_WB, RAS_CM24)
Shinya Kitaoka 120a6e
        : rop_copy_bw_cm24(rin, rout, x1, y1, x2, y2, newx, newy);
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
    CASE RASRAS(RAS_BW, RAS_RGB_)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_BW, RAS_RGBM)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_WB, RAS_RGB_)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_WB, RAS_RGBM)
Shinya Kitaoka 120a6e
        : rop_copy_bw_rgbm(rin, rout, x1, y1, x2, y2, newx, newy);
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
    CASE RASRAS(RAS_GR8, RAS_CM16)
Shinya Kitaoka 120a6e
        : rop_copy_gr8_cm16(rin, rout, x1, y1, x2, y2, newx, newy);
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
    CASE RASRAS(RAS_GR8, RAS_CM24)
Shinya Kitaoka 120a6e
        : rop_copy_gr8_cm24(rin, rout, x1, y1, x2, y2, newx, newy);
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
    CASE RASRAS(RAS_CM8, RAS_CM16)
Shinya Kitaoka 120a6e
        : rop_copy_cm8_cm16(rin, rout, x1, y1, x2, y2, newx, newy);
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
    CASE RASRAS(RAS_CM8, RAS_CM24)
Shinya Kitaoka 120a6e
        : rop_copy_cm8_cm24(rin, rout, x1, y1, x2, y2, newx, newy);
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
    CASE RASRAS(RAS_BW, RAS_RGB16)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_WB, RAS_RGB16)
Shinya Kitaoka 120a6e
        : rop_copy_bw_rgb16(rin, rout, x1, y1, x2, y2, newx, newy);
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
    CASE RASRAS(RAS_GR8, RAS_RGB16)
Shinya Kitaoka 120a6e
        : rop_copy_gr8_rgb16(rin, rout, x1, y1, x2, y2, newx, newy);
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
    CASE RASRAS(RAS_CM16, RAS_RGB16)
Shinya Kitaoka 120a6e
        : rop_copy_cm16_rgb16(rin, rout, x1, y1, x2, y2, newx, newy);
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
    CASE RASRAS(RAS_CM24, RAS_RGB16)
Shinya Kitaoka 120a6e
        : rop_copy_cm24_rgb16(rin, rout, x1, y1, x2, y2, newx, newy);
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
    ?D 97 CASE RASRAS(RAS_CM16, RAS_XRGB1555)
Shinya Kitaoka 120a6e
        : rop_copy_cm16_xrgb1555(rin, rout, x1, y1, x2, y2, newx, newy);
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
    CASE RASRAS(RAS_CM24, RAS_XRGB1555)
Shinya Kitaoka 120a6e
        : rop_copy_cm24_xrgb1555(rin, rout, x1, y1, x2, y2, newx, newy);
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
    ?E 97 CASE RASRAS(RAS_RGB_, RAS_RGB16)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_RGBM, RAS_RGB16)
Shinya Kitaoka 120a6e
        : rop_copy_rgbx_rgb16(rin, rout, x1, y1, x2, y2, newx, newy);
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
    ?D 97 CASE RASRAS(RAS_RGB_, RAS_XRGB1555)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_RGBM, RAS_XRGB1555)
Shinya Kitaoka 120a6e
        : rop_copy_rgbx_xrgb1555(rin, rout, x1, y1, x2, y2, newx, newy);
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
    ?E 97 CASE RASRAS(RAS_RGB_64, RAS_RGB16)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_RGBM64, RAS_RGB16)
Shinya Kitaoka 120a6e
        : rop_copy_rgbx64_rgb16(rin, rout, x1, y1, x2, y2, newx, newy);
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
    ?D 97 CASE RASRAS(RAS_RGB_64, RAS_XRGB1555)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_RGBM64, RAS_XRGB1555)
Shinya Kitaoka 120a6e
        : rop_copy_rgbx64_xrgb1555(rin, rout, x1, y1, x2, y2, newx, newy);
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
    ?E 97 CASE RASRAS(RAS_RGB16, RAS_RGB_)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_RGB16, RAS_RGBM)
Shinya Kitaoka 120a6e
        : rop_copy_rgb16_rgbm(rin, rout, x1, y1, x2, y2, newx, newy);
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
    ?D 97 CASE RASRAS(RAS_XRGB1555, RAS_RGB_)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_XRGB1555, RAS_RGBM)
Shinya Kitaoka 120a6e
        : rop_copy_xrgb1555_rgbm(rin, rout, x1, y1, x2, y2, newx, newy);
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
    ?E 97 CASE RASRAS(RAS_RGB_, RAS_RGB)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_RGBM, RAS_RGB)
Shinya Kitaoka 120a6e
        : rop_copy_rgbx_rgb(rin, rout, x1, y1, x2, y2, newx, newy);
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
    CASE RASRAS(RAS_RGBM, RAS_CM16S8)
Shinya Kitaoka 120a6e
        :
Shinya Kitaoka 120a6e
?I 98 __OR RASRAS(RAS_RGBM, RAS_CM16S12)
Shinya Kitaoka 120a6e
        :
Shinya Kitaoka 120a6e
?E 98 __OR RASRAS(RAS_RGBM, RAS_CM16S4)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_RGBM, RAS_MBW16)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_RGBM, RAS_GR8)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_RGBM64, RAS_GR8)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_RGBM, RAS_GR16)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_RGBM64, RAS_GR16)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_RGBM, RAS_CM8S8)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_RGBM, RAS_CM8S4)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_RGBM, RAS_BW)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_RGB_, RAS_CM16S8)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_RGB_, RAS_CM16S4)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_RGB_, RAS_MBW16)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_RGB_, RAS_GR8)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_RGB_, RAS_CM8S8)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_RGB_, RAS_CM8S4)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_RGB_, RAS_BW)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_RGB16, RAS_CM8S8)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_RGB16, RAS_BW)
Shinya Kitaoka 120a6e
        :
Shinya Kitaoka 120a6e
?I 98 __OR RASRAS(RAS_CM16, RAS_CM16S12)
Shinya Kitaoka 120a6e
        :
Shinya Kitaoka 120a6e
?E 98 __OR RASRAS(RAS_CM16, RAS_CM16S8)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_CM16, RAS_CM16S4)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_CM16, RAS_MBW16)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_CM16, RAS_GR8)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_CM16, RAS_GR16)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_CM16, RAS_CM8S8)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_CM16, RAS_CM8S4)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_CM16, RAS_BW)
Shinya Kitaoka 120a6e
        :
Shinya Kitaoka 120a6e
?I 98 __OR RASRAS(RAS_CM24, RAS_CM16S12)
Shinya Kitaoka 120a6e
        :
Shinya Kitaoka 120a6e
?E 98 __OR RASRAS(RAS_CM24, RAS_CM16S8)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_CM24, RAS_CM16S4)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_CM24, RAS_MBW16)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_CM24, RAS_GR8)
Shinya Kitaoka 120a6e
        :
Shinya Kitaoka 120a6e
?I 103 __OR RASRAS(RAS_CM24, RAS_GR16)
Shinya Kitaoka 120a6e
        :  
Shinya Kitaoka 120a6e
?E 103 __OR RASRAS(RAS_CM24, RAS_CM8S8)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_CM24, RAS_CM8S4)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_CM24, RAS_BW)
Shinya Kitaoka 120a6e
        :
Shinya Kitaoka 120a6e
?I 97 __OR RASRAS(RAS_CM8S8, RAS_RGBM)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_CM8S8, RAS_RGB_)
Shinya Kitaoka 120a6e
        :
Shinya Kitaoka 120a6e
?I 101 __OR RASRAS(RAS_CM16S12, RAS_RGBM)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_CM16S12, RAS_RGB_)
Shinya Kitaoka 120a6e
        :
Shinya Kitaoka 120a6e
?E 101 __OR RASRAS(RAS_RLEBW, RAS_RGB_)
Shinya Kitaoka 120a6e
        : __OR RASRAS(RAS_RLEBW, RAS_RGBM)
Shinya Kitaoka 120a6e
        :
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?E 97 rop_copy_quantize(rasras, rin, rout, x1, y1, x2, y2, newx, newy);
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  DEFAULT:
Shinya Kitaoka 120a6e
    assert(!"rop_copy; invalid raster combination");
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  ?E 96
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
if (rout->extra_mask)
Shinya Kitaoka 120a6e
  if (!(rin->type == RAS_CM24 || rout->type == RAS_CM24))
Shinya Kitaoka 120a6e
    rop_copy_extra(rin, rout, x1, y1, x2, y2, newx, newy);
Toshihiro Shimizu 890ddd
/* else e' gia' stato fatto dalle copy particolari */
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd
/* copia un rettangolo da rin a rout.
Toshihiro Shimizu 890ddd
 * Le coordinate sono relative ai due raster: (0, 0) corrisponde
Toshihiro Shimizu 890ddd
 * al primo pixel del raster.
Toshihiro Shimizu 890ddd
 * Riduce le dimensioni di un fattore di subsampling pari a shrink.
Toshihiro Shimizu 890ddd
 * I due raster devono essere dello stesso tipo.
Toshihiro Shimizu 890ddd
 */
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
?D 94 void rop_shrink(RASTER *rin, RASTER *rout, int x1, int y1, int x2, int y2,
Shinya Kitaoka 120a6e
                      int newx, int newy, int shrink) {
Shinya Kitaoka 120a6e
  ?E 94
Shinya Kitaoka 120a6e
?I 94 void rop_shrink(RASTER * rin, RASTER * rout, int x1, int y1, int x2,
Shinya Kitaoka 120a6e
                       int y2, int newx, int newy, int shrink) {
Shinya Kitaoka 120a6e
    ?E 94 UCHAR *curr_pixin, *bufferin;
Shinya Kitaoka 120a6e
    int i, j, tmp, bpp;
Shinya Kitaoka 120a6e
    int xsize, ysize, wrapin, wrapout;
Shinya Kitaoka 120a6e
    UCHAR *curr_pixout, *bufferout;
Shinya Kitaoka 120a6e
    USHORT *curr_pixin_2, *curr_pixout_2;
Shinya Kitaoka 120a6e
    ULONG *curr_pixin_4, *curr_pixout_4;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
    if (shrink == 1) {
Shinya Kitaoka 120a6e
      rop_copy(rin, rout, x1, y1, x2, y2, newx, newy);
Shinya Kitaoka 120a6e
      return;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    /* raddrizzo gli estremi */
Shinya Kitaoka 120a6e
    if (x1 > x2) {
Shinya Kitaoka 120a6e
      tmp = x1;
Shinya Kitaoka 120a6e
      x1  = x2;
Shinya Kitaoka 120a6e
      x2  = tmp;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    if (y1 > y2) {
Shinya Kitaoka 120a6e
      tmp = y1;
Shinya Kitaoka 120a6e
      y1  = y2;
Shinya Kitaoka 120a6e
      y2  = tmp;
Shinya Kitaoka 120a6e
    }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
    /* controllo gli sconfinamenti */
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
    if (x1 < 0 || y1 < 0 || x2 >= rin->lx || y2 >= rin->ly || newx < 0 ||
Shinya Kitaoka 120a6e
        newy < 0 || newx + (x2 - x1 + shrink) / shrink > rout->lx ||
Shinya Kitaoka 120a6e
        newy + (y2 - y1 + shrink) / shrink > rout->ly ||
Shinya Kitaoka 120a6e
        rin->type != rout->type) {
Shinya Kitaoka 120a6e
      printf("### INTERNAL ERROR - rop_shrink; access violation\n");
Shinya Kitaoka 120a6e
      return;
Shinya Kitaoka 120a6e
    }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
    bpp = rop_pixbytes(rin->type);
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
    xsize = (x2 - x1 + shrink) / shrink;
Shinya Kitaoka 120a6e
    ysize = (y2 - y1 + shrink) / shrink;
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
    wrapin = rin->wrap * bpp;
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
    bufferin = (UCHAR *)(rin->buffer) + wrapin * y1 + x1 * bpp;
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
    wrapout   = rout->wrap * bpp;
Shinya Kitaoka 120a6e
    bufferout = (UCHAR *)(rout->buffer) + wrapout * newy + newx * bpp;
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
    wrapin *= shrink;
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
    for (i = 0; i < ysize; i++) {
Shinya Kitaoka 120a6e
      curr_pixin  = bufferin;
Shinya Kitaoka 120a6e
      curr_pixout = bufferout;
Shinya Kitaoka 120a6e
      bufferin += wrapin;
Shinya Kitaoka 120a6e
      bufferout += wrapout;
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
      switch (bpp) {
Shinya Kitaoka 120a6e
        CASE 1 : for (j = 0; j < xsize; j++) {
Shinya Kitaoka 120a6e
          *curr_pixout = *curr_pixin;
Shinya Kitaoka 120a6e
          curr_pixin += shrink;
Shinya Kitaoka 120a6e
          curr_pixout++;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
        CASE 2 : curr_pixin_2 = (USHORT *)curr_pixin;
Shinya Kitaoka 120a6e
        curr_pixout_2         = (USHORT *)curr_pixout;
Shinya Kitaoka 120a6e
        for (j = 0; j < xsize; j++) {
Shinya Kitaoka 120a6e
          *curr_pixout_2 = *curr_pixin_2;
Shinya Kitaoka 120a6e
          curr_pixin_2 += shrink;
Shinya Kitaoka 120a6e
          curr_pixout_2++;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
        CASE 4 : curr_pixin_4 = (ULONG *)curr_pixin;
Shinya Kitaoka 120a6e
        curr_pixout_4         = (ULONG *)curr_pixout;
Shinya Kitaoka 120a6e
        for (j = 0; j < xsize; j++) {
Shinya Kitaoka 120a6e
          *curr_pixout_4 = *curr_pixin_4;
Shinya Kitaoka 120a6e
          curr_pixin_4 += shrink;
Shinya Kitaoka 120a6e
          curr_pixout_4++;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
      DEFAULT:
Shinya Kitaoka 120a6e
        for (j = 0; j < xsize; j++) {
Shinya Kitaoka 120a6e
          memcpy(curr_pixout, curr_pixin, bpp);
Shinya Kitaoka 120a6e
          curr_pixin += shrink * bpp;
Shinya Kitaoka 120a6e
          curr_pixout += bpp;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
      }
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    if (rin->extra_mask && rout->extra_mask &&
Shinya Kitaoka 120a6e
        !(rin->type == RAS_CM24 || rout->type == RAS_CM24)) {
Shinya Kitaoka 120a6e
      wrapin    = rin->wrap * shrink;
Shinya Kitaoka 120a6e
      wrapout   = rout->wrap;
Shinya Kitaoka 120a6e
      bufferin  = rin->extra + x1 + y1 * wrapin;
Shinya Kitaoka 120a6e
      bufferout = rout->extra + newx + newy * wrapout;
Shinya Kitaoka 120a6e
      for (i = 0; i < ysize; i++) {
Shinya Kitaoka 120a6e
        curr_pixin  = bufferin;
Shinya Kitaoka 120a6e
        curr_pixout = bufferout;
Shinya Kitaoka 120a6e
        bufferin += wrapin;
Shinya Kitaoka 120a6e
        bufferout += wrapout;
Shinya Kitaoka 120a6e
        for (j = 0; j < xsize; j++) {
Shinya Kitaoka 120a6e
          *curr_pixout = *curr_pixin;
Shinya Kitaoka 120a6e
          curr_pixin += shrink;
Shinya Kitaoka 120a6e
          curr_pixout++;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
      }
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  /*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  /* copia un rettangolo da rin a rout.
Shinya Kitaoka 120a6e
* Le coordinate sono relative ai due raster: (0, 0) corrisponde
Shinya Kitaoka 120a6e
* al primo pixel del raster.
Shinya Kitaoka 120a6e
* Riduce le dimensioni di una potenza di due facendo la media dei valori
Shinya Kitaoka 120a6e
* dei pixel, ma solo su una parte dei pixel.
Shinya Kitaoka 120a6e
*/
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  void rop_zoom_out(RASTER * rin, RASTER * rout, int x1, int y1, int x2, int y2,
Shinya Kitaoka 120a6e
                    int newx, int newy, int abs_zoom_level) {
Shinya Kitaoka 120a6e
    int tmp, newlx, newly;
Shinya Kitaoka 120a6e
    int rasras, factor, abszl;
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
    if (rout->extra_mask) assert(0);
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
    abszl  = abs_zoom_level;
Shinya Kitaoka 120a6e
    factor = 1 << abs_zoom_level;
Shinya Kitaoka 120a6e
    if (factor == 1) rop_copy(rin, rout, x1, y1, x2, y2, newx, newy);
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
    /* raddrizzo gli estremi */
Shinya Kitaoka 120a6e
    if (x1 > x2) {
Shinya Kitaoka 120a6e
      tmp = x1;
Shinya Kitaoka 120a6e
      x1  = x2;
Shinya Kitaoka 120a6e
      x2  = tmp;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    if (y1 > y2) {
Shinya Kitaoka 120a6e
      tmp = y1;
Shinya Kitaoka 120a6e
      y1  = y2;
Shinya Kitaoka 120a6e
      y2  = tmp;
Shinya Kitaoka 120a6e
    }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
    /* controllo gli sconfinamenti */
Shinya Kitaoka 120a6e
    newlx = (x2 - x1 + factor) / factor;
Shinya Kitaoka 120a6e
    newly = (y2 - y1 + factor) / factor;
Shinya Kitaoka 120a6e
    ?E 89 if (x1 < 0 || y1 < 0 || x2 >= rin->lx || y2 >= rin->ly || newx < 0 ||
Shinya Kitaoka 120a6e
              newy < 0 || newx + newlx > rout->lx || newy + newly > rout->ly) {
Shinya Kitaoka 120a6e
      printf(
Shinya Kitaoka 120a6e
          "### INTERNAL ERROR - rop_zoom_out; access violation\n"
Shinya Kitaoka 120a6e
          " ((%d,%d)(%d,%d)in(%dx%d)->(%d,%d)in(%dx%d))\n",
Shinya Kitaoka 120a6e
          x1, y1, x2, y2, rin->lx, rin->ly, newx, newy, rout->lx, rout->ly);
Shinya Kitaoka 120a6e
      return;
Shinya Kitaoka 120a6e
    }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
    rasras = RASRAS(rin->type, rout->type);
Shinya Kitaoka 120a6e
    switch (rasras) {
Shinya Kitaoka 120a6e
      CASE RASRAS(RAS_GR8, RAS_RGB_)
Shinya Kitaoka 120a6e
          : __OR RASRAS(RAS_GR8, RAS_RGBM)
Shinya Kitaoka 120a6e
          : rop_zoom_out_gr8_rgbm(rin, rout, x1, y1, x2, y2, newx, newy, abszl);
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
      CASE RASRAS(RAS_CM16, RAS_RGB_)
Shinya Kitaoka 120a6e
          : rop_zoom_out_cm16_rgbx(rin, rout, x1, y1, x2, y2, newx, newy,
Shinya Kitaoka 120a6e
                                   abszl);
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
      CASE RASRAS(RAS_CM24, RAS_RGB_)
Shinya Kitaoka 120a6e
          : rop_zoom_out_cm24_rgbx(rin, rout, x1, y1, x2, y2, newx, newy,
Shinya Kitaoka 120a6e
                                   abszl);
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
      CASE RASRAS(RAS_CM16, RAS_RGBM)
Shinya Kitaoka 120a6e
          : rop_zoom_out_cm16_rgbm(rin, rout, x1, y1, x2, y2, newx, newy,
Shinya Kitaoka 120a6e
                                   abszl);
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
      CASE RASRAS(RAS_CM24, RAS_RGBM)
Shinya Kitaoka 120a6e
          : rop_zoom_out_cm24_rgbm(rin, rout, x1, y1, x2, y2, newx, newy,
Shinya Kitaoka 120a6e
                                   abszl);
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
      CASE RASRAS(RAS_RGB, RAS_RGB16)
Shinya Kitaoka 120a6e
          : rop_zoom_out_rgb_rgb16(rin, rout, x1, y1, x2, y2, newx, newy,
Shinya Kitaoka 120a6e
                                   abszl);
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
      CASE RASRAS(RAS_RGB, RAS_RGB_)
Shinya Kitaoka 120a6e
          : __OR RASRAS(RAS_RGB, RAS_RGBM)
Shinya Kitaoka 120a6e
          : rop_zoom_out_rgb_rgbm(rin, rout, x1, y1, x2, y2, newx, newy, abszl);
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
      CASE RASRAS(RAS_BW, RAS_CM16)
Shinya Kitaoka 120a6e
          : __OR RASRAS(RAS_WB, RAS_CM16)
Shinya Kitaoka 120a6e
          : rop_zoom_out_bw_cm16(rin, rout, x1, y1, x2, y2, newx, newy, abszl);
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
      CASE RASRAS(RAS_BW, RAS_CM24)
Shinya Kitaoka 120a6e
          : __OR RASRAS(RAS_WB, RAS_CM24)
Shinya Kitaoka 120a6e
          : rop_zoom_out_bw_cm24(rin, rout, x1, y1, x2, y2, newx, newy, abszl);
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
      CASE RASRAS(RAS_BW, RAS_RGB_)
Shinya Kitaoka 120a6e
          : __OR RASRAS(RAS_BW, RAS_RGBM)
Shinya Kitaoka 120a6e
          : __OR RASRAS(RAS_WB, RAS_RGB_)
Shinya Kitaoka 120a6e
          : __OR RASRAS(RAS_WB, RAS_RGBM)
Shinya Kitaoka 120a6e
          : rop_zoom_out_bw_rgbm(rin, rout, x1, y1, x2, y2, newx, newy, abszl);
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
      CASE RASRAS(RAS_GR8, RAS_CM16)
Shinya Kitaoka 120a6e
          : rop_zoom_out_gr8_cm16(rin, rout, x1, y1, x2, y2, newx, newy, abszl);
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
      CASE RASRAS(RAS_GR8, RAS_CM24)
Shinya Kitaoka 120a6e
          : rop_zoom_out_gr8_cm24(rin, rout, x1, y1, x2, y2, newx, newy, abszl);
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
      CASE RASRAS(RAS_WB, RAS_GR8)
Shinya Kitaoka 120a6e
          : __OR RASRAS(RAS_BW, RAS_GR8)
Shinya Kitaoka 120a6e
          : rop_zoom_out_bw_gr8(rin, rout, x1, y1, x2, y2, newx, newy, abszl);
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
      CASE RASRAS(RAS_GR8, RAS_GR8)
Shinya Kitaoka 120a6e
          : rop_zoom_out_gr8(rin, rout, x1, y1, x2, y2, newx, newy, abszl);
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
      CASE RASRAS(RAS_CM16, RAS_CM16)
Shinya Kitaoka 120a6e
          : rop_zoom_out_cm16(rin, rout, x1, y1, x2, y2, newx, newy, abszl);
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
      CASE RASRAS(RAS_CM16, RAS_CM24)
Shinya Kitaoka 120a6e
          : rop_zoom_out_cm24(rin, rout, x1, y1, x2, y2, newx, newy, abszl);
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
      CASE RASRAS(RAS_RGB_, RAS_RGB_)
Shinya Kitaoka 120a6e
          : __OR RASRAS(RAS_RGB_, RAS_RGBM)
Shinya Kitaoka 120a6e
          : __OR RASRAS(RAS_RGBM, RAS_RGB_)
Shinya Kitaoka 120a6e
          : rop_zoom_out_rgbx(rin, rout, x1, y1, x2, y2, newx, newy, abszl);
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
      CASE RASRAS(RAS_RGBM, RAS_RGBM)
Shinya Kitaoka 120a6e
          : rop_zoom_out_rgbm(rin, rout, x1, y1, x2, y2, newx, newy, abszl);
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
      CASE RASRAS(RAS_BW, RAS_RGB16)
Shinya Kitaoka 120a6e
          : __OR RASRAS(RAS_WB, RAS_RGB16)
Shinya Kitaoka 120a6e
          : rop_zoom_out_bw_rgb16(rin, rout, x1, y1, x2, y2, newx, newy, abszl);
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
      CASE RASRAS(RAS_GR8, RAS_RGB16)
Shinya Kitaoka 120a6e
          : rop_zoom_out_gr8_rgb16(rin, rout, x1, y1, x2, y2, newx, newy,
Shinya Kitaoka 120a6e
                                   abszl);
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
      CASE RASRAS(RAS_CM16, RAS_RGB16)
Shinya Kitaoka 120a6e
          : rop_zoom_out_cm16_rgb16(rin, rout, x1, y1, x2, y2, newx, newy,
Shinya Kitaoka 120a6e
                                    abszl);
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
      CASE RASRAS(RAS_CM24, RAS_RGB16)
Shinya Kitaoka 120a6e
          : rop_zoom_out_cm24_rgb16(rin, rout, x1, y1, x2, y2, newx, newy,
Shinya Kitaoka 120a6e
                                    abszl);
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
      CASE RASRAS(RAS_RGB_, RAS_RGB16)
Shinya Kitaoka 120a6e
          : __OR RASRAS(RAS_RGBM, RAS_RGB16)
Shinya Kitaoka 120a6e
          : rop_zoom_out_rgbx_rgb16(rin, rout, x1, y1, x2, y2, newx, newy,
Shinya Kitaoka 120a6e
                                    abszl);
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
      ?I 95 CASE RASRAS(RAS_RGBM64, RAS_RGB_)
Shinya Kitaoka 120a6e
          : __OR RASRAS(RAS_RGB_64, RAS_RGB_)
Shinya Kitaoka 120a6e
          : __OR RASRAS(RAS_RGB_64, RAS_RGBM)
Shinya Kitaoka 120a6e
          : rop_zoom_out_rgbx64_rgbx(rin, rout, x1, y1, x2, y2, newx, newy,
Shinya Kitaoka 120a6e
                                     abszl);
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
      CASE RASRAS(RAS_RGBM64, RAS_RGB16)
Shinya Kitaoka 120a6e
          : __OR RASRAS(RAS_RGB_64, RAS_RGB16)
Shinya Kitaoka 120a6e
          : rop_zoom_out_rgbx64_rgb16(rin, rout, x1, y1, x2, y2, newx, newy,
Shinya Kitaoka 120a6e
                                      abszl);
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
      CASE RASRAS(RAS_RGBM64, RAS_RGBM)
Shinya Kitaoka 120a6e
          : rop_zoom_out_rgbm64_rgbm(rin, rout, x1, y1, x2, y2, newx, newy,
Shinya Kitaoka 120a6e
                                     abszl);
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
      ?E 95 DEFAULT : assert(!"rop_zoom_out; invalid raster combination");
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  /*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  /* copia un rettangolo da rin a rout,
Shinya Kitaoka 120a6e
* specchiandolo orizzontalmente se mirror e' dispari,
Shinya Kitaoka 120a6e
* e poi ruotandolo del multiplo di novanta gradi specificato
Shinya Kitaoka 120a6e
* da ninety in senso antiorario
Shinya Kitaoka 120a6e
*
Shinya Kitaoka 120a6e
*/
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  void rop_copy_90(RASTER * rin, RASTER * rout, int x1, int y1, int x2, int y2,
Shinya Kitaoka 120a6e
                   int newx, int newy, int mirror, int ninety) {
Shinya Kitaoka 120a6e
    int newdx, newdy, tmp;
Shinya Kitaoka 120a6e
    int rasras;
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
    ?I 89 if (rout->extra_mask) assert(0);
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
    ?E 89 mirror &= 1;
Shinya Kitaoka 120a6e
    ninety &= 3;
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
    if (!ninety && !mirror) {
Shinya Kitaoka 120a6e
      rop_copy(rin, rout, x1, y1, x2, y2, newx, newy);
Shinya Kitaoka 120a6e
      return;
Shinya Kitaoka 120a6e
    }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
    /* raddrizzo gli estremi */
Shinya Kitaoka 120a6e
    if (x1 > x2) {
Shinya Kitaoka 120a6e
      tmp = x1;
Shinya Kitaoka 120a6e
      x1  = x2;
Shinya Kitaoka 120a6e
      x2  = tmp;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    if (y1 > y2) {
Shinya Kitaoka 120a6e
      tmp = y1;
Shinya Kitaoka 120a6e
      y1  = y2;
Shinya Kitaoka 120a6e
      y2  = tmp;
Shinya Kitaoka 120a6e
    }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
    switch (ninety) {
Shinya Kitaoka 120a6e
      CASE 0 : __OR 2 : newdx = x2 - x1 + 1;
Shinya Kitaoka 120a6e
      newdy                   = y2 - y1 + 1;
Shinya Kitaoka 120a6e
      CASE 1 : __OR 3 : newdx = y2 - y1 + 1;
Shinya Kitaoka 120a6e
      newdy                   = x2 - x1 + 1;
Shinya Kitaoka 120a6e
    DEFAULT:
Shinya Kitaoka 120a6e
      abort();
Shinya Kitaoka 120a6e
      newdx = newdy = 0;
Shinya Kitaoka 120a6e
    }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
    /* controllo gli sconfinamenti */
Shinya Kitaoka 120a6e
    if (x1 < 0 || y1 < 0 || x2 >= rin->lx || y2 >= rin->ly || newx < 0 ||
Shinya Kitaoka 120a6e
        newy < 0 || newx + newdx > rout->lx || newy + newdy > rout->ly) {
Shinya Kitaoka 120a6e
      printf("### INTERNAL ERROR - rop_copy_90; access violation\n");
Shinya Kitaoka 120a6e
      return;
Shinya Kitaoka 120a6e
    }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
    rasras = RASRAS(rin->type, rout->type);
Shinya Kitaoka 120a6e
    switch (rasras) {
Shinya Kitaoka 120a6e
      CASE RASRAS(RAS_WB, RAS_WB)
Shinya Kitaoka 120a6e
          : __OR RASRAS(RAS_BW, RAS_BW)
Shinya Kitaoka 120a6e
          : rop_copy_90_bw(rin, rout, x1, y1, x2, y2, newx, newy, mirror,
Shinya Kitaoka 120a6e
                           ninety);
Shinya Kitaoka 120a6e
      return;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
      CASE RASRAS(RAS_WB, RAS_GR8)
Shinya Kitaoka 120a6e
          : __OR RASRAS(RAS_BW, RAS_GR8)
Shinya Kitaoka 120a6e
          : rop_copy_90_bw_gr8(rin, rout, x1, y1, x2, y2, newx, newy, mirror,
Shinya Kitaoka 120a6e
                               ninety);
Shinya Kitaoka 120a6e
      return;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
      CASE RASRAS(RAS_WB, RAS_CM16)
Shinya Kitaoka 120a6e
          : __OR RASRAS(RAS_BW, RAS_CM16)
Shinya Kitaoka 120a6e
          : rop_copy_90_bw_cm16(rin, rout, x1, y1, x2, y2, newx, newy, mirror,
Shinya Kitaoka 120a6e
                                ninety);
Shinya Kitaoka 120a6e
      return;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
      CASE RASRAS(RAS_WB, RAS_CM24)
Shinya Kitaoka 120a6e
          : __OR RASRAS(RAS_BW, RAS_CM24)
Shinya Kitaoka 120a6e
          : rop_copy_90_bw_cm24(rin, rout, x1, y1, x2, y2, newx, newy, mirror,
Shinya Kitaoka 120a6e
                                ninety);
Shinya Kitaoka 120a6e
      return;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
      CASE RASRAS(RAS_WB, RAS_RGB16)
Shinya Kitaoka 120a6e
          : __OR RASRAS(RAS_BW, RAS_RGB16)
Shinya Kitaoka 120a6e
          : rop_copy_90_bw_rgb16(rin, rout, x1, y1, x2, y2, newx, newy, mirror,
Shinya Kitaoka 120a6e
                                 ninety);
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
      CASE RASRAS(RAS_WB, RAS_RGB_)
Shinya Kitaoka 120a6e
          : __OR RASRAS(RAS_WB, RAS_RGBM)
Shinya Kitaoka 120a6e
          : __OR RASRAS(RAS_BW, RAS_RGB_)
Shinya Kitaoka 120a6e
          : __OR RASRAS(RAS_BW, RAS_RGBM)
Shinya Kitaoka 120a6e
          : rop_copy_90_bw_rgbm(rin, rout, x1, y1, x2, y2, newx, newy, mirror,
Shinya Kitaoka 120a6e
                                ninety);
Shinya Kitaoka 120a6e
      return;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
      CASE RASRAS(RAS_GR8, RAS_GR8)
Shinya Kitaoka 120a6e
          : rop_copy_90_gr8(rin, rout, x1, y1, x2, y2, newx, newy, mirror,
Shinya Kitaoka 120a6e
                            ninety);
Shinya Kitaoka 120a6e
      return;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
      CASE RASRAS(RAS_GR8, RAS_CM16)
Shinya Kitaoka 120a6e
          : rop_copy_90_gr8_cm16(rin, rout, x1, y1, x2, y2, newx, newy, mirror,
Shinya Kitaoka 120a6e
                                 ninety);
Shinya Kitaoka 120a6e
      return;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
      CASE RASRAS(RAS_GR8, RAS_CM24)
Shinya Kitaoka 120a6e
          : rop_copy_90_gr8_cm24(rin, rout, x1, y1, x2, y2, newx, newy, mirror,
Shinya Kitaoka 120a6e
                                 ninety);
Shinya Kitaoka 120a6e
      return;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
      CASE RASRAS(RAS_GR8, RAS_RGB16)
Shinya Kitaoka 120a6e
          : rop_copy_90_gr8_rgb16(rin, rout, x1, y1, x2, y2, newx, newy, mirror,
Shinya Kitaoka 120a6e
                                  ninety);
Shinya Kitaoka 120a6e
      return;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
      CASE RASRAS(RAS_GR8, RAS_RGB_)
Shinya Kitaoka 120a6e
          : __OR RASRAS(RAS_GR8, RAS_RGBM)
Shinya Kitaoka 120a6e
          : rop_copy_90_gr8_rgbm(rin, rout, x1, y1, x2, y2, newx, newy, mirror,
Shinya Kitaoka 120a6e
                                 ninety);
Shinya Kitaoka 120a6e
      return;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
      CASE RASRAS(RAS_CM8, RAS_CM16)
Shinya Kitaoka 120a6e
          : rop_copy_90_cm8_cm16(rin, rout, x1, y1, x2, y2, newx, newy, mirror,
Shinya Kitaoka 120a6e
                                 ninety);
Shinya Kitaoka 120a6e
      return;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
      CASE RASRAS(RAS_CM8, RAS_CM24)
Shinya Kitaoka 120a6e
          : rop_copy_90_cm8_cm24(rin, rout, x1, y1, x2, y2, newx, newy, mirror,
Shinya Kitaoka 120a6e
                                 ninety);
Shinya Kitaoka 120a6e
      return;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
      CASE RASRAS(RAS_RGB_, RAS_RGB_)
Shinya Kitaoka 120a6e
          : __OR RASRAS(RAS_RGBM, RAS_RGB_)
Shinya Kitaoka 120a6e
          : __OR RASRAS(RAS_RGBM, RAS_RGBM)
Shinya Kitaoka 120a6e
          : rop_copy_90_rgbm(rin, rout, x1, y1, x2, y2, newx, newy, mirror,
Shinya Kitaoka 120a6e
                             ninety);
Shinya Kitaoka 120a6e
      return;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
      CASE RASRAS(RAS_RGB, RAS_RGB16)
Shinya Kitaoka 120a6e
          : rop_copy_90_rgb_rgb16(rin, rout, x1, y1, x2, y2, newx, newy, mirror,
Shinya Kitaoka 120a6e
                                  ninety);
Shinya Kitaoka 120a6e
      return;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
      CASE RASRAS(RAS_RGB, RAS_RGB_)
Shinya Kitaoka 120a6e
          : __OR RASRAS(RAS_RGB, RAS_RGBM)
Shinya Kitaoka 120a6e
          : rop_copy_90_rgb_rgbm(rin, rout, x1, y1, x2, y2, newx, newy, mirror,
Shinya Kitaoka 120a6e
                                 ninety);
Shinya Kitaoka 120a6e
      return;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
    DEFAULT:
Shinya Kitaoka 120a6e
      abort();
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
#ifdef VERSIONE_LENTA
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  static void rop_copy_90_bw(RASTER * rin, RASTER * rout, int x1, int y1,
Shinya Kitaoka 120a6e
                             int x2, int y2, int newx, int newy, int mirror,
Shinya Kitaoka 120a6e
                             int ninety) {
Shinya Kitaoka 120a6e
    UCHAR *bufin, *bufout;
Shinya Kitaoka 120a6e
    int bytewrapin, bytewrapout, bitoffsin, bitoffsout, wrapin;
Shinya Kitaoka 120a6e
    int u, v, lu, lv, su, sv, u00, v00, u0, v0, dudx, dudy, dvdx, dvdy;
Shinya Kitaoka 120a6e
    int x, y, lx, ly;
Shinya Kitaoka 120a6e
    int u1, v1, u2, v2;
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
#ifdef DEBUG
Shinya Kitaoka 120a6e
    STW_INIT(0, "rop_copy_90_bw")
Shinya Kitaoka 120a6e
    ?E 84 STW_START(0)
Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd
?E 14
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?I 14 mirror &= 1;
Shinya Kitaoka 120a6e
    ninety &= 3;
Shinya Kitaoka 120a6e
    ?E 14
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?D 14 if (!ninety && !flip)
Toshihiro Shimizu 890ddd
?E 14
Toshihiro Shimizu 890ddd
?I 14 if (!ninety && !mirror)
Shinya Kitaoka 120a6e
?E 14 {
Shinya Kitaoka 120a6e
      rop_copy(rin, rout, x1, y1, x2, y2, newx, newy);
Shinya Kitaoka 120a6e
      return;
Shinya Kitaoka 120a6e
    }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
    ?D 14 lx     = x2 - x1 + 1;
Shinya Kitaoka 120a6e
    ly           = y2 - y1 + 1;
Shinya Kitaoka 120a6e
    ?D 10 wrapin = rin->wrap;
Shinya Kitaoka 120a6e
    wrapout      = rout->wrap;
Shinya Kitaoka 120a6e
    bit_offs     = rin->bit_offs;
Shinya Kitaoka 120a6e
    ?E 10
Shinya Kitaoka 120a6e
?I 10 wrapin    = rin->wrap / 8;
Shinya Kitaoka 120a6e
    bit_offs     = rin->bit_offs;
Shinya Kitaoka 120a6e
    wrapout      = rout->wrap;
Shinya Kitaoka 120a6e
    ?E 14
Shinya Kitaoka 120a6e
?I 14 u1        = x1;
Shinya Kitaoka 120a6e
    v1           = y1;
Shinya Kitaoka 120a6e
    u2           = x2;
Shinya Kitaoka 120a6e
    v2           = y2;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
    su       = u2 - u1;
Shinya Kitaoka 120a6e
    sv       = v2 - v1;
Shinya Kitaoka 120a6e
    lu       = u2 - u1 + 1;
Shinya Kitaoka 120a6e
    lv       = v2 - v1 + 1;
Shinya Kitaoka 120a6e
    ?E 14
Toshihiro Shimizu 890ddd
?E 10
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?D 14 rowin = (UCHAR *)rin->buffer + wrapin * y1 + ((x1 + bit_offs) >> 3);
Shinya Kitaoka 120a6e
    startbit = 7 - ((x1 + bit_offs) & 7);
Shinya Kitaoka 120a6e
    rowout   = (USHORT *)rout->buffer + wrapout * newy + newx;
Shinya Kitaoka 120a6e
    while (ly-- > 0)
Toshihiro Shimizu 890ddd
			?E 14
Toshihiro Shimizu 890ddd
?I 14 if (ninety & 1)
Shinya Kitaoka 120a6e
?E 14 {
Shinya Kitaoka 120a6e
        ?D 14 bytein = rowin;
Shinya Kitaoka 120a6e
        bit          = startbit;
Shinya Kitaoka 120a6e
        pixout       = rowout;
Shinya Kitaoka 120a6e
        for (x = lx; x > 0; x--) {
Shinya Kitaoka 120a6e
        outbyte = outx
Toshihiro Shimizu 890ddd
    SET_BIT (rout->buffer
Toshihiro Shimizu 890ddd
    *pixout++ = ((*bytein >> bit) & 1) ? i_1 : i_0;
Toshihiro Shimizu 890ddd
    if (bit==0)
Toshihiro Shimizu 890ddd
?E 14
Toshihiro Shimizu 890ddd
?I 14
Toshihiro Shimizu 890ddd
  lx = lv;
Toshihiro Shimizu 890ddd
  ly = lu;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
        else {
Shinya Kitaoka 120a6e
          lx = lu;
Shinya Kitaoka 120a6e
          ly = lv;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        dudx = 0;
Shinya Kitaoka 120a6e
        dudy = 0;
Shinya Kitaoka 120a6e
        dvdx = 0;
Shinya Kitaoka 120a6e
        dvdy = 0;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        switch ((mirror << 2) + ninety) {
Shinya Kitaoka 120a6e
          CASE(0 << 2) + 0 : u00 = u1;
Shinya Kitaoka 120a6e
          v00                    = v1;
Shinya Kitaoka 120a6e
          dudx                   = 1;
Shinya Kitaoka 120a6e
          dvdy                   = 1;
Shinya Kitaoka 120a6e
          CASE(0 << 2) + 1 : u00 = u1;
Shinya Kitaoka 120a6e
          v00                    = v1 + sv;
Shinya Kitaoka 120a6e
          dudy                   = 1;
Shinya Kitaoka 120a6e
          dvdx                   = -1;
Shinya Kitaoka 120a6e
          CASE(0 << 2) + 2 : u00 = u1 + su;
Shinya Kitaoka 120a6e
          v00                    = v1 + sv;
Shinya Kitaoka 120a6e
          dudx                   = -1;
Shinya Kitaoka 120a6e
          dvdy                   = -1;
Shinya Kitaoka 120a6e
          CASE(0 << 2) + 3 : u00 = u1 + su;
Shinya Kitaoka 120a6e
          v00                    = v1;
Shinya Kitaoka 120a6e
          dudy                   = -1;
Shinya Kitaoka 120a6e
          dvdx                   = 1;
Shinya Kitaoka 120a6e
          CASE(1 << 2) + 0 : u00 = u1 + su;
Shinya Kitaoka 120a6e
          v00                    = v1;
Shinya Kitaoka 120a6e
          dudx                   = -1;
Shinya Kitaoka 120a6e
          dvdy                   = 1;
Shinya Kitaoka 120a6e
          CASE(1 << 2) + 1 : u00 = u1 + su;
Shinya Kitaoka 120a6e
          v00                    = v1 + sv;
Shinya Kitaoka 120a6e
          dudy                   = -1;
Shinya Kitaoka 120a6e
          dvdx                   = -1;
Shinya Kitaoka 120a6e
          CASE(1 << 2) + 2 : u00 = u1;
Shinya Kitaoka 120a6e
          v00                    = v1 + sv;
Shinya Kitaoka 120a6e
          dudx                   = 1;
Shinya Kitaoka 120a6e
          dvdy                   = -1;
Shinya Kitaoka 120a6e
          CASE(1 << 2) + 3 : u00 = u1;
Shinya Kitaoka 120a6e
          v00                    = v1;
Shinya Kitaoka 120a6e
          dudy                   = 1;
Shinya Kitaoka 120a6e
          dvdx                   = 1;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        ?D 16 bufin       = rin->buffer;
Shinya Kitaoka 120a6e
        bytewrapin        = rin->wrap / 8;
Shinya Kitaoka 120a6e
        bitoffsin         = rin->bit_offs;
Shinya Kitaoka 120a6e
        ?E 16
Shinya Kitaoka 120a6e
?I 16 bufin              = rin->buffer;
Shinya Kitaoka 120a6e
        ?D 47 bytewrapin  = (rin->wrap + 7) / 8;
Shinya Kitaoka 120a6e
        ?E 47
Shinya Kitaoka 120a6e
?I 47 bytewrapin         = (rin->wrap + 7) >> 3;
Shinya Kitaoka 120a6e
        ?E 47 bitoffsin   = rin->bit_offs;
Shinya Kitaoka 120a6e
        ?E 16 bufout      = rout->buffer;
Shinya Kitaoka 120a6e
        ?D 16 bytewrapout = rout->wrap / 8;
Shinya Kitaoka 120a6e
        ?E 16
Toshihiro Shimizu 890ddd
?I 16
Shinya Kitaoka 120a6e
?D 47 bytewrapout        = (rout->wrap + 7) / 8;
Shinya Kitaoka 120a6e
        ?E 47
Shinya Kitaoka 120a6e
?I 47 bytewrapout        = (rout->wrap + 7) >> 3;
Shinya Kitaoka 120a6e
        ?E 47
Shinya Kitaoka 120a6e
?E 16 bitoffsout         = rout->bit_offs;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        if (dudx)
Shinya Kitaoka 120a6e
          for (u0 = u00, v0 = v00, y = newy; y < newy + ly; v0 += dvdy, y++)
Shinya Kitaoka 120a6e
            for (u = u0, v = v0, x = newx; x < newx + lx; u += dudx, x++)
Shinya Kitaoka 120a6e
              ?E 14 {
Shinya Kitaoka 120a6e
                ?D 14 bytein++;
Shinya Kitaoka 120a6e
                bit = 7;
Shinya Kitaoka 120a6e
                ?E 14
Toshihiro Shimizu 890ddd
?I 14 if (GET_BIT(u, v, bufin, bytewrapin, bitoffsin))
Shinya Kitaoka 120a6e
                    SET_BIT_1(x, y, bufout, bytewrapout, bitoffsout);
Shinya Kitaoka 120a6e
                else SET_BIT_0(x, y, bufout, bytewrapout, bitoffsout);
Shinya Kitaoka 120a6e
                ?E 14
Shinya Kitaoka 120a6e
              }
Shinya Kitaoka 120a6e
        ?D 14 else bit--;
Shinya Kitaoka 120a6e
      }
Shinya Kitaoka 120a6e
    rowin += wrapin;
Shinya Kitaoka 120a6e
    rowout += wrapout;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  ?E 14
Shinya Kitaoka 120a6e
?I 14 else for (u0 = u00, v0 = v00, y = newy; y < newy + ly;
Shinya Kitaoka 120a6e
                 u0 += dudy, y++) for (u = u0, v = v0, x = newx; x < newx + lx;
Shinya Kitaoka 120a6e
                                       v += dvdx, x++) {
Shinya Kitaoka 120a6e
    if (GET_BIT(u, v, bufin, bytewrapin, bitoffsin))
Shinya Kitaoka 120a6e
      SET_BIT_1(x, y, bufout, bytewrapout, bitoffsout);
Shinya Kitaoka 120a6e
    else
Shinya Kitaoka 120a6e
      SET_BIT_0(x, y, bufout, bytewrapout, bitoffsout);
Shinya Kitaoka 120a6e
    ?I 82
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  ?E 82
Toshihiro Shimizu 890ddd
?D 82
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
?E 82
Toshihiro Shimizu 890ddd
?I 15
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
#ifdef DEBUG
Shinya Kitaoka 120a6e
    STW_STOP(0) STW_PRINT(stdout)
Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
static void rop_copy_90_bw(RASTER *rin, RASTER *rout, int x1, int y1, int x2,
Shinya Kitaoka 120a6e
                           int y2, int newx, int newy, int mirror, int ninety) {
Shinya Kitaoka 120a6e
  UCHAR *bufin, *bufout;
Shinya Kitaoka 120a6e
  UCHAR tmpbyte;
Shinya Kitaoka 120a6e
  int bytewrapin, bytewrapout, bitoffsin, bitoffsout, wrapin;
Shinya Kitaoka 120a6e
  ?I 83 int u, v, lu, lv, su, sv, u00, v00, u0, v0, dudx, dudy, dvdx, dvdy;
Shinya Kitaoka 120a6e
  int x, y, lx, ly;
Shinya Kitaoka 120a6e
  int u1, v1, u2, v2;
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
#ifdef DEBUG
Shinya Kitaoka 120a6e
  STW_INIT(0, "rop_copy_90_bw")
Shinya Kitaoka 120a6e
  STW_START(0)
Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  mirror &= 1;
Shinya Kitaoka 120a6e
  ninety &= 3;
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  if (!ninety && !mirror) {
Shinya Kitaoka 120a6e
    rop_copy(rin, rout, x1, y1, x2, y2, newx, newy);
Shinya Kitaoka 120a6e
    return;
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  u1 = x1;
Shinya Kitaoka 120a6e
  v1 = y1;
Shinya Kitaoka 120a6e
  ?E 83
Toshihiro Shimizu 890ddd
?D 83 int u, v, lu, lv, su, sv, u00, v00, u0, v0, dudx, dudy, dvdx, dvdy;
Shinya Kitaoka 120a6e
  int x, y, lx, ly;
Shinya Kitaoka 120a6e
  int u1, v1, u2, v2;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  ?D 61
Shinya Kitaoka 120a6e
#define BUFBYTE(X, Y, BUF, BYTEWRAP, BITOFFS)                                  \
Shinya Kitaoka 120a6e
  (((UCHAR *)(BUF))[(((X) + (BITOFFS)) >> 3) + (Y) * (BYTEWRAP)])
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
#define GET_BIT(X, Y, BUF, BYTEWRAP, BITOFFS)                                  \
Shinya Kitaoka 120a6e
  ((BUFBYTE(X, Y, BUF, BYTEWRAP, BITOFFS) >> (7 - (((X) + (BITOFFS)) & 7))) &  \
Shinya Kitaoka 120a6e
   (UCHAR)1)
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
#define SET_BIT_0(X, Y, BUF, BYTEWRAP, BITOFFS)                                \
Shinya Kitaoka 120a6e
  (BUFBYTE(X, Y, BUF, BYTEWRAP, BITOFFS) &=                                    \
Shinya Kitaoka 120a6e
   ~(1 << (7 - (((X) + (BITOFFS)) & 7))))
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
#define SET_BIT_1(X, Y, BUF, BYTEWRAP, BITOFFS)                                \
Shinya Kitaoka 120a6e
  (BUFBYTE(X, Y, BUF, BYTEWRAP, BITOFFS) |=                                    \
Shinya Kitaoka 120a6e
   (1 << (7 - (((X) + (BITOFFS)) & 7))))
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
#define BITCPY(XO, YO, BUFO, BYTEWRAPO, BITOFFSO, XI, YI, BUFI, BYTEWRAPI,     \
Shinya Kitaoka 120a6e
               BITOFFSI)                                                       \
Shinya Kitaoka 120a6e
  {                                                                            \
Shinya Kitaoka 120a6e
    if (GET_BIT(XI, YI, BUFI, BYTEWRAPI, BITOFFSI))                            \
Shinya Kitaoka 120a6e
      SET_BIT_1(XO, YO, BUFO, BYTEWRAPO, BITOFFSO);                            \
Shinya Kitaoka 120a6e
    else                                                                       \
Shinya Kitaoka 120a6e
      SET_BIT_0(XO, YO, BUFO, BYTEWRAPO, BITOFFSO);                            \
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?E 61
Toshihiro Shimizu 890ddd
#ifdef DEBUG
Shinya Kitaoka 120a6e
      STW_INIT(0, "rop_copy_90_bw") STW_START(0)
Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
          mirror &= 1;
Shinya Kitaoka 120a6e
  ninety &= 3;
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  if (!ninety && !mirror) {
Shinya Kitaoka 120a6e
    rop_copy(rin, rout, x1, y1, x2, y2, newx, newy);
Shinya Kitaoka 120a6e
    return;
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  u1       = x1;
Shinya Kitaoka 120a6e
  v1       = y1;
Shinya Kitaoka 120a6e
  ?E 83 u2 = x2;
Shinya Kitaoka 120a6e
  v2       = y2;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  su = u2 - u1;
Shinya Kitaoka 120a6e
  sv = v2 - v1;
Shinya Kitaoka 120a6e
  lu = u2 - u1 + 1;
Shinya Kitaoka 120a6e
  lv = v2 - v1 + 1;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  if (ninety & 1) {
Shinya Kitaoka 120a6e
    lx = lv;
Shinya Kitaoka 120a6e
    ly = lu;
Shinya Kitaoka 120a6e
  } else {
Shinya Kitaoka 120a6e
    lx = lu;
Shinya Kitaoka 120a6e
    ly = lv;
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  dudx = 0;
Shinya Kitaoka 120a6e
  dudy = 0;
Shinya Kitaoka 120a6e
  dvdx = 0;
Shinya Kitaoka 120a6e
  dvdy = 0;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  switch ((mirror << 2) + ninety) {
Shinya Kitaoka 120a6e
    CASE(0 << 2) + 0 : u00 = u1;
Shinya Kitaoka 120a6e
    v00                    = v1;
Shinya Kitaoka 120a6e
    dudx                   = 1;
Shinya Kitaoka 120a6e
    dvdy                   = 1;
Shinya Kitaoka 120a6e
    CASE(0 << 2) + 1 : u00 = u1;
Shinya Kitaoka 120a6e
    v00                    = v1 + sv;
Shinya Kitaoka 120a6e
    dudy                   = 1;
Shinya Kitaoka 120a6e
    dvdx                   = -1;
Shinya Kitaoka 120a6e
    CASE(0 << 2) + 2 : u00 = u1 + su;
Shinya Kitaoka 120a6e
    v00                    = v1 + sv;
Shinya Kitaoka 120a6e
    dudx                   = -1;
Shinya Kitaoka 120a6e
    dvdy                   = -1;
Shinya Kitaoka 120a6e
    CASE(0 << 2) + 3 : u00 = u1 + su;
Shinya Kitaoka 120a6e
    v00                    = v1;
Shinya Kitaoka 120a6e
    dudy                   = -1;
Shinya Kitaoka 120a6e
    dvdx                   = 1;
Shinya Kitaoka 120a6e
    CASE(1 << 2) + 0 : u00 = u1 + su;
Shinya Kitaoka 120a6e
    v00                    = v1;
Shinya Kitaoka 120a6e
    dudx                   = -1;
Shinya Kitaoka 120a6e
    dvdy                   = 1;
Shinya Kitaoka 120a6e
    CASE(1 << 2) + 1 : u00 = u1 + su;
Shinya Kitaoka 120a6e
    v00                    = v1 + sv;
Shinya Kitaoka 120a6e
    dudy                   = -1;
Shinya Kitaoka 120a6e
    dvdx                   = -1;
Shinya Kitaoka 120a6e
    CASE(1 << 2) + 2 : u00 = u1;
Shinya Kitaoka 120a6e
    v00                    = v1 + sv;
Shinya Kitaoka 120a6e
    dudx                   = 1;
Shinya Kitaoka 120a6e
    dvdy                   = -1;
Shinya Kitaoka 120a6e
    CASE(1 << 2) + 3 : u00 = u1;
Shinya Kitaoka 120a6e
    v00                    = v1;
Shinya Kitaoka 120a6e
    dudy                   = 1;
Shinya Kitaoka 120a6e
    dvdx                   = 1;
Shinya Kitaoka 120a6e
    ?I 50
Toshihiro Shimizu 890ddd
?D 78 DEFAULT : assert(FALSE);
Shinya Kitaoka 120a6e
    u00 = v00 = dudy = dvdx = 0;
Shinya Kitaoka 120a6e
    ?E 78
Toshihiro Shimizu 890ddd
?I 78 DEFAULT : abort();
Shinya Kitaoka 120a6e
    u00 = v00 = dudy = dvdx = 0;
Shinya Kitaoka 120a6e
    ?E 78
Toshihiro Shimizu 890ddd
?E 50
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  ?D 16 bufin       = rin->buffer;
Shinya Kitaoka 120a6e
  bytewrapin        = rin->wrap / 8;
Shinya Kitaoka 120a6e
  bitoffsin         = rin->bit_offs;
Shinya Kitaoka 120a6e
  ?E 16
Shinya Kitaoka 120a6e
?I 16 bufin        = rin->buffer;
Shinya Kitaoka 120a6e
  ?D 47 bytewrapin  = (rin->wrap + 7) / 8;
Shinya Kitaoka 120a6e
  ?E 47
Shinya Kitaoka 120a6e
?I 47 bytewrapin   = (rin->wrap + 7) >> 3;
Shinya Kitaoka 120a6e
  ?E 47 bitoffsin   = rin->bit_offs;
Shinya Kitaoka 120a6e
  ?E 16 bufout      = rout->buffer;
Shinya Kitaoka 120a6e
  ?D 16 bytewrapout = rout->wrap / 8;
Shinya Kitaoka 120a6e
  ?E 16
Toshihiro Shimizu 890ddd
?I 16
Shinya Kitaoka 120a6e
?D 47 bytewrapout  = (rout->wrap + 7) / 8;
Shinya Kitaoka 120a6e
  ?E 47
Shinya Kitaoka 120a6e
?I 47 bytewrapout  = (rout->wrap + 7) >> 3;
Shinya Kitaoka 120a6e
  ?E 47
Shinya Kitaoka 120a6e
?E 16 bitoffsout   = rout->bit_offs;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  if (dudx)
Shinya Kitaoka 120a6e
    for (u0 = u00, v0 = v00, y = newy; y < newy + ly; v0 += dvdy, y++) {
Shinya Kitaoka 120a6e
      u = u0;
Shinya Kitaoka 120a6e
      v = v0;
Shinya Kitaoka 120a6e
      x = newx;
Shinya Kitaoka 120a6e
      for (; x < newx + lx && ((x + bitoffsout) & 7); u += dudx, x++)
Shinya Kitaoka 120a6e
        BITCPY(x, y, bufout, bytewrapout, bitoffsout, u, v, bufin, bytewrapin,
Shinya Kitaoka 120a6e
               bitoffsin)
Shinya Kitaoka 120a6e
      for (; x < newx + lx - 7; x += 8) {
Shinya Kitaoka 120a6e
        tmpbyte = GET_BIT(u, v, bufin, bytewrapin, bitoffsin) << 7;
Shinya Kitaoka 120a6e
        u += dudx;
Shinya Kitaoka 120a6e
        tmpbyte |= GET_BIT(u, v, bufin, bytewrapin, bitoffsin) << 6;
Shinya Kitaoka 120a6e
        u += dudx;
Shinya Kitaoka 120a6e
        tmpbyte |= GET_BIT(u, v, bufin, bytewrapin, bitoffsin) << 5;
Shinya Kitaoka 120a6e
        u += dudx;
Shinya Kitaoka 120a6e
        tmpbyte |= GET_BIT(u, v, bufin, bytewrapin, bitoffsin) << 4;
Shinya Kitaoka 120a6e
        u += dudx;
Shinya Kitaoka 120a6e
        tmpbyte |= GET_BIT(u, v, bufin, bytewrapin, bitoffsin) << 3;
Shinya Kitaoka 120a6e
        u += dudx;
Shinya Kitaoka 120a6e
        tmpbyte |= GET_BIT(u, v, bufin, bytewrapin, bitoffsin) << 2;
Shinya Kitaoka 120a6e
        u += dudx;
Shinya Kitaoka 120a6e
        tmpbyte |= GET_BIT(u, v, bufin, bytewrapin, bitoffsin) << 1;
Shinya Kitaoka 120a6e
        u += dudx;
Shinya Kitaoka 120a6e
        tmpbyte |= GET_BIT(u, v, bufin, bytewrapin, bitoffsin);
Shinya Kitaoka 120a6e
        u += dudx;
Shinya Kitaoka 120a6e
        BUFBYTE(x, y, bufout, bytewrapout, bitoffsout) = tmpbyte;
Shinya Kitaoka 120a6e
      }
Shinya Kitaoka 120a6e
      for (; x < newx + lx; u += dudx, x++)
Shinya Kitaoka 120a6e
        BITCPY(x, y, bufout, bytewrapout, bitoffsout, u, v, bufin, bytewrapin,
Shinya Kitaoka 120a6e
               bitoffsin)
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
  else
Shinya Kitaoka 120a6e
    for (u0 = u00, v0 = v00, y = newy; y < newy + ly; u0 += dudy, y++) {
Shinya Kitaoka 120a6e
      u = u0;
Shinya Kitaoka 120a6e
      v = v0;
Shinya Kitaoka 120a6e
      x = newx;
Shinya Kitaoka 120a6e
      for (; x < newx + lx && ((x + bitoffsout) & 7); v += dvdx, x++)
Shinya Kitaoka 120a6e
        BITCPY(x, y, bufout, bytewrapout, bitoffsout, u, v, bufin, bytewrapin,
Shinya Kitaoka 120a6e
               bitoffsin)
Shinya Kitaoka 120a6e
      for (; x < newx + lx - 7; x += 8) {
Shinya Kitaoka 120a6e
        tmpbyte = GET_BIT(u, v, bufin, bytewrapin, bitoffsin) << 7;
Shinya Kitaoka 120a6e
        v += dvdx;
Shinya Kitaoka 120a6e
        tmpbyte |= GET_BIT(u, v, bufin, bytewrapin, bitoffsin) << 6;
Shinya Kitaoka 120a6e
        v += dvdx;
Shinya Kitaoka 120a6e
        tmpbyte |= GET_BIT(u, v, bufin, bytewrapin, bitoffsin) << 5;
Shinya Kitaoka 120a6e
        v += dvdx;
Shinya Kitaoka 120a6e
        tmpbyte |= GET_BIT(u, v, bufin, bytewrapin, bitoffsin) << 4;
Shinya Kitaoka 120a6e
        v += dvdx;
Shinya Kitaoka 120a6e
        tmpbyte |= GET_BIT(u, v, bufin, bytewrapin, bitoffsin) << 3;
Shinya Kitaoka 120a6e
        v += dvdx;
Shinya Kitaoka 120a6e
        tmpbyte |= GET_BIT(u, v, bufin, bytewrapin, bitoffsin) << 2;
Shinya Kitaoka 120a6e
        v += dvdx;
Shinya Kitaoka 120a6e
        tmpbyte |= GET_BIT(u, v, bufin, bytewrapin, bitoffsin) << 1;
Shinya Kitaoka 120a6e
        v += dvdx;
Shinya Kitaoka 120a6e
        tmpbyte |= GET_BIT(u, v, bufin, bytewrapin, bitoffsin);
Shinya Kitaoka 120a6e
        v += dvdx;
Shinya Kitaoka 120a6e
        BUFBYTE(x, y, bufout, bytewrapout, bitoffsout) = tmpbyte;
Shinya Kitaoka 120a6e
      }
Shinya Kitaoka 120a6e
      for (; x < newx + lx; v += dvdx, x++)
Shinya Kitaoka 120a6e
        BITCPY(x, y, bufout, bytewrapout, bitoffsout, u, v, bufin, bytewrapin,
Shinya Kitaoka 120a6e
               bitoffsin)
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
  ?E 15
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
#ifdef DEBUG
Shinya Kitaoka 120a6e
      STW_STOP(0) STW_PRINT(stdout)
Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd
?E 14
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?I 14
Toshihiro Shimizu 890ddd
#ifdef VERSIONE_LENTA
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
    static void
Shinya Kitaoka 120a6e
    rop_copy_90_gr8(RASTER *rin, RASTER *rout, int x1, int y1, int x2, int y2,
Shinya Kitaoka 120a6e
                    int newx, int newy, int mirror, int ninety) {
Shinya Kitaoka 120a6e
  UCHAR *bufin, *bufout;
Shinya Kitaoka 120a6e
  int wrapin, wrapout;
Shinya Kitaoka 120a6e
  int u, v, lu, lv, su, sv, u00, v00, u0, v0, dudx, dudy, dvdx, dvdy;
Shinya Kitaoka 120a6e
  int x, y, lx, ly;
Shinya Kitaoka 120a6e
  int u1, v1, u2, v2;
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
#ifdef DEBUG
Shinya Kitaoka 120a6e
  STW_INIT(0, "rop_copy_90_gr8")
Shinya Kitaoka 120a6e
  STW_START(0)
Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd
?E 14
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?D 14
Toshihiro Shimizu 890ddd
#else
Toshihiro Shimizu 890ddd
?E 14
Toshihiro Shimizu 890ddd
?I 14 mirror &= 1;
Shinya Kitaoka 120a6e
  ninety &= 3;
Shinya Kitaoka 120a6e
  ?E 14
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?D 14 if (!ninety && !flip)
Toshihiro Shimizu 890ddd
?E 14
Toshihiro Shimizu 890ddd
?I 14 if (!ninety && !mirror)
Shinya Kitaoka 120a6e
?E 14 {
Shinya Kitaoka 120a6e
    rop_copy(rin, rout, x1, y1, x2, y2, newx, newy);
Shinya Kitaoka 120a6e
    return;
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  ?I 14 u1 = x1;
Shinya Kitaoka 120a6e
  v1       = y1;
Shinya Kitaoka 120a6e
  u2       = x2;
Shinya Kitaoka 120a6e
  v2       = y2;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  su = u2 - u1;
Shinya Kitaoka 120a6e
  sv = v2 - v1;
Shinya Kitaoka 120a6e
  lu = u2 - u1 + 1;
Shinya Kitaoka 120a6e
  lv = v2 - v1 + 1;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  if (ninety & 1) {
Shinya Kitaoka 120a6e
    lx = lv;
Shinya Kitaoka 120a6e
    ly = lu;
Shinya Kitaoka 120a6e
  } else {
Shinya Kitaoka 120a6e
    lx = lu;
Shinya Kitaoka 120a6e
    ly = lv;
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  dudx = 0;
Shinya Kitaoka 120a6e
  dudy = 0;
Shinya Kitaoka 120a6e
  dvdx = 0;
Shinya Kitaoka 120a6e
  dvdy = 0;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  switch ((mirror << 2) + ninety) {
Shinya Kitaoka 120a6e
    CASE(0 << 2) + 0 : u00 = u1;
Shinya Kitaoka 120a6e
    v00                    = v1;
Shinya Kitaoka 120a6e
    dudx                   = 1;
Shinya Kitaoka 120a6e
    dvdy                   = 1;
Shinya Kitaoka 120a6e
    CASE(0 << 2) + 1 : u00 = u1;
Shinya Kitaoka 120a6e
    v00                    = v1 + sv;
Shinya Kitaoka 120a6e
    dudy                   = 1;
Shinya Kitaoka 120a6e
    dvdx                   = -1;
Shinya Kitaoka 120a6e
    CASE(0 << 2) + 2 : u00 = u1 + su;
Shinya Kitaoka 120a6e
    v00                    = v1 + sv;
Shinya Kitaoka 120a6e
    dudx                   = -1;
Shinya Kitaoka 120a6e
    dvdy                   = -1;
Shinya Kitaoka 120a6e
    CASE(0 << 2) + 3 : u00 = u1 + su;
Shinya Kitaoka 120a6e
    v00                    = v1;
Shinya Kitaoka 120a6e
    dudy                   = -1;
Shinya Kitaoka 120a6e
    dvdx                   = 1;
Shinya Kitaoka 120a6e
    CASE(1 << 2) + 0 : u00 = u1 + su;
Shinya Kitaoka 120a6e
    v00                    = v1;
Shinya Kitaoka 120a6e
    dudx                   = -1;
Shinya Kitaoka 120a6e
    dvdy                   = 1;
Shinya Kitaoka 120a6e
    CASE(1 << 2) + 1 : u00 = u1 + su;
Shinya Kitaoka 120a6e
    v00                    = v1 + sv;
Shinya Kitaoka 120a6e
    dudy                   = -1;
Shinya Kitaoka 120a6e
    dvdx                   = -1;
Shinya Kitaoka 120a6e
    CASE(1 << 2) + 2 : u00 = u1;
Shinya Kitaoka 120a6e
    v00                    = v1 + sv;
Shinya Kitaoka 120a6e
    dudx                   = 1;
Shinya Kitaoka 120a6e
    dvdy                   = -1;
Shinya Kitaoka 120a6e
    CASE(1 << 2) + 3 : u00 = u1;
Shinya Kitaoka 120a6e
    v00                    = v1;
Shinya Kitaoka 120a6e
    dudy                   = 1;
Shinya Kitaoka 120a6e
    dvdx                   = 1;
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  bufin   = rin->buffer;
Shinya Kitaoka 120a6e
  wrapin  = rin->wrap;
Shinya Kitaoka 120a6e
  bufout  = rout->buffer;
Shinya Kitaoka 120a6e
  wrapout = rout->wrap;
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  if (dudx)
Shinya Kitaoka 120a6e
    for (u0 = u00, v0 = v00, y = newy; y < newy + ly; v0 += dvdy, y++)
Shinya Kitaoka 120a6e
      for (u = u0, v = v0, x = newx; x < newx + lx; u += dudx, x++) {
Shinya Kitaoka 120a6e
        bufout[x + y * wrapout] = bufin[u + v * wrapin];
Shinya Kitaoka 120a6e
      }
Shinya Kitaoka 120a6e
  else
Shinya Kitaoka 120a6e
    for (u0 = u00, v0 = v00, y = newy; y < newy + ly; u0 += dudy, y++)
Shinya Kitaoka 120a6e
      for (u = u0, v = v0, x = newx; x < newx + lx; v += dvdx, x++) {
Shinya Kitaoka 120a6e
        bufout[x + y * wrapout] = bufin[u + v * wrapin];
Shinya Kitaoka 120a6e
      }
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
#ifdef DEBUG
Shinya Kitaoka 120a6e
  STW_STOP(0)
Shinya Kitaoka 120a6e
  STW_PRINT(stdout)
Shinya Kitaoka 120a6e
  ?E 14
Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?I 14
Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?E 14
Toshihiro Shimizu 890ddd
/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
static void rop_copy_90_gr8(RASTER *rin, RASTER *rout,
Toshihiro Shimizu 890ddd
                            int x1, int y1, int x2, int y2,
Toshihiro Shimizu 890ddd
			    int newx, int newy,
Toshihiro Shimizu 890ddd
?D 14
Toshihiro Shimizu 890ddd
		            int ninety, int flip)
Toshihiro Shimizu 890ddd
?E 14
Toshihiro Shimizu 890ddd
?I 14
Toshihiro Shimizu 890ddd
		            int mirror, int ninety)
Toshihiro Shimizu 890ddd
?E 14
Toshihiro Shimizu 890ddd
{
Shinya Kitaoka 120a6e
  ?D 14 if (!ninety && !flip)
Toshihiro Shimizu 890ddd
?E 14
Shinya Kitaoka 120a6e
?I 14 UCHAR *bufin, *bufout, *bytein, *byteout;
Shinya Kitaoka 120a6e
  int wrapin, wrapout;
Shinya Kitaoka 120a6e
  int u, v, lu, lv, su, sv, u00, v00, u0, v0, dindx, dudy, dvdy;
Shinya Kitaoka 120a6e
  int x, y, lx, ly;
Shinya Kitaoka 120a6e
  int u1, v1, u2, v2;
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
#ifdef DEBUG
Shinya Kitaoka 120a6e
  STW_INIT(0, "rop_copy_90_gr8")
Shinya Kitaoka 120a6e
  STW_START(0)
Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  mirror &= 1;
Shinya Kitaoka 120a6e
  ninety &= 3;
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  if (!ninety && !mirror)
Shinya Kitaoka 120a6e
		?E 14 {
Shinya Kitaoka 120a6e
      rop_copy(rin, rout, x1, y1, x2, y2, newx, newy);
Shinya Kitaoka 120a6e
      return;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
  ?I 14
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
      u1 = x1;
Shinya Kitaoka 120a6e
  v1     = y1;
Shinya Kitaoka 120a6e
  u2     = x2;
Shinya Kitaoka 120a6e
  v2     = y2;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  su = u2 - u1;
Shinya Kitaoka 120a6e
  sv = v2 - v1;
Shinya Kitaoka 120a6e
  lu = u2 - u1 + 1;
Shinya Kitaoka 120a6e
  lv = v2 - v1 + 1;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  if (ninety & 1) {
Shinya Kitaoka 120a6e
    lx = lv;
Shinya Kitaoka 120a6e
    ly = lu;
Shinya Kitaoka 120a6e
  } else {
Shinya Kitaoka 120a6e
    lx = lu;
Shinya Kitaoka 120a6e
    ly = lv;
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  bufin   = rin->buffer;
Shinya Kitaoka 120a6e
  wrapin  = rin->wrap;
Shinya Kitaoka 120a6e
  bufout  = rout->buffer;
Shinya Kitaoka 120a6e
  wrapout = rout->wrap;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  dudy = 0;
Shinya Kitaoka 120a6e
  dvdy = 0;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  switch ((mirror << 2) + ninety) {
Shinya Kitaoka 120a6e
    CASE(0 << 2) + 0 : u00       = u1;
Shinya Kitaoka 120a6e
    v00                          = v1;
Shinya Kitaoka 120a6e
    dvdy                         = 1;
Shinya Kitaoka 120a6e
    dindx                        = 1;
Shinya Kitaoka 120a6e
    CASE(0 << 2) + 1 : u00       = u1;
Shinya Kitaoka 120a6e
    v00                          = v1 + sv;
Shinya Kitaoka 120a6e
    dudy                         = 1;
Shinya Kitaoka 120a6e
    dindx                        = -wrapin;
Shinya Kitaoka 120a6e
    ?D 61 CASE(0 << 2) + 2 : u00 = u1 + su;
Shinya Kitaoka 120a6e
    v00                          = v1 + sv;
Shinya Kitaoka 120a6e
    dvdy                         = -1;
Shinya Kitaoka 120a6e
    dindx                        = -1;
Shinya Kitaoka 120a6e
    CASE(0 << 2) + 3 : u00       = u1 + su;
Shinya Kitaoka 120a6e
    v00                          = v1;
Shinya Kitaoka 120a6e
    dudy                         = -1;
Shinya Kitaoka 120a6e
    dindx                        = wrapin;
Shinya Kitaoka 120a6e
    CASE(1 << 2) + 0 : u00       = u1 + su;
Shinya Kitaoka 120a6e
    v00                          = v1;
Shinya Kitaoka 120a6e
    dvdy                         = 1;
Shinya Kitaoka 120a6e
    dindx                        = -1;
Shinya Kitaoka 120a6e
    CASE(1 << 2) + 1 : u00       = u1 + su;
Shinya Kitaoka 120a6e
    v00                          = v1 + sv;
Shinya Kitaoka 120a6e
    dudy                         = -1;
Shinya Kitaoka 120a6e
    dindx                        = -wrapin;
Shinya Kitaoka 120a6e
    CASE(1 << 2) + 2 : u00       = u1;
Shinya Kitaoka 120a6e
    v00                          = v1 + sv;
Shinya Kitaoka 120a6e
    dvdy                         = -1;
Shinya Kitaoka 120a6e
    dindx                        = 1;
Shinya Kitaoka 120a6e
    CASE(1 << 2) + 3 : u00       = u1;
Shinya Kitaoka 120a6e
    v00                          = v1;
Shinya Kitaoka 120a6e
    dudy                         = 1;
Shinya Kitaoka 120a6e
    dindx                        = wrapin;
Shinya Kitaoka 120a6e
    ?I 50 DEFAULT : assert(FALSE);
Shinya Kitaoka 120a6e
    u00 = v00 = dudy = dindx = 0;
Shinya Kitaoka 120a6e
    ?E 50
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  for (u0 = u00, v0 = v00, y = newy; y < newy + ly;
Shinya Kitaoka 120a6e
       u0 += dudy, v0 += dvdy, y++) {
Shinya Kitaoka 120a6e
    bytein  = bufin + u0 + v0 * wrapin;
Shinya Kitaoka 120a6e
    byteout = bufout + newx + y * wrapout;
Shinya Kitaoka 120a6e
    for (x = newx; x < newx + lx; x++) {
Shinya Kitaoka 120a6e
      *byteout++ = *bytein;
Shinya Kitaoka 120a6e
      bytein += dindx;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  ?I 17
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
#ifdef DEBUG
Shinya Kitaoka 120a6e
      STW_STOP(0) STW_PRINT(stdout)
Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
?I 21 static void rop_copy_90_gr8_cm16(RASTER * rin, RASTER * rout, int x1,
Shinya Kitaoka 120a6e
                                       int y1, int x2, int y2, int newx,
Shinya Kitaoka 120a6e
                                       int newy, int mirror, int ninety) {
Shinya Kitaoka 120a6e
  UCHAR *bufin, *bytein;
Shinya Kitaoka 120a6e
  USHORT *bufout, *pixout;
Shinya Kitaoka 120a6e
  LPIXEL *cmap;
Shinya Kitaoka 120a6e
  int wrapin, wrapout, cmap_offset;
Shinya Kitaoka 120a6e
  int u, v, lu, lv, su, sv, u00, v00, u0, v0, dindx, dudy, dvdy;
Shinya Kitaoka 120a6e
  int x, y, lx, ly;
Shinya Kitaoka 120a6e
  int u1, v1, u2, v2;
Shinya Kitaoka 120a6e
  int reversed;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  mirror &= 1;
Shinya Kitaoka 120a6e
  ninety &= 3;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  if (!ninety && !mirror) {
Shinya Kitaoka 120a6e
    rop_copy(rin, rout, x1, y1, x2, y2, newx, newy);
Shinya Kitaoka 120a6e
    return;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  if (!rout->cmap.buffer) {
Shinya Kitaoka 120a6e
    msg(MSG_IE, "rop_copy_90_gr8_cm16: missing color map");
Shinya Kitaoka 120a6e
    return;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  cmap              = rout->cmap.buffer;
Shinya Kitaoka 120a6e
  ?D 56 cmap_offset = rout->cmap.offset;
Shinya Kitaoka 120a6e
  ?E 56
Shinya Kitaoka 120a6e
?I 56 cmap_offset  = rout->cmap.info.offset_mask;
Shinya Kitaoka 120a6e
  ?E 56 reversed    = cmap[0].r != 0;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  u1 = x1;
Shinya Kitaoka 120a6e
  v1 = y1;
Shinya Kitaoka 120a6e
  u2 = x2;
Shinya Kitaoka 120a6e
  v2 = y2;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  su = u2 - u1;
Shinya Kitaoka 120a6e
  sv = v2 - v1;
Shinya Kitaoka 120a6e
  lu = u2 - u1 + 1;
Shinya Kitaoka 120a6e
  lv = v2 - v1 + 1;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  if (ninety & 1) {
Shinya Kitaoka 120a6e
    lx = lv;
Shinya Kitaoka 120a6e
    ly = lu;
Shinya Kitaoka 120a6e
  } else {
Shinya Kitaoka 120a6e
    lx = lu;
Shinya Kitaoka 120a6e
    ly = lv;
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  bufin   = rin->buffer;
Shinya Kitaoka 120a6e
  wrapin  = rin->wrap;
Shinya Kitaoka 120a6e
  bufout  = rout->buffer;
Shinya Kitaoka 120a6e
  wrapout = rout->wrap;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  dudy = 0;
Shinya Kitaoka 120a6e
  dvdy = 0;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  switch ((mirror << 2) + ninety) {
Shinya Kitaoka 120a6e
    CASE(0 << 2) + 0 : u00 = u1;
Shinya Kitaoka 120a6e
    v00                    = v1;
Shinya Kitaoka 120a6e
    dvdy                   = 1;
Shinya Kitaoka 120a6e
    dindx                  = 1;
Shinya Kitaoka 120a6e
    CASE(0 << 2) + 1 : u00 = u1;
Shinya Kitaoka 120a6e
    v00                    = v1 + sv;
Shinya Kitaoka 120a6e
    dudy                   = 1;
Shinya Kitaoka 120a6e
    dindx                  = -wrapin;
Shinya Kitaoka 120a6e
    CASE(0 << 2) + 2 : u00 = u1 + su;
Shinya Kitaoka 120a6e
    v00                    = v1 + sv;
Shinya Kitaoka 120a6e
    dvdy                   = -1;
Shinya Kitaoka 120a6e
    dindx                  = -1;
Shinya Kitaoka 120a6e
    CASE(0 << 2) + 3 : u00 = u1 + su;
Shinya Kitaoka 120a6e
    v00                    = v1;
Shinya Kitaoka 120a6e
    dudy                   = -1;
Shinya Kitaoka 120a6e
    dindx                  = wrapin;
Shinya Kitaoka 120a6e
    CASE(1 << 2) + 0 : u00 = u1 + su;
Shinya Kitaoka 120a6e
    v00                    = v1;
Shinya Kitaoka 120a6e
    dvdy                   = 1;
Shinya Kitaoka 120a6e
    dindx                  = -1;
Shinya Kitaoka 120a6e
    CASE(1 << 2) + 1 : u00 = u1 + su;
Shinya Kitaoka 120a6e
    v00                    = v1 + sv;
Shinya Kitaoka 120a6e
    dudy                   = -1;
Shinya Kitaoka 120a6e
    dindx                  = -wrapin;
Shinya Kitaoka 120a6e
    CASE(1 << 2) + 2 : u00 = u1;
Shinya Kitaoka 120a6e
    v00                    = v1 + sv;
Shinya Kitaoka 120a6e
    dvdy                   = -1;
Shinya Kitaoka 120a6e
    dindx                  = 1;
Shinya Kitaoka 120a6e
    CASE(1 << 2) + 3 : u00 = u1;
Shinya Kitaoka 120a6e
    v00                    = v1;
Shinya Kitaoka 120a6e
    dudy                   = 1;
Shinya Kitaoka 120a6e
    dindx                  = wrapin;
Shinya Kitaoka 120a6e
    ?I 50 DEFAULT : assert(FALSE);
Shinya Kitaoka 120a6e
    u00 = v00 = dudy = dindx = 0;
Shinya Kitaoka 120a6e
    ?E 50
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  for (u0 = u00, v0 = v00, y = newy; y < newy + ly;
Shinya Kitaoka 120a6e
       u0 += dudy, v0 += dvdy, y++) {
Shinya Kitaoka 120a6e
    bytein = bufin + u0 + v0 * wrapin;
Shinya Kitaoka 120a6e
    pixout = bufout + newx + y * wrapout;
Shinya Kitaoka 120a6e
    if (reversed)
Shinya Kitaoka 120a6e
      for (x = newx; x < newx + lx; x++) {
Shinya Kitaoka 120a6e
        *pixout++ = cmap_offset + (255 - *bytein);
Shinya Kitaoka 120a6e
        bytein += dindx;
Shinya Kitaoka 120a6e
      }
Shinya Kitaoka 120a6e
    else
Shinya Kitaoka 120a6e
      for (x = newx; x < newx + lx; x++) {
Shinya Kitaoka 120a6e
        *pixout++ = cmap_offset + *bytein;
Shinya Kitaoka 120a6e
        bytein += dindx;
Shinya Kitaoka 120a6e
      }
Shinya Kitaoka 120a6e
    ?I 23
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
static void rop_copy_90_cm8_cm16(RASTER * rin, RASTER * rout, int x1, int y1,
Shinya Kitaoka 120a6e
                                 int x2, int y2, int newx, int newy, int mirror,
Shinya Kitaoka 120a6e
                                 int ninety) {
Shinya Kitaoka 120a6e
  UCHAR *bufin, *pixin;
Shinya Kitaoka 120a6e
  USHORT *bufout, *pixout;
Shinya Kitaoka 120a6e
  LPIXEL *cmapin, *cmapout;
Shinya Kitaoka 120a6e
  int wrapin, wrapout, cmapin_offset, cmapout_offset, cmap_offset_delta;
Shinya Kitaoka 120a6e
  int u, v, lu, lv, su, sv, u00, v00, u0, v0, dindx, dudy, dvdy;
Shinya Kitaoka 120a6e
  int x, y, lx, ly;
Shinya Kitaoka 120a6e
  int u1, v1, u2, v2;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  mirror &= 1;
Shinya Kitaoka 120a6e
  ninety &= 3;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  if (!ninety && !mirror) {
Shinya Kitaoka 120a6e
    rop_copy(rin, rout, x1, y1, x2, y2, newx, newy);
Shinya Kitaoka 120a6e
    return;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  if (!rin->cmap.buffer || !rout->cmap.buffer) {
Shinya Kitaoka 120a6e
    msg(MSG_IE, "rop_copy_90_cm8_cm16: missing color map");
Shinya Kitaoka 120a6e
    return;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  cmapin                  = rin->cmap.buffer;
Shinya Kitaoka 120a6e
  cmapout                 = rout->cmap.buffer;
Shinya Kitaoka 120a6e
  ?D 56 cmapin_offset     = rin->cmap.offset;
Shinya Kitaoka 120a6e
  cmapout_offset          = rout->cmap.offset;
Shinya Kitaoka 120a6e
  ?E 56
Shinya Kitaoka 120a6e
?I 56 cmapin_offset      = rin->cmap.info.offset_mask;
Shinya Kitaoka 120a6e
  cmapout_offset          = rout->cmap.info.offset_mask;
Shinya Kitaoka 120a6e
  ?E 56 cmap_offset_delta = cmapout_offset - cmapin_offset;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  u1 = x1;
Shinya Kitaoka 120a6e
  v1 = y1;
Shinya Kitaoka 120a6e
  u2 = x2;
Shinya Kitaoka 120a6e
  v2 = y2;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  su = u2 - u1;
Shinya Kitaoka 120a6e
  sv = v2 - v1;
Shinya Kitaoka 120a6e
  lu = u2 - u1 + 1;
Shinya Kitaoka 120a6e
  lv = v2 - v1 + 1;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  if (ninety & 1) {
Shinya Kitaoka 120a6e
    lx = lv;
Shinya Kitaoka 120a6e
    ly = lu;
Shinya Kitaoka 120a6e
  } else {
Shinya Kitaoka 120a6e
    lx = lu;
Shinya Kitaoka 120a6e
    ly = lv;
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  bufin   = rin->buffer;
Shinya Kitaoka 120a6e
  wrapin  = rin->wrap;
Shinya Kitaoka 120a6e
  bufout  = rout->buffer;
Shinya Kitaoka 120a6e
  wrapout = rout->wrap;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  dudy = 0;
Shinya Kitaoka 120a6e
  dvdy = 0;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  switch ((mirror << 2) + ninety) {
Shinya Kitaoka 120a6e
    CASE(0 << 2) + 0 : u00 = u1;
Shinya Kitaoka 120a6e
    v00                    = v1;
Shinya Kitaoka 120a6e
    dvdy                   = 1;
Shinya Kitaoka 120a6e
    dindx                  = 1;
Shinya Kitaoka 120a6e
    CASE(0 << 2) + 1 : u00 = u1;
Shinya Kitaoka 120a6e
    v00                    = v1 + sv;
Shinya Kitaoka 120a6e
    dudy                   = 1;
Shinya Kitaoka 120a6e
    dindx                  = -wrapin;
Shinya Kitaoka 120a6e
    CASE(0 << 2) + 2 : u00 = u1 + su;
Shinya Kitaoka 120a6e
    v00                    = v1 + sv;
Shinya Kitaoka 120a6e
    dvdy                   = -1;
Shinya Kitaoka 120a6e
    dindx                  = -1;
Shinya Kitaoka 120a6e
    CASE(0 << 2) + 3 : u00 = u1 + su;
Shinya Kitaoka 120a6e
    v00                    = v1;
Shinya Kitaoka 120a6e
    dudy                   = -1;
Shinya Kitaoka 120a6e
    dindx                  = wrapin;
Shinya Kitaoka 120a6e
    CASE(1 << 2) + 0 : u00 = u1 + su;
Shinya Kitaoka 120a6e
    v00                    = v1;
Shinya Kitaoka 120a6e
    dvdy                   = 1;
Shinya Kitaoka 120a6e
    dindx                  = -1;
Shinya Kitaoka 120a6e
    CASE(1 << 2) + 1 : u00 = u1 + su;
Shinya Kitaoka 120a6e
    v00                    = v1 + sv;
Shinya Kitaoka 120a6e
    dudy                   = -1;
Shinya Kitaoka 120a6e
    dindx                  = -wrapin;
Shinya Kitaoka 120a6e
    CASE(1 << 2) + 2 : u00 = u1;
Shinya Kitaoka 120a6e
    v00                    = v1 + sv;
Shinya Kitaoka 120a6e
    dvdy                   = -1;
Shinya Kitaoka 120a6e
    dindx                  = 1;
Shinya Kitaoka 120a6e
    CASE(1 << 2) + 3 : u00 = u1;
Shinya Kitaoka 120a6e
    v00                    = v1;
Shinya Kitaoka 120a6e
    dudy                   = 1;
Shinya Kitaoka 120a6e
    dindx                  = wrapin;
Shinya Kitaoka 120a6e
    ?I 50 DEFAULT : assert(FALSE);
Shinya Kitaoka 120a6e
    u00 = v00 = dudy = dindx = 0;
Shinya Kitaoka 120a6e
    ?E 50
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  for (u0 = u00, v0 = v00, y = newy; y < newy + ly;
Shinya Kitaoka 120a6e
       u0 += dudy, v0 += dvdy, y++) {
Shinya Kitaoka 120a6e
    pixin  = bufin + u0 + v0 * wrapin;
Shinya Kitaoka 120a6e
    pixout = bufout + newx + y * wrapout;
Shinya Kitaoka 120a6e
    for (x = newx; x < newx + lx; x++) {
Shinya Kitaoka 120a6e
      *pixout++ = *pixin + cmap_offset_delta;
Shinya Kitaoka 120a6e
      pixin += dindx;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    ?E 23
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?I 22
Shinya Kitaoka 120a6e
?D 55 static void rop_copy_90_gr8_rgbm(RASTER * rin, RASTER * rout, int x1,
Shinya Kitaoka 120a6e
                                        int y1, int x2, int y2, int newx,
Shinya Kitaoka 120a6e
                                        int newy, int mirror, int ninety)
Toshihiro Shimizu 890ddd
?E 55
Toshihiro Shimizu 890ddd
?I 55 static void
Shinya Kitaoka 120a6e
rop_copy_90_gr8_rgb16(RASTER * rin, RASTER * rout, int x1, int y1, int x2,
Shinya Kitaoka 120a6e
                      int y2, int newx, int newy, int mirror, int ninety)
Shinya Kitaoka 120a6e
?E 55 {
Shinya Kitaoka 120a6e
  UCHAR *bufin, *bytein;
Shinya Kitaoka 120a6e
  ?D 55 LPIXEL *bufout, *pixout, tmp;
Shinya Kitaoka 120a6e
  ?E 55
Toshihiro Shimizu 890ddd
?I 55 USHORT *bufout, *pixout;
Shinya Kitaoka 120a6e
  ?E 55 int wrapin, wrapout;
Shinya Kitaoka 120a6e
  int u, v, lu, lv, su, sv, u00, v00, u0, v0, dindx, dudy, dvdy;
Shinya Kitaoka 120a6e
  int x, y, lx, ly;
Shinya Kitaoka 120a6e
  int u1, v1, u2, v2;
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  mirror &= 1;
Shinya Kitaoka 120a6e
  ninety &= 3;
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  if (!ninety && !mirror) {
Shinya Kitaoka 120a6e
    rop_copy(rin, rout, x1, y1, x2, y2, newx, newy);
Shinya Kitaoka 120a6e
    return;
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  u1 = x1;
Shinya Kitaoka 120a6e
  v1 = y1;
Shinya Kitaoka 120a6e
  u2 = x2;
Shinya Kitaoka 120a6e
  v2 = y2;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  su = u2 - u1;
Shinya Kitaoka 120a6e
  sv = v2 - v1;
Shinya Kitaoka 120a6e
  lu = u2 - u1 + 1;
Shinya Kitaoka 120a6e
  lv = v2 - v1 + 1;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  if (ninety & 1) {
Shinya Kitaoka 120a6e
    lx = lv;
Shinya Kitaoka 120a6e
    ly = lu;
Shinya Kitaoka 120a6e
  } else {
Shinya Kitaoka 120a6e
    lx = lu;
Shinya Kitaoka 120a6e
    ly = lv;
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  bufin                       = rin->buffer;
Shinya Kitaoka 120a6e
  wrapin                      = rin->wrap;
Shinya Kitaoka 120a6e
  ?E 61
Toshihiro Shimizu 890ddd
?I 61 CASE(0 << 2) + 2 : u00 = u1 + su;
Shinya Kitaoka 120a6e
  v00                         = v1 + sv;
Shinya Kitaoka 120a6e
  dvdy                        = -1;
Shinya Kitaoka 120a6e
  dindx                       = -1;
Shinya Kitaoka 120a6e
  CASE(0 << 2) + 3 : u00      = u1 + su;
Shinya Kitaoka 120a6e
  v00                         = v1;
Shinya Kitaoka 120a6e
  dudy                        = -1;
Shinya Kitaoka 120a6e
  dindx                       = wrapin;
Shinya Kitaoka 120a6e
  CASE(1 << 2) + 0 : u00      = u1 + su;
Shinya Kitaoka 120a6e
  v00                         = v1;
Shinya Kitaoka 120a6e
  dvdy                        = 1;
Shinya Kitaoka 120a6e
  dindx                       = -1;
Shinya Kitaoka 120a6e
  CASE(1 << 2) + 1 : u00      = u1 + su;
Shinya Kitaoka 120a6e
  v00                         = v1 + sv;
Shinya Kitaoka 120a6e
  dudy                        = -1;
Shinya Kitaoka 120a6e
  dindx                       = -wrapin;
Shinya Kitaoka 120a6e
  CASE(1 << 2) + 2 : u00      = u1;
Shinya Kitaoka 120a6e
  v00                         = v1 + sv;
Shinya Kitaoka 120a6e
  dvdy                        = -1;
Shinya Kitaoka 120a6e
  dindx                       = 1;
Shinya Kitaoka 120a6e
  CASE(1 << 2) + 3 : u00      = u1;
Shinya Kitaoka 120a6e
  v00                         = v1;
Shinya Kitaoka 120a6e
  dudy                        = 1;
Shinya Kitaoka 120a6e
  dindx                       = wrapin;
Shinya Kitaoka 120a6e
  ?D 78 DEFAULT : assert(FALSE);
Shinya Kitaoka 120a6e
  u00 = v00 = dudy = dindx = 0;
Shinya Kitaoka 120a6e
  ?E 78
Toshihiro Shimizu 890ddd
?I 78 DEFAULT : abort();
Shinya Kitaoka 120a6e
  u00 = v00 = dudy = dindx = 0;
Shinya Kitaoka 120a6e
  ?E 78
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
for (u0 = u00, v0 = v00, y = newy; y < newy + ly; u0 += dudy, v0 += dvdy, y++) {
Shinya Kitaoka 120a6e
  bytein  = bufin + u0 + v0 * wrapin;
Shinya Kitaoka 120a6e
  byteout = bufout + newx + y * wrapout;
Shinya Kitaoka 120a6e
  for (x = newx; x < newx + lx; x++) {
Shinya Kitaoka 120a6e
    *byteout++ = *bytein;
Shinya Kitaoka 120a6e
    bytein += dindx;
Shinya Kitaoka 120a6e
    ?D 62
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?E 62
Toshihiro Shimizu 890ddd
?I 62
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?E 62
Toshihiro Shimizu 890ddd
#ifdef DEBUG
Shinya Kitaoka 120a6e
    STW_STOP(0) STW_PRINT(stdout)
Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
static void rop_copy_90_gr8_cm16(RASTER *rin, RASTER *rout, int x1, int y1,
Shinya Kitaoka 120a6e
                                 int x2, int y2, int newx, int newy, int mirror,
Shinya Kitaoka 120a6e
                                 int ninety) {
Shinya Kitaoka 120a6e
  UCHAR *bufin, *bytein;
Shinya Kitaoka 120a6e
  USHORT *bufout, *pixout;
Shinya Kitaoka 120a6e
  LPIXEL *cmap;
Shinya Kitaoka 120a6e
  int wrapin, wrapout, cmap_offset;
Shinya Kitaoka 120a6e
  int u, v, lu, lv, su, sv, u00, v00, u0, v0, dindx, dudy, dvdy;
Shinya Kitaoka 120a6e
  int x, y, lx, ly;
Shinya Kitaoka 120a6e
  int u1, v1, u2, v2;
Shinya Kitaoka 120a6e
  int reversed;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  mirror &= 1;
Shinya Kitaoka 120a6e
  ninety &= 3;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  if (!ninety && !mirror) {
Shinya Kitaoka 120a6e
    rop_copy(rin, rout, x1, y1, x2, y2, newx, newy);
Shinya Kitaoka 120a6e
    return;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  ?D 84 if (!rout->cmap.buffer) {
Shinya Kitaoka 120a6e
    msg(MSG_IE, "rop_copy_90_gr8_cm16: missing color map");
Shinya Kitaoka 120a6e
    return;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  ?E 84 cmap  = rout->cmap.buffer;
Shinya Kitaoka 120a6e
  cmap_offset = rout->cmap.info.offset_mask;
Shinya Kitaoka 120a6e
  reversed    = cmap[0].r != 0;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  u1 = x1;
Shinya Kitaoka 120a6e
  v1 = y1;
Shinya Kitaoka 120a6e
  u2 = x2;
Shinya Kitaoka 120a6e
  v2 = y2;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  su = u2 - u1;
Shinya Kitaoka 120a6e
  sv = v2 - v1;
Shinya Kitaoka 120a6e
  lu = u2 - u1 + 1;
Shinya Kitaoka 120a6e
  lv = v2 - v1 + 1;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  if (ninety & 1) {
Shinya Kitaoka 120a6e
    lx = lv;
Shinya Kitaoka 120a6e
    ly = lu;
Shinya Kitaoka 120a6e
  } else {
Shinya Kitaoka 120a6e
    lx = lu;
Shinya Kitaoka 120a6e
    ly = lv;
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  bufin   = rin->buffer;
Shinya Kitaoka 120a6e
  wrapin  = rin->wrap;
Shinya Kitaoka 120a6e
  bufout  = rout->buffer;
Shinya Kitaoka 120a6e
  wrapout = rout->wrap;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  dudy = 0;
Shinya Kitaoka 120a6e
  dvdy = 0;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  switch ((mirror << 2) + ninety) {
Shinya Kitaoka 120a6e
    CASE(0 << 2) + 0 : u00 = u1;
Shinya Kitaoka 120a6e
    v00                    = v1;
Shinya Kitaoka 120a6e
    dvdy                   = 1;
Shinya Kitaoka 120a6e
    dindx                  = 1;
Shinya Kitaoka 120a6e
    CASE(0 << 2) + 1 : u00 = u1;
Shinya Kitaoka 120a6e
    v00                    = v1 + sv;
Shinya Kitaoka 120a6e
    dudy                   = 1;
Shinya Kitaoka 120a6e
    dindx                  = -wrapin;
Shinya Kitaoka 120a6e
    CASE(0 << 2) + 2 : u00 = u1 + su;
Shinya Kitaoka 120a6e
    v00                    = v1 + sv;
Shinya Kitaoka 120a6e
    dvdy                   = -1;
Shinya Kitaoka 120a6e
    dindx                  = -1;
Shinya Kitaoka 120a6e
    CASE(0 << 2) + 3 : u00 = u1 + su;
Shinya Kitaoka 120a6e
    v00                    = v1;
Shinya Kitaoka 120a6e
    dudy                   = -1;
Shinya Kitaoka 120a6e
    dindx                  = wrapin;
Shinya Kitaoka 120a6e
    CASE(1 << 2) + 0 : u00 = u1 + su;
Shinya Kitaoka 120a6e
    v00                    = v1;
Shinya Kitaoka 120a6e
    dvdy                   = 1;
Shinya Kitaoka 120a6e
    dindx                  = -1;
Shinya Kitaoka 120a6e
    CASE(1 << 2) + 1 : u00 = u1 + su;
Shinya Kitaoka 120a6e
    v00                    = v1 + sv;
Shinya Kitaoka 120a6e
    dudy                   = -1;
Shinya Kitaoka 120a6e
    dindx                  = -wrapin;
Shinya Kitaoka 120a6e
    CASE(1 << 2) + 2 : u00 = u1;
Shinya Kitaoka 120a6e
    v00                    = v1 + sv;
Shinya Kitaoka 120a6e
    dvdy                   = -1;
Shinya Kitaoka 120a6e
    dindx                  = 1;
Shinya Kitaoka 120a6e
    CASE(1 << 2) + 3 : u00 = u1;
Shinya Kitaoka 120a6e
    v00                    = v1;
Shinya Kitaoka 120a6e
    dudy                   = 1;
Shinya Kitaoka 120a6e
    dindx                  = wrapin;
Shinya Kitaoka 120a6e
    ?D 78 DEFAULT : assert(FALSE);
Shinya Kitaoka 120a6e
    u00 = v00 = dudy = dindx = 0;
Shinya Kitaoka 120a6e
    ?E 78
Toshihiro Shimizu 890ddd
?I 78 DEFAULT : abort();
Shinya Kitaoka 120a6e
    u00 = v00 = dudy = dindx = 0;
Shinya Kitaoka 120a6e
    ?E 78
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  for (u0 = u00, v0 = v00, y = newy; y < newy + ly;
Shinya Kitaoka 120a6e
       u0 += dudy, v0 += dvdy, y++) {
Shinya Kitaoka 120a6e
    bytein = bufin + u0 + v0 * wrapin;
Shinya Kitaoka 120a6e
    pixout = bufout + newx + y * wrapout;
Shinya Kitaoka 120a6e
    if (reversed)
Shinya Kitaoka 120a6e
      for (x = newx; x < newx + lx; x++) {
Shinya Kitaoka 120a6e
        *pixout++ = cmap_offset + (255 - *bytein);
Shinya Kitaoka 120a6e
        bytein += dindx;
Shinya Kitaoka 120a6e
      }
Shinya Kitaoka 120a6e
    else
Shinya Kitaoka 120a6e
      for (x = newx; x < newx + lx; x++) {
Shinya Kitaoka 120a6e
        *pixout++ = cmap_offset + *bytein;
Shinya Kitaoka 120a6e
        bytein += dindx;
Shinya Kitaoka 120a6e
      }
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
?I 84 static void rop_copy_90_gr8_cm24(RASTER *rin, RASTER *rout, int x1,
Shinya Kitaoka 120a6e
                                       int y1, int x2, int y2, int newx,
Shinya Kitaoka 120a6e
                                       int newy, int mirror, int ninety) {
Shinya Kitaoka 120a6e
  UCHAR *bufin, *bytein;
Shinya Kitaoka 120a6e
  ULONG *bufout, *pixout;
Shinya Kitaoka 120a6e
  LPIXEL *penmap, *colmap;
Shinya Kitaoka 120a6e
  int wrapin, wrapout;
Shinya Kitaoka 120a6e
  int u, v, lu, lv, su, sv, u00, v00, u0, v0, dindx, dudy, dvdy;
Shinya Kitaoka 120a6e
  int x, y, lx, ly;
Shinya Kitaoka 120a6e
  int u1, v1, u2, v2;
Shinya Kitaoka 120a6e
  int reversed;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  mirror &= 1;
Shinya Kitaoka 120a6e
  ninety &= 3;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  if (!ninety && !mirror) {
Shinya Kitaoka 120a6e
    rop_copy(rin, rout, x1, y1, x2, y2, newx, newy);
Shinya Kitaoka 120a6e
    return;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  penmap   = rout->cmap.penbuffer;
Shinya Kitaoka 120a6e
  colmap   = rout->cmap.colbuffer;
Shinya Kitaoka 120a6e
  reversed = penmap[0].r + colmap[0].r != 0;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  u1 = x1;
Shinya Kitaoka 120a6e
  v1 = y1;
Shinya Kitaoka 120a6e
  u2 = x2;
Shinya Kitaoka 120a6e
  v2 = y2;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  su = u2 - u1;
Shinya Kitaoka 120a6e
  sv = v2 - v1;
Shinya Kitaoka 120a6e
  lu = u2 - u1 + 1;
Shinya Kitaoka 120a6e
  lv = v2 - v1 + 1;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  if (ninety & 1) {
Shinya Kitaoka 120a6e
    lx = lv;
Shinya Kitaoka 120a6e
    ly = lu;
Shinya Kitaoka 120a6e
  } else {
Shinya Kitaoka 120a6e
    lx = lu;
Shinya Kitaoka 120a6e
    ly = lv;
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  bufin   = rin->buffer;
Shinya Kitaoka 120a6e
  wrapin  = rin->wrap;
Shinya Kitaoka 120a6e
  bufout  = rout->buffer;
Shinya Kitaoka 120a6e
  wrapout = rout->wrap;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  dudy = 0;
Shinya Kitaoka 120a6e
  dvdy = 0;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  switch ((mirror << 2) + ninety) {
Shinya Kitaoka 120a6e
    CASE(0 << 2) + 0 : u00 = u1;
Shinya Kitaoka 120a6e
    v00                    = v1;
Shinya Kitaoka 120a6e
    dvdy                   = 1;
Shinya Kitaoka 120a6e
    dindx                  = 1;
Shinya Kitaoka 120a6e
    CASE(0 << 2) + 1 : u00 = u1;
Shinya Kitaoka 120a6e
    v00                    = v1 + sv;
Shinya Kitaoka 120a6e
    dudy                   = 1;
Shinya Kitaoka 120a6e
    dindx                  = -wrapin;
Shinya Kitaoka 120a6e
    CASE(0 << 2) + 2 : u00 = u1 + su;
Shinya Kitaoka 120a6e
    v00                    = v1 + sv;
Shinya Kitaoka 120a6e
    dvdy                   = -1;
Shinya Kitaoka 120a6e
    dindx                  = -1;
Shinya Kitaoka 120a6e
    CASE(0 << 2) + 3 : u00 = u1 + su;
Shinya Kitaoka 120a6e
    v00                    = v1;
Shinya Kitaoka 120a6e
    dudy                   = -1;
Shinya Kitaoka 120a6e
    dindx                  = wrapin;
Shinya Kitaoka 120a6e
    CASE(1 << 2) + 0 : u00 = u1 + su;
Shinya Kitaoka 120a6e
    v00                    = v1;
Shinya Kitaoka 120a6e
    dvdy                   = 1;
Shinya Kitaoka 120a6e
    dindx                  = -1;
Shinya Kitaoka 120a6e
    CASE(1 << 2) + 1 : u00 = u1 + su;
Shinya Kitaoka 120a6e
    v00                    = v1 + sv;
Shinya Kitaoka 120a6e
    dudy                   = -1;
Shinya Kitaoka 120a6e
    dindx                  = -wrapin;
Shinya Kitaoka 120a6e
    CASE(1 << 2) + 2 : u00 = u1;
Shinya Kitaoka 120a6e
    v00                    = v1 + sv;
Shinya Kitaoka 120a6e
    dvdy                   = -1;
Shinya Kitaoka 120a6e
    dindx                  = 1;
Shinya Kitaoka 120a6e
    CASE(1 << 2) + 3 : u00 = u1;
Shinya Kitaoka 120a6e
    v00                    = v1;
Shinya Kitaoka 120a6e
    dudy                   = 1;
Shinya Kitaoka 120a6e
    dindx                  = wrapin;
Shinya Kitaoka 120a6e
  DEFAULT:
Shinya Kitaoka 120a6e
    abort();
Shinya Kitaoka 120a6e
    u00 = v00 = dudy = dindx = 0;
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  for (u0 = u00, v0 = v00, y = newy; y < newy + ly;
Shinya Kitaoka 120a6e
       u0 += dudy, v0 += dvdy, y++) {
Shinya Kitaoka 120a6e
    bytein = bufin + u0 + v0 * wrapin;
Shinya Kitaoka 120a6e
    pixout = bufout + newx + y * wrapout;
Shinya Kitaoka 120a6e
    if (reversed)
Shinya Kitaoka 120a6e
      for (x = newx; x < newx + lx; x++) {
Shinya Kitaoka 120a6e
        *pixout++ = 255 - *bytein;
Shinya Kitaoka 120a6e
        bytein += dindx;
Shinya Kitaoka 120a6e
      }
Shinya Kitaoka 120a6e
    else
Shinya Kitaoka 120a6e
      for (x = newx; x < newx + lx; x++) {
Shinya Kitaoka 120a6e
        *pixout++ = *bytein;
Shinya Kitaoka 120a6e
        bytein += dindx;
Shinya Kitaoka 120a6e
      }
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
?E 84 static void rop_copy_90_cm8_cm16(RASTER *rin, RASTER *rout, int x1,
Shinya Kitaoka 120a6e
                                       int y1, int x2, int y2, int newx,
Shinya Kitaoka 120a6e
                                       int newy, int mirror, int ninety) {
Shinya Kitaoka 120a6e
  UCHAR *bufin, *pixin;
Shinya Kitaoka 120a6e
  USHORT *bufout, *pixout;
Shinya Kitaoka 120a6e
  ?D 84 LPIXEL *cmapin, *cmapout;
Shinya Kitaoka 120a6e
  ?E 84 int wrapin, wrapout, cmapin_offset, cmapout_offset, cmap_offset_delta;
Shinya Kitaoka 120a6e
  int u, v, lu, lv, su, sv, u00, v00, u0, v0, dindx, dudy, dvdy;
Shinya Kitaoka 120a6e
  int x, y, lx, ly;
Shinya Kitaoka 120a6e
  int u1, v1, u2, v2;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  mirror &= 1;
Shinya Kitaoka 120a6e
  ninety &= 3;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  if (!ninety && !mirror) {
Shinya Kitaoka 120a6e
    rop_copy(rin, rout, x1, y1, x2, y2, newx, newy);
Shinya Kitaoka 120a6e
    return;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  ?D 84 if (!rin->cmap.buffer || !rout->cmap.buffer) {
Shinya Kitaoka 120a6e
    msg(MSG_IE, "rop_copy_90_cm8_cm16: missing color map");
Shinya Kitaoka 120a6e
    return;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  cmapin              = rin->cmap.buffer;
Shinya Kitaoka 120a6e
  cmapout             = rout->cmap.buffer;
Shinya Kitaoka 120a6e
  ?E 84 cmapin_offset = rin->cmap.info.offset_mask;
Shinya Kitaoka 120a6e
  cmapout_offset      = rout->cmap.info.offset_mask;
Shinya Kitaoka 120a6e
  cmap_offset_delta   = cmapout_offset - cmapin_offset;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  u1 = x1;
Shinya Kitaoka 120a6e
  v1 = y1;
Shinya Kitaoka 120a6e
  u2 = x2;
Shinya Kitaoka 120a6e
  v2 = y2;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  su = u2 - u1;
Shinya Kitaoka 120a6e
  sv = v2 - v1;
Shinya Kitaoka 120a6e
  lu = u2 - u1 + 1;
Shinya Kitaoka 120a6e
  lv = v2 - v1 + 1;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  if (ninety & 1) {
Shinya Kitaoka 120a6e
    lx = lv;
Shinya Kitaoka 120a6e
    ly = lu;
Shinya Kitaoka 120a6e
  } else {
Shinya Kitaoka 120a6e
    lx = lu;
Shinya Kitaoka 120a6e
    ly = lv;
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  bufin   = rin->buffer;
Shinya Kitaoka 120a6e
  wrapin  = rin->wrap;
Shinya Kitaoka 120a6e
  bufout  = rout->buffer;
Shinya Kitaoka 120a6e
  wrapout = rout->wrap;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  dudy = 0;
Shinya Kitaoka 120a6e
  dvdy = 0;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  switch ((mirror << 2) + ninety) {
Shinya Kitaoka 120a6e
    CASE(0 << 2) + 0 : u00 = u1;
Shinya Kitaoka 120a6e
    v00                    = v1;
Shinya Kitaoka 120a6e
    dvdy                   = 1;
Shinya Kitaoka 120a6e
    dindx                  = 1;
Shinya Kitaoka 120a6e
    CASE(0 << 2) + 1 : u00 = u1;
Shinya Kitaoka 120a6e
    v00                    = v1 + sv;
Shinya Kitaoka 120a6e
    dudy                   = 1;
Shinya Kitaoka 120a6e
    dindx                  = -wrapin;
Shinya Kitaoka 120a6e
    CASE(0 << 2) + 2 : u00 = u1 + su;
Shinya Kitaoka 120a6e
    v00                    = v1 + sv;
Shinya Kitaoka 120a6e
    dvdy                   = -1;
Shinya Kitaoka 120a6e
    dindx                  = -1;
Shinya Kitaoka 120a6e
    CASE(0 << 2) + 3 : u00 = u1 + su;
Shinya Kitaoka 120a6e
    v00                    = v1;
Shinya Kitaoka 120a6e
    dudy                   = -1;
Shinya Kitaoka 120a6e
    dindx                  = wrapin;
Shinya Kitaoka 120a6e
    CASE(1 << 2) + 0 : u00 = u1 + su;
Shinya Kitaoka 120a6e
    v00                    = v1;
Shinya Kitaoka 120a6e
    dvdy                   = 1;
Shinya Kitaoka 120a6e
    dindx                  = -1;
Shinya Kitaoka 120a6e
    CASE(1 << 2) + 1 : u00 = u1 + su;
Shinya Kitaoka 120a6e
    v00                    = v1 + sv;
Shinya Kitaoka 120a6e
    dudy                   = -1;
Shinya Kitaoka 120a6e
    dindx                  = -wrapin;
Shinya Kitaoka 120a6e
    CASE(1 << 2) + 2 : u00 = u1;
Shinya Kitaoka 120a6e
    v00                    = v1 + sv;
Shinya Kitaoka 120a6e
    dvdy                   = -1;
Shinya Kitaoka 120a6e
    dindx                  = 1;
Shinya Kitaoka 120a6e
    CASE(1 << 2) + 3 : u00 = u1;
Shinya Kitaoka 120a6e
    v00                    = v1;
Shinya Kitaoka 120a6e
    dudy                   = 1;
Shinya Kitaoka 120a6e
    dindx                  = wrapin;
Shinya Kitaoka 120a6e
    ?D 78 DEFAULT : assert(FALSE);
Shinya Kitaoka 120a6e
    u00 = v00 = dudy = dindx = 0;
Shinya Kitaoka 120a6e
    ?E 78
Toshihiro Shimizu 890ddd
?I 78 DEFAULT : abort();
Shinya Kitaoka 120a6e
    u00 = v00 = dudy = dindx = 0;
Shinya Kitaoka 120a6e
    ?E 78
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  for (u0 = u00, v0 = v00, y = newy; y < newy + ly;
Shinya Kitaoka 120a6e
       u0 += dudy, v0 += dvdy, y++) {
Shinya Kitaoka 120a6e
    pixin  = bufin + u0 + v0 * wrapin;
Shinya Kitaoka 120a6e
    pixout = bufout + newx + y * wrapout;
Shinya Kitaoka 120a6e
    for (x = newx; x < newx + lx; x++) {
Shinya Kitaoka 120a6e
      *pixout++ = *pixin + cmap_offset_delta;
Shinya Kitaoka 120a6e
      pixin += dindx;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
?I 84 static void rop_copy_90_cm8_cm24(RASTER *rin, RASTER *rout, int x1,
Shinya Kitaoka 120a6e
                                       int y1, int x2, int y2, int newx,
Shinya Kitaoka 120a6e
                                       int newy, int mirror, int ninety) {
Shinya Kitaoka 120a6e
  UCHAR *bufin, *pixin;
Shinya Kitaoka 120a6e
  ULONG *bufout, *pixout;
Shinya Kitaoka 120a6e
  int wrapin, wrapout, cmapin_offset, cmap_offset_delta;
Shinya Kitaoka 120a6e
  int u, v, lu, lv, su, sv, u00, v00, u0, v0, dindx, dudy, dvdy;
Shinya Kitaoka 120a6e
  int x, y, lx, ly;
Shinya Kitaoka 120a6e
  int u1, v1, u2, v2;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  mirror &= 1;
Shinya Kitaoka 120a6e
  ninety &= 3;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  if (!ninety && !mirror) {
Shinya Kitaoka 120a6e
    rop_copy(rin, rout, x1, y1, x2, y2, newx, newy);
Shinya Kitaoka 120a6e
    return;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  cmapin_offset     = rin->cmap.info.offset_mask;
Shinya Kitaoka 120a6e
  cmap_offset_delta = -cmapin_offset;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  u1 = x1;
Shinya Kitaoka 120a6e
  v1 = y1;
Shinya Kitaoka 120a6e
  u2 = x2;
Shinya Kitaoka 120a6e
  v2 = y2;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  su = u2 - u1;
Shinya Kitaoka 120a6e
  sv = v2 - v1;
Shinya Kitaoka 120a6e
  lu = u2 - u1 + 1;
Shinya Kitaoka 120a6e
  lv = v2 - v1 + 1;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  if (ninety & 1) {
Shinya Kitaoka 120a6e
    lx = lv;
Shinya Kitaoka 120a6e
    ly = lu;
Shinya Kitaoka 120a6e
  } else {
Shinya Kitaoka 120a6e
    lx = lu;
Shinya Kitaoka 120a6e
    ly = lv;
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  bufin   = rin->buffer;
Shinya Kitaoka 120a6e
  wrapin  = rin->wrap;
Shinya Kitaoka 120a6e
  bufout  = rout->buffer;
Shinya Kitaoka 120a6e
  wrapout = rout->wrap;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  dudy = 0;
Shinya Kitaoka 120a6e
  dvdy = 0;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  switch ((mirror << 2) + ninety) {
Shinya Kitaoka 120a6e
    CASE(0 << 2) + 0 : u00 = u1;
Shinya Kitaoka 120a6e
    v00                    = v1;
Shinya Kitaoka 120a6e
    dvdy                   = 1;
Shinya Kitaoka 120a6e
    dindx                  = 1;
Shinya Kitaoka 120a6e
    CASE(0 << 2) + 1 : u00 = u1;
Shinya Kitaoka 120a6e
    v00                    = v1 + sv;
Shinya Kitaoka 120a6e
    dudy                   = 1;
Shinya Kitaoka 120a6e
    dindx                  = -wrapin;
Shinya Kitaoka 120a6e
    CASE(0 << 2) + 2 : u00 = u1 + su;
Shinya Kitaoka 120a6e
    v00                    = v1 + sv;
Shinya Kitaoka 120a6e
    dvdy                   = -1;
Shinya Kitaoka 120a6e
    dindx                  = -1;
Shinya Kitaoka 120a6e
    CASE(0 << 2) + 3 : u00 = u1 + su;
Shinya Kitaoka 120a6e
    v00                    = v1;
Shinya Kitaoka 120a6e
    dudy                   = -1;
Shinya Kitaoka 120a6e
    dindx                  = wrapin;
Shinya Kitaoka 120a6e
    CASE(1 << 2) + 0 : u00 = u1 + su;
Shinya Kitaoka 120a6e
    v00                    = v1;
Shinya Kitaoka 120a6e
    dvdy                   = 1;
Shinya Kitaoka 120a6e
    dindx                  = -1;
Shinya Kitaoka 120a6e
    CASE(1 << 2) + 1 : u00 = u1 + su;
Shinya Kitaoka 120a6e
    v00                    = v1 + sv;
Shinya Kitaoka 120a6e
    dudy                   = -1;
Shinya Kitaoka 120a6e
    dindx                  = -wrapin;
Shinya Kitaoka 120a6e
    CASE(1 << 2) + 2 : u00 = u1;
Shinya Kitaoka 120a6e
    v00                    = v1 + sv;
Shinya Kitaoka 120a6e
    dvdy                   = -1;
Shinya Kitaoka 120a6e
    dindx                  = 1;
Shinya Kitaoka 120a6e
    CASE(1 << 2) + 3 : u00 = u1;
Shinya Kitaoka 120a6e
    v00                    = v1;
Shinya Kitaoka 120a6e
    dudy                   = 1;
Shinya Kitaoka 120a6e
    dindx                  = wrapin;
Shinya Kitaoka 120a6e
  DEFAULT:
Shinya Kitaoka 120a6e
    abort();
Shinya Kitaoka 120a6e
    u00 = v00 = dudy = dindx = 0;
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  for (u0 = u00, v0 = v00, y = newy; y < newy + ly;
Shinya Kitaoka 120a6e
       u0 += dudy, v0 += dvdy, y++) {
Shinya Kitaoka 120a6e
    pixin  = bufin + u0 + v0 * wrapin;
Shinya Kitaoka 120a6e
    pixout = bufout + newx + y * wrapout;
Shinya Kitaoka 120a6e
    for (x = newx; x < newx + lx; x++) {
Shinya Kitaoka 120a6e
      *pixout++ = *pixin + cmap_offset_delta;
Shinya Kitaoka 120a6e
      pixin += dindx;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
?E 84 static void rop_copy_90_gr8_rgb16(RASTER *rin, RASTER *rout, int x1,
Shinya Kitaoka 120a6e
                                        int y1, int x2, int y2, int newx,
Shinya Kitaoka 120a6e
                                        int newy, int mirror, int ninety) {
Shinya Kitaoka 120a6e
  UCHAR *bufin, *bytein;
Shinya Kitaoka 120a6e
  USHORT *bufout, *pixout;
Shinya Kitaoka 120a6e
  int wrapin, wrapout;
Shinya Kitaoka 120a6e
  int u, v, lu, lv, su, sv, u00, v00, u0, v0, dindx, dudy, dvdy;
Shinya Kitaoka 120a6e
  int x, y, lx, ly;
Shinya Kitaoka 120a6e
  int u1, v1, u2, v2;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  mirror &= 1;
Shinya Kitaoka 120a6e
  ninety &= 3;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  if (!ninety && !mirror) {
Shinya Kitaoka 120a6e
    rop_copy(rin, rout, x1, y1, x2, y2, newx, newy);
Shinya Kitaoka 120a6e
    return;
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  u1 = x1;
Shinya Kitaoka 120a6e
  v1 = y1;
Shinya Kitaoka 120a6e
  u2 = x2;
Shinya Kitaoka 120a6e
  v2 = y2;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  su = u2 - u1;
Shinya Kitaoka 120a6e
  sv = v2 - v1;
Shinya Kitaoka 120a6e
  lu = u2 - u1 + 1;
Shinya Kitaoka 120a6e
  lv = v2 - v1 + 1;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  if (ninety & 1) {
Shinya Kitaoka 120a6e
    lx = lv;
Shinya Kitaoka 120a6e
    ly = lu;
Shinya Kitaoka 120a6e
  } else {
Shinya Kitaoka 120a6e
    lx = lu;
Shinya Kitaoka 120a6e
    ly = lv;
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  bufin        = rin->buffer;
Shinya Kitaoka 120a6e
  wrapin       = rin->wrap;
Shinya Kitaoka 120a6e
  ?E 61 bufout = rout->buffer;
Shinya Kitaoka 120a6e
  wrapout      = rout->wrap;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  dudy = 0;
Shinya Kitaoka 120a6e
  dvdy = 0;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  switch ((mirror << 2) + ninety) {
Shinya Kitaoka 120a6e
    CASE(0 << 2) + 0 : u00 = u1;
Shinya Kitaoka 120a6e
    v00                    = v1;
Shinya Kitaoka 120a6e
    dvdy                   = 1;
Shinya Kitaoka 120a6e
    dindx                  = 1;
Shinya Kitaoka 120a6e
    CASE(0 << 2) + 1 : u00 = u1;
Shinya Kitaoka 120a6e
    v00                    = v1 + sv;
Shinya Kitaoka 120a6e
    dudy                   = 1;
Shinya Kitaoka 120a6e
    dindx                  = -wrapin;
Shinya Kitaoka 120a6e
    CASE(0 << 2) + 2 : u00 = u1 + su;
Shinya Kitaoka 120a6e
    v00                    = v1 + sv;
Shinya Kitaoka 120a6e
    dvdy                   = -1;
Shinya Kitaoka 120a6e
    dindx                  = -1;
Shinya Kitaoka 120a6e
    CASE(0 << 2) + 3 : u00 = u1 + su;
Shinya Kitaoka 120a6e
    v00                    = v1;
Shinya Kitaoka 120a6e
    dudy                   = -1;
Shinya Kitaoka 120a6e
    dindx                  = wrapin;
Shinya Kitaoka 120a6e
    CASE(1 << 2) + 0 : u00 = u1 + su;
Shinya Kitaoka 120a6e
    v00                    = v1;
Shinya Kitaoka 120a6e
    dvdy                   = 1;
Shinya Kitaoka 120a6e
    dindx                  = -1;
Shinya Kitaoka 120a6e
    CASE(1 << 2) + 1 : u00 = u1 + su;
Shinya Kitaoka 120a6e
    v00                    = v1 + sv;
Shinya Kitaoka 120a6e
    dudy                   = -1;
Shinya Kitaoka 120a6e
    dindx                  = -wrapin;
Shinya Kitaoka 120a6e
    CASE(1 << 2) + 2 : u00 = u1;
Shinya Kitaoka 120a6e
    v00                    = v1 + sv;
Shinya Kitaoka 120a6e
    dvdy                   = -1;
Shinya Kitaoka 120a6e
    dindx                  = 1;
Shinya Kitaoka 120a6e
    CASE(1 << 2) + 3 : u00 = u1;
Shinya Kitaoka 120a6e
    v00                    = v1;
Shinya Kitaoka 120a6e
    dudy                   = 1;
Shinya Kitaoka 120a6e
    dindx                  = wrapin;
Shinya Kitaoka 120a6e
    ?I 50
Toshihiro Shimizu 890ddd
?D 78 DEFAULT : assert(FALSE);
Shinya Kitaoka 120a6e
    u00 = v00 = dudy = dindx = 0;
Shinya Kitaoka 120a6e
    ?E 78
Toshihiro Shimizu 890ddd
?I 78 DEFAULT : abort();
Shinya Kitaoka 120a6e
    u00 = v00 = dudy = dindx = 0;
Shinya Kitaoka 120a6e
    ?E 78
Toshihiro Shimizu 890ddd
?E 50
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  for (u0 = u00, v0 = v00, y = newy; y < newy + ly;
Shinya Kitaoka 120a6e
       u0 += dudy, v0 += dvdy, y++) {
Shinya Kitaoka 120a6e
    bytein = bufin + u0 + v0 * wrapin;
Shinya Kitaoka 120a6e
    pixout = bufout + newx + y * wrapout;
Shinya Kitaoka 120a6e
    for (x = newx; x < newx + lx; x++) {
Shinya Kitaoka 120a6e
      ?D 55 tmp.r = *bytein;
Shinya Kitaoka 120a6e
      tmp.g       = *bytein;
Shinya Kitaoka 120a6e
      tmp.b       = *bytein;
Shinya Kitaoka 120a6e
      ?I 43 tmp.m = 0xff;
Shinya Kitaoka 120a6e
      *pixout++   = tmp;
Shinya Kitaoka 120a6e
      ?E 55
Toshihiro Shimizu 890ddd
?I 55
Shinya Kitaoka 120a6e
?D 60 *pixout++  = ROP_RGB16_FROM_BYTES(*bytein, *bytein, *bytein);
Shinya Kitaoka 120a6e
      ?E 60
Shinya Kitaoka 120a6e
?I 60 *pixout++  = PIX_RGB16_FROM_BYTES(*bytein, *bytein, *bytein);
Shinya Kitaoka 120a6e
      ?E 60
Toshihiro Shimizu 890ddd
?E 55 bytein += dindx;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?D 55
Toshihiro Shimizu 890ddd
static void rop_copy_90_rgb_rgbm(RASTER *rin, RASTER *rout,
Toshihiro Shimizu 890ddd
?E 55
Toshihiro Shimizu 890ddd
?I 55
Toshihiro Shimizu 890ddd
?D 56
Toshihiro Shimizu 890ddd
static void rop_copy_90_gr8_rgbm(RASTER *rin, RASTER *rout,
Toshihiro Shimizu 890ddd
?E 55
Toshihiro Shimizu 890ddd
                                 int x1, int y1, int x2, int y2,
Toshihiro Shimizu 890ddd
			         int newx, int newy,
Toshihiro Shimizu 890ddd
		                 int mirror, int ninety)
Toshihiro Shimizu 890ddd
?E 56
Toshihiro Shimizu 890ddd
?I 56
Toshihiro Shimizu 890ddd
?D 57
Toshihiro Shimizu 890ddd
#ifdef DAFARE
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?E 57
Toshihiro Shimizu 890ddd
static void rop_zoom_out_90_gr8_rgb16(RASTER *rin, RASTER *rout,
Toshihiro Shimizu 890ddd
                                      int x1, int y1, int x2, int y2,
Toshihiro Shimizu 890ddd
			              int newx, int newy,
Toshihiro Shimizu 890ddd
		                      int abs_zoom_level,
Toshihiro Shimizu 890ddd
				      int mirror, int ninety)
Toshihiro Shimizu 890ddd
?E 56
Toshihiro Shimizu 890ddd
{
Shinya Kitaoka 120a6e
  ?D 55 UCHAR *bufin, *bytein, *appo;
Shinya Kitaoka 120a6e
  ?E 55
Toshihiro Shimizu 890ddd
?I 55
Toshihiro Shimizu 890ddd
?D 56 UCHAR *bufin, *bytein;
Shinya Kitaoka 120a6e
  ?E 55 LPIXEL *bufout, *pixout, tmp;
Shinya Kitaoka 120a6e
  ?E 56
Toshihiro Shimizu 890ddd
?I 56 UCHAR *bufin, *rowin, *pixin, *in;
Shinya Kitaoka 120a6e
  int tmp;
Shinya Kitaoka 120a6e
  USHORT *bufout, *rowout, *pixout;
Shinya Kitaoka 120a6e
  ?E 56 int wrapin, wrapout;
Shinya Kitaoka 120a6e
  ?D 57 int u, v, lu, lv, su, sv, u00, v00, u0, v0, dindx, dudy, dvdy;
Shinya Kitaoka 120a6e
  int x, y, lx, ly;
Shinya Kitaoka 120a6e
  ?E 57 int u1, v1, u2, v2;
Shinya Kitaoka 120a6e
  ?I 56
Toshihiro Shimizu 890ddd
?D 57 int ulast, vlast, urest, vrest, i, j;
Shinya Kitaoka 120a6e
  ?E 57
Toshihiro Shimizu 890ddd
?I 57 int u, v, lu, lv, startu, startv;
Shinya Kitaoka 120a6e
  int p, q, lp, lq;
Shinya Kitaoka 120a6e
  int dudp, dvdp, dudq, dvdq, dindp, dindq;
Shinya Kitaoka 120a6e
  int plast, qlast, prest, qrest, i, j;
Shinya Kitaoka 120a6e
  ?E 57 int factor, fac_fac_2_bits;
Shinya Kitaoka 120a6e
  ?D 57 int fac_fac, vrest_fac, fac_urest, vrest_urest;
Shinya Kitaoka 120a6e
  int fac_fac_2, vrest_fac_2, fac_urest_2, vrest_urest_2;
Shinya Kitaoka 120a6e
  ?E 57
Toshihiro Shimizu 890ddd
?I 57 int fac_fac, qrest_fac, fac_prest, qrest_prest;
Shinya Kitaoka 120a6e
  int fac_fac_2, qrest_fac_2, fac_prest_2, qrest_prest_2;
Shinya Kitaoka 120a6e
  ?E 57 int fac_fac_4;
Shinya Kitaoka 120a6e
  ?E 56
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
      mirror &= 1;
Shinya Kitaoka 120a6e
  ninety &= 3;
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  ?D 44 printf("mirror = %d ninety = %d\n", mirror, ninety);
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  ?E 44 if (!ninety && !mirror) {
Shinya Kitaoka 120a6e
    ?D 56 rop_copy(rin, rout, x1, y1, x2, y2, newx, newy);
Shinya Kitaoka 120a6e
    ?E 56
Toshihiro Shimizu 890ddd
?I 56
Toshihiro Shimizu 890ddd
?D 57 rop_zoom_out(rin, rout, x1, y1, x2, y2, newx, newy);
Shinya Kitaoka 120a6e
    ?E 57
Toshihiro Shimizu 890ddd
?I 57 rop_zoom_out(rin, rout, x1, y1, x2, y2, newx, newy, abs_zoom_level);
Shinya Kitaoka 120a6e
    ?E 57
Toshihiro Shimizu 890ddd
?E 56 return;
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  u1 = x1;
Shinya Kitaoka 120a6e
  v1 = y1;
Shinya Kitaoka 120a6e
  u2 = x2;
Shinya Kitaoka 120a6e
  v2 = y2;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  ?D 57 su = u2 - u1;
Shinya Kitaoka 120a6e
  sv       = v2 - v1;
Shinya Kitaoka 120a6e
  ?E 57 lu = u2 - u1 + 1;
Shinya Kitaoka 120a6e
  lv       = v2 - v1 + 1;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  if (ninety & 1) {
Shinya Kitaoka 120a6e
    ?D 57 lx = lv;
Shinya Kitaoka 120a6e
    ly       = lu;
Shinya Kitaoka 120a6e
    ?E 57
Shinya Kitaoka 120a6e
?I 57 lp    = lv;
Shinya Kitaoka 120a6e
    lq       = lu;
Shinya Kitaoka 120a6e
    ?E 57
Shinya Kitaoka 120a6e
  } else {
Shinya Kitaoka 120a6e
    ?D 57 lx = lu;
Shinya Kitaoka 120a6e
    ly       = lv;
Shinya Kitaoka 120a6e
    ?E 57
Shinya Kitaoka 120a6e
?I 57 lp    = lu;
Shinya Kitaoka 120a6e
    lq       = lv;
Shinya Kitaoka 120a6e
    ?E 57
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  ?D 57
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?E 57
Shinya Kitaoka 120a6e
?I 56 factor     = 1 << abs_zoom_level;
Shinya Kitaoka 120a6e
  ?D 57 urest     = lu % factor;
Shinya Kitaoka 120a6e
  vrest           = lv % factor;
Shinya Kitaoka 120a6e
  ulast           = u2 - urest + 1;
Shinya Kitaoka 120a6e
  vlast           = v2 - vrest + 1;
Shinya Kitaoka 120a6e
  ?E 57
Toshihiro Shimizu 890ddd
?I 57
Shinya Kitaoka 120a6e
?D 61 prest      = lp % factor;
Shinya Kitaoka 120a6e
  qrest           = lq % factor;
Shinya Kitaoka 120a6e
  ?E 61
Shinya Kitaoka 120a6e
?I 61 prest      = lp & (factor - 1);
Shinya Kitaoka 120a6e
  qrest           = lq & (factor - 1);
Shinya Kitaoka 120a6e
  ?E 61 plast     = lp - prest;
Shinya Kitaoka 120a6e
  qlast           = lq - qrest;
Shinya Kitaoka 120a6e
  ?E 57 fac_fac   = factor * factor;
Shinya Kitaoka 120a6e
  fac_fac_2       = fac_fac >> 1;
Shinya Kitaoka 120a6e
  fac_fac_4       = fac_fac >> 2;
Shinya Kitaoka 120a6e
  fac_fac_2_bits  = 2 * abs_zoom_level - 1;
Shinya Kitaoka 120a6e
  ?D 57 vrest_fac = vrest * factor;
Shinya Kitaoka 120a6e
  vrest_fac_2     = vrest_fac >> 1;
Shinya Kitaoka 120a6e
  fac_urest       = factor * urest;
Shinya Kitaoka 120a6e
  fac_urest_2     = fac_urest >> 1;
Shinya Kitaoka 120a6e
  vrest_urest     = vrest * urest;
Shinya Kitaoka 120a6e
  vrest_urest_2   = vrest_urest >> 1;
Shinya Kitaoka 120a6e
  ?E 57
Shinya Kitaoka 120a6e
?I 57 qrest_fac  = qrest * factor;
Shinya Kitaoka 120a6e
  qrest_fac_2     = qrest_fac >> 1;
Shinya Kitaoka 120a6e
  fac_prest       = factor * prest;
Shinya Kitaoka 120a6e
  fac_prest_2     = fac_prest >> 1;
Shinya Kitaoka 120a6e
  qrest_prest     = qrest * prest;
Shinya Kitaoka 120a6e
  qrest_prest_2   = qrest_prest >> 1;
Shinya Kitaoka 120a6e
  ?E 57
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
?E 56 bufin      = rin->buffer;
Shinya Kitaoka 120a6e
  ?D 55 wrapin    = rin->wrap * 3; /* mi muovo di bytes */
Shinya Kitaoka 120a6e
     ?E 55
Shinya Kitaoka 120a6e
?I 55 wrapin     = rin->wrap;
Shinya Kitaoka 120a6e
  ?E 55 bufout    = rout->buffer;
Shinya Kitaoka 120a6e
  wrapout         = rout->wrap;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  ?D 57 dudy = 0;
Shinya Kitaoka 120a6e
  dvdy       = 0;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  ?E 57 switch ((mirror << 2) + ninety) {
Shinya Kitaoka 120a6e
    ?D 55 CASE(0 << 2) + 0 : u00 = u1;
Shinya Kitaoka 120a6e
    v00                          = v1;
Shinya Kitaoka 120a6e
    dvdy                         = 1;
Shinya Kitaoka 120a6e
    dindx                        = 3;
Shinya Kitaoka 120a6e
    ?E 55
Toshihiro Shimizu 890ddd
?I 55
Shinya Kitaoka 120a6e
?D 57 CASE(0 << 2) + 0 : u00    = u1;
Shinya Kitaoka 120a6e
    v00                          = v1;
Shinya Kitaoka 120a6e
    dvdy                         = 1;
Shinya Kitaoka 120a6e
    dindx                        = 1;
Shinya Kitaoka 120a6e
    ?E 55 CASE(0 << 2) + 1 : u00 = u1;
Shinya Kitaoka 120a6e
    v00                          = v1 + sv;
Shinya Kitaoka 120a6e
    dudy                         = 1;
Shinya Kitaoka 120a6e
    dindx                        = -wrapin;
Shinya Kitaoka 120a6e
    ?D 55 CASE(0 << 2) + 2 : u00 = u1 + su;
Shinya Kitaoka 120a6e
    v00                          = v1 + sv;
Shinya Kitaoka 120a6e
    dvdy                         = -1;
Shinya Kitaoka 120a6e
    dindx                        = -3;
Shinya Kitaoka 120a6e
    ?E 55
Shinya Kitaoka 120a6e
?I 55 CASE(0 << 2) + 2 : u00    = u1 + su;
Shinya Kitaoka 120a6e
    v00                          = v1 + sv;
Shinya Kitaoka 120a6e
    dvdy                         = -1;
Shinya Kitaoka 120a6e
    dindx                        = -1;
Shinya Kitaoka 120a6e
    ?E 55 CASE(0 << 2) + 3 : u00 = u1 + su;
Shinya Kitaoka 120a6e
    v00                          = v1;
Shinya Kitaoka 120a6e
    dudy                         = -1;
Shinya Kitaoka 120a6e
    dindx                        = wrapin;
Shinya Kitaoka 120a6e
    ?D 55 CASE(1 << 2) + 0 : u00 = u1 + su;
Shinya Kitaoka 120a6e
    v00                          = v1;
Shinya Kitaoka 120a6e
    dvdy                         = 1;
Shinya Kitaoka 120a6e
    dindx                        = -3;
Shinya Kitaoka 120a6e
    ?E 55
Shinya Kitaoka 120a6e
?I 55 CASE(1 << 2) + 0 : u00    = u1 + su;
Shinya Kitaoka 120a6e
    v00                          = v1;
Shinya Kitaoka 120a6e
    dvdy                         = 1;
Shinya Kitaoka 120a6e
    dindx                        = -1;
Shinya Kitaoka 120a6e
    ?E 55 CASE(1 << 2) + 1 : u00 = u1 + su;
Shinya Kitaoka 120a6e
    v00                          = v1 + sv;
Shinya Kitaoka 120a6e
    dudy                         = -1;
Shinya Kitaoka 120a6e
    dindx                        = -wrapin;
Shinya Kitaoka 120a6e
    ?D 55 CASE(1 << 2) + 2 : u00 = u1;
Shinya Kitaoka 120a6e
    v00                          = v1 + sv;
Shinya Kitaoka 120a6e
    dvdy                         = -1;
Shinya Kitaoka 120a6e
    dindx                        = 3;
Shinya Kitaoka 120a6e
    ?E 55
Shinya Kitaoka 120a6e
?I 55 CASE(1 << 2) + 2 : u00    = u1;
Shinya Kitaoka 120a6e
    v00                          = v1 + sv;
Shinya Kitaoka 120a6e
    dvdy                         = -1;
Shinya Kitaoka 120a6e
    dindx                        = 1;
Shinya Kitaoka 120a6e
    ?E 55 CASE(1 << 2) + 3 : u00 = u1;
Shinya Kitaoka 120a6e
    v00                          = v1;
Shinya Kitaoka 120a6e
    dudy                         = 1;
Shinya Kitaoka 120a6e
    dindx                        = wrapin;
Shinya Kitaoka 120a6e
    ?I 50 DEFAULT : assert(FALSE);
Shinya Kitaoka 120a6e
    u00 = v00 = dudy = dindx = 0;
Shinya Kitaoka 120a6e
    ?E 50
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  for (u0 = u00, v0 = v00, y = newy; y < newy + ly;
Shinya Kitaoka 120a6e
       u0 += dudy, v0 += dvdy, y++) {
Shinya Kitaoka 120a6e
    ?D 55 bytein = bufin + u0 * 3 + v0 * wrapin;
Shinya Kitaoka 120a6e
    ?E 55
Shinya Kitaoka 120a6e
?I 55 bytein    = bufin + u0 + v0 * wrapin;
Shinya Kitaoka 120a6e
    ?E 55 pixout = bufout + newx + y * wrapout;
Shinya Kitaoka 120a6e
    for (x = newx; x < newx + lx; x++) {
Shinya Kitaoka 120a6e
      ?D 55 appo = bytein;
Shinya Kitaoka 120a6e
      tmp.r      = *appo++;
Shinya Kitaoka 120a6e
      tmp.g      = *appo++;
Shinya Kitaoka 120a6e
      tmp.b      = *appo;
Shinya Kitaoka 120a6e
      ?E 55
Toshihiro Shimizu 890ddd
?I 55
Shinya Kitaoka 120a6e
?D 56 tmp.r     = *bytein;
Shinya Kitaoka 120a6e
      tmp.g      = *bytein;
Shinya Kitaoka 120a6e
      tmp.b      = *bytein;
Shinya Kitaoka 120a6e
      ?E 55
Shinya Kitaoka 120a6e
?E 43 tmp.m     = 0xff;
Shinya Kitaoka 120a6e
      *pixout++  = tmp;
Shinya Kitaoka 120a6e
      ?E 56
Shinya Kitaoka 120a6e
?I 56 *pixout++ = ROP_RGB16_FROM_BYTES(*bytein, *bytein, *bytein);
Shinya Kitaoka 120a6e
      ?E 56 bytein += dindx;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    ?E 57
Shinya Kitaoka 120a6e
?I 57 CASE(0 << 2) + 0 : dudp    = 1;
Shinya Kitaoka 120a6e
    dvdp                          = 0;
Shinya Kitaoka 120a6e
    dudq                          = 0;
Shinya Kitaoka 120a6e
    dvdq                          = 1;
Shinya Kitaoka 120a6e
    startu                        = u1;
Shinya Kitaoka 120a6e
    startv                        = v1;
Shinya Kitaoka 120a6e
    CASE(0 << 2) + 1 : dudp       = 0;
Shinya Kitaoka 120a6e
    dvdp                          = -1;
Shinya Kitaoka 120a6e
    dudq                          = 1;
Shinya Kitaoka 120a6e
    dvdq                          = 0;
Shinya Kitaoka 120a6e
    startu                        = u1;
Shinya Kitaoka 120a6e
    startv                        = v2;
Shinya Kitaoka 120a6e
    CASE(0 << 2) + 2 : dudp       = -1;
Shinya Kitaoka 120a6e
    dvdp                          = 0;
Shinya Kitaoka 120a6e
    dudq                          = 0;
Shinya Kitaoka 120a6e
    dvdq                          = -1;
Shinya Kitaoka 120a6e
    startu                        = u2;
Shinya Kitaoka 120a6e
    startv                        = v2;
Shinya Kitaoka 120a6e
    CASE(0 << 2) + 3 : dudp       = 0;
Shinya Kitaoka 120a6e
    dvdp                          = 1;
Shinya Kitaoka 120a6e
    dudq                          = -1;
Shinya Kitaoka 120a6e
    dvdq                          = 0;
Shinya Kitaoka 120a6e
    startu                        = u2;
Shinya Kitaoka 120a6e
    startv                        = v1;
Shinya Kitaoka 120a6e
    CASE(1 << 2) + 0 : dudp       = -1;
Shinya Kitaoka 120a6e
    dvdp                          = 0;
Shinya Kitaoka 120a6e
    dudq                          = 0;
Shinya Kitaoka 120a6e
    dvdq                          = 1;
Shinya Kitaoka 120a6e
    startu                        = u2;
Shinya Kitaoka 120a6e
    startv                        = v1;
Shinya Kitaoka 120a6e
    ?D 61 CASE(1 << 2) + 1 : dudp = 0;
Shinya Kitaoka 120a6e
    dvdp                          = 1;
Shinya Kitaoka 120a6e
    dudq                          = 1;
Shinya Kitaoka 120a6e
    dvdq                          = 0;
Shinya Kitaoka 120a6e
    startu                        = u2;
Shinya Kitaoka 120a6e
    startv                        = v2;
Shinya Kitaoka 120a6e
    ?E 61
Shinya Kitaoka 120a6e
?I 61 CASE(1 << 2) + 1 : dudp    = 0;
Shinya Kitaoka 120a6e
    dvdp                          = -1;
Shinya Kitaoka 120a6e
    dudq                          = -1;
Shinya Kitaoka 120a6e
    dvdq                          = 0;
Shinya Kitaoka 120a6e
    startu                        = u2;
Shinya Kitaoka 120a6e
    startv                        = v2;
Shinya Kitaoka 120a6e
    ?E 61 CASE(1 << 2) + 2 : dudp = 1;
Shinya Kitaoka 120a6e
    dvdp                          = 0;
Shinya Kitaoka 120a6e
    dudq                          = 0;
Shinya Kitaoka 120a6e
    dvdq                          = -1;
Shinya Kitaoka 120a6e
    startu                        = u1;
Shinya Kitaoka 120a6e
    startv                        = v2;
Shinya Kitaoka 120a6e
    ?D 61 CASE(1 << 2) + 3 : dudp = 0;
Shinya Kitaoka 120a6e
    dvdp                          = -1;
Shinya Kitaoka 120a6e
    dudq                          = -1;
Shinya Kitaoka 120a6e
    dvdq                          = 0;
Shinya Kitaoka 120a6e
    startu                        = u1;
Shinya Kitaoka 120a6e
    startv                        = v1;
Shinya Kitaoka 120a6e
    ?E 61
Shinya Kitaoka 120a6e
?I 61 CASE(1 << 2) + 3 : dudp    = 0;
Shinya Kitaoka 120a6e
    dvdp                          = 1;
Shinya Kitaoka 120a6e
    dudq                          = 1;
Shinya Kitaoka 120a6e
    dvdq                          = 0;
Shinya Kitaoka 120a6e
    startu                        = u1;
Shinya Kitaoka 120a6e
    startv                        = v1;
Shinya Kitaoka 120a6e
    ?E 61 DEFAULT :
Toshihiro Shimizu 890ddd
?D 78 assert(FALSE);
Shinya Kitaoka 120a6e
    dudp = dvdp = dudq = dvdq = startu = startv = 0;
Shinya Kitaoka 120a6e
    ?E 78
Toshihiro Shimizu 890ddd
?I 78 abort();
Shinya Kitaoka 120a6e
    dudp = dvdp = dudq = dvdq = startu = startv = 0;
Shinya Kitaoka 120a6e
    ?E 78
Toshihiro Shimizu 890ddd
?E 57
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  ?I 57 dindp = dudp + wrapin * dvdp;
Shinya Kitaoka 120a6e
  dindq       = dudq + wrapin * dvdq;
Shinya Kitaoka 120a6e
  ?E 57
Toshihiro Shimizu 890ddd
?D 56
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?E 22
Toshihiro Shimizu 890ddd
?E 21
Toshihiro Shimizu 890ddd
?D 55
Toshihiro Shimizu 890ddd
static void rop_copy_90_bw_gr8(RASTER *rin, RASTER *rout,
Toshihiro Shimizu 890ddd
                               int x1, int y1, int x2, int y2,
Toshihiro Shimizu 890ddd
			       int newx, int newy,
Toshihiro Shimizu 890ddd
		               int mirror, int ninety)
Toshihiro Shimizu 890ddd
?E 55
Toshihiro Shimizu 890ddd
?I 55
Toshihiro Shimizu 890ddd
static void rop_copy_90_rgb_rgbm(RASTER *rin, RASTER *rout,
Toshihiro Shimizu 890ddd
                                 int x1, int y1, int x2, int y2,
Toshihiro Shimizu 890ddd
			         int newx, int newy,
Toshihiro Shimizu 890ddd
		                 int mirror, int ninety)
Toshihiro Shimizu 890ddd
?E 55
Toshihiro Shimizu 890ddd
{
Shinya Kitaoka 120a6e
  ?D 55 UCHAR *bufin, *bufout, *bytein, *byteout;
Shinya Kitaoka 120a6e
  int bytewrapin, bitoffsin, wrapout;
Shinya Kitaoka 120a6e
  int value_for_0, value_for_1;
Shinya Kitaoka 120a6e
  int u, v, lu, lv, su, sv, u00, v00, u0, v0, dudy, dvdy, dudx, dvdx;
Shinya Kitaoka 120a6e
  ?E 55
Toshihiro Shimizu 890ddd
?I 55 UCHAR *bufin, *bytein, *appo;
Shinya Kitaoka 120a6e
  LPIXEL *bufout, *pixout, tmp;
Shinya Kitaoka 120a6e
  int wrapin, wrapout;
Shinya Kitaoka 120a6e
  int u, v, lu, lv, su, sv, u00, v00, u0, v0, dindx, dudy, dvdy;
Shinya Kitaoka 120a6e
  ?E 55 int x, y, lx, ly;
Shinya Kitaoka 120a6e
  int u1, v1, u2, v2;
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  ?D 55
Toshihiro Shimizu 890ddd
#ifdef DEBUG
Shinya Kitaoka 120a6e
      STW_INIT(0, "rop_copy_90_bw_gr8") STW_START(0)
Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?E 55 mirror &= 1;
Shinya Kitaoka 120a6e
  ?D 55 ninety &= 3;
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  if (!ninety && !mirror) {
Shinya Kitaoka 120a6e
    rop_copy(rin, rout, x1, y1, x2, y2, newx, newy);
Shinya Kitaoka 120a6e
    return;
Shinya Kitaoka 120a6e
    ?E 55
Toshihiro Shimizu 890ddd
?I 55 ninety &= 3;
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
    if (!ninety && !mirror) {
Shinya Kitaoka 120a6e
      rop_copy(rin, rout, x1, y1, x2, y2, newx, newy);
Shinya Kitaoka 120a6e
      return;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    ?E 56
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?D 56 u1 = x1;
Shinya Kitaoka 120a6e
    v1    = y1;
Shinya Kitaoka 120a6e
    u2    = x2;
Shinya Kitaoka 120a6e
    v2    = y2;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
    su = u2 - u1;
Shinya Kitaoka 120a6e
    sv = v2 - v1;
Shinya Kitaoka 120a6e
    lu = u2 - u1 + 1;
Shinya Kitaoka 120a6e
    lv = v2 - v1 + 1;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
    if (ninety & 1) {
Shinya Kitaoka 120a6e
      lx = lv;
Shinya Kitaoka 120a6e
      ly = lu;
Shinya Kitaoka 120a6e
    } else {
Shinya Kitaoka 120a6e
      lx = lu;
Shinya Kitaoka 120a6e
      ly = lv;
Shinya Kitaoka 120a6e
    }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
    bufin   = rin->buffer;
Shinya Kitaoka 120a6e
    wrapin  = rin->wrap * 3; /* mi muovo di bytes */
Shinya Kitaoka 120a6e
    bufout  = rout->buffer;
Shinya Kitaoka 120a6e
    wrapout = rout->wrap;
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
    dudy = 0;
Shinya Kitaoka 120a6e
    dvdy = 0;
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
    switch ((mirror << 2) + ninety)
Shinya Kitaoka 120a6e
      ?E 56
Toshihiro Shimizu 890ddd
?I 56
Toshihiro Shimizu 890ddd
?D 57 rowin = (UCHAR *)rin->buffer + wrapin * v1 + u1;
Shinya Kitaoka 120a6e
    rowout   = (USHORT *)rout->buffer + wrapout * newy + newx;
Shinya Kitaoka 120a6e
    for (v = v1; v < vlast; v += factor)
Shinya Kitaoka 120a6e
      ?E 57
Toshihiro Shimizu 890ddd
?I 57 rowin = (UCHAR *)rin->buffer + startu + startv * wrapin;
Shinya Kitaoka 120a6e
    rowout   = (USHORT *)rout->buffer + newx + newy * wrapout;
Shinya Kitaoka 120a6e
    for (q = 0; q < qlast; q += factor)
Toshihiro Shimizu 890ddd
			?E 57
Shinya Kitaoka 120a6e
?E 56 {
Shinya Kitaoka 120a6e
        ?D 56 CASE(0 << 2) + 0 : u00 = u1;
Shinya Kitaoka 120a6e
        v00                          = v1;
Shinya Kitaoka 120a6e
        dvdy                         = 1;
Shinya Kitaoka 120a6e
        dindx                        = 3;
Shinya Kitaoka 120a6e
        CASE(0 << 2) + 1 : u00       = u1;
Shinya Kitaoka 120a6e
        v00                          = v1 + sv;
Shinya Kitaoka 120a6e
        dudy                         = 1;
Shinya Kitaoka 120a6e
        dindx                        = -wrapin;
Shinya Kitaoka 120a6e
        CASE(0 << 2) + 2 : u00       = u1 + su;
Shinya Kitaoka 120a6e
        v00                          = v1 + sv;
Shinya Kitaoka 120a6e
        dvdy                         = -1;
Shinya Kitaoka 120a6e
        dindx                        = -3;
Shinya Kitaoka 120a6e
        CASE(0 << 2) + 3 : u00       = u1 + su;
Shinya Kitaoka 120a6e
        v00                          = v1;
Shinya Kitaoka 120a6e
        dudy                         = -1;
Shinya Kitaoka 120a6e
        dindx                        = wrapin;
Shinya Kitaoka 120a6e
        CASE(1 << 2) + 0 : u00       = u1 + su;
Shinya Kitaoka 120a6e
        v00                          = v1;
Shinya Kitaoka 120a6e
        dvdy                         = 1;
Shinya Kitaoka 120a6e
        dindx                        = -3;
Shinya Kitaoka 120a6e
        CASE(1 << 2) + 1 : u00       = u1 + su;
Shinya Kitaoka 120a6e
        v00                          = v1 + sv;
Shinya Kitaoka 120a6e
        dudy                         = -1;
Shinya Kitaoka 120a6e
        dindx                        = -wrapin;
Shinya Kitaoka 120a6e
        CASE(1 << 2) + 2 : u00       = u1;
Shinya Kitaoka 120a6e
        v00                          = v1 + sv;
Shinya Kitaoka 120a6e
        dvdy                         = -1;
Shinya Kitaoka 120a6e
        dindx                        = 3;
Shinya Kitaoka 120a6e
        CASE(1 << 2) + 3 : u00       = u1;
Shinya Kitaoka 120a6e
        v00                          = v1;
Shinya Kitaoka 120a6e
        dudy                         = 1;
Shinya Kitaoka 120a6e
        dindx                        = wrapin;
Shinya Kitaoka 120a6e
      DEFAULT:
Shinya Kitaoka 120a6e
        assert(FALSE);
Shinya Kitaoka 120a6e
        u00 = v00 = dudy = dindx = 0;
Shinya Kitaoka 120a6e
        ?E 56
Shinya Kitaoka 120a6e
?I 56 pixin                     = rowin;
Shinya Kitaoka 120a6e
        pixout                   = rowout;
Shinya Kitaoka 120a6e
        ?D 57 for (u = u1; u < ulast; u += factor)
Toshihiro Shimizu 890ddd
?E 57
Toshihiro Shimizu 890ddd
?I 57
Toshihiro Shimizu 890ddd
?D 58 for (p = 0; p < plast; p += factor)
Shinya Kitaoka 120a6e
?E 57 {
Shinya Kitaoka 120a6e
          tmp = 0;
Shinya Kitaoka 120a6e
          in  = pixin;
Shinya Kitaoka 120a6e
          for (j = 0; j < factor; j += 2) {
Shinya Kitaoka 120a6e
            for (i = 0; i < factor; i += 2) {
Shinya Kitaoka 120a6e
              tmp += *in;
Shinya Kitaoka 120a6e
              ?D 57 in += wrapin;
Shinya Kitaoka 120a6e
              in++;
Shinya Kitaoka 120a6e
              ?E 57
Toshihiro Shimizu 890ddd
?I 57 in += dindp + dindq;
Shinya Kitaoka 120a6e
              ?E 57 tmp += *in;
Shinya Kitaoka 120a6e
              ?D 57 in -= wrapin;
Shinya Kitaoka 120a6e
              in++;
Shinya Kitaoka 120a6e
              ?E 57
Toshihiro Shimizu 890ddd
?I 57 in += dindp - dindq;
Shinya Kitaoka 120a6e
              ?E 57
Shinya Kitaoka 120a6e
            }
Shinya Kitaoka 120a6e
            ?D 57 in += 2 * wrapin - factor;
Shinya Kitaoka 120a6e
            ?E 57
Toshihiro Shimizu 890ddd
?I 57 in += 2 * dindq - factor * dindp;
Shinya Kitaoka 120a6e
            ?E 57
Shinya Kitaoka 120a6e
          }
Shinya Kitaoka 120a6e
          tmp       = (tmp + fac_fac_4) >> fac_fac_2_bits;
Shinya Kitaoka 120a6e
          *pixout++ = ROP_RGB16_FROM_BYTES(tmp, tmp, tmp);
Shinya Kitaoka 120a6e
          ?D 57 pixin += factor;
Shinya Kitaoka 120a6e
          ?E 57
Toshihiro Shimizu 890ddd
?I 57 pixin += factor * dindp;
Shinya Kitaoka 120a6e
          ?E 57
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
        ?D 57 if (urest)
Toshihiro Shimizu 890ddd
?E 57
Toshihiro Shimizu 890ddd
?I 57 if (prest)
Shinya Kitaoka 120a6e
?E 57 {
Shinya Kitaoka 120a6e
          tmp = 0;
Shinya Kitaoka 120a6e
          for (j = 0; j < factor; j++)
Shinya Kitaoka 120a6e
            ?D 57 for (i = 0; i < urest; i++)
Toshihiro Shimizu 890ddd
?E 57
Toshihiro Shimizu 890ddd
?I 57 for (i = 0; i < prest; i++)
Shinya Kitaoka 120a6e
?E 57 {
Shinya Kitaoka 120a6e
              ?D 57 tmp += pixin[i + j * wrapin];
Shinya Kitaoka 120a6e
              ?E 57
Toshihiro Shimizu 890ddd
?I 57 tmp += pixin[i * dindp + j * dindq];
Shinya Kitaoka 120a6e
              ?E 57
Shinya Kitaoka 120a6e
            }
Shinya Kitaoka 120a6e
          ?D 57 tmp     = (tmp + fac_urest_2) / fac_urest;
Shinya Kitaoka 120a6e
          ?E 57
Shinya Kitaoka 120a6e
?I 57 tmp              = (tmp + fac_prest_2) / fac_prest;
Shinya Kitaoka 120a6e
          ?E 57 *pixout = ROP_RGB16_FROM_BYTES(tmp, tmp, tmp);
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
        ?D 57 rowin += wrapin * factor;
Shinya Kitaoka 120a6e
        ?E 57
Toshihiro Shimizu 890ddd
?I 57 rowin += factor * dindq;
Shinya Kitaoka 120a6e
        ?E 57 rowout += wrapout;
Shinya Kitaoka 120a6e
        ?E 56
Shinya Kitaoka 120a6e
      }
Shinya Kitaoka 120a6e
    ?D 56
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
        for (u0 = u00, v0 = v00, y = newy; y < newy + ly;
Shinya Kitaoka 120a6e
             u0 += dudy, v0 += dvdy, y++)
Toshihiro Shimizu 890ddd
?E 56
Toshihiro Shimizu 890ddd
?I 56
Toshihiro Shimizu 890ddd
?D 57 if (vrest)
Toshihiro Shimizu 890ddd
?E 57
Toshihiro Shimizu 890ddd
?I 57 if (qrest)
Toshihiro Shimizu 890ddd
?E 57
Shinya Kitaoka 120a6e
?E 56 {
Shinya Kitaoka 120a6e
      ?D 56 bytein = bufin + u0 * 3 + v0 * wrapin;
Shinya Kitaoka 120a6e
      pixout       = bufout + newx + y * wrapout;
Shinya Kitaoka 120a6e
      for (x = newx; x < newx + lx; x++)
Toshihiro Shimizu 890ddd
				?E 56
Toshihiro Shimizu 890ddd
?I 56 pixin = rowin;
Shinya Kitaoka 120a6e
      pixout = rowout;
Shinya Kitaoka 120a6e
      ?D 57 for (u = u1; u < ulast; u += factor)
Toshihiro Shimizu 890ddd
?E 57
Toshihiro Shimizu 890ddd
?I 57 for (p = 0; p < plast; p += factor)
Toshihiro Shimizu 890ddd
?E 57
Shinya Kitaoka 120a6e
?E 56 {
Shinya Kitaoka 120a6e
        ?D 56 appo = bytein;
Shinya Kitaoka 120a6e
        tmp.r      = *appo++;
Shinya Kitaoka 120a6e
        tmp.g      = *appo++;
Shinya Kitaoka 120a6e
        tmp.b      = *appo;
Shinya Kitaoka 120a6e
        tmp.m      = 0xff;
Shinya Kitaoka 120a6e
        *pixout++  = tmp;
Shinya Kitaoka 120a6e
        bytein += dindx;
Shinya Kitaoka 120a6e
        ?E 56
Toshihiro Shimizu 890ddd
?I 56 tmp = 0;
Shinya Kitaoka 120a6e
        ?D 57 for (j = 0; j < vrest; j++)
Toshihiro Shimizu 890ddd
?E 57
Toshihiro Shimizu 890ddd
?I 57 for (j = 0; j < qrest; j++)
Shinya Kitaoka 120a6e
?E 57 for (i = 0; i < factor; i++) {
Shinya Kitaoka 120a6e
          ?D 57 tmp += pixin[i + j * wrapin];
Shinya Kitaoka 120a6e
          ?E 57
Toshihiro Shimizu 890ddd
?I 57 tmp += pixin[i * dindp + j * dindq];
Shinya Kitaoka 120a6e
          ?E 57
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
        ?D 57 tmp       = (tmp + vrest_fac_2) / vrest_fac;
Shinya Kitaoka 120a6e
        ?E 57
Shinya Kitaoka 120a6e
?I 57 tmp              = (tmp + qrest_fac_2) / qrest_fac;
Shinya Kitaoka 120a6e
        ?E 57 *pixout++ = ROP_RGB16_FROM_BYTES(tmp, tmp, tmp);
Shinya Kitaoka 120a6e
        ?D 57 pixin += factor;
Shinya Kitaoka 120a6e
        ?E 57
Toshihiro Shimizu 890ddd
?I 57 pixin += factor * dindp;
Shinya Kitaoka 120a6e
        ?E 57
Shinya Kitaoka 120a6e
      }
Shinya Kitaoka 120a6e
      ?D 57 if (urest)
Toshihiro Shimizu 890ddd
?E 57
Toshihiro Shimizu 890ddd
?I 57 if (prest)
Shinya Kitaoka 120a6e
?E 57 {
Shinya Kitaoka 120a6e
        tmp = 0;
Shinya Kitaoka 120a6e
        ?D 57 for (j = 0; j < vrest; j++) for (i = 0; i < urest; i++)
Toshihiro Shimizu 890ddd
?E 57
Toshihiro Shimizu 890ddd
?I 57 for (j = 0; j < qrest; j++) for (i = 0; i < prest; i++)
Shinya Kitaoka 120a6e
?E 57 {
Shinya Kitaoka 120a6e
          ?D 57 tmp += pixin[i + j * wrapin];
Shinya Kitaoka 120a6e
          ?E 57
Toshihiro Shimizu 890ddd
?I 57 tmp += pixin[i * dindp + j * dindq];
Shinya Kitaoka 120a6e
          ?E 57
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
        ?D 57 tmp     = (tmp + vrest_urest_2) / vrest_urest;
Shinya Kitaoka 120a6e
        ?E 57
Shinya Kitaoka 120a6e
?I 57 tmp            = (tmp + qrest_prest_2) / qrest_prest;
Shinya Kitaoka 120a6e
        ?E 57 *pixout = ROP_RGB16_FROM_BYTES(tmp, tmp, tmp);
Shinya Kitaoka 120a6e
        ?E 56
Shinya Kitaoka 120a6e
      }
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    ?D 56
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  ?E 56
Toshihiro Shimizu 890ddd
?D 57
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?E 57
Toshihiro Shimizu 890ddd
?D 56
Shinya Kitaoka 120a6e
      /*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd
?E 56
Toshihiro Shimizu 890ddd
?I 56
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
?E 56
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?D 56
Toshihiro Shimizu 890ddd
static void rop_copy_90_bw_gr8(RASTER *rin, RASTER *rout,
Toshihiro Shimizu 890ddd
                               int x1, int y1, int x2, int y2,
Toshihiro Shimizu 890ddd
?E 56
Toshihiro Shimizu 890ddd
?I 56
Toshihiro Shimizu 890ddd
?D 57
Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?E 57
Toshihiro Shimizu 890ddd
/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
static void rop_copy_90_gr8_rgbm(RASTER *rin, RASTER *rout,
Toshihiro Shimizu 890ddd
                                 int x1, int y1, int x2, int y2,
Toshihiro Shimizu 890ddd
			         int newx, int newy,
Toshihiro Shimizu 890ddd
		                 int mirror, int ninety)
Toshihiro Shimizu 890ddd
{
Shinya Kitaoka 120a6e
  UCHAR *bufin, *bytein;
Shinya Kitaoka 120a6e
  LPIXEL *bufout, *pixout, tmp;
Shinya Kitaoka 120a6e
  int wrapin, wrapout;
Shinya Kitaoka 120a6e
  int u, v, lu, lv, su, sv, u00, v00, u0, v0, dindx, dudy, dvdy;
Shinya Kitaoka 120a6e
  int x, y, lx, ly;
Shinya Kitaoka 120a6e
  int u1, v1, u2, v2;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  mirror &= 1;
Shinya Kitaoka 120a6e
  ninety &= 3;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  if (!ninety && !mirror) {
Shinya Kitaoka 120a6e
    rop_copy(rin, rout, x1, y1, x2, y2, newx, newy);
Shinya Kitaoka 120a6e
    return;
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  u1 = x1;
Shinya Kitaoka 120a6e
  v1 = y1;
Shinya Kitaoka 120a6e
  u2 = x2;
Shinya Kitaoka 120a6e
  v2 = y2;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  su = u2 - u1;
Shinya Kitaoka 120a6e
  sv = v2 - v1;
Shinya Kitaoka 120a6e
  lu = u2 - u1 + 1;
Shinya Kitaoka 120a6e
  lv = v2 - v1 + 1;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  if (ninety & 1) {
Shinya Kitaoka 120a6e
    lx = lv;
Shinya Kitaoka 120a6e
    ly = lu;
Shinya Kitaoka 120a6e
  } else {
Shinya Kitaoka 120a6e
    lx = lu;
Shinya Kitaoka 120a6e
    ly = lv;
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  bufin   = rin->buffer;
Shinya Kitaoka 120a6e
  wrapin  = rin->wrap;
Shinya Kitaoka 120a6e
  bufout  = rout->buffer;
Shinya Kitaoka 120a6e
  wrapout = rout->wrap;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  dudy = 0;
Shinya Kitaoka 120a6e
  dvdy = 0;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  switch ((mirror << 2) + ninety) {
Shinya Kitaoka 120a6e
    CASE(0 << 2) + 0 : u00 = u1;
Shinya Kitaoka 120a6e
    v00                    = v1;
Shinya Kitaoka 120a6e
    dvdy                   = 1;
Shinya Kitaoka 120a6e
    dindx                  = 1;
Shinya Kitaoka 120a6e
    CASE(0 << 2) + 1 : u00 = u1;
Shinya Kitaoka 120a6e
    v00                    = v1 + sv;
Shinya Kitaoka 120a6e
    dudy                   = 1;
Shinya Kitaoka 120a6e
    dindx                  = -wrapin;
Shinya Kitaoka 120a6e
    CASE(0 << 2) + 2 : u00 = u1 + su;
Shinya Kitaoka 120a6e
    v00                    = v1 + sv;
Shinya Kitaoka 120a6e
    dvdy                   = -1;
Shinya Kitaoka 120a6e
    dindx                  = -1;
Shinya Kitaoka 120a6e
    CASE(0 << 2) + 3 : u00 = u1 + su;
Shinya Kitaoka 120a6e
    v00                    = v1;
Shinya Kitaoka 120a6e
    dudy                   = -1;
Shinya Kitaoka 120a6e
    dindx                  = wrapin;
Shinya Kitaoka 120a6e
    CASE(1 << 2) + 0 : u00 = u1 + su;
Shinya Kitaoka 120a6e
    v00                    = v1;
Shinya Kitaoka 120a6e
    dvdy                   = 1;
Shinya Kitaoka 120a6e
    dindx                  = -1;
Shinya Kitaoka 120a6e
    CASE(1 << 2) + 1 : u00 = u1 + su;
Shinya Kitaoka 120a6e
    v00                    = v1 + sv;
Shinya Kitaoka 120a6e
    dudy                   = -1;
Shinya Kitaoka 120a6e
    dindx                  = -wrapin;
Shinya Kitaoka 120a6e
    ?E 58
Shinya Kitaoka 120a6e
?I 58 for (p = 0; p < plast; p += factor) {
Shinya Kitaoka 120a6e
      tmp = 0;
Shinya Kitaoka 120a6e
      in  = pixin;
Shinya Kitaoka 120a6e
      for (j = 0; j < factor; j += 2) {
Shinya Kitaoka 120a6e
        for (i = 0; i < factor; i += 2) {
Shinya Kitaoka 120a6e
          tmp += *in;
Shinya Kitaoka 120a6e
          in += dindp + dindq;
Shinya Kitaoka 120a6e
          tmp += *in;
Shinya Kitaoka 120a6e
          in += dindp - dindq;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
        in += 2 * dindq - factor * dindp;
Shinya Kitaoka 120a6e
      }
Shinya Kitaoka 120a6e
      tmp             = (tmp + fac_fac_4) >> fac_fac_2_bits;
Shinya Kitaoka 120a6e
      ?D 60 *pixout++ = ROP_RGB16_FROM_BYTES(tmp, tmp, tmp);
Shinya Kitaoka 120a6e
      ?E 60
Shinya Kitaoka 120a6e
?I 60 *pixout++      = PIX_RGB16_FROM_BYTES(tmp, tmp, tmp);
Shinya Kitaoka 120a6e
      ?E 60 pixin += factor * dindp;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    if (prest) {
Shinya Kitaoka 120a6e
      tmp = 0;
Shinya Kitaoka 120a6e
      for (j = 0; j < factor; j++)
Shinya Kitaoka 120a6e
        for (i = 0; i < prest; i++) {
Shinya Kitaoka 120a6e
          tmp += pixin[i * dindp + j * dindq];
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
      tmp           = (tmp + fac_prest_2) / fac_prest;
Shinya Kitaoka 120a6e
      ?D 60 *pixout = ROP_RGB16_FROM_BYTES(tmp, tmp, tmp);
Shinya Kitaoka 120a6e
      ?E 60
Shinya Kitaoka 120a6e
?I 60 *pixout      = PIX_RGB16_FROM_BYTES(tmp, tmp, tmp);
Shinya Kitaoka 120a6e
      ?E 60
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    rowin += factor * dindq;
Shinya Kitaoka 120a6e
    rowout += wrapout;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  ?D 59 if (qrest)
Toshihiro Shimizu 890ddd
?E 59
Toshihiro Shimizu 890ddd
?I 59 if (qrest)
Shinya Kitaoka 120a6e
?E 59 {
Shinya Kitaoka 120a6e
    pixin  = rowin;
Shinya Kitaoka 120a6e
    pixout = rowout;
Shinya Kitaoka 120a6e
    for (p = 0; p < plast; p += factor) {
Shinya Kitaoka 120a6e
      tmp = 0;
Shinya Kitaoka 120a6e
      for (j = 0; j < qrest; j++)
Shinya Kitaoka 120a6e
        for (i = 0; i < factor; i++) {
Shinya Kitaoka 120a6e
          tmp += pixin[i * dindp + j * dindq];
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
      tmp             = (tmp + qrest_fac_2) / qrest_fac;
Shinya Kitaoka 120a6e
      ?D 60 *pixout++ = ROP_RGB16_FROM_BYTES(tmp, tmp, tmp);
Shinya Kitaoka 120a6e
      ?E 60
Shinya Kitaoka 120a6e
?I 60 *pixout++      = PIX_RGB16_FROM_BYTES(tmp, tmp, tmp);
Shinya Kitaoka 120a6e
      ?E 60 pixin += factor * dindp;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    if (prest) {
Shinya Kitaoka 120a6e
      tmp = 0;
Shinya Kitaoka 120a6e
      for (j = 0; j < qrest; j++)
Shinya Kitaoka 120a6e
        for (i = 0; i < prest; i++) {
Shinya Kitaoka 120a6e
          tmp += pixin[i * dindp + j * dindq];
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
      tmp           = (tmp + qrest_prest_2) / qrest_prest;
Shinya Kitaoka 120a6e
      ?D 60 *pixout = ROP_RGB16_FROM_BYTES(tmp, tmp, tmp);
Shinya Kitaoka 120a6e
      ?E 60
Shinya Kitaoka 120a6e
?I 60 *pixout      = PIX_RGB16_FROM_BYTES(tmp, tmp, tmp);
Shinya Kitaoka 120a6e
      ?E 60
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
static void rop_copy_90_gr8_rgbm(RASTER *rin, RASTER *rout,
Toshihiro Shimizu 890ddd
                                 int x1, int y1, int x2, int y2,
Toshihiro Shimizu 890ddd
			         int newx, int newy,
Toshihiro Shimizu 890ddd
		                 int mirror, int ninety)
Toshihiro Shimizu 890ddd
{
Shinya Kitaoka 120a6e
  UCHAR *bufin, *bytein;
Shinya Kitaoka 120a6e
  LPIXEL *bufout, *pixout, tmp;
Shinya Kitaoka 120a6e
  int wrapin, wrapout;
Shinya Kitaoka 120a6e
  int u, v, lu, lv, su, sv, u00, v00, u0, v0, dindx, dudy, dvdy;
Shinya Kitaoka 120a6e
  int x, y, lx, ly;
Shinya Kitaoka 120a6e
  int u1, v1, u2, v2;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  mirror &= 1;
Shinya Kitaoka 120a6e
  ninety &= 3;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  if (!ninety && !mirror) {
Shinya Kitaoka 120a6e
    rop_copy(rin, rout, x1, y1, x2, y2, newx, newy);
Shinya Kitaoka 120a6e
    return;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  u1 = x1;
Shinya Kitaoka 120a6e
  v1 = y1;
Shinya Kitaoka 120a6e
  u2 = x2;
Shinya Kitaoka 120a6e
  v2 = y2;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  su = u2 - u1;
Shinya Kitaoka 120a6e
  sv = v2 - v1;
Shinya Kitaoka 120a6e
  lu = u2 - u1 + 1;
Shinya Kitaoka 120a6e
  lv = v2 - v1 + 1;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  if (ninety & 1) {
Shinya Kitaoka 120a6e
    lx = lv;
Shinya Kitaoka 120a6e
    ly = lu;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  ?D 65 else {
Shinya Kitaoka 120a6e
    lx = lu;
Shinya Kitaoka 120a6e
    ly = lv;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  bufin   = rin->buffer;
Shinya Kitaoka 120a6e
  wrapin  = rin->wrap;
Shinya Kitaoka 120a6e
  bufout  = rout->buffer;
Shinya Kitaoka 120a6e
  wrapout = rout->wrap;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  dudy = 0;
Shinya Kitaoka 120a6e
  dvdy = 0;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  switch ((mirror << 2) + ninety) {
Shinya Kitaoka 120a6e
    ?E 65
Shinya Kitaoka 120a6e
?I 65 else {
Shinya Kitaoka 120a6e
      lx = lu;
Shinya Kitaoka 120a6e
      ly = lv;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
    bufin   = rin->buffer;
Shinya Kitaoka 120a6e
    wrapin  = rin->wrap;
Shinya Kitaoka 120a6e
    bufout  = rout->buffer;
Shinya Kitaoka 120a6e
    wrapout = rout->wrap;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
    dudy = 0;
Shinya Kitaoka 120a6e
    dvdy = 0;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
    switch ((mirror << 2) + ninety) {
Shinya Kitaoka 120a6e
      ?E 65 CASE(0 << 2) + 0 : u00 = u1;
Shinya Kitaoka 120a6e
      v00                          = v1;
Shinya Kitaoka 120a6e
      dvdy                         = 1;
Shinya Kitaoka 120a6e
      dindx                        = 1;
Shinya Kitaoka 120a6e
      CASE(0 << 2) + 1 : u00       = u1;
Shinya Kitaoka 120a6e
      v00                          = v1 + sv;
Shinya Kitaoka 120a6e
      dudy                         = 1;
Shinya Kitaoka 120a6e
      dindx                        = -wrapin;
Shinya Kitaoka 120a6e
      CASE(0 << 2) + 2 : u00       = u1 + su;
Shinya Kitaoka 120a6e
      v00                          = v1 + sv;
Shinya Kitaoka 120a6e
      dvdy                         = -1;
Shinya Kitaoka 120a6e
      dindx                        = -1;
Shinya Kitaoka 120a6e
      CASE(0 << 2) + 3 : u00       = u1 + su;
Shinya Kitaoka 120a6e
      v00                          = v1;
Shinya Kitaoka 120a6e
      dudy                         = -1;
Shinya Kitaoka 120a6e
      dindx                        = wrapin;
Shinya Kitaoka 120a6e
      CASE(1 << 2) + 0 : u00       = u1 + su;
Shinya Kitaoka 120a6e
      v00                          = v1;
Shinya Kitaoka 120a6e
      dvdy                         = 1;
Shinya Kitaoka 120a6e
      dindx                        = -1;
Shinya Kitaoka 120a6e
      CASE(1 << 2) + 1 : u00       = u1 + su;
Shinya Kitaoka 120a6e
      v00                          = v1 + sv;
Shinya Kitaoka 120a6e
      dudy                         = -1;
Shinya Kitaoka 120a6e
      dindx                        = -wrapin;
Shinya Kitaoka 120a6e
      ?E 58 CASE(1 << 2) + 2 : u00 = u1;
Shinya Kitaoka 120a6e
      v00                          = v1 + sv;
Shinya Kitaoka 120a6e
      dvdy                         = -1;
Shinya Kitaoka 120a6e
      dindx                        = 1;
Shinya Kitaoka 120a6e
      CASE(1 << 2) + 3 : u00       = u1;
Shinya Kitaoka 120a6e
      v00                          = v1;
Shinya Kitaoka 120a6e
      dudy                         = 1;
Shinya Kitaoka 120a6e
      dindx                        = wrapin;
Shinya Kitaoka 120a6e
      ?D 78 DEFAULT : assert(FALSE);
Shinya Kitaoka 120a6e
      u00 = v00 = dudy = dindx = 0;
Shinya Kitaoka 120a6e
      ?E 78
Shinya Kitaoka 120a6e
?I 78 DEFAULT : abort();
Shinya Kitaoka 120a6e
      u00 = v00 = dudy = dindx = 0;
Shinya Kitaoka 120a6e
      ?E 78
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
    for (u0 = u00, v0 = v00, y = newy; y < newy + ly;
Shinya Kitaoka 120a6e
         u0 += dudy, v0 += dvdy, y++) {
Shinya Kitaoka 120a6e
      bytein = bufin + u0 + v0 * wrapin;
Shinya Kitaoka 120a6e
      pixout = bufout + newx + y * wrapout;
Shinya Kitaoka 120a6e
      for (x = newx; x < newx + lx; x++) {
Shinya Kitaoka 120a6e
        tmp.r     = *bytein;
Shinya Kitaoka 120a6e
        tmp.g     = *bytein;
Shinya Kitaoka 120a6e
        tmp.b     = *bytein;
Shinya Kitaoka 120a6e
        tmp.m     = 0xff;
Shinya Kitaoka 120a6e
        *pixout++ = tmp;
Shinya Kitaoka 120a6e
        bytein += dindx;
Shinya Kitaoka 120a6e
      }
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  /*---------------------------------------------------------------------------*/
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  ?I 57 static void rop_zoom_out_90_gr8_rgbm(
Shinya Kitaoka 120a6e
      RASTER * rin, RASTER * rout, int x1, int y1, int x2, int y2, int newx,
Shinya Kitaoka 120a6e
      int newy, int abs_zoom_level, int mirror, int ninety) {
Shinya Kitaoka 120a6e
    UCHAR *bufin, *rowin, *pixin, *in;
Shinya Kitaoka 120a6e
    int tmp;
Shinya Kitaoka 120a6e
    LPIXEL *bufout, *rowout, *pixout, valout;
Shinya Kitaoka 120a6e
    int wrapin, wrapout;
Shinya Kitaoka 120a6e
    int u1, v1, u2, v2;
Shinya Kitaoka 120a6e
    int u, v, lu, lv, startu, startv;
Shinya Kitaoka 120a6e
    int p, q, lp, lq;
Shinya Kitaoka 120a6e
    int dudp, dvdp, dudq, dvdq, dindp, dindq;
Shinya Kitaoka 120a6e
    int plast, qlast, prest, qrest, i, j;
Shinya Kitaoka 120a6e
    int factor, fac_fac_2_bits;
Shinya Kitaoka 120a6e
    int fac_fac, qrest_fac, fac_prest, qrest_prest;
Shinya Kitaoka 120a6e
    int fac_fac_2, qrest_fac_2, fac_prest_2, qrest_prest_2;
Shinya Kitaoka 120a6e
    int fac_fac_4;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
    mirror &= 1;
Shinya Kitaoka 120a6e
    ninety &= 3;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
    if (!ninety && !mirror) {
Shinya Kitaoka 120a6e
      rop_zoom_out(rin, rout, x1, y1, x2, y2, newx, newy, abs_zoom_level);
Shinya Kitaoka 120a6e
      return;
Shinya Kitaoka 120a6e
    }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
    u1 = x1;
Shinya Kitaoka 120a6e
    v1 = y1;
Shinya Kitaoka 120a6e
    u2 = x2;
Shinya Kitaoka 120a6e
    v2 = y2;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
    lu = u2 - u1 + 1;
Shinya Kitaoka 120a6e
    lv = v2 - v1 + 1;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
    if (ninety & 1) {
Shinya Kitaoka 120a6e
      lp = lv;
Shinya Kitaoka 120a6e
      lq = lu;
Shinya Kitaoka 120a6e
    } else {
Shinya Kitaoka 120a6e
      lp = lu;
Shinya Kitaoka 120a6e
      lq = lv;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    factor         = 1 << abs_zoom_level;
Shinya Kitaoka 120a6e
    ?D 61 prest    = lp % factor;
Shinya Kitaoka 120a6e
    qrest          = lq % factor;
Shinya Kitaoka 120a6e
    ?E 61
Shinya Kitaoka 120a6e
?I 61 prest       = lp & (factor - 1);
Shinya Kitaoka 120a6e
    qrest          = lq & (factor - 1);
Shinya Kitaoka 120a6e
    ?E 61 plast    = lp - prest;
Shinya Kitaoka 120a6e
    qlast          = lq - qrest;
Shinya Kitaoka 120a6e
    fac_fac        = factor * factor;
Shinya Kitaoka 120a6e
    fac_fac_2      = fac_fac >> 1;
Shinya Kitaoka 120a6e
    fac_fac_4      = fac_fac >> 2;
Shinya Kitaoka 120a6e
    fac_fac_2_bits = 2 * abs_zoom_level - 1;
Shinya Kitaoka 120a6e
    qrest_fac      = qrest * factor;
Shinya Kitaoka 120a6e
    qrest_fac_2    = qrest_fac >> 1;
Shinya Kitaoka 120a6e
    fac_prest      = factor * prest;
Shinya Kitaoka 120a6e
    fac_prest_2    = fac_prest >> 1;
Shinya Kitaoka 120a6e
    qrest_prest    = qrest * prest;
Shinya Kitaoka 120a6e
    qrest_prest_2  = qrest_prest >> 1;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
    bufin   = rin->buffer;
Shinya Kitaoka 120a6e
    wrapin  = rin->wrap;
Shinya Kitaoka 120a6e
    bufout  = rout->buffer;
Shinya Kitaoka 120a6e
    wrapout = rout->wrap;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
    switch ((mirror << 2) + ninety) {
Shinya Kitaoka 120a6e
      CASE(0 << 2) + 0 : dudp       = 1;
Shinya Kitaoka 120a6e
      dvdp                          = 0;
Shinya Kitaoka 120a6e
      dudq                          = 0;
Shinya Kitaoka 120a6e
      dvdq                          = 1;
Shinya Kitaoka 120a6e
      startu                        = u1;
Shinya Kitaoka 120a6e
      startv                        = v1;
Shinya Kitaoka 120a6e
      CASE(0 << 2) + 1 : dudp       = 0;
Shinya Kitaoka 120a6e
      dvdp                          = -1;
Shinya Kitaoka 120a6e
      dudq                          = 1;
Shinya Kitaoka 120a6e
      dvdq                          = 0;
Shinya Kitaoka 120a6e
      startu                        = u1;
Shinya Kitaoka 120a6e
      startv                        = v2;
Shinya Kitaoka 120a6e
      CASE(0 << 2) + 2 : dudp       = -1;
Shinya Kitaoka 120a6e
      dvdp                          = 0;
Shinya Kitaoka 120a6e
      dudq                          = 0;
Shinya Kitaoka 120a6e
      dvdq                          = -1;
Shinya Kitaoka 120a6e
      startu                        = u2;
Shinya Kitaoka 120a6e
      startv                        = v2;
Shinya Kitaoka 120a6e
      CASE(0 << 2) + 3 : dudp       = 0;
Shinya Kitaoka 120a6e
      dvdp                          = 1;
Shinya Kitaoka 120a6e
      dudq                          = -1;
Shinya Kitaoka 120a6e
      dvdq                          = 0;
Shinya Kitaoka 120a6e
      startu                        = u2;
Shinya Kitaoka 120a6e
      startv                        = v1;
Shinya Kitaoka 120a6e
      CASE(1 << 2) + 0 : dudp       = -1;
Shinya Kitaoka 120a6e
      dvdp                          = 0;
Shinya Kitaoka 120a6e
      dudq                          = 0;
Shinya Kitaoka 120a6e
      dvdq                          = 1;
Shinya Kitaoka 120a6e
      startu                        = u2;
Shinya Kitaoka 120a6e
      startv                        = v1;
Shinya Kitaoka 120a6e
      ?D 61 CASE(1 << 2) + 1 : dudp = 0;
Shinya Kitaoka 120a6e
      dvdp                          = 1;
Shinya Kitaoka 120a6e
      dudq                          = 1;
Shinya Kitaoka 120a6e
      dvdq                          = 0;
Shinya Kitaoka 120a6e
      startu                        = u2;
Shinya Kitaoka 120a6e
      startv                        = v2;
Shinya Kitaoka 120a6e
      ?E 61
Shinya Kitaoka 120a6e
?I 61 CASE(1 << 2) + 1 : dudp      = 0;
Shinya Kitaoka 120a6e
      dvdp                          = -1;
Shinya Kitaoka 120a6e
      dudq                          = -1;
Shinya Kitaoka 120a6e
      dvdq                          = 0;
Shinya Kitaoka 120a6e
      startu                        = u2;
Shinya Kitaoka 120a6e
      startv                        = v2;
Shinya Kitaoka 120a6e
      ?E 61 CASE(1 << 2) + 2 : dudp = 1;
Shinya Kitaoka 120a6e
      dvdp                          = 0;
Shinya Kitaoka 120a6e
      dudq                          = 0;
Shinya Kitaoka 120a6e
      dvdq                          = -1;
Shinya Kitaoka 120a6e
      startu                        = u1;
Shinya Kitaoka 120a6e
      startv                        = v2;
Shinya Kitaoka 120a6e
      ?D 61 CASE(1 << 2) + 3 : dudp = 0;
Shinya Kitaoka 120a6e
      dvdp                          = -1;
Shinya Kitaoka 120a6e
      dudq                          = -1;
Shinya Kitaoka 120a6e
      dvdq                          = 0;
Shinya Kitaoka 120a6e
      startu                        = u1;
Shinya Kitaoka 120a6e
      startv                        = v1;
Shinya Kitaoka 120a6e
      ?E 61
Shinya Kitaoka 120a6e
?I 61 CASE(1 << 2) + 3 : dudp      = 0;
Shinya Kitaoka 120a6e
      dvdp                          = 1;
Shinya Kitaoka 120a6e
      dudq                          = 1;
Shinya Kitaoka 120a6e
      dvdq                          = 0;
Shinya Kitaoka 120a6e
      startu                        = u1;
Shinya Kitaoka 120a6e
      startv                        = v1;
Shinya Kitaoka 120a6e
      ?E 61 DEFAULT :
Shinya Kitaoka 120a6e
?D 78 assert(FALSE);
Shinya Kitaoka 120a6e
      dudp = dvdp = dudq = dvdq = startu = startv = 0;
Shinya Kitaoka 120a6e
      ?E 78
Shinya Kitaoka 120a6e
?I 78 abort();
Shinya Kitaoka 120a6e
      dudp = dvdp = dudq = dvdq = startu = startv = 0;
Shinya Kitaoka 120a6e
      ?E 78
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    dindp = dudp + wrapin * dvdp;
Shinya Kitaoka 120a6e
    dindq = dudq + wrapin * dvdq;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
    rowin    = (UCHAR *)rin->buffer + startu + startv * wrapin;
Shinya Kitaoka 120a6e
    rowout   = (LPIXEL *)rout->buffer + newx + newy * wrapout;
Shinya Kitaoka 120a6e
    valout.m = 0xff;
Shinya Kitaoka 120a6e
    for (q = 0; q < qlast; q += factor) {
Shinya Kitaoka 120a6e
      pixin  = rowin;
Shinya Kitaoka 120a6e
      pixout = rowout;
Shinya Kitaoka 120a6e
      for (p = 0; p < plast; p += factor) {
Shinya Kitaoka 120a6e
        tmp = 0;
Shinya Kitaoka 120a6e
        in  = pixin;
Shinya Kitaoka 120a6e
        for (j = 0; j < factor; j += 2) {
Shinya Kitaoka 120a6e
          for (i = 0; i < factor; i += 2) {
Shinya Kitaoka 120a6e
            tmp += *in;
Shinya Kitaoka 120a6e
            in += dindp + dindq;
Shinya Kitaoka 120a6e
            tmp += *in;
Shinya Kitaoka 120a6e
            in += dindp - dindq;
Shinya Kitaoka 120a6e
          }
Shinya Kitaoka 120a6e
          in += 2 * dindq - factor * dindp;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
        tmp      = (tmp + fac_fac_4) >> fac_fac_2_bits;
Shinya Kitaoka 120a6e
        valout.r = valout.g = valout.b = tmp;
Shinya Kitaoka 120a6e
        *pixout++                      = valout;
Shinya Kitaoka 120a6e
        pixin += factor * dindp;
Shinya Kitaoka 120a6e
      }
Shinya Kitaoka 120a6e
      if (prest) {
Shinya Kitaoka 120a6e
        tmp = 0;
Shinya Kitaoka 120a6e
        for (j = 0; j < factor; j++)
Shinya Kitaoka 120a6e
          for (i = 0; i < prest; i++) {
Shinya Kitaoka 120a6e
            tmp += pixin[i * dindp + j * dindq];
Shinya Kitaoka 120a6e
          }
Shinya Kitaoka 120a6e
        tmp      = (tmp + fac_prest_2) / fac_prest;
Shinya Kitaoka 120a6e
        valout.r = valout.g = valout.b = tmp;
Shinya Kitaoka 120a6e
        *pixout++                      = valout;
Shinya Kitaoka 120a6e
      }
Shinya Kitaoka 120a6e
      rowin += factor * dindq;
Shinya Kitaoka 120a6e
      rowout += wrapout;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    if (qrest) {
Shinya Kitaoka 120a6e
      pixin  = rowin;
Shinya Kitaoka 120a6e
      pixout = rowout;
Shinya Kitaoka 120a6e
      for (p = 0; p < plast; p += factor) {
Shinya Kitaoka 120a6e
        tmp = 0;
Shinya Kitaoka 120a6e
        for (j = 0; j < qrest; j++)
Shinya Kitaoka 120a6e
          for (i = 0; i < factor; i++) {
Shinya Kitaoka 120a6e
            tmp += pixin[i * dindp + j * dindq];
Shinya Kitaoka 120a6e
          }
Shinya Kitaoka 120a6e
        tmp      = (tmp + qrest_fac_2) / qrest_fac;
Shinya Kitaoka 120a6e
        valout.r = valout.g = valout.b = tmp;
Shinya Kitaoka 120a6e
        *pixout++                      = valout;
Shinya Kitaoka 120a6e
        pixin += factor * dindp;
Shinya Kitaoka 120a6e
      }
Shinya Kitaoka 120a6e
      if (prest) {
Shinya Kitaoka 120a6e
        tmp = 0;
Shinya Kitaoka 120a6e
        for (j = 0; j < qrest; j++)
Shinya Kitaoka 120a6e
          for (i = 0; i < prest; i++) {
Shinya Kitaoka 120a6e
            tmp += pixin[i * dindp + j * dindq];
Shinya Kitaoka 120a6e
          }
Shinya Kitaoka 120a6e
        tmp      = (tmp + qrest_prest_2) / qrest_prest;
Shinya Kitaoka 120a6e
        valout.r = valout.g = valout.b = tmp;
Shinya Kitaoka 120a6e
        *pixout++                      = valout;
Shinya Kitaoka 120a6e
      }
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  /*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  ?I 63 static void rop_copy_90_rgb_rgb16(RASTER * rin, RASTER * rout, int x1,
Shinya Kitaoka 120a6e
                                          int y1, int x2, int y2, int newx,
Shinya Kitaoka 120a6e
                                          int newy, int mirror, int ninety) {
Shinya Kitaoka 120a6e
    UCHAR *bufin, *bytein;
Shinya Kitaoka 120a6e
    USHORT *bufout, *pixout;
Shinya Kitaoka 120a6e
    int wrapin, wrapout;
Shinya Kitaoka 120a6e
    int u, v, lu, lv, su, sv, u00, v00, u0, v0, dindx, dudy, dvdy;
Shinya Kitaoka 120a6e
    int x, y, lx, ly;
Shinya Kitaoka 120a6e
    int u1, v1, u2, v2;
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
    mirror &= 1;
Shinya Kitaoka 120a6e
    ninety &= 3;
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
    if (!ninety && !mirror) {
Shinya Kitaoka 120a6e
      rop_copy(rin, rout, x1, y1, x2, y2, newx, newy);
Shinya Kitaoka 120a6e
      return;
Shinya Kitaoka 120a6e
    }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
    u1 = x1;
Shinya Kitaoka 120a6e
    v1 = y1;
Shinya Kitaoka 120a6e
    u2 = x2;
Shinya Kitaoka 120a6e
    v2 = y2;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
    su = u2 - u1;
Shinya Kitaoka 120a6e
    sv = v2 - v1;
Shinya Kitaoka 120a6e
    lu = u2 - u1 + 1;
Shinya Kitaoka 120a6e
    lv = v2 - v1 + 1;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
    if (ninety & 1) {
Shinya Kitaoka 120a6e
      lx = lv;
Shinya Kitaoka 120a6e
      ly = lu;
Shinya Kitaoka 120a6e
    } else {
Shinya Kitaoka 120a6e
      lx = lu;
Shinya Kitaoka 120a6e
      ly = lv;
Shinya Kitaoka 120a6e
    }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
    bufin   = rin->buffer;
Shinya Kitaoka 120a6e
    wrapin  = rin->wrap * 3; /* mi muovo di bytes */
Shinya Kitaoka 120a6e
    bufout  = rout->buffer;
Shinya Kitaoka 120a6e
    wrapout = rout->wrap;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
    dudy = 0;
Shinya Kitaoka 120a6e
    dvdy = 0;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
    switch ((mirror << 2) + ninety) {
Shinya Kitaoka 120a6e
      CASE(0 << 2) + 0 : u00       = u1;
Shinya Kitaoka 120a6e
      v00                          = v1;
Shinya Kitaoka 120a6e
      dvdy                         = 1;
Shinya Kitaoka 120a6e
      dindx                        = 3;
Shinya Kitaoka 120a6e
      ?D 81 CASE(0 << 2) + 1 : u00 = u1;
Shinya Kitaoka 120a6e
      v00                          = v1 + sv;
Shinya Kitaoka 120a6e
      dudy                         = 1;
Shinya Kitaoka 120a6e
      dindx                        = -wrapin;
Shinya Kitaoka 120a6e
      CASE(0 << 2) + 2 : u00       = u1 + su;
Shinya Kitaoka 120a6e
      v00                          = v1 + sv;
Shinya Kitaoka 120a6e
      dvdy                         = -1;
Shinya Kitaoka 120a6e
      dindx                        = -3;
Shinya Kitaoka 120a6e
      CASE(0 << 2) + 3 : u00       = u1 + su;
Shinya Kitaoka 120a6e
      v00                          = v1;
Shinya Kitaoka 120a6e
      dudy                         = -1;
Shinya Kitaoka 120a6e
      dindx                        = wrapin;
Shinya Kitaoka 120a6e
      CASE(1 << 2) + 0 : u00       = u1 + su;
Shinya Kitaoka 120a6e
      v00                          = v1;
Shinya Kitaoka 120a6e
      dvdy                         = 1;
Shinya Kitaoka 120a6e
      dindx                        = -3;
Shinya Kitaoka 120a6e
      CASE(1 << 2) + 1 : u00       = u1 + su;
Shinya Kitaoka 120a6e
      v00                          = v1 + sv;
Shinya Kitaoka 120a6e
      dudy                         = -1;
Shinya Kitaoka 120a6e
      dindx                        = -wrapin;
Shinya Kitaoka 120a6e
      CASE(1 << 2) + 2 : u00       = u1;
Shinya Kitaoka 120a6e
      v00                          = v1 + sv;
Shinya Kitaoka 120a6e
      dvdy                         = -1;
Shinya Kitaoka 120a6e
      dindx                        = 3;
Shinya Kitaoka 120a6e
      CASE(1 << 2) + 3 : u00       = u1;
Shinya Kitaoka 120a6e
      v00                          = v1;
Shinya Kitaoka 120a6e
      dudy                         = 1;
Shinya Kitaoka 120a6e
      dindx                        = wrapin;
Shinya Kitaoka 120a6e
      ?D 78 DEFAULT : assert(FALSE);
Shinya Kitaoka 120a6e
      u00 = v00 = dudy = dindx = 0;
Shinya Kitaoka 120a6e
      ?E 78
Toshihiro Shimizu 890ddd
?I 78 DEFAULT : abort();
Shinya Kitaoka 120a6e
      u00 = v00 = dudy = dindx = 0;
Shinya Kitaoka 120a6e
      ?E 78
Shinya Kitaoka 120a6e
    }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
    for (u0 = u00, v0 = v00, y = newy; y < newy + ly;
Shinya Kitaoka 120a6e
         u0 += dudy, v0 += dvdy, y++) {
Shinya Kitaoka 120a6e
      bytein = bufin + u0 * 3 + v0 * wrapin;
Shinya Kitaoka 120a6e
      pixout = bufout + newx + y * wrapout;
Shinya Kitaoka 120a6e
      for (x = newx; x < newx + lx; x++) {
Shinya Kitaoka 120a6e
        *pixout++ = PIX_RGB16_FROM_BYTES(bytein[0], bytein[1], bytein[2]);
Shinya Kitaoka 120a6e
        bytein += dindx;
Shinya Kitaoka 120a6e
      }
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  /*---------------------------------------------------------------------------*/
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  static void rop_zoom_out_90_rgb_rgb16(
Shinya Kitaoka 120a6e
      RASTER * rin, RASTER * rout, int x1, int y1, int x2, int y2, int newx,
Shinya Kitaoka 120a6e
      int newy, int abs_zoom_level, int mirror, int ninety) {
Shinya Kitaoka 120a6e
    UCHAR *bufin, *rowin, *pixin, *in;
Shinya Kitaoka 120a6e
    int tmp_r, tmp_g, tmp_b;
Shinya Kitaoka 120a6e
    USHORT *bufout, *rowout, *pixout;
Shinya Kitaoka 120a6e
    int wrapin_bytes, wrapin_pixels, wrapout;
Shinya Kitaoka 120a6e
    int u1, v1, u2, v2;
Shinya Kitaoka 120a6e
    int u, v, lu, lv, startu, startv;
Shinya Kitaoka 120a6e
    int p, q, lp, lq;
Shinya Kitaoka 120a6e
    int dudp, dvdp, dudq, dvdq, dindp, dindq;
Shinya Kitaoka 120a6e
    int plast, qlast, prest, qrest, i, j;
Shinya Kitaoka 120a6e
    int factor, fac_fac_2_bits;
Shinya Kitaoka 120a6e
    int fac_fac, qrest_fac, fac_prest, qrest_prest;
Shinya Kitaoka 120a6e
    int fac_fac_2, qrest_fac_2, fac_prest_2, qrest_prest_2;
Shinya Kitaoka 120a6e
    int fac_fac_4;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
    mirror &= 1;
Shinya Kitaoka 120a6e
    ninety &= 3;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
    if (!ninety && !mirror) {
Shinya Kitaoka 120a6e
      rop_zoom_out(rin, rout, x1, y1, x2, y2, newx, newy, abs_zoom_level);
Shinya Kitaoka 120a6e
      return;
Shinya Kitaoka 120a6e
    }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
    u1 = x1;
Shinya Kitaoka 120a6e
    v1 = y1;
Shinya Kitaoka 120a6e
    u2 = x2;
Shinya Kitaoka 120a6e
    v2 = y2;
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
    lu = u2 - u1 + 1;
Shinya Kitaoka 120a6e
    lv = v2 - v1 + 1;
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
    if (ninety & 1) {
Shinya Kitaoka 120a6e
      lp = lv;
Shinya Kitaoka 120a6e
      lq = lu;
Shinya Kitaoka 120a6e
    } else {
Shinya Kitaoka 120a6e
      lp = lu;
Shinya Kitaoka 120a6e
      lq = lv;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    factor         = 1 << abs_zoom_level;
Shinya Kitaoka 120a6e
    prest          = lp & (factor - 1);
Shinya Kitaoka 120a6e
    qrest          = lq & (factor - 1);
Shinya Kitaoka 120a6e
    plast          = lp - prest;
Shinya Kitaoka 120a6e
    qlast          = lq - qrest;
Shinya Kitaoka 120a6e
    fac_fac        = factor * factor;
Shinya Kitaoka 120a6e
    fac_fac_2      = fac_fac >> 1;
Shinya Kitaoka 120a6e
    fac_fac_4      = fac_fac >> 2;
Shinya Kitaoka 120a6e
    fac_fac_2_bits = 2 * abs_zoom_level - 1;
Shinya Kitaoka 120a6e
    qrest_fac      = qrest * factor;
Shinya Kitaoka 120a6e
    qrest_fac_2    = qrest_fac >> 1;
Shinya Kitaoka 120a6e
    fac_prest      = factor * prest;
Shinya Kitaoka 120a6e
    fac_prest_2    = fac_prest >> 1;
Shinya Kitaoka 120a6e
    qrest_prest    = qrest * prest;
Shinya Kitaoka 120a6e
    qrest_prest_2  = qrest_prest >> 1;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
    bufin         = rin->buffer;
Shinya Kitaoka 120a6e
    wrapin_pixels = rin->wrap;
Shinya Kitaoka 120a6e
    wrapin_bytes  = wrapin_pixels * 3;
Shinya Kitaoka 120a6e
    bufout        = rout->buffer;
Shinya Kitaoka 120a6e
    wrapout       = rout->wrap;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
    switch ((mirror << 2) + ninety) {
Shinya Kitaoka 120a6e
      CASE(0 << 2) + 0 : dudp = 1;
Shinya Kitaoka 120a6e
      dvdp                    = 0;
Shinya Kitaoka 120a6e
      dudq                    = 0;
Shinya Kitaoka 120a6e
      dvdq                    = 1;
Shinya Kitaoka 120a6e
      startu                  = u1;
Shinya Kitaoka 120a6e
      startv                  = v1;
Shinya Kitaoka 120a6e
      CASE(0 << 2) + 1 : dudp = 0;
Shinya Kitaoka 120a6e
      dvdp                    = -1;
Shinya Kitaoka 120a6e
      dudq                    = 1;
Shinya Kitaoka 120a6e
      dvdq                    = 0;
Shinya Kitaoka 120a6e
      startu                  = u1;
Shinya Kitaoka 120a6e
      startv                  = v2;
Shinya Kitaoka 120a6e
      CASE(0 << 2) + 2 : dudp = -1;
Shinya Kitaoka 120a6e
      dvdp                    = 0;
Shinya Kitaoka 120a6e
      dudq                    = 0;
Shinya Kitaoka 120a6e
      dvdq                    = -1;
Shinya Kitaoka 120a6e
      startu                  = u2;
Shinya Kitaoka 120a6e
      startv                  = v2;
Shinya Kitaoka 120a6e
      CASE(0 << 2) + 3 : dudp = 0;
Shinya Kitaoka 120a6e
      dvdp                    = 1;
Shinya Kitaoka 120a6e
      dudq                    = -1;
Shinya Kitaoka 120a6e
      dvdq                    = 0;
Shinya Kitaoka 120a6e
      startu                  = u2;
Shinya Kitaoka 120a6e
      startv                  = v1;
Shinya Kitaoka 120a6e
      CASE(1 << 2) + 0 : dudp = -1;
Shinya Kitaoka 120a6e
      dvdp                    = 0;
Shinya Kitaoka 120a6e
      dudq                    = 0;
Shinya Kitaoka 120a6e
      dvdq                    = 1;
Shinya Kitaoka 120a6e
      startu                  = u2;
Shinya Kitaoka 120a6e
      startv                  = v1;
Shinya Kitaoka 120a6e
      CASE(1 << 2) + 1 : dudp = 0;
Shinya Kitaoka 120a6e
      dvdp                    = -1;
Shinya Kitaoka 120a6e
      dudq                    = -1;
Shinya Kitaoka 120a6e
      dvdq                    = 0;
Shinya Kitaoka 120a6e
      startu                  = u2;
Shinya Kitaoka 120a6e
      startv                  = v2;
Shinya Kitaoka 120a6e
      CASE(1 << 2) + 2 : dudp = 1;
Shinya Kitaoka 120a6e
      dvdp                    = 0;
Shinya Kitaoka 120a6e
      dudq                    = 0;
Shinya Kitaoka 120a6e
      dvdq                    = -1;
Shinya Kitaoka 120a6e
      startu                  = u1;
Shinya Kitaoka 120a6e
      startv                  = v2;
Shinya Kitaoka 120a6e
      CASE(1 << 2) + 3 : dudp = 0;
Shinya Kitaoka 120a6e
      dvdp                    = 1;
Shinya Kitaoka 120a6e
      dudq                    = 1;
Shinya Kitaoka 120a6e
      dvdq                    = 0;
Shinya Kitaoka 120a6e
      startu                  = u1;
Shinya Kitaoka 120a6e
      startv                  = v1;
Shinya Kitaoka 120a6e
    DEFAULT:
Shinya Kitaoka 120a6e
      ?D 78 assert(FALSE);
Shinya Kitaoka 120a6e
      dudp = dvdp = dudq = dvdq = startu = startv = 0;
Shinya Kitaoka 120a6e
      ?E 78
Toshihiro Shimizu 890ddd
?I 78 abort();
Shinya Kitaoka 120a6e
      dudp = dvdp = dudq = dvdq = startu = startv = 0;
Shinya Kitaoka 120a6e
      ?E 78
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    dindp = (dudp + wrapin_pixels * dvdp) * 3;
Shinya Kitaoka 120a6e
    dindq = (dudq + wrapin_pixels * dvdq) * 3;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
    rowin  = (UCHAR *)rin->buffer + startu * 3 + startv * wrapin_bytes;
Shinya Kitaoka 120a6e
    rowout = (USHORT *)rout->buffer + newx + newy * wrapout;
Shinya Kitaoka 120a6e
    for (q = 0; q < qlast; q += factor) {
Shinya Kitaoka 120a6e
      pixin  = rowin;
Shinya Kitaoka 120a6e
      pixout = rowout;
Shinya Kitaoka 120a6e
      for (p = 0; p < plast; p += factor) {
Shinya Kitaoka 120a6e
        tmp_r = tmp_g = tmp_b = 0;
Shinya Kitaoka 120a6e
        in                    = pixin;
Shinya Kitaoka 120a6e
        for (j = 0; j < factor; j += 2) {
Shinya Kitaoka 120a6e
          for (i = 0; i < factor; i += 2) {
Shinya Kitaoka 120a6e
            tmp_r += in[0];
Shinya Kitaoka 120a6e
            tmp_g += in[1];
Shinya Kitaoka 120a6e
            tmp_b += in[2];
Shinya Kitaoka 120a6e
            in += dindp + dindq;
Shinya Kitaoka 120a6e
            tmp_r += in[0];
Shinya Kitaoka 120a6e
            tmp_g += in[1];
Shinya Kitaoka 120a6e
            tmp_b += in[2];
Shinya Kitaoka 120a6e
            in += dindp - dindq;
Shinya Kitaoka 120a6e
          }
Shinya Kitaoka 120a6e
          in += 2 * dindq - factor * dindp;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
        tmp_r     = (tmp_r + fac_fac_4) >> fac_fac_2_bits;
Shinya Kitaoka 120a6e
        tmp_g     = (tmp_g + fac_fac_4) >> fac_fac_2_bits;
Shinya Kitaoka 120a6e
        tmp_b     = (tmp_b + fac_fac_4) >> fac_fac_2_bits;
Shinya Kitaoka 120a6e
        *pixout++ = PIX_RGB16_FROM_BYTES(tmp_r, tmp_g, tmp_b);
Shinya Kitaoka 120a6e
        pixin += factor * dindp;
Shinya Kitaoka 120a6e
      }
Shinya Kitaoka 120a6e
      if (prest) {
Shinya Kitaoka 120a6e
        tmp_r = tmp_g = tmp_b = 0;
Shinya Kitaoka 120a6e
        for (j = 0; j < factor; j++)
Shinya Kitaoka 120a6e
          for (i = 0; i < prest; i++) {
Shinya Kitaoka 120a6e
            tmp_r += pixin[i * dindp + j * dindq];
Shinya Kitaoka 120a6e
            tmp_g += pixin[i * dindp + j * dindq + 1];
Shinya Kitaoka 120a6e
            tmp_b += pixin[i * dindp + j * dindq + 2];
Shinya Kitaoka 120a6e
          }
Shinya Kitaoka 120a6e
        tmp_r     = (tmp_r + fac_prest_2) / fac_prest;
Shinya Kitaoka 120a6e
        tmp_g     = (tmp_g + fac_prest_2) / fac_prest;
Shinya Kitaoka 120a6e
        tmp_b     = (tmp_b + fac_prest_2) / fac_prest;
Shinya Kitaoka 120a6e
        *pixout++ = PIX_RGB16_FROM_BYTES(tmp_r, tmp_g, tmp_b);
Shinya Kitaoka 120a6e
      }
Shinya Kitaoka 120a6e
      rowin += factor * dindq;
Shinya Kitaoka 120a6e
      rowout += wrapout;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    if (qrest) {
Shinya Kitaoka 120a6e
      pixin  = rowin;
Shinya Kitaoka 120a6e
      pixout = rowout;
Shinya Kitaoka 120a6e
      for (p = 0; p < plast; p += factor) {
Shinya Kitaoka 120a6e
        tmp_r = tmp_g = tmp_b = 0;
Shinya Kitaoka 120a6e
        for (j = 0; j < qrest; j++)
Shinya Kitaoka 120a6e
          for (i = 0; i < factor; i++) {
Shinya Kitaoka 120a6e
            ?E 81
Shinya Kitaoka 120a6e
?I 81 CASE(0 << 2) + 1 : u00      = u1;
Shinya Kitaoka 120a6e
            v00                    = v1 + sv;
Shinya Kitaoka 120a6e
            dudy                   = 1;
Shinya Kitaoka 120a6e
            dindx                  = -wrapin;
Shinya Kitaoka 120a6e
            CASE(0 << 2) + 2 : u00 = u1 + su;
Shinya Kitaoka 120a6e
            v00                    = v1 + sv;
Shinya Kitaoka 120a6e
            dvdy                   = -1;
Shinya Kitaoka 120a6e
            dindx                  = -3;
Shinya Kitaoka 120a6e
            CASE(0 << 2) + 3 : u00 = u1 + su;
Shinya Kitaoka 120a6e
            v00                    = v1;
Shinya Kitaoka 120a6e
            dudy                   = -1;
Shinya Kitaoka 120a6e
            dindx                  = wrapin;
Shinya Kitaoka 120a6e
            CASE(1 << 2) + 0 : u00 = u1 + su;
Shinya Kitaoka 120a6e
            v00                    = v1;
Shinya Kitaoka 120a6e
            dvdy                   = 1;
Shinya Kitaoka 120a6e
            dindx                  = -3;
Shinya Kitaoka 120a6e
            CASE(1 << 2) + 1 : u00 = u1 + su;
Shinya Kitaoka 120a6e
            v00                    = v1 + sv;
Shinya Kitaoka 120a6e
            dudy                   = -1;
Shinya Kitaoka 120a6e
            dindx                  = -wrapin;
Shinya Kitaoka 120a6e
            CASE(1 << 2) + 2 : u00 = u1;
Shinya Kitaoka 120a6e
            v00                    = v1 + sv;
Shinya Kitaoka 120a6e
            dvdy                   = -1;
Shinya Kitaoka 120a6e
            dindx                  = 3;
Shinya Kitaoka 120a6e
            CASE(1 << 2) + 3 : u00 = u1;
Shinya Kitaoka 120a6e
            v00                    = v1;
Shinya Kitaoka 120a6e
            dudy                   = 1;
Shinya Kitaoka 120a6e
            dindx                  = wrapin;
Shinya Kitaoka 120a6e
          DEFAULT:
Shinya Kitaoka 120a6e
            abort();
Shinya Kitaoka 120a6e
            u00 = v00 = dudy = dindx = 0;
Shinya Kitaoka 120a6e
          }
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        for (u0 = u00, v0 = v00, y = newy; y < newy + ly;
Shinya Kitaoka 120a6e
             u0 += dudy, v0 += dvdy, y++) {
Shinya Kitaoka 120a6e
          bytein = bufin + u0 * 3 + v0 * wrapin;
Shinya Kitaoka 120a6e
          pixout = bufout + newx + y * wrapout;
Shinya Kitaoka 120a6e
          for (x = newx; x < newx + lx; x++) {
Shinya Kitaoka 120a6e
            *pixout++ = PIX_RGB16_FROM_BYTES(bytein[0], bytein[1], bytein[2]);
Shinya Kitaoka 120a6e
            bytein += dindx;
Shinya Kitaoka 120a6e
          }
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
      }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
      /*---------------------------------------------------------------------------*/
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
      static void rop_zoom_out_90_rgb_rgb16(
Shinya Kitaoka 120a6e
          RASTER * rin, RASTER * rout, int x1, int y1, int x2, int y2, int newx,
Shinya Kitaoka 120a6e
          int newy, int abs_zoom_level, int mirror, int ninety) {
Shinya Kitaoka 120a6e
        UCHAR *bufin, *rowin, *pixin, *in;
Shinya Kitaoka 120a6e
        int tmp_r, tmp_g, tmp_b;
Shinya Kitaoka 120a6e
        USHORT *bufout, *rowout, *pixout;
Shinya Kitaoka 120a6e
        int wrapin_bytes, wrapin_pixels, wrapout;
Shinya Kitaoka 120a6e
        int u1, v1, u2, v2;
Shinya Kitaoka 120a6e
        int u, v, lu, lv, startu, startv;
Shinya Kitaoka 120a6e
        int p, q, lp, lq;
Shinya Kitaoka 120a6e
        int dudp, dvdp, dudq, dvdq, dindp, dindq;
Shinya Kitaoka 120a6e
        int plast, qlast, prest, qrest, i, j;
Shinya Kitaoka 120a6e
        int factor, fac_fac_2_bits;
Shinya Kitaoka 120a6e
        int fac_fac, qrest_fac, fac_prest, qrest_prest;
Shinya Kitaoka 120a6e
        int fac_fac_2, qrest_fac_2, fac_prest_2, qrest_prest_2;
Shinya Kitaoka 120a6e
        int fac_fac_4;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        mirror &= 1;
Shinya Kitaoka 120a6e
        ninety &= 3;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        if (!ninety && !mirror) {
Shinya Kitaoka 120a6e
          rop_zoom_out(rin, rout, x1, y1, x2, y2, newx, newy, abs_zoom_level);
Shinya Kitaoka 120a6e
          return;
Shinya Kitaoka 120a6e
        }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
        u1 = x1;
Shinya Kitaoka 120a6e
        v1 = y1;
Shinya Kitaoka 120a6e
        u2 = x2;
Shinya Kitaoka 120a6e
        v2 = y2;
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
        lu = u2 - u1 + 1;
Shinya Kitaoka 120a6e
        lv = v2 - v1 + 1;
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
        if (ninety & 1) {
Shinya Kitaoka 120a6e
          lp = lv;
Shinya Kitaoka 120a6e
          lq = lu;
Shinya Kitaoka 120a6e
        } else {
Shinya Kitaoka 120a6e
          lp = lu;
Shinya Kitaoka 120a6e
          lq = lv;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
        factor         = 1 << abs_zoom_level;
Shinya Kitaoka 120a6e
        prest          = lp & (factor - 1);
Shinya Kitaoka 120a6e
        qrest          = lq & (factor - 1);
Shinya Kitaoka 120a6e
        plast          = lp - prest;
Shinya Kitaoka 120a6e
        qlast          = lq - qrest;
Shinya Kitaoka 120a6e
        fac_fac        = factor * factor;
Shinya Kitaoka 120a6e
        fac_fac_2      = fac_fac >> 1;
Shinya Kitaoka 120a6e
        fac_fac_4      = fac_fac >> 2;
Shinya Kitaoka 120a6e
        fac_fac_2_bits = 2 * abs_zoom_level - 1;
Shinya Kitaoka 120a6e
        qrest_fac      = qrest * factor;
Shinya Kitaoka 120a6e
        qrest_fac_2    = qrest_fac >> 1;
Shinya Kitaoka 120a6e
        fac_prest      = factor * prest;
Shinya Kitaoka 120a6e
        fac_prest_2    = fac_prest >> 1;
Shinya Kitaoka 120a6e
        qrest_prest    = qrest * prest;
Shinya Kitaoka 120a6e
        qrest_prest_2  = qrest_prest >> 1;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        bufin         = rin->buffer;
Shinya Kitaoka 120a6e
        wrapin_pixels = rin->wrap;
Shinya Kitaoka 120a6e
        wrapin_bytes  = wrapin_pixels * 3;
Shinya Kitaoka 120a6e
        bufout        = rout->buffer;
Shinya Kitaoka 120a6e
        wrapout       = rout->wrap;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        switch ((mirror << 2) + ninety) {
Shinya Kitaoka 120a6e
          CASE(0 << 2) + 0 : dudp = 1;
Shinya Kitaoka 120a6e
          dvdp                    = 0;
Shinya Kitaoka 120a6e
          dudq                    = 0;
Shinya Kitaoka 120a6e
          dvdq                    = 1;
Shinya Kitaoka 120a6e
          startu                  = u1;
Shinya Kitaoka 120a6e
          startv                  = v1;
Shinya Kitaoka 120a6e
          CASE(0 << 2) + 1 : dudp = 0;
Shinya Kitaoka 120a6e
          dvdp                    = -1;
Shinya Kitaoka 120a6e
          dudq                    = 1;
Shinya Kitaoka 120a6e
          dvdq                    = 0;
Shinya Kitaoka 120a6e
          startu                  = u1;
Shinya Kitaoka 120a6e
          startv                  = v2;
Shinya Kitaoka 120a6e
          CASE(0 << 2) + 2 : dudp = -1;
Shinya Kitaoka 120a6e
          dvdp                    = 0;
Shinya Kitaoka 120a6e
          dudq                    = 0;
Shinya Kitaoka 120a6e
          dvdq                    = -1;
Shinya Kitaoka 120a6e
          startu                  = u2;
Shinya Kitaoka 120a6e
          startv                  = v2;
Shinya Kitaoka 120a6e
          CASE(0 << 2) + 3 : dudp = 0;
Shinya Kitaoka 120a6e
          dvdp                    = 1;
Shinya Kitaoka 120a6e
          dudq                    = -1;
Shinya Kitaoka 120a6e
          dvdq                    = 0;
Shinya Kitaoka 120a6e
          startu                  = u2;
Shinya Kitaoka 120a6e
          startv                  = v1;
Shinya Kitaoka 120a6e
          CASE(1 << 2) + 0 : dudp = -1;
Shinya Kitaoka 120a6e
          dvdp                    = 0;
Shinya Kitaoka 120a6e
          dudq                    = 0;
Shinya Kitaoka 120a6e
          dvdq                    = 1;
Shinya Kitaoka 120a6e
          startu                  = u2;
Shinya Kitaoka 120a6e
          startv                  = v1;
Shinya Kitaoka 120a6e
          CASE(1 << 2) + 1 : dudp = 0;
Shinya Kitaoka 120a6e
          dvdp                    = -1;
Shinya Kitaoka 120a6e
          dudq                    = -1;
Shinya Kitaoka 120a6e
          dvdq                    = 0;
Shinya Kitaoka 120a6e
          startu                  = u2;
Shinya Kitaoka 120a6e
          startv                  = v2;
Shinya Kitaoka 120a6e
          CASE(1 << 2) + 2 : dudp = 1;
Shinya Kitaoka 120a6e
          dvdp                    = 0;
Shinya Kitaoka 120a6e
          dudq                    = 0;
Shinya Kitaoka 120a6e
          dvdq                    = -1;
Shinya Kitaoka 120a6e
          startu                  = u1;
Shinya Kitaoka 120a6e
          startv                  = v2;
Shinya Kitaoka 120a6e
          CASE(1 << 2) + 3 : dudp = 0;
Shinya Kitaoka 120a6e
          dvdp                    = 1;
Shinya Kitaoka 120a6e
          dudq                    = 1;
Shinya Kitaoka 120a6e
          dvdq                    = 0;
Shinya Kitaoka 120a6e
          startu                  = u1;
Shinya Kitaoka 120a6e
          startv                  = v1;
Shinya Kitaoka 120a6e
        DEFAULT:
Shinya Kitaoka 120a6e
          abort();
Shinya Kitaoka 120a6e
          dudp = dvdp = dudq = dvdq = startu = startv = 0;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
        dindp = (dudp + wrapin_pixels * dvdp) * 3;
Shinya Kitaoka 120a6e
        dindq = (dudq + wrapin_pixels * dvdq) * 3;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        rowin  = (UCHAR *)rin->buffer + startu * 3 + startv * wrapin_bytes;
Shinya Kitaoka 120a6e
        rowout = (USHORT *)rout->buffer + newx + newy * wrapout;
Shinya Kitaoka 120a6e
        for (q = 0; q < qlast; q += factor) {
Shinya Kitaoka 120a6e
          pixin  = rowin;
Shinya Kitaoka 120a6e
          pixout = rowout;
Shinya Kitaoka 120a6e
          for (p = 0; p < plast; p += factor) {
Shinya Kitaoka 120a6e
            tmp_r = tmp_g = tmp_b = 0;
Shinya Kitaoka 120a6e
            in                    = pixin;
Shinya Kitaoka 120a6e
            for (j = 0; j < factor; j += 2) {
Shinya Kitaoka 120a6e
              for (i = 0; i < factor; i += 2) {
Shinya Kitaoka 120a6e
                tmp_r += in[0];
Shinya Kitaoka 120a6e
                tmp_g += in[1];
Shinya Kitaoka 120a6e
                tmp_b += in[2];
Shinya Kitaoka 120a6e
                in += dindp + dindq;
Shinya Kitaoka 120a6e
                tmp_r += in[0];
Shinya Kitaoka 120a6e
                tmp_g += in[1];
Shinya Kitaoka 120a6e
                tmp_b += in[2];
Shinya Kitaoka 120a6e
                in += dindp - dindq;
Shinya Kitaoka 120a6e
              }
Shinya Kitaoka 120a6e
              in += 2 * dindq - factor * dindp;
Shinya Kitaoka 120a6e
            }
Shinya Kitaoka 120a6e
            tmp_r     = (tmp_r + fac_fac_4) >> fac_fac_2_bits;
Shinya Kitaoka 120a6e
            tmp_g     = (tmp_g + fac_fac_4) >> fac_fac_2_bits;
Shinya Kitaoka 120a6e
            tmp_b     = (tmp_b + fac_fac_4) >> fac_fac_2_bits;
Shinya Kitaoka 120a6e
            *pixout++ = PIX_RGB16_FROM_BYTES(tmp_r, tmp_g, tmp_b);
Shinya Kitaoka 120a6e
            pixin += factor * dindp;
Shinya Kitaoka 120a6e
          }
Shinya Kitaoka 120a6e
          if (prest) {
Shinya Kitaoka 120a6e
            tmp_r = tmp_g = tmp_b = 0;
Shinya Kitaoka 120a6e
            for (j = 0; j < factor; j++)
Shinya Kitaoka 120a6e
              for (i = 0; i < prest; i++) {
Shinya Kitaoka 120a6e
                tmp_r += pixin[i * dindp + j * dindq];
Shinya Kitaoka 120a6e
                tmp_g += pixin[i * dindp + j * dindq + 1];
Shinya Kitaoka 120a6e
                tmp_b += pixin[i * dindp + j * dindq + 2];
Shinya Kitaoka 120a6e
              }
Shinya Kitaoka 120a6e
            tmp_r     = (tmp_r + fac_prest_2) / fac_prest;
Shinya Kitaoka 120a6e
            tmp_g     = (tmp_g + fac_prest_2) / fac_prest;
Shinya Kitaoka 120a6e
            tmp_b     = (tmp_b + fac_prest_2) / fac_prest;
Shinya Kitaoka 120a6e
            *pixout++ = PIX_RGB16_FROM_BYTES(tmp_r, tmp_g, tmp_b);
Shinya Kitaoka 120a6e
          }
Shinya Kitaoka 120a6e
          rowin += factor * dindq;
Shinya Kitaoka 120a6e
          rowout += wrapout;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
        if (qrest) {
Shinya Kitaoka 120a6e
          pixin  = rowin;
Shinya Kitaoka 120a6e
          pixout = rowout;
Shinya Kitaoka 120a6e
          for (p = 0; p < plast; p += factor) {
Shinya Kitaoka 120a6e
            tmp_r = tmp_g = tmp_b = 0;
Shinya Kitaoka 120a6e
            for (j = 0; j < qrest; j++)
Shinya Kitaoka 120a6e
              for (i = 0; i < factor; i++) {
Shinya Kitaoka 120a6e
                ?E 81 tmp_r += pixin[i * dindp + j * dindq];
Shinya Kitaoka 120a6e
                tmp_g += pixin[i * dindp + j * dindq + 1];
Shinya Kitaoka 120a6e
                tmp_b += pixin[i * dindp + j * dindq + 2];
Shinya Kitaoka 120a6e
              }
Shinya Kitaoka 120a6e
            tmp_r     = (tmp_r + qrest_fac_2) / qrest_fac;
Shinya Kitaoka 120a6e
            tmp_g     = (tmp_g + qrest_fac_2) / qrest_fac;
Shinya Kitaoka 120a6e
            tmp_b     = (tmp_b + qrest_fac_2) / qrest_fac;
Shinya Kitaoka 120a6e
            *pixout++ = PIX_RGB16_FROM_BYTES(tmp_r, tmp_g, tmp_b);
Shinya Kitaoka 120a6e
            pixin += factor * dindp;
Shinya Kitaoka 120a6e
          }
Shinya Kitaoka 120a6e
          if (prest) {
Shinya Kitaoka 120a6e
            tmp_r = tmp_g = tmp_b = 0;
Shinya Kitaoka 120a6e
            for (j = 0; j < qrest; j++)
Shinya Kitaoka 120a6e
              for (i = 0; i < prest; i++) {
Shinya Kitaoka 120a6e
                tmp_r += pixin[i * dindp + j * dindq];
Shinya Kitaoka 120a6e
                tmp_g += pixin[i * dindp + j * dindq + 1];
Shinya Kitaoka 120a6e
                tmp_b += pixin[i * dindp + j * dindq + 2];
Shinya Kitaoka 120a6e
              }
Shinya Kitaoka 120a6e
            tmp_r     = (tmp_r + qrest_prest_2) / qrest_prest;
Shinya Kitaoka 120a6e
            tmp_g     = (tmp_g + qrest_prest_2) / qrest_prest;
Shinya Kitaoka 120a6e
            tmp_b     = (tmp_b + qrest_prest_2) / qrest_prest;
Shinya Kitaoka 120a6e
            *pixout++ = PIX_RGB16_FROM_BYTES(tmp_r, tmp_g, tmp_b);
Shinya Kitaoka 120a6e
          }
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
      }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
      /*---------------------------------------------------------------------------*/
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
      ?E 63
Shinya Kitaoka 120a6e
?E 57 static void rop_copy_90_rgb_rgbm(RASTER * rin, RASTER * rout, int x1,
Shinya Kitaoka 120a6e
                                        int y1, int x2, int y2, int newx,
Shinya Kitaoka 120a6e
                                        int newy, int mirror, int ninety) {
Shinya Kitaoka 120a6e
        UCHAR *bufin, *bytein, *appo;
Shinya Kitaoka 120a6e
        LPIXEL *bufout, *pixout, tmp;
Shinya Kitaoka 120a6e
        int wrapin, wrapout;
Shinya Kitaoka 120a6e
        int u, v, lu, lv, su, sv, u00, v00, u0, v0, dindx, dudy, dvdy;
Shinya Kitaoka 120a6e
        int x, y, lx, ly;
Shinya Kitaoka 120a6e
        int u1, v1, u2, v2;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        mirror &= 1;
Shinya Kitaoka 120a6e
        ninety &= 3;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        if (!ninety && !mirror) {
Shinya Kitaoka 120a6e
          rop_copy(rin, rout, x1, y1, x2, y2, newx, newy);
Shinya Kitaoka 120a6e
          return;
Shinya Kitaoka 120a6e
        }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
        u1 = x1;
Shinya Kitaoka 120a6e
        v1 = y1;
Shinya Kitaoka 120a6e
        u2 = x2;
Shinya Kitaoka 120a6e
        v2 = y2;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        su = u2 - u1;
Shinya Kitaoka 120a6e
        sv = v2 - v1;
Shinya Kitaoka 120a6e
        lu = u2 - u1 + 1;
Shinya Kitaoka 120a6e
        lv = v2 - v1 + 1;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        if (ninety & 1) {
Shinya Kitaoka 120a6e
          lx = lv;
Shinya Kitaoka 120a6e
          ly = lu;
Shinya Kitaoka 120a6e
        } else {
Shinya Kitaoka 120a6e
          lx = lu;
Shinya Kitaoka 120a6e
          ly = lv;
Shinya Kitaoka 120a6e
        }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
        bufin   = rin->buffer;
Shinya Kitaoka 120a6e
        wrapin  = rin->wrap * 3; /* mi muovo di bytes */
Shinya Kitaoka 120a6e
        bufout  = rout->buffer;
Shinya Kitaoka 120a6e
        wrapout = rout->wrap;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        dudy = 0;
Shinya Kitaoka 120a6e
        dvdy = 0;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        switch ((mirror << 2) + ninety) {
Shinya Kitaoka 120a6e
          CASE(0 << 2) + 0 : u00 = u1;
Shinya Kitaoka 120a6e
          v00                    = v1;
Shinya Kitaoka 120a6e
          dvdy                   = 1;
Shinya Kitaoka 120a6e
          dindx                  = 3;
Shinya Kitaoka 120a6e
          CASE(0 << 2) + 1 : u00 = u1;
Shinya Kitaoka 120a6e
          v00                    = v1 + sv;
Shinya Kitaoka 120a6e
          dudy                   = 1;
Shinya Kitaoka 120a6e
          dindx                  = -wrapin;
Shinya Kitaoka 120a6e
          CASE(0 << 2) + 2 : u00 = u1 + su;
Shinya Kitaoka 120a6e
          v00                    = v1 + sv;
Shinya Kitaoka 120a6e
          dvdy                   = -1;
Shinya Kitaoka 120a6e
          dindx                  = -3;
Shinya Kitaoka 120a6e
          CASE(0 << 2) + 3 : u00 = u1 + su;
Shinya Kitaoka 120a6e
          v00                    = v1;
Shinya Kitaoka 120a6e
          dudy                   = -1;
Shinya Kitaoka 120a6e
          dindx                  = wrapin;
Shinya Kitaoka 120a6e
          CASE(1 << 2) + 0 : u00 = u1 + su;
Shinya Kitaoka 120a6e
          v00                    = v1;
Shinya Kitaoka 120a6e
          dvdy                   = 1;
Shinya Kitaoka 120a6e
          dindx                  = -3;
Shinya Kitaoka 120a6e
          CASE(1 << 2) + 1 : u00 = u1 + su;
Shinya Kitaoka 120a6e
          v00                    = v1 + sv;
Shinya Kitaoka 120a6e
          dudy                   = -1;
Shinya Kitaoka 120a6e
          dindx                  = -wrapin;
Shinya Kitaoka 120a6e
          CASE(1 << 2) + 2 : u00 = u1;
Shinya Kitaoka 120a6e
          v00                    = v1 + sv;
Shinya Kitaoka 120a6e
          dvdy                   = -1;
Shinya Kitaoka 120a6e
          dindx                  = 3;
Shinya Kitaoka 120a6e
          CASE(1 << 2) + 3 : u00 = u1;
Shinya Kitaoka 120a6e
          v00                    = v1;
Shinya Kitaoka 120a6e
          dudy                   = 1;
Shinya Kitaoka 120a6e
          dindx                  = wrapin;
Shinya Kitaoka 120a6e
          ?D 78 DEFAULT : assert(FALSE);
Shinya Kitaoka 120a6e
          u00 = v00 = dudy = dindx = 0;
Shinya Kitaoka 120a6e
          ?E 78
Shinya Kitaoka 120a6e
?I 78 DEFAULT : abort();
Shinya Kitaoka 120a6e
          u00 = v00 = dudy = dindx = 0;
Shinya Kitaoka 120a6e
          ?E 78
Shinya Kitaoka 120a6e
        }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
        for (u0 = u00, v0 = v00, y = newy; y < newy + ly;
Shinya Kitaoka 120a6e
             u0 += dudy, v0 += dvdy, y++) {
Shinya Kitaoka 120a6e
          bytein = bufin + u0 * 3 + v0 * wrapin;
Shinya Kitaoka 120a6e
          pixout = bufout + newx + y * wrapout;
Shinya Kitaoka 120a6e
          for (x = newx; x < newx + lx; x++) {
Shinya Kitaoka 120a6e
            appo      = bytein;
Shinya Kitaoka 120a6e
            tmp.r     = *appo++;
Shinya Kitaoka 120a6e
            tmp.g     = *appo++;
Shinya Kitaoka 120a6e
            tmp.b     = *appo;
Shinya Kitaoka 120a6e
            tmp.m     = 0xff;
Shinya Kitaoka 120a6e
            *pixout++ = tmp;
Shinya Kitaoka 120a6e
            bytein += dindx;
Shinya Kitaoka 120a6e
          }
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
      }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
      /*---------------------------------------------------------------------------*/
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
      ?I 63 static void rop_zoom_out_90_rgb_rgbm(
Shinya Kitaoka 120a6e
          RASTER * rin, RASTER * rout, int x1, int y1, int x2, int y2, int newx,
Shinya Kitaoka 120a6e
          int newy, int abs_zoom_level, int mirror, int ninety) {
Shinya Kitaoka 120a6e
        UCHAR *bufin, *rowin, *pixin, *in;
Shinya Kitaoka 120a6e
        int tmp_r, tmp_g, tmp_b;
Shinya Kitaoka 120a6e
        LPIXEL *bufout, *rowout, *pixout, valout;
Shinya Kitaoka 120a6e
        int wrapin_bytes, wrapin_pixels, wrapout;
Shinya Kitaoka 120a6e
        int u1, v1, u2, v2;
Shinya Kitaoka 120a6e
        int u, v, lu, lv, startu, startv;
Shinya Kitaoka 120a6e
        int p, q, lp, lq;
Shinya Kitaoka 120a6e
        int dudp, dvdp, dudq, dvdq, dindp, dindq;
Shinya Kitaoka 120a6e
        int plast, qlast, prest, qrest, i, j;
Shinya Kitaoka 120a6e
        int factor, fac_fac_2_bits;
Shinya Kitaoka 120a6e
        int fac_fac, qrest_fac, fac_prest, qrest_prest;
Shinya Kitaoka 120a6e
        int fac_fac_2, qrest_fac_2, fac_prest_2, qrest_prest_2;
Shinya Kitaoka 120a6e
        int fac_fac_4;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        mirror &= 1;
Shinya Kitaoka 120a6e
        ninety &= 3;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        if (!ninety && !mirror) {
Shinya Kitaoka 120a6e
          rop_zoom_out(rin, rout, x1, y1, x2, y2, newx, newy, abs_zoom_level);
Shinya Kitaoka 120a6e
          return;
Shinya Kitaoka 120a6e
        }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
        u1 = x1;
Shinya Kitaoka 120a6e
        v1 = y1;
Shinya Kitaoka 120a6e
        u2 = x2;
Shinya Kitaoka 120a6e
        v2 = y2;
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
        lu = u2 - u1 + 1;
Shinya Kitaoka 120a6e
        lv = v2 - v1 + 1;
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
        if (ninety & 1) {
Shinya Kitaoka 120a6e
          lp = lv;
Shinya Kitaoka 120a6e
          lq = lu;
Shinya Kitaoka 120a6e
        } else {
Shinya Kitaoka 120a6e
          lp = lu;
Shinya Kitaoka 120a6e
          lq = lv;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
        factor         = 1 << abs_zoom_level;
Shinya Kitaoka 120a6e
        prest          = lp & (factor - 1);
Shinya Kitaoka 120a6e
        qrest          = lq & (factor - 1);
Shinya Kitaoka 120a6e
        plast          = lp - prest;
Shinya Kitaoka 120a6e
        qlast          = lq - qrest;
Shinya Kitaoka 120a6e
        fac_fac        = factor * factor;
Shinya Kitaoka 120a6e
        fac_fac_2      = fac_fac >> 1;
Shinya Kitaoka 120a6e
        fac_fac_4      = fac_fac >> 2;
Shinya Kitaoka 120a6e
        fac_fac_2_bits = 2 * abs_zoom_level - 1;
Shinya Kitaoka 120a6e
        qrest_fac      = qrest * factor;
Shinya Kitaoka 120a6e
        qrest_fac_2    = qrest_fac >> 1;
Shinya Kitaoka 120a6e
        fac_prest      = factor * prest;
Shinya Kitaoka 120a6e
        fac_prest_2    = fac_prest >> 1;
Shinya Kitaoka 120a6e
        qrest_prest    = qrest * prest;
Shinya Kitaoka 120a6e
        qrest_prest_2  = qrest_prest >> 1;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        bufin         = rin->buffer;
Shinya Kitaoka 120a6e
        wrapin_pixels = rin->wrap;
Shinya Kitaoka 120a6e
        wrapin_bytes  = wrapin_pixels * 3;
Shinya Kitaoka 120a6e
        bufout        = rout->buffer;
Shinya Kitaoka 120a6e
        wrapout       = rout->wrap;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        switch ((mirror << 2) + ninety) {
Shinya Kitaoka 120a6e
          CASE(0 << 2) + 0 : dudp = 1;
Shinya Kitaoka 120a6e
          dvdp                    = 0;
Shinya Kitaoka 120a6e
          dudq                    = 0;
Shinya Kitaoka 120a6e
          dvdq                    = 1;
Shinya Kitaoka 120a6e
          startu                  = u1;
Shinya Kitaoka 120a6e
          startv                  = v1;
Shinya Kitaoka 120a6e
          CASE(0 << 2) + 1 : dudp = 0;
Shinya Kitaoka 120a6e
          dvdp                    = -1;
Shinya Kitaoka 120a6e
          dudq                    = 1;
Shinya Kitaoka 120a6e
          dvdq                    = 0;
Shinya Kitaoka 120a6e
          startu                  = u1;
Shinya Kitaoka 120a6e
          startv                  = v2;
Shinya Kitaoka 120a6e
          CASE(0 << 2) + 2 : dudp = -1;
Shinya Kitaoka 120a6e
          dvdp                    = 0;
Shinya Kitaoka 120a6e
          dudq                    = 0;
Shinya Kitaoka 120a6e
          dvdq                    = -1;
Shinya Kitaoka 120a6e
          startu                  = u2;
Shinya Kitaoka 120a6e
          startv                  = v2;
Shinya Kitaoka 120a6e
          CASE(0 << 2) + 3 : dudp = 0;
Shinya Kitaoka 120a6e
          dvdp                    = 1;
Shinya Kitaoka 120a6e
          dudq                    = -1;
Shinya Kitaoka 120a6e
          dvdq                    = 0;
Shinya Kitaoka 120a6e
          startu                  = u2;
Shinya Kitaoka 120a6e
          startv                  = v1;
Shinya Kitaoka 120a6e
          CASE(1 << 2) + 0 : dudp = -1;
Shinya Kitaoka 120a6e
          dvdp                    = 0;
Shinya Kitaoka 120a6e
          dudq                    = 0;
Shinya Kitaoka 120a6e
          dvdq                    = 1;
Shinya Kitaoka 120a6e
          startu                  = u2;
Shinya Kitaoka 120a6e
          startv                  = v1;
Shinya Kitaoka 120a6e
          CASE(1 << 2) + 1 : dudp = 0;
Shinya Kitaoka 120a6e
          dvdp                    = -1;
Shinya Kitaoka 120a6e
          dudq                    = -1;
Shinya Kitaoka 120a6e
          dvdq                    = 0;
Shinya Kitaoka 120a6e
          startu                  = u2;
Shinya Kitaoka 120a6e
          startv                  = v2;
Shinya Kitaoka 120a6e
          CASE(1 << 2) + 2 : dudp = 1;
Shinya Kitaoka 120a6e
          dvdp                    = 0;
Shinya Kitaoka 120a6e
          dudq                    = 0;
Shinya Kitaoka 120a6e
          dvdq                    = -1;
Shinya Kitaoka 120a6e
          startu                  = u1;
Shinya Kitaoka 120a6e
          startv                  = v2;
Shinya Kitaoka 120a6e
          CASE(1 << 2) + 3 : dudp = 0;
Shinya Kitaoka 120a6e
          dvdp                    = 1;
Shinya Kitaoka 120a6e
          dudq                    = 1;
Shinya Kitaoka 120a6e
          dvdq                    = 0;
Shinya Kitaoka 120a6e
          startu                  = u1;
Shinya Kitaoka 120a6e
          startv                  = v1;
Shinya Kitaoka 120a6e
        DEFAULT:
Shinya Kitaoka 120a6e
          ?D 78 assert(FALSE);
Shinya Kitaoka 120a6e
          dudp = dvdp = dudq = dvdq = startu = startv = 0;
Shinya Kitaoka 120a6e
          ?E 78
Shinya Kitaoka 120a6e
?I 78 abort();
Shinya Kitaoka 120a6e
          dudp = dvdp = dudq = dvdq = startu = startv = 0;
Shinya Kitaoka 120a6e
          ?E 78
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
        dindp = (dudp + wrapin_pixels * dvdp) * 3;
Shinya Kitaoka 120a6e
        dindq = (dudq + wrapin_pixels * dvdq) * 3;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        rowin    = (UCHAR *)rin->buffer + startu * 3 + startv * wrapin_bytes;
Shinya Kitaoka 120a6e
        rowout   = (LPIXEL *)rout->buffer + newx + newy * wrapout;
Shinya Kitaoka 120a6e
        valout.m = 0xff;
Shinya Kitaoka 120a6e
        for (q = 0; q < qlast; q += factor) {
Shinya Kitaoka 120a6e
          pixin  = rowin;
Shinya Kitaoka 120a6e
          pixout = rowout;
Shinya Kitaoka 120a6e
          for (p = 0; p < plast; p += factor) {
Shinya Kitaoka 120a6e
            tmp_r = tmp_g = tmp_b = 0;
Shinya Kitaoka 120a6e
            in                    = pixin;
Shinya Kitaoka 120a6e
            for (j = 0; j < factor; j += 2) {
Shinya Kitaoka 120a6e
              for (i = 0; i < factor; i += 2) {
Shinya Kitaoka 120a6e
                tmp_r += in[0];
Shinya Kitaoka 120a6e
                tmp_g += in[1];
Shinya Kitaoka 120a6e
                tmp_b += in[2];
Shinya Kitaoka 120a6e
                in += dindp + dindq;
Shinya Kitaoka 120a6e
                tmp_r += in[0];
Shinya Kitaoka 120a6e
                tmp_g += in[1];
Shinya Kitaoka 120a6e
                tmp_b += in[2];
Shinya Kitaoka 120a6e
                in += dindp - dindq;
Shinya Kitaoka 120a6e
              }
Shinya Kitaoka 120a6e
              in += 2 * dindq - factor * dindp;
Shinya Kitaoka 120a6e
            }
Shinya Kitaoka 120a6e
            valout.r  = (tmp_r + fac_fac_4) >> fac_fac_2_bits;
Shinya Kitaoka 120a6e
            valout.g  = (tmp_g + fac_fac_4) >> fac_fac_2_bits;
Shinya Kitaoka 120a6e
            valout.b  = (tmp_b + fac_fac_4) >> fac_fac_2_bits;
Shinya Kitaoka 120a6e
            *pixout++ = valout;
Shinya Kitaoka 120a6e
            pixin += factor * dindp;
Shinya Kitaoka 120a6e
          }
Shinya Kitaoka 120a6e
          if (prest) {
Shinya Kitaoka 120a6e
            tmp_r = tmp_g = tmp_b = 0;
Shinya Kitaoka 120a6e
            for (j = 0; j < factor; j++)
Shinya Kitaoka 120a6e
              for (i = 0; i < prest; i++) {
Shinya Kitaoka 120a6e
                tmp_r += pixin[i * dindp + j * dindq];
Shinya Kitaoka 120a6e
                tmp_g += pixin[i * dindp + j * dindq + 1];
Shinya Kitaoka 120a6e
                tmp_b += pixin[i * dindp + j * dindq + 2];
Shinya Kitaoka 120a6e
              }
Shinya Kitaoka 120a6e
            valout.r  = (tmp_r + fac_prest_2) / fac_prest;
Shinya Kitaoka 120a6e
            valout.g  = (tmp_g + fac_prest_2) / fac_prest;
Shinya Kitaoka 120a6e
            valout.b  = (tmp_b + fac_prest_2) / fac_prest;
Shinya Kitaoka 120a6e
            *pixout++ = valout;
Shinya Kitaoka 120a6e
          }
Shinya Kitaoka 120a6e
          rowin += factor * dindq;
Shinya Kitaoka 120a6e
          rowout += wrapout;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
        if (qrest) {
Shinya Kitaoka 120a6e
          pixin  = rowin;
Shinya Kitaoka 120a6e
          pixout = rowout;
Shinya Kitaoka 120a6e
          for (p = 0; p < plast; p += factor) {
Shinya Kitaoka 120a6e
            tmp_r = tmp_g = tmp_b = 0;
Shinya Kitaoka 120a6e
            for (j = 0; j < qrest; j++)
Shinya Kitaoka 120a6e
              for (i = 0; i < factor; i++) {
Shinya Kitaoka 120a6e
                tmp_r += pixin[i * dindp + j * dindq];
Shinya Kitaoka 120a6e
                tmp_g += pixin[i * dindp + j * dindq + 1];
Shinya Kitaoka 120a6e
                tmp_b += pixin[i * dindp + j * dindq + 2];
Shinya Kitaoka 120a6e
              }
Shinya Kitaoka 120a6e
            valout.r  = (tmp_r + qrest_fac_2) / qrest_fac;
Shinya Kitaoka 120a6e
            valout.g  = (tmp_g + qrest_fac_2) / qrest_fac;
Shinya Kitaoka 120a6e
            valout.b  = (tmp_b + qrest_fac_2) / qrest_fac;
Shinya Kitaoka 120a6e
            *pixout++ = valout;
Shinya Kitaoka 120a6e
            pixin += factor * dindp;
Shinya Kitaoka 120a6e
          }
Shinya Kitaoka 120a6e
          if (prest) {
Shinya Kitaoka 120a6e
            tmp_r = tmp_g = tmp_b = 0;
Shinya Kitaoka 120a6e
            for (j = 0; j < qrest; j++)
Shinya Kitaoka 120a6e
              for (i = 0; i < prest; i++) {
Shinya Kitaoka 120a6e
                tmp_r += pixin[i * dindp + j * dindq];
Shinya Kitaoka 120a6e
                tmp_g += pixin[i * dindp + j * dindq + 1];
Shinya Kitaoka 120a6e
                tmp_b += pixin[i * dindp + j * dindq + 2];
Shinya Kitaoka 120a6e
              }
Shinya Kitaoka 120a6e
            valout.r  = (tmp_r + qrest_prest_2) / qrest_prest;
Shinya Kitaoka 120a6e
            valout.g  = (tmp_g + qrest_prest_2) / qrest_prest;
Shinya Kitaoka 120a6e
            valout.b  = (tmp_b + qrest_prest_2) / qrest_prest;
Shinya Kitaoka 120a6e
            *pixout++ = valout;
Shinya Kitaoka 120a6e
          }
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
      }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
      /*---------------------------------------------------------------------------*/
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
      ?E 63 static void rop_copy_90_bw_gr8(RASTER * rin, RASTER * rout, int x1,
Shinya Kitaoka 120a6e
                                           int y1, int x2, int y2,
Shinya Kitaoka 120a6e
?E 56 int newx, int newy, int mirror, int ninety) {
Shinya Kitaoka 120a6e
        UCHAR *bufin, *bufout, *bytein, *byteout;
Shinya Kitaoka 120a6e
        int bytewrapin, bitoffsin, wrapout;
Shinya Kitaoka 120a6e
        int value_for_0, value_for_1;
Shinya Kitaoka 120a6e
        int u, v, lu, lv, su, sv, u00, v00, u0, v0, dudy, dvdy, dudx, dvdx;
Shinya Kitaoka 120a6e
        int x, y, lx, ly;
Shinya Kitaoka 120a6e
        int u1, v1, u2, v2;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        mirror &= 1;
Shinya Kitaoka 120a6e
        ninety &= 3;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        if (!ninety && !mirror) {
Shinya Kitaoka 120a6e
          rop_copy(rin, rout, x1, y1, x2, y2, newx, newy);
Shinya Kitaoka 120a6e
          return;
Shinya Kitaoka 120a6e
          ?E 55
Shinya Kitaoka 120a6e
        }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
        switch (rin->type) {
Shinya Kitaoka 120a6e
          CASE RAS_WB : value_for_0 = 255;
Shinya Kitaoka 120a6e
          value_for_1               = 0;
Shinya Kitaoka 120a6e
          CASE RAS_BW : value_for_0 = 0;
Shinya Kitaoka 120a6e
          value_for_1               = 255;
Shinya Kitaoka 120a6e
        DEFAULT:
Shinya Kitaoka 120a6e
          printf("bad raster type in rop_copy_90_bw_gr8\n");
Shinya Kitaoka 120a6e
          return;
Shinya Kitaoka 120a6e
        }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
        u1 = x1;
Shinya Kitaoka 120a6e
        v1 = y1;
Shinya Kitaoka 120a6e
        u2 = x2;
Shinya Kitaoka 120a6e
        v2 = y2;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        su = u2 - u1;
Shinya Kitaoka 120a6e
        sv = v2 - v1;
Shinya Kitaoka 120a6e
        lu = u2 - u1 + 1;
Shinya Kitaoka 120a6e
        lv = v2 - v1 + 1;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        if (ninety & 1) {
Shinya Kitaoka 120a6e
          lx = lv;
Shinya Kitaoka 120a6e
          ly = lu;
Shinya Kitaoka 120a6e
        } else {
Shinya Kitaoka 120a6e
          lx = lu;
Shinya Kitaoka 120a6e
          ly = lv;
Shinya Kitaoka 120a6e
        }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
        bufin            = rin->buffer;
Shinya Kitaoka 120a6e
        ?D 47 bytewrapin = (rin->wrap + 7) / 8;
Shinya Kitaoka 120a6e
        ?E 47
Shinya Kitaoka 120a6e
?I 47 bytewrapin        = (rin->wrap + 7) >> 3;
Shinya Kitaoka 120a6e
        ?E 47 bitoffsin  = rin->bit_offs;
Shinya Kitaoka 120a6e
        bufout           = rout->buffer;
Shinya Kitaoka 120a6e
        wrapout          = rout->wrap;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        dudx = 0;
Shinya Kitaoka 120a6e
        dudy = 0;
Shinya Kitaoka 120a6e
        dvdx = 0;
Shinya Kitaoka 120a6e
        dvdy = 0;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        switch ((mirror << 2) + ninety) {
Shinya Kitaoka 120a6e
          CASE(0 << 2) + 0 : u00 = u1;
Shinya Kitaoka 120a6e
          v00                    = v1;
Shinya Kitaoka 120a6e
          dudx                   = 1;
Shinya Kitaoka 120a6e
          dvdy                   = 1;
Shinya Kitaoka 120a6e
          CASE(0 << 2) + 1 : u00 = u1;
Shinya Kitaoka 120a6e
          v00                    = v1 + sv;
Shinya Kitaoka 120a6e
          dudy                   = 1;
Shinya Kitaoka 120a6e
          dvdx                   = -1;
Shinya Kitaoka 120a6e
          CASE(0 << 2) + 2 : u00 = u1 + su;
Shinya Kitaoka 120a6e
          v00                    = v1 + sv;
Shinya Kitaoka 120a6e
          dudx                   = -1;
Shinya Kitaoka 120a6e
          dvdy                   = -1;
Shinya Kitaoka 120a6e
          CASE(0 << 2) + 3 : u00 = u1 + su;
Shinya Kitaoka 120a6e
          v00                    = v1;
Shinya Kitaoka 120a6e
          dudy                   = -1;
Shinya Kitaoka 120a6e
          dvdx                   = 1;
Shinya Kitaoka 120a6e
          CASE(1 << 2) + 0 : u00 = u1 + su;
Shinya Kitaoka 120a6e
          v00                    = v1;
Shinya Kitaoka 120a6e
          dudx                   = -1;
Shinya Kitaoka 120a6e
          dvdy                   = 1;
Shinya Kitaoka 120a6e
          CASE(1 << 2) + 1 : u00 = u1 + su;
Shinya Kitaoka 120a6e
          v00                    = v1 + sv;
Shinya Kitaoka 120a6e
          dudy                   = -1;
Shinya Kitaoka 120a6e
          dvdx                   = -1;
Shinya Kitaoka 120a6e
          CASE(1 << 2) + 2 : u00 = u1;
Shinya Kitaoka 120a6e
          v00                    = v1 + sv;
Shinya Kitaoka 120a6e
          dudx                   = 1;
Shinya Kitaoka 120a6e
          dvdy                   = -1;
Shinya Kitaoka 120a6e
          CASE(1 << 2) + 3 : u00 = u1;
Shinya Kitaoka 120a6e
          v00                    = v1;
Shinya Kitaoka 120a6e
          dudy                   = 1;
Shinya Kitaoka 120a6e
          dvdx                   = 1;
Shinya Kitaoka 120a6e
          ?I 50
Toshihiro Shimizu 890ddd
?D 78 DEFAULT : assert(FALSE);
Shinya Kitaoka 120a6e
          u00 = v00 = dudy = dvdx = 0;
Shinya Kitaoka 120a6e
          ?E 78
Toshihiro Shimizu 890ddd
?I 78 DEFAULT : abort();
Shinya Kitaoka 120a6e
          u00 = v00 = dudy = dvdx = 0;
Shinya Kitaoka 120a6e
          ?E 78
Toshihiro Shimizu 890ddd
?E 50
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        if (dudx)
Shinya Kitaoka 120a6e
          for (u0 = u00, v0 = v00, y = newy; y < newy + ly; v0 += dvdy, y++) {
Shinya Kitaoka 120a6e
            u       = u0;
Shinya Kitaoka 120a6e
            v       = v0;
Shinya Kitaoka 120a6e
            byteout = bufout + newx + y * wrapout;
Shinya Kitaoka 120a6e
            for (x = newx; x < newx + lx; u += dudx, x++) {
Shinya Kitaoka 120a6e
              if (GET_BIT(u, v, bufin, bytewrapin, bitoffsin))
Shinya Kitaoka 120a6e
                *byteout++ = value_for_1;
Shinya Kitaoka 120a6e
              else
Shinya Kitaoka 120a6e
                *byteout++ = value_for_0;
Shinya Kitaoka 120a6e
            }
Shinya Kitaoka 120a6e
          }
Shinya Kitaoka 120a6e
        else
Shinya Kitaoka 120a6e
          for (u0 = u00, v0 = v00, y = newy; y < newy + ly; u0 += dudy, y++) {
Shinya Kitaoka 120a6e
            u       = u0;
Shinya Kitaoka 120a6e
            v       = v0;
Shinya Kitaoka 120a6e
            byteout = bufout + newx + y * wrapout;
Shinya Kitaoka 120a6e
            for (x = newx; x < newx + lx; v += dvdx, x++) {
Shinya Kitaoka 120a6e
              if (GET_BIT(u, v, bufin, bytewrapin, bitoffsin))
Shinya Kitaoka 120a6e
                *byteout++ = value_for_1;
Shinya Kitaoka 120a6e
              else
Shinya Kitaoka 120a6e
                *byteout++ = value_for_0;
Shinya Kitaoka 120a6e
              ?I 21
Shinya Kitaoka 120a6e
            }
Shinya Kitaoka 120a6e
          }
Shinya Kitaoka 120a6e
        ?D 55
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
#ifdef DEBUG
Shinya Kitaoka 120a6e
            STW_STOP(0) STW_PRINT(stdout)
Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd
?E 55
Shinya Kitaoka 120a6e
      }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
      /*---------------------------------------------------------------------------*/
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
      static void rop_copy_90_bw_cm16(RASTER * rin, RASTER * rout, int x1,
Shinya Kitaoka 120a6e
                                      int y1, int x2, int y2, int newx,
Shinya Kitaoka 120a6e
                                      int newy, int mirror, int ninety) {
Shinya Kitaoka 120a6e
        UCHAR *bufin, *bytein;
Shinya Kitaoka 120a6e
        USHORT *bufout, *pixout;
Shinya Kitaoka 120a6e
        LPIXEL *cmap;
Shinya Kitaoka 120a6e
        int bytewrapin, bitoffsin, wrapout, cmap_offset;
Shinya Kitaoka 120a6e
        USHORT value_for_0, value_for_1, value_tmp;
Shinya Kitaoka 120a6e
        int u, v, lu, lv, su, sv, u00, v00, u0, v0, dudy, dvdy, dudx, dvdx;
Shinya Kitaoka 120a6e
        int x, y, lx, ly;
Shinya Kitaoka 120a6e
        int u1, v1, u2, v2;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        ?D 55
Toshihiro Shimizu 890ddd
#ifdef DEBUG
Shinya Kitaoka 120a6e
            STW_INIT(0, "rop_copy_90_bw_gr8") STW_START(0)
Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?E 55 mirror &= 1;
Shinya Kitaoka 120a6e
        ninety &= 3;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        if (!ninety && !mirror) {
Shinya Kitaoka 120a6e
          rop_copy(rin, rout, x1, y1, x2, y2, newx, newy);
Shinya Kitaoka 120a6e
          return;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
        ?D 84 if (!rout->cmap.buffer) {
Shinya Kitaoka 120a6e
          msg(MSG_IE, "rop_copy_90_bw_cm16: missing color map");
Shinya Kitaoka 120a6e
          return;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
        ?E 84 cmap        = rout->cmap.buffer;
Shinya Kitaoka 120a6e
        ?D 56 cmap_offset = rout->cmap.offset;
Shinya Kitaoka 120a6e
        ?E 56
Shinya Kitaoka 120a6e
?I 56 cmap_offset        = rout->cmap.info.offset_mask;
Shinya Kitaoka 120a6e
        ?E 56 if (cmap[0].r == 0) {
Shinya Kitaoka 120a6e
          value_for_0 = cmap_offset;
Shinya Kitaoka 120a6e
          value_for_1 = cmap_offset + 255;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
        else {
Shinya Kitaoka 120a6e
          value_for_0 = cmap_offset + 255;
Shinya Kitaoka 120a6e
          value_for_1 = cmap_offset;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
        if (rin->type == RAS_WB) {
Shinya Kitaoka 120a6e
          value_tmp   = value_for_0;
Shinya Kitaoka 120a6e
          value_for_0 = value_for_1;
Shinya Kitaoka 120a6e
          value_for_1 = value_tmp;
Shinya Kitaoka 120a6e
          ?I 22
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        u1 = x1;
Shinya Kitaoka 120a6e
        v1 = y1;
Shinya Kitaoka 120a6e
        u2 = x2;
Shinya Kitaoka 120a6e
        v2 = y2;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        su = u2 - u1;
Shinya Kitaoka 120a6e
        sv = v2 - v1;
Shinya Kitaoka 120a6e
        lu = u2 - u1 + 1;
Shinya Kitaoka 120a6e
        lv = v2 - v1 + 1;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        if (ninety & 1) {
Shinya Kitaoka 120a6e
          lx = lv;
Shinya Kitaoka 120a6e
          ly = lu;
Shinya Kitaoka 120a6e
        } else {
Shinya Kitaoka 120a6e
          lx = lu;
Shinya Kitaoka 120a6e
          ly = lv;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        bufin            = rin->buffer;
Shinya Kitaoka 120a6e
        ?D 47 bytewrapin = (rin->wrap + 7) / 8;
Shinya Kitaoka 120a6e
        ?E 47
Shinya Kitaoka 120a6e
?I 47 bytewrapin        = (rin->wrap + 7) >> 3;
Shinya Kitaoka 120a6e
        ?E 47 bitoffsin  = rin->bit_offs;
Shinya Kitaoka 120a6e
        bufout           = rout->buffer;
Shinya Kitaoka 120a6e
        wrapout          = rout->wrap;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        dudx = 0;
Shinya Kitaoka 120a6e
        dudy = 0;
Shinya Kitaoka 120a6e
        dvdx = 0;
Shinya Kitaoka 120a6e
        dvdy = 0;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        switch ((mirror << 2) + ninety) {
Shinya Kitaoka 120a6e
          CASE(0 << 2) + 0 : u00 = u1;
Shinya Kitaoka 120a6e
          v00                    = v1;
Shinya Kitaoka 120a6e
          dudx                   = 1;
Shinya Kitaoka 120a6e
          dvdy                   = 1;
Shinya Kitaoka 120a6e
          CASE(0 << 2) + 1 : u00 = u1;
Shinya Kitaoka 120a6e
          v00                    = v1 + sv;
Shinya Kitaoka 120a6e
          dudy                   = 1;
Shinya Kitaoka 120a6e
          dvdx                   = -1;
Shinya Kitaoka 120a6e
          CASE(0 << 2) + 2 : u00 = u1 + su;
Shinya Kitaoka 120a6e
          v00                    = v1 + sv;
Shinya Kitaoka 120a6e
          dudx                   = -1;
Shinya Kitaoka 120a6e
          dvdy                   = -1;
Shinya Kitaoka 120a6e
          CASE(0 << 2) + 3 : u00 = u1 + su;
Shinya Kitaoka 120a6e
          v00                    = v1;
Shinya Kitaoka 120a6e
          dudy                   = -1;
Shinya Kitaoka 120a6e
          dvdx                   = 1;
Shinya Kitaoka 120a6e
          CASE(1 << 2) + 0 : u00 = u1 + su;
Shinya Kitaoka 120a6e
          v00                    = v1;
Shinya Kitaoka 120a6e
          dudx                   = -1;
Shinya Kitaoka 120a6e
          dvdy                   = 1;
Shinya Kitaoka 120a6e
          CASE(1 << 2) + 1 : u00 = u1 + su;
Shinya Kitaoka 120a6e
          v00                    = v1 + sv;
Shinya Kitaoka 120a6e
          dudy                   = -1;
Shinya Kitaoka 120a6e
          dvdx                   = -1;
Shinya Kitaoka 120a6e
          CASE(1 << 2) + 2 : u00 = u1;
Shinya Kitaoka 120a6e
          v00                    = v1 + sv;
Shinya Kitaoka 120a6e
          dudx                   = 1;
Shinya Kitaoka 120a6e
          dvdy                   = -1;
Shinya Kitaoka 120a6e
          CASE(1 << 2) + 3 : u00 = u1;
Shinya Kitaoka 120a6e
          v00                    = v1;
Shinya Kitaoka 120a6e
          dudy                   = 1;
Shinya Kitaoka 120a6e
          dvdx                   = 1;
Shinya Kitaoka 120a6e
          ?I 50
Toshihiro Shimizu 890ddd
?D 78 DEFAULT : assert(FALSE);
Shinya Kitaoka 120a6e
          u00 = v00 = dudy = dvdx = 0;
Shinya Kitaoka 120a6e
          ?E 78
Toshihiro Shimizu 890ddd
?I 78 DEFAULT : abort();
Shinya Kitaoka 120a6e
          u00 = v00 = dudy = dvdx = 0;
Shinya Kitaoka 120a6e
          ?E 78
Toshihiro Shimizu 890ddd
?E 50
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        if (dudx)
Shinya Kitaoka 120a6e
          for (u0 = u00, v0 = v00, y = newy; y < newy + ly; v0 += dvdy, y++) {
Shinya Kitaoka 120a6e
            u      = u0;
Shinya Kitaoka 120a6e
            v      = v0;
Shinya Kitaoka 120a6e
            pixout = bufout + newx + y * wrapout;
Shinya Kitaoka 120a6e
            for (x = newx; x < newx + lx; u += dudx, x++) {
Shinya Kitaoka 120a6e
              if (GET_BIT(u, v, bufin, bytewrapin, bitoffsin))
Shinya Kitaoka 120a6e
                *pixout++ = value_for_1;
Shinya Kitaoka 120a6e
              else
Shinya Kitaoka 120a6e
                *pixout++ = value_for_0;
Shinya Kitaoka 120a6e
            }
Shinya Kitaoka 120a6e
          }
Shinya Kitaoka 120a6e
        else
Shinya Kitaoka 120a6e
          for (u0 = u00, v0 = v00, y = newy; y < newy + ly; u0 += dudy, y++) {
Shinya Kitaoka 120a6e
            u      = u0;
Shinya Kitaoka 120a6e
            v      = v0;
Shinya Kitaoka 120a6e
            pixout = bufout + newx + y * wrapout;
Shinya Kitaoka 120a6e
            for (x = newx; x < newx + lx; v += dvdx, x++) {
Shinya Kitaoka 120a6e
              if (GET_BIT(u, v, bufin, bytewrapin, bitoffsin))
Shinya Kitaoka 120a6e
                *pixout++ = value_for_1;
Shinya Kitaoka 120a6e
              else
Shinya Kitaoka 120a6e
                *pixout++ = value_for_0;
Shinya Kitaoka 120a6e
            }
Shinya Kitaoka 120a6e
          }
Shinya Kitaoka 120a6e
        ?I 55
Shinya Kitaoka 120a6e
      }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
      /*---------------------------------------------------------------------------*/
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
      ?I 84 static void rop_copy_90_bw_cm24(RASTER * rin, RASTER * rout, int x1,
Shinya Kitaoka 120a6e
                                            int y1, int x2, int y2, int newx,
Shinya Kitaoka 120a6e
                                            int newy, int mirror, int ninety) {
Shinya Kitaoka 120a6e
        UCHAR *bufin, *bytein;
Shinya Kitaoka 120a6e
        ULONG *bufout, *pixout;
Shinya Kitaoka 120a6e
        LPIXEL *penmap, *colmap;
Shinya Kitaoka 120a6e
        int bytewrapin, bitoffsin, wrapout;
Shinya Kitaoka 120a6e
        ULONG value_for_0, value_for_1, value_tmp;
Shinya Kitaoka 120a6e
        int u, v, lu, lv, su, sv, u00, v00, u0, v0, dudy, dvdy, dudx, dvdx;
Shinya Kitaoka 120a6e
        int x, y, lx, ly;
Shinya Kitaoka 120a6e
        int u1, v1, u2, v2;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        mirror &= 1;
Shinya Kitaoka 120a6e
        ninety &= 3;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        if (!ninety && !mirror) {
Shinya Kitaoka 120a6e
          rop_copy(rin, rout, x1, y1, x2, y2, newx, newy);
Shinya Kitaoka 120a6e
          return;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
        penmap = rout->cmap.penbuffer;
Shinya Kitaoka 120a6e
        colmap = rout->cmap.colbuffer;
Shinya Kitaoka 120a6e
        if (penmap[0].r + colmap[0].r == 0) {
Shinya Kitaoka 120a6e
          value_for_0 = 0;
Shinya Kitaoka 120a6e
          value_for_1 = 255;
Shinya Kitaoka 120a6e
        } else {
Shinya Kitaoka 120a6e
          value_for_0 = 255;
Shinya Kitaoka 120a6e
          value_for_1 = 0;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
        if (rin->type == RAS_WB) {
Shinya Kitaoka 120a6e
          value_tmp   = value_for_0;
Shinya Kitaoka 120a6e
          value_for_0 = value_for_1;
Shinya Kitaoka 120a6e
          value_for_1 = value_tmp;
Shinya Kitaoka 120a6e
        }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
        u1 = x1;
Shinya Kitaoka 120a6e
        v1 = y1;
Shinya Kitaoka 120a6e
        u2 = x2;
Shinya Kitaoka 120a6e
        v2 = y2;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        su = u2 - u1;
Shinya Kitaoka 120a6e
        sv = v2 - v1;
Shinya Kitaoka 120a6e
        lu = u2 - u1 + 1;
Shinya Kitaoka 120a6e
        lv = v2 - v1 + 1;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        if (ninety & 1) {
Shinya Kitaoka 120a6e
          lx = lv;
Shinya Kitaoka 120a6e
          ly = lu;
Shinya Kitaoka 120a6e
        } else {
Shinya Kitaoka 120a6e
          lx = lu;
Shinya Kitaoka 120a6e
          ly = lv;
Shinya Kitaoka 120a6e
        }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
        bufin      = rin->buffer;
Shinya Kitaoka 120a6e
        bytewrapin = (rin->wrap + 7) >> 3;
Shinya Kitaoka 120a6e
        bitoffsin  = rin->bit_offs;
Shinya Kitaoka 120a6e
        bufout     = rout->buffer;
Shinya Kitaoka 120a6e
        wrapout    = rout->wrap;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        dudx = 0;
Shinya Kitaoka 120a6e
        dudy = 0;
Shinya Kitaoka 120a6e
        dvdx = 0;
Shinya Kitaoka 120a6e
        dvdy = 0;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        switch ((mirror << 2) + ninety) {
Shinya Kitaoka 120a6e
          CASE(0 << 2) + 0 : u00 = u1;
Shinya Kitaoka 120a6e
          v00                    = v1;
Shinya Kitaoka 120a6e
          dudx                   = 1;
Shinya Kitaoka 120a6e
          dvdy                   = 1;
Shinya Kitaoka 120a6e
          CASE(0 << 2) + 1 : u00 = u1;
Shinya Kitaoka 120a6e
          v00                    = v1 + sv;
Shinya Kitaoka 120a6e
          dudy                   = 1;
Shinya Kitaoka 120a6e
          dvdx                   = -1;
Shinya Kitaoka 120a6e
          CASE(0 << 2) + 2 : u00 = u1 + su;
Shinya Kitaoka 120a6e
          v00                    = v1 + sv;
Shinya Kitaoka 120a6e
          dudx                   = -1;
Shinya Kitaoka 120a6e
          dvdy                   = -1;
Shinya Kitaoka 120a6e
          CASE(0 << 2) + 3 : u00 = u1 + su;
Shinya Kitaoka 120a6e
          v00                    = v1;
Shinya Kitaoka 120a6e
          dudy                   = -1;
Shinya Kitaoka 120a6e
          dvdx                   = 1;
Shinya Kitaoka 120a6e
          CASE(1 << 2) + 0 : u00 = u1 + su;
Shinya Kitaoka 120a6e
          v00                    = v1;
Shinya Kitaoka 120a6e
          dudx                   = -1;
Shinya Kitaoka 120a6e
          dvdy                   = 1;
Shinya Kitaoka 120a6e
          CASE(1 << 2) + 1 : u00 = u1 + su;
Shinya Kitaoka 120a6e
          v00                    = v1 + sv;
Shinya Kitaoka 120a6e
          dudy                   = -1;
Shinya Kitaoka 120a6e
          dvdx                   = -1;
Shinya Kitaoka 120a6e
          CASE(1 << 2) + 2 : u00 = u1;
Shinya Kitaoka 120a6e
          v00                    = v1 + sv;
Shinya Kitaoka 120a6e
          dudx                   = 1;
Shinya Kitaoka 120a6e
          dvdy                   = -1;
Shinya Kitaoka 120a6e
          CASE(1 << 2) + 3 : u00 = u1;
Shinya Kitaoka 120a6e
          v00                    = v1;
Shinya Kitaoka 120a6e
          dudy                   = 1;
Shinya Kitaoka 120a6e
          dvdx                   = 1;
Shinya Kitaoka 120a6e
        DEFAULT:
Shinya Kitaoka 120a6e
          abort();
Shinya Kitaoka 120a6e
          u00 = v00 = dudy = dvdx = 0;
Shinya Kitaoka 120a6e
        }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
        if (dudx)
Shinya Kitaoka 120a6e
          for (u0 = u00, v0 = v00, y = newy; y < newy + ly; v0 += dvdy, y++) {
Shinya Kitaoka 120a6e
            u      = u0;
Shinya Kitaoka 120a6e
            v      = v0;
Shinya Kitaoka 120a6e
            pixout = bufout + newx + y * wrapout;
Shinya Kitaoka 120a6e
            for (x = newx; x < newx + lx; u += dudx, x++) {
Shinya Kitaoka 120a6e
              if (GET_BIT(u, v, bufin, bytewrapin, bitoffsin))
Shinya Kitaoka 120a6e
                *pixout++ = value_for_1;
Shinya Kitaoka 120a6e
              else
Shinya Kitaoka 120a6e
                *pixout++ = value_for_0;
Shinya Kitaoka 120a6e
            }
Shinya Kitaoka 120a6e
          }
Shinya Kitaoka 120a6e
        else
Shinya Kitaoka 120a6e
          for (u0 = u00, v0 = v00, y = newy; y < newy + ly; u0 += dudy, y++) {
Shinya Kitaoka 120a6e
            u      = u0;
Shinya Kitaoka 120a6e
            v      = v0;
Shinya Kitaoka 120a6e
            pixout = bufout + newx + y * wrapout;
Shinya Kitaoka 120a6e
            for (x = newx; x < newx + lx; v += dvdx, x++) {
Shinya Kitaoka 120a6e
              if (GET_BIT(u, v, bufin, bytewrapin, bitoffsin))
Shinya Kitaoka 120a6e
                *pixout++ = value_for_1;
Shinya Kitaoka 120a6e
              else
Shinya Kitaoka 120a6e
                *pixout++ = value_for_0;
Shinya Kitaoka 120a6e
            }
Shinya Kitaoka 120a6e
          }
Shinya Kitaoka 120a6e
      }
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
      /*---------------------------------------------------------------------------*/
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
      ?E 84 static void rop_copy_90_bw_rgb16(
Shinya Kitaoka 120a6e
          RASTER * rin, RASTER * rout, int x1, int y1, int x2, int y2, int newx,
Shinya Kitaoka 120a6e
          int newy, int mirror, int ninety) {
Shinya Kitaoka 120a6e
        UCHAR *bufin, *bytein;
Shinya Kitaoka 120a6e
        USHORT *bufout, *pixout;
Shinya Kitaoka 120a6e
        int bytewrapin, bitoffsin, wrapout;
Shinya Kitaoka 120a6e
        USHORT value_for_0, value_for_1;
Shinya Kitaoka 120a6e
        int u, v, lu, lv, su, sv, u00, v00, u0, v0, dudy, dvdy, dudx, dvdx;
Shinya Kitaoka 120a6e
        int x, y, lx, ly;
Shinya Kitaoka 120a6e
        int u1, v1, u2, v2;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        mirror &= 1;
Shinya Kitaoka 120a6e
        ninety &= 3;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        if (!ninety && !mirror) {
Shinya Kitaoka 120a6e
          rop_copy(rin, rout, x1, y1, x2, y2, newx, newy);
Shinya Kitaoka 120a6e
          return;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        switch (rin->type) {
Shinya Kitaoka 120a6e
          CASE RAS_WB : value_for_0 = 0xffff;
Shinya Kitaoka 120a6e
          value_for_1               = 0x0000;
Shinya Kitaoka 120a6e
          CASE RAS_BW : value_for_0 = 0x0000;
Shinya Kitaoka 120a6e
          value_for_1               = 0xffff;
Shinya Kitaoka 120a6e
        DEFAULT:
Shinya Kitaoka 120a6e
          printf("bad raster type in rop_copy_90_bw_rgb16\n");
Shinya Kitaoka 120a6e
          return;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        u1 = x1;
Shinya Kitaoka 120a6e
        v1 = y1;
Shinya Kitaoka 120a6e
        u2 = x2;
Shinya Kitaoka 120a6e
        v2 = y2;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        su = u2 - u1;
Shinya Kitaoka 120a6e
        sv = v2 - v1;
Shinya Kitaoka 120a6e
        lu = u2 - u1 + 1;
Shinya Kitaoka 120a6e
        lv = v2 - v1 + 1;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        if (ninety & 1) {
Shinya Kitaoka 120a6e
          lx = lv;
Shinya Kitaoka 120a6e
          ly = lu;
Shinya Kitaoka 120a6e
        } else {
Shinya Kitaoka 120a6e
          lx = lu;
Shinya Kitaoka 120a6e
          ly = lv;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        bufin      = rin->buffer;
Shinya Kitaoka 120a6e
        bytewrapin = (rin->wrap + 7) >> 3;
Shinya Kitaoka 120a6e
        bitoffsin  = rin->bit_offs;
Shinya Kitaoka 120a6e
        bufout     = rout->buffer;
Shinya Kitaoka 120a6e
        wrapout    = rout->wrap;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        dudx = 0;
Shinya Kitaoka 120a6e
        dudy = 0;
Shinya Kitaoka 120a6e
        dvdx = 0;
Shinya Kitaoka 120a6e
        dvdy = 0;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        switch ((mirror << 2) + ninety) {
Shinya Kitaoka 120a6e
          CASE(0 << 2) + 0 : u00 = u1;
Shinya Kitaoka 120a6e
          v00                    = v1;
Shinya Kitaoka 120a6e
          dudx                   = 1;
Shinya Kitaoka 120a6e
          dvdy                   = 1;
Shinya Kitaoka 120a6e
          CASE(0 << 2) + 1 : u00 = u1;
Shinya Kitaoka 120a6e
          v00                    = v1 + sv;
Shinya Kitaoka 120a6e
          dudy                   = 1;
Shinya Kitaoka 120a6e
          dvdx                   = -1;
Shinya Kitaoka 120a6e
          CASE(0 << 2) + 2 : u00 = u1 + su;
Shinya Kitaoka 120a6e
          v00                    = v1 + sv;
Shinya Kitaoka 120a6e
          dudx                   = -1;
Shinya Kitaoka 120a6e
          dvdy                   = -1;
Shinya Kitaoka 120a6e
          CASE(0 << 2) + 3 : u00 = u1 + su;
Shinya Kitaoka 120a6e
          v00                    = v1;
Shinya Kitaoka 120a6e
          dudy                   = -1;
Shinya Kitaoka 120a6e
          dvdx                   = 1;
Shinya Kitaoka 120a6e
          CASE(1 << 2) + 0 : u00 = u1 + su;
Shinya Kitaoka 120a6e
          v00                    = v1;
Shinya Kitaoka 120a6e
          dudx                   = -1;
Shinya Kitaoka 120a6e
          dvdy                   = 1;
Shinya Kitaoka 120a6e
          CASE(1 << 2) + 1 : u00 = u1 + su;
Shinya Kitaoka 120a6e
          v00                    = v1 + sv;
Shinya Kitaoka 120a6e
          dudy                   = -1;
Shinya Kitaoka 120a6e
          dvdx                   = -1;
Shinya Kitaoka 120a6e
          CASE(1 << 2) + 2 : u00 = u1;
Shinya Kitaoka 120a6e
          v00                    = v1 + sv;
Shinya Kitaoka 120a6e
          dudx                   = 1;
Shinya Kitaoka 120a6e
          dvdy                   = -1;
Shinya Kitaoka 120a6e
          CASE(1 << 2) + 3 : u00 = u1;
Shinya Kitaoka 120a6e
          v00                    = v1;
Shinya Kitaoka 120a6e
          dudy                   = 1;
Shinya Kitaoka 120a6e
          dvdx                   = 1;
Shinya Kitaoka 120a6e
          ?D 78 DEFAULT : assert(FALSE);
Shinya Kitaoka 120a6e
          u00 = v00 = dudy = dvdx = 0;
Shinya Kitaoka 120a6e
          ?E 78
Toshihiro Shimizu 890ddd
?I 78 DEFAULT : abort();
Shinya Kitaoka 120a6e
          u00 = v00 = dudy = dvdx = 0;
Shinya Kitaoka 120a6e
          ?E 78
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
        ?E 55
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?D 55
Toshihiro Shimizu 890ddd
#ifdef DEBUG
Shinya Kitaoka 120a6e
            STW_STOP(0) STW_PRINT(stdout)
Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd
?E 55
Shinya Kitaoka 120a6e
?I 55 if (dudx) for (u0 = u00, v0 = v00, y = newy; y < newy + ly;
Shinya Kitaoka 120a6e
                      v0 += dvdy, y++) {
Shinya Kitaoka 120a6e
          u      = u0;
Shinya Kitaoka 120a6e
          v      = v0;
Shinya Kitaoka 120a6e
          pixout = bufout + newx + y * wrapout;
Shinya Kitaoka 120a6e
          for (x = newx; x < newx + lx; u += dudx, x++) {
Shinya Kitaoka 120a6e
            if (GET_BIT(u, v, bufin, bytewrapin, bitoffsin))
Shinya Kitaoka 120a6e
              *pixout++ = value_for_1;
Shinya Kitaoka 120a6e
            else
Shinya Kitaoka 120a6e
              *pixout++ = value_for_0;
Shinya Kitaoka 120a6e
          }
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
        else for (u0 = u00, v0 = v00, y = newy; y < newy + ly;
Shinya Kitaoka 120a6e
                  u0 += dudy, y++) {
Shinya Kitaoka 120a6e
          u      = u0;
Shinya Kitaoka 120a6e
          v      = v0;
Shinya Kitaoka 120a6e
          pixout = bufout + newx + y * wrapout;
Shinya Kitaoka 120a6e
          for (x = newx; x < newx + lx; v += dvdx, x++) {
Shinya Kitaoka 120a6e
            if (GET_BIT(u, v, bufin, bytewrapin, bitoffsin))
Shinya Kitaoka 120a6e
              *pixout++ = value_for_1;
Shinya Kitaoka 120a6e
            else
Shinya Kitaoka 120a6e
              *pixout++ = value_for_0;
Shinya Kitaoka 120a6e
          }
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
        ?E 55
Shinya Kitaoka 120a6e
      }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
      /*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
      static void rop_copy_90_bw_rgbm(RASTER * rin, RASTER * rout, int x1,
Shinya Kitaoka 120a6e
                                      int y1, int x2, int y2, int newx,
Shinya Kitaoka 120a6e
                                      int newy,
Shinya Kitaoka 120a6e
?D 52 int mirror, int ninety) {
Shinya Kitaoka 120a6e
        UCHAR *bufin, *bytein;
Shinya Kitaoka 120a6e
        LPIXEL *bufout, *pixout;
Shinya Kitaoka 120a6e
        int bytewrapin, bitoffsin, wrapout;
Shinya Kitaoka 120a6e
        LPIXEL value_for_0, value_for_1;
Shinya Kitaoka 120a6e
        int u, v, lu, lv, su, sv, u00, v00, u0, v0, dudy, dvdy, dudx, dvdx;
Shinya Kitaoka 120a6e
        int x, y, lx, ly;
Shinya Kitaoka 120a6e
        int u1, v1, u2, v2;
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
#ifdef DEBUG
Shinya Kitaoka 120a6e
        STW_INIT(0, "rop_copy_90_bw_gr8")
Shinya Kitaoka 120a6e
        STW_START(0)
Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
        mirror &= 1;
Shinya Kitaoka 120a6e
        ninety &= 3;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        if (!ninety && !mirror) {
Shinya Kitaoka 120a6e
          rop_copy(rin, rout, x1, y1, x2, y2, newx, newy);
Shinya Kitaoka 120a6e
          return;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        switch (rin->type) {
Shinya Kitaoka 120a6e
          CASE RAS_WB : value_for_0.r = 255;
Shinya Kitaoka 120a6e
          value_for_0.g               = 255;
Shinya Kitaoka 120a6e
          value_for_0.b               = 255;
Shinya Kitaoka 120a6e
          value_for_0.m               = 255;
Shinya Kitaoka 120a6e
          value_for_1.r               = 0;
Shinya Kitaoka 120a6e
          value_for_1.g               = 0;
Shinya Kitaoka 120a6e
          value_for_1.b               = 0;
Shinya Kitaoka 120a6e
          value_for_1.m               = 255;
Shinya Kitaoka 120a6e
          CASE RAS_BW : value_for_0.r = 0;
Shinya Kitaoka 120a6e
          value_for_0.g               = 0;
Shinya Kitaoka 120a6e
          value_for_0.b               = 0;
Shinya Kitaoka 120a6e
          value_for_0.m               = 255;
Shinya Kitaoka 120a6e
          value_for_1.r               = 255;
Shinya Kitaoka 120a6e
          value_for_1.g               = 255;
Shinya Kitaoka 120a6e
          value_for_1.b               = 255;
Shinya Kitaoka 120a6e
          value_for_1.m               = 255;
Shinya Kitaoka 120a6e
        DEFAULT:
Shinya Kitaoka 120a6e
          printf("bad raster type in rop_copy_90_bw_rgbm\n");
Shinya Kitaoka 120a6e
          return;
Shinya Kitaoka 120a6e
          ?E 22
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        u1 = x1;
Shinya Kitaoka 120a6e
        v1 = y1;
Shinya Kitaoka 120a6e
        u2 = x2;
Shinya Kitaoka 120a6e
        v2 = y2;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        su = u2 - u1;
Shinya Kitaoka 120a6e
        sv = v2 - v1;
Shinya Kitaoka 120a6e
        lu = u2 - u1 + 1;
Shinya Kitaoka 120a6e
        lv = v2 - v1 + 1;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        if (ninety & 1) {
Shinya Kitaoka 120a6e
          lx = lv;
Shinya Kitaoka 120a6e
          ly = lu;
Shinya Kitaoka 120a6e
        } else {
Shinya Kitaoka 120a6e
          lx = lu;
Shinya Kitaoka 120a6e
          ly = lv;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        bufin            = rin->buffer;
Shinya Kitaoka 120a6e
        ?D 47 bytewrapin = (rin->wrap + 7) / 8;
Shinya Kitaoka 120a6e
        ?E 47
Shinya Kitaoka 120a6e
?I 47 bytewrapin        = (rin->wrap + 7) >> 3;
Shinya Kitaoka 120a6e
        ?E 47 bitoffsin  = rin->bit_offs;
Shinya Kitaoka 120a6e
        bufout           = rout->buffer;
Shinya Kitaoka 120a6e
        wrapout          = rout->wrap;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        dudx = 0;
Shinya Kitaoka 120a6e
        dudy = 0;
Shinya Kitaoka 120a6e
        dvdx = 0;
Shinya Kitaoka 120a6e
        dvdy = 0;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        switch ((mirror << 2) + ninety) {
Shinya Kitaoka 120a6e
          CASE(0 << 2) + 0 : u00 = u1;
Shinya Kitaoka 120a6e
          v00                    = v1;
Shinya Kitaoka 120a6e
          dudx                   = 1;
Shinya Kitaoka 120a6e
          dvdy                   = 1;
Shinya Kitaoka 120a6e
          CASE(0 << 2) + 1 : u00 = u1;
Shinya Kitaoka 120a6e
          v00                    = v1 + sv;
Shinya Kitaoka 120a6e
          dudy                   = 1;
Shinya Kitaoka 120a6e
          dvdx                   = -1;
Shinya Kitaoka 120a6e
          CASE(0 << 2) + 2 : u00 = u1 + su;
Shinya Kitaoka 120a6e
          v00                    = v1 + sv;
Shinya Kitaoka 120a6e
          dudx                   = -1;
Shinya Kitaoka 120a6e
          dvdy                   = -1;
Shinya Kitaoka 120a6e
          CASE(0 << 2) + 3 : u00 = u1 + su;
Shinya Kitaoka 120a6e
          v00                    = v1;
Shinya Kitaoka 120a6e
          dudy                   = -1;
Shinya Kitaoka 120a6e
          dvdx                   = 1;
Shinya Kitaoka 120a6e
          CASE(1 << 2) + 0 : u00 = u1 + su;
Shinya Kitaoka 120a6e
          v00                    = v1;
Shinya Kitaoka 120a6e
          dudx                   = -1;
Shinya Kitaoka 120a6e
          dvdy                   = 1;
Shinya Kitaoka 120a6e
          CASE(1 << 2) + 1 : u00 = u1 + su;
Shinya Kitaoka 120a6e
          v00                    = v1 + sv;
Shinya Kitaoka 120a6e
          dudy                   = -1;
Shinya Kitaoka 120a6e
          dvdx                   = -1;
Shinya Kitaoka 120a6e
          CASE(1 << 2) + 2 : u00 = u1;
Shinya Kitaoka 120a6e
          v00                    = v1 + sv;
Shinya Kitaoka 120a6e
          dudx                   = 1;
Shinya Kitaoka 120a6e
          dvdy                   = -1;
Shinya Kitaoka 120a6e
          CASE(1 << 2) + 3 : u00 = u1;
Shinya Kitaoka 120a6e
          v00                    = v1;
Shinya Kitaoka 120a6e
          dudy                   = 1;
Shinya Kitaoka 120a6e
          dvdx                   = 1;
Shinya Kitaoka 120a6e
          ?I 50 DEFAULT : assert(FALSE);
Shinya Kitaoka 120a6e
          u00 = v00 = dudy = dvdx = 0;
Shinya Kitaoka 120a6e
          ?E 50
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        if (dudx)
Shinya Kitaoka 120a6e
          for (u0 = u00, v0 = v00, y = newy; y < newy + ly; v0 += dvdy, y++) {
Shinya Kitaoka 120a6e
            u      = u0;
Shinya Kitaoka 120a6e
            v      = v0;
Shinya Kitaoka 120a6e
            pixout = bufout + newx + y * wrapout;
Shinya Kitaoka 120a6e
            for (x = newx; x < newx + lx; u += dudx, x++) {
Shinya Kitaoka 120a6e
              if (GET_BIT(u, v, bufin, bytewrapin, bitoffsin))
Shinya Kitaoka 120a6e
                *pixout++ = value_for_1;
Shinya Kitaoka 120a6e
              else
Shinya Kitaoka 120a6e
                *pixout++ = value_for_0;
Shinya Kitaoka 120a6e
            }
Shinya Kitaoka 120a6e
          }
Shinya Kitaoka 120a6e
        else
Shinya Kitaoka 120a6e
          for (u0 = u00, v0 = v00, y = newy; y < newy + ly; u0 += dudy, y++) {
Shinya Kitaoka 120a6e
            u      = u0;
Shinya Kitaoka 120a6e
            v      = v0;
Shinya Kitaoka 120a6e
            pixout = bufout + newx + y * wrapout;
Shinya Kitaoka 120a6e
            for (x = newx; x < newx + lx; v += dvdx, x++) {
Shinya Kitaoka 120a6e
              if (GET_BIT(u, v, bufin, bytewrapin, bitoffsin))
Shinya Kitaoka 120a6e
                *pixout++ = value_for_1;
Shinya Kitaoka 120a6e
              else
Shinya Kitaoka 120a6e
                *pixout++ = value_for_0;
Shinya Kitaoka 120a6e
              ?E 21
Shinya Kitaoka 120a6e
            }
Shinya Kitaoka 120a6e
          }
Shinya Kitaoka 120a6e
        ?E 17
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
#ifdef DEBUG
Shinya Kitaoka 120a6e
            STW_STOP(0) STW_PRINT(stdout)
Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd
?I 26
Shinya Kitaoka 120a6e
      }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
      /*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
      static void rop_copy_90_rgbm(RASTER * rin, RASTER * rout, int x1, int y1,
Shinya Kitaoka 120a6e
                                   int x2, int y2, int newx, int newy,
Shinya Kitaoka 120a6e
                                   int mirror, int ninety) {
Shinya Kitaoka 120a6e
        LPIXEL *bufin, *pixin;
Shinya Kitaoka 120a6e
        LPIXEL *bufout, *pixout;
Shinya Kitaoka 120a6e
        int wrapin, wrapout;
Shinya Kitaoka 120a6e
        int u, v, lu, lv, su, sv, u00, v00, u0, v0, dindx, dudy, dvdy;
Shinya Kitaoka 120a6e
        int x, y, lx, ly;
Shinya Kitaoka 120a6e
        int u1, v1, u2, v2;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        mirror &= 1;
Shinya Kitaoka 120a6e
        ninety &= 3;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        if (!ninety && !mirror) {
Shinya Kitaoka 120a6e
          rop_copy(rin, rout, x1, y1, x2, y2, newx, newy);
Shinya Kitaoka 120a6e
          return;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        u1 = x1;
Shinya Kitaoka 120a6e
        v1 = y1;
Shinya Kitaoka 120a6e
        u2 = x2;
Shinya Kitaoka 120a6e
        v2 = y2;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        su = u2 - u1;
Shinya Kitaoka 120a6e
        sv = v2 - v1;
Shinya Kitaoka 120a6e
        lu = u2 - u1 + 1;
Shinya Kitaoka 120a6e
        lv = v2 - v1 + 1;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        if (ninety & 1) {
Shinya Kitaoka 120a6e
          lx = lv;
Shinya Kitaoka 120a6e
          ly = lu;
Shinya Kitaoka 120a6e
        } else {
Shinya Kitaoka 120a6e
          lx = lu;
Shinya Kitaoka 120a6e
          ly = lv;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        bufin   = rin->buffer;
Shinya Kitaoka 120a6e
        wrapin  = rin->wrap;
Shinya Kitaoka 120a6e
        bufout  = rout->buffer;
Shinya Kitaoka 120a6e
        wrapout = rout->wrap;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        dudy = 0;
Shinya Kitaoka 120a6e
        dvdy = 0;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        switch ((mirror << 2) + ninety) {
Shinya Kitaoka 120a6e
          CASE(0 << 2) + 0 : u00 = u1;
Shinya Kitaoka 120a6e
          v00                    = v1;
Shinya Kitaoka 120a6e
          dvdy                   = 1;
Shinya Kitaoka 120a6e
          dindx                  = 1;
Shinya Kitaoka 120a6e
          CASE(0 << 2) + 1 : u00 = u1;
Shinya Kitaoka 120a6e
          v00                    = v1 + sv;
Shinya Kitaoka 120a6e
          dudy                   = 1;
Shinya Kitaoka 120a6e
          dindx                  = -wrapin;
Shinya Kitaoka 120a6e
          CASE(0 << 2) + 2 : u00 = u1 + su;
Shinya Kitaoka 120a6e
          v00                    = v1 + sv;
Shinya Kitaoka 120a6e
          dvdy                   = -1;
Shinya Kitaoka 120a6e
          dindx                  = -1;
Shinya Kitaoka 120a6e
          CASE(0 << 2) + 3 : u00 = u1 + su;
Shinya Kitaoka 120a6e
          v00                    = v1;
Shinya Kitaoka 120a6e
          dudy                   = -1;
Shinya Kitaoka 120a6e
          dindx                  = wrapin;
Shinya Kitaoka 120a6e
          CASE(1 << 2) + 0 : u00 = u1 + su;
Shinya Kitaoka 120a6e
          v00                    = v1;
Shinya Kitaoka 120a6e
          dvdy                   = 1;
Shinya Kitaoka 120a6e
          dindx                  = -1;
Shinya Kitaoka 120a6e
          CASE(1 << 2) + 1 : u00 = u1 + su;
Shinya Kitaoka 120a6e
          v00                    = v1 + sv;
Shinya Kitaoka 120a6e
          dudy                   = -1;
Shinya Kitaoka 120a6e
          dindx                  = -wrapin;
Shinya Kitaoka 120a6e
          CASE(1 << 2) + 2 : u00 = u1;
Shinya Kitaoka 120a6e
          v00                    = v1 + sv;
Shinya Kitaoka 120a6e
          dvdy                   = -1;
Shinya Kitaoka 120a6e
          dindx                  = 1;
Shinya Kitaoka 120a6e
          CASE(1 << 2) + 3 : u00 = u1;
Shinya Kitaoka 120a6e
          v00                    = v1;
Shinya Kitaoka 120a6e
          dudy                   = 1;
Shinya Kitaoka 120a6e
          dindx                  = wrapin;
Shinya Kitaoka 120a6e
          ?I 50 DEFAULT : assert(FALSE);
Shinya Kitaoka 120a6e
          u00 = v00 = dudy = dindx = 0;
Shinya Kitaoka 120a6e
          ?E 50
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        for (u0 = u00, v0 = v00, y = newy; y < newy + ly;
Shinya Kitaoka 120a6e
             u0 += dudy, v0 += dvdy, y++) {
Shinya Kitaoka 120a6e
          pixin  = bufin + u0 + v0 * wrapin;
Shinya Kitaoka 120a6e
          pixout = bufout + newx + y * wrapout;
Shinya Kitaoka 120a6e
          for (x = newx; x < newx + lx; x++) {
Shinya Kitaoka 120a6e
            *pixout++ = *pixin;
Shinya Kitaoka 120a6e
            pixin += dindx;
Shinya Kitaoka 120a6e
          }
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
        ?E 26
Toshihiro Shimizu 890ddd
?E 14
Shinya Kitaoka 120a6e
      }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
      /*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
      ?E 6 void rop_clear(RASTER * r, int x1, int y1, int x2, int y2) {
Shinya Kitaoka 120a6e
        ?D 13 char *pix;
Shinya Kitaoka 120a6e
        ?E 13
Toshihiro Shimizu 890ddd
?I 13 UCHAR *pix;
Shinya Kitaoka 120a6e
        ?E 13 int l, x, y, tmp, rowsize, wrap, pixbits;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        if (x1 > x2) {
Shinya Kitaoka 120a6e
          tmp = x1;
Shinya Kitaoka 120a6e
          x1  = x2;
Shinya Kitaoka 120a6e
          x2  = tmp;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
        if (y1 > y2) {
Shinya Kitaoka 120a6e
          tmp = y1;
Shinya Kitaoka 120a6e
          y1  = y2;
Shinya Kitaoka 120a6e
          y2  = tmp;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        /* controllo gli sconfinamenti */
Shinya Kitaoka 120a6e
        if (x1 < 0 || y1 < 0 || x2 - x1 >= r->lx || y2 - y1 >= r->ly) {
Shinya Kitaoka 120a6e
          printf("### INTERNAL ERROR - rop_clear; access violation\n");
Shinya Kitaoka 120a6e
          return;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        pixbits = rop_pixbits(r->type);
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        /* per adesso niente pixel non multipli di 8 bits */
Shinya Kitaoka 120a6e
        ?D 2 if (pixbits & 7)
Toshihiro Shimizu 890ddd
?E 2
Toshihiro Shimizu 890ddd
?I 2 if (rop_fillerbits(r->type))
Shinya Kitaoka 120a6e
?E 2 {
Shinya Kitaoka 120a6e
          printf("### INTERNAL ERROR - rop_clear; byte fraction pixels\n");
Shinya Kitaoka 120a6e
          return;
Shinya Kitaoka 120a6e
        }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
        wrap      = (r->wrap * pixbits) >> 3;
Shinya Kitaoka 120a6e
        rowsize   = ((x2 - x1 + 1) * pixbits) >> 3;
Shinya Kitaoka 120a6e
        ?D 10 pix = (char *)r->buffer + (((x1 + y1 * r->wrap) * pixbits) >> 3);
Shinya Kitaoka 120a6e
        ?E 10
Shinya Kitaoka 120a6e
?I 10 pix        = (UCHAR *)r->buffer + (((x1 + y1 * r->wrap) * pixbits) >> 3);
Shinya Kitaoka 120a6e
        ?E 10 l   = y2 - y1 + 1;
Shinya Kitaoka 120a6e
        while (l-- > 0) {
Shinya Kitaoka 120a6e
          memset(pix, 0, rowsize);
Shinya Kitaoka 120a6e
          pix += wrap;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
      }
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
      ?D 6
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?E 6
Shinya Kitaoka 120a6e
          /*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd
?I 6
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
?I 25 void
Shinya Kitaoka 120a6e
      rop_add_white_to_cmap(RASTER * ras) {
Shinya Kitaoka 120a6e
        int i;
Shinya Kitaoka 120a6e
        UCHAR m, white;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        for (i = 0; i < ras->cmap.size; i++) {
Shinya Kitaoka 120a6e
          m = ras->cmap.buffer[i].m;
Shinya Kitaoka 120a6e
          if (ras->cmap.buffer[i].r > m || ras->cmap.buffer[i].g > m ||
Shinya Kitaoka 120a6e
              ras->cmap.buffer[i].b > m)
Shinya Kitaoka 120a6e
            break;
Shinya Kitaoka 120a6e
          white = (UCHAR)255 - m;
Shinya Kitaoka 120a6e
          ras->cmap.buffer[i].r += white;
Shinya Kitaoka 120a6e
          ras->cmap.buffer[i].g += white;
Shinya Kitaoka 120a6e
          ras->cmap.buffer[i].b += white;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
        if (i < ras->cmap.size)
Shinya Kitaoka 120a6e
          fprintf(stderr, "\7add_white: cmap is not premultiplied\n");
Shinya Kitaoka 120a6e
      }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
      /*---------------------------------------------------------------------------*/
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
      void rop_remove_white_from_cmap(RASTER * ras) {
Shinya Kitaoka 120a6e
        int i;
Shinya Kitaoka 120a6e
        UCHAR m, white;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        for (i = 0; i < ras->cmap.size; i++) {
Shinya Kitaoka 120a6e
          m     = ras->cmap.buffer[i].m;
Shinya Kitaoka 120a6e
          white = (UCHAR)255 - m;
Shinya Kitaoka 120a6e
          ras->cmap.buffer[i].r -= white;
Shinya Kitaoka 120a6e
          ras->cmap.buffer[i].g -= white;
Shinya Kitaoka 120a6e
          ras->cmap.buffer[i].b -= white;
Shinya Kitaoka 120a6e
          if (ras->cmap.buffer[i].r > m || ras->cmap.buffer[i].g > m ||
Shinya Kitaoka 120a6e
              ras->cmap.buffer[i].b > m)
Shinya Kitaoka 120a6e
            break;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
        if (i < ras->cmap.size)
Shinya Kitaoka 120a6e
          fprintf(stderr, "\7remove_white: cmap is not premultiplied\n");
Shinya Kitaoka 120a6e
        ?I 32
Shinya Kitaoka 120a6e
      }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
      /*---------------------------------------------------------------------------*/
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
      static LPIXEL premult_lpixel(LPIXEL lpixel) {
Shinya Kitaoka 120a6e
        int m;
Shinya Kitaoka 120a6e
        LPIXEL new_lpixel;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        m = lpixel.m;
Shinya Kitaoka 120a6e
        if (m == 255)
Shinya Kitaoka 120a6e
          return lpixel;
Shinya Kitaoka 120a6e
        else if (m == 0) {
Shinya Kitaoka 120a6e
          new_lpixel.r = 0;
Shinya Kitaoka 120a6e
          new_lpixel.g = 0;
Shinya Kitaoka 120a6e
          new_lpixel.b = 0;
Shinya Kitaoka 120a6e
          new_lpixel.m = 0;
Shinya Kitaoka 120a6e
        } else {
Shinya Kitaoka 120a6e
          new_lpixel.r = (lpixel.r * m + 127) / 255;
Shinya Kitaoka 120a6e
          new_lpixel.g = (lpixel.g * m + 127) / 255;
Shinya Kitaoka 120a6e
          new_lpixel.b = (lpixel.b * m + 127) / 255;
Shinya Kitaoka 120a6e
          new_lpixel.m = m;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
        return new_lpixel;
Shinya Kitaoka 120a6e
      }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
      /*---------------------------------------------------------------------------*/
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
      static LPIXEL unpremult_lpixel(LPIXEL lpixel) {
Shinya Kitaoka 120a6e
        int m, m_2;
Shinya Kitaoka 120a6e
        LPIXEL new_lpixel;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        m = lpixel.m;
Shinya Kitaoka 120a6e
        if (m == 255)
Shinya Kitaoka 120a6e
          return lpixel;
Shinya Kitaoka 120a6e
        else if (m == 0) {
Shinya Kitaoka 120a6e
          new_lpixel.r = 255;
Shinya Kitaoka 120a6e
          new_lpixel.g = 255;
Shinya Kitaoka 120a6e
          new_lpixel.b = 255;
Shinya Kitaoka 120a6e
          new_lpixel.m = 0;
Shinya Kitaoka 120a6e
          ?D 51
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
        ?E 51
Toshihiro Shimizu 890ddd
?I 51
Shinya Kitaoka 120a6e
      }
Shinya Kitaoka 120a6e
      ?E 51 else {
Shinya Kitaoka 120a6e
        m_2          = m >> 1;
Shinya Kitaoka 120a6e
        new_lpixel.r = (lpixel.r * 255 + m_2) / m;
Shinya Kitaoka 120a6e
        new_lpixel.g = (lpixel.g * 255 + m_2) / m;
Shinya Kitaoka 120a6e
        new_lpixel.b = (lpixel.b * 255 + m_2) / m;
Toshihiro Shimizu 890ddd
?E 52
Toshihiro Shimizu 890ddd
?I 52
Toshihiro Shimizu 890ddd
		                int mirror, int ninety)
Toshihiro Shimizu 890ddd
{
Shinya Kitaoka 120a6e
  UCHAR *bufin, *bytein;
Shinya Kitaoka 120a6e
  LPIXEL *bufout, *pixout;
Shinya Kitaoka 120a6e
  int bytewrapin, bitoffsin, wrapout;
Shinya Kitaoka 120a6e
  LPIXEL value_for_0, value_for_1;
Shinya Kitaoka 120a6e
  int u, v, lu, lv, su, sv, u00, v00, u0, v0, dudy, dvdy, dudx, dvdx;
Shinya Kitaoka 120a6e
  int x, y, lx, ly;
Shinya Kitaoka 120a6e
  int u1, v1, u2, v2;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  ?D 55
Toshihiro Shimizu 890ddd
#ifdef DEBUG
Shinya Kitaoka 120a6e
      STW_INIT(0, "rop_copy_90_bw_gr8") STW_START(0)
Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?E 55 mirror &= 1;
Shinya Kitaoka 120a6e
  ninety &= 3;
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  if (!ninety && !mirror) {
Shinya Kitaoka 120a6e
    rop_copy(rin, rout, x1, y1, x2, y2, newx, newy);
Shinya Kitaoka 120a6e
    return;
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  switch (rin->type) {
Shinya Kitaoka 120a6e
    CASE RAS_WB : value_for_0.r = 255;
Shinya Kitaoka 120a6e
    value_for_0.g               = 255;
Shinya Kitaoka 120a6e
    value_for_0.b               = 255;
Shinya Kitaoka 120a6e
    value_for_0.m               = 255;
Shinya Kitaoka 120a6e
    value_for_1.r               = 0;
Shinya Kitaoka 120a6e
    value_for_1.g               = 0;
Shinya Kitaoka 120a6e
    value_for_1.b               = 0;
Shinya Kitaoka 120a6e
    value_for_1.m               = 255;
Shinya Kitaoka 120a6e
    CASE RAS_BW : value_for_0.r = 0;
Shinya Kitaoka 120a6e
    value_for_0.g               = 0;
Shinya Kitaoka 120a6e
    value_for_0.b               = 0;
Shinya Kitaoka 120a6e
    value_for_0.m               = 255;
Shinya Kitaoka 120a6e
    value_for_1.r               = 255;
Shinya Kitaoka 120a6e
    value_for_1.g               = 255;
Shinya Kitaoka 120a6e
    value_for_1.b               = 255;
Shinya Kitaoka 120a6e
    value_for_1.m               = 255;
Shinya Kitaoka 120a6e
  DEFAULT:
Shinya Kitaoka 120a6e
    printf("bad raster type in rop_copy_90_bw_rgbm\n");
Shinya Kitaoka 120a6e
    return;
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  u1 = x1;
Shinya Kitaoka 120a6e
  v1 = y1;
Shinya Kitaoka 120a6e
  u2 = x2;
Shinya Kitaoka 120a6e
  v2 = y2;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  su = u2 - u1;
Shinya Kitaoka 120a6e
  sv = v2 - v1;
Shinya Kitaoka 120a6e
  lu = u2 - u1 + 1;
Shinya Kitaoka 120a6e
  lv = v2 - v1 + 1;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  if (ninety & 1) {
Shinya Kitaoka 120a6e
    lx = lv;
Shinya Kitaoka 120a6e
    ly = lu;
Shinya Kitaoka 120a6e
  } else {
Shinya Kitaoka 120a6e
    lx = lu;
Shinya Kitaoka 120a6e
    ly = lv;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  ?D 53
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
      bufin  = rin->buffer;
Shinya Kitaoka 120a6e
  bytewrapin = (rin->wrap + 7) >> 3;
Shinya Kitaoka 120a6e
  bitoffsin  = rin->bit_offs;
Shinya Kitaoka 120a6e
  bufout     = rout->buffer;
Shinya Kitaoka 120a6e
  wrapout    = rout->wrap;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  dudx = 0;
Shinya Kitaoka 120a6e
  dudy = 0;
Shinya Kitaoka 120a6e
  dvdx = 0;
Shinya Kitaoka 120a6e
  dvdy = 0;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  switch ((mirror << 2) + ninety) {
Shinya Kitaoka 120a6e
    CASE(0 << 2) + 0 : u00 = u1;
Shinya Kitaoka 120a6e
    v00                    = v1;
Shinya Kitaoka 120a6e
    dudx                   = 1;
Shinya Kitaoka 120a6e
    dvdy                   = 1;
Shinya Kitaoka 120a6e
    CASE(0 << 2) + 1 : u00 = u1;
Shinya Kitaoka 120a6e
    v00                    = v1 + sv;
Shinya Kitaoka 120a6e
    dudy                   = 1;
Shinya Kitaoka 120a6e
    dvdx                   = -1;
Shinya Kitaoka 120a6e
    CASE(0 << 2) + 2 : u00 = u1 + su;
Shinya Kitaoka 120a6e
    v00                    = v1 + sv;
Shinya Kitaoka 120a6e
    dudx                   = -1;
Shinya Kitaoka 120a6e
    dvdy                   = -1;
Shinya Kitaoka 120a6e
    CASE(0 << 2) + 3 : u00 = u1 + su;
Shinya Kitaoka 120a6e
    v00                    = v1;
Shinya Kitaoka 120a6e
    dudy                   = -1;
Shinya Kitaoka 120a6e
    dvdx                   = 1;
Shinya Kitaoka 120a6e
    CASE(1 << 2) + 0 : u00 = u1 + su;
Shinya Kitaoka 120a6e
    v00                    = v1;
Shinya Kitaoka 120a6e
    dudx                   = -1;
Shinya Kitaoka 120a6e
    dvdy                   = 1;
Shinya Kitaoka 120a6e
    CASE(1 << 2) + 1 : u00 = u1 + su;
Shinya Kitaoka 120a6e
    v00                    = v1 + sv;
Shinya Kitaoka 120a6e
    dudy                   = -1;
Shinya Kitaoka 120a6e
    dvdx                   = -1;
Shinya Kitaoka 120a6e
    CASE(1 << 2) + 2 : u00 = u1;
Shinya Kitaoka 120a6e
    v00                    = v1 + sv;
Shinya Kitaoka 120a6e
    dudx                   = 1;
Shinya Kitaoka 120a6e
    dvdy                   = -1;
Shinya Kitaoka 120a6e
    CASE(1 << 2) + 3 : u00 = u1;
Shinya Kitaoka 120a6e
    v00                    = v1;
Shinya Kitaoka 120a6e
    dudy                   = 1;
Shinya Kitaoka 120a6e
    dvdx                   = 1;
Shinya Kitaoka 120a6e
  DEFAULT:
Shinya Kitaoka 120a6e
    assert(FALSE);
Shinya Kitaoka 120a6e
    u00 = v00 = dudy = dvdx = 0;
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  if (dudx)
Shinya Kitaoka 120a6e
    for (u0 = u00, v0 = v00, y = newy; y < newy + ly; v0 += dvdy, y++) {
Shinya Kitaoka 120a6e
      u      = u0;
Shinya Kitaoka 120a6e
      v      = v0;
Shinya Kitaoka 120a6e
      pixout = bufout + newx + y * wrapout;
Shinya Kitaoka 120a6e
      for (x = newx; x < newx + lx; u += dudx, x++) {
Shinya Kitaoka 120a6e
        if (GET_BIT(u, v, bufin, bytewrapin, bitoffsin))
Shinya Kitaoka 120a6e
          *pixout++ = value_for_1;
Shinya Kitaoka 120a6e
        else
Shinya Kitaoka 120a6e
          *pixout++ = value_for_0;
Shinya Kitaoka 120a6e
      }
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
  else
Shinya Kitaoka 120a6e
    for (u0 = u00, v0 = v00, y = newy; y < newy + ly; u0 += dudy, y++) {
Shinya Kitaoka 120a6e
      u      = u0;
Shinya Kitaoka 120a6e
      v      = v0;
Shinya Kitaoka 120a6e
      pixout = bufout + newx + y * wrapout;
Shinya Kitaoka 120a6e
      for (x = newx; x < newx + lx; v += dvdx, x++) {
Shinya Kitaoka 120a6e
        ?E 53
Toshihiro Shimizu 890ddd
?I 53
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
            bufin  = rin->buffer;
Shinya Kitaoka 120a6e
        bytewrapin = (rin->wrap + 7) >> 3;
Shinya Kitaoka 120a6e
        bitoffsin  = rin->bit_offs;
Shinya Kitaoka 120a6e
        bufout     = rout->buffer;
Shinya Kitaoka 120a6e
        wrapout    = rout->wrap;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        dudx = 0;
Shinya Kitaoka 120a6e
        dudy = 0;
Shinya Kitaoka 120a6e
        dvdx = 0;
Shinya Kitaoka 120a6e
        dvdy = 0;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        switch ((mirror << 2) + ninety) {
Shinya Kitaoka 120a6e
          CASE(0 << 2) + 0 : u00 = u1;
Shinya Kitaoka 120a6e
          v00                    = v1;
Shinya Kitaoka 120a6e
          dudx                   = 1;
Shinya Kitaoka 120a6e
          dvdy                   = 1;
Shinya Kitaoka 120a6e
          CASE(0 << 2) + 1 : u00 = u1;
Shinya Kitaoka 120a6e
          v00                    = v1 + sv;
Shinya Kitaoka 120a6e
          dudy                   = 1;
Shinya Kitaoka 120a6e
          dvdx                   = -1;
Shinya Kitaoka 120a6e
          CASE(0 << 2) + 2 : u00 = u1 + su;
Shinya Kitaoka 120a6e
          v00                    = v1 + sv;
Shinya Kitaoka 120a6e
          dudx                   = -1;
Shinya Kitaoka 120a6e
          dvdy                   = -1;
Shinya Kitaoka 120a6e
          CASE(0 << 2) + 3 : u00 = u1 + su;
Shinya Kitaoka 120a6e
          v00                    = v1;
Shinya Kitaoka 120a6e
          dudy                   = -1;
Shinya Kitaoka 120a6e
          dvdx                   = 1;
Shinya Kitaoka 120a6e
          CASE(1 << 2) + 0 : u00 = u1 + su;
Shinya Kitaoka 120a6e
          v00                    = v1;
Shinya Kitaoka 120a6e
          dudx                   = -1;
Shinya Kitaoka 120a6e
          dvdy                   = 1;
Shinya Kitaoka 120a6e
          CASE(1 << 2) + 1 : u00 = u1 + su;
Shinya Kitaoka 120a6e
          v00                    = v1 + sv;
Shinya Kitaoka 120a6e
          dudy                   = -1;
Shinya Kitaoka 120a6e
          dvdx                   = -1;
Shinya Kitaoka 120a6e
          CASE(1 << 2) + 2 : u00 = u1;
Shinya Kitaoka 120a6e
          v00                    = v1 + sv;
Shinya Kitaoka 120a6e
          dudx                   = 1;
Shinya Kitaoka 120a6e
          dvdy                   = -1;
Shinya Kitaoka 120a6e
          CASE(1 << 2) + 3 : u00 = u1;
Shinya Kitaoka 120a6e
          v00                    = v1;
Shinya Kitaoka 120a6e
          dudy                   = 1;
Shinya Kitaoka 120a6e
          dvdx                   = 1;
Shinya Kitaoka 120a6e
          ?D 78 DEFAULT : assert(FALSE);
Shinya Kitaoka 120a6e
          u00 = v00 = dudy = dvdx = 0;
Shinya Kitaoka 120a6e
          ?E 78
Toshihiro Shimizu 890ddd
?I 78 DEFAULT : abort();
Shinya Kitaoka 120a6e
          u00 = v00 = dudy = dvdx = 0;
Shinya Kitaoka 120a6e
          ?E 78
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        if (dudx)
Shinya Kitaoka 120a6e
          for (u0 = u00, v0 = v00, y = newy; y < newy + ly; v0 += dvdy, y++) {
Shinya Kitaoka 120a6e
            u      = u0;
Shinya Kitaoka 120a6e
            v      = v0;
Shinya Kitaoka 120a6e
            pixout = bufout + newx + y * wrapout;
Shinya Kitaoka 120a6e
            for (x = newx; x < newx + lx; u += dudx, x++) {
Shinya Kitaoka 120a6e
              if (GET_BIT(u, v, bufin, bytewrapin, bitoffsin))
Shinya Kitaoka 120a6e
                *pixout++ = value_for_1;
Shinya Kitaoka 120a6e
              else
Shinya Kitaoka 120a6e
                *pixout++ = value_for_0;
Shinya Kitaoka 120a6e
            }
Shinya Kitaoka 120a6e
          }
Shinya Kitaoka 120a6e
        else
Shinya Kitaoka 120a6e
          for (u0 = u00, v0 = v00, y = newy; y < newy + ly; u0 += dudy, y++) {
Shinya Kitaoka 120a6e
            u      = u0;
Shinya Kitaoka 120a6e
            v      = v0;
Shinya Kitaoka 120a6e
            pixout = bufout + newx + y * wrapout;
Shinya Kitaoka 120a6e
            for (x = newx; x < newx + lx; v += dvdx, x++) {
Shinya Kitaoka 120a6e
              ?E 53 if (GET_BIT(u, v, bufin, bytewrapin, bitoffsin)) *pixout++ =
Shinya Kitaoka 120a6e
                  value_for_1;
Shinya Kitaoka 120a6e
              else *pixout++ = value_for_0;
Shinya Kitaoka 120a6e
            }
Shinya Kitaoka 120a6e
          }
Shinya Kitaoka 120a6e
        ?D 55
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
#ifdef DEBUG
Shinya Kitaoka 120a6e
            STW_STOP(0) STW_PRINT(stdout)
Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd
?E 55
Shinya Kitaoka 120a6e
      }
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
      /*---------------------------------------------------------------------------*/
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
      ?I 62 static void rop_zoom_out_90_bw_rgbm(
Shinya Kitaoka 120a6e
          RASTER * rin, RASTER * rout, int x1, int y1, int x2, int y2, int newx,
Shinya Kitaoka 120a6e
          int newy, int abs_zoom_level, int mirror, int ninety) {
Shinya Kitaoka 120a6e
        UCHAR *bufin;
Shinya Kitaoka 120a6e
        int val_0, val_1, tmp;
Shinya Kitaoka 120a6e
        LPIXEL *bufout, *rowout, *pixout, valout;
Shinya Kitaoka 120a6e
        int bitrowin, bytewrapin, bitwrapin, wrapout, bitin, bit, bit_offs,
Shinya Kitaoka 120a6e
            startbit;
Shinya Kitaoka 120a6e
        int u1, v1, u2, v2;
Shinya Kitaoka 120a6e
        int u, v, lu, lv, startu, startv;
Shinya Kitaoka 120a6e
        int p, q, lp, lq, s, t; /* s=p+q, t=p-q */
Shinya Kitaoka 120a6e
        int dudp, dvdp, dudq, dvdq;
Shinya Kitaoka 120a6e
        int dinbitsdp, dinbitsdq, dinbitsds, dinbitsdt;
Shinya Kitaoka 120a6e
        int plast, qlast, prest, qrest, i, j;
Shinya Kitaoka 120a6e
        int factor, fac_fac_2_bits;
Shinya Kitaoka 120a6e
        int fac_fac, qrest_fac, fac_prest, qrest_prest;
Shinya Kitaoka 120a6e
        int fac_fac_2, qrest_fac_2, fac_prest_2, qrest_prest_2;
Shinya Kitaoka 120a6e
        int fac_fac_4;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        mirror &= 1;
Shinya Kitaoka 120a6e
        ninety &= 3;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        if (!ninety && !mirror) {
Shinya Kitaoka 120a6e
          rop_zoom_out(rin, rout, x1, y1, x2, y2, newx, newy, abs_zoom_level);
Shinya Kitaoka 120a6e
          return;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        if (rin->type == RAS_WB) {
Shinya Kitaoka 120a6e
          val_0 = 0xff;
Shinya Kitaoka 120a6e
          val_1 = 0x00;
Shinya Kitaoka 120a6e
        } else {
Shinya Kitaoka 120a6e
          val_0 = 0x00;
Shinya Kitaoka 120a6e
          val_1 = 0xff;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        u1 = x1;
Shinya Kitaoka 120a6e
        v1 = y1;
Shinya Kitaoka 120a6e
        u2 = x2;
Shinya Kitaoka 120a6e
        v2 = y2;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        lu = u2 - u1 + 1;
Shinya Kitaoka 120a6e
        lv = v2 - v1 + 1;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        if (ninety & 1) {
Shinya Kitaoka 120a6e
          lp = lv;
Shinya Kitaoka 120a6e
          lq = lu;
Shinya Kitaoka 120a6e
        } else {
Shinya Kitaoka 120a6e
          lp = lu;
Shinya Kitaoka 120a6e
          lq = lv;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
        factor         = 1 << abs_zoom_level;
Shinya Kitaoka 120a6e
        prest          = lp & (factor - 1);
Shinya Kitaoka 120a6e
        qrest          = lq & (factor - 1);
Shinya Kitaoka 120a6e
        plast          = lp - prest;
Shinya Kitaoka 120a6e
        qlast          = lq - qrest;
Shinya Kitaoka 120a6e
        fac_fac        = factor * factor;
Shinya Kitaoka 120a6e
        fac_fac_2      = fac_fac >> 1;
Shinya Kitaoka 120a6e
        fac_fac_4      = fac_fac >> 2;
Shinya Kitaoka 120a6e
        fac_fac_2_bits = 2 * abs_zoom_level - 1;
Shinya Kitaoka 120a6e
        qrest_fac      = qrest * factor;
Shinya Kitaoka 120a6e
        qrest_fac_2    = qrest_fac >> 1;
Shinya Kitaoka 120a6e
        fac_prest      = factor * prest;
Shinya Kitaoka 120a6e
        fac_prest_2    = fac_prest >> 1;
Shinya Kitaoka 120a6e
        qrest_prest    = qrest * prest;
Shinya Kitaoka 120a6e
        qrest_prest_2  = qrest_prest >> 1;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        bufin      = rin->buffer;
Shinya Kitaoka 120a6e
        bytewrapin = (rin->wrap + 7) >> 3;
Shinya Kitaoka 120a6e
        bitwrapin  = bytewrapin << 3;
Shinya Kitaoka 120a6e
        bit_offs   = rin->bit_offs;
Shinya Kitaoka 120a6e
        bufout     = rout->buffer;
Shinya Kitaoka 120a6e
        wrapout    = rout->wrap;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        switch ((mirror << 2) + ninety) {
Shinya Kitaoka 120a6e
          CASE(0 << 2) + 0 : dudp = 1;
Shinya Kitaoka 120a6e
          dvdp                    = 0;
Shinya Kitaoka 120a6e
          dudq                    = 0;
Shinya Kitaoka 120a6e
          dvdq                    = 1;
Shinya Kitaoka 120a6e
          startu                  = u1;
Shinya Kitaoka 120a6e
          startv                  = v1;
Shinya Kitaoka 120a6e
          CASE(0 << 2) + 1 : dudp = 0;
Shinya Kitaoka 120a6e
          dvdp                    = -1;
Shinya Kitaoka 120a6e
          dudq                    = 1;
Shinya Kitaoka 120a6e
          dvdq                    = 0;
Shinya Kitaoka 120a6e
          startu                  = u1;
Shinya Kitaoka 120a6e
          startv                  = v2;
Shinya Kitaoka 120a6e
          CASE(0 << 2) + 2 : dudp = -1;
Shinya Kitaoka 120a6e
          dvdp                    = 0;
Shinya Kitaoka 120a6e
          dudq                    = 0;
Shinya Kitaoka 120a6e
          dvdq                    = -1;
Shinya Kitaoka 120a6e
          startu                  = u2;
Shinya Kitaoka 120a6e
          startv                  = v2;
Shinya Kitaoka 120a6e
          CASE(0 << 2) + 3 : dudp = 0;
Shinya Kitaoka 120a6e
          dvdp                    = 1;
Shinya Kitaoka 120a6e
          dudq                    = -1;
Shinya Kitaoka 120a6e
          dvdq                    = 0;
Shinya Kitaoka 120a6e
          startu                  = u2;
Shinya Kitaoka 120a6e
          startv                  = v1;
Shinya Kitaoka 120a6e
          CASE(1 << 2) + 0 : dudp = -1;
Shinya Kitaoka 120a6e
          dvdp                    = 0;
Shinya Kitaoka 120a6e
          dudq                    = 0;
Shinya Kitaoka 120a6e
          dvdq                    = 1;
Shinya Kitaoka 120a6e
          startu                  = u2;
Shinya Kitaoka 120a6e
          startv                  = v1;
Shinya Kitaoka 120a6e
          CASE(1 << 2) + 1 : dudp = 0;
Shinya Kitaoka 120a6e
          dvdp                    = -1;
Shinya Kitaoka 120a6e
          dudq                    = -1;
Shinya Kitaoka 120a6e
          dvdq                    = 0;
Shinya Kitaoka 120a6e
          startu                  = u2;
Shinya Kitaoka 120a6e
          startv                  = v2;
Shinya Kitaoka 120a6e
          CASE(1 << 2) + 2 : dudp = 1;
Shinya Kitaoka 120a6e
          dvdp                    = 0;
Shinya Kitaoka 120a6e
          dudq                    = 0;
Shinya Kitaoka 120a6e
          dvdq                    = -1;
Shinya Kitaoka 120a6e
          startu                  = u1;
Shinya Kitaoka 120a6e
          startv                  = v2;
Shinya Kitaoka 120a6e
          CASE(1 << 2) + 3 : dudp = 0;
Shinya Kitaoka 120a6e
          dvdp                    = 1;
Shinya Kitaoka 120a6e
          dudq                    = 1;
Shinya Kitaoka 120a6e
          dvdq                    = 0;
Shinya Kitaoka 120a6e
          startu                  = u1;
Shinya Kitaoka 120a6e
          startv                  = v1;
Shinya Kitaoka 120a6e
        DEFAULT:
Shinya Kitaoka 120a6e
          ?D 78 assert(FALSE);
Shinya Kitaoka 120a6e
          dudp = dvdp = dudq = dvdq = startu = startv = 0;
Shinya Kitaoka 120a6e
          ?E 78
Shinya Kitaoka 120a6e
?I 78 abort();
Shinya Kitaoka 120a6e
          dudp = dvdp = dudq = dvdq = startu = startv = 0;
Shinya Kitaoka 120a6e
          ?E 78
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        dinbitsdp = dudp + bitwrapin * dvdp;
Shinya Kitaoka 120a6e
        dinbitsdq = dudq + bitwrapin * dvdq;
Shinya Kitaoka 120a6e
        dinbitsds = dinbitsdp + dinbitsdq;
Shinya Kitaoka 120a6e
        dinbitsdt = dinbitsdp - dinbitsdq;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        bitrowin = bit_offs + startu + startv * bitwrapin;
Shinya Kitaoka 120a6e
        rowout   = (LPIXEL *)rout->buffer + newx + newy * wrapout;
Shinya Kitaoka 120a6e
        valout.m = 0xff;
Shinya Kitaoka 120a6e
        for (q = 0; q < qlast; q += factor) {
Shinya Kitaoka 120a6e
          bitin  = bitrowin;
Shinya Kitaoka 120a6e
          pixout = rowout;
Shinya Kitaoka 120a6e
          for (p = 0; p < plast; p += factor) {
Shinya Kitaoka 120a6e
            tmp = 0;
Shinya Kitaoka 120a6e
            bit = bitin;
Shinya Kitaoka 120a6e
            for (j = 0; j < factor; j += 2) {
Shinya Kitaoka 120a6e
              for (i = 0; i < factor; i += 2) {
Shinya Kitaoka 120a6e
                tmp += GET_BWBIT(bit, bufin);
Shinya Kitaoka 120a6e
                bit += dinbitsds;
Shinya Kitaoka 120a6e
                tmp += GET_BWBIT(bit, bufin);
Shinya Kitaoka 120a6e
                bit += dinbitsdt;
Shinya Kitaoka 120a6e
              }
Shinya Kitaoka 120a6e
              bit += 2 * dinbitsdq - factor * dinbitsdp;
Shinya Kitaoka 120a6e
            }
Shinya Kitaoka 120a6e
            tmp      = tmp * val_1 + (fac_fac_2 - tmp) * val_0;
Shinya Kitaoka 120a6e
            tmp      = (tmp + fac_fac_4) >> fac_fac_2_bits;
Shinya Kitaoka 120a6e
            valout.r = valout.g = valout.b = tmp;
Shinya Kitaoka 120a6e
            *pixout++                      = valout;
Shinya Kitaoka 120a6e
            bitin += factor * dinbitsdp;
Shinya Kitaoka 120a6e
          }
Shinya Kitaoka 120a6e
          if (prest) {
Shinya Kitaoka 120a6e
            tmp = 0;
Shinya Kitaoka 120a6e
            for (j = 0; j < factor; j++)
Shinya Kitaoka 120a6e
              for (i = 0; i < prest; i++) {
Shinya Kitaoka 120a6e
                tmp += GET_BWBIT(bitin + i * dinbitsdp + j * dinbitsdq, bufin);
Shinya Kitaoka 120a6e
              }
Shinya Kitaoka 120a6e
            tmp      = tmp * val_1 + (fac_prest - tmp) * val_0;
Shinya Kitaoka 120a6e
            tmp      = (tmp + fac_prest_2) / fac_prest;
Shinya Kitaoka 120a6e
            valout.r = valout.g = valout.b = tmp;
Shinya Kitaoka 120a6e
            *pixout++                      = valout;
Shinya Kitaoka 120a6e
          }
Shinya Kitaoka 120a6e
          bitrowin += factor * dinbitsdq;
Shinya Kitaoka 120a6e
          rowout += wrapout;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
        if (qrest) {
Shinya Kitaoka 120a6e
          bitin  = bitrowin;
Shinya Kitaoka 120a6e
          pixout = rowout;
Shinya Kitaoka 120a6e
          for (p = 0; p < plast; p += factor) {
Shinya Kitaoka 120a6e
            tmp = 0;
Shinya Kitaoka 120a6e
            for (j = 0; j < qrest; j++)
Shinya Kitaoka 120a6e
              for (i = 0; i < factor; i++) {
Shinya Kitaoka 120a6e
                tmp += GET_BWBIT(bitin + i * dinbitsdp + j * dinbitsdq, bufin);
Shinya Kitaoka 120a6e
              }
Shinya Kitaoka 120a6e
            tmp      = tmp * val_1 + (qrest_fac - tmp) * val_0;
Shinya Kitaoka 120a6e
            tmp      = (tmp + qrest_fac_2) / qrest_fac;
Shinya Kitaoka 120a6e
            valout.r = valout.g = valout.b = tmp;
Shinya Kitaoka 120a6e
            *pixout++                      = valout;
Shinya Kitaoka 120a6e
            bitin += factor * dinbitsdp;
Shinya Kitaoka 120a6e
          }
Shinya Kitaoka 120a6e
          if (prest) {
Shinya Kitaoka 120a6e
            tmp = 0;
Shinya Kitaoka 120a6e
            for (j = 0; j < qrest; j++)
Shinya Kitaoka 120a6e
              for (i = 0; i < prest; i++) {
Shinya Kitaoka 120a6e
                tmp += GET_BWBIT(bitin + i * dinbitsdp + j * dinbitsdq, bufin);
Shinya Kitaoka 120a6e
              }
Shinya Kitaoka 120a6e
            tmp      = tmp * val_1 + (qrest_prest - tmp) * val_0;
Shinya Kitaoka 120a6e
            tmp      = (tmp + qrest_prest_2) / qrest_prest;
Shinya Kitaoka 120a6e
            valout.r = valout.g = valout.b = tmp;
Shinya Kitaoka 120a6e
            *pixout++                      = valout;
Shinya Kitaoka 120a6e
          }
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
      }
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
      /*---------------------------------------------------------------------------*/
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
      static void rop_zoom_out_90_bw_rgb16(
Shinya Kitaoka 120a6e
          RASTER * rin, RASTER * rout, int x1, int y1, int x2, int y2, int newx,
Shinya Kitaoka 120a6e
          int newy, int abs_zoom_level, int mirror, int ninety) {
Shinya Kitaoka 120a6e
        UCHAR *bufin;
Shinya Kitaoka 120a6e
        int val_0, val_1, tmp;
Shinya Kitaoka 120a6e
        USHORT *bufout, *rowout, *pixout;
Shinya Kitaoka 120a6e
        int bitrowin, bytewrapin, bitwrapin, wrapout, bitin, bit, bit_offs,
Shinya Kitaoka 120a6e
            startbit;
Shinya Kitaoka 120a6e
        int u1, v1, u2, v2;
Shinya Kitaoka 120a6e
        int u, v, lu, lv, startu, startv;
Shinya Kitaoka 120a6e
        int p, q, lp, lq, s, t; /* s=p+q, t=p-q */
Shinya Kitaoka 120a6e
        int dudp, dvdp, dudq, dvdq;
Shinya Kitaoka 120a6e
        int dinbitsdp, dinbitsdq, dinbitsds, dinbitsdt;
Shinya Kitaoka 120a6e
        int plast, qlast, prest, qrest, i, j;
Shinya Kitaoka 120a6e
        int factor, fac_fac_2_bits;
Shinya Kitaoka 120a6e
        int fac_fac, qrest_fac, fac_prest, qrest_prest;
Shinya Kitaoka 120a6e
        int fac_fac_2, qrest_fac_2, fac_prest_2, qrest_prest_2;
Shinya Kitaoka 120a6e
        int fac_fac_4;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        mirror &= 1;
Shinya Kitaoka 120a6e
        ninety &= 3;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        if (!ninety && !mirror) {
Shinya Kitaoka 120a6e
          rop_zoom_out(rin, rout, x1, y1, x2, y2, newx, newy, abs_zoom_level);
Shinya Kitaoka 120a6e
          return;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        if (rin->type == RAS_WB) {
Shinya Kitaoka 120a6e
          val_0 = 0xff;
Shinya Kitaoka 120a6e
          val_1 = 0x00;
Shinya Kitaoka 120a6e
        } else {
Shinya Kitaoka 120a6e
          val_0 = 0x00;
Shinya Kitaoka 120a6e
          val_1 = 0xff;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        u1 = x1;
Shinya Kitaoka 120a6e
        v1 = y1;
Shinya Kitaoka 120a6e
        u2 = x2;
Shinya Kitaoka 120a6e
        v2 = y2;
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
        lu = u2 - u1 + 1;
Shinya Kitaoka 120a6e
        lv = v2 - v1 + 1;
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
        if (ninety & 1) {
Shinya Kitaoka 120a6e
          lp = lv;
Shinya Kitaoka 120a6e
          lq = lu;
Shinya Kitaoka 120a6e
        } else {
Shinya Kitaoka 120a6e
          lp = lu;
Shinya Kitaoka 120a6e
          lq = lv;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
        factor         = 1 << abs_zoom_level;
Shinya Kitaoka 120a6e
        prest          = lp & (factor - 1);
Shinya Kitaoka 120a6e
        qrest          = lq & (factor - 1);
Shinya Kitaoka 120a6e
        plast          = lp - prest;
Shinya Kitaoka 120a6e
        qlast          = lq - qrest;
Shinya Kitaoka 120a6e
        fac_fac        = factor * factor;
Shinya Kitaoka 120a6e
        fac_fac_2      = fac_fac >> 1;
Shinya Kitaoka 120a6e
        fac_fac_4      = fac_fac >> 2;
Shinya Kitaoka 120a6e
        fac_fac_2_bits = 2 * abs_zoom_level - 1;
Shinya Kitaoka 120a6e
        qrest_fac      = qrest * factor;
Shinya Kitaoka 120a6e
        qrest_fac_2    = qrest_fac >> 1;
Shinya Kitaoka 120a6e
        fac_prest      = factor * prest;
Shinya Kitaoka 120a6e
        fac_prest_2    = fac_prest >> 1;
Shinya Kitaoka 120a6e
        qrest_prest    = qrest * prest;
Shinya Kitaoka 120a6e
        qrest_prest_2  = qrest_prest >> 1;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        bufin      = rin->buffer;
Shinya Kitaoka 120a6e
        bytewrapin = (rin->wrap + 7) >> 3;
Shinya Kitaoka 120a6e
        bitwrapin  = bytewrapin << 3;
Shinya Kitaoka 120a6e
        bit_offs   = rin->bit_offs;
Shinya Kitaoka 120a6e
        bufout     = rout->buffer;
Shinya Kitaoka 120a6e
        wrapout    = rout->wrap;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        switch ((mirror << 2) + ninety) {
Shinya Kitaoka 120a6e
          CASE(0 << 2) + 0 : dudp = 1;
Shinya Kitaoka 120a6e
          dvdp                    = 0;
Shinya Kitaoka 120a6e
          dudq                    = 0;
Shinya Kitaoka 120a6e
          dvdq                    = 1;
Shinya Kitaoka 120a6e
          startu                  = u1;
Shinya Kitaoka 120a6e
          startv                  = v1;
Shinya Kitaoka 120a6e
          CASE(0 << 2) + 1 : dudp = 0;
Shinya Kitaoka 120a6e
          dvdp                    = -1;
Shinya Kitaoka 120a6e
          dudq                    = 1;
Shinya Kitaoka 120a6e
          dvdq                    = 0;
Shinya Kitaoka 120a6e
          startu                  = u1;
Shinya Kitaoka 120a6e
          startv                  = v2;
Shinya Kitaoka 120a6e
          CASE(0 << 2) + 2 : dudp = -1;
Shinya Kitaoka 120a6e
          dvdp                    = 0;
Shinya Kitaoka 120a6e
          dudq                    = 0;
Shinya Kitaoka 120a6e
          dvdq                    = -1;
Shinya Kitaoka 120a6e
          startu                  = u2;
Shinya Kitaoka 120a6e
          startv                  = v2;
Shinya Kitaoka 120a6e
          CASE(0 << 2) + 3 : dudp = 0;
Shinya Kitaoka 120a6e
          dvdp                    = 1;
Shinya Kitaoka 120a6e
          dudq                    = -1;
Shinya Kitaoka 120a6e
          dvdq                    = 0;
Shinya Kitaoka 120a6e
          startu                  = u2;
Shinya Kitaoka 120a6e
          startv                  = v1;
Shinya Kitaoka 120a6e
          CASE(1 << 2) + 0 : dudp = -1;
Shinya Kitaoka 120a6e
          dvdp                    = 0;
Shinya Kitaoka 120a6e
          dudq                    = 0;
Shinya Kitaoka 120a6e
          dvdq                    = 1;
Shinya Kitaoka 120a6e
          startu                  = u2;
Shinya Kitaoka 120a6e
          startv                  = v1;
Shinya Kitaoka 120a6e
          CASE(1 << 2) + 1 : dudp = 0;
Shinya Kitaoka 120a6e
          dvdp                    = -1;
Shinya Kitaoka 120a6e
          dudq                    = -1;
Shinya Kitaoka 120a6e
          dvdq                    = 0;
Shinya Kitaoka 120a6e
          startu                  = u2;
Shinya Kitaoka 120a6e
          startv                  = v2;
Shinya Kitaoka 120a6e
          CASE(1 << 2) + 2 : dudp = 1;
Shinya Kitaoka 120a6e
          dvdp                    = 0;
Shinya Kitaoka 120a6e
          dudq                    = 0;
Shinya Kitaoka 120a6e
          dvdq                    = -1;
Shinya Kitaoka 120a6e
          startu                  = u1;
Shinya Kitaoka 120a6e
          startv                  = v2;
Shinya Kitaoka 120a6e
          CASE(1 << 2) + 3 : dudp = 0;
Shinya Kitaoka 120a6e
          dvdp                    = 1;
Shinya Kitaoka 120a6e
          dudq                    = 1;
Shinya Kitaoka 120a6e
          dvdq                    = 0;
Shinya Kitaoka 120a6e
          startu                  = u1;
Shinya Kitaoka 120a6e
          startv                  = v1;
Shinya Kitaoka 120a6e
        DEFAULT:
Shinya Kitaoka 120a6e
          ?D 78 assert(FALSE);
Shinya Kitaoka 120a6e
          dudp = dvdp = dudq = dvdq = startu = startv = 0;
Shinya Kitaoka 120a6e
          ?E 78
Toshihiro Shimizu 890ddd
?I 78 abort();
Shinya Kitaoka 120a6e
          dudp = dvdp = dudq = dvdq = startu = startv = 0;
Shinya Kitaoka 120a6e
          ?E 78
Shinya Kitaoka 120a6e
        }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
        dinbitsdp = dudp + bitwrapin * dvdp;
Shinya Kitaoka 120a6e
        dinbitsdq = dudq + bitwrapin * dvdq;
Shinya Kitaoka 120a6e
        dinbitsds = dinbitsdp + dinbitsdq;
Shinya Kitaoka 120a6e
        dinbitsdt = dinbitsdp - dinbitsdq;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        bitrowin = bit_offs + startu + startv * bitwrapin;
Shinya Kitaoka 120a6e
        rowout   = (USHORT *)rout->buffer + newx + newy * wrapout;
Shinya Kitaoka 120a6e
        for (q = 0; q < qlast; q += factor) {
Shinya Kitaoka 120a6e
          bitin  = bitrowin;
Shinya Kitaoka 120a6e
          pixout = rowout;
Shinya Kitaoka 120a6e
          for (p = 0; p < plast; p += factor) {
Shinya Kitaoka 120a6e
            tmp = 0;
Shinya Kitaoka 120a6e
            bit = bitin;
Shinya Kitaoka 120a6e
            for (j = 0; j < factor; j += 2) {
Shinya Kitaoka 120a6e
              for (i = 0; i < factor; i += 2) {
Shinya Kitaoka 120a6e
                tmp += GET_BWBIT(bit, bufin);
Shinya Kitaoka 120a6e
                bit += dinbitsds;
Shinya Kitaoka 120a6e
                tmp += GET_BWBIT(bit, bufin);
Shinya Kitaoka 120a6e
                bit += dinbitsdt;
Shinya Kitaoka 120a6e
              }
Shinya Kitaoka 120a6e
              bit += 2 * dinbitsdq - factor * dinbitsdp;
Shinya Kitaoka 120a6e
            }
Shinya Kitaoka 120a6e
            tmp       = tmp * val_1 + (fac_fac_2 - tmp) * val_0;
Shinya Kitaoka 120a6e
            tmp       = (tmp + fac_fac_4) >> fac_fac_2_bits;
Shinya Kitaoka 120a6e
            *pixout++ = PIX_RGB16_FROM_BYTES(tmp, tmp, tmp);
Shinya Kitaoka 120a6e
            bitin += factor * dinbitsdp;
Shinya Kitaoka 120a6e
          }
Shinya Kitaoka 120a6e
          if (prest) {
Shinya Kitaoka 120a6e
            tmp = 0;
Shinya Kitaoka 120a6e
            for (j = 0; j < factor; j++)
Shinya Kitaoka 120a6e
              for (i = 0; i < prest; i++) {
Shinya Kitaoka 120a6e
                tmp += GET_BWBIT(bitin + i * dinbitsdp + j * dinbitsdq, bufin);
Shinya Kitaoka 120a6e
              }
Shinya Kitaoka 120a6e
            tmp       = tmp * val_1 + (fac_prest - tmp) * val_0;
Shinya Kitaoka 120a6e
            tmp       = (tmp + fac_prest_2) / fac_prest;
Shinya Kitaoka 120a6e
            *pixout++ = PIX_RGB16_FROM_BYTES(tmp, tmp, tmp);
Shinya Kitaoka 120a6e
          }
Shinya Kitaoka 120a6e
          bitrowin += factor * dinbitsdq;
Shinya Kitaoka 120a6e
          rowout += wrapout;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
        if (qrest) {
Shinya Kitaoka 120a6e
          bitin  = bitrowin;
Shinya Kitaoka 120a6e
          pixout = rowout;
Shinya Kitaoka 120a6e
          for (p = 0; p < plast; p += factor) {
Shinya Kitaoka 120a6e
            tmp = 0;
Shinya Kitaoka 120a6e
            for (j = 0; j < qrest; j++)
Shinya Kitaoka 120a6e
              for (i = 0; i < factor; i++) {
Shinya Kitaoka 120a6e
                tmp += GET_BWBIT(bitin + i * dinbitsdp + j * dinbitsdq, bufin);
Shinya Kitaoka 120a6e
              }
Shinya Kitaoka 120a6e
            tmp       = tmp * val_1 + (qrest_fac - tmp) * val_0;
Shinya Kitaoka 120a6e
            tmp       = (tmp + qrest_fac_2) / qrest_fac;
Shinya Kitaoka 120a6e
            *pixout++ = PIX_RGB16_FROM_BYTES(tmp, tmp, tmp);
Shinya Kitaoka 120a6e
            bitin += factor * dinbitsdp;
Shinya Kitaoka 120a6e
          }
Shinya Kitaoka 120a6e
          if (prest) {
Shinya Kitaoka 120a6e
            tmp = 0;
Shinya Kitaoka 120a6e
            for (j = 0; j < qrest; j++)
Shinya Kitaoka 120a6e
              for (i = 0; i < prest; i++) {
Shinya Kitaoka 120a6e
                tmp += GET_BWBIT(bitin + i * dinbitsdp + j * dinbitsdq, bufin);
Shinya Kitaoka 120a6e
              }
Shinya Kitaoka 120a6e
            tmp       = tmp * val_1 + (qrest_prest - tmp) * val_0;
Shinya Kitaoka 120a6e
            tmp       = (tmp + qrest_prest_2) / qrest_prest;
Shinya Kitaoka 120a6e
            *pixout++ = PIX_RGB16_FROM_BYTES(tmp, tmp, tmp);
Shinya Kitaoka 120a6e
          }
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
      }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
      /*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
      ?E 62 static void rop_copy_90_rgbm(RASTER * rin, RASTER * rout, int x1,
Shinya Kitaoka 120a6e
                                         int y1, int x2, int y2, int newx,
Shinya Kitaoka 120a6e
                                         int newy, int mirror, int ninety) {
Shinya Kitaoka 120a6e
        LPIXEL *bufin, *pixin;
Shinya Kitaoka 120a6e
        LPIXEL *bufout, *pixout;
Shinya Kitaoka 120a6e
        int wrapin, wrapout;
Shinya Kitaoka 120a6e
        int u, v, lu, lv, su, sv, u00, v00, u0, v0, dindx, dudy, dvdy;
Shinya Kitaoka 120a6e
        int x, y, lx, ly;
Shinya Kitaoka 120a6e
        int u1, v1, u2, v2;
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
        mirror &= 1;
Shinya Kitaoka 120a6e
        ninety &= 3;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        if (!ninety && !mirror) {
Shinya Kitaoka 120a6e
          rop_copy(rin, rout, x1, y1, x2, y2, newx, newy);
Shinya Kitaoka 120a6e
          return;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        u1 = x1;
Shinya Kitaoka 120a6e
        v1 = y1;
Shinya Kitaoka 120a6e
        u2 = x2;
Shinya Kitaoka 120a6e
        v2 = y2;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        su = u2 - u1;
Shinya Kitaoka 120a6e
        sv = v2 - v1;
Shinya Kitaoka 120a6e
        lu = u2 - u1 + 1;
Shinya Kitaoka 120a6e
        lv = v2 - v1 + 1;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        if (ninety & 1) {
Shinya Kitaoka 120a6e
          lx = lv;
Shinya Kitaoka 120a6e
          ly = lu;
Shinya Kitaoka 120a6e
        } else {
Shinya Kitaoka 120a6e
          lx = lu;
Shinya Kitaoka 120a6e
          ly = lv;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        bufin   = rin->buffer;
Shinya Kitaoka 120a6e
        wrapin  = rin->wrap;
Shinya Kitaoka 120a6e
        bufout  = rout->buffer;
Shinya Kitaoka 120a6e
        wrapout = rout->wrap;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        dudy = 0;
Shinya Kitaoka 120a6e
        dvdy = 0;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        switch ((mirror << 2) + ninety) {
Shinya Kitaoka 120a6e
          CASE(0 << 2) + 0 : u00 = u1;
Shinya Kitaoka 120a6e
          v00                    = v1;
Shinya Kitaoka 120a6e
          dvdy                   = 1;
Shinya Kitaoka 120a6e
          dindx                  = 1;
Shinya Kitaoka 120a6e
          CASE(0 << 2) + 1 : u00 = u1;
Shinya Kitaoka 120a6e
          v00                    = v1 + sv;
Shinya Kitaoka 120a6e
          dudy                   = 1;
Shinya Kitaoka 120a6e
          dindx                  = -wrapin;
Shinya Kitaoka 120a6e
          CASE(0 << 2) + 2 : u00 = u1 + su;
Shinya Kitaoka 120a6e
          v00                    = v1 + sv;
Shinya Kitaoka 120a6e
          dvdy                   = -1;
Shinya Kitaoka 120a6e
          dindx                  = -1;
Shinya Kitaoka 120a6e
          CASE(0 << 2) + 3 : u00 = u1 + su;
Shinya Kitaoka 120a6e
          v00                    = v1;
Shinya Kitaoka 120a6e
          dudy                   = -1;
Shinya Kitaoka 120a6e
          dindx                  = wrapin;
Shinya Kitaoka 120a6e
          CASE(1 << 2) + 0 : u00 = u1 + su;
Shinya Kitaoka 120a6e
          v00                    = v1;
Shinya Kitaoka 120a6e
          dvdy                   = 1;
Shinya Kitaoka 120a6e
          dindx                  = -1;
Shinya Kitaoka 120a6e
          CASE(1 << 2) + 1 : u00 = u1 + su;
Shinya Kitaoka 120a6e
          v00                    = v1 + sv;
Shinya Kitaoka 120a6e
          dudy                   = -1;
Shinya Kitaoka 120a6e
          dindx                  = -wrapin;
Shinya Kitaoka 120a6e
          CASE(1 << 2) + 2 : u00 = u1;
Shinya Kitaoka 120a6e
          v00                    = v1 + sv;
Shinya Kitaoka 120a6e
          dvdy                   = -1;
Shinya Kitaoka 120a6e
          dindx                  = 1;
Shinya Kitaoka 120a6e
          CASE(1 << 2) + 3 : u00 = u1;
Shinya Kitaoka 120a6e
          v00                    = v1;
Shinya Kitaoka 120a6e
          dudy                   = 1;
Shinya Kitaoka 120a6e
          dindx                  = wrapin;
Shinya Kitaoka 120a6e
          ?D 78 DEFAULT : assert(FALSE);
Shinya Kitaoka 120a6e
          u00 = v00 = dudy = dindx = 0;
Shinya Kitaoka 120a6e
          ?E 78
Toshihiro Shimizu 890ddd
?I 78 DEFAULT : abort();
Shinya Kitaoka 120a6e
          u00 = v00 = dudy = dindx = 0;
Shinya Kitaoka 120a6e
          ?E 78
Shinya Kitaoka 120a6e
        }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
        for (u0 = u00, v0 = v00, y = newy; y < newy + ly;
Shinya Kitaoka 120a6e
             u0 += dudy, v0 += dvdy, y++) {
Shinya Kitaoka 120a6e
          pixin  = bufin + u0 + v0 * wrapin;
Shinya Kitaoka 120a6e
          pixout = bufout + newx + y * wrapout;
Shinya Kitaoka 120a6e
          for (x = newx; x < newx + lx; x++) {
Shinya Kitaoka 120a6e
            *pixout++ = *pixin;
Shinya Kitaoka 120a6e
            pixin += dindx;
Shinya Kitaoka 120a6e
          }
Shinya Kitaoka 120a6e
          ?I 57
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
      }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
      /*---------------------------------------------------------------------------*/
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
      /* vedi sia rop_zoom_out che rop_copy_90
Shinya Kitaoka 120a6e
*/
Shinya Kitaoka 120a6e
      void rop_zoom_out_90(RASTER * rin, RASTER * rout, int x1, int y1, int x2,
Shinya Kitaoka 120a6e
                           int y2, int newx, int newy, int abs_zoom_level,
Shinya Kitaoka 120a6e
                           int mirror, int ninety) {
Shinya Kitaoka 120a6e
        int tmp, newlx, newly;
Shinya Kitaoka 120a6e
        int rasras, factor, abszl;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        abszl  = abs_zoom_level;
Shinya Kitaoka 120a6e
        factor = 1 << abs_zoom_level;
Shinya Kitaoka 120a6e
        if (factor == 1)
Shinya Kitaoka 120a6e
          rop_copy_90(rin, rout, x1, y1, x2, y2, newx, newy, mirror, ninety);
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        /* raddrizzo gli estremi */
Shinya Kitaoka 120a6e
        if (x1 > x2) {
Shinya Kitaoka 120a6e
          tmp = x1;
Shinya Kitaoka 120a6e
          x1  = x2;
Shinya Kitaoka 120a6e
          x2  = tmp;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
        if (y1 > y2) {
Shinya Kitaoka 120a6e
          tmp = y1;
Shinya Kitaoka 120a6e
          y1  = y2;
Shinya Kitaoka 120a6e
          y2  = tmp;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        /* controllo gli sconfinamenti */
Shinya Kitaoka 120a6e
        if (ninety & 1) {
Shinya Kitaoka 120a6e
          newlx = (y2 - y1 + factor) / factor;
Shinya Kitaoka 120a6e
          newly = (x2 - x1 + factor) / factor;
Shinya Kitaoka 120a6e
        } else {
Shinya Kitaoka 120a6e
          newlx = (x2 - x1 + factor) / factor;
Shinya Kitaoka 120a6e
          newly = (y2 - y1 + factor) / factor;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
        if (x1 < 0 || y1 < 0 || x2 >= rin->lx || y2 >= rin->ly || newx < 0 ||
Shinya Kitaoka 120a6e
            newy < 0 || newx + newlx > rout->lx || newy + newly > rout->ly) {
Shinya Kitaoka 120a6e
          printf(
Shinya Kitaoka 120a6e
              "### INTERNAL ERROR - rop_zoom_out; access violation\n"
Shinya Kitaoka 120a6e
              " ((%d,%d)(%d,%d)in(%dx%d)->(%d,%d)in(%dx%d))\n",
Shinya Kitaoka 120a6e
              x1, y1, x2, y2, rin->lx, rin->ly, newx, newy, rout->lx, rout->ly);
Shinya Kitaoka 120a6e
          return;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        rasras = RASRAS(rin->type, rout->type);
Shinya Kitaoka 120a6e
        switch (rasras) {
Shinya Kitaoka 120a6e
          ?I 62 CASE RASRAS(RAS_WB, RAS_RGB16)
Shinya Kitaoka 120a6e
              : __OR RASRAS(RAS_BW, RAS_RGB16)
Shinya Kitaoka 120a6e
              : rop_zoom_out_90_bw_rgb16(rin, rout, x1, y1, x2, y2, newx, newy,
Shinya Kitaoka 120a6e
                                         abszl, mirror, ninety);
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
          CASE RASRAS(RAS_WB, RAS_RGB_)
Shinya Kitaoka 120a6e
              : __OR RASRAS(RAS_WB, RAS_RGBM)
Shinya Kitaoka 120a6e
              : __OR RASRAS(RAS_BW, RAS_RGB_)
Shinya Kitaoka 120a6e
              : __OR RASRAS(RAS_BW, RAS_RGBM)
Shinya Kitaoka 120a6e
              : rop_zoom_out_90_bw_rgbm(rin, rout, x1, y1, x2, y2, newx, newy,
Shinya Kitaoka 120a6e
                                        abszl, mirror, ninety);
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
          ?E 62 CASE RASRAS(RAS_GR8, RAS_RGB16)
Shinya Kitaoka 120a6e
              : rop_zoom_out_90_gr8_rgb16(rin, rout, x1, y1, x2, y2, newx, newy,
Shinya Kitaoka 120a6e
                                          abszl, mirror, ninety);
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
          CASE RASRAS(RAS_GR8, RAS_RGB_)
Shinya Kitaoka 120a6e
              : __OR RASRAS(RAS_GR8, RAS_RGBM)
Shinya Kitaoka 120a6e
              : rop_zoom_out_90_gr8_rgbm(rin, rout, x1, y1, x2, y2, newx, newy,
Shinya Kitaoka 120a6e
                                         abszl,
Toshihiro Shimizu 890ddd
?I 63 mirror, ninety);
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
          CASE RASRAS(RAS_RGB, RAS_RGB16)
Shinya Kitaoka 120a6e
              : rop_zoom_out_90_rgb_rgb16(rin, rout, x1, y1, x2, y2, newx, newy,
Shinya Kitaoka 120a6e
                                          abszl, mirror, ninety);
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
          CASE RASRAS(RAS_RGB, RAS_RGB_)
Shinya Kitaoka 120a6e
              : __OR RASRAS(RAS_RGB, RAS_RGBM)
Shinya Kitaoka 120a6e
              : rop_zoom_out_90_rgb_rgbm(rin, rout, x1, y1, x2, y2, newx, newy,
Shinya Kitaoka 120a6e
                                         abszl,
Toshihiro Shimizu 890ddd
?E 63 mirror, ninety);
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
        DEFAULT:
Shinya Kitaoka 120a6e
          assert(!"rop_zoom_out_90; invalid raster combination");
Shinya Kitaoka 120a6e
          ?E 57
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
      }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
      /*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
      void rop_clear(RASTER * r, int x1, int y1, int x2, int y2) {
Shinya Kitaoka 120a6e
        UCHAR *pix;
Shinya Kitaoka 120a6e
        ?D 89 int l, x, y, tmp, rowsize, wrap, pixbits;
Shinya Kitaoka 120a6e
        ?E 89
Toshihiro Shimizu 890ddd
?I 89 ULONG *row24, *pix24;
Shinya Kitaoka 120a6e
        ?D 93 int lines, x, y, lx, tmp, rowsize, wrap, pixbits;
Shinya Kitaoka 120a6e
        ?E 93
Toshihiro Shimizu 890ddd
?I 93 int lines, x, y, lx, tmp, rowbytes, wrap, bytewrap, pixbits;
Shinya Kitaoka 120a6e
        ?E 93
Toshihiro Shimizu 890ddd
?E 89
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
            if (x1 > x2) {
Shinya Kitaoka 120a6e
          tmp = x1;
Shinya Kitaoka 120a6e
          x1  = x2;
Shinya Kitaoka 120a6e
          x2  = tmp;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
        if (y1 > y2) {
Shinya Kitaoka 120a6e
          tmp = y1;
Shinya Kitaoka 120a6e
          y1  = y2;
Shinya Kitaoka 120a6e
          y2  = tmp;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        /* controllo gli sconfinamenti */
Shinya Kitaoka 120a6e
        if (x1 < 0 || y1 < 0 || x2 - x1 >= r->lx || y2 - y1 >= r->ly) {
Shinya Kitaoka 120a6e
          printf("### INTERNAL ERROR - rop_clear; access violation\n");
Shinya Kitaoka 120a6e
          return;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        pixbits = rop_pixbits(r->type);
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        /* per adesso niente pixel non multipli di 8 bits */
Shinya Kitaoka 120a6e
        if (rop_fillerbits(r->type)) {
Shinya Kitaoka 120a6e
          printf("### INTERNAL ERROR - rop_clear; byte fraction pixels\n");
Shinya Kitaoka 120a6e
          return;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        ?D 93 wrap = (r->wrap * pixbits) >> 3;
Shinya Kitaoka 120a6e
        rowsize    = ((x2 - x1 + 1) * pixbits) >> 3;
Shinya Kitaoka 120a6e
        ?E 93
Shinya Kitaoka 120a6e
?I 93 wrap        = r->wrap;
Shinya Kitaoka 120a6e
        bytewrap   = (wrap * pixbits + 7) >> 3;
Shinya Kitaoka 120a6e
        rowbytes   = ((x2 - x1 + 1) * pixbits) >> 3;
Shinya Kitaoka 120a6e
        ?E 93
Shinya Kitaoka 120a6e
?D 89 pix    = (UCHAR *)r->buffer + (((x1 + y1 * r->wrap) * pixbits) >> 3);
Shinya Kitaoka 120a6e
        l     = y2 - y1 + 1;
Shinya Kitaoka 120a6e
        while (l-- > 0)
Toshihiro Shimizu 890ddd
					?E 89
Shinya Kitaoka 120a6e
?I 89 lx     = x2 - x1 + 1;
Shinya Kitaoka 120a6e
        lines = y2 - y1 + 1;
Shinya Kitaoka 120a6e
        if (r->type == RAS_CM24) {
Shinya Kitaoka 120a6e
          row24 = (ULONG *)r->buffer + x1 + y1 * wrap;
Shinya Kitaoka 120a6e
          while (lines-- > 0) {
Shinya Kitaoka 120a6e
            pix24 = row24;
Shinya Kitaoka 120a6e
            for (x = 0; x < lx; x++) *pix24++ &= 0xff000000;
Shinya Kitaoka 120a6e
            row24 += wrap;
Shinya Kitaoka 120a6e
          }
Shinya Kitaoka 120a6e
        } else {
Shinya Kitaoka 120a6e
          ?D 93 pix = (UCHAR *)r->buffer + (((x1 + y1 * wrap) * pixbits) >> 3);
Shinya Kitaoka 120a6e
          ?E 93
Toshihiro Shimizu 890ddd
?I 93 pix = (UCHAR *)r->buffer + ((x1 * pixbits) >> 3) + y1 * bytewrap;
Shinya Kitaoka 120a6e
          ?E 93 while (lines-- > 0) {
Shinya Kitaoka 120a6e
            ?D 93 memset(pix, 0, rowsize);
Shinya Kitaoka 120a6e
            pix += wrap;
Shinya Kitaoka 120a6e
            ?E 93
Toshihiro Shimizu 890ddd
?I 93 memset(pix, 0, rowbytes);
Shinya Kitaoka 120a6e
            pix += bytewrap;
Shinya Kitaoka 120a6e
            ?E 93
Shinya Kitaoka 120a6e
          }
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
      }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
      /*---------------------------------------------------------------------------*/
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
      void rop_and_extra_bits(RASTER * ras, UCHAR and_mask, int x1, int y1,
Shinya Kitaoka 120a6e
                              int x2, int y2) {
Shinya Kitaoka 120a6e
        int x, y, lx, ly, wrap;
Shinya Kitaoka 120a6e
        ULONG *row24, *pix24, and_mask24;
Shinya Kitaoka 120a6e
        UCHAR *row8, *pix8;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        lx   = x2 - x1 + 1;
Shinya Kitaoka 120a6e
        ly   = y2 - y1 + 1;
Shinya Kitaoka 120a6e
        wrap = ras->wrap;
Shinya Kitaoka 120a6e
        if (ras->type == RAS_CM24) {
Shinya Kitaoka 120a6e
          and_mask24 = (and_mask << 24) | 0xffffff;
Shinya Kitaoka 120a6e
          row24      = (ULONG *)ras->buffer + x1 + y1 * wrap;
Shinya Kitaoka 120a6e
          for (y = 0; y < ly; y++, row24 += wrap) {
Shinya Kitaoka 120a6e
            pix24 = row24;
Shinya Kitaoka 120a6e
            for (x = 0; x < lx; x++, pix24++) *pix24 &= and_mask24;
Shinya Kitaoka 120a6e
          }
Shinya Kitaoka 120a6e
        } else
Shinya Kitaoka 120a6e
          ?E 89 {
Shinya Kitaoka 120a6e
            ?D 89 memset(pix, 0, rowsize);
Shinya Kitaoka 120a6e
            pix += wrap;
Shinya Kitaoka 120a6e
            ?E 89
Toshihiro Shimizu 890ddd
?I 89 if (!ras->extra) return;
Shinya Kitaoka 120a6e
            row8 = ras->extra + x1 + y1 * wrap;
Shinya Kitaoka 120a6e
            for (y = 0; y < ly; y++, row8 += wrap) {
Shinya Kitaoka 120a6e
              pix8 = row8;
Shinya Kitaoka 120a6e
              if (and_mask)
Shinya Kitaoka 120a6e
                for (x = 0; x < lx; x++, pix8++) *row8 &= and_mask;
Shinya Kitaoka 120a6e
              else
Shinya Kitaoka 120a6e
                memset(row8, 0, lx);
Shinya Kitaoka 120a6e
            }
Shinya Kitaoka 120a6e
            ?E 89
Shinya Kitaoka 120a6e
          }
Shinya Kitaoka 120a6e
      }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
      /*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
      void rop_add_white_to_cmap(RASTER * ras) {
Shinya Kitaoka 120a6e
        int i;
Shinya Kitaoka 120a6e
        UCHAR m, white;
Shinya Kitaoka 120a6e
        ?I 82
Toshihiro Shimizu 890ddd
?D 84 int cmap_size;
Shinya Kitaoka 120a6e
        ?E 84
Toshihiro Shimizu 890ddd
?I 84 int cmap_size, colbuf_size, penbuf_size;
Shinya Kitaoka 120a6e
        LPIXEL *buffer, *penbuffer, *colbuffer;
Shinya Kitaoka 120a6e
        ?E 84
Toshihiro Shimizu 890ddd
?E 82
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?D 82 for (i = 0; i < ras->cmap.size; i++)
Toshihiro Shimizu 890ddd
?E 82
Toshihiro Shimizu 890ddd
?I 82
Toshihiro Shimizu 890ddd
?D 84 cmap_size = TCM_MIN_CMAP_BUFFER_SIZE(ras->cmap.info);
Shinya Kitaoka 120a6e
        for (i = 0; i < cmap_size; i++)
Shinya Kitaoka 120a6e
					?E 82 {
Shinya Kitaoka 120a6e
            m = ras->cmap.buffer[i].m;
Shinya Kitaoka 120a6e
            if (ras->cmap.buffer[i].r > m || ras->cmap.buffer[i].g > m ||
Shinya Kitaoka 120a6e
                ras->cmap.buffer[i].b > m)
Shinya Kitaoka 120a6e
              break;
Shinya Kitaoka 120a6e
            white = (UCHAR)255 - m;
Shinya Kitaoka 120a6e
            ras->cmap.buffer[i].r += white;
Shinya Kitaoka 120a6e
            ras->cmap.buffer[i].g += white;
Shinya Kitaoka 120a6e
            ras->cmap.buffer[i].b += white;
Shinya Kitaoka 120a6e
            ?E 84
Shinya Kitaoka 120a6e
?I 84 buffer         = ras->cmap.buffer;
Shinya Kitaoka 120a6e
            penbuffer = ras->cmap.penbuffer;
Shinya Kitaoka 120a6e
            colbuffer = ras->cmap.colbuffer;
Shinya Kitaoka 120a6e
            if (buffer) {
Shinya Kitaoka 120a6e
              cmap_size = TCM_MIN_CMAP_BUFFER_SIZE(ras->cmap.info);
Shinya Kitaoka 120a6e
              for (i = 0; i < cmap_size; i++) {
Shinya Kitaoka 120a6e
                m = buffer[i].m;
Shinya Kitaoka 120a6e
                if (buffer[i].r > m || buffer[i].g > m || buffer[i].b > m)
Shinya Kitaoka 120a6e
                  break;
Shinya Kitaoka 120a6e
                white = (UCHAR)255 - m;
Shinya Kitaoka 120a6e
                buffer[i].r += white;
Shinya Kitaoka 120a6e
                buffer[i].g += white;
Shinya Kitaoka 120a6e
                buffer[i].b += white;
Shinya Kitaoka 120a6e
              }
Shinya Kitaoka 120a6e
              if (i < cmap_size)
Shinya Kitaoka 120a6e
                fprintf(stderr, "\7add_white: cmap is not premultiplied\n");
Shinya Kitaoka 120a6e
            } else if (colbuffer && penbuffer) {
Shinya Kitaoka 120a6e
              colbuf_size = TCM_MIN_CMAP_COLBUFFER_SIZE(ras->cmap.info);
Shinya Kitaoka 120a6e
              penbuf_size = TCM_MIN_CMAP_PENBUFFER_SIZE(ras->cmap.info);
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
              for (i = 0; i < colbuf_size; i++) {
Shinya Kitaoka 120a6e
                m = colbuffer[i].m;
Shinya Kitaoka 120a6e
                if (colbuffer[i].r > m || colbuffer[i].g > m ||
Shinya Kitaoka 120a6e
                    colbuffer[i].b > m)
Shinya Kitaoka 120a6e
                  break;
Shinya Kitaoka 120a6e
                white = (UCHAR)i - m; /* i & 0xff == tone */
Shinya Kitaoka 120a6e
                colbuffer[i].r += white;
Shinya Kitaoka 120a6e
                colbuffer[i].g += white;
Shinya Kitaoka 120a6e
                colbuffer[i].b += white;
Shinya Kitaoka 120a6e
              }
Shinya Kitaoka 120a6e
              if (i < colbuf_size)
Shinya Kitaoka 120a6e
                fprintf(stderr,
Shinya Kitaoka 120a6e
                        "\7add_white: color cmap is not premultiplied\n");
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
              for (i = 0; i < penbuf_size; i++) {
Shinya Kitaoka 120a6e
                m = penbuffer[i].m;
Shinya Kitaoka 120a6e
                if (penbuffer[i].r > m || penbuffer[i].g > m ||
Shinya Kitaoka 120a6e
                    penbuffer[i].b > m)
Shinya Kitaoka 120a6e
                  break;
Shinya Kitaoka 120a6e
                white = (UCHAR)~i - m; /* 255 - (i & 0xff) == 255 - tone */
Shinya Kitaoka 120a6e
                penbuffer[i].r += white;
Shinya Kitaoka 120a6e
                penbuffer[i].g += white;
Shinya Kitaoka 120a6e
                penbuffer[i].b += white;
Shinya Kitaoka 120a6e
              }
Shinya Kitaoka 120a6e
              if (i < penbuf_size)
Shinya Kitaoka 120a6e
                fprintf(stderr,
Shinya Kitaoka 120a6e
                        "\7add_white: pencil cmap is not premultiplied\n");
Shinya Kitaoka 120a6e
              ?E 84
Shinya Kitaoka 120a6e
            }
Shinya Kitaoka 120a6e
            ?D 82 if (i < ras->cmap.size)
Toshihiro Shimizu 890ddd
?E 82
Toshihiro Shimizu 890ddd
?I 82
Toshihiro Shimizu 890ddd
?D 84 if (i < cmap_size)
Toshihiro Shimizu 890ddd
?E 82 fprintf(stderr, "\7add_white: cmap is not premultiplied\n");
Shinya Kitaoka 120a6e
            ?E 84
Shinya Kitaoka 120a6e
          }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
        /*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
        void rop_remove_white_from_cmap(RASTER * ras) {
Shinya Kitaoka 120a6e
          int i;
Shinya Kitaoka 120a6e
          UCHAR m, white;
Shinya Kitaoka 120a6e
          ?I 82
Toshihiro Shimizu 890ddd
?D 84 int cmap_size;
Shinya Kitaoka 120a6e
          ?E 84
Toshihiro Shimizu 890ddd
?I 84 int cmap_size, colbuf_size, penbuf_size;
Shinya Kitaoka 120a6e
          LPIXEL *buffer, *penbuffer, *colbuffer;
Shinya Kitaoka 120a6e
          ?E 84
Toshihiro Shimizu 890ddd
?E 82
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?D 82 for (i = 0; i < ras->cmap.size; i++)
Toshihiro Shimizu 890ddd
?E 82
Toshihiro Shimizu 890ddd
?I 82
Toshihiro Shimizu 890ddd
?D 84 cmap_size = TCM_MIN_CMAP_BUFFER_SIZE(ras->cmap.info);
Shinya Kitaoka 120a6e
          for (i = 0; i < cmap_size; i++)
Toshihiro Shimizu 890ddd
						?E 84
Shinya Kitaoka 120a6e
?I 84 buffer       = ras->cmap.buffer;
Shinya Kitaoka 120a6e
          penbuffer = ras->cmap.penbuffer;
Shinya Kitaoka 120a6e
          colbuffer = ras->cmap.colbuffer;
Shinya Kitaoka 120a6e
          if (buffer) {
Shinya Kitaoka 120a6e
            cmap_size = TCM_MIN_CMAP_BUFFER_SIZE(ras->cmap.info);
Shinya Kitaoka 120a6e
            for (i = 0; i < cmap_size; i++) {
Shinya Kitaoka 120a6e
              m     = buffer[i].m;
Shinya Kitaoka 120a6e
              white = (UCHAR)255 - m;
Shinya Kitaoka 120a6e
              buffer[i].r -= white;
Shinya Kitaoka 120a6e
              buffer[i].g -= white;
Shinya Kitaoka 120a6e
              buffer[i].b -= white;
Shinya Kitaoka 120a6e
              if (buffer[i].r > m || buffer[i].g > m || buffer[i].b > m) break;
Shinya Kitaoka 120a6e
            }
Shinya Kitaoka 120a6e
            if (i < cmap_size)
Shinya Kitaoka 120a6e
              fprintf(stderr, "\7remove_white: cmap is not premultiplied\n");
Shinya Kitaoka 120a6e
          } else if (colbuffer && penbuffer)
Shinya Kitaoka 120a6e
            ?E 84
Shinya Kitaoka 120a6e
?E 82 {
Shinya Kitaoka 120a6e
              ?D 84 m = ras->cmap.buffer[i].m;
Shinya Kitaoka 120a6e
              white   = (UCHAR)255 - m;
Shinya Kitaoka 120a6e
              ras->cmap.buffer[i].r -= white;
Shinya Kitaoka 120a6e
              ras->cmap.buffer[i].g -= white;
Shinya Kitaoka 120a6e
              ras->cmap.buffer[i].b -= white;
Shinya Kitaoka 120a6e
              if (ras->cmap.buffer[i].r > m || ras->cmap.buffer[i].g > m ||
Shinya Kitaoka 120a6e
                  ras->cmap.buffer[i].b > m)
Shinya Kitaoka 120a6e
                break;
Shinya Kitaoka 120a6e
              ?E 84
Shinya Kitaoka 120a6e
?I 84 colbuf_size        = TCM_MIN_CMAP_COLBUFFER_SIZE(ras->cmap.info);
Shinya Kitaoka 120a6e
              penbuf_size = TCM_MIN_CMAP_PENBUFFER_SIZE(ras->cmap.info);
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
              for (i = 0; i < colbuf_size; i++) {
Shinya Kitaoka 120a6e
                m     = colbuffer[i].m;
Shinya Kitaoka 120a6e
                white = (UCHAR)i - m; /* i & 0xff == tone */
Shinya Kitaoka 120a6e
                colbuffer[i].r -= white;
Shinya Kitaoka 120a6e
                colbuffer[i].g -= white;
Shinya Kitaoka 120a6e
                colbuffer[i].b -= white;
Shinya Kitaoka 120a6e
                if (colbuffer[i].r > m || colbuffer[i].g > m ||
Shinya Kitaoka 120a6e
                    colbuffer[i].b > m)
Shinya Kitaoka 120a6e
                  break;
Shinya Kitaoka 120a6e
              }
Shinya Kitaoka 120a6e
              if (i < colbuf_size)
Shinya Kitaoka 120a6e
                fprintf(stderr,
Shinya Kitaoka 120a6e
                        "\7add_white: color cmap is not premultiplied\n");
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
              for (i = 0; i < penbuf_size; i++) {
Shinya Kitaoka 120a6e
                m     = penbuffer[i].m;
Shinya Kitaoka 120a6e
                white = (UCHAR)~i - m; /* 255 - (i & 0xff) == 255 - tone */
Shinya Kitaoka 120a6e
                penbuffer[i].r -= white;
Shinya Kitaoka 120a6e
                penbuffer[i].g -= white;
Shinya Kitaoka 120a6e
                penbuffer[i].b -= white;
Shinya Kitaoka 120a6e
                if (penbuffer[i].r > m || penbuffer[i].g > m ||
Shinya Kitaoka 120a6e
                    penbuffer[i].b > m)
Shinya Kitaoka 120a6e
                  break;
Shinya Kitaoka 120a6e
              }
Shinya Kitaoka 120a6e
              if (i < penbuf_size)
Shinya Kitaoka 120a6e
                fprintf(stderr,
Shinya Kitaoka 120a6e
                        "\7add_white: pencil cmap is not premultiplied\n");
Shinya Kitaoka 120a6e
              ?E 84
Shinya Kitaoka 120a6e
            }
Shinya Kitaoka 120a6e
          ?D 82 if (i < ras->cmap.size)
Toshihiro Shimizu 890ddd
?E 82
Toshihiro Shimizu 890ddd
?I 82
Toshihiro Shimizu 890ddd
?D 84 if (i < cmap_size)
Toshihiro Shimizu 890ddd
?E 82 fprintf(stderr, "\7remove_white: cmap is not premultiplied\n");
Shinya Kitaoka 120a6e
          ?E 84
Shinya Kitaoka 120a6e
        }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
        /*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
        ?D 84 static LPIXEL premult_lpixel(LPIXEL lpixel)
Toshihiro Shimizu 890ddd
?E 84
Toshihiro Shimizu 890ddd
?I 84 LPIXEL premult_lpixel(LPIXEL lpixel)
Shinya Kitaoka 120a6e
?E 84 {
Shinya Kitaoka 120a6e
          ?D 84 int m;
Shinya Kitaoka 120a6e
          ?E 84
Toshihiro Shimizu 890ddd
?I 84 UINT m, mm;
Shinya Kitaoka 120a6e
          ?E 84 LPIXEL new_lpixel;
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
          m = lpixel.m;
Shinya Kitaoka 120a6e
          if (m == 255)
Toshihiro Shimizu 890ddd
						?D 84 return lpixel;
Shinya Kitaoka 120a6e
          ?E 84
Toshihiro Shimizu 890ddd
?I 84 new_lpixel = lpixel;
Shinya Kitaoka 120a6e
          ?E 84 else if (m == 0) {
Shinya Kitaoka 120a6e
            new_lpixel.r = 0;
Shinya Kitaoka 120a6e
            new_lpixel.g = 0;
Shinya Kitaoka 120a6e
            new_lpixel.b = 0;
Shinya Kitaoka 120a6e
            new_lpixel.m = 0;
Shinya Kitaoka 120a6e
          }
Shinya Kitaoka 120a6e
          else {
Shinya Kitaoka 120a6e
            ?D 84 new_lpixel.r = (lpixel.r * m + 127) / 255;
Shinya Kitaoka 120a6e
            new_lpixel.g       = (lpixel.g * m + 127) / 255;
Shinya Kitaoka 120a6e
            new_lpixel.b       = (lpixel.b * m + 127) / 255;
Shinya Kitaoka 120a6e
            ?E 84
Shinya Kitaoka 120a6e
?I 84 mm                      = m * MAGICFAC;
Shinya Kitaoka 120a6e
            new_lpixel.r       = (lpixel.r * mm + (1U << 23)) >> 24;
Shinya Kitaoka 120a6e
            new_lpixel.g       = (lpixel.g * mm + (1U << 23)) >> 24;
Shinya Kitaoka 120a6e
            new_lpixel.b       = (lpixel.b * mm + (1U << 23)) >> 24;
Shinya Kitaoka 120a6e
            ?E 84 new_lpixel.m = m;
Shinya Kitaoka 120a6e
          }
Shinya Kitaoka 120a6e
          return new_lpixel;
Shinya Kitaoka 120a6e
        }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
        /*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
        ?D 84 static LPIXEL unpremult_lpixel(LPIXEL lpixel)
Toshihiro Shimizu 890ddd
?E 84
Toshihiro Shimizu 890ddd
?I 84 LPIXEL unpremult_lpixel(LPIXEL lpixel)
Shinya Kitaoka 120a6e
?E 84 {
Shinya Kitaoka 120a6e
          int m, m_2;
Shinya Kitaoka 120a6e
          LPIXEL new_lpixel;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
          m = lpixel.m;
Shinya Kitaoka 120a6e
          if (m == 255)
Shinya Kitaoka 120a6e
            return lpixel;
Shinya Kitaoka 120a6e
          else if (m == 0) {
Shinya Kitaoka 120a6e
            new_lpixel.r = 255;
Shinya Kitaoka 120a6e
            new_lpixel.g = 255;
Shinya Kitaoka 120a6e
            new_lpixel.b = 255;
Shinya Kitaoka 120a6e
            new_lpixel.m = 0;
Shinya Kitaoka 120a6e
          } else {
Shinya Kitaoka 120a6e
            m_2                = m >> 1;
Shinya Kitaoka 120a6e
            new_lpixel.r       = (lpixel.r * 255 + m_2) / m;
Shinya Kitaoka 120a6e
            new_lpixel.g       = (lpixel.g * 255 + m_2) / m;
Shinya Kitaoka 120a6e
            new_lpixel.b       = (lpixel.b * 255 + m_2) / m;
Shinya Kitaoka 120a6e
            ?E 52 new_lpixel.m = m;
Shinya Kitaoka 120a6e
          }
Shinya Kitaoka 120a6e
          return new_lpixel;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        /*---------------------------------------------------------------------------*/
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        void rop_fill_cmap_ramp(RASTER * ras, TCM_INFO info,
Shinya Kitaoka 120a6e
?D 89 LPIXEL color, LPIXEL pencil, int color_index, int pencil_index,
Shinya Kitaoka 120a6e
                                int already_premultiplied) {
Shinya Kitaoka 120a6e
          LPIXEL val, *ramp;
Shinya Kitaoka 120a6e
          int ramp_index;
Shinya Kitaoka 120a6e
          int c_r, c_g, c_b, c_m, p_r, p_g, p_b, p_m, d_r, d_g, d_b, d_m;
Shinya Kitaoka 120a6e
          int tone, tmax, tmax_2;
Shinya Kitaoka 120a6e
          int tmax_2_r, tmax_2_g, tmax_2_b, tmax_2_m;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
          ?I 34
Toshihiro Shimizu 890ddd
?D 35
Shinya Kitaoka 120a6e
              /* Secondo noi (Grisu & Roberto) l'offset non ci vuole
Toshihiro Shimizu 890ddd
?E 34
Toshihiro Shimizu 890ddd
ramp_index = color_index  << info.color_offs  |
Shinya Kitaoka 120a6e
pencil_index << info.pencil_offs | info.offset_mask;
Toshihiro Shimizu 890ddd
?I 34
Shinya Kitaoka 120a6e
*/
Shinya Kitaoka 120a6e
              ramp_index = color_index << info.color_offs |
Shinya Kitaoka 120a6e
                           pencil_index << info.pencil_offs;
Shinya Kitaoka 120a6e
          ?E 35
Shinya Kitaoka 120a6e
?I 35 ramp_index =
Shinya Kitaoka 120a6e
              color_index << info.color_offs | pencil_index << info.pencil_offs;
Shinya Kitaoka 120a6e
          ?E 35
Toshihiro Shimizu 890ddd
?E 34 ramp = ras->cmap.buffer + ramp_index;
Shinya Kitaoka 120a6e
          if (!already_premultiplied) {
Shinya Kitaoka 120a6e
            color  = premult_lpixel(color);
Shinya Kitaoka 120a6e
            pencil = premult_lpixel(pencil);
Shinya Kitaoka 120a6e
          }
Shinya Kitaoka 120a6e
          c_r      = color.r;
Shinya Kitaoka 120a6e
          p_r      = pencil.r;
Shinya Kitaoka 120a6e
          d_r      = c_r - p_r;
Shinya Kitaoka 120a6e
          c_g      = color.g;
Shinya Kitaoka 120a6e
          p_g      = pencil.g;
Shinya Kitaoka 120a6e
          d_g      = c_g - p_g;
Shinya Kitaoka 120a6e
          c_b      = color.b;
Shinya Kitaoka 120a6e
          p_b      = pencil.b;
Shinya Kitaoka 120a6e
          d_b      = c_b - p_b;
Shinya Kitaoka 120a6e
          c_m      = color.m;
Shinya Kitaoka 120a6e
          p_m      = pencil.m;
Shinya Kitaoka 120a6e
          d_m      = c_m - p_m;
Shinya Kitaoka 120a6e
          tmax     = info.n_tones - 1;
Shinya Kitaoka 120a6e
          tmax_2   = tmax >> 1;
Shinya Kitaoka 120a6e
          tmax_2_r = d_r < 0 ? -tmax_2 : tmax_2;
Shinya Kitaoka 120a6e
          tmax_2_g = d_g < 0 ? -tmax_2 : tmax_2;
Shinya Kitaoka 120a6e
          tmax_2_b = d_b < 0 ? -tmax_2 : tmax_2;
Shinya Kitaoka 120a6e
          tmax_2_m = d_m < 0 ? -tmax_2 : tmax_2;
Shinya Kitaoka 120a6e
          ramp[0]  = pencil;
Shinya Kitaoka 120a6e
          for (tone = 1; tone < info.n_tones - 1; tone++) {
Shinya Kitaoka 120a6e
            val.r = p_r + (d_r * tone + tmax_2_r) / tmax;
Shinya Kitaoka 120a6e
            val.g = p_g + (d_g * tone + tmax_2_g) / tmax;
Shinya Kitaoka 120a6e
            val.b = p_b + (d_b * tone + tmax_2_b) / tmax;
Shinya Kitaoka 120a6e
            val.m = p_m + (d_m * tone + tmax_2_m) / tmax;
Shinya Kitaoka 120a6e
            ?D 82 ramp[tone << info.tone_offs] = val;
Shinya Kitaoka 120a6e
            ?E 82
Shinya Kitaoka 120a6e
?I 82 ramp[tone]                              = val;
Shinya Kitaoka 120a6e
            ?E 82
Shinya Kitaoka 120a6e
          }
Shinya Kitaoka 120a6e
          ramp[info.n_tones - 1] = color;
Shinya Kitaoka 120a6e
        }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
        /*---------------------------------------------------------------------------*/
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        ?I 84 void rop_fill_cmap_colramp(RASTER * ras, TCM_INFO info,
Shinya Kitaoka 120a6e
                                         LPIXEL color, int color_index,
Shinya Kitaoka 120a6e
                                         int already_premultiplied) {
Shinya Kitaoka 120a6e
          LPIXEL val, *colbuffer;
Shinya Kitaoka 120a6e
          int index, tone;
Shinya Kitaoka 120a6e
          UINT magic_tone, c_r, c_g, c_b, c_m;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
          if (!already_premultiplied) color = premult_lpixel(color);
Shinya Kitaoka 120a6e
          c_r                               = color.r;
Shinya Kitaoka 120a6e
          c_g                               = color.g;
Shinya Kitaoka 120a6e
          c_b                               = color.b;
Shinya Kitaoka 120a6e
          c_m                               = color.m;
Shinya Kitaoka 120a6e
          colbuffer                         = ras->cmap.colbuffer;
Shinya Kitaoka 120a6e
          index                             = color_index << info.tone_bits;
Shinya Kitaoka 120a6e
          for (tone = 0; tone < info.n_tones; tone++) {
Shinya Kitaoka 120a6e
            magic_tone         = tone * MAGICFAC;
Shinya Kitaoka 120a6e
            val.r              = (UCHAR)((c_r * magic_tone + (1 << 23)) >> 24);
Shinya Kitaoka 120a6e
            val.g              = (UCHAR)((c_g * magic_tone + (1 << 23)) >> 24);
Shinya Kitaoka 120a6e
            val.b              = (UCHAR)((c_b * magic_tone + (1 << 23)) >> 24);
Shinya Kitaoka 120a6e
            val.m              = (UCHAR)((c_m * magic_tone + (1 << 23)) >> 24);
Shinya Kitaoka 120a6e
            colbuffer[index++] = val;
Shinya Kitaoka 120a6e
          }
Shinya Kitaoka 120a6e
        }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
        /*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
        void rop_fill_cmap_penramp(RASTER * ras, TCM_INFO info, LPIXEL pencil,
Shinya Kitaoka 120a6e
                                   int pencil_index,
Shinya Kitaoka 120a6e
                                   int already_premultiplied) {
Shinya Kitaoka 120a6e
          LPIXEL val, *penbuffer;
Shinya Kitaoka 120a6e
          int index, enot;
Shinya Kitaoka 120a6e
          UINT magic_enot, p_r, p_g, p_b, p_m;
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
          if (!already_premultiplied)
Shinya Kitaoka 120a6e
						?D 88 pencil = premult(pencil);
Shinya Kitaoka 120a6e
          ?E 88
Shinya Kitaoka 120a6e
?I 88 pencil       = rop_premult(pencil);
Shinya Kitaoka 120a6e
          ?E 88 p_r = pencil.r;
Shinya Kitaoka 120a6e
          p_g       = pencil.g;
Shinya Kitaoka 120a6e
          p_b       = pencil.b;
Shinya Kitaoka 120a6e
          p_m       = pencil.m;
Shinya Kitaoka 120a6e
          penbuffer = ras->cmap.penbuffer;
Shinya Kitaoka 120a6e
          index     = pencil_index << info.tone_bits;
Shinya Kitaoka 120a6e
          for (enot = info.n_tones - 1; enot >= 0; enot--) {
Shinya Kitaoka 120a6e
            magic_enot         = enot * MAGICFAC;
Shinya Kitaoka 120a6e
            val.r              = (UCHAR)((p_r * magic_enot + (1 << 23)) >> 24);
Shinya Kitaoka 120a6e
            val.g              = (UCHAR)((p_g * magic_enot + (1 << 23)) >> 24);
Shinya Kitaoka 120a6e
            val.b              = (UCHAR)((p_b * magic_enot + (1 << 23)) >> 24);
Shinya Kitaoka 120a6e
            val.m              = (UCHAR)((p_m * magic_enot + (1 << 23)) >> 24);
Shinya Kitaoka 120a6e
            penbuffer[index++] = val;
Shinya Kitaoka 120a6e
          }
Shinya Kitaoka 120a6e
        }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
        /*---------------------------------------------------------------------------*/
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        ?E 84
Shinya Kitaoka 120a6e
?I 36 void rop_custom_fill_cmap_ramp(
Shinya Kitaoka 120a6e
            RASTER * ras, TCM_INFO info, LPIXEL color, LPIXEL pencil,
Shinya Kitaoka 120a6e
            int color_index, int pencil_index, int already_premultiplied,
Shinya Kitaoka 120a6e
            int *custom_tone) {
Shinya Kitaoka 120a6e
          LPIXEL val, *ramp;
Shinya Kitaoka 120a6e
          int ramp_index;
Shinya Kitaoka 120a6e
          int c_r, c_g, c_b, c_m, p_r, p_g, p_b, p_m, d_r, d_g, d_b, d_m;
Shinya Kitaoka 120a6e
          int tone, tmax, tmax_2;
Shinya Kitaoka 120a6e
          int tmax_2_r, tmax_2_g, tmax_2_b, tmax_2_m;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
          ramp_index =
Shinya Kitaoka 120a6e
              color_index << info.color_offs | pencil_index << info.pencil_offs;
Shinya Kitaoka 120a6e
          ramp = ras->cmap.buffer + ramp_index;
Shinya Kitaoka 120a6e
          if (!already_premultiplied) {
Shinya Kitaoka 120a6e
            color  = premult_lpixel(color);
Shinya Kitaoka 120a6e
            pencil = premult_lpixel(pencil);
Shinya Kitaoka 120a6e
          }
Shinya Kitaoka 120a6e
          c_r           = color.r;
Shinya Kitaoka 120a6e
          p_r           = pencil.r;
Shinya Kitaoka 120a6e
          d_r           = c_r - p_r;
Shinya Kitaoka 120a6e
          c_g           = color.g;
Shinya Kitaoka 120a6e
          p_g           = pencil.g;
Shinya Kitaoka 120a6e
          d_g           = c_g - p_g;
Shinya Kitaoka 120a6e
          c_b           = color.b;
Shinya Kitaoka 120a6e
          p_b           = pencil.b;
Shinya Kitaoka 120a6e
          d_b           = c_b - p_b;
Shinya Kitaoka 120a6e
          c_m           = color.m;
Shinya Kitaoka 120a6e
          p_m           = pencil.m;
Shinya Kitaoka 120a6e
          d_m           = c_m - p_m;
Shinya Kitaoka 120a6e
          tmax          = info.n_tones - 1;
Shinya Kitaoka 120a6e
          tmax_2        = tmax >> 1;
Shinya Kitaoka 120a6e
          tmax_2_r      = d_r < 0 ? -tmax_2 : tmax_2;
Shinya Kitaoka 120a6e
          tmax_2_g      = d_g < 0 ? -tmax_2 : tmax_2;
Shinya Kitaoka 120a6e
          tmax_2_b      = d_b < 0 ? -tmax_2 : tmax_2;
Shinya Kitaoka 120a6e
          tmax_2_m      = d_m < 0 ? -tmax_2 : tmax_2;
Shinya Kitaoka 120a6e
          ?D 37 ramp[0] = pencil;
Shinya Kitaoka 120a6e
          for (tone = 1; tone < info.n_tones - 1; tone++)
Shinya Kitaoka 120a6e
            ?E 37
Toshihiro Shimizu 890ddd
?I 37 for (tone = 0; tone < info.n_tones; tone++)
Shinya Kitaoka 120a6e
?E 37 {
Shinya Kitaoka 120a6e
              ?D 37
Shinya Kitaoka 120a6e
                  /* only the following 4 lines are different from the
Shinya Kitaoka 120a6e
                     non-custom version */
Shinya Kitaoka 120a6e
?E 37 val.r        = p_r + (d_r * custom_tone[tone] + tmax_2_r) / tmax;
Shinya Kitaoka 120a6e
              val.g = p_g + (d_g * custom_tone[tone] + tmax_2_g) / tmax;
Shinya Kitaoka 120a6e
              val.b = p_b + (d_b * custom_tone[tone] + tmax_2_b) / tmax;
Shinya Kitaoka 120a6e
              val.m = p_m + (d_m * custom_tone[tone] + tmax_2_m) / tmax;
Shinya Kitaoka 120a6e
              ?D 82 ramp[tone << info.tone_offs] = val;
Shinya Kitaoka 120a6e
              ?E 82
Shinya Kitaoka 120a6e
?I 82 ramp[tone]                                = val;
Shinya Kitaoka 120a6e
              ?E 82
Shinya Kitaoka 120a6e
            }
Shinya Kitaoka 120a6e
          ?D 37 ramp[info.n_tones - 1] = color;
Shinya Kitaoka 120a6e
          ?E 37
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        /*---------------------------------------------------------------------------*/
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        ?E 36
Shinya Kitaoka 120a6e
?D 84 void rop_fill_cmap_buffer(RASTER * ras, TCM_INFO info, LPIXEL * color,
Shinya Kitaoka 120a6e
                                 LPIXEL * pencil, int already_premultiplied) {
Shinya Kitaoka 120a6e
          ?D 82 int min_cmap_buffer_size, i, j;
Shinya Kitaoka 120a6e
          ?E 82
Toshihiro Shimizu 890ddd
?I 82 int i, j;
Shinya Kitaoka 120a6e
          ?E 82
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?D 82 min_cmap_buffer_size = TCM_MIN_CMAP_BUFFER_SIZE(info);
Shinya Kitaoka 120a6e
          ?D 33 assert(min_cmap_buffer_size < ras->cmap.size);
Shinya Kitaoka 120a6e
          ?E 33
Toshihiro Shimizu 890ddd
?I 33 assert(ras->cmap.size >= min_cmap_buffer_size);
Shinya Kitaoka 120a6e
          ?E 82
Toshihiro Shimizu 890ddd
?E 33 for (i = 0; i < info.n_colors; i++) for (j = 0; j < info.n_pencils; j++)
Shinya Kitaoka 120a6e
              rop_fill_cmap_ramp(ras, info, color[i], pencil[j], i, j,
Shinya Kitaoka 120a6e
                                 already_premultiplied);
Shinya Kitaoka 120a6e
          ?I 36
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        /*---------------------------------------------------------------------------*/
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
        void rop_custom_fill_cmap_buffer(
Shinya Kitaoka 120a6e
            RASTER * ras, TCM_INFO info, LPIXEL * color, LPIXEL * pencil,
Shinya Kitaoka 120a6e
            int already_premultiplied, int *custom_tone) {
Shinya Kitaoka 120a6e
          ?D 82 int min_cmap_buffer_size, i, j;
Shinya Kitaoka 120a6e
          ?E 82
Toshihiro Shimizu 890ddd
?I 82 int i, j;
Shinya Kitaoka 120a6e
          ?E 82
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?D 82 min_cmap_buffer_size = TCM_MIN_CMAP_BUFFER_SIZE(info);
Shinya Kitaoka 120a6e
          assert(ras->cmap.size >= min_cmap_buffer_size);
Shinya Kitaoka 120a6e
          ?E 82 for (i = 0; i < info.n_colors;
Shinya Kitaoka 120a6e
                     i++) for (j = 0; j < info.n_pencils; j++)
Shinya Kitaoka 120a6e
              rop_custom_fill_cmap_ramp(ras, info, color[i], pencil[j], i, j,
Shinya Kitaoka 120a6e
                                        already_premultiplied, custom_tone);
Shinya Kitaoka 120a6e
          ?E 36
Toshihiro Shimizu 890ddd
?E 32
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
        ?I 66
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
            /*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd
?E 84
Shinya Kitaoka 120a6e
?I 84 void
Shinya Kitaoka 120a6e
        rop_custom_fill_cmap_colramp(RASTER * ras, TCM_INFO info, LPIXEL color,
Shinya Kitaoka 120a6e
                                     int color_index, int already_premultiplied,
Shinya Kitaoka 120a6e
                                     int *custom_tone) {
Shinya Kitaoka 120a6e
          LPIXEL val, *colbuffer;
Shinya Kitaoka 120a6e
          int index, tone;
Shinya Kitaoka 120a6e
          UINT magic_tone, c_r, c_g, c_b, c_m;
Shinya Kitaoka 120a6e
          ?E 84
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?I 77
Shinya Kitaoka 120a6e
?D 84 void release_raster(RASTER * raster) {
Shinya Kitaoka 120a6e
            if (!raster->native_buffer)
Shinya Kitaoka 120a6e
              ?E 84
Shinya Kitaoka 120a6e
?I 84 if (!already_premultiplied) color = premult_lpixel(color);
Shinya Kitaoka 120a6e
            c_r                          = color.r;
Shinya Kitaoka 120a6e
            c_g                          = color.g;
Shinya Kitaoka 120a6e
            c_b                          = color.b;
Shinya Kitaoka 120a6e
            c_m                          = color.m;
Shinya Kitaoka 120a6e
            colbuffer                    = ras->cmap.colbuffer;
Shinya Kitaoka 120a6e
            index                        = color_index << info.tone_bits;
Shinya Kitaoka 120a6e
            for (tone = 0; tone < info.n_tones; tone++)
Shinya Kitaoka 120a6e
							?E 84 {
Shinya Kitaoka 120a6e
                ?D 84 tmsg_error("release_raster,  missing buffer");
Shinya Kitaoka 120a6e
                return;
Shinya Kitaoka 120a6e
                ?E 84
Shinya Kitaoka 120a6e
?I 84 magic_tone     = custom_tone[tone] * MAGICFAC;
Shinya Kitaoka 120a6e
                val.r = (UCHAR)((c_r * magic_tone + (1 << 23)) >> 24);
Shinya Kitaoka 120a6e
                val.g = (UCHAR)((c_g * magic_tone + (1 << 23)) >> 24);
Shinya Kitaoka 120a6e
                val.b = (UCHAR)((c_b * magic_tone + (1 << 23)) >> 24);
Shinya Kitaoka 120a6e
                val.m = (UCHAR)((c_m * magic_tone + (1 << 23)) >> 24);
Shinya Kitaoka 120a6e
                colbuffer[index++] = val;
Shinya Kitaoka 120a6e
                ?E 84
Shinya Kitaoka 120a6e
              }
Shinya Kitaoka 120a6e
            ?D 84
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
                release_memory_chunk(raster->native_buffer);
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
            if (raster->type == RAS_CM16 && raster->cmap.buffer)
Shinya Kitaoka 120a6e
              free(raster->cmap.buffer);
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
            memset(raster, 0, sizeof(RASTER));
Shinya Kitaoka 120a6e
            return;
Shinya Kitaoka 120a6e
          }
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
          /*-----------------------------------------------------------------*/
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
          void create_raster(RASTER * raster, int xsize, int ysize,
Shinya Kitaoka 120a6e
                             RAS_TYPE type) {
Shinya Kitaoka 120a6e
            int pixsize;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
            memset(raster, 0, sizeof(RASTER));
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
            pixsize = rop_pixbytes(type);
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
            if (!(raster->native_buffer =
Shinya Kitaoka 120a6e
                      get_memory_chunk(xsize * ysize * pixsize)))
Shinya Kitaoka 120a6e
              tmsg_fatal("can't allocate %d Mbytes",
Shinya Kitaoka 120a6e
                         ((xsize / 1024) * (ysize / 1024)) * pixsize);
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
            raster->buffer = raster->native_buffer;
Shinya Kitaoka 120a6e
            raster->type   = type;
Shinya Kitaoka 120a6e
            raster->wrap = raster->lx = xsize;
Shinya Kitaoka 120a6e
            raster->ly                = ysize;
Shinya Kitaoka 120a6e
            return;
Shinya Kitaoka 120a6e
          }
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
          ?I 80
Shinya Kitaoka 120a6e
              /*-----------------------------------------------------------------*/
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
              int
Shinya Kitaoka 120a6e
              create_subraster(RASTER * rin, RASTER * rout, int x0, int y0,
Shinya Kitaoka 120a6e
                               int x1, int y1) {
Shinya Kitaoka 120a6e
            if (x1 < x0 || y1 < y0) return FALSE;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
            *rout                    = *rin;
Shinya Kitaoka 120a6e
            if (x0 < 0) x0           = 0;
Shinya Kitaoka 120a6e
            if (y0 < 0) y0           = 0;
Shinya Kitaoka 120a6e
            if (x1 > rin->lx - 1) x1 = rin->lx - 1;
Shinya Kitaoka 120a6e
            if (y1 > rin->ly - 1) y1 = rin->ly - 1;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
            rout->lx     = x1 - x0 + 1;
Shinya Kitaoka 120a6e
            rout->ly     = y1 - y0 + 1;
Shinya Kitaoka 120a6e
            rout->buffer = (UCHAR *)(rin->buffer) +
Shinya Kitaoka 120a6e
                           (y0 * rin->wrap + x0) * rop_pixbytes(rin->type);
Shinya Kitaoka 120a6e
            return TRUE;
Shinya Kitaoka 120a6e
            ?E 84
Shinya Kitaoka 120a6e
          }
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
          ?D 84
Shinya Kitaoka 120a6e
              /*-----------------------------------------------------------------*/
Toshihiro Shimizu 890ddd
?E 84
Toshihiro Shimizu 890ddd
?I 84
Shinya Kitaoka 120a6e
              /*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd
?E 84
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
?D 84 void
Shinya Kitaoka 120a6e
          clone_raster(RASTER * rin, RASTER * rout)
Toshihiro Shimizu 890ddd
?E 84
Shinya Kitaoka 120a6e
?I 84 void
Shinya Kitaoka 120a6e
          rop_custom_fill_cmap_penramp(
Shinya Kitaoka 120a6e
              RASTER * ras, TCM_INFO info, LPIXEL pencil, int pencil_index,
Shinya Kitaoka 120a6e
              int already_premultiplied, int *custom_tone)
Shinya Kitaoka 120a6e
?E 84 {
Shinya Kitaoka 120a6e
            ?D 84 create_raster(rout, rin->lx, rin->ly, rin->type);
Shinya Kitaoka 120a6e
            rop_copy(rin, rout, 0, 0, rin->lx - 1, rin->ly - 1, 0, 0);
Shinya Kitaoka 120a6e
          }
Shinya Kitaoka 120a6e
          ?E 84
Toshihiro Shimizu 890ddd
?I 84 LPIXEL val, *penbuffer;
Shinya Kitaoka 120a6e
          int index, enot;
Shinya Kitaoka 120a6e
          UINT magic_enot, p_r, p_g, p_b, p_m;
Shinya Kitaoka 120a6e
          ?E 84
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?I 84 if (!already_premultiplied)
Shinya Kitaoka 120a6e
?D 88 pencil       = premult(pencil);
Shinya Kitaoka 120a6e
          ?E 88
Shinya Kitaoka 120a6e
?I 88 pencil       = rop_premult(pencil);
Shinya Kitaoka 120a6e
          ?E 88
Toshihiro Shimizu 890ddd
?E 84
Toshihiro Shimizu 890ddd
?E 80
Toshihiro Shimizu 890ddd
?E 77
Toshihiro Shimizu 890ddd
?E 66
Toshihiro Shimizu 890ddd
?E 25
Toshihiro Shimizu 890ddd
?E 6
Toshihiro Shimizu 890ddd
?E 1
Shinya Kitaoka 120a6e
?I 84 p_r          = pencil.r;
Shinya Kitaoka 120a6e
          p_g       = pencil.g;
Shinya Kitaoka 120a6e
          p_b       = pencil.b;
Shinya Kitaoka 120a6e
          p_m       = pencil.m;
Shinya Kitaoka 120a6e
          penbuffer = ras->cmap.penbuffer;
Shinya Kitaoka 120a6e
          index     = pencil_index << info.tone_bits;
Shinya Kitaoka 120a6e
          for (enot = info.n_tones - 1; enot >= 0; enot--) {
Shinya Kitaoka 120a6e
            magic_enot         = custom_tone[enot] * MAGICFAC;
Shinya Kitaoka 120a6e
            val.r              = (UCHAR)((p_r * magic_enot + (1 << 23)) >> 24);
Shinya Kitaoka 120a6e
            val.g              = (UCHAR)((p_g * magic_enot + (1 << 23)) >> 24);
Shinya Kitaoka 120a6e
            val.b              = (UCHAR)((p_b * magic_enot + (1 << 23)) >> 24);
Shinya Kitaoka 120a6e
            val.m              = (UCHAR)((p_m * magic_enot + (1 << 23)) >> 24);
Shinya Kitaoka 120a6e
            penbuffer[index++] = val;
Shinya Kitaoka 120a6e
          }
Shinya Kitaoka 120a6e
        }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
        /*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
        void rop_fill_cmap_buffer(RASTER * ras, TCM_INFO info, LPIXEL * color,
Shinya Kitaoka 120a6e
                                  LPIXEL * pencil, int already_premultiplied) {
Shinya Kitaoka 120a6e
          int i, j;
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
          for (i = 0; i < info.n_colors; i++)
Shinya Kitaoka 120a6e
            for (j = 0; j < info.n_pencils; j++)
Shinya Kitaoka 120a6e
              rop_fill_cmap_ramp(ras, info, color[i], pencil[j], i, j,
Shinya Kitaoka 120a6e
                                 already_premultiplied);
Shinya Kitaoka 120a6e
        }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
        /*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
        void rop_fill_cmap_colbuffer(RASTER * ras, TCM_INFO info,
Shinya Kitaoka 120a6e
                                     LPIXEL * color,
Shinya Kitaoka 120a6e
                                     int already_premultiplied) {
Shinya Kitaoka 120a6e
          int i;
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
          for (i = 0; i < info.n_colors; i++)
Shinya Kitaoka 120a6e
            rop_fill_cmap_colramp(ras, info, color[i], i,
Shinya Kitaoka 120a6e
                                  already_premultiplied);
Shinya Kitaoka 120a6e
        }
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?E 89
Toshihiro Shimizu 890ddd
?I 89
Toshihiro Shimizu 890ddd
                         LPIXEL color, LPIXEL pencil,
Toshihiro Shimizu 890ddd
		         int color_index, int pencil_index,
Toshihiro Shimizu 890ddd
		         int already_premultiplied)
Toshihiro Shimizu 890ddd
{
Shinya Kitaoka 120a6e
  LPIXEL val, *ramp;
Shinya Kitaoka 120a6e
  int ramp_index;
Shinya Kitaoka 120a6e
  int c_r, c_g, c_b, c_m, p_r, p_g, p_b, p_m, d_r, d_g, d_b, d_m;
Shinya Kitaoka 120a6e
  int tone, tmax, tmax_2;
Shinya Kitaoka 120a6e
  int tmax_2_r, tmax_2_g, tmax_2_b, tmax_2_m;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  ramp_index =
Shinya Kitaoka 120a6e
      color_index << info.color_offs | pencil_index << info.pencil_offs;
Shinya Kitaoka 120a6e
  ramp = ras->cmap.buffer + ramp_index;
Shinya Kitaoka 120a6e
  if (!already_premultiplied) {
Shinya Kitaoka 120a6e
    color  = premult_lpixel(color);
Shinya Kitaoka 120a6e
    pencil = premult_lpixel(pencil);
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  c_r            = color.r;
Shinya Kitaoka 120a6e
  p_r            = pencil.r;
Shinya Kitaoka 120a6e
  d_r            = c_r - p_r;
Shinya Kitaoka 120a6e
  c_g            = color.g;
Shinya Kitaoka 120a6e
  p_g            = pencil.g;
Shinya Kitaoka 120a6e
  d_g            = c_g - p_g;
Shinya Kitaoka 120a6e
  c_b            = color.b;
Shinya Kitaoka 120a6e
  p_b            = pencil.b;
Shinya Kitaoka 120a6e
  d_b            = c_b - p_b;
Shinya Kitaoka 120a6e
  ?D 94 c_m      = color.m;
Shinya Kitaoka 120a6e
  p_m            = pencil.m;
Shinya Kitaoka 120a6e
  d_m            = c_m - p_m;
Shinya Kitaoka 120a6e
  tmax           = info.n_tones - 1;
Shinya Kitaoka 120a6e
  tmax_2         = tmax >> 1;
Shinya Kitaoka 120a6e
  tmax_2_r       = d_r < 0 ? -tmax_2 : tmax_2;
Shinya Kitaoka 120a6e
  ?E 94
Shinya Kitaoka 120a6e
?I 94 c_m       = color.m;
Shinya Kitaoka 120a6e
  p_m            = pencil.m;
Shinya Kitaoka 120a6e
  d_m            = c_m - p_m;
Shinya Kitaoka 120a6e
  tmax           = info.n_tones - 1;
Shinya Kitaoka 120a6e
  tmax_2         = tmax >> 1;
Shinya Kitaoka 120a6e
  tmax_2_r       = d_r < 0 ? -tmax_2 : tmax_2;
Shinya Kitaoka 120a6e
  ?E 94 tmax_2_g = d_g < 0 ? -tmax_2 : tmax_2;
Shinya Kitaoka 120a6e
  tmax_2_b       = d_b < 0 ? -tmax_2 : tmax_2;
Shinya Kitaoka 120a6e
  tmax_2_m       = d_m < 0 ? -tmax_2 : tmax_2;
Shinya Kitaoka 120a6e
  ramp[0]        = pencil;
Shinya Kitaoka 120a6e
  for (tone = 1; tone < info.n_tones - 1; tone++) {
Shinya Kitaoka 120a6e
    val.r      = p_r + (d_r * tone + tmax_2_r) / tmax;
Shinya Kitaoka 120a6e
    val.g      = p_g + (d_g * tone + tmax_2_g) / tmax;
Shinya Kitaoka 120a6e
    val.b      = p_b + (d_b * tone + tmax_2_b) / tmax;
Shinya Kitaoka 120a6e
    val.m      = p_m + (d_m * tone + tmax_2_m) / tmax;
Shinya Kitaoka 120a6e
    ramp[tone] = val;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  ramp[info.n_tones - 1] = color;
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
void rop_fill_cmap_colramp(RASTER * ras, TCM_INFO info, LPIXEL color,
Shinya Kitaoka 120a6e
                           int color_index, int already_premultiplied) {
Shinya Kitaoka 120a6e
  LPIXEL val, *colbuffer;
Shinya Kitaoka 120a6e
  int index, tone;
Shinya Kitaoka 120a6e
  UINT magic_tone, c_r, c_g, c_b, c_m;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  if (!already_premultiplied) color = premult_lpixel(color);
Shinya Kitaoka 120a6e
  c_r                               = color.r;
Shinya Kitaoka 120a6e
  c_g                               = color.g;
Shinya Kitaoka 120a6e
  c_b                               = color.b;
Shinya Kitaoka 120a6e
  c_m                               = color.m;
Shinya Kitaoka 120a6e
  colbuffer                         = ras->cmap.colbuffer;
Shinya Kitaoka 120a6e
  index                             = color_index << info.tone_bits;
Shinya Kitaoka 120a6e
  for (tone = 0; tone < info.n_tones; tone++) {
Shinya Kitaoka 120a6e
    magic_tone         = tone * MAGICFAC;
Shinya Kitaoka 120a6e
    val.r              = (UCHAR)((c_r * magic_tone + (1 << 23)) >> 24);
Shinya Kitaoka 120a6e
    val.g              = (UCHAR)((c_g * magic_tone + (1 << 23)) >> 24);
Shinya Kitaoka 120a6e
    val.b              = (UCHAR)((c_b * magic_tone + (1 << 23)) >> 24);
Shinya Kitaoka 120a6e
    val.m              = (UCHAR)((c_m * magic_tone + (1 << 23)) >> 24);
Shinya Kitaoka 120a6e
    colbuffer[index++] = val;
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
void rop_fill_cmap_penramp(RASTER * ras, TCM_INFO info, LPIXEL pencil,
Shinya Kitaoka 120a6e
                           int pencil_index, int already_premultiplied) {
Shinya Kitaoka 120a6e
  LPIXEL val, *penbuffer;
Shinya Kitaoka 120a6e
  int index, enot;
Shinya Kitaoka 120a6e
  UINT magic_enot, p_r, p_g, p_b, p_m;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  if (!already_premultiplied) pencil = premult_lpixel(pencil);
Shinya Kitaoka 120a6e
  p_r                                = pencil.r;
Shinya Kitaoka 120a6e
  p_g                                = pencil.g;
Shinya Kitaoka 120a6e
  p_b                                = pencil.b;
Shinya Kitaoka 120a6e
  p_m                                = pencil.m;
Shinya Kitaoka 120a6e
  penbuffer                          = ras->cmap.penbuffer;
Shinya Kitaoka 120a6e
  index                              = pencil_index << info.tone_bits;
Shinya Kitaoka 120a6e
  for (enot = info.n_tones - 1; enot >= 0; enot--) {
Shinya Kitaoka 120a6e
    magic_enot         = enot * MAGICFAC;
Shinya Kitaoka 120a6e
    val.r              = (UCHAR)((p_r * magic_enot + (1 << 23)) >> 24);
Shinya Kitaoka 120a6e
    val.g              = (UCHAR)((p_g * magic_enot + (1 << 23)) >> 24);
Shinya Kitaoka 120a6e
    val.b              = (UCHAR)((p_b * magic_enot + (1 << 23)) >> 24);
Shinya Kitaoka 120a6e
    val.m              = (UCHAR)((p_m * magic_enot + (1 << 23)) >> 24);
Shinya Kitaoka 120a6e
    penbuffer[index++] = val;
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
void rop_custom_fill_cmap_ramp(RASTER * ras, TCM_INFO info, LPIXEL color,
Shinya Kitaoka 120a6e
                               LPIXEL pencil, int color_index, int pencil_index,
Shinya Kitaoka 120a6e
                               int already_premultiplied, int *custom_tone) {
Shinya Kitaoka 120a6e
  LPIXEL val, *ramp;
Shinya Kitaoka 120a6e
  int ramp_index;
Shinya Kitaoka 120a6e
  int c_r, c_g, c_b, c_m, p_r, p_g, p_b, p_m, d_r, d_g, d_b, d_m;
Shinya Kitaoka 120a6e
  int tone, tmax, tmax_2;
Shinya Kitaoka 120a6e
  int tmax_2_r, tmax_2_g, tmax_2_b, tmax_2_m;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  ramp_index =
Shinya Kitaoka 120a6e
      color_index << info.color_offs | pencil_index << info.pencil_offs;
Shinya Kitaoka 120a6e
  ramp = ras->cmap.buffer + ramp_index;
Shinya Kitaoka 120a6e
  if (!already_premultiplied) {
Shinya Kitaoka 120a6e
    color  = premult_lpixel(color);
Shinya Kitaoka 120a6e
    pencil = premult_lpixel(pencil);
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  c_r      = color.r;
Shinya Kitaoka 120a6e
  p_r      = pencil.r;
Shinya Kitaoka 120a6e
  d_r      = c_r - p_r;
Shinya Kitaoka 120a6e
  c_g      = color.g;
Shinya Kitaoka 120a6e
  p_g      = pencil.g;
Shinya Kitaoka 120a6e
  d_g      = c_g - p_g;
Shinya Kitaoka 120a6e
  c_b      = color.b;
Shinya Kitaoka 120a6e
  p_b      = pencil.b;
Shinya Kitaoka 120a6e
  d_b      = c_b - p_b;
Shinya Kitaoka 120a6e
  c_m      = color.m;
Shinya Kitaoka 120a6e
  p_m      = pencil.m;
Shinya Kitaoka 120a6e
  d_m      = c_m - p_m;
Shinya Kitaoka 120a6e
  tmax     = info.n_tones - 1;
Shinya Kitaoka 120a6e
  tmax_2   = tmax >> 1;
Shinya Kitaoka 120a6e
  tmax_2_r = d_r < 0 ? -tmax_2 : tmax_2;
Shinya Kitaoka 120a6e
  tmax_2_g = d_g < 0 ? -tmax_2 : tmax_2;
Shinya Kitaoka 120a6e
  tmax_2_b = d_b < 0 ? -tmax_2 : tmax_2;
Shinya Kitaoka 120a6e
  tmax_2_m = d_m < 0 ? -tmax_2 : tmax_2;
Shinya Kitaoka 120a6e
  for (tone = 0; tone < info.n_tones; tone++) {
Shinya Kitaoka 120a6e
    val.r      = p_r + (d_r * custom_tone[tone] + tmax_2_r) / tmax;
Shinya Kitaoka 120a6e
    val.g      = p_g + (d_g * custom_tone[tone] + tmax_2_g) / tmax;
Shinya Kitaoka 120a6e
    val.b      = p_b + (d_b * custom_tone[tone] + tmax_2_b) / tmax;
Shinya Kitaoka 120a6e
    val.m      = p_m + (d_m * custom_tone[tone] + tmax_2_m) / tmax;
Shinya Kitaoka 120a6e
    ramp[tone] = val;
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
void rop_custom_fill_cmap_colramp(RASTER * ras, TCM_INFO info, LPIXEL color,
Shinya Kitaoka 120a6e
                                  int color_index, int already_premultiplied,
Shinya Kitaoka 120a6e
                                  int *custom_tone) {
Shinya Kitaoka 120a6e
  LPIXEL val, *colbuffer;
Shinya Kitaoka 120a6e
  int index, tone;
Shinya Kitaoka 120a6e
  UINT magic_tone, c_r, c_g, c_b, c_m;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  if (!already_premultiplied) color = premult_lpixel(color);
Shinya Kitaoka 120a6e
  c_r                               = color.r;
Shinya Kitaoka 120a6e
  c_g                               = color.g;
Shinya Kitaoka 120a6e
  c_b                               = color.b;
Shinya Kitaoka 120a6e
  c_m                               = color.m;
Shinya Kitaoka 120a6e
  colbuffer                         = ras->cmap.colbuffer;
Shinya Kitaoka 120a6e
  index                             = color_index << info.tone_bits;
Shinya Kitaoka 120a6e
  for (tone = 0; tone < info.n_tones; tone++) {
Shinya Kitaoka 120a6e
    magic_tone         = custom_tone[tone] * MAGICFAC;
Shinya Kitaoka 120a6e
    val.r              = (UCHAR)((c_r * magic_tone + (1 << 23)) >> 24);
Shinya Kitaoka 120a6e
    val.g              = (UCHAR)((c_g * magic_tone + (1 << 23)) >> 24);
Shinya Kitaoka 120a6e
    val.b              = (UCHAR)((c_b * magic_tone + (1 << 23)) >> 24);
Shinya Kitaoka 120a6e
    val.m              = (UCHAR)((c_m * magic_tone + (1 << 23)) >> 24);
Shinya Kitaoka 120a6e
    colbuffer[index++] = val;
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
void rop_custom_fill_cmap_penramp(RASTER * ras, TCM_INFO info, LPIXEL pencil,
Shinya Kitaoka 120a6e
                                  int pencil_index, int already_premultiplied,
Shinya Kitaoka 120a6e
                                  int *custom_tone) {
Shinya Kitaoka 120a6e
  LPIXEL val, *penbuffer;
Shinya Kitaoka 120a6e
  int index, tone, maxtone;
Shinya Kitaoka 120a6e
  UINT magic_enot, p_r, p_g, p_b, p_m;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  if (!already_premultiplied) pencil = premult_lpixel(pencil);
Shinya Kitaoka 120a6e
  p_r                                = pencil.r;
Shinya Kitaoka 120a6e
  p_g                                = pencil.g;
Shinya Kitaoka 120a6e
  p_b                                = pencil.b;
Shinya Kitaoka 120a6e
  p_m                                = pencil.m;
Shinya Kitaoka 120a6e
  penbuffer                          = ras->cmap.penbuffer;
Shinya Kitaoka 120a6e
  index                              = pencil_index << info.tone_bits;
Shinya Kitaoka 120a6e
  maxtone                            = info.n_tones - 1;
Shinya Kitaoka 120a6e
  for (tone = 0; tone < info.n_tones; tone++) {
Shinya Kitaoka 120a6e
    magic_enot         = (maxtone - custom_tone[tone]) * MAGICFAC;
Shinya Kitaoka 120a6e
    val.r              = (UCHAR)((p_r * magic_enot + (1 << 23)) >> 24);
Shinya Kitaoka 120a6e
    val.g              = (UCHAR)((p_g * magic_enot + (1 << 23)) >> 24);
Shinya Kitaoka 120a6e
    val.b              = (UCHAR)((p_b * magic_enot + (1 << 23)) >> 24);
Shinya Kitaoka 120a6e
    val.m              = (UCHAR)((p_m * magic_enot + (1 << 23)) >> 24);
Shinya Kitaoka 120a6e
    penbuffer[index++] = val;
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
void rop_fill_cmap_buffer(RASTER * ras, TCM_INFO info, LPIXEL * color,
Shinya Kitaoka 120a6e
                          LPIXEL * pencil, int already_premultiplied) {
Shinya Kitaoka 120a6e
  int i, j;
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  for (i = 0; i < info.n_colors; i++)
Shinya Kitaoka 120a6e
    for (j = 0; j < info.n_pencils; j++)
Shinya Kitaoka 120a6e
      rop_fill_cmap_ramp(ras, info, color[i], pencil[j], i, j,
Shinya Kitaoka 120a6e
                         already_premultiplied);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
void rop_fill_cmap_colbuffer(RASTER * ras, TCM_INFO info, LPIXEL * color,
Shinya Kitaoka 120a6e
                             int already_premultiplied) {
Shinya Kitaoka 120a6e
  int i;
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  for (i = 0; i < info.n_colors; i++)
Shinya Kitaoka 120a6e
    rop_fill_cmap_colramp(ras, info, color[i], i, already_premultiplied);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?E 89
Shinya Kitaoka 120a6e
    /*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
    void
Shinya Kitaoka 120a6e
    rop_fill_cmap_penbuffer(RASTER * ras, TCM_INFO info, LPIXEL * pencil,
Shinya Kitaoka 120a6e
                            int already_premultiplied) {
Shinya Kitaoka 120a6e
  int i;
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  for (i = 0; i < info.n_pencils; i++)
Shinya Kitaoka 120a6e
    rop_fill_cmap_penramp(ras, info, pencil[i], i, already_premultiplied);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
void rop_custom_fill_cmap_buffer(RASTER * ras, TCM_INFO info, LPIXEL * color,
Shinya Kitaoka 120a6e
                                 LPIXEL * pencil, int already_premultiplied,
Shinya Kitaoka 120a6e
                                 int *custom_tone) {
Shinya Kitaoka 120a6e
  int i, j;
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  for (i = 0; i < info.n_colors; i++)
Shinya Kitaoka 120a6e
    for (j = 0; j < info.n_pencils; j++)
Shinya Kitaoka 120a6e
      rop_custom_fill_cmap_ramp(ras, info, color[i], pencil[j], i, j,
Shinya Kitaoka 120a6e
                                already_premultiplied, custom_tone);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
void rop_custom_fill_cmap_colbuffer(RASTER * ras, TCM_INFO info, LPIXEL * color,
Shinya Kitaoka 120a6e
                                    int already_premultiplied,
Shinya Kitaoka 120a6e
                                    int *custom_tone) {
Shinya Kitaoka 120a6e
  int i;
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  for (i = 0; i < info.n_colors; i++)
Shinya Kitaoka 120a6e
    rop_custom_fill_cmap_colramp(ras, info, color[i], i, already_premultiplied,
Shinya Kitaoka 120a6e
                                 custom_tone);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
void rop_custom_fill_cmap_penbuffer(RASTER * ras, TCM_INFO info,
Shinya Kitaoka 120a6e
                                    LPIXEL * pencil, int already_premultiplied,
Shinya Kitaoka 120a6e
                                    int *custom_tone) {
Shinya Kitaoka 120a6e
  int i;
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  for (i = 0; i < info.n_pencils; i++)
Shinya Kitaoka 120a6e
    rop_custom_fill_cmap_penramp(ras, info, pencil[i], i, already_premultiplied,
Shinya Kitaoka 120a6e
                                 custom_tone);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
void release_raster(RASTER * raster) {
Shinya Kitaoka 120a6e
  ?D 89 if (!raster->native_buffer)
Toshihiro Shimizu 890ddd
?E 89
Toshihiro Shimizu 890ddd
?I 89 rop_clear_extra(raster);
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  if (!(raster->native_buffer || raster->buffer))
Shinya Kitaoka 120a6e
		?E 89 {
Shinya Kitaoka 120a6e
      ?D 89 tmsg_error("release_raster,  missing buffer");
Shinya Kitaoka 120a6e
      return;
Shinya Kitaoka 120a6e
      ?E 89
Toshihiro Shimizu 890ddd
?I 89 tmsg_error("release_raster, missing buffer");
Shinya Kitaoka 120a6e
      return;
Shinya Kitaoka 120a6e
      ?E 89
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
  ?I 89 if (raster->native_buffer)
Shinya Kitaoka 120a6e
?I 99 {
Shinya Kitaoka 120a6e
    ?E 99 release_memory_chunk(raster->native_buffer);
Shinya Kitaoka 120a6e
    ?I 99 MEMORY_PRINTF("libero %x\n", raster->native_buffer);
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  ?E 99 else ?I 99 {
Shinya Kitaoka 120a6e
    ?E 99 release_memory_chunk(raster->buffer);
Shinya Kitaoka 120a6e
    ?I 99 MEMORY_PRINTF("libero %x\n", raster->buffer);
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  ?E 99
Toshihiro Shimizu 890ddd
?E 89
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?D 89 release_memory_chunk(raster->native_buffer);
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  ?E 89 if (raster->type == RAS_CM16 && raster->cmap.buffer)
Shinya Kitaoka 120a6e
      free(raster->cmap.buffer);
Shinya Kitaoka 120a6e
  ?D 89
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?E 89
Shinya Kitaoka 120a6e
?I 89 else if (raster->type == RAS_CM24 && raster->cmap.penbuffer) {
Shinya Kitaoka 120a6e
    free(raster->cmap.penbuffer);
Shinya Kitaoka 120a6e
    free(raster->cmap.colbuffer);
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  ?E 89 memset(raster, 0, sizeof(RASTER));
Shinya Kitaoka 120a6e
  return;
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?D 89
Shinya Kitaoka 120a6e
    /*-----------------------------------------------------------------*/
Toshihiro Shimizu 890ddd
?E 89
Toshihiro Shimizu 890ddd
?I 89
Shinya Kitaoka 120a6e
    /*---------------------------------------------------------------------------*/
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
    void
Shinya Kitaoka 120a6e
    rop_clear_extra(RASTER * raster) {
Shinya Kitaoka 120a6e
  if (raster->extra_mask && raster->type != RAS_CM24) {
Shinya Kitaoka 120a6e
    if (!(raster->native_extra || raster->extra)) {
Shinya Kitaoka 120a6e
      tmsg_error("release_extra, missing extra buffer");
Shinya Kitaoka 120a6e
      return;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    if (raster->native_extra)
Shinya Kitaoka 120a6e
			?I 99 {
Shinya Kitaoka 120a6e
        ?E 99 release_memory_chunk(raster->native_extra);
Shinya Kitaoka 120a6e
        ?I 99 MEMORY_PRINTF("libero extra %x\n", raster->native_extra);
Shinya Kitaoka 120a6e
      }
Shinya Kitaoka 120a6e
    ?E 99 else ?I 99 {
Shinya Kitaoka 120a6e
      ?E 99 release_memory_chunk(raster->extra);
Shinya Kitaoka 120a6e
      ?I 99 MEMORY_PRINTF("libero extra %x\n", raster->extra);
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    ?E 99
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  raster->extra_mask = 0;
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
void rop_clear_patches(RASTER * raster) {
Shinya Kitaoka 120a6e
  raster->extra_mask &= ~7;
Shinya Kitaoka 120a6e
  if (!raster->extra_mask) rop_clear_extra(raster);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
void rop_clear_extra_but_not_patches(RASTER * raster) {
Shinya Kitaoka 120a6e
  raster->extra_mask &= 7;
Shinya Kitaoka 120a6e
  if (!raster->extra_mask) rop_clear_extra(raster);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
?E 89
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?I 89
Shinya Kitaoka 120a6e
    /*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?E 89 void
Shinya Kitaoka 120a6e
create_raster(RASTER * raster, int xsize, int ysize, RAS_TYPE type) {
Shinya Kitaoka 120a6e
  int pixsize;
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  memset(raster, 0, sizeof(RASTER));
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  pixsize = rop_pixbytes(type);
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  if (!(raster->native_buffer = get_memory_chunk(xsize * ysize * pixsize)))
Shinya Kitaoka 120a6e
    ?D 86 tmsg_fatal("can't allocate %d Mbytes",
Shinya Kitaoka 120a6e
                     ((xsize / 1024) * (ysize / 1024)) * pixsize);
Shinya Kitaoka 120a6e
  ?E 86
Toshihiro Shimizu 890ddd
?I 86 tmsg_fatal("can't allocate %d Mbytes",
Shinya Kitaoka 120a6e
                  (xsize * ysize * pixsize + (512 * 1024)) / (1024 * 1024));
Shinya Kitaoka 120a6e
  ?E 86
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
?I 99 MEMORY_PRINTF("alloco %x: %dX%dX%d=%d bytes\n", raster->native_buffer,
Shinya Kitaoka 120a6e
                     xsize, ysize, pixsize, xsize * ysize * pixsize);
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  ?E 99 raster->buffer = raster->native_buffer;
Shinya Kitaoka 120a6e
  raster->type         = type;
Shinya Kitaoka 120a6e
  raster->wrap = raster->lx = xsize;
Shinya Kitaoka 120a6e
  raster->ly                = ysize;
Shinya Kitaoka 120a6e
  ?I 86 switch (type) {
Shinya Kitaoka 120a6e
    CASE RAS_CM16 : raster->cmap.info = Tcm_new_default_info;
Shinya Kitaoka 120a6e
    CASE RAS_CM24 : raster->cmap.info = Tcm_24_default_info;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  ?E 86 return;
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
/*-----------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
?D 89 int create_subraster(RASTER * rin, RASTER * rout, int x0, int y0, int x1,
Shinya Kitaoka 120a6e
                           int y1)
Toshihiro Shimizu 890ddd
?E 89
Toshihiro Shimizu 890ddd
?I 89 void
Shinya Kitaoka 120a6e
create_raster_with_extra(RASTER * raster, int xsize, int ysize, RAS_TYPE type,
Shinya Kitaoka 120a6e
                         UCHAR extra_mask) {
Shinya Kitaoka 120a6e
  create_raster(raster, xsize, ysize, type);
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  raster->extra_mask = extra_mask;
Shinya Kitaoka 120a6e
  if (extra_mask && type != RAS_CM24) {
Shinya Kitaoka 120a6e
    if (!(raster->native_extra = get_memory_chunk(xsize * ysize)))
Shinya Kitaoka 120a6e
      tmsg_fatal("can't allocate %d Mbytes",
Shinya Kitaoka 120a6e
                 (xsize * ysize + (512 * 1024)) / (1024 * 1024));
Shinya Kitaoka 120a6e
    ?I 99 MEMORY_PRINTF("alloco extra %x: %dX%d=%d bytes\n",
Shinya Kitaoka 120a6e
                        raster->native_extra, xsize, ysize, xsize * ysize);
Shinya Kitaoka 120a6e
    ?E 99 raster->extra = raster->native_extra;
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
/*-----------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
int create_subraster(RASTER * rin, RASTER * rout, int x0, int y0, int x1,
Shinya Kitaoka 120a6e
                     int y1)
Shinya Kitaoka 120a6e
?E 89 {
Shinya Kitaoka 120a6e
  if (x1 < x0 || y1 < y0) return FALSE;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  *rout                    = *rin;
Shinya Kitaoka 120a6e
  if (x0 < 0) x0           = 0;
Shinya Kitaoka 120a6e
  if (y0 < 0) y0           = 0;
Shinya Kitaoka 120a6e
  if (x1 > rin->lx - 1) x1 = rin->lx - 1;
Shinya Kitaoka 120a6e
  if (y1 > rin->ly - 1) y1 = rin->ly - 1;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  rout->lx = x1 - x0 + 1;
Shinya Kitaoka 120a6e
  rout->ly = y1 - y0 + 1;
Shinya Kitaoka 120a6e
  rout->buffer =
Shinya Kitaoka 120a6e
      (UCHAR *)(rin->buffer) + (y0 * rin->wrap + x0) * rop_pixbytes(rin->type);
Shinya Kitaoka 120a6e
  ?I 89 if (rin->extra) rout->extra = rin->extra + x0 + y0 * rin->wrap;
Shinya Kitaoka 120a6e
  ?E 89 return TRUE;
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
/*-----------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
void clone_raster(RASTER * rin, RASTER * rout) {
Shinya Kitaoka 120a6e
  ?I 91 int size;
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  ?E 91
Toshihiro Shimizu 890ddd
?D 89 create_raster(rout, rin->lx, rin->ly, rin->type);
Shinya Kitaoka 120a6e
  ?I 85
Toshihiro Shimizu 890ddd
  
Toshihiro Shimizu 890ddd
?E 89
Toshihiro Shimizu 890ddd
?I 89
Shinya Kitaoka 120a6e
?D 90 create_raster_with_extra(rout, rin->lx, rin->ly, rin->type,
Shinya Kitaoka 120a6e
                                rin->extra_mask);
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  ?E 90
Toshihiro Shimizu 890ddd
?I 90
Toshihiro Shimizu 890ddd
?D 92 create_raster(rout, rin->lx, rin->ly, rin->type);
Shinya Kitaoka 120a6e
  ?E 92
Shinya Kitaoka 120a6e
?I 92 create_raster_with_extra(rout, rin->lx, rin->ly, rin->type,
Shinya Kitaoka 120a6e
                                rin->extra_mask);
Shinya Kitaoka 120a6e
  ?E 92
Toshihiro Shimizu 890ddd
  
Toshihiro Shimizu 890ddd
?E 90
Toshihiro Shimizu 890ddd
?E 89
Toshihiro Shimizu 890ddd
?E 85 rop_copy(rin, rout, 0, 0, rin->lx - 1, rin->ly - 1, 0, 0);
Shinya Kitaoka 120a6e
  ?I 85 if (rin->type == RAS_CM16 || rin->type == RAS_CM24)
Shinya Kitaoka 120a6e
?I 90 {
Shinya Kitaoka 120a6e
    ?E 90 rout->cmap = rin->cmap;
Shinya Kitaoka 120a6e
    ?I 90
Toshihiro Shimizu 890ddd
?D 91 TCALLOC(rout->cmap.buffer, TCM_CMAP_BUFFER_SIZE(rout->cmap.info));
Shinya Kitaoka 120a6e
    memcpy(rout->cmap.buffer, rin->cmap.buffer,
Shinya Kitaoka 120a6e
           TCM_CMAP_BUFFER_SIZE(rout->cmap.info));
Shinya Kitaoka 120a6e
    if (rin->type == RAS_CM24)
Shinya Kitaoka 120a6e
      ?E 91
Toshihiro Shimizu 890ddd
?I 91
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
          if (rin->cmap.buffer)
Shinya Kitaoka 120a6e
?E 91 {
Shinya Kitaoka 120a6e
        ?D 91 if (rin->cmap.penbuffer) {
Shinya Kitaoka 120a6e
          TCALLOC(rout->cmap.penbuffer,
Shinya Kitaoka 120a6e
                  TCM_CMAP_PENBUFFER_SIZE(rout->cmap.info));
Shinya Kitaoka 120a6e
          memcpy(rout->cmap.penbuffer, rin->cmap.penbuffer,
Shinya Kitaoka 120a6e
                 TCM_CMAP_PENBUFFER_SIZE(rout->cmap.info));
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
        if (rin->cmap.colbuffer) {
Shinya Kitaoka 120a6e
          TCALLOC(rout->cmap.colbuffer,
Shinya Kitaoka 120a6e
                  TCM_CMAP_COLBUFFER_SIZE(rout->cmap.info));
Shinya Kitaoka 120a6e
          memcpy(rout->cmap.colbuffer, rin->cmap.colbuffer,
Shinya Kitaoka 120a6e
                 TCM_CMAP_COLBUFFER_SIZE(rout->cmap.info));
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
        ?E 91
Toshihiro Shimizu 890ddd
?I 91 size = TCM_CMAP_BUFFER_SIZE(rout->cmap.info);
Shinya Kitaoka 120a6e
        TMALLOC(rout->cmap.buffer, size);
Shinya Kitaoka 120a6e
        memcpy(rout->cmap.buffer, rin->cmap.buffer, size * sizeof(LPIXEL));
Shinya Kitaoka 120a6e
      }
Shinya Kitaoka 120a6e
    if (rin->cmap.penbuffer) {
Shinya Kitaoka 120a6e
      size = TCM_CMAP_PENBUFFER_SIZE(rout->cmap.info);
Shinya Kitaoka 120a6e
      TMALLOC(rout->cmap.penbuffer, size);
Shinya Kitaoka 120a6e
      memcpy(rout->cmap.penbuffer, rin->cmap.penbuffer, size * sizeof(LPIXEL));
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
      size = TCM_CMAP_COLBUFFER_SIZE(rout->cmap.info);
Shinya Kitaoka 120a6e
      TMALLOC(rout->cmap.colbuffer, size);
Shinya Kitaoka 120a6e
      memcpy(rout->cmap.colbuffer, rin->cmap.colbuffer, size * sizeof(LPIXEL));
Shinya Kitaoka 120a6e
      ?E 91
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  ?E 90
Toshihiro Shimizu 890ddd
?E 85
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
?I 87
Shinya Kitaoka 120a6e
    /*-----------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
    void
Shinya Kitaoka 120a6e
    convert_raster(RASTER * r, RAS_TYPE type) {
Shinya Kitaoka 120a6e
  RASTER raux;
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  if (r->type == type) return;
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  ?D 89 create_raster(&raux, r->lx, r->ly, type);
Shinya Kitaoka 120a6e
  ?E 89
Toshihiro Shimizu 890ddd
?I 89 create_raster_with_extra(&raux, r->lx, r->ly, type, r->extra_mask);
Shinya Kitaoka 120a6e
  ?E 89 rop_copy(r, &raux, 0, 0, r->lx - 1, r->ly - 1, 0, 0);
Shinya Kitaoka 120a6e
  release_raster(r);
Shinya Kitaoka 120a6e
  *r = raux;
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
?I 98
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
    /*-----------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
    static UCHAR Reverse_lut[256];
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
static void init_reverse_lut(void) {
Shinya Kitaoka 120a6e
  UCHAR meta_lut[] = {0x0, 0x8, 0x4, 0xc, 0x2, 0xa, 0x6, 0xe,
Shinya Kitaoka 120a6e
                      0x1, 0x9, 0x5, 0xd, 0x3, 0xb, 0x7, 0xf};
Shinya Kitaoka 120a6e
  static int i = 0;
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  if (i == 256) return;
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  for (i           = 0; i < 256; i++)
Shinya Kitaoka 120a6e
    Reverse_lut[i] = (meta_lut[i & 0xf] << 4) | (meta_lut[i >> 4]);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
/*------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
?I 105 static void rop_mirror_v_cm16_rgbm(RASTER * rin, RASTER * rout) {
Shinya Kitaoka 120a6e
  LPIXEL *rowout, *pixout, *cmap;
Shinya Kitaoka 120a6e
  USHORT *rowin, *pixin;
Shinya Kitaoka 120a6e
  int wrapin, wrapout;
Shinya Kitaoka 120a6e
  int x, lx, ly;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  cmap    = rin->cmap.buffer - rin->cmap.info.offset_mask;
Shinya Kitaoka 120a6e
  lx      = rin->lx;
Shinya Kitaoka 120a6e
  ly      = rin->ly;
Shinya Kitaoka 120a6e
  wrapin  = rin->wrap;
Shinya Kitaoka 120a6e
  wrapout = rout->wrap;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  rowin  = (USHORT *)rin->buffer;
Shinya Kitaoka 120a6e
  rowout = (LPIXEL *)rout->buffer + wrapout * (ly - 1);
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  while (ly-- > 0) {
Shinya Kitaoka 120a6e
    pixin  = rowin;
Shinya Kitaoka 120a6e
    pixout = rowout;
Shinya Kitaoka 120a6e
    for (x = 0; x < lx; x++) *pixout++ = cmap[*pixin++];
Shinya Kitaoka 120a6e
    rowin += wrapin;
Shinya Kitaoka 120a6e
    rowout -= wrapout;
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
/*------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
static void rop_mirror_v_cm24_rgbm(RASTER * rin, RASTER * rout) {
Shinya Kitaoka 120a6e
  LPIXEL *rowout, *pixout, valout, *penmap, *colmap;
Shinya Kitaoka 120a6e
  ULONG *rowin, *pixin, valin;
Shinya Kitaoka 120a6e
  UCHAR *exrow, *expix;
Shinya Kitaoka 120a6e
  int wrapin, wrapout;
Shinya Kitaoka 120a6e
  int x, lx, ly, lines;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  penmap  = rin->cmap.penbuffer;
Shinya Kitaoka 120a6e
  colmap  = rin->cmap.colbuffer;
Shinya Kitaoka 120a6e
  lx      = rin->lx;
Shinya Kitaoka 120a6e
  ly      = rin->ly;
Shinya Kitaoka 120a6e
  lines   = ly;
Shinya Kitaoka 120a6e
  wrapin  = rin->wrap;
Shinya Kitaoka 120a6e
  wrapout = rout->wrap;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  rowin  = (ULONG *)rin->buffer;
Shinya Kitaoka 120a6e
  rowout = (LPIXEL *)rout->buffer + wrapout * (ly - 1);
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  while (lines-- > 0) {
Shinya Kitaoka 120a6e
    pixin  = rowin;
Shinya Kitaoka 120a6e
    pixout = rowout;
Shinya Kitaoka 120a6e
    for (x = 0; x < lx; x++) {
Shinya Kitaoka 120a6e
      valin = *pixin++;
Shinya Kitaoka 120a6e
      MAP24(valin, penmap, colmap, valout)
Shinya Kitaoka 120a6e
      *pixout++ = valout;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    rowin += wrapin;
Shinya Kitaoka 120a6e
    rowout -= wrapout;
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd

Toshihiro Shimizu 890ddd
/*------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
?E 105 void rop_mirror(RASTER * rin, RASTER * rout, TBOOL is_vertical) {
Shinya Kitaoka 120a6e
  UCHAR *buffer1, *buffer2, *auxbuf;
Shinya Kitaoka 120a6e
  int bpp, lx, ly, wrapin, wrapout, scanline_in, scanline_out, lx_size;
Shinya Kitaoka 120a6e
  int i, j;
Shinya Kitaoka 120a6e
  lx      = rin->lx;
Shinya Kitaoka 120a6e
  ly      = rin->ly;
Shinya Kitaoka 120a6e
  wrapin  = rin->wrap;
Shinya Kitaoka 120a6e
  wrapout = rout->wrap;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  ?I 105 if (rin->type == RAS_CM16 && rout->type == RAS_RGBM && is_vertical) {
Shinya Kitaoka 120a6e
    rop_mirror_v_cm16_rgbm(rin, rout);
Shinya Kitaoka 120a6e
    return;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  if (rin->type == RAS_CM24 && rout->type == RAS_RGBM && is_vertical) {
Shinya Kitaoka 120a6e
    rop_mirror_v_cm24_rgbm(rin, rout);
Shinya Kitaoka 120a6e
    return;
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  ?E 105 assert(rin->type == rout->type);
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  bpp          = rop_pixbytes(rin->type);
Shinya Kitaoka 120a6e
  scanline_in  = wrapin * bpp;
Shinya Kitaoka 120a6e
  scanline_out = wrapout * bpp;
Shinya Kitaoka 120a6e
  lx_size      = lx * bpp;
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  ?D 100 if (rin->type == RAS_BW)
Toshihiro Shimizu 890ddd
?E 100
Shinya Kitaoka 120a6e
?I 100 if ((rin->type == RAS_BW) || (rin->type == RAS_WB))
Shinya Kitaoka 120a6e
?E 100 {
Shinya Kitaoka 120a6e
    lx_size      = (lx_size + 7) / 8;
Shinya Kitaoka 120a6e
    scanline_in  = (scanline_in + 7) / 8;
Shinya Kitaoka 120a6e
    scanline_out = (scanline_out + 7) / 8;
Shinya Kitaoka 120a6e
    if (!is_vertical) init_reverse_lut();
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd

Shinya Kitaoka 120a6e
  buffer1 = rin->buffer;
Shinya Kitaoka 120a6e

Shinya Kitaoka 120a6e
  if (is_vertical)
Shinya Kitaoka 120a6e
		?D 105 {
Shinya Kitaoka 120a6e
      ?E 105
Shinya Kitaoka 120a6e
?I 105 {
Shinya Kitaoka 120a6e
        ?E 105 buffer2 = (UCHAR *)rout->buffer + (ly - 1) * scanline_out;
Shinya Kitaoka 120a6e
        TMALLOC(auxbuf, lx_size)
Shinya Kitaoka 120a6e
        for (i = 0; i < ly / 2; i++) {
Shinya Kitaoka 120a6e
          memcpy(auxbuf, buffer1, lx_size);
Shinya Kitaoka 120a6e
          memcpy(buffer1, buffer2, lx_size);
Shinya Kitaoka 120a6e
          memcpy(buffer2, auxbuf, lx_size);
Shinya Kitaoka 120a6e
          buffer1 += scanline_in;
Shinya Kitaoka 120a6e
          buffer2 -= scanline_out;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
      }
Shinya Kitaoka 120a6e
      else {
Shinya Kitaoka 120a6e
        buffer2 = (UCHAR *)rout->buffer + lx_size;
Shinya Kitaoka 120a6e
        TMALLOC(auxbuf, bpp)
Shinya Kitaoka 120a6e
        for (i = 0; i < ly; i++) {
Shinya Kitaoka 120a6e
          for (j = 0; j < lx_size / 2; j += bpp) {
Shinya Kitaoka 120a6e
            memcpy(auxbuf, buffer1 + j, bpp);
Shinya Kitaoka 120a6e
            memcpy(buffer1 + j, buffer1 + lx_size - j - bpp, bpp);
Shinya Kitaoka 120a6e
            memcpy(buffer2 - j - bpp, auxbuf, bpp);
Shinya Kitaoka 120a6e
            if (rin->type == RAS_BW) {
Shinya Kitaoka 120a6e
              buffer1[lx_size - j - bpp] =
Shinya Kitaoka 120a6e
                  Reverse_lut[buffer1[lx_size - j - bpp]];
Shinya Kitaoka 120a6e
              buffer1[j] = Reverse_lut[buffer1[j]];
Shinya Kitaoka 120a6e
            }
Shinya Kitaoka 120a6e
            ?I 102 else if (rin->type == RAS_WB) {
Shinya Kitaoka 120a6e
              buffer1[lx_size - j - bpp] =
Shinya Kitaoka 120a6e
                  ~Reverse_lut[buffer1[lx_size - j - bpp]];
Shinya Kitaoka 120a6e
              buffer1[j] = ~Reverse_lut[buffer1[j]];
Shinya Kitaoka 120a6e
            }
Shinya Kitaoka 120a6e
            ?E 102
Shinya Kitaoka 120a6e
          }
Shinya Kitaoka 120a6e
          buffer1 += scanline_in;
Shinya Kitaoka 120a6e
          buffer2 += scanline_out;
Shinya Kitaoka 120a6e
        }
Shinya Kitaoka 120a6e
      }
Shinya Kitaoka 120a6e
      free(auxbuf);
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
  ?E 98
Toshihiro Shimizu 890ddd
?E 87
Toshihiro Shimizu 890ddd
?E 84