DataMuseum.dkPresents historical artifacts from the history of: Rational R1000/400 Tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Rational R1000/400 Tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - downloadIndex: ┃ T V ┃
Length: 4352 (0x1100) Types: TextFile Names: »V«
└─⟦85b835f43⟧ Bits:30000549 8mm tape, Rational 1000, Xlib rev 6.00 └─ ⟦0c20f784e⟧ »DATA« └─⟦1abbe589f⟧ └─⟦306851c02⟧ └─⟦this⟧
with Text_Io; with Xlbt_Arithmetic; use Xlbt_Arithmetic; with Xlbt_Basic; use Xlbt_Basic; with Xlbt_Event; use Xlbt_Event; package Board is ------------------------------------------------------------------------------ -- Dragon - a version of Mah-Jongg for X Windows -- -- Author: Gary E. Barnes May 1989 -- -- Board - deals with the playing surface ------------------------------------------------------------------------------ -- 05/30/90 GEB - Translate to Ada ------------------------------------------------------------------------------ --\f ------------------------------------------------------------------------------ -- Global State ------------------------------------------------------------------------------ N_Faces : constant := 42; -- number of distinct tile faces N_Tiles : constant := -- number of distinct tiles in game ((N_Faces - 8) * 4 + 8); N_Rows : constant := 8; -- number of rows in game N_Cols : constant := 16; -- number of columns in game No_Tile : constant := 0; -- tile codes are 1..NFACES ---Size of the Board. Board_Width : S_Short := 29 * 15 + 1 + 8; Board_Height : S_Short := 33 * 10 + 1 + 8; Score : S_Long := N_Tiles; ----X/Y coordinate of a tile at coord 0,0 of the playing surface. Board_Tile0_X : S_Short := 4; Board_Tile0_Y : S_Short := 4 + 2 * 33; ----Actual size of a tile, not counting the border around it. Tile_Width : S_Short := 28; Tile_Height : S_Short := 32; ----X depth and Y width of a shadowed area above/to-the-right-of a tile. Shadow_X : S_Short := 28 / 8; Shadow_Y : S_Short := 32 / 8; -- --X depth and Y width of tile edge below/to-the-left-of a tile. Side_X : S_Short := (28 / 10) / 2 * 2; Side_Y : S_Short := (32 / 10) / 2 * 2; ----Each playing tile position is represented by one of these. type Board_Position_Rec is record Tiles : U_Char_Array (0 .. 3); -- at most 4 tiles at one position Draw : Boolean; -- TRUE if needs drawing Level : S_Short; -- how many tiles do we have X : S_Short; -- x coord of tile Y : S_Short; -- x coord of tile end record; type Board_Position is access Board_Position_Rec; type Board_Position_2d is array (S_Short range 0 .. N_Rows - 1, S_Short range 0 .. N_Cols - 1) of Board_Position; Board_Tiles : Board_Position_2d := (others => (others => new Board_Position_Rec)); -- #define SPEC1 0)(14 -- farthest right odd tile Spec1_Row : constant := 0; -- farthest right odd tile Spec1_Col : constant := 14; -- farthest right odd tile -- #define SPEC2 2)(14 -- next farthest right odd tile Spec2_Row : constant := 2; -- next farthest right odd tile Spec2_Col : constant := 14; -- next farthest right odd tile -- #define SPEC3 4)(14 -- farthest left odd tile Spec3_Row : constant := 4; -- farthest left odd tile Spec3_Col : constant := 14; -- farthest left odd tile -- #define SPEC4 6)(14 -- center piece tile Spec4_Row : constant := 6; -- center piece tile Spec4_Col : constant := 14; -- center piece tile -- --Record tile clicks and watch for double clicks. One_Button_Hint : Boolean := False; Click1 : Board_Position := null; Click1_Row : S_Short; Click1_Col : S_Short; Click2 : Board_Position := null; Click2_Row : S_Short; Click2_Col : S_Short; Click2_Time : X_Time; --\f procedure Hints (Event : X_Button_Press_Event); procedure Restart_Game (Event : X_Button_Press_Event); procedure Read_Game (File : Text_Io.File_Type); procedure Write_Game (File : Text_Io.File_Type); procedure Set_Tile_Controls; procedure Setup_New_Game; procedure Tile_Press (Event : X_Button_Press_Event); procedure Tile_Release (Event : X_Button_Release_Event); procedure Tile_Remove (Event : X_Button_Press_Event); end Board;