Annotation of 43BSDReno/games/chess/Xchess/jail.c, revision 1.1

1.1     ! root        1: 
        !             2: /* This file contains code for X-CHESS.
        !             3:    Copyright (C) 1986 Free Software Foundation, Inc.
        !             4: 
        !             5: This file is part of X-CHESS.
        !             6: 
        !             7: X-CHESS is distributed in the hope that it will be useful,
        !             8: but WITHOUT ANY WARRANTY.  No author or distributor
        !             9: accepts responsibility to anyone for the consequences of using it
        !            10: or for whether it serves any particular purpose or works at all,
        !            11: unless he says so in writing.  Refer to the X-CHESS General Public
        !            12: License for full details.
        !            13: 
        !            14: Everyone is granted permission to copy, modify and redistribute
        !            15: X-CHESS, but only under the conditions described in the
        !            16: X-CHESS General Public License.   A copy of this license is
        !            17: supposed to have been given to you along with X-CHESS so you
        !            18: can know your rights and responsibilities.  It should be in a
        !            19: file named COPYING.  Among other things, the copyright notice
        !            20: and this notice must be preserved on all copies.  */
        !            21: 
        !            22: 
        !            23: /* RCS Info: $Revision: 1.3 $ on $Date: 86/11/26 12:09:54 $
        !            24:  *           $Source: /users/faustus/xchess/RCS/jail.c,v $
        !            25:  * Copyright (c) 1986 Wayne A. Christopher, U. C. Berkeley CAD Group
        !            26:  *     Permission is granted to do anything with this code except sell it
        !            27:  *     or remove this message.
        !            28:  *
        !            29:  */
        !            30: 
        !            31: #include "xchess.h"
        !            32: 
        !            33: #include "pawn_small.bitmap"
        !            34: #include "rook_small.bitmap"
        !            35: #include "knight_small.bitmap"
        !            36: #include "bishop_small.bitmap"
        !            37: #include "queen_small.bitmap"
        !            38: #include "king_small.bitmap"
        !            39: 
        !            40: #include "pawn_small_outline.bitmap"
        !            41: #include "rook_small_outline.bitmap"
        !            42: #include "knight_small_outline.bitmap"
        !            43: #include "bishop_small_outline.bitmap"
        !            44: #include "queen_small_outline.bitmap"
        !            45: #include "king_small_outline.bitmap"
        !            46: 
        !            47: static bool pos[32];
        !            48: 
        !            49: static piecetype pcs[] = { KING, QUEEN, ROOK, ROOK, BISHOP, BISHOP, KNIGHT,
        !            50:                KNIGHT, PAWN, PAWN, PAWN, PAWN, PAWN, PAWN, PAWN, PAWN } ;
        !            51: 
        !            52: extern int piecepos();
        !            53: extern char *bitsget();
        !            54: 
        !            55: void
        !            56: jail_init(win)
        !            57:        windata *win;
        !            58: {
        !            59:        int i;
        !            60: 
        !            61:        for (i = 0; i < 32; i++)
        !            62:                pos[i] = false;
        !            63:        jail_draw(win);
        !            64:        return;
        !            65: }
        !            66: 
        !            67: #define JAIL_HEADER    "Captured Pieces"
        !            68: 
        !            69: void
        !            70: jail_draw(win)
        !            71:        windata *win;
        !            72: {
        !            73:        int i;
        !            74:        char *bits;
        !            75:        Pixmap tmpPM;
        !            76:        piece p;
        !            77: 
        !            78:        i = XTextWidth(win->large, JAIL_HEADER, strlen(JAIL_HEADER));
        !            79:        XSetFont(win->display, DefaultGC(win->display, 0),
        !            80:                 win->large->fid);
        !            81:        XSetForeground(win->display, DefaultGC(win->display, 0),
        !            82:                       win->textcolor.pixel);
        !            83:        XSetBackground(win->display, DefaultGC(win->display, 0),
        !            84:                       win->textback.pixel);
        !            85:        
        !            86:        XDrawImageString(win->display, win->jailwin,
        !            87:                         DefaultGC(win->display, 0),
        !            88:                         (JAIL_WIDTH - i) / 2, 20, JAIL_HEADER,
        !            89:                        strlen(JAIL_HEADER));
        !            90: 
        !            91:        XSetForeground(win->display, DefaultGC(win->display, 0),
        !            92:                       win->blackpiece.pixel);
        !            93:        XSetBackground(win->display, DefaultGC(win->display, 0),
        !            94:                       win->textback.pixel);
        !            95:        XSetFillStyle(win->display, DefaultGC(win->display, 0),
        !            96:                      FillSolid);
        !            97:        XSetFunction(win->display, DefaultGC(win->display, 0),
        !            98:                     GXcopy);
        !            99:        
        !           100:        for (i = 0; i < 16; i++)
        !           101:                if (pos[i]) {
        !           102:                        p.color = WHITE;
        !           103:                        p.type = pcs[i];
        !           104:                        bits = bitsget(&p);
        !           105:                        tmpPM = XCreateBitmapFromData(win->display,
        !           106:                                     win->jailwin, bits,
        !           107:                                     32, 32);
        !           108:                        
        !           109:                        XCopyPlane(win->display, tmpPM, win->jailwin,
        !           110:                                  DefaultGC(win->display, 0),
        !           111:                                  0, 0, 32, 32,
        !           112:                                  5 + (i % 8) * 32, 25 + (i / 8) * 32,
        !           113:                                  1);
        !           114:                        XFreePixmap(win->display, tmpPM);
        !           115:                } else {
        !           116:                    XFillRectangle(win->display, win->jailwin,
        !           117:                                   DefaultGC(win->display, 0),
        !           118:                                   5 + (i % 8) * 32,
        !           119:                                   25 + (i / 8) * 32,
        !           120:                                   32, 32);
        !           121:                }
        !           122:        for (i = 0; i < 16; i++)
        !           123:                if (pos[i + 16]) {
        !           124:                    p.color = BLACK;
        !           125:                    p.type = pcs[i];
        !           126:                    bits = bitsget(&p);
        !           127:                    tmpPM = XCreateBitmapFromData(win->display,
        !           128:                                                  win->jailwin, bits,
        !           129:                                                  32, 32);
        !           130:                        
        !           131:                    XCopyPlane(win->display, tmpPM, win->jailwin,
        !           132:                               DefaultGC(win->display, 0),
        !           133:                               0, 0, 32, 32,
        !           134:                               5 + (i % 8) * 32, 94 + (i / 8) * 32,
        !           135:                               1);
        !           136:                    XFreePixmap(win->display, tmpPM);
        !           137:                } else {
        !           138:                    XFillRectangle(win->display, win->jailwin,
        !           139:                                   DefaultGC(win->display, 0),
        !           140:                                   5 + (i % 8) * 32, 94 + (i / 8) * 32,
        !           141:                                   32, 32);
        !           142:                }
        !           143: 
        !           144:        return;
        !           145: }
        !           146: 
        !           147: void
        !           148: jail_add(p)
        !           149:        piece *p;
        !           150: {
        !           151:        int i = piecepos(p, false);
        !           152:        char *bits;
        !           153:        Pixmap tmpPM;
        !           154:        
        !           155:        pos[i] = true;
        !           156: 
        !           157:        bits = bitsget(p);
        !           158: 
        !           159:        XSetState(win1->display, DefaultGC(win1->display, 0),
        !           160:                       win1->blackpiece.pixel,
        !           161:                       win1->textback.pixel,
        !           162:                       GXcopy,
        !           163:                       AllPlanes);
        !           164: 
        !           165:        tmpPM = XCreateBitmapFromData(win1->display,
        !           166:                                      win1->jailwin, bits,
        !           167:                                      32, 32);
        !           168:                        
        !           169:        XCopyPlane(win1->display, tmpPM, win1->jailwin,
        !           170:                   DefaultGC(win1->display, 0),
        !           171:                   0, 0, 32, 32,
        !           172:                   5 + (i % 8) * 32, ((i >= 16) ? 30 : 25) + (i / 8) * 32,
        !           173:                   1);
        !           174:        XFreePixmap(win1->display, tmpPM);
        !           175:        
        !           176:        if (!oneboard) {
        !           177:            XSetState(win2->display, DefaultGC(win2->display, 0),
        !           178:                      win2->blackpiece.pixel,
        !           179:                      win2->textback.pixel,
        !           180:                      GXcopy,
        !           181:                      AllPlanes);
        !           182: 
        !           183: 
        !           184:            tmpPM = XCreateBitmapFromData(win2->display,
        !           185:                                          win2->jailwin, bits,
        !           186:                                          32, 32);
        !           187:                        
        !           188:            XCopyPlane(win2->display, tmpPM, win2->jailwin,
        !           189:                       DefaultGC(win2->display, 0),
        !           190:                       0, 0, 32, 32,
        !           191:                       5 + (i % 8) * 32, ((i >= 16) ? 30 : 25) + (i / 8) * 32,
        !           192:                       1);
        !           193:            XFreePixmap(win2->display, tmpPM);
        !           194:        }
        !           195: 
        !           196:        return;
        !           197: }
        !           198: 
        !           199: void
        !           200: jail_remove(p)
        !           201:        piece *p;
        !           202: {
        !           203:     int i = piecepos(p, true);
        !           204: 
        !           205:     pos[i] = false;
        !           206: 
        !           207: 
        !           208:     XSetForeground(win1->display,
        !           209:                   DefaultGC(win1->display, 0),
        !           210:                   win1->blackpiece.pixel);
        !           211:     XSetBackground(win1->display,
        !           212:                   DefaultGC(win1->display, 0),
        !           213:                   win1->textback.pixel);
        !           214:     XSetFillStyle(win1->display,
        !           215:                  DefaultGC(win1->display, 0),
        !           216:                  FillSolid);
        !           217: 
        !           218:     XFillRectangle(win1->display, win1->jailwin,
        !           219:                   DefaultGC(win1->display, 0),
        !           220:                   5 + (i % 8) * 32,
        !           221:                   ((i >= 16) ? 30 : 25) + (i / 8) * 32,
        !           222:                   32, 32);
        !           223: 
        !           224:     if (!oneboard) {
        !           225:        XSetForeground(win2->display,
        !           226:                       DefaultGC(win2->display, 0),
        !           227:                       win2->blackpiece.pixel);
        !           228:        XSetBackground(win2->display,
        !           229:                       DefaultGC(win2->display, 0),
        !           230:                       win2->textback.pixel);
        !           231:        XSetFillStyle(win2->display,
        !           232:                      DefaultGC(win2->display, 0),
        !           233:                      FillSolid);
        !           234: 
        !           235:        XFillRectangle(win2->display, win2->jailwin,
        !           236:                       DefaultGC(win2->display, 0),
        !           237:                       5 + (i % 8) * 32,
        !           238:                       ((i >= 16) ? 30 : 25) + (i / 8) * 32,
        !           239:                       32, 32);
        !           240:     }
        !           241: 
        !           242:     return;
        !           243: }
        !           244: 
        !           245: static char *bitsget(p)
        !           246:        piece *p;
        !           247: {
        !           248:        char *bits;
        !           249: 
        !           250:        switch (p->type) {
        !           251:            case PAWN:
        !           252:                bits = (p->color == WHITE) ? pawn_small_outline_bits :
        !           253:                                pawn_small_bits;
        !           254:                break;
        !           255: 
        !           256:            case ROOK:
        !           257:                bits = (p->color == WHITE) ? rook_small_outline_bits :
        !           258:                                rook_small_bits;
        !           259:                break;
        !           260: 
        !           261:            case KNIGHT:
        !           262:                bits = (p->color == WHITE) ? knight_small_outline_bits :
        !           263:                                knight_small_bits;
        !           264:                break;
        !           265: 
        !           266:            case BISHOP:
        !           267:                bits = (p->color == WHITE) ? bishop_small_outline_bits :
        !           268:                                bishop_small_bits;
        !           269:                break;
        !           270: 
        !           271:            case QUEEN:
        !           272:                bits = (p->color == WHITE) ? queen_small_outline_bits :
        !           273:                                queen_small_bits;
        !           274:                break;
        !           275: 
        !           276:            case KING:
        !           277:                bits = (p->color == WHITE) ? king_small_outline_bits :
        !           278:                                king_small_bits;
        !           279:                break;
        !           280:        }
        !           281:        return (bits);
        !           282: }
        !           283: 
        !           284: static int
        !           285: piecepos(p, there)
        !           286:        piece *p;
        !           287:        bool there;
        !           288: {
        !           289:        int i, base = (p->color == WHITE) ? 0 : 16;
        !           290: 
        !           291:        switch (p->type) {
        !           292:            case PAWN:
        !           293:                for (i = base + 8; (i < base + 15) && pos[i]; i++)
        !           294:                        ;
        !           295:                if (there && !pos[i])
        !           296:                        i--;
        !           297:                break;
        !           298: 
        !           299:            case KING:
        !           300:                /* Hmm... */
        !           301:                i = base;
        !           302:                break;
        !           303: 
        !           304:            case QUEEN:
        !           305:                i = base + 1;
        !           306:                break;
        !           307: 
        !           308:            case ROOK:
        !           309:                i = base + 2;
        !           310:                if ((there && pos[i + 1]) || (!there && pos[i]))
        !           311:                        i++;
        !           312:                break;
        !           313: 
        !           314:            case BISHOP:
        !           315:                i = base + 4;
        !           316:                if ((there && pos[i + 1]) || (!there && pos[i]))
        !           317:                        i++;
        !           318:                break;
        !           319: 
        !           320:            case KNIGHT:
        !           321:                i = base + 6;
        !           322:                if ((there && pos[i + 1]) || (!there && pos[i]))
        !           323:                        i++;
        !           324:                break;
        !           325:        }
        !           326:        return (i);
        !           327: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.