home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Programming / Misc / M2V11-1.LHA / modula / examples / src / ChessBoard.mod < prev    next >
Encoding:
Text File  |  1994-10-03  |  16.7 KB  |  536 lines

  1. (* One of my first ever Modula program, a good example of bad    *)
  2. (* programming style:                        *)
  3. (*   Undocumented,                        *)
  4. (*   Poor structure,                        *)
  5. (*   Meaningless variable names,                *)
  6. (*   Magic numbers ....                        *)
  7.  
  8. (* Written under 1.3. Under 2.0+ colors are backwards *)
  9.  
  10. MODULE ChessBoard ;
  11.  
  12. FROM Storage IMPORT ALLOCATE ;
  13.  
  14. FROM Intuition{33} IMPORT
  15.   NewWindow, Gadget, OffGadget, OnGadget, WindowPtr, OpenWindow, CloseWindow,
  16.   Window, IntuiMessagePtr, ViewPortAddress ;
  17.  
  18. FROM SYSTEM IMPORT
  19.   ADDRESS, ADR, INLINE, LONGSET ;
  20.  
  21. FROM Exec IMPORT
  22.   FreeMem, AllocMem, GetMsg, ReplyMsg, WaitPort ;
  23.  
  24. FROM Graphics{33} IMPORT
  25.   InitBitMap, BitMap, BltBitMap, RastPortPtr, SetAPen, WritePixel, Draw,
  26.   RectFill, WaitTOF, Bob, VSprite, VSpritePtr, BobPtr, InitGels, DrawGList,
  27.   GelsInfoPtr, AddBob, SortGList, InitMasks, AllocRaster, FreeRaster,
  28.   RemIBob, ReadPixel ;
  29.  
  30. IMPORT G := Graphics, I := Intuition , StdLib , Exec ;
  31.  
  32. (*----------------------------------------------------------------------------*)
  33.  
  34. TYPE
  35.   PieceBlock = POINTER TO ARRAY [0..839] OF CARDINAL ;
  36.  
  37.  
  38. VAR
  39.   win      : WindowPtr ;
  40.   rp       : RastPortPtr ; (* win^.RastPort *)
  41.   B        : Bob ;
  42.   V        : VSprite ;
  43.   Info     : GelsInfoPtr ;
  44.   bmp      : BitMap ;
  45.   cmp      : BitMap ;
  46.   Ras      : ADDRESS ;
  47.   VPA      : ADDRESS ;
  48.   Board    : ARRAY [0..7],[0..7] OF CARDINAL ;
  49.   chipData : PieceBlock ;
  50.   bool1    : BOOLEAN ; (* What do these represent ?? *)
  51.   bool2    : BOOLEAN ;
  52.  
  53. CONST
  54.   Empty   = 0 ;
  55.   Pawn    = 1 ;
  56.   Night   = 2 ;
  57.   Bishop  = 3 ;
  58.   Rook    = 4 ;
  59.   Queen   = 5 ;
  60.   King    = 6 ;
  61.   BEmpty  = 7 ;
  62.   BPawn   = 8 ;
  63.   BNight  = 9 ;
  64.   BBishop = 10 ;
  65.   BRook   = 11 ;
  66.   BQueen  = 12 ;
  67.   BKing   = 13 ;
  68.  
  69. (*----------------------------------------------------------------------------*)
  70.  
  71. PROCEDURE Cleanup ;
  72. BEGIN
  73.   IF win # NIL THEN CloseWindow( win ) ; win := NIL END ;
  74.   FreeMem( chipData , 1700 ) ;
  75.   FreeRaster( Ras , 32 , 24 ) ;
  76. END Cleanup ;
  77.  
  78. (*----------------------------------------------------------------------------*)
  79.  
  80. PROCEDURE InitWindow ;
  81.   VAR nw : NewWindow ;
  82. BEGIN
  83.   WITH nw DO
  84.     Title    := "ChessBoard" ;
  85.     LeftEdge    := 30 ;
  86.     TopEdge    := 70 ;
  87.     Width    := 215 ;
  88.     Height    := 117 ;
  89.     DetailPen    :=0 ;
  90.     BlockPen    :=1 ;
  91.     BitMap    :=NIL ;
  92.     IDCMPFlags    := I.CLOSEWINDOW+I.ACTIVEWINDOW+I.INACTIVEWINDOW+I.MOUSEBUTTONS;
  93.     Flags    :=I.WINDOWDRAG+I.WINDOWDEPTH+I.WINDOWCLOSE+I.ACTIVATE ;
  94.     Type    :=I.WBENCHSCREEN ;
  95.     FirstGadget    :=NIL ;
  96.     CheckMark    :=NIL ;
  97.     Screen    :=NIL
  98.   END;
  99.   win := OpenWindow( nw ) ;
  100.   IF win = NIL THEN HALT END ;
  101.   StdLib.atexit( Cleanup ) ;
  102.   rp := win^.RPort ;
  103.   rp^.GelsInfo := Info ;
  104.   VPA := ViewPortAddress( win )
  105. END InitWindow ;
  106.  
  107. (*----------------------------------------------------------------------------*)
  108.  
  109. PROCEDURE InitStrucs ;
  110.   VAR
  111.     sqrx  : CARDINAL ;
  112.     dsa   : VSpritePtr ;
  113.     dsb   : VSpritePtr ;
  114. BEGIN
  115.  
  116.   NEW( dsa ) ;
  117.   NEW( dsb ) ;
  118.   NEW( Info ) ;
  119.   InitGels( dsa, dsb, Info ) ;
  120.   InitBitMap( bmp, 2, 24, 12 ) ;
  121.   InitBitMap( cmp, 2, 24, 12 ) ;
  122.   Ras := AllocRaster( 32, 24 ) ;
  123.  
  124.   Board[0,0] := BRook ;
  125.   Board[1,0] := BNight ;
  126.   Board[2,0] := BBishop ;
  127.   Board[3,0] := BQueen ;
  128.   Board[4,0] := BKing ;
  129.   Board[5,0] := BBishop ;
  130.   Board[6,0] := BNight ;
  131.   Board[7,0] := BRook ;
  132.   Board[0,7] := Rook ;
  133.   Board[1,7] := Night ;
  134.   Board[2,7] := Bishop ;
  135.   Board[3,7] := Queen ;
  136.   Board[4,7] := King ;
  137.   Board[5,7] := Bishop ;
  138.   Board[6,7] := Night ;
  139.   Board[7,7] := Rook ;
  140.  
  141.   FOR sqrx := 0 TO 7 DO
  142.     Board [sqrx,6] := Pawn ;
  143.     Board [sqrx,1] := BPawn
  144.   END;
  145.  
  146.   bool1 := FALSE ;
  147.   bool2 := TRUE ;
  148.  
  149. END InitStrucs ;
  150.  
  151. (*----------------------------------------------------------------------------*)
  152.  
  153. PROCEDURE SetBob( pc : CARDINAL ) ;
  154. BEGIN
  155.   WITH V DO
  156.     VSBob := ADR( B ) ;
  157.     Height := 12 ;
  158.     Width := 2 ;
  159.     Depth := 2 ;
  160.     IF pc>6 THEN ImageData := LONGCARD(chipData)+240*(pc MOD 7) ;
  161.     ELSE ImageData := LONGCARD(chipData)+(240*(pc MOD 7))+48 ;
  162.     END ;
  163.     PlanePick := 3 ;
  164.     Flags := G.SAVEBACK+G.OVERLAY ;
  165.     CollMask := NIL ;
  166.     Y := 25 ;
  167.     X := 11 ;
  168.   END;
  169.   WITH B DO
  170.     BobVSprite := ADR( V ) ;
  171.     IF pc > 6 THEN ImageShadow := LONGCARD(chipData)+(240*(pc MOD 7))+144 ;
  172.     ELSE ImageShadow := LONGCARD(chipData)+(240*(pc MOD 7))+192
  173.     END ;
  174.     SaveBuffer := Ras ;
  175.     Before := NIL ;
  176.     After := NIL ;
  177.     DBuffer := NIL ;
  178.     Flags := { } ;
  179.   END;
  180.   AddBob( ADR( B ) , rp )
  181. END SetBob ;
  182.  
  183. (*----------------------------------------------------------------------------*)
  184.  
  185. PROCEDURE Doit( col : BOOLEAN ) ;
  186.   VAR co : ADDRESS ;
  187. BEGIN
  188.   IF col THEN (*Black square*)
  189.     cmp.Planes[0] := LONGCARD( chipData )+48 ;
  190.     cmp.Planes[1] := LONGCARD( chipData )+96 ;
  191.   ELSE
  192.     cmp.Planes[0] := LONGCARD( chipData ) ;
  193.     cmp.Planes[1] := LONGCARD( chipData )+48 ;
  194.   END ;
  195.   bmp.Planes[0] := B.SaveBuffer ;
  196.   bmp.Planes[1] := LONGCARD( B.SaveBuffer )+48 ;
  197.   co := ADR( chipData )+1682 ;
  198.   BltBitMap( ADR( cmp ), 0, 0, ADR( bmp ), 0, 0, 26, 12, 0C0H, 3, co ) ;
  199. END Doit;
  200.  
  201. (*----------------------------------------------------------------------------*)
  202.  
  203. PROCEDURE SlidePC( Fx, Fy, pc : CARDINAL ) ;
  204. BEGIN
  205.   SetBob( pc ) ;
  206.   V.X := Fx ;
  207.   V.Y := Fy ;
  208.   DrawGList( rp , VPA ) ;
  209.   V.Flags := G.OVERLAY ;
  210.   B.Flags := G.SAVEBOB ;
  211.   RemIBob( ADR( B ), rp, VPA )
  212. END SlidePC;
  213.  
  214. (*----------------------------------------------------------------------------*)
  215.  
  216. PROCEDURE Slide( Fx, Fy, Tx, Ty : INTEGER ; a , b : INTEGER ; pc : CARDINAL ) ;
  217. BEGIN
  218.   IF bool2 THEN SetBob(pc) END ;
  219.   V.X := Fx ;
  220.   V.Y := Fy ;
  221.   DrawGList( rp, VPA ) ;
  222.   IF bool2 THEN Doit(((Fx DIV 26) MOD 2 )#((Fy DIV 13) MOD 2 )) END ;
  223.   WHILE ( Fx # Tx ) OR ( Fy # Ty ) DO
  224.     Fx  := Fx+a ;
  225.     Fy  := Fy+b ;
  226.     V.X := Fx ;
  227.     V.Y := Fy ;
  228.     WaitTOF( ) ;
  229.     DrawGList( rp, VPA ) ;
  230.   END;
  231.   IF bool1 THEN
  232.   ELSE
  233.     Doit(((Tx DIV 26) MOD 2) # ((Ty DIV 13) MOD 2 ) );
  234.     DrawGList( rp, VPA ) ;
  235.     V.Flags := G.OVERLAY ;
  236.     B.Flags := G.SAVEBOB ;
  237.     RemIBob( ADR( B ), rp, VPA ) ;
  238.   END;
  239. END Slide ;
  240.  
  241. (*----------------------------------------------------------------------------*)
  242.  
  243. PROCEDURE DrwBrd( ) ;
  244.   VAR nx, ny, mx, my, sqrx, sqry, sqry2, pc : INTEGER ;
  245. BEGIN
  246.   SetAPen( rp, 1 );
  247.   RectFill( rp, 3, 11, 210, 114 ) ;
  248.   SetAPen( rp, 0 );
  249.   FOR nx := 3 TO 185 BY 52 DO
  250.     FOR ny := 24 TO 102 BY 26 DO
  251.       RectFill( rp, nx, ny, nx+25, ny+12 )
  252.     END
  253.   END ;
  254.   FOR nx := 29 TO 185 BY 52 DO
  255.     FOR ny := 11 TO 89 BY 26 DO
  256.       RectFill( rp, nx, ny, nx+25, ny+12 )
  257.     END
  258.   END ;
  259.   FOR sqrx := 0 TO 7 DO
  260.     FOR sqry := 0 TO 1 DO
  261.       sqry2 := 6+sqry ;
  262.       pc := Board[sqrx,sqry] ;
  263.       mx := 3+sqrx*26 ;
  264.       my := 12+sqry*13 ;
  265.       nx := mx ;
  266.       ny := my ;
  267.       SlidePC( mx, my, pc ) ;
  268.       pc := Board[sqrx,sqry2] ;
  269.       my := 12+sqry2*13 ;
  270.       ny := my ;
  271.       SlidePC( mx, my, pc )
  272.     END
  273.   END
  274. END DrwBrd;
  275.  
  276. (*----------------------------------------------------------------------------*)
  277.  
  278. PROCEDURE WhichDir( mx, my, nx, ny, PC : INTEGER ) ;
  279.  
  280.   PROCEDURE Slid( za, zb : INTEGER ) ;
  281.   BEGIN Slide( mx, my, nx, ny, za, zb, PC )
  282.   END Slid ;
  283.  
  284.   VAR
  285.     a, b, Cnx, Cny, Cmx, Cmy : INTEGER ;
  286.     Flag : BOOLEAN ;
  287.  
  288. BEGIN
  289.   Flag := TRUE ;
  290.   Cnx := (nx-3) DIV 26 ;
  291.   Cny := (ny-12) DIV 13 ;
  292.   Cmx := (mx-3) DIV 26 ;
  293.   Cmy := (my-12) DIV 13 ;
  294.   a := Cnx-Cmx ;
  295.   b := Cny-Cmy ;
  296.   IF ( PC=Night ) OR ( PC=BNight ) THEN
  297.  
  298.     IF (ABS(a)=1) & (ABS(b)=2) THEN
  299.       nx := nx-(a*26);
  300.       bool1 := TRUE ;
  301.       Slid( 0, b DIV 2);
  302.       my := my+((b DIV 2)*26);
  303.       bool1 := FALSE ; bool2 := FALSE ;
  304.       nx := nx+(a*26) ;
  305.       Slid( a*2, 0 ) ;
  306.       bool2 := TRUE ;
  307.     ELSIF (ABS(a)=2) & (ABS(b)=1) THEN
  308.       ny := ny-(b*13) ;
  309.       bool1 := TRUE ;
  310.       Slid( a, 0 ) ;
  311.       mx := mx+(a*26) ;
  312.       bool1 := FALSE ; bool2 := FALSE ;
  313.       ny := ny+(b*13) ;
  314.       Slid( 0, b ) ;
  315.       bool2 := TRUE
  316.     ELSE
  317.       Flag := FALSE ;
  318.       Slide( mx, my, mx, my, 0, 0, PC )
  319.     END
  320.  
  321.   ELSE
  322.  
  323.     IF (nx#mx) & (ny#my) THEN
  324.       IF (nx>mx)&(ny>my) THEN Slid( 2, 1 )
  325.       ELSIF nx>mx THEN Slid( 2, -1 )
  326.       ELSIF (ny<my) & (nx<mx) THEN Slid( -2, -1 )
  327.       ELSE Slid( -2, 1 )
  328.       END
  329.  
  330.     ELSE
  331.       IF nx>mx THEN Slid( 2, 0 )
  332.       ELSIF nx<mx THEN Slid( -2, 0 )
  333.       ELSIF ny>my THEN Slid( 0, 1 )
  334.       ELSE Slid( 0, -1 )
  335.       END
  336.     END
  337.   END;
  338.   IF Flag THEN Board[Cnx,Cny] := PC ; Board[Cmx,Cmy] := 0 END
  339. END WhichDir;
  340.  
  341. (*----------------------------------------------------------------------------*)
  342.  
  343. PROCEDURE IsLegal( x1, y1, x2, y2 : INTEGER ) : BOOLEAN ;
  344. BEGIN
  345.   RETURN ((NOT((x1=x2) & (y1=y2))) & ((x1=x2) OR (y1=y2) OR
  346.          (ABS(x2-x1)=ABS(y2-y1)) OR (Board[x2,y2]=Night) OR
  347.          (Board[x2,y2]=BNight)));
  348. END IsLegal ;
  349.  
  350. (*----------------------------------------------------------------------------*)
  351.  
  352. PROCEDURE Main ;
  353.   VAR
  354.     mx, my, Ay, Ax, lx, ly, lax, lay : INTEGER ;
  355.     col   : LONGCARD ;
  356.     msg   : IntuiMessagePtr ;
  357.     Code  : CARDINAL ;
  358.     Class : LONGSET ;
  359. BEGIN
  360.   SetAPen( rp , 3 ) ;
  361.   LOOP
  362.     WaitPort( win^.UserPort ) ;
  363.     msg := GetMsg( win^.UserPort ) ;
  364.     Class := msg^.Class ;
  365.     Code := msg^.Code ;
  366.     Ax := (( win^.MessageKey^.MouseX )-3) DIV 26 ;
  367.     Ay := (( win^.MessageKey^.MouseY )-11) DIV 13 ;
  368.     mx := Ax*26+3;
  369.     my := Ay*13+12;
  370.     ReplyMsg( msg ) ;
  371.     IF Class = I.CLOSEWINDOW THEN EXIT
  372.  
  373.     ELSIF Class = I.INACTIVEWINDOW THEN
  374.       REPEAT
  375.         WaitPort( win^.UserPort ) ;
  376.         msg := GetMsg( win^.UserPort ) ;
  377.         Class := msg^.Class ;
  378.         ReplyMsg( msg )
  379.       UNTIL Class = I.ACTIVEWINDOW
  380.  
  381.     ELSIF Code = I.SELECTDOWN THEN
  382.       IF Board[Ax,Ay] # 0 THEN
  383.         SetAPen( rp , 3 ) ;
  384.         lx := mx ; ly := my ; lax := Ax ; lay := Ay ; my := my-1 ;
  385.         rp^.cp_x := mx ;
  386.         rp^.cp_y := my ;
  387.         Draw( rp, mx+25, my ) ;
  388.         Draw( rp, mx+25, my+12 ) ;
  389.         Draw( rp, mx, my+12 ) ;
  390.         Draw( rp, mx, my ) ;
  391.         rp^.cp_x := mx+24 ;
  392.         rp^.cp_y := my ;
  393.         Draw( rp, mx+24, my+12 ) ;
  394.         Draw( rp, mx+1, my+12 ) ;
  395.         Draw( rp, mx+1, my ) ;
  396.       ELSE lax := Ax ; lay := Ay
  397.       END
  398.  
  399.     ELSIF ( Code = I.SELECTUP ) & ( Board[lax,lay] # 0 ) THEN
  400.       col := ReadPixel( rp, lx+2, ly );
  401.       SetAPen( rp, col );
  402.       rp^.cp_x := lx  ;
  403.       rp^.cp_y := ly-1 ;
  404.       Draw( rp, lx+25, ly-1 ) ;
  405.       IF IsLegal( Ax, Ay, lax, lay ) THEN
  406.         WhichDir( lx, ly, mx, my, Board[lax,lay] )
  407.       ELSE Slide( lx, ly, lx, ly, 0, 0, Board[lax,lay] )
  408.       END
  409.     END
  410.   END
  411. END Main ;
  412.  
  413. (*----------------------------------------------------------------------------*)
  414.  
  415. PROCEDURE InitPieces ;
  416. BEGIN
  417.   chipData := AllocMem( 1700 , Exec.MEMF_CHIP ) ;
  418.   IF chipData = NIL THEN HALT END ;
  419.   chipData^ :=
  420.   [
  421.     0FFFFH,0FFFFH,0FFFFH,0FFFFH,0FFFFH,0FFFFH,0FFFFH,0FFFFH,0FFFFH,0FFFFH,
  422.     0FFFFH,0FFFFH,0FFFFH,0FFFFH,0FFFFH,0FFFFH,0FFFFH,0FFFFH,0FFFFH,0FFFFH,
  423.     0FFFFH,0FFFFH,0FFFFH,0FFFFH,
  424.     00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,
  425.     00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,
  426.     00000H,00000H,00000H,00000H,
  427.     00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,
  428.     00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,
  429.     00000H,00000H,00000H,00000H,
  430.     0FFFFH,0FFC0H,0FFFFH,0FFC0H,0FFFFH,0FFC0H,0FFFFH,0FFC0H,0FFFFH,0FFC0H,
  431.     0FFFFH,0FFC0H,0FFFFH,0FFC0H,0FFFFH,0FFC0H,0FFFFH,0FFC0H,0FFFFH,0FFC0H,
  432.     0FFFFH,0FFC0H,0FFFFH,0FFC0H,
  433.     0FFFFH,0FFC0H,0FFFFH,0FFC0H,0FFFFH,0FFC0H,0FFFFH,0FFC0H,0FFFFH,0FFC0H,
  434.     0FFFFH,0FFC0H,0FFFFH,0FFC0H,0FFFFH,0FFC0H,0FFFFH,0FFC0H,0FFFFH,0FFC0H,
  435.     0FFFFH,0FFC0H,0FFFFH,0FFC0H,
  436.  
  437.     00000H,00000H,0001FH,00000H,00031H,08000H,00060H,0C000H,000C0H,06000H,
  438.     00060H,0C000H,00031H,08000H,00060H,0C000H,000C0H,06000H,00180H,03000H,
  439.     003FFH,0F800H,00000H,00000H,0003FH,08000H,00060H,0C000H,000CEH,06000H,
  440.     0019FH,03000H,0033FH,09800H,0019FH,03000H,000CEH,06000H,0019FH,03000H,
  441.     0033FH,09800H,0067FH,0CC00H,00400H,00400H,007FFH,0FC00H,
  442.     00000H,00000H,0001FH,00000H,00031H,08000H,00060H,0C000H,000C0H,06000H,
  443.     00060H,0C000H,00031H,08000H,00060H,0C000H,000C0H,06000H,00180H,03000H,
  444.     003FFH,0F800H,00000H,00000H,0003FH,08000H,
  445.     0007FH,0C000H,000FFH,0E000H,001FFH,0F000H,003FFH,0F800H,001FFH,0F000H,
  446.     000FFH,0E000H,001FFH,0F000H,003FFH,0F800H,007FFH,0FC00H,007FFH,0FC00H,
  447.     007FFH,0FC00H,00000H,00000H,0001FH,00000H,0003FH,08000H,0007FH,0C000H,
  448.     000FFH,0E000H,0007FH,0C000H,0003FH,08000H,0007FH,0C000H,000FFH,0E000H,
  449.     001FFH,0F000H,003FFH,0F800H,00000H,00000H,
  450.  
  451.     00020H,00000H,000DCH,00000H,00187H,00000H,00301H,0C000H,00660H,07000H,
  452.     00C00H,01800H,01800H,00C00H,031F8H,00600H,01E30H,00600H,000C0H,00600H,
  453.     001FFH,0FE00H,00000H,00000H,000DCH,00000H,00123H,00000H,00278H,0C000H,
  454.     004FEH,03000H,0099FH,08800H,013FFH,0E400H,027FFH,0F200H,04E07H,0F900H,
  455.     021CFH,0F900H,01F3FH,0F900H,00200H,00100H,001FFH,0FF00H,
  456.     00020H,00000H,000DCH,00000H,00187H,00000H,00301H,0C000H,00660H,07000H,
  457.     00C00H,01800H,01800H,00C00H,031F8H,00600H,01E30H,00600H,000C0H,00600H,
  458.     001FFH,0FE00H,00000H,00000H,000FCH,00000H,
  459.     001FFH,00000H,003FFH,0C000H,007FFH,0F000H,00FFFH,0F800H,01FFFH,0FC00H,
  460.     03FFFH,0FE00H,07FFFH,0FF00H,03FFFH,0FF00H,01FFFH,0FF00H,003FFH,0FF00H,
  461.     001FFH,0FF00H,00020H,00000H,000FCH,00000H,001FFH,00000H,003FFH,0C000H,
  462.     007FFH,0F000H,00FFFH,0F800H,01FFFH,0FC00H,03FFFH,0FE00H,01E3FH,0FE00H,
  463.     000FFH,0FE00H,001FFH,0FE00H,00000H,00000H,
  464.  
  465.     00000H,00000H,0001EH,00000H,00073H,08000H,000C0H,0C000H,0018CH,06000H,
  466.     0019EH,06000H,000CCH,0C000H,00073H,08000H,001C0H,0E000H,0061EH,01800H,
  467.     01FF3H,0FE00H,00000H,00000H,0003FH,00000H,000E1H,0C000H,0018CH,06000H,
  468.     0033FH,03000H,00673H,09800H,00661H,09800H,00333H,03000H,0038CH,07000H,
  469.     0063FH,01800H,019E1H,0E600H,0200CH,00100H,01FF3H,0FE00H,
  470.     00000H,00000H,0001EH,00000H,00073H,08000H,000C0H,0C000H,0018CH,06000H,
  471.     0019EH,06000H,000CCH,0C000H,00073H,08000H,001C0H,0E000H,0061EH,01800H,
  472.     01FF3H,0FE00H,00000H,00000H,0003FH,00000H,
  473.     000FFH,0C000H,001FFH,0E000H,003FFH,0F000H,007FFH,0F800H,007FFH,0F800H,
  474.     003FFH,0F000H,003FFH,0F000H,007FFH,0F800H,01FFFH,0FE00H,03FFFH,0FF00H,
  475.     01FF3H,0FE00H,00000H,00000H,0001EH,00000H,0007FH,08000H,000FFH,0C000H,
  476.     001FFH,0E000H,001FFH,0E000H,000FFH,0C000H,0003FH,08000H,001FFH,0E000H,
  477.     007FFH,0F800H,01FF3H,0FE00H,00000H,00000H,
  478.  
  479.     00000H,00000H,007DFH,07C00H,00461H,08400H,00300H,01800H,0019FH,03000H,
  480.     00180H,03000H,00180H,03000H,0019FH,03000H,00300H,01800H,00600H,00C00H,
  481.     003FFH,0F800H,00000H,00000H,00FFFH,0FE00H,01820H,08300H,01B9EH,07B00H,
  482.     00CFFH,0E600H,00660H,0CC00H,0067FH,0CC00H,0067FH,0CC00H,00660H,0CC00H,
  483.     00CFFH,0E600H,019FFH,0F300H,00C00H,00600H,007FFH,0FC00H,
  484.     00000H,00000H,007DFH,07C00H,00461H,08400H,00300H,01800H,0019FH,03000H,
  485.     00180H,03000H,00180H,03000H,0019FH,03000H,00300H,01800H,00600H,00C00H,
  486.     003FFH,0F800H,00000H,00000H,00FFFH,0FE00H,
  487.     01FFFH,0FF00H,01FFFH,0FF00H,00FFFH,0FE00H,007FFH,0FC00H,007FFH,0FC00H,
  488.     007FFH,0FC00H,007FFH,0FC00H,00FFFH,0FE00H,01FFFH,0FF00H,00FFFH,0FE00H,
  489.     007FFH,0FC00H,00000H,00000H,007DFH,07C00H,007FFH,0FC00H,003FFH,0F800H,
  490.     001FFH,0F000H,001FFH,0F000H,001FFH,0F000H,001FFH,0F000H,003FFH,0F800H,
  491.     007FFH,0FC00H,003FFH,0F800H,00000H,00000H,
  492.  
  493.     00000H,00000H,00F3EH,07800H,01994H,0CC00H,00CE3H,09800H,01A63H,02C00H,
  494.     03122H,04600H,018FFH,09C00H,00700H,07000H,003FFH,0E000H,00300H,06000H,
  495.     001FFH,0C000H,00000H,00000H,01F3EH,07C00H,030C1H,08600H,0266BH,03200H,
  496.     0331CH,06600H,0659CH,0D300H,04EDDH,0B900H,06700H,06300H,038FFH,08E00H,
  497.     00C00H,01800H,00CFFH,09800H,00600H,03000H,003FFH,0E000H,
  498.     00000H,00000H,00F3EH,07800H,01994H,0CC00H,00CE3H,09800H,01A63H,02C00H,
  499.     03122H,04600H,018FFH,09C00H,00700H,07000H,003FFH,0E000H,00300H,06000H,
  500.     001FFH,0C000H,00000H,00000H,01F3EH,07C00H,
  501.     03FFFH,0FE00H,03FFFH,0FE00H,03FFFH,0FE00H,07FFFH,0FF00H,07FFFH,0FF00H,
  502.     07FFFH,0FF00H,03FFFH,0FE00H,00FFFH,0F800H,00FFFH,0F800H,007FFH,0F000H,
  503.     003FFH,0E000H,01F3EH,07C00H,03FFFH,0FE00H,03FFFH,0FE00H,03FFFH,0FE00H,
  504.     07FFFH,0FF00H,07FFFH,0FF00H,07FFFH,0FF00H,03FFFH,0FE00H,00FFFH,0F800H,
  505.     00FFFH,0F800H,007FFH,0F000H,003FFH,0E000H,
  506.  
  507.     0001CH,00000H,0007FH,00000H,0001CH,00000H,00EBFH,05C00H,019E1H,0E600H,
  508.     00C00H,00C00H,0067FH,09800H,00300H,03000H,0037FH,0B000H,00600H,01800H,
  509.     003FFH,0F000H,00000H,00000H,000E3H,08000H,00180H,0C000H,01FE3H,0FC00H,
  510.     03140H,0A300H,0261EH,01900H,033FFH,0F300H,01980H,06600H,01CFFH,0CE00H,
  511.     00C80H,04C00H,019FFH,0E600H,00C00H,00C00H,007FFH,0F000H,
  512.     0001CH,00000H,0007FH,00000H,0001CH,00000H,00EBFH,05C00H,019E1H,0E600H,
  513.     00C00H,00C00H,0067FH,09800H,00300H,03000H,0037FH,0B000H,00600H,01800H,
  514.     003FFH,0F000H,00000H,00000H,000FFH,08000H,
  515.     001FFH,0C000H,01FFFH,0FC00H,03FFFH,0FF00H,03FFFH,0FF00H,03FFFH,0FF00H,
  516.     01FFFH,0FE00H,01FFFH,0FE00H,00FFFH,0FC00H,01FFFH,0FE00H,00FFFH,0FC00H,
  517.     007FFH,0F000H,0001CH,00000H,0007FH,00000H,0001CH,00000H,00EBFH,05C00H,
  518.     01FFFH,0FE00H,00FFFH,0FC00H,007FFH,0F800H,003FFH,0F000H,003FFH,0F000H,
  519.     007FFH,0F800H,003FFH,0F000H,00000H,00000H
  520.   ]
  521. END InitPieces ;
  522.  
  523. BEGIN
  524.   InitPieces( ) ;
  525.   InitStrucs( ) ;
  526.   InitWindow( ) ;
  527.   DrwBrd( ) ;
  528.   Main( )
  529. END ChessBoard.
  530.  
  531.  
  532.  
  533.  
  534.  
  535.  
  536.