\class {vpane} \name {inset_chess} \children {inset_chess.ctrls inset_chess.bd} \script { switch (arg[0]) { case "make": set("parent", arg[1]); return get("height"); break; } usual(); } \BDColor {white} \FGColor {white} \BGColor {grey45} \width {350} \height {370} \ \class {field} \name {inset_chess.ctrls} \parent {inset_chess} \script { switch (arg[0]) { case "output": send(parent(), "output", arg[1]); return; break; } usual(); } \maxHeight {1} \ \class {field} \name {inset_chess.bd} \parent {inset_chess} \font {normal} \script { /*for (i=0; i < arg[]; i++) print(">>>> tf: arg[", i, "]=", arg[i], "<<\n"); */ switch (arg[0]) { case "expose": if (madeCells == 0) { send("inset_chess.cell", "setup", self()); cy = height(); bw = 0; for (ri = 0; ri < 8; ri++) { cx = 15; bw = ri % 2; cy = cy - cellh; for (ci = 0; ci < 8; ci++) { new = send("inset_chess.cell","clone"); send(new, "make", ri, ci, bw % 2, cellw, cellh); objectListAppend("children", new); cx = cx + cellw; bw++; } } objectListSend("children", "visible", 1); createdCells = 1; /* create and setup pieces */ setup = "wh_cas 7 0\nwh_knt 7 1\nwh_bis 7 2\nwh_kin 7 3\nwh_que 7 4\nwh_bis 7 5\nwh_knt 7 6\nwh_cas 7 7\nwh_pwn 6 0\nwh_pwn 6 1\nwh_pwn 6 2\nwh_pwn 6 3\nwh_pwn 6 4\nwh_pwn 6 5\nwh_pwn 6 6\nwh_pwn 6 7\nbk_pwn 1 0\nbk_pwn 1 1\nbk_pwn 1 2\nbk_pwn 1 3\nbk_pwn 1 4\nbk_pwn 1 5\nbk_pwn 1 6\nbk_pwn 1 7\nbk_cas 0 0\nbk_knt 0 1\nbk_bis 0 2\nbk_kin 0 3\nbk_que 0 4\nbk_bis 0 5\nbk_knt 0 6\nbk_cas 0 7\n"; ln = countLines(setup); whitePiecesCount = 0; for (j = 0; j < ln; j++) { pieceInfo = nthLine(setup, j); kind = nthWord(pieceInfo, 1, 2); row = int(nthWord(pieceInfo, 3)); col = int(nthWord(pieceInfo, 4)); template = concat("inset_chess.", kind); new = send(template, "clone"); send(new, "make", self()); send(new, "place", row, col); objectListAppend("children", new); send(new, "visible", 1); whitePieces[whitePiecesCount++] = new; } /* square labels */ objectListAppend("children","inset_chess.bd.rowLabel"); send("inset_chess.bd.rowLabel", "setup", self(), cellh, height() - 18); objectListAppend("children","inset_chess.bd.colLabel"); send("inset_chess.bd.colLabel", "setup", self(), cellw, height() - 17, width() - 15); madeCells = 1; } return; break; case "cellObjByRowCol": return nthChild(arg[1] * 8 + arg[2]); break; case "cellSelected": case "pieceSelected": prevPieceSelected = currPieceSelected; currPieceSelected = arg[1]; currPieceRowCol = send(currPieceSelected, "rowcol"); /* print(">>>> currPieceSelected=", currPieceSelected, " (", currPieceRowCol[0], ",", currPieceRowCol[1],")\n"); */ if (prevPieceSelected) { prevPieceRowCol = send(prevPieceSelected, "rowcol"); print(">>>> MOVING from (", prevPieceRowCol[0], ",", prevPieceRowCol[1],") to (", currPieceRowCol[0], ",", currPieceRowCol[1],")\n"); send(prevPieceSelected, "go_in_style", currPieceRowCol[0], currPieceRowCol[1]); prevPieceSelected = 0; currPieceSelected = 0; } return; break; case "showText": print(">>>> insert: ", arg[1], "<<\n"); insert(arg[1]); insert('\n'); return; break; case "mouseMove": if (penDownP) { x0 = x1; y0 = y1; x1 = arg[1]; y1 = arg[2]; drawLine(x0, y0, x1, y1); send(parent(), "output", concat("LINE ", x0, ' ', y0, ' ', x1, ' ', y1)); } return; break; case "buttonPress": penDownP = 1; x0 = mouseX(); y0 = mouseY(); x1 = x0; y1 = y0; break; case "buttonRelease": penDownP = 0; break; case "showLine": tt = arg[1]; nx0 = nthWord(tt, 2); ny0 = nthWord(tt, 3); nx1 = nthWord(tt, 4); ny1 = nthWord(tt, 5); drawLine(nx0, ny0, nx1, ny1); return; break; case "userMesg": print("MESSAGE: ", arg[1], "\n"); return; break; case "userMesg_illegalMove": bell(); print("ATTENTION: ", arg[1], "\n"); return; break; case "config": usual(); cellw = (width() - 15) / 8; cellh = (height() - 15) / 8; if (madeCells) { for (childN = 63; childN >= 0; childN--) send(nthChild(childN), "resize", cellw, cellh); for (i = 0; i < whitePiecesCount; i++) send(whitePieces[i], "adjustGeometry"); send("inset_chess.bd.rowLabel", "adjustGeometry", cellh, height() - 18); send("inset_chess.bd.colLabel", "adjustGeometry", cellw, height() - 17, width() - 15); } return; break; case "setUpWhitePieces": for (i = 0; i < whitePiecesCount; i++) whitePieces[i]; return; break; case "init": usual(); return; break; } usual(); } \BDColor {black} \BGColor {grey45} \gapH {2} \gapV {2} \ \class {field} \name {inset_chess.cell} \script { switch (arg[0]) { case "make": /* arg[1] row * arg[2] col * arg[3] black(0) or white(1)? * arg[4] width * arg[5] height */ rowcol[0] = arg[1]; rowcol[1] = arg[2]; set("width", arg[4]); set("height", arg[5]); set("x", arg[2] * width() + 15); set("y", arg[1] * height()); if (arg[3]) set("BGColor", "grey80"); else set("BGColor", "CadetBlue"); return; break; case "x,y,width,height": xywh[0] = x(); xywh[1] = y(); xywh[2] = width(); xywh[3] = height(); return xywh; break; case "rowcol": return rowcol; break; case "resize": /* arg[1] width * arg[2] height */ set("width", arg[1]); set("height", arg[2]); set("x", width() * rowcol[1] + 15); set("y", height() * rowcol[0]); return; break; case "buttonRelease": send(parent(), "cellSelected", self()); break; case "setup": /* arg[1] parent */ set("parent", arg[1]); return; break; case "clone": return clone(i++); break; } usual(); } \BDColor {black} \ \class {field} \name {inset_chess.bd.rowLabel} \script { switch (arg[0]) { case "adjustGeometry": span = arg[1]; set("height", arg[2]); clearWindow(); send(self(), "draw"); return; break; case "expose": send(self(), "draw"); return; break; case "setup": set("parent", arg[1]); span = arg[2]; set("height", arg[3]); set("visible", 1); return; break; case "draw": y = height() - (span / 2) - 8; for (ri = 0; ri < 8; ri++) { drawText(2, y, 0, ri + 1); y = y - span; } return; break; } usual(); } \width {13} \FGColor {white} \BGColor {grey45} \BDColor {black} \ \class {field} \name {inset_chess.bd.colLabel} \script { switch (arg[0]) { case "adjustGeometry": span = arg[1]; set("y", arg[2]); set("width", arg[3]); clearWindow(); send(self(), "draw"); return; break; case "expose": send(self(), "draw"); return; break; case "setup": set("parent", arg[1]); span = arg[2]; set("y", arg[3]); set("width", arg[4]); set("visible", 1); return; break; case "draw": x = span / 2 - 4; c = 'a'; for (ci = 0; ci < 8; ci++) { drawText(x, y, 0, ascii(asciiVal('a') + ci)); x += span; } return; break; } usual(); } \x {15} \height {15} \FGColor {white} \BGColor {grey45} \BDColor {black} \ \class {XPM} \name {inset_chess.wh_knt} \script { switch (arg[0]) { case "adjustGeometry": cell_xywh = send(cell, "x,y,width,height"); set("x", cell_xywh[0] + (cell_xywh[2] - width()) / 2); set("y", cell_xywh[1] + (cell_xywh[3] - height()) / 2); return; break; case "place": /*row,col*/ rowcol[0] = arg[1]; rowcol[1] = arg[2]; cell = send(parent(), "cellObjByRowCol", rowcol[0], rowcol[1]); cell_xywh = send(cell, "x,y,width,height"); set("x", cell_xywh[0] + (cell_xywh[2] - width()) / 2); set("y", cell_xywh[1] + (cell_xywh[3] - height()) / 2); return; break; case "go": /*row,col*/ if (send(self(), "validDest?", arg[1], arg[2]) == 0) { send(parent(), "userMesg_illegalMove", "Illegal move."); return; } send(self(), "place", arg[1], arg[2]); return; break; case "go_in_style": /*row,col*/ if (send(self(), "validDest?", arg[1], arg[2]) == 0) { send(parent(), "userMesg_illegalMove", "Illegal move."); return; } rowcol[0] = arg[1]; rowcol[1] = arg[2]; cell = send(parent(), "cellObjByRowCol", rowcol[0], rowcol[1]); cell_xywh = send(cell, "x,y,width,height"); destx = cell_xywh[0] + (cell_xywh[2] - width()) / 2; desty = cell_xywh[1] + (cell_xywh[3] - height()) / 2; x = x(); y = y(); dx = (destx - x) / 5.0; dy = (desty - y) / 5.0; for (i = 0; i < 5; i++) { x += dx; y += dy; set("x", x); set("y", y); } set("x", destx); set("y", desty); return; break; case "rowcol": return rowcol; break; case "validDest?": rowDiff = arg[1] - rowcol[0]; if (rowDiff < 0) rowDiff = -rowDiff; /* dude, add abs() */ colDiff = arg[2] - rowcol[1]; if (colDiff < 0) colDiff = -colDiff; if (rowDiff == 1) { if (colDiff == 2) return 1; } else if (rowDiff == 2) { if (colDiff == 1) return 1; } return 0; break; case "buttonRelease": dest = send(parent(), "pieceSelected", self()); break; case "make": set("parent", arg[1]); return; break; case "clone": return clone(cid++); break; } usual(); } \BDColor {black} \BGColor {white} \width {32} \height {32} \label {/* XPM */ static char * wh_knt [] = { "32 32 5 1", " s None c None", ". c white", "X c black", "o c gray", "O c gray50", " ............ ", " ...XXXXXXXXXXXX. ", " ..XXXooXooXooooX. ", " .XXoXoooXooXoooX. ", " .XooooXoooooooooX. ", " .XXooo......oXXXXX...... ", " .XooX..............XXXXXX. ", " .Xooo......O............X. ", " .XoXoo.....Oo...........X.X. ", " .XooX......Oo.............X. ", " .XXooo.....XOo........oooOX. ", " .XXoo......XOOooooooOOOOX. ", " .XoX........XOOOooXXXXXX. ", " .Xoo.........XXXXXX..... ", " .XXooo............X. ", " .XoXoo.............X. ", " .XooX..............oX. ", " .Xooo...............oX. ", " .XXXoo...............oX. ", " .XooX................oOX. ", ".Xoooo................oOX. ", " .Xoooo..............ooOX. ", " .XXX..............oOOOX. ", " ...XXX.......ooooOOOX..... ", " .XXXXXXXooooooooOOOXXXXXXXX. ", " .XooooooooooooooooooooooooooX. ", ".Xo..........................oX.", ".X............................X.", ".X............................X.", " .X..........................X. ", " .XXXXXXXXXXXXXXXXXXXXXXXXXX. ", " .......................... "}; } \ \class {XPM} \name {inset_chess.wh_bis} \script { switch (arg[0]) { case "adjustGeometry": cell_xywh = send(cell, "x,y,width,height"); set("x", cell_xywh[0] + (cell_xywh[2] - width()) / 2); set("y", cell_xywh[1] + (cell_xywh[3] - height()) / 2); return; break; case "place": /*row,col*/ rowcol[0] = arg[1]; rowcol[1] = arg[2]; cell = send(parent(), "cellObjByRowCol", rowcol[0], rowcol[1]); cell_xywh = send(cell, "x,y,width,height"); set("x", cell_xywh[0] + (cell_xywh[2] - width()) / 2); set("y", cell_xywh[1] + (cell_xywh[3] - height()) / 2); return; break; case "go": /*row,col*/ if (send(self(), "validDest?", arg[1], arg[2]) == 0) { send(parent(), "userMesg_illegalMove", "Illegal move."); return; } send(self(), "place", arg[1], arg[2]); return; break; case "go_in_style": /*row,col*/ if (send(self(), "validDest?", arg[1], arg[2]) == 0) { send(parent(), "userMesg_illegalMove", "Illegal move."); return; } rowcol[0] = arg[1]; rowcol[1] = arg[2]; cell = send(parent(), "cellObjByRowCol", rowcol[0], rowcol[1]); cell_xywh = send(cell, "x,y,width,height"); destx = cell_xywh[0] + (cell_xywh[2] - width()) / 2; desty = cell_xywh[1] + (cell_xywh[3] - height()) / 2; x = x(); y = y(); dx = (destx - x) / 5.0; dy = (desty - y) / 5.0; for (i = 0; i < 5; i++) { x += dx; y += dy; set("x", x); set("y", y); } set("x", destx); set("y", desty); return; break; case "rowcol": return rowcol; break; case "validDest?": rowDiff = arg[1] - rowcol[0]; if (rowDiff < 0) rowDiff = -rowDiff; /* dude, add abs() */ colDiff = arg[2] - rowcol[1]; if (colDiff < 0) colDiff = -colDiff; if (rowDiff == colDiff) return 1; return 0; break; case "buttonRelease": dest = send(parent(), "pieceSelected", self()); break; case "make": set("parent", arg[1]); return; break; case "clone": return clone(cid++); break; } usual(); } \BDColor {black} \BGColor {white} \width {32} \height {32} \label {/* XPM */ static char * wh_bis [] = { "32 32 6 1", " s None c None", ". c black", "X c white", "o c gray", "O c gray30", "+ c red", " ", " .. ", " .XX. ", " .oXXX. ", " .ooXXXX. ", " .ooXXXXXX. ", " .ooXXXXXX. ", " .Oo.XXXXXXX. ", " .Oo.XXXXXXX. ++ ", " .Oo.XXXXXXX. X++ ", " .OooXXXXXXX. Xo. ", " .OooXXXXXXX. X. ", " .OooXXXXXXX. Xo. ", " .OOoXXXXXXX. Xo. ", " .OoXXXXXX. Xo. ", " .OoXXXX. Xo. ", " ....OO.... X. ", " ..XXXXXXXOoOX. ", " .ooXXXXXXXXXXoO. ", " .OoooXXXXXXXXo.oO. ", " ..OOooXXXXXXXo.XooO. ", " .XX..OooXXXXXXX.XXooO. ", " .XXXX.OOooXXXo.XXXXoO. ", " .XXXXXX..OooXo.XXXXXoO.. ", " .XXXXXXXX..oooXXXXXXooO. ", " .oXXXXXXXXX...ooXXXXooO. ", " .oooXXXXXXXXXXX....XXooOO. ", " .OoooooXXXXXXXXXXXX...OOO. ", " .OOoooooooooooXXXXXXXX.... ", " .OOOOoooooooooooooooooooO. ", " .OOOOOOOOOOOOOOOOOOOOOOOO. ", " ........................ "}; } \ \class {XPM} \name {inset_chess.wh_kin} \script { switch (arg[0]) { case "adjustGeometry": cell_xywh = send(cell, "x,y,width,height"); set("x", cell_xywh[0] + (cell_xywh[2] - width()) / 2); set("y", cell_xywh[1] + (cell_xywh[3] - height()) / 2); return; break; case "place": /*row,col*/ rowcol[0] = arg[1]; rowcol[1] = arg[2]; cell = send(parent(), "cellObjByRowCol", rowcol[0], rowcol[1]); cell_xywh = send(cell, "x,y,width,height"); set("x", cell_xywh[0] + (cell_xywh[2] - width()) / 2); set("y", cell_xywh[1] + (cell_xywh[3] - height()) / 2); return; break; case "go": /*row,col*/ if (send(self(), "validDest?", arg[1], arg[2]) == 0) { send(parent(), "userMesg_illegalMove", "Illegal move."); return; } send(self(), "place", arg[1], arg[2]); return; break; case "go_in_style": /*row,col*/ if (send(self(), "validDest?", arg[1], arg[2]) == 0) { send(parent(), "userMesg_illegalMove", "Illegal move."); return; } rowcol[0] = arg[1]; rowcol[1] = arg[2]; cell = send(parent(), "cellObjByRowCol", rowcol[0], rowcol[1]); cell_xywh = send(cell, "x,y,width,height"); destx = cell_xywh[0] + (cell_xywh[2] - width()) / 2; desty = cell_xywh[1] + (cell_xywh[3] - height()) / 2; x = x(); y = y(); dx = (destx - x) / 5.0; dy = (desty - y) / 5.0; for (i = 0; i < 5; i++) { x += dx; y += dy; set("x", x); set("y", y); } set("x", destx); set("y", desty); return; break; case "rowcol": return rowcol; break; case "validDest?": rowDiff = arg[1] - rowcol[0]; if (rowDiff < 0) rowDiff = -rowDiff; /* dude, add abs() */ colDiff = arg[2] - rowcol[1]; if (colDiff < 0) colDiff = -colDiff; if (rowDiff > 1) return 0; if (colDiff > 1) return 0; return 1; break; case "buttonRelease": dest = send(parent(), "pieceSelected", self()); break; case "make": set("parent", arg[1]); return; break; case "clone": return clone(cid++); break; } usual(); } \BDColor {black} \BGColor {white} \width {32} \height {32} \label {/* XPM */ static char * wh_kin [] = { "32 32 7 1", " s None c None", ". c black", "X c gray", "o c white", "O c red", "+ c gray50", "@ c gray30", " ...... ", " .XooooX. ", " .XooooX. ", " .XooX. ", " .. .XooX. .. ", " .XX....XooX....XX. ", " .ooooXXXooXXXoooo. ", " .oooooooOOooooooo. ", " .XXXX++XOOX++XXXX. ", " .XX....+oo+....XX. ", " .. .+oo+. .. ", " .. .+oo+. .. ", " .Xo. ..oooo.. .oX. ", " .ooX...XooooooX...Xoo. ", " .XoooXXXooooooooXXXoooX. ", " .XooooooooooooooooooooX. ", " .XooooooooooooooooooooX. ", " .XooooooooooooooooooooX. ", " .XooooX@oooX@oooX@ooooX. ", " .XXoooX@oooX@oooX@oooXX. ", " .XoooX@oooX@oooX@oooX. ", " .XXXoX@oooX@oooX@oXXX. ", " .XXXXXXXXXXXXXXXXXX. ", " .XXXXXXXXXXXXXXXXXX. ", " .@@@@@@@@@@@@@@@@. ", " ........................ ", " .XXXXXXXXXXXXXXXXXXXXXXXX. ", " .@oooooooooooooooooooooo@. ", " .@oooooooooooooooooooooo@. ", " .@oooooooooooooooooooooo@. ", " .@@@@@@@@@@@@@@@@@@@@@@@@. ", " ........................ "}; } \ \class {XPM} \name {inset_chess.wh_que} \script { switch (arg[0]) { case "adjustGeometry": cell_xywh = send(cell, "x,y,width,height"); set("x", cell_xywh[0] + (cell_xywh[2] - width()) / 2); set("y", cell_xywh[1] + (cell_xywh[3] - height()) / 2); return; break; case "place": /*row,col*/ rowcol[0] = arg[1]; rowcol[1] = arg[2]; cell = send(parent(), "cellObjByRowCol", rowcol[0], rowcol[1]); cell_xywh = send(cell, "x,y,width,height"); set("x", cell_xywh[0] + (cell_xywh[2] - width()) / 2); set("y", cell_xywh[1] + (cell_xywh[3] - height()) / 2); return; break; case "go": /*row,col*/ if (send(self(), "validDest?", arg[1], arg[2]) == 0) { send(parent(), "userMesg_illegalMove", "Illegal move."); return; } send(self(), "place", arg[1], arg[2]); return; break; case "go_in_style": /*row,col*/ if (send(self(), "validDest?", arg[1], arg[2]) == 0) { send(parent(), "userMesg_illegalMove", "Illegal move."); return; } rowcol[0] = arg[1]; rowcol[1] = arg[2]; cell = send(parent(), "cellObjByRowCol", rowcol[0], rowcol[1]); cell_xywh = send(cell, "x,y,width,height"); destx = cell_xywh[0] + (cell_xywh[2] - width()) / 2; desty = cell_xywh[1] + (cell_xywh[3] - height()) / 2; x = x(); y = y(); dx = (destx - x) / 5.0; dy = (desty - y) / 5.0; for (i = 0; i < 5; i++) { x += dx; y += dy; set("x", x); set("y", y); } set("x", destx); set("y", desty); return; break; case "rowcol": return rowcol; break; case "validDest?": rowDiff = arg[1] - rowcol[0]; if (rowDiff < 0) rowDiff = -rowDiff; /* dude, add abs() */ colDiff = arg[2] - rowcol[1]; if (colDiff < 0) colDiff = -colDiff; if (rowDiff == colDiff) return 1; if (rowDiff == 0) return 1; if (colDiff == 0) return 1; return 0; break; case "buttonRelease": dest = send(parent(), "pieceSelected", self()); break; case "make": set("parent", arg[1]); return; break; case "clone": return clone(cid++); break; } usual(); } \BDColor {black} \BGColor {white} \width {32} \height {32} \label {/* XPM */ static char * wh_que [] = { "32 32 6 1", " s None c None", ". c black", "X c red", "o c white", "O c gray", "+ c gray30", " ", " . ", " .. .X. ", " .XX. .XX. ", " .Xo. .oO. ", " .oo. .ooO. ", " .. .Oo. .ooO. ", ".XX. ..oo. .ooO. ... ", ".Xo. .oo. .oooO. .XX. ", " .Oo. .ooo. .oooO. .OOX. ", " .Ooo. .oO. .ooO. .OoO. ", " .Ooo. .ooO. .OooO. .OoO. ", " .Ooo. .ooO. .oooO. .OooO. ", " .OooO. .oooO.OoooO..OooO. ", " .OooO...ooO.OoooO.OooOO. ", " .OooO..oooOooooOOoooO. ", " .OoooO.oooOooooOoooOO. ", " .OoooOooooooooOoooO. ", " .OOooooooooooooooOO. ", " .OooooooooooooooO. ", " .. .OOooooooooooooOO. .. ", " .OO..OOoooooooooooOO....oo. ", " .OooO..OOooooooooooOO..ooooo. ", " .OOoooo..OOooooooooOO..oooooO. ", " .OOooooo...ooooooooOO.ooooooO. ", " .OOooooooo..ooooooooo.oooooOO. ", " ..OOoooooooo...ooooo.ooooooOO. ", " .OOOoooooooooo.....ooooooOO. ", " ..OOOOooooooooooo.oooooOOO.. ", " .+OOOOOOooooooo.ooOOOOOO.. ", " .++++++++++++++++++++++... ", " ........................ "}; } \ \class {XPM} \name {inset_chess.wh_cas} \script { switch (arg[0]) { case "adjustGeometry": cell_xywh = send(cell, "x,y,width,height"); set("x", cell_xywh[0] + (cell_xywh[2] - width()) / 2); set("y", cell_xywh[1] + (cell_xywh[3] - height()) / 2); return; break; case "place": /*row,col*/ rowcol[0] = arg[1]; rowcol[1] = arg[2]; cell = send(parent(), "cellObjByRowCol", rowcol[0], rowcol[1]); cell_xywh = send(cell, "x,y,width,height"); set("x", cell_xywh[0] + (cell_xywh[2] - width()) / 2); set("y", cell_xywh[1] + (cell_xywh[3] - height()) / 2); return; break; case "go": /*row,col*/ if (send(self(), "validDest?", arg[1], arg[2]) == 0) { send(parent(), "userMesg_illegalMove", "Illegal move."); return; } send(self(), "place", arg[1], arg[2]); return; break; case "go_in_style": /*row,col*/ if (send(self(), "validDest?", arg[1], arg[2]) == 0) { send(parent(), "userMesg_illegalMove", "Illegal move."); return; } rowcol[0] = arg[1]; rowcol[1] = arg[2]; cell = send(parent(), "cellObjByRowCol", rowcol[0], rowcol[1]); cell_xywh = send(cell, "x,y,width,height"); destx = cell_xywh[0] + (cell_xywh[2] - width()) / 2; desty = cell_xywh[1] + (cell_xywh[3] - height()) / 2; x = x(); y = y(); dx = (destx - x) / 5.0; dy = (desty - y) / 5.0; for (i = 0; i < 5; i++) { x += dx; y += dy; set("x", x); set("y", y); } set("x", destx); set("y", desty); return; break; case "rowcol": return rowcol; break; case "validDest?": rowDiff = arg[1] - rowcol[0]; if (rowDiff < 0) rowDiff = -rowDiff; /* dude, add abs() */ colDiff = arg[2] - rowcol[1]; if (colDiff < 0) colDiff = -colDiff; if (rowDiff == 0) return 1; if (colDiff == 0) return 1; return 0; break; case "buttonRelease": dest = send(parent(), "pieceSelected", self()); break; case "make": set("parent", arg[1]); return; break; case "clone": return clone(cid++); break; } usual(); } \BDColor {black} \BGColor {white} \width {32} \height {32} \label {/* XPM */ static char * wh_cas [] = { "32 32 6 1", " s None c None", ". c black", "X c gray20", "o c gray30", "O c white", "+ c gray", " ", " ", " ..... ..... .. .... .... ", " .Xoo. .O+O. .O. .++. .oX. ", " .Xoo. .O+O. .OO. .++. .oX. ", " ..oo....O+O....OO....++....oX. ", " .Xoo++++O+OOOOOOOO+O++++++ooX. ", " .X..++++O+OOOO+...+O++++++ooX. ", " .Xoo++++O+OOOOO++++O++++++ooX. ", " .X..++++O+OOOOOOOO+O++++++..X. ", " .Xoo....O+OOOOOOOO+O++....ooX. ", " .Xoo++++O+OOOOOOOO+O+++++..oX. ", " .Xoo++++O+OOOO...O+O++++++ooX. ", " .Xoo++++O+OOOOOOOO+O++++++ooX. ", " ...o++.+O+OOOOOOOO+O++++++ooX. ", " .Xoo++++....OOOOOO+O++++++oo.. ", " .Xoo++++O+OOOOOOOO+O+++.....X. ", " .Xoo++++O+OOOOOOOO+O..++++ooX. ", " .Xo...++O+OOOOO.....++++++ooX. ", " .Xoo++++O+OOOOOOOO+O++++++ooX. ", " .Xoo++++O+OOOOOOOO+O++++++ooX. ", " .Xoo++++O+OOOOOOOO+O..+..+ooX. ", " .X..++++O+OOOOOOOO+O..++++ooX. ", " .Xoo+++....OOO...O+O++++++ooX. ", " ..oo++++O+OOOOOOOO+O++++++ooX. ", " .Xoo++++O+OOOOOOOO+O++++...o.. ", " ....++++O+OOOOOOO.......++oo.. ", " .Xoo..+..+OOOOOOOO+O++++++ooX. ", " .Xoo++++O+OOOOOOOO+O++++++ooX. ", " ..oo++++O+OO...OOO+O+++....... ", " .............................. ", " "}; } \ \class {XPM} \name {inset_chess.wh_pwn} \script { switch (arg[0]) { case "adjustGeometry": cell_xywh = send(cell, "x,y,width,height"); set("x", cell_xywh[0] + (cell_xywh[2] - width()) / 2); set("y", cell_xywh[1] + (cell_xywh[3] - height()) / 2); return; break; case "place": /*row,col*/ rowcol[0] = arg[1]; rowcol[1] = arg[2]; cell = send(parent(), "cellObjByRowCol", rowcol[0], rowcol[1]); cell_xywh = send(cell, "x,y,width,height"); set("x", cell_xywh[0] + (cell_xywh[2] - width()) / 2); set("y", cell_xywh[1] + (cell_xywh[3] - height()) / 2); return; break; case "go": /*row,col*/ if (send(self(), "validDest?", arg[1], arg[2]) == 0) { send(parent(), "userMesg_illegalMove", "Illegal move."); return; } send(self(), "place", arg[1], arg[2]); return; break; case "go_in_style": /*row,col*/ if (send(self(), "validDest?", arg[1], arg[2]) == 0) { send(parent(), "userMesg_illegalMove", "Illegal move."); return; } rowcol[0] = arg[1]; rowcol[1] = arg[2]; cell = send(parent(), "cellObjByRowCol", rowcol[0], rowcol[1]); cell_xywh = send(cell, "x,y,width,height"); destx = cell_xywh[0] + (cell_xywh[2] - width()) / 2; desty = cell_xywh[1] + (cell_xywh[3] - height()) / 2; x = x(); y = y(); dx = (destx - x) / 5.0; dy = (desty - y) / 5.0; for (i = 0; i < 5; i++) { x += dx; y += dy; set("x", x); set("y", y); } set("x", destx); set("y", desty); return; break; case "rowcol": return rowcol; break; case "validDest?": rowDiff = arg[1] - rowcol[0]; if (rowDiff < 0) rowDiff = -rowDiff; /* dude, add abs() */ colDiff = arg[2] - rowcol[1]; if (colDiff < 0) colDiff = -colDiff; return 1; break; case "buttonRelease": dest = send(parent(), "pieceSelected", self()); break; case "make": set("parent", arg[1]); return; break; case "clone": return clone(cid++); break; } usual(); } \BDColor {black} \BGColor {white} \width {32} \height {32} \label {/* XPM */ static char * wh_pwn [] = { "32 32 6 1", " s None c None", ". c black", "X c gray", "o c white", "O c gray50", "+ c gray30", " ", " ...... ", " ..XooooX.. ", " .XXoooooooX. ", " .XXoooooooooX. ", " .Xooooooooooo. ", " .XXoooooooooX. ", " .OXXoooooooXO. ", " .+OXXoooooXO+. ", " .+OXXXXXXX+. ", " .+OOXXOO+. ", " ..++++.. ", " .XX. ", " .oooo. ", " .OO. ", " .OXoo. ", " .OOoooo. ", " .OXoooo. ", " .+OXooooo. ", " .+Xoooo. ", " .+XXooo. ", " .+Xoo. ", " .+ooo. ", " .+o. ", " .........+X......... ", " ..XXXXXXXXXXXXXXXXXXXX.. ", " .++++++++++++++++++++++++. ", " .oooooooooooooooooooooooo. ", " .oooooooooooooooooooooooo. ", " ........................ ", " ", " "}; } \ \class {XPM} \name {inset_chess.bk_knt} \script { switch (arg[0]) { case "adjustGeometry": cell_xywh = send(cell, "x,y,width,height"); set("x", cell_xywh[0] + (cell_xywh[2] - width()) / 2); set("y", cell_xywh[1] + (cell_xywh[3] - height()) / 2); return; break; case "place": /*row,col*/ rowcol[0] = arg[1]; rowcol[1] = arg[2]; cell = send(parent(), "cellObjByRowCol", rowcol[0], rowcol[1]); cell_xywh = send(cell, "x,y,width,height"); set("x", cell_xywh[0] + (cell_xywh[2] - width()) / 2); set("y", cell_xywh[1] + (cell_xywh[3] - height()) / 2); return; break; case "go": /*row,col*/ if (send(self(), "validDest?", arg[1], arg[2]) == 0) { send(parent(), "userMesg_illegalMove", "Illegal move."); return; } send(self(), "place", arg[1], arg[2]); return; break; case "go_in_style": /*row,col*/ if (send(self(), "validDest?", arg[1], arg[2]) == 0) { send(parent(), "userMesg_illegalMove", "Illegal move."); return; } rowcol[0] = arg[1]; rowcol[1] = arg[2]; cell = send(parent(), "cellObjByRowCol", rowcol[0], rowcol[1]); cell_xywh = send(cell, "x,y,width,height"); destx = cell_xywh[0] + (cell_xywh[2] - width()) / 2; desty = cell_xywh[1] + (cell_xywh[3] - height()) / 2; x = x(); y = y(); dx = (destx - x) / 5.0; dy = (desty - y) / 5.0; for (i = 0; i < 5; i++) { x += dx; y += dy; set("x", x); set("y", y); } set("x", destx); set("y", desty); return; break; case "rowcol": return rowcol; break; case "validDest?": rowDiff = arg[1] - rowcol[0]; if (rowDiff < 0) rowDiff = -rowDiff; /* dude, add abs() */ colDiff = arg[2] - rowcol[1]; if (colDiff < 0) colDiff = -colDiff; if (rowDiff == 1) { if (colDiff == 2) return 1; } else if (rowDiff == 2) { if (colDiff == 1) return 1; } return 0; break; case "buttonRelease": dest = send(parent(), "pieceSelected", self()); break; case "make": set("parent", arg[1]); return; break; case "clone": return clone(cid++); break; } usual(); } \BDColor {black} \BGColor {coral4} \width {32} \height {32} \label {/* XPM */ static char * bk_knt [] = { "32 32 5 1", " s None c None", ". c sienna1", "X c black", "o c sienna3", "O c sienna4", " ", " XXXXXXXXXXXX ", " XXXooXooXooooX ", " XXoXoooXooXoooX ", " XooooXoooooooooX ", " XXooo......oXXXXX ", " XooX..............XXXXXX ", " Xooo......O............X ", " XoXoo.....Oo...........X.X ", " XooX......Oo.............X ", " XXooo.....XOo........oooOX ", " XXoo......XOOooooooOOOOX ", " XoX........XOOOooXXXXXX ", " Xoo.........XXXXXX ", " XXooo............X. ", " XoXoo.............X. ", " XooX..............oX. ", " Xooo...............oX. ", " XXXoo...............oX. ", " XooX................oOX. ", " Xoooo................oOX. ", " Xoooo..............ooOX. ", " XXX..............oOOOX. ", " XXX.......ooooOOOX ", " XXXXXXXooooooooOOOXXXXXXXX ", " XooooooooooooooooooooooooooX ", " Xo..........................oX ", " X............................X ", " X............................X ", " X..........................X ", " XXXXXXXXXXXXXXXXXXXXXXXXXX ", " "}; } \ \class {XPM} \name {inset_chess.bk_bis} \script { switch (arg[0]) { case "adjustGeometry": cell_xywh = send(cell, "x,y,width,height"); set("x", cell_xywh[0] + (cell_xywh[2] - width()) / 2); set("y", cell_xywh[1] + (cell_xywh[3] - height()) / 2); return; break; case "place": /*row,col*/ rowcol[0] = arg[1]; rowcol[1] = arg[2]; cell = send(parent(), "cellObjByRowCol", rowcol[0], rowcol[1]); cell_xywh = send(cell, "x,y,width,height"); set("x", cell_xywh[0] + (cell_xywh[2] - width()) / 2); set("y", cell_xywh[1] + (cell_xywh[3] - height()) / 2); return; break; case "go": /*row,col*/ if (send(self(), "validDest?", arg[1], arg[2]) == 0) { send(parent(), "userMesg_illegalMove", "Illegal move."); return; } send(self(), "place", arg[1], arg[2]); return; break; case "go_in_style": /*row,col*/ if (send(self(), "validDest?", arg[1], arg[2]) == 0) { send(parent(), "userMesg_illegalMove", "Illegal move."); return; } rowcol[0] = arg[1]; rowcol[1] = arg[2]; cell = send(parent(), "cellObjByRowCol", rowcol[0], rowcol[1]); cell_xywh = send(cell, "x,y,width,height"); destx = cell_xywh[0] + (cell_xywh[2] - width()) / 2; desty = cell_xywh[1] + (cell_xywh[3] - height()) / 2; x = x(); y = y(); dx = (destx - x) / 5.0; dy = (desty - y) / 5.0; for (i = 0; i < 5; i++) { x += dx; y += dy; set("x", x); set("y", y); } set("x", destx); set("y", desty); return; break; case "rowcol": return rowcol; break; case "validDest?": rowDiff = arg[1] - rowcol[0]; if (rowDiff < 0) rowDiff = -rowDiff; /* dude, add abs() */ colDiff = arg[2] - rowcol[1]; if (colDiff < 0) colDiff = -colDiff; if (rowDiff == colDiff) return 1; return 0; break; case "buttonRelease": dest = send(parent(), "pieceSelected", self()); break; case "make": set("parent", arg[1]); return; break; case "clone": return clone(cid++); break; } usual(); } \BDColor {black} \BGColor {coral4} \width {32} \height {32} \label {/* XPM */ static char * bk_bis [] = { "32 32 6 1", " s None c None", ". c black", "X c sienna1", "o c sienna2", "O c sienna4", "+ c blue", " ", " .. ", " .XX. ", " .oXXX. ", " .ooXXXX. ", " .ooXXXXXX. ", " .ooXXXXXX. ", " .Oo.XXXXXXX. ", " .Oo.XXXXXXX. ++ ", " .Oo.XXXXXXX. X++ ", " .OooXXXXXXX. Xo. ", " .OooXXXXXXX. X. ", " .OooXXXXXXX. Xo. ", " .OOoXXXXXXX. Xo. ", " .OoXXXXXX. Xo. ", " .OoXXXX. Xo. ", " ....OO.... X. ", " ..XXXXXXXOoOX. ", " .ooXXXXXXXXXXoO. ", " .OoooXXXXXXXXo.oO. ", " ..OOooXXXXXXXo.XooO. ", " .XX..OooXXXXXXX.XXooO. ", " .XXXX.OOooXXXo.XXXXoO. ", " .XXXXXX..OooXo.XXXXXoO.. ", " .XXXXXXXX..oooXXXXXXooO. ", " .oXXXXXXXXX...ooXXXXooO. ", " .oooXXXXXXXXXXX....XXooOO. ", " .OoooooXXXXXXXXXXXX...OOO. ", " .OOoooooooooooXXXXXXXX.... ", " .OOOOoooooooooooooooooooO. ", " .OOOOOOOOOOOOOOOOOOOOOOOO. ", " ........................ "}; } \ \class {XPM} \name {inset_chess.bk_kin} \script { switch (arg[0]) { case "adjustGeometry": cell_xywh = send(cell, "x,y,width,height"); set("x", cell_xywh[0] + (cell_xywh[2] - width()) / 2); set("y", cell_xywh[1] + (cell_xywh[3] - height()) / 2); return; break; case "place": /*row,col*/ rowcol[0] = arg[1]; rowcol[1] = arg[2]; cell = send(parent(), "cellObjByRowCol", rowcol[0], rowcol[1]); cell_xywh = send(cell, "x,y,width,height"); set("x", cell_xywh[0] + (cell_xywh[2] - width()) / 2); set("y", cell_xywh[1] + (cell_xywh[3] - height()) / 2); return; break; case "go": /*row,col*/ if (send(self(), "validDest?", arg[1], arg[2]) == 0) { send(parent(), "userMesg_illegalMove", "Illegal move."); return; } send(self(), "place", arg[1], arg[2]); return; break; case "go_in_style": /*row,col*/ if (send(self(), "validDest?", arg[1], arg[2]) == 0) { send(parent(), "userMesg_illegalMove", "Illegal move."); return; } rowcol[0] = arg[1]; rowcol[1] = arg[2]; cell = send(parent(), "cellObjByRowCol", rowcol[0], rowcol[1]); cell_xywh = send(cell, "x,y,width,height"); destx = cell_xywh[0] + (cell_xywh[2] - width()) / 2; desty = cell_xywh[1] + (cell_xywh[3] - height()) / 2; x = x(); y = y(); dx = (destx - x) / 5.0; dy = (desty - y) / 5.0; for (i = 0; i < 5; i++) { x += dx; y += dy; set("x", x); set("y", y); } set("x", destx); set("y", desty); return; break; case "rowcol": return rowcol; break; case "validDest?": rowDiff = arg[1] - rowcol[0]; if (rowDiff < 0) rowDiff = -rowDiff; /* dude, add abs() */ colDiff = arg[2] - rowcol[1]; if (colDiff < 0) colDiff = -colDiff; if (rowDiff > 1) return 0; if (colDiff > 1) return 0; return 1; break; case "buttonRelease": dest = send(parent(), "pieceSelected", self()); break; case "make": set("parent", arg[1]); return; break; case "clone": return clone(cid++); break; } usual(); } \BDColor {black} \BGColor {coral4} \width {32} \height {32} \label {/* XPM */ static char * bk_kin [] = { "32 32 7 1", " s None c None", ". c black", "X c sienna2", "o c sienna1", "O c blue", "+ c sienna3", "@ c sienna4", " ...... ", " .XooooX. ", " .XooooX. ", " .XooX. ", " .. .XooX. .. ", " .XX....XooX....XX. ", " .ooooXXXooXXXoooo. ", " .oooooooOOooooooo. ", " .XXXX++XOOX++XXXX. ", " .XX....+oo+....XX. ", " .. .+oo+. .. ", " .. .+oo+. .. ", " .Xo. ..oooo.. .oX. ", " .ooX...XooooooX...Xoo. ", " .XoooXXXooooooooXXXoooX. ", " .XooooooooooooooooooooX. ", " .XooooooooooooooooooooX. ", " .XooooooooooooooooooooX. ", " .XooooX@oooX@oooX@ooooX. ", " .XXoooX@oooX@oooX@oooXX. ", " .XoooX@oooX@oooX@oooX. ", " .XXXoX@oooX@oooX@oXXX. ", " .XXXXXXXXXXXXXXXXXX. ", " .XXXXXXXXXXXXXXXXXX. ", " .@@@@@@@@@@@@@@@@. ", " ........................ ", " .XXXXXXXXXXXXXXXXXXXXXXXX. ", " .@oooooooooooooooooooooo@. ", " .@oooooooooooooooooooooo@. ", " .@oooooooooooooooooooooo@. ", " .@@@@@@@@@@@@@@@@@@@@@@@@. ", " ........................ "}; } \ \class {XPM} \name {inset_chess.bk_que} \script { switch (arg[0]) { case "adjustGeometry": cell_xywh = send(cell, "x,y,width,height"); set("x", cell_xywh[0] + (cell_xywh[2] - width()) / 2); set("y", cell_xywh[1] + (cell_xywh[3] - height()) / 2); return; break; case "place": /*row,col*/ rowcol[0] = arg[1]; rowcol[1] = arg[2]; cell = send(parent(), "cellObjByRowCol", rowcol[0], rowcol[1]); cell_xywh = send(cell, "x,y,width,height"); set("x", cell_xywh[0] + (cell_xywh[2] - width()) / 2); set("y", cell_xywh[1] + (cell_xywh[3] - height()) / 2); return; break; case "go": /*row,col*/ if (send(self(), "validDest?", arg[1], arg[2]) == 0) { send(parent(), "userMesg_illegalMove", "Illegal move."); return; } send(self(), "place", arg[1], arg[2]); return; break; case "go_in_style": /*row,col*/ if (send(self(), "validDest?", arg[1], arg[2]) == 0) { send(parent(), "userMesg_illegalMove", "Illegal move."); return; } rowcol[0] = arg[1]; rowcol[1] = arg[2]; cell = send(parent(), "cellObjByRowCol", rowcol[0], rowcol[1]); cell_xywh = send(cell, "x,y,width,height"); destx = cell_xywh[0] + (cell_xywh[2] - width()) / 2; desty = cell_xywh[1] + (cell_xywh[3] - height()) / 2; x = x(); y = y(); dx = (destx - x) / 5.0; dy = (desty - y) / 5.0; for (i = 0; i < 5; i++) { x += dx; y += dy; set("x", x); set("y", y); } set("x", destx); set("y", desty); return; break; case "rowcol": return rowcol; break; case "validDest?": rowDiff = arg[1] - rowcol[0]; if (rowDiff < 0) rowDiff = -rowDiff; /* dude, add abs() */ colDiff = arg[2] - rowcol[1]; if (colDiff < 0) colDiff = -colDiff; if (rowDiff == colDiff) return 1; if (rowDiff == 0) return 1; if (colDiff == 0) return 1; return 0; break; case "buttonRelease": dest = send(parent(), "pieceSelected", self()); break; case "make": set("parent", arg[1]); return; break; case "clone": return clone(cid++); break; } usual(); } \BDColor {black} \BGColor {coral4} \width {32} \height {32} \label {/* XPM */ static char * bk_que [] = { "32 32 6 1", " s None c None", ". c black", "X c blue", "o c sienna1", "O c sienna2", "+ c sienna4", " ", " . ", " .. .X. ", " .XX. .XX. ", " .Xo. .oO. ", " .oo. .ooO. ", " .. .Oo. .ooO. ", ".XX. ..oo. .ooO. ... ", ".Xo. .oo. .oooO. .XX. ", " .Oo. .ooo. .oooO. .OOX. ", " .Ooo. .oO. .ooO. .OoO. ", " .Ooo. .ooO. .OooO. .OoO. ", " .Ooo. .ooO. .oooO. .OooO. ", " .OooO. .oooO.OoooO..OooO. ", " .OooO...ooO.OoooO.OooOO. ", " .OooO..oooOooooOOoooO. ", " .OoooO.oooOooooOoooOO. ", " .OoooOooooooooOoooO. ", " .OOooooooooooooooOO. ", " .OooooooooooooooO. ", " .. .OOooooooooooooOO. .. ", " .OO..OOoooooooooooOO....oo. ", " .OooO..OOooooooooooOO..ooooo. ", " .OOoooo..OOooooooooOO..oooooO. ", " .OOooooo...ooooooooOO.ooooooO. ", " .OOooooooo..ooooooooo.oooooOO. ", " ..OOoooooooo...ooooo.ooooooOO. ", " .OOOoooooooooo.....ooooooOO. ", " ..OOOOooooooooooo.oooooOOO.. ", " .+OOOOOOooooooo.ooOOOOOO.. ", " .++++++++++++++++++++++... ", " ........................ "}; } \ \class {XPM} \name {inset_chess.bk_cas} \script { switch (arg[0]) { case "adjustGeometry": cell_xywh = send(cell, "x,y,width,height"); set("x", cell_xywh[0] + (cell_xywh[2] - width()) / 2); set("y", cell_xywh[1] + (cell_xywh[3] - height()) / 2); return; break; case "place": /*row,col*/ rowcol[0] = arg[1]; rowcol[1] = arg[2]; cell = send(parent(), "cellObjByRowCol", rowcol[0], rowcol[1]); cell_xywh = send(cell, "x,y,width,height"); set("x", cell_xywh[0] + (cell_xywh[2] - width()) / 2); set("y", cell_xywh[1] + (cell_xywh[3] - height()) / 2); return; break; case "go": /*row,col*/ if (send(self(), "validDest?", arg[1], arg[2]) == 0) { send(parent(), "userMesg_illegalMove", "Illegal move."); return; } send(self(), "place", arg[1], arg[2]); return; break; case "go_in_style": /*row,col*/ if (send(self(), "validDest?", arg[1], arg[2]) == 0) { send(parent(), "userMesg_illegalMove", "Illegal move."); return; } rowcol[0] = arg[1]; rowcol[1] = arg[2]; cell = send(parent(), "cellObjByRowCol", rowcol[0], rowcol[1]); cell_xywh = send(cell, "x,y,width,height"); destx = cell_xywh[0] + (cell_xywh[2] - width()) / 2; desty = cell_xywh[1] + (cell_xywh[3] - height()) / 2; x = x(); y = y(); dx = (destx - x) / 5.0; dy = (desty - y) / 5.0; for (i = 0; i < 5; i++) { x += dx; y += dy; set("x", x); set("y", y); } set("x", destx); set("y", desty); return; break; case "rowcol": return rowcol; break; case "validDest?": rowDiff = arg[1] - rowcol[0]; if (rowDiff < 0) rowDiff = -rowDiff; /* dude, add abs() */ colDiff = arg[2] - rowcol[1]; if (colDiff < 0) colDiff = -colDiff; if (rowDiff == 0) return 1; if (colDiff == 0) return 1; return 0; break; case "buttonRelease": dest = send(parent(), "pieceSelected", self()); break; case "make": set("parent", arg[1]); return; break; case "clone": return clone(cid++); break; } usual(); } \BDColor {black} \BGColor {coral4} \width {32} \height {32} \label {/* XPM */ static char * bk_cas [] = { "32 32 6 1", " s None c None", ". c black", "X c sienna4", "o c sienna2", "O c sienna1", "+ c sienna2", " ", " ", " ..... ..... .. .... .... ", " .Xoo. .O+O. .O. .++. .oX. ", " .Xoo. .O+O. .OO. .++. .oX. ", " ..oo....O+O....OO....++....oX. ", " .Xoo++++O+OOOOOOOO+O++++++ooX. ", " .X..++++O+OOOO+...+O++++++ooX. ", " .Xoo++++O+OOOOO++++O++++++ooX. ", " .X..++++O+OOOOOOOO+O++++++..X. ", " .Xoo....O+OOOOOOOO+O++....ooX. ", " .Xoo++++O+OOOOOOOO+O+++++..oX. ", " .Xoo++++O+OOOO...O+O++++++ooX. ", " .Xoo++++O+OOOOOOOO+O++++++ooX. ", " ...o++.+O+OOOOOOOO+O++++++ooX. ", " .Xoo++++....OOOOOO+O++++++oo.. ", " .Xoo++++O+OOOOOOOO+O+++.....X. ", " .Xoo++++O+OOOOOOOO+O..++++ooX. ", " .Xo...++O+OOOOO.....++++++ooX. ", " .Xoo++++O+OOOOOOOO+O++++++ooX. ", " .Xoo++++O+OOOOOOOO+O++++++ooX. ", " .Xoo++++O+OOOOOOOO+O..+..+ooX. ", " .X..++++O+OOOOOOOO+O..++++ooX. ", " .Xoo+++....OOO...O+O++++++ooX. ", " ..oo++++O+OOOOOOOO+O++++++ooX. ", " .Xoo++++O+OOOOOOOO+O++++...o.. ", " ....++++O+OOOOOOO.......++oo.. ", " .Xoo..+..+OOOOOOOO+O++++++ooX. ", " .Xoo++++O+OOOOOOOO+O++++++ooX. ", " ..oo++++O+OO...OOO+O+++....... ", " .............................. ", " "}; } \ \class {XPM} \name {inset_chess.bk_pwn} \script { switch (arg[0]) { case "adjustGeometry": cell_xywh = send(cell, "x,y,width,height"); set("x", cell_xywh[0] + (cell_xywh[2] - width()) / 2); set("y", cell_xywh[1] + (cell_xywh[3] - height()) / 2); return; break; case "place": /*row,col*/ rowcol[0] = arg[1]; rowcol[1] = arg[2]; cell = send(parent(), "cellObjByRowCol", rowcol[0], rowcol[1]); cell_xywh = send(cell, "x,y,width,height"); set("x", cell_xywh[0] + (cell_xywh[2] - width()) / 2); set("y", cell_xywh[1] + (cell_xywh[3] - height()) / 2); return; break; case "go": /*row,col*/ if (send(self(), "validDest?", arg[1], arg[2]) == 0) { send(parent(), "userMesg_illegalMove", "Illegal move."); return; } send(self(), "place", arg[1], arg[2]); return; break; case "go_in_style": /*row,col*/ if (send(self(), "validDest?", arg[1], arg[2]) == 0) { send(parent(), "userMesg_illegalMove", "Illegal move."); return; } rowcol[0] = arg[1]; rowcol[1] = arg[2]; cell = send(parent(), "cellObjByRowCol", rowcol[0], rowcol[1]); cell_xywh = send(cell, "x,y,width,height"); destx = cell_xywh[0] + (cell_xywh[2] - width()) / 2; desty = cell_xywh[1] + (cell_xywh[3] - height()) / 2; x = x(); y = y(); dx = (destx - x) / 5.0; dy = (desty - y) / 5.0; for (i = 0; i < 5; i++) { x += dx; y += dy; set("x", x); set("y", y); } set("x", destx); set("y", desty); return; break; case "rowcol": return rowcol; break; case "validDest?": rowDiff = arg[1] - rowcol[0]; if (rowDiff < 0) rowDiff = -rowDiff; /* dude, add abs() */ colDiff = arg[2] - rowcol[1]; if (colDiff < 0) colDiff = -colDiff; return 1; break; case "buttonRelease": dest = send(parent(), "pieceSelected", self()); break; case "make": set("parent", arg[1]); return; break; case "clone": return clone(cid++); break; } usual(); } \BDColor {black} \BGColor {coral4} \width {32} \height {32} \label {/* XPM */ static char * bk_pwn [] = { "32 32 6 1", " s None c None", ". c black", "X c sienna2", "o c sienna1", "O c sienna3", "+ c sienna4", " ", " ...... ", " ..XooooX.. ", " .XXoooooooX. ", " .XXoooooooooX. ", " .Xooooooooooo. ", " .XXoooooooooX. ", " .OXXoooooooXO. ", " .+OXXoooooXO+. ", " .+OXXXXXXX+. ", " .+OOXXOO+. ", " ..++++.. ", " .XX. ", " .oooo. ", " .OO. ", " .OXoo. ", " .OOoooo. ", " .OXoooo. ", " .+OXooooo. ", " .+Xoooo. ", " .+XXooo. ", " .+Xoo. ", " .+ooo. ", " .+o. ", " .........+X......... ", " ..XXXXXXXXXXXXXXXXXXXX.. ", " .++++++++++++++++++++++++. ", " .oooooooooooooooooooooooo. ", " .oooooooooooooooooooooooo. ", " ........................ ", " ", " "}; } \