# HG changeset patch # User Matti Hamalainen # Date 1530645468 -10800 # Node ID c848a6133cfc46d20f55f5a4f282ef42ce9d0b63 # Parent 07ddf9cfc6c22d965367095dff6f50e45bb43d5b Fix many calculations (divisions) that assume integer variable division semantics by truncating to int(). Also add two helper functions chop2(v) and chop8(v) and use them where appropriate. diff -r 07ddf9cfc6c2 -r c848a6133cfc Interface.pde --- a/Interface.pde Tue Jul 03 21:27:18 2018 +0300 +++ b/Interface.pde Tue Jul 03 22:17:48 2018 +0300 @@ -368,12 +368,11 @@ g = g >> 8; b = s & 0x000000ff; g = g + 64; - r = r * 2; - g = g * 2; - b = b * 2; - r = r / 3; - g = g / 3; - b = b / 3; + + r = int((r * 2) / 3); + g = int((g * 2) / 3); + b = int((b * 2) / 3); + pixels[ad + xx] = 0xff000000 + r * 0x10000 + g * 0x100 + b; } ad = ad + width; @@ -406,7 +405,8 @@ //draw one icon int ad, cad, xx, yy, pop, far; int metal; - yy = t / 16; + + yy = int(t / 16); xx = t - yy * 16; xx = xx * 2; yy = yy * 2; @@ -428,9 +428,11 @@ if (g_depressed[t] > 0) metal = 0xff303030; if (t == 56 || t == 9) metal = 0xffa0a0a0; } - pop = 1; - cad = 65536 + (xx + x / 8) + yy * 256 + y * 32; - if (int(g_icons[cad]) == 0) pop = 0; + + cad = 65536 + (xx + int(x / 8)) + yy * 256 + y * 32; + + pop = (int(g_icons[cad]) == 0) ? 0 : 1; + if (int(g_icons[ad + x]) == pop) { far = metal; if (mm == 1) far = 0xffffff80; @@ -453,7 +455,7 @@ int ad, cad, x, y, xx, yy, far; far = 0xff000000; t = t - 32; - yy = t / 32; + yy = int(t / 32); xx = t - yy * 32; yy = yy + 18; for (y = 0; y <= 7; y++) { @@ -583,8 +585,9 @@ if (a < X && b < Y) { printat(0, 0, str(a)); printat(4, 0, str(b)); - printat(0, 1, str(a / 8)); - printat(4, 1, str(b / 8)); + printat(0, 1, str(int(a / 8))); + printat(4, 1, str(int(b / 8))); + if (tool() == 6 && g_phase == 1) { printat(0, 2, nf(dist(0, 0, a - 1, b - 1), 0, 2)); float av = getangel(g_rx2 - g_rx, g_ry2 - g_ry); @@ -1031,13 +1034,11 @@ far = 0xff000000; maxp = g_maxcolors; - xonko = 512 / g_maxcolors; - xonko = xonko / 2; - xonko = xonko * g_uizoom; + xonko = int(int(512 / g_maxcolors) / 2) * g_uizoom; if (g_maxcolors > 32) { - maxp = g_maxcolors / 2; - xonko = 1024 / g_maxcolors; + maxp = int(g_maxcolors / 2); + xonko = int(1024 / g_maxcolors); } if (machine == PLUS4 || machine == PLUS4M) xonko = 15 * g_uizoom; @@ -1106,8 +1107,8 @@ e_rect(xloc, yloc + 1, xonko / 8, yhei / 4, far); } if (g_backg == x) { - e_rect(xloc + xonko - xonko / 4, yloc + yhei - 2, xonko / 4, yhei / 4, far); - e_rect(xloc + xonko - xonko / 8, yloc + yhei - 3, xonko / 8, yhei / 4, far); + e_rect(xloc + xonko - xonko / 4, yloc + yhei - 2, int(xonko / 4), int(yhei / 4), far); + e_rect(xloc + xonko - xonko / 8, yloc + yhei - 3, int(xonko / 8), int(yhei / 4), far); } } if (int(g_map[0]) == x) { @@ -1121,13 +1122,13 @@ if (int(g_map[1]) == x) { far = 0xff000000; if (dist(g_r[x], g_g[x], g_b[x], 0, 0, 0) < 1) far = 0xffffffff; - e_rect(xloc + xonko / 4, yloc + yhei / 4, xonko / 4, yhei / 4, far); + e_rect(xloc + int(xonko / 4), yloc + int(yhei / 4), int(xonko / 4), int(yhei / 4), far); } if (machine == PLUS4 || machine == PLUS4M) { if (int(g_map[1]) != 255 && int(g_map[2]) == x) { far = 0xff000000; if (dist(g_r[x], g_g[x], g_b[x], 0, 0, 0) < 1) far = 0xffffffff; - e_rect(xloc + xonko - (xonko / 4) * 2, yloc + yhei - (yhei / 4) * 2, xonko / 4, yhei / 4, far); + e_rect(xloc + xonko - int(xonko / 4) * 2, yloc + yhei - int(yhei / 4) * 2, int(xonko / 4), int(yhei / 4), far); } } } @@ -1352,7 +1353,7 @@ int po, vop; for (x = 0; x <= 7; x++) { //pixel columns inside pixel row - vop = x / 2; + vop = int(x / 2); if (g_multic == 0) { if (int(g_map[ad + x]) == 1) { fari = a; @@ -1376,8 +1377,7 @@ if (g_rubbermode == 1) { // rubberband mode rubx = x; if (g_multic == 1 || g_hzoomer == 2) { - rubx = x / 2; - rubx = rubx * 2; + rubx = chop2(x); } if (fylli() == 1) { if (xx * 8 + rubx == g_rx || xx * 8 + rubx == g_rx2) { @@ -1579,23 +1579,21 @@ //draw grid //can in principle be non-square if (int(g_data[int('g')]) == 1) { - int lapx; - lapx = (xx * 8) / g_gridx; - lapx = lapx * g_gridx; + int lapx = int((xx * 8) / g_gridx) * g_gridx; if (lapx == (xx * 8)) { t_rect(xo * mag + winsux, yo * mag + winsuy, 1, mag, g_rgb[257]); if (g_gridx == 4) { - t_rect(xo * mag + winsux + 4 * psize, yo * mag + winsuy + 1, 1, mag / 2 - 2, g_rgb[257]); - t_rect(xo * mag + winsux + 4 * psize, yo * mag + winsuy + mag - mag / 2 + 2, 1, mag / 2 - 2, g_rgb[257]); + t_rect(xo * mag + winsux + 4 * psize, yo * mag + winsuy + 1, 1, int(mag / 2) - 2, g_rgb[257]); + t_rect(xo * mag + winsux + 4 * psize, yo * mag + winsuy + mag - int(mag / 2) + 2, 1, int(mag / 2) - 2, g_rgb[257]); } } - lapx = (yy * 8) / g_gridy; - lapx = lapx * g_gridy; + lapx = int((yy * 8) / g_gridy) * g_gridy; + if (lapx == (yy * 8)) { t_rect(xo * mag + winsux + 1, yo * mag + winsuy, mag - 1, 1, g_rgb[257]); if (g_gridy == 4) { - t_rect(xo * mag + winsux + 1, yo * mag + winsuy + 4 * psize, mag / 2 - 2, 1, g_rgb[257]); - t_rect(xo * mag + winsux + 2 + mag - mag / 2, yo * mag + winsuy + 4 * psize, mag / 2 - 2, 1, g_rgb[257]); + t_rect(xo * mag + winsux + 1, yo * mag + winsuy + 4 * psize, int(mag / 2) - 2, 1, g_rgb[257]); + t_rect(xo * mag + winsux + 2 + mag - int(mag / 2), yo * mag + winsuy + 4 * psize, int(mag / 2) - 2, 1, g_rgb[257]); } } } diff -r 07ddf9cfc6c2 -r c848a6133cfc draw_inputs.pde --- a/draw_inputs.pde Tue Jul 03 21:27:18 2018 +0300 +++ b/draw_inputs.pde Tue Jul 03 22:17:48 2018 +0300 @@ -28,11 +28,11 @@ //the "slow" call to mark "dirty block" void updatepoint(int xx, int yy) { if (yy < 0 || xx < 0 || xx >= X || yy >= Y) return; - xx = xx / 8; - yy = yy / 8; - xx = xx + yy * MX; - g_redo[xx] = byte(0); //block update - g_remdo[xx] = byte(1); //block update + xx = int(xx / 8); + yy = int(yy / 8); + int ad = xx + yy * MX; + g_redo[ad] = byte(0); //block update + g_remdo[ad] = byte(1); //block update } int getmultibrush(int x1, int y1) { @@ -43,7 +43,7 @@ if (g_multic == 2) return g_brush[1024 + x1 + y1 * X]; ad = 1024 + x1 + y1 * X; - looks = 65536 + (x1 / 8) + (y1 / 8) * MX; + looks = 65536 + int(x1 / 8) + int(y1 / 8) * MX; mmc = g_brush[ad] + g_brush[ad + 1] * 2; switch (mmc) { case 0: @@ -71,12 +71,11 @@ if (mode == 0) return g_map[looks]; if (mode == 1) return g_brush[looks]; } - x1 = x1 / 2; - x1 = x1 * 2; + x1 = chop2(x1); ad = 1024 + x1 + y1 * X; source1 = 0; source2 = 0; - looks = 65536 + (x1 / 8) + (y1 / 8) * MX; + looks = 65536 + int(x1 / 8) + int(y1 / 8) * MX; if (mode == 0) { source1 = g_map[ad]; source2 = g_map[ad + 1]; @@ -134,8 +133,8 @@ if (mode == 0) return getmultic(xx, yy, 0); return g_map[1]; // was 0? } - xx = xx / 8; - yv = yy / 8; + xx = int(xx / 8); + yv = int(yy / 8); int ad = 65536 + xx + yy * MX; if (mode == 0) { val = g_map[ad]; @@ -155,8 +154,7 @@ int chek; val = 0; sad = 1024 + xx + yy * X; - xx = xx / 8; - ad = 65536 + xx + yy * MX; + ad = 65536 + int(xx / 8) + yy * MX; chek = int(g_map[sad]); if (chek == 100 || chek == 200) return chek; @@ -270,10 +268,10 @@ int horisize; int molox = 1; if (g_multic == 1) molox = 2; - horisize = X / g_animx; + horisize = int(X / g_animx); g_animno = g_animno + 1; if (g_animno > g_animframes) g_animno = 1; - by = g_animno / horisize; + by = int(g_animno / horisize); bx = g_animno - (by * horisize); g_bsourcex = bx * g_animx; g_bsourcey = by * g_animy; @@ -293,12 +291,10 @@ xx = xx + g_raster_offset_x * molox; yy = yy + g_raster_offset_y; if (g_multic == 1 || g_hzoomer == 2) { - xx = xx / 2; + xx = int(xx / 2); } - int mx = xx / 8; - int my = yy / 8; - mx = mx * 8; - my = my * 8; + int mx = chop8(xx); + int my = chop8(yy); xx = xx - mx; yy = yy - my; return g_fixedraster[xx + yy * 8]; diff -r 07ddf9cfc6c2 -r c848a6133cfc draw_outputs.pde --- a/draw_outputs.pde Tue Jul 03 21:27:18 2018 +0300 +++ b/draw_outputs.pde Tue Jul 03 22:17:48 2018 +0300 @@ -1,6 +1,17 @@ // Collect all that "writes" the virtual image in some way or other // plus other active manipulations +int chop2(int v) +{ + return int(v / 2) * 2; +} + +int chop8(int v) +{ + return int(v / 8) * 8; +} + + void createpoint(int x, int y, int mo) { if (mo == LEFT) makepoint(x, y); if (mo == RIGHT) clearpoint(x, y); @@ -94,21 +105,19 @@ if (tempx > g_bsourcex + 16) tempx = g_bsourcex + 16; if (tempy > g_bsourcey + 16) tempy = g_bsourcey + 16; } - midx = (g_bsourcex2 - g_bsourcex) / 2; - midy = (g_bsourcey2 - g_bsourcey) / 2; + midx = int((g_bsourcex2 - g_bsourcex) / 2); + midy = int((g_bsourcey2 - g_bsourcey) / 2); if (g_data[int('c')] == 1 || g_shift == true) { if (g_data[int('q')] == 1) { - midy = midy / g_gridx; - midy = midy * g_gridx; - midx = midx / g_gridx; - midx = midx * g_gridx; + // XXX is this g_gridx an error? + midy = int(midy / g_gridx) * g_gridx; + midx = int(midx / g_gridx) * g_gridx; } } int orient; orient = g_data[int('x')] * 100 + g_data[int('y')] * 10 + g_data[int('q')]; if (g_multic == 1 || g_hzoomer == 2) { - x = x / 2; - x = x * 2; + x = chop2(x); molox = 2; passes = 1; } @@ -242,10 +251,8 @@ molox = 1; //multicolor 160 pixel reso if (g_multic == 1 || g_hzoomer == 2) { - xfrom = xfrom / 2; - xfrom = xfrom * 2; - xto = xto / 2; - xto = xto * 2; + xfrom = chop2(xfrom); + xto = chop2(xto); } craft(xfrom, yfrom, 0); @@ -255,8 +262,8 @@ if (prevent == 0) craft(xto, yto, 0); if (g_multic == 1 || g_hzoomer == 2) { - xfrom = xfrom / 2; - xto = xto / 2; + xfrom = int(xfrom / 2); + xto = int(xto / 2); molox = 2; } @@ -352,7 +359,8 @@ void docircle(int x1, int y1, int x2, int y2) { float dds, a, t, sx, sy, gear1, gear2, x0, y0; - int kimea, prex, prey; + int prex, prey; + dds = dist(x1, y1, x2, y2); gear1 = int(dds); if (gear1 <= 12) gear1 = 12; @@ -365,10 +373,6 @@ if (g_data[int('t')] == 1 && x2 > x1 + 15) x2 = x1 + 16; if (g_data[int('t')] == 1 && y2 > y1 + 15) y2 = y1 + 16; - prex = 0; - prey = 0; - kimea = y1 - (y2 - y1); - if (g_data[int('f')] == 1 && g_btype != 9) { if (g_multic == 1 && g_data[int('d')] == 0) { g_farge = g_map[1]; @@ -378,6 +382,8 @@ docircx(x1, y1, abs(x2 - int(x1)), abs(y2 - int(y1))); } + prex = 0; + prey = 0; for (t = 0; t <= (gear2); t++) { a = t / (gear1) * PI; sx = (x2 - x1) * sin(a); @@ -392,14 +398,10 @@ int x0, y0, molox; int yt, xt; int xf, yf; - xf = x1 / 8; - xf = xf * 8; - xt = x2 / 8; - xt = xt * 8; - yf = y1 / 8; - yf = yf * 8; - yt = y2 / 8; - yt = yt * 8; + xf = chop8(x1); + xt = chop8(x2); + yf = chop8(y1); + yt = chop8(y2); yt = yt + 7; xt = xt + 6; molox = 1; @@ -520,8 +522,7 @@ } if (g_multic == 1 || g_hzoomer == 2) { - xx = xx / 2; - xx = xx * 2; + xx = chop2(xx); } if (g_data[int('r')] == 1) { //simple raster @@ -531,22 +532,20 @@ if (g_data[int('R')] == 1) { //user defined raster if (g_bsourcex2 > g_bsourcex && g_bsourcey2 > g_bsourcey) { - int x0 = xx / ((g_bsourcex2 + 1) - g_bsourcex); - int y0 = yy / ((g_bsourcey2 + 1) - g_bsourcey); + int x0 = int(xx / ((g_bsourcex2 + 1) - g_bsourcex)); + int y0 = int(yy / ((g_bsourcey2 + 1) - g_bsourcey)); int x1 = xx - x0 * ((g_bsourcex2 + 1) - g_bsourcex); int y1 = yy - y0 * ((g_bsourcey2 + 1) - g_bsourcey); int xr = g_bsourcex + x1; int yr = g_bsourcey + y1; if (g_multic == 1 || g_hzoomer == 2) { - x0 = xx / ((g_bsourcex2 + 2) - g_bsourcex); - y0 = yy / ((g_bsourcey2 + 1) - g_bsourcey); + x0 = int(xx / ((g_bsourcex2 + 2) - g_bsourcex)); + y0 = int(yy / ((g_bsourcey2 + 1) - g_bsourcey)); x1 = xx - x0 * ((g_bsourcex2 + 2) - g_bsourcex); - x1 = x1 / 2; - x1 = x1 * 2; + x1 = chop2(x1); y1 = yy - y0 * ((g_bsourcey2 + 1) - g_bsourcey); xr = g_bsourcex + x1; - xr = xr / 2; - xr = xr * 2; + xr = chop2(xr); yr = g_bsourcey + y1; if (getmultic(xr, yr, 1) == g_backg) ignore = 1; } else { @@ -563,11 +562,9 @@ aba = getattra(xx, yy, 0); baba = getattra(xx, yy, 1); if (g_multic == 0) { - ojox = xx / 8; - ojoy = yy / 8; - ojox = ojox * 8; - ojoy = ojoy * 8; - miny = (yy - ojoy); + ojox = chop8(xx); + ojoy = chop8(yy); + miny = yy - ojoy; maxy = miny; if (g_attrimode == 1) { miny = 0; @@ -590,15 +587,15 @@ ignore = 1; } } - xc = xx / 8; - yc = yy / 8; + xc = int(xx / 8); + yc = int(yy / 8); g_redo[xc + yc * MX] = byte(0); //block update g_remdo[xc + yc * MX] = byte(1); //block update } if (ignore == 0) { - xc = xx / 8; - yc = yy / 8; + xc = int(xx / 8); + yc = int(yy / 8); g_redo[xc + yc * MX] = byte(0); //block update g_remdo[xc + yc * MX] = byte(1); //block update @@ -614,12 +611,10 @@ if (getattra(xx, yy, 1) == fari) { g_map[1024 + xx + yy * X] = byte(0); } else { - int ojox = xx / 8; - int ojoy = yy / 8; + int ojox = chop8(xx); + int ojoy = chop8(yy); int mac, macpre, maxos; int maxoy, miny, maxy; - ojox = ojox * 8; - ojoy = ojoy * 8; mac = 0; macpre = 0; miny = 0; @@ -680,11 +675,11 @@ // X Y mirrors if (g_data[int('t')] == 1) { if (tiler == 0) { - int ex = X / g_gridx; - int ey = Y / g_gridy; + int ex = int(X / g_gridx); + int ey = int(Y / g_gridy); for (int tilx = -ex; tilx <= ex; tilx++) { for (int tily = -ey; tily <= ey; tily++) { - makepoint(20000 + xx + (X / ex) * tilx, yy + (Y / ey) * tily); + makepoint(20000 + xx + int(X / ex) * tilx, yy + int(Y / ey) * tily); } } } @@ -708,11 +703,11 @@ fars[1] = zeroc; fars[2] = zeroc; fars[3] = zeroc; - mex = xx / 8; - mey = yy / 8; + mex = int(xx / 8); + mey = int(yy / 8); looks = 65536 + mex + mey * MX; - mex = mex * 8; - mey = mey * 8; + mex = int(mex * 8); + mey = int(mey * 8); int saps = 1024 + mex + mey * X; for (metay = 0; metay <= 7; metay++) { @@ -829,11 +824,11 @@ if (g_data[int('t')] == 1) { if (tiler == 0) { - int ex = X / g_gridx; - int ey = Y / g_gridy; + int ex = int(X / g_gridx); + int ey = int(Y / g_gridy); for (int tilx = -(ex); tilx <= ex; tilx++) { for (int tily = -(ey); tily <= ey; tily++) { - makepoint(20000 + xx + (X / ex) * tilx, yy + (Y / ey) * tily); + makepoint(20000 + xx + int(X / ex) * tilx, yy + int(Y / ey) * tily); } } } @@ -856,8 +851,7 @@ return; } if (g_multic == 1) { - xx = xx / 2; - xx = xx * 2; + xx = chop2(xx); } g_farge = g_backg; makepoint(xx, yy); @@ -892,8 +886,7 @@ return; } if (g_multic == 1 || g_hzoomer == 2) { - xx = xx / 2; - xx = xx * 2; + xx = chop2(xx); } if (g_data[int('b')] == 1) return; if (g_data[int('r')] == 1) { //raster @@ -902,8 +895,8 @@ if (g_data[int('R')] == 1) { //user defined raster if (g_bsourcex2 > g_bsourcex && g_bsourcey2 > g_bsourcey) { - int x0 = xx / ((g_bsourcex2 + 1) - g_bsourcex); - int y0 = yy / ((g_bsourcey2 + 1) - g_bsourcey); + int x0 = int(xx / ((g_bsourcex2 + 1) - g_bsourcex)); + int y0 = int(yy / ((g_bsourcey2 + 1) - g_bsourcey)); int x1 = xx - x0 * ((g_bsourcex2 + 1) - g_bsourcex); int y1 = yy - y0 * ((g_bsourcey2 + 1) - g_bsourcey); int xr = g_bsourcex + x1; @@ -915,8 +908,8 @@ if (ignore == 0) { g_map[1024 + xx + yy * X] = byte(0); if (g_multic == 1 || g_hzoomer == 2) g_map[1024 + xx + yy * X + 1] = byte(0); - int xc = xx / 8; - int yc = yy / 8; + int xc = int(xx / 8); + int yc = int(yy / 8); g_redo[xc + yc * MX] = byte(0); //block update g_remdo[xc + yc * MX] = byte(1); //block update } @@ -929,9 +922,9 @@ void simplepaint(int xx, int yy, int mode, int attr) { int ad, swad, j, miny, maxy, ojyx; - xx = xx / 8; - ojyx = yy / 8; - ojyx = ojyx * 8; + xx = int(xx / 8); + ojyx = chop8(yy); + ad = 0; swad = 0; miny = yy - ojyx; @@ -960,7 +953,7 @@ } } -void do_tool(int x, int y, int mb) { +void do_tool(int qqx, int qqy, int mb) { int tt, ox, oy, psizex, psizey; tt = tool(); psizex = g_magpix[magmode()]; @@ -970,25 +963,26 @@ if (g_data[int('m')] == 0 && g_data[int('M')] == 0) { if (g_uizoom == 1) { - x = x / 2; - y = y / 2; + x = int(qqx / 2); + y = int(qqy / 2); } if (g_uizoom == 2) { - x = x / 3; - y = y / 3; + x = int(qqx / 3); + y = int(qqy / 3); } if (g_uizoom == 3) { - x = x / 4; - y = y / 4; + x = int(qqx / 4); + y = int(qqy / 4); } + } else + if (g_data[int('m')] == 1 || g_data[int('M')] == 1) { + x = int(qqx / psizex) + g_ofx * 8; + y = int(qqy / psizey) + g_ofy * 8; + } else { + x = int(qqx); + y = int(qqy); } - if (g_data[int('m')] == 1 || g_data[int('M')] == 1) { - x = x / psizex; - y = y / psizey; - x = x + g_ofx * 8; - y = y + g_ofy * 8; - } ox = x; oy = y; @@ -1000,23 +994,19 @@ //brush handle mid point //some tools are exempted if (g_btype == 9 && tool() != 4 && tool() != 0 && mb != 255) { - midx = (g_bsourcex2 - g_bsourcex) / 2; - midy = (g_bsourcey2 - g_bsourcey) / 2; + midx = int((g_bsourcex2 - g_bsourcex) / 2); + midy = int((g_bsourcey2 - g_bsourcey) / 2); x = x - midx; y = y - midy; } if (g_data[int('c')] == 1 || g_shift) { - x = x / g_gridx; - x = x * g_gridx; - y = y / g_gridy; - y = y * g_gridy; + x = int(x / g_gridx) * g_gridx; + y = int(y / g_gridy) * g_gridy; } if (g_multic == 1 || g_hzoomer == 2) { - x = x / 2; - x = x * 2; - ox = ox / 2; - ox = ox * 2; + x = chop2(x); + ox = chop2(ox); } if (mb == 254) { //block picker @@ -1026,10 +1016,9 @@ g_data[int('y')] = 0; g_data[int('q')] = 0; g_data[int('z')] = 0; - x = ox / g_gridx; - x = x * g_gridx; - y = oy / g_gridy; - y = y * g_gridy; + x = int(ox / g_gridx) * g_gridx; + y = int(oy / g_gridy) * g_gridy; + g_bsourcex = x; g_bsourcey = y; g_bsourcex2 = x + g_gridx - 1; @@ -1042,16 +1031,14 @@ if (mb == 255) { // color picker if (g_multic == 2) { if (g_hzoomer == 2) { - ox = ox / 2; - ox = ox * 2; + ox = chop2(ox); } selectcolor(0, getmultic(ox, oy, 0)); return; } selectcolor(0, getabsa(ox, oy, 0)); if (g_multic == 1 || g_hzoomer == 2) { - ox = ox / 2; - ox = ox * 2; + ox = chop2(ox); selectcolor(0, getattra(ox, oy, 0)); } g_ofarge = g_farge; @@ -1126,12 +1113,12 @@ if (tt == 0) { // magnifier graphic tool g_data[int('m')] = 1; - g_rx = x - (magx() / 2) * 8; g_orx = x; - g_ry = y - (magy() / 2) * 8; g_ory = y; - g_rx2 = x + (magx() / 2 + odd(magx())) * 8; - g_ry2 = y + (magy() / 2 + odd(magy())) * 8; + g_rx = x - int(magx() / 2) * 8; + g_ry = y - int(magy() / 2) * 8; + g_rx2 = x + (int(magx() / 2) + odd(magx())) * 8; + g_ry2 = y + (int(magy() / 2) + odd(magy())) * 8; g_data[int('m')] = 0; g_rubbermode = 1; if (g_phase == 1) { @@ -1139,8 +1126,9 @@ g_data[int('m')] = 1; set_tool(g_prevtool); g_phase = 0; - g_ofx = x / 8 - magx() / 2; - g_ofy = y / 8 - magy() / 2; + + g_ofx = int(x / 8) - int(magx() / 2); + g_ofy = int(y / 8) - int(magy() / 2); refresh(); g_repanel = -2; } diff -r 07ddf9cfc6c2 -r c848a6133cfc draw_smart.pde --- a/draw_smart.pde Tue Jul 03 21:27:18 2018 +0300 +++ b/draw_smart.pde Tue Jul 03 22:17:48 2018 +0300 @@ -60,8 +60,7 @@ if (g_multic == 1 || g_hzoomer == 2) molox = 2; if (molox == 2) { - xx = xx / 2; - xx = xx * 2; + xx = chop2(xx); } if (mou == LEFT) { par = g_farge; @@ -150,11 +149,10 @@ int aa, bb, pp, ya, yb; ya = 0; yb = 0; - xx = xx / 8; + xx = int(xx / 8); if (g_attrimode == 1) { - yy = yy / 8; - yy = yy * 8; + yy = chop8(yy); ya = 0; yb = 7; } //zx spec etc @@ -194,10 +192,9 @@ pt = int(g_map[1024 + xx + yy * X]); if (pt == 0 && g_data[int('r')] == 0 && g_data[int('R')] == 0) { //println("trans char "+xx+"."+yy); - xx = xx / 8; + xx = int(xx / 8); if (g_attrimode == 1) { - yy = yy / 8; - yy = yy * 8; + yy = chop8(yy); ya = 0; yb = 7; } //zx spec etc @@ -309,19 +306,18 @@ if (foreg == 8 || backg == 8 || foreg == 0 || backg == 0) return; } - miny = y / 8; - miny = miny * 8; + miny = chop8(y); maxy = y - miny; miny = maxy; - y = y / 8; - y = y * 8; + y = chop8(y); + if (g_attrimode == 1) { miny = 0; maxy = 7; } for (int i = miny; i <= maxy; i++) { - bad = 65536 + (x / 8) + (y + i) * MX; + bad = 65536 + int(x / 8) + (y + i) * MX; cad = bad + MX * (MY * 8); if (foreg >= 0) { g_map[bad] = byte(foreg); @@ -343,8 +339,8 @@ //bit different for C64 and PLUS4M void skaveri(int x, int y, int foreg, int backg) { - int mx = x / 8; - int my = y / 8; + int mx = int(x / 8); + int my = int(y / 8); if (g_control == false) return; int cc = easygetcolor(x, y); mx = mx * 8; @@ -360,8 +356,8 @@ } void mkaveri(int x, int y, int foreg, int backg) { - int mx = x / 8; - int my = y / 8; + int mx = int(x / 8); + int my = int(y / 8); int ad, bad, cad, dad, b0, b1; int f0, f1, f2, f3, free1, free2, free3; int f, order, numb, suffocatelimit; @@ -579,8 +575,8 @@ int farge0, farge1; if (g_multic != 0 || g_hzoomer == 2) return; if (g_data[int('d')] == 1) return; - mx = x / 8; - my = y / 8; + mx = int(x / 8); + my = int(y / 8); if (g_attrimode == 1) { k_max = 64; @@ -588,8 +584,7 @@ maxy = 7; } else { k_max = 8; - miny = y / 8; - miny = miny * 8; + miny = chop8(y); maxy = y - miny; miny = maxy; } @@ -730,11 +725,10 @@ k_v0 = 0; k_v1 = 0; k_tipping = 4; - k_xx = x / 8; - k_yy = y / 8; + k_xx = chop8(x); k_yy = k_yy * 8; - k_ojox = x / 8; - k_ojoy = y / 8; + k_ojox = int(x / 8); + k_ojoy = int(y / 8); k_ojox = k_ojox * 8; k_ojoy = k_ojoy * 8; k_miny = (y - k_ojoy); diff -r 07ddf9cfc6c2 -r c848a6133cfc events.pde --- a/events.pde Tue Jul 03 21:27:18 2018 +0300 +++ b/events.pde Tue Jul 03 22:17:48 2018 +0300 @@ -176,10 +176,8 @@ g_data[int('n')] = 0; switcher(2); if (g_multic == 1 || g_hzoomer == 2) { - g_rx = g_rx / 2; - g_rx = g_rx * 2; - g_rx2 = g_rx2 / 2; - g_rx2 = g_rx2 * 2; + g_rx = chop2(g_rx); + g_rx2 = chop2(g_rx2); } g_bsourcex = g_rx; g_bsourcey = g_ry; @@ -470,8 +468,8 @@ if (g_data[int('M')] == 1) { if (ckey == 'M') { - g_ofx = g_storedcoordx / 8 - magx() / 2; - g_ofy = g_storedcoordy / 8 - magy() / 2; + g_ofx = int(g_storedcoordx / 8) - int(magx() / 2); + g_ofy = int(g_storedcoordy / 8) - int(magy() / 2); g_data[int('m')] = 0; message("Super|Magnify"); if (tool() == 0) { @@ -648,10 +646,10 @@ if (ckey == 'm') { g_data[int('M')] = 0; int moux, mouy; - moux = g_mx / g_wzoom; - mouy = g_my / g_wzoom; - g_ofx = moux / (8) - magx() / 2; - g_ofy = mouy / (8) - magy() / 2; + moux = int(g_mx / g_wzoom); + mouy = int(g_my / g_wzoom); + g_ofx = int(moux / 8) - int(magx() / 2); + g_ofy = int(mouy / 8) - int(magy() / 2); message("Magnify"); if (tool() == 0) { set_tool(g_prevtool); diff -r 07ddf9cfc6c2 -r c848a6133cfc exporters.pde --- a/exporters.pde Tue Jul 03 21:27:18 2018 +0300 +++ b/exporters.pde Tue Jul 03 22:17:48 2018 +0300 @@ -1039,7 +1039,7 @@ for (y2 = 0; y2 <= 7; y2++) { for (y = 0; y < 25; y++) { outputter(" .byte ", false); - for (x = 0; x < xwid / 2; x++) { + for (x = 0; x < int(xwid / 2); x++) { ad = 1024 + (y * 8) * X + (y2 * X) + x * 4; val1 = int(g_map[ad]); @@ -1067,7 +1067,7 @@ outputter(str(int(val2)), false); write_head(val2); pp++; - if (x < xwid / 2 - 1) { + if (x < int(xwid / 2) - 1) { outputter(",", false); } } @@ -1355,10 +1355,8 @@ for (cx = 0; cx < MX; cx++) { for (yy = cy * vertti; yy <= cy * vertti + vertti - 1; yy++) { for (xx = cx * 8; xx <= cx * 8 + 7; xx = xx + molox) { - fx2 = (ww / X) * xx; - fy2 = (hh / Y) * yy; - x2 = int(fx2); - y2 = int(fy2); + x2 = int(ww / X) * xx; + y2 = int(hh / Y) * yy; rr = 0; gg = 0; bb = 0; @@ -1419,10 +1417,8 @@ } for (yy = cy * vertti; yy <= cy * vertti + vertti - 1; yy++) { for (xx = cx * 8; xx <= cx * 8 + 7; xx = xx + molox) { - fx2 = (ww / X) * xx; - fy2 = (hh / Y) * yy; - x2 = int(fx2); - y2 = int(fy2); + x2 = int(ww / X) * xx; + y2 = int(hh / Y) * yy; rr = 0; gg = 0; bb = 0; @@ -1473,10 +1469,8 @@ for (yy = cy * vertti; yy <= cy * vertti + vertti - 1; yy++) { for (xx = cx * 8; xx <= cx * 8 + 7; xx = xx + molox) { - fx2 = (ww / X) * xx; - fy2 = (hh / Y) * yy; - x2 = int(fx2); - y2 = int(fy2); + x2 = int(ww / X) * xx; + y2 = int(hh / Y) * yy; rr = 0; gg = 0; diff -r 07ddf9cfc6c2 -r c848a6133cfc multipaint.pde --- a/multipaint.pde Tue Jul 03 21:27:18 2018 +0300 +++ b/multipaint.pde Tue Jul 03 22:17:48 2018 +0300 @@ -202,16 +202,16 @@ set_machine(machine); g_windowx = width - (g_hedge) - (g_wzoom * X); - g_windowx = g_windowx / 2; + g_windowx = int(g_windowx / 2); g_windowy = height - (g_vedge) - (g_wzoom * Y); - g_windowy = g_windowy / 2; + g_windowy = int(g_windowy / 2); switcher(3); g_map[4] = byte(g_maxcolors - 1); g_ofarge = g_farge; - MX = X / 8; - MY = Y / 8; + MX = int(X / 8); + MY = int(Y / 8); g_realfront = byte(g_farge); g_realback = byte(g_backg);