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: ┃ B T ┃
Length: 65897 (0x10169) Types: TextFile Names: »B«
└─⟦85b835f43⟧ Bits:30000549 8mm tape, Rational 1000, Xlib rev 6.00 └─ ⟦0c20f784e⟧ »DATA« └─⟦1abbe589f⟧ └─⟦059497ac5⟧ └─⟦this⟧
with Unchecked_Deallocation; with Xlbt_Arithmetic; use Xlbt_Arithmetic; with Xlbt_Atom_Defs; use Xlbt_Atom_Defs; with Xlbt_Basic; use Xlbt_Basic; with Xlbt_Display2; use Xlbt_Display2; with Xlbt_Color; use Xlbt_Color; with Xlbt_Event; use Xlbt_Event; with Xlbt_Exceptions; use Xlbt_Exceptions; with Xlbt_Extension; use Xlbt_Extension; with Xlbt_Gc; use Xlbt_Gc; with Xlbt_Gc2; use Xlbt_Gc2; with Xlbt_Graphics; use Xlbt_Graphics; with Xlbt_Host; use Xlbt_Host; with Xlbt_Image; use Xlbt_Image; with Xlbt_Image2; use Xlbt_Image2; with Xlbt_Key; use Xlbt_Key; with Xlbt_Misc; use Xlbt_Misc; with Xlbt_Proc_Var; use Xlbt_Proc_Var; with Xlbt_Request; use Xlbt_Request; with Xlbt_Rm; use Xlbt_Rm; with Xlbt_Rm2; use Xlbt_Rm2; with Xlbt_String; use Xlbt_String; with Xlbt_Univ_Ptr; use Xlbt_Univ_Ptr; with Xlbt_Visual; use Xlbt_Visual; with Xlbt_Visual2; use Xlbt_Visual2; with Xlbt_Window; use Xlbt_Window; with Xlbp_Display; use Xlbp_Display; with Xlbp_Error; use Xlbp_Error; with Xlbp_Font; use Xlbp_Font; with Xlbp_Gc; use Xlbp_Gc; with Xlbp_Proc_Var; use Xlbp_Proc_Var; with Xlbp_Rm; use Xlbp_Rm; with Xlbp_Sync; use Xlbp_Sync; with Xlbp_U_Char_Converters; use Xlbp_U_Char_Converters; with Xlbp_Window_Property; use Xlbp_Window_Property; with Xlbit_Library3; use Xlbit_Library3; with Xlbit_Library4; use Xlbit_Library4; with Xlbip_Default_Proc_Vars; use Xlbip_Default_Proc_Vars; with Xlbip_Get_Reply; use Xlbip_Get_Reply; with Xlbip_Internal; use Xlbip_Internal; with Xlbip_Put_Request; use Xlbip_Put_Request; with Xlbmt_Network_Types; use Xlbmt_Network_Types; with Xlbmt_Parameters; use Xlbmt_Parameters; with Xlbmp_Environment; use Xlbmp_Environment; with Xlbmp_Error_Log; use Xlbmp_Error_Log; with Xlbmp_Generic_Converters; use Xlbmp_Generic_Converters; with Xlbmp_Get; use Xlbmp_Get; with Xlbmp_Internal; use Xlbmp_Internal; with Xlbmp_Put; use Xlbmp_Put; package body Xlbp_Display is ------------------------------------------------------------------------------ -- X Library Display -- -- Xlbp_Display - Obtain information about a display connection. ------------------------------------------------------------------------------ -- Copyright 1989 - 1991 by Rational, Santa Clara, California. -- Copyright 1985 - 1989 by the Massachusetts Institute of Technology -- -- All Rights Reserved. -- -- Permission to use, copy, modify, and distribute this software and its -- documentation for any purpose and without fee is hereby granted, -- provided that the above copyright notice(s) appear in all copies and that -- both that copyright notice(s) and this permission notice appear in -- supporting documentation, and that the names of MIT or Rational not be -- used in advertising or publicity pertaining to distribution of the software -- without specific, written prior permission. -- -- MIT and Rational disclaim all warranties with regard to this software, -- including all implied warranties of merchantability and fitness, in no -- event shall MIT or Rational be liable for any special, indirect or -- consequential damages or any damages whatsoever resulting from loss of use, -- data or profits, whether in an action of contract, negligence or other -- tortious action, arising out of or in connection with the use or performance -- of this software. ------------------------------------------------------------------------------ function Default_X_Alloc_Id is new Proc_Var_X_Alloc_Id.Value (Internal_X_Alloc_Id); procedure Free_X_Gc is new Unchecked_Deallocation (Xlbt_Gc2.X_Gc_Rec, X_Gc); X_Reply_Contents_Size : constant X_Reply_S_Natural := ----Number of Raw data bytes that are used to contain the complete -- (non-variable portion) reply message for a given request code. X_Reply_S_Natural' ( Get_Window_Attributes => 44, Get_Geometry => 32, Query_Tree => 32, Intern_Atom => 32, Get_Atom_Name => 32, Get_Property => 32, List_Properties => 32, Get_Selection_Owner => 32, Grab_Pointer => 32, Grab_Keyboard => 32, Query_Pointer => 32, Get_Motion_Events => 32, Translate_Coords => 32, Get_Input_Focus => 32, Query_Keymap => 40, Query_Font => 60, Query_Text_Extents => 32, List_Fonts => 32, List_Fonts_With_Info => 60, Get_Font_Path => 32, Get_Image => 32, List_Installed_Colormaps => 32, Alloc_Color => 32, Alloc_Named_Color => 32, Alloc_Color_Cells => 32, Alloc_Color_Planes => 32, Query_Colors => 32, Lookup_Color => 32, Query_Best_Size => 32, Query_Extension => 32, List_Extensions => 32, Get_Keyboard_Mapping => 32, Get_Keyboard_Control => 52, Get_Pointer_Control => 32, Get_Screen_Saver => 32, List_Hosts => 32, Set_Pointer_Mapping => 32, Get_Pointer_Mapping => 32, Set_Modifier_Mapping => 32, Get_Modifier_Mapping => 32, others => 0 ----Should not happen. Means we have a new Reply type and -- we were not told. Since we are the one and only entity -- that allows replies to be created from bytes this means that -- somebody has slipped up; or else we're working with -- a malfunctioning or a too-new version server. ); --\f ------------------------------------------------------------------------------ -- Initial Connection Burst Sent ------------------------------------------------------------------------------ type X_Conn_Client_Prefix is record Byte_Order : U_Char; Pad : U_Char; Major_Version : U_Short; Minor_Version : U_Short; N_Bytes_Auth_Proto : U_Short; -- Authorization protocol name N_Bytes_Auth_String : U_Short; -- Authorization data string Pad2 : U_Short; end record; --/ if Length_Clauses then for X_Conn_Client_Prefix'Size use 32 * 3; --/ end if; --/ if Record_Rep_Clauses then --// for X_Conn_Client_Prefix use --// record --// Byte_Order at 0 * X_Word range X_Byte0a .. X_Byte0b; --// Pad at 0 * X_Word range X_Byte1a .. X_Byte1b; --// Major_Version at 0 * X_Word range X_Half1a .. X_Half1b; --// Minor_Version at 1 * X_Word range X_Half0a .. X_Half0b; --// N_Bytes_Auth_Proto at 1 * X_Word range X_Half1a .. X_Half1b; --// N_Bytes_Auth_String at 2 * X_Word range X_Half0a .. X_Half0b; --// Pad2 at 2 * X_Word range X_Half1a .. X_Half1b; --// end record; --/ end if; procedure To_Raw is new Convert_Private_To_Raw (X_Conn_Client_Prefix); procedure Put_X_Conn_Client_Prefix is new Put_Data_Private (X_Conn_Client_Prefix, To_Raw); ------------------------------------------------------------------------------ -- Connection setup structure. This is followed by: -- Num_Formats X_Pixmap_Format structures. -- Num_Roots X_Window_Root structures. ------------------------------------------------------------------------------ type X_Conn_Setup is record Release : S_Long; Rid_Base : X_Id; Rid_Mask : X_Id; Motion_Buffer_Size : S_Long; N_Bytes_Vendor : U_Short; -- Vendor string length Max_Request_Size : U_Short; Num_Roots : X_Screen_Number; -- # Root structs Num_Formats : U_Char; -- Pixmap format count Image_Byte_Order : X_Byte_Bit_Order; Bitmap_Bit_Order : X_Byte_Bit_Order; Bitmap_Scanline_Unit : U_Char; -- 8, 16, 32 Bitmap_Scanline_Pad : U_Char; -- 8, 16, 32 Min_Keycode : X_Key_Code; Max_Keycode : X_Key_Code; Pad2 : S_Long; end record; --/ if Length_Clauses then for X_Conn_Setup'Size use 32 * 8; --/ end if; --/ if Record_Rep_Clauses then --// for X_Conn_Setup use --// record --// Release at 0 * X_Word range X_Word0a .. X_Word0b; --// Rid_Base at 1 * X_Word range X_Word0a .. X_Word0b; --// Rid_Mask at 2 * X_Word range X_Word0a .. X_Word0b; --// Motion_Buffer_Size at 3 * X_Word range X_Word0a .. X_Word0b; --// N_Bytes_Vendor at 4 * X_Word range X_Half0a .. X_Half0b; --// Max_Request_Size at 4 * X_Word range X_Half1a .. X_Half1b; --// Num_Roots at 5 * X_Word range X_Byte0a .. X_Byte0b; --// Num_Formats at 5 * X_Word range X_Byte1a .. X_Byte1b; --// Image_Byte_Order at 5 * X_Word range X_Byte2a .. X_Byte2b; --// Bitmap_Bit_Order at 5 * X_Word range X_Byte3a .. X_Byte3b; --// Bitmap_Scanline_Unit at 6 * X_Word range X_Byte0a .. X_Byte0b; --// Bitmap_Scanline_Pad at 6 * X_Word range X_Byte1a .. X_Byte1b; --// Min_Keycode at 6 * X_Word range X_Byte2a .. X_Byte2b; --// Max_Keycode at 6 * X_Word range X_Byte3a .. X_Byte3b; --// Pad2 at 7 * X_Word range X_Word0a .. X_Word0b; --// end record; --/ end if; procedure From_Raw is new Convert_Raw_To_Private (X_Conn_Setup); procedure Get_X_Conn_Setup is new Get_Data_Private (X_Conn_Setup, From_Raw); ------------------------------------------------------------------------------ -- Initial Connection Burst Received ------------------------------------------------------------------------------ type X_Conn_Setup_Prefix is record Success : X_Boolean_Char; Length_Reason : U_Char; -- reason str length if failure Major_Version : U_Short; Minor_Version : U_Short; Length : U_Short; -- word count of setup info end record; --/ if Length_Clauses then for X_Conn_Setup_Prefix'Size use 32 * 2; --/ end if; --/ if Record_Rep_Clauses then --// for X_Conn_Setup_Prefix use --// record --// Success at 0 * X_Word range X_Byte0a .. X_Byte0b; --// Length_Reason at 0 * X_Word range X_Byte1a .. X_Byte1b; --// Major_Version at 0 * X_Word range X_Half1a .. X_Half1b; --// Minor_Version at 1 * X_Word range X_Half0a .. X_Half0b; --// Length at 1 * X_Word range X_Half1a .. X_Half1b; --// end record; --/ end if; procedure From_Raw is new Convert_Raw_To_Private (X_Conn_Setup_Prefix); procedure Get_X_Conn_Setup_Prefix is new Get_Data_Private (X_Conn_Setup_Prefix, From_Raw); ------------------------------------------------------------------------------ -- X_Depths ------------------------------------------------------------------------------ type X_Depths is record Depth : U_Char; Pad1 : U_Char; N_Visuals : U_Short; -- number of X_Visual_Type's coming Pad2 : S_Long; end record; --/ if Length_Clauses then for X_Depths'Size use 32 * 2; --/ end if; --/ if Record_Rep_Clauses then --// for X_Depths use --// record --// Depth at 0 * X_Word range X_Byte0a .. X_Byte0b; --// Pad1 at 0 * X_Word range X_Byte1a .. X_Byte1b; --// N_Visuals at 0 * X_Word range X_Half1a .. X_Half1b; --// Pad2 at 1 * X_Word range X_Word0a .. X_Word0b; --// end record; --/ end if; procedure From_Raw is new Convert_Raw_To_Private (X_Depths); procedure Get_X_Depths is new Get_Data_Private (X_Depths, From_Raw); ------------------------------------------------------------------------------ -- X_Pixmap_Format ------------------------------------------------------------------------------ type X_Pixmap_Format is record Depth : U_Char; Bits_Per_Pixel : U_Char; Scan_Line_Pad : U_Char; Pad1 : U_Char; Pad2 : S_Long; end record; --/ if Length_Clauses then for X_Pixmap_Format'Size use 32 * 2; --/ end if; --/ if Record_Rep_Clauses then --// for X_Pixmap_Format use --// record --// Depth at 0 * X_Word range X_Byte0a .. X_Byte0b; --// Bits_Per_Pixel at 0 * X_Word range X_Byte1a .. X_Byte1b; --// Scan_Line_Pad at 0 * X_Word range X_Byte2a .. X_Byte2b; --// Pad1 at 0 * X_Word range X_Byte3a .. X_Byte3b; --// Pad2 at 1 * X_Word range X_Word0a .. X_Word0b; --// end record; --/ end if; procedure From_Raw is new Convert_Raw_To_Private (X_Pixmap_Format); procedure Get_X_Pixmap_Format is new Get_Data_Private (X_Pixmap_Format, From_Raw); ------------------------------------------------------------------------------ -- X_Visual_Type - Describes each visual type available at each depth ------------------------------------------------------------------------------ type X_Visual_Type is record Vis_Id : X_Visual_Id; Class : X_Display_Class; Bits_Per_Rgb : U_Char; Colormap_Entries : U_Short; Red_Mask : X_Red_Color_Mask; Green_Mask : X_Green_Color_Mask; Blue_Mask : X_Blue_Color_Mask; Pad : S_Long; end record; --/ if Length_Clauses then for X_Visual_Type'Size use 32 * 6; --/ end if; --/ if Record_Rep_Clauses then --// for X_Visual_Type use --// record --// Vis_Id at 0 * X_Word range X_Word0a .. X_Word0b; --// Class at 1 * X_Word range X_Byte0a .. X_Byte0b; --// Bits_Per_Rgb at 1 * X_Word range X_Byte1a .. X_Byte1b; --// Colormap_Entries at 1 * X_Word range X_Half1a .. X_Half1b; --// Red_Mask at 2 * X_Word range X_Word0a .. X_Word0b; --// Green_Mask at 3 * X_Word range X_Word0a .. X_Word0b; --// Blue_Mask at 4 * X_Word range X_Word0a .. X_Word0b; --// Pad at 5 * X_Word range X_Word0a .. X_Word0b; --// end record; --/ end if; procedure From_Raw is new Convert_Raw_To_Private (X_Visual_Type); procedure Get_X_Visual_Type is new Get_Data_Private (X_Visual_Type, From_Raw); ------------------------------------------------------------------------------ -- X_Window_Root ------------------------------------------------------------------------------ type X_Window_Root is record Wind_Id : X_Window; Default_Colormap : X_Colormap; White_Pixel : X_Pixel; Black_Pixel : X_Pixel; Current_Input_Mask : X_Event_Mask; Pix_Width : U_Short; Pix_Height : U_Short; Mm_Width : U_Short; Mm_Height : U_Short; Min_Installed_Maps : U_Short; Max_Installed_Maps : U_Short; Root_Visual_Id : X_Visual_Id; Backing_Store : X_Backing_Store_Hint; Save_Unders : X_Boolean_Char; Root_Depth : U_Char; N_Depths : U_Char; -- # X_Depths's following end record; --/ if Length_Clauses then for X_Window_Root'Size use 32 * 10; --/ end if; --/ if Record_Rep_Clauses then --// for X_Window_Root use --// record --// Wind_Id at 0 * X_Word range X_Word0a .. X_Word0b; --// Default_Colormap at 1 * X_Word range X_Word0a .. X_Word0b; --// White_Pixel at 2 * X_Word range X_Word0a .. X_Word0b; --// Black_Pixel at 3 * X_Word range X_Word0a .. X_Word0b; --// Current_Input_Mask at 4 * X_Word range X_Word0a .. X_Word0b; --// Pix_Width at 5 * X_Word range X_Half0a .. X_Half0b; --// Pix_Height at 5 * X_Word range X_Half1a .. X_Half1b; --// Mm_Width at 6 * X_Word range X_Half0a .. X_Half0b; --// Mm_Height at 6 * X_Word range X_Half1a .. X_Half1b; --// Min_Installed_Maps at 7 * X_Word range X_Half0a .. X_Half0b; --// Max_Installed_Maps at 7 * X_Word range X_Half1a .. X_Half1b; --// Root_Visual_Id at 8 * X_Word range X_Word0a .. X_Word0b; --// Backing_Store at 9 * X_Word range X_Byte0a .. X_Byte0b; --// Save_Unders at 9 * X_Word range X_Byte1a .. X_Byte1b; --// Root_Depth at 9 * X_Word range X_Byte2a .. X_Byte2b; --// N_Depths at 9 * X_Word range X_Byte3a .. X_Byte3b; --// end record; --/ end if; procedure From_Raw is new Convert_Raw_To_Private (X_Window_Root); procedure Get_X_Window_Root is new Get_Data_Private (X_Window_Root, From_Raw); ------------------------------------------------------------------------------ --\f procedure X_Open_Display (Name : X_String; Display : out X_Display; Error : in out X_Error_String) is ------------------------------------------------------------------------------ -- Open a connection to the display whose name is contained in Disp, e.g. -- "Thumper:0". If Display /= Null upon return then the connection has been set -- up and is ready to go. If Display = Null upon return then Error contains a -- textual representation of what went wrong. The new X_Display is attached -- to the X_Lib parameter; X_Lib supplies the "global context" for the -- X_Display. ------------------------------------------------------------------------------ Ldisplay : X_Display := None_X_Display; Client : X_Conn_Client_Prefix; -- client information Prefix : X_Conn_Setup_Prefix; -- prefix information Display_Num : U_Char; Screen_Num : X_Screen_Number; -- screen number Family : X_Host_Protocol_Family; Server_Addr : X_Network_Host_Address; Root_Visual_Id : X_Visual_Id; Void : Proc_Var_X_Synchandler.Pv; Succ : X_Status; Conn_Auth_Name : U_Char_List; Conn_Auth_Data : U_Char_List; Short_Reply : exception; Connection_Io_Error : exception; ------------------------------------------------------------------------------ procedure Abandon_Connection (Displayi : in out X_Display) is ------------------------------------------------------------------------------ -- Abandon_Connection is called if we get I/O, storage, or other fatal -- errors. X_Open_Display returns NULL for the Display after this -- returns. ------------------------------------------------------------------------------ begin Internal_X_Disconnect_Display (Displayi.Network); Lock_Display (Displayi); -- Free will unlock it. Internal_X_Free_Display_Structure (Displayi); -- Xau_Dispose_Auth (Auth_Ptr); Displayi := null; end Abandon_Connection; ------------------------------------------------------------------------------ procedure Convert_Visuals (Root_Visual : in out X_Visual; Visuals : in out X_Visual_List; Length : U_Short) is ----------------------------------------------------------------------- -- Called by Convert_Depths to read N_Visuals worth of X_Visual_Types -- for an X_Depths record that is being read for an X_Window_Root record -- that is being read for a new connection. ----------------------------------------------------------------------- V : X_Visual_Type; begin ----Allocate a new visual array. Visuals := new X_Visual_Array (1 .. Length); Ldisplay.Total_Visuals := Ldisplay.Total_Visuals + S_Natural (Length); ----Convert the Visuals one record at a time. Put each new visual -- into the Visuals array. for K in Visuals'Range loop Get_X_Visual_Type (Ldisplay, V); Visuals (K) := new X_Visual_Rec'((Class => V.Class, Bits_Per_Rgb => V.Bits_Per_Rgb, Map_Entries => V.Colormap_Entries, Red_Mask => V.Red_Mask, Green_Mask => V.Green_Mask, Blue_Mask => V.Blue_Mask, Ext_Data => null, Visual_Id => V.Vis_Id)); ----If we happen upon the Root Visual then return it. if V.Vis_Id = Root_Visual_Id then Root_Visual := Visuals (K); end if; end loop; end Convert_Visuals; ------------------------------------------------------------------------------ procedure Convert_Depths (Root_Visual : in out X_Visual; Depths : in out X_Depth_List; Length : U_Char) is ----------------------------------------------------------------------- -- Called below to read N_Depths worth of X_Depths for an -- X_Window_Root record that is being read for a new connection. ----------------------------------------------------------------------- D : X_Depths; begin ----Allocate the new Depths array and then fill it. Depths := new X_Depth_Array (1 .. Length); ----Convert each Depth and read the Visuals that follow each one. for J in Depths'Range loop Get_X_Depths (Ldisplay, D); ----Create the new Depth and read it's Visuals. Depths (J) := (Depth => D.Depth, Visuals => null); Convert_Visuals (Root_Visual, Depths (J).Visuals, D.N_Visuals); end loop; end Convert_Depths; ------------------------------------------------------------------------------ ----Continue the body of X_Open_Display begin ----Init our OUT parameters that might not otherwise be set if we get an error. Display := None_X_Display; ----Get the display name to use. X_Display_Name takes care of looking at -- environment variables if Name is empty. declare Dname : constant X_String := X_Display_Name (Name); begin if Dname = "" then Err (Error, X_Get_Error_String ("XlibError", "NoHost", "No host or display name was given.")); return; end if; ----Set the default error handlers. This allows the global variables to -- default to NULL for use with shared libraries. ----Attempt to allocate a display structure. Ldisplay := new X_Display_Rec; Ldisplay.Lock := new X_Mutex_Rec; ----Call the Connect routine to get the network socket. The Succ status -- indicates whether or not the connection failed. The connect routine will -- return the expanded display name in displaybuf. Error are reported in -- the Error string so we don't have to worry about doing that. Internal_X_Connect_Display (Display_Name => Dname, Expanded_Name => Ldisplay.Display_Name, Display_Num => Display_Num, Screen_Num => Screen_Num, Family => Family, Server_Addr => Server_Addr, Connection => Ldisplay.Network, Status => Succ, Error => Error); if Succ = Failed then Lock_Display (Ldisplay); -- Free will unlock it. Internal_X_Free_Display_Structure (Ldisplay); return; end if; end; ----Look up the authorization protocol name and data if necessary. X_Lib.Get_Authorization (Conn_Auth_Name, Conn_Auth_Data); if Conn_Auth_Name = None_U_Char_List or else Conn_Auth_Data = None_U_Char_List then declare Num : constant X_String := To_X_String (U_Char'Image (Display_Num)); begin -- Auth_Ptr := Xau_Get_Auth_By_Addr -- (Family => Family, -- Server_Addr => Server_Addr, -- Display_Num => Num (Num'First + 1 .. Num'Last), -- Auth_Name => conn_Auth_Name); -- if Auth_Ptr /= None_X_Auth then -- Conn_Auth_Name := Auth_Ptr.Name; -- Conn_Auth_Data := Auth_Ptr.Data; -- else Conn_Auth_Name := None_U_Char_List; Conn_Auth_Data := None_U_Char_List; -- end if; end; end if; ----Free the Server_Addr data. We won't need it further. Free_X_Network_Host_Address (Server_Addr); ----Send the Hello message. The first byte of the Hello message is the byte -- order code. The authentication key is normally sent right after the -- connection. This (in MIT's case) will be Kerberos. Client.Byte_Order := Character'Pos (X_Lib_Indian); Client.Major_Version := Xlbmt_Parameters.X_Protocol; Client.Minor_Version := Xlbmt_Parameters.X_Protocol_Revision; if Conn_Auth_Name /= None_U_Char_List then Client.N_Bytes_Auth_Proto := Conn_Auth_Name'Length; else Client.N_Bytes_Auth_Proto := 0; end if; if Conn_Auth_Data /= None_U_Char_List then Client.N_Bytes_Auth_String := Conn_Auth_Data'Length; else Client.N_Bytes_Auth_String := 0; end if; ----Put the X_Conn_Client_Prefix record in the buffer. Put_X_Conn_Client_Prefix (Ldisplay, Client); ----Put the Conn_Auth_Name in the buffer. if Conn_Auth_Name /= None_U_Char_List then Put_U_Char_Array (Ldisplay, Conn_Auth_Data.all); end if; ----Put the Conn_Auth_Data in the buffer; if Conn_Auth_Data /= None_U_Char_List then Put_U_Char_Array (Ldisplay, Conn_Auth_Data.all); end if; ----Get rid of the authorization information. -- Xau_Dispose_Auth (Auth_Ptr); ----Transmit our information and check for errors. Internal_X_Flush_Display (Ldisplay); ----Now see if connection was accepted... Get_X_Conn_Setup_Prefix (Ldisplay, Prefix); ----Check the Major/Minor version numbers to see if they match. if Prefix.Major_Version < Xlbmt_Parameters.X_Protocol then X_Report_Warning ("XlibMessage", "OldMajor", "Xlib; Mismatch on major version. Client built for major" & Lf & "version %1 and server is version %2.", To_X_String (S_Natural'Image (Xlbmt_Parameters.X_Protocol)), To_X_String (S_Natural'Image (S_Natural (Prefix.Major_Version))) & '.'); end if; if Prefix.Minor_Version /= Xlbmt_Parameters.X_Protocol_Revision then X_Report_Warning ("XlibMessage", "OldMinor", "Xlib; Mismatch on minor version. Client built for minor" & Lf & "version %1 and server is version %2.", To_X_String (S_Natural'Image (Xlbmt_Parameters.X_Protocol_Revision)), To_X_String (S_Natural'Image (S_Natural (Prefix.Minor_Version))) & '.'); end if; ----If the connection is refused then grab the reason and return. if Prefix.Success = False then declare Reason : X_String (1 .. S_Natural (Prefix.Length) * 4); Last : S_Natural := Reason'Last; begin Get_X_String (Ldisplay, Reason); for I in reverse Reason'Last - 2 .. Reason'Last loop if Reason (I) = Nul then Last := I; exit; end if; end loop; Err (Error, X_Get_Error_String ("XlibError", "ConnectRefused", "X server connection refused:") & ' ' & Reason (1 .. Last)); Abandon_Connection (Ldisplay); return; end; end if; ----The connection was accepted. Read the rest of the setup information. declare Setup : X_Conn_Setup; begin Get_X_Conn_Setup (Ldisplay, Setup); ----We succeeded at authorization, so let us move the data into the display -- structure. Ldisplay.Proto_Major_Version := Prefix.Major_Version; Ldisplay.Proto_Minor_Version := Prefix.Minor_Version; Ldisplay.Release := Setup.Release; Ldisplay.Resource_Base := Setup.Rid_Base; -- base of all ID's Ldisplay.Resource_Id := (Number => 0); Ldisplay.Resource_Mask := Setup.Rid_Mask; Ldisplay.Resource_Incr := -- Just 1 bit at bottom of mask (Shift (Ldisplay.Resource_Mask.Number, 1) xor Ldisplay.Resource_Mask.Number) and Ldisplay.Resource_Mask.Number; Ldisplay.Min_Keycode := Setup.Min_Keycode; Ldisplay.Max_Keycode := Setup.Max_Keycode; Ldisplay.Motion_Buffer := Setup.Motion_Buffer_Size; Ldisplay.Byte_Order := Setup.Image_Byte_Order; Ldisplay.Bitmap_Unit := Setup.Bitmap_Scanline_Unit; Ldisplay.Bitmap_Pad := Setup.Bitmap_Scanline_Pad; Ldisplay.Bitmap_Bit_Order := Setup.Bitmap_Bit_Order; Ldisplay.Max_Request_Size := Setup.Max_Request_Size; Ldisplay.Event_Vec := X_Wire_Event_Array'(others => X_Lib_Default_X_Unknown_Wire_Event); Ldisplay.Wire_Vec := X_Event_Wire_Array'(others => X_Lib_Default_X_Unknown_Native_Event); Ldisplay.Reply_Size := X_Reply_Contents_Size; ----Compute maximum sizes for the various Poly-whatever graphics requests -- that we are willing to generate. Ldisplay.Poly_Arc_Limit := (S_Natural (Ldisplay.Max_Request_Size) - 8) / (X_Arc'Size / 32); Ldisplay.Poly_Point_Limit := (S_Natural (Ldisplay.Max_Request_Size) - 8) / (X_Point'Size / 32); Ldisplay.Poly_Rectangle_Limit := (S_Natural (Ldisplay.Max_Request_Size) - 8) / (X_Rectangle'Size / 32); Ldisplay.Poly_Segment_Limit := (S_Natural (Ldisplay.Max_Request_Size) - 8) / (X_Segment'Size / 32); ----Now init event_Vec/Wire_Vec the way we really want it. Ada is too stupid -- to realize that "Key_Press..Last_Event-1" is a "static" expression so we -- can't use an aggregate. for I in Key_Press .. X_Event_Code'Pred (Last_Event) loop Ldisplay.Event_Vec (I) := X_Lib_Default_X_Wire_To_Event; Ldisplay.Wire_Vec (I) := None_X_Procedure_Variable; end loop; ----Now extract the vendor str... String must be null terminated, padded to -- multiple of 4 bytes. Ldisplay.Vendor := new X_String (1 .. S_Natural (Setup.N_Bytes_Vendor)); Get_X_String (Ldisplay, Ldisplay.Vendor.all); ----Now iterate down setup information..... -- First decode the Z axis Screen format information. declare Pm : X_Pixmap_Format; Length : S_Natural := S_Natural (Setup.Num_Formats); begin Ldisplay.Pixmap_Format := new X_Screen_Format_Array (0 .. U_Char (Length - 1)); for I in Ldisplay.Pixmap_Format'Range loop Get_X_Pixmap_Format (Ldisplay, Pm); Ldisplay.Pixmap_Format (I) := new X_Screen_Format_Rec' ((Depth => Pm.Depth, Bits_Per_Pixel => Pm.Bits_Per_Pixel, Scan_Line_Pad => Pm.Scan_Line_Pad, Ext_Data => null)); end loop; end; ----Next the Screen structures. Deal with each one in turn. declare Wr : X_Window_Root; Length : S_Natural := S_Natural (Setup.Num_Roots); begin Ldisplay.Screens := new X_Screen_Array (0 .. X_Screen_Number (Length - 1)); for I in Ldisplay.Screens'Range loop Get_X_Window_Root (Ldisplay, Wr); Ldisplay.Screens (I) := new X_Screen_Rec' ((Display => Ldisplay, Root => Wr.Wind_Id, Default_Colormap => Wr.Default_Colormap, White_Pixel => Wr.White_Pixel, Black_Pixel => Wr.Black_Pixel, Root_Input_Mask => Wr.Current_Input_Mask, Width => Wr.Pix_Width, Height => Wr.Pix_Height, Mm_Width => Wr.Mm_Width, Mm_Height => Wr.Mm_Height, Min_Maps => Wr.Min_Installed_Maps, Max_Maps => Wr.Max_Installed_Maps, Root_Visual => null, -- filled in later, when we alloc Visuals Backing_Store => Wr.Backing_Store, Save_Unders => Wr.Save_Unders = True, Root_Depth => Wr.Root_Depth, Depths => null, Default_Gc => null, Ext_Data => null)); Root_Visual_Id := Wr.Root_Visual_Id; ----Let's set up the depth structures for this screen. Convert_Depths (Ldisplay.Screens (I).Root_Visual, Ldisplay.Screens (I).Depths, Wr.N_Depths); end loop; end; ----Setup other information in this display structure. Ldisplay.Vnumber := Xlbmt_Parameters.X_Protocol; Ldisplay.Resource_Alloc := X_Lib_Default_X_Alloc_Id; Ldisplay.Default_Screen := Screen_Num; -- Value returned by Connect_Display Ldisplay.Last_Request.Kind := Invalid_Request; ----Now start talking to the server to setup all other information... end; ----Call into synchronization routine to make sure that we are synchronized. declare Flag : Boolean; begin X_Lib.Get_Debug (Flag); Void := X_Synchronize (Ldisplay, Flag); end; ----Chain this stucture onto global list. X_Lib.Add_Display (Ldisplay); ----Make sure default screen is legal. if Screen_Num not in Ldisplay.Screens'Range then Err (Error, X_Get_Error_String ("XlibError", "BadScrNum", "Screen number is out of server-defined range.")); Abandon_Connection (Ldisplay); return; end if; ----Set up other stuff clients are always going to use. for I in Ldisplay.Screens'Range loop declare Values : X_Gc_Values; begin Values.Foreground := Ldisplay.Screens (I).Black_Pixel; Values.Background := Ldisplay.Screens (I).White_Pixel; Ldisplay.Screens (I).Default_Gc := X_Create_Gc (Ldisplay, Ldisplay.Screens (I).Root.Drawable, (Gc_Foreground | Gc_Background => True, others => False), Values); end; end loop; ----Get the resource manager database off the root window. declare Actual_Type : X_Atom; Actual_Format : U_Char; N_Items : S_Natural; Leftover : S_Natural; Data : U_Char_List; begin X_Get_Window_Property (Display => Ldisplay, Window => X_Root_Window (Ldisplay, 0), Property => Xa_Resource_Manager, Offset => 0, Maximum_Length => S_Long'Last / 4, --100_000_000, Delete => False, Representation => Xa_String, Actual_Type => Actual_Type, Actual_Format => Actual_Format, N_Items => N_Items, Bytes_After => Leftover, Data => Data, Status => Succ); if Succ /= Failed then if Actual_Type /= Xa_String or else Actual_Format /= 8 then Free_X_String_Pointer (Ldisplay.X_Defaults); end if; end if; if Data /= None_U_Char_List then Ldisplay.X_Defaults := new X_String (1 .. Data'Length); From_Uca (Ldisplay.X_Defaults.all, Data.all); else Ldisplay.X_Defaults := None_X_String_Pointer; end if; exception when others => Free_U_Char_List (Data); raise; end; Ldisplay.Database := Univ_X_Rm_Database.To_X_Universal_Pointer (new X_Rm_Database_Rec); ----What do you know? We made it. Return the Display and go. Display := Ldisplay; return; ----Handle the more onerous exceptions here. exception when Connection_Io_Error => Error := Ldisplay.Last_Error; Abandon_Connection (Ldisplay); return; when Short_Reply => Err (Error, X_Get_Error_String ("XlibError", "ShortHello", "Initial X server response too short.")); Abandon_Connection (Ldisplay); return; when Storage_Error => Err (Error, X_Get_Error_String ("XlibError", "NoMemory", "No free memory available.")); Abandon_Connection (Ldisplay); return; when others => Abandon_Connection (Ldisplay); raise; end X_Open_Display; --\f procedure X_Close_Display (Display : in out X_Display) is ------------------------------------------------------------------------------ -- X_Sync the connection to the X server; close a connection that was -- previously opened via X_Open_Display; free all associated storage. ------------------------------------------------------------------------------ Ext : X_Extension; Dp : X_Display; Cp : X_Display; Gc : X_Gc; begin ----Sync up with the server and discard all pending input events. Display.Flags (Xlib_Display_Closing) := True; X_Sync (Display, Discard => True); ----Tell all of the extensions that this display is going away. Ext := Display.Ext_Procs; while Ext /= null loop if Ext.Close_Display /= None_X_Procedure_Variable then Proc_Var_X_Close_Display_Extension.Call (Proc_Var_X_Close_Display_Extension.To_Pv (Ext.Close_Display), Display, Ext.Codes); end if; Ext := Ext.Next; end loop; ----Free the GC's for all of the screens. for I in Display.Screens'Range loop Gc := Display.Screens (I).Default_Gc; if Gc.Ext_Data /= null then Free_X_Ext_Data_List (Gc.Ext_Data); end if; Free_X_Gc (Display.Screens (I).Default_Gc); end loop; ----Free the cursor font, if any. if Display.Cursor_Font /= None_X_Font then X_Unload_Font (Display, Display.Cursor_Font); end if; ----Begin the actual disconnection. Lock_Display (Display); -- Prevent other use Internal_X_Disconnect_Display (Display.Network); -- Actually disconnect ----Remove the display from the list of open displays and free the storage. X_Lib.Remove_Display (Display); Internal_X_Free_Display_Structure (Display); end X_Close_Display; --\f procedure X_No_Op (Display : X_Display) is ------------------------------------------------------------------------------ -- Send a No-Operation request to the server. ------------------------------------------------------------------------------ begin ----Lock the display. Lock_Display (Display); begin ----Send the request. Put_X_No_Operation_Request (Display, (Kind => No_Operation, Length => X_No_Operation_Request'Size / 32, Pad => 0)); ----Catch unexpected exceptions and unlock the display before passing them on. exception when others => Unlock_Display (Display); raise; end; ----Unlock the display and return. Unlock_Display (Display); Sync_Handle (Display); end X_No_Op; --\f ------------------------------------------------------------------------------ -- Display functions ------------------------------------------------------------------------------ function X_All_Planes return X_Plane_Mask is begin return All_Planes; end X_All_Planes; ------------------------------------------------------------------------------ function X_Bitmap_Bit_Order (Display : X_Display) return X_Byte_Bit_Order is begin return Display.Bitmap_Bit_Order; end X_Bitmap_Bit_Order; ------------------------------------------------------------------------------ function X_Bitmap_Pad (Display : X_Display) return U_Char is begin return Display.Bitmap_Pad; end X_Bitmap_Pad; ------------------------------------------------------------------------------ function X_Bitmap_Unit (Display : X_Display) return U_Char is begin return Display.Bitmap_Unit; end X_Bitmap_Unit; ------------------------------------------------------------------------------ function X_Connection_Number (Display : X_Display) return X_Network_Connection is begin return Display.Network; end X_Connection_Number; ------------------------------------------------------------------------------ function X_Default_Root_Window (Display : X_Display) return X_Window is begin return Display.Screens (Display.Default_Screen).Root; end X_Default_Root_Window; ------------------------------------------------------------------------------ function X_Default_Screen (Display : X_Display) return X_Screen_Number is begin return Display.Default_Screen; end X_Default_Screen; ------------------------------------------------------------------------------ function X_Default_Screen_Of_Display (Display : X_Display) return X_Screen is begin return Display.Screens (Display.Default_Screen); end X_Default_Screen_Of_Display; ------------------------------------------------------------------------------ function X_Display_Name (Display : X_String) return X_String is ------------------------------------------------------------------------------ -- If the parameter is "" then we query the Environment to determine the -- name of the default display to be used. If the parameter is not "" then -- we simply return it. ------------------------------------------------------------------------------ Ptr : X_String_Pointer; begin if Display /= "" and then Display (Display'First) /= Nul then return Display; end if; Ptr := X_Env_Get_Environment_Variable ("DISPLAY"); if Ptr = None_X_String_Pointer then return ""; end if; declare Str : constant X_String := Ptr.all; begin Free_X_String_Pointer (Ptr); return Str; end; end X_Display_Name; ------------------------------------------------------------------------------ function X_Display_String (Display : X_Display) return X_String is begin return Display.Display_Name.all; end X_Display_String; ------------------------------------------------------------------------------ function X_Image_Byte_Order (Display : X_Display) return X_Byte_Bit_Order is begin return Display.Byte_Order; end X_Image_Byte_Order; ------------------------------------------------------------------------------ function X_Last_Known_Request_Processed (Display : X_Display) return S_Long is begin return Display.Last_Request_Read; end X_Last_Known_Request_Processed; ------------------------------------------------------------------------------ function X_List_Pixmap_Formats (Display : X_Display) return X_Pixmap_Format_Values_List is ------------------------------------------------------------------------------ -- Display - Specifies the display to use. -- -- Returns an array of X_Pixmap_Format_Values that describe the types of Z -- format images that are supported by the specified display. ------------------------------------------------------------------------------ Formats : X_Pixmap_Format_Values_List := new X_Pixmap_Format_Values_Array (S_Natural (Display.Pixmap_Format'First) .. S_Natural (Display.Pixmap_Format'Last)); begin for I in Display.Pixmap_Format'Range loop Formats (S_Natural (I)).Depth := Display.Pixmap_Format (I).Depth; Formats (S_Natural (I)).Bits_Per_Pixel := Display.Pixmap_Format (I).Bits_Per_Pixel; Formats (S_Natural (I)).Scan_Line_Pad := Display.Pixmap_Format (I).Scan_Line_Pad; end loop; return Formats; end X_List_Pixmap_Formats; ------------------------------------------------------------------------------ function X_Max_Request_Size (Display : X_Display) return U_Short is begin return Display.Max_Request_Size; end X_Max_Request_Size; ------------------------------------------------------------------------------ function X_Next_Request (Display : X_Display) return S_Long is begin return Display.Request + 1; end X_Next_Request; ------------------------------------------------------------------------------ function X_Protocol_Revision (Display : X_Display) return U_Short is begin return Display.Proto_Minor_Version; end X_Protocol_Revision; ------------------------------------------------------------------------------ function X_Protocol_Version (Display : X_Display) return U_Short is begin return Display.Proto_Major_Version; end X_Protocol_Version; ------------------------------------------------------------------------------ function X_Q_Length (Display : X_Display) return S_Long is begin return Display.Q_Len; end X_Q_Length; ------------------------------------------------------------------------------ function X_Resource_Database (Display : X_Display) return X_Rm_Database is Db : X_Rm_Database := None_X_Rm_Database; begin ----Lock the display. Lock_Display (Display); ----Get the database; if there is one. if Display.Database /= None_X_Universal_Pointer then Db := Univ_X_Rm_Database.From_X_Universal_Pointer (Display.Database); end if; ----Unlock and return the database. Unlock_Display (Display); return Db; exception when others => Unlock_Display (Display); raise; end X_Resource_Database; ------------------------------------------------------------------------------ function X_Resource_Manager_String (Display : X_Display) return X_String_Pointer is begin return Display.X_Defaults; end X_Resource_Manager_String; ------------------------------------------------------------------------------ procedure X_Set_Resource_Database (Display : X_Display; Database : X_Rm_Database) is New_Uv : X_Universal_Pointer := None_X_Universal_Pointer; begin ----Lock the display. Lock_Display (Display); ----If we have a new database then get a universal pointer for it; this may -- fail with storage error and such so do it before we zap the old database. if Database /= None_X_Rm_Database then New_Uv := Univ_X_Rm_Database.To_X_Universal_Pointer (Database); end if; ----If there is an old database then free the universal pointer; never the -- database. if Display.Database /= None_X_Universal_Pointer then Univ_X_Rm_Database.Free_X_Universal_Pointer (Display.Database); end if; ----Set the new database and unlock the display. Display.Database := New_Uv; Unlock_Display (Display); exception when others => Unlock_Display (Display); raise; end X_Set_Resource_Database; ------------------------------------------------------------------------------ function X_Screen_Count (Display : X_Display) return X_Screen_Number is begin return Display.Screens'Length; end X_Screen_Count; ------------------------------------------------------------------------------ function X_Server_Vendor (Display : X_Display) return X_String is begin return Display.Vendor.all; end X_Server_Vendor; ------------------------------------------------------------------------------ function X_Vendor_Release (Display : X_Display) return S_Long is begin return Display.Release; end X_Vendor_Release; ------------------------------------------------------------------------------ --\f ------------------------------------------------------------------------------ -- Screen N of Display functions ------------------------------------------------------------------------------ function X_Black_Pixel (Display : X_Display; Screen : X_Screen_Number) return X_Pixel is begin return Display.Screens (Screen).Black_Pixel; end X_Black_Pixel; ------------------------------------------------------------------------------ function X_Default_Colormap (Display : X_Display; Screen : X_Screen_Number) return X_Colormap is begin return Display.Screens (Screen).Default_Colormap; end X_Default_Colormap; ------------------------------------------------------------------------------ function X_Default_Depth (Display : X_Display; Screen : X_Screen_Number) return U_Char is begin return Display.Screens (Screen).Root_Depth; end X_Default_Depth; ------------------------------------------------------------------------------ function X_Default_Gc (Display : X_Display; Screen : X_Screen_Number) return X_Gc is begin return Display.Screens (Screen).Default_Gc; end X_Default_Gc; ------------------------------------------------------------------------------ function X_Default_Visual (Display : X_Display; Screen : X_Screen_Number) return X_Visual is begin return Display.Screens (Screen).Root_Visual; end X_Default_Visual; ------------------------------------------------------------------------------ function X_Display_Cells (Display : X_Display; Screen : X_Screen_Number) return U_Short is begin return X_Default_Visual (Display, Screen).Map_Entries; end X_Display_Cells; ------------------------------------------------------------------------------ function X_Display_Height (Display : X_Display; Screen : X_Screen_Number) return U_Short is begin return Display.Screens (Screen).Height; end X_Display_Height; ------------------------------------------------------------------------------ function X_Display_Height_Mm (Display : X_Display; Screen : X_Screen_Number) return U_Short is begin return Display.Screens (Screen).Mm_Height; end X_Display_Height_Mm; ------------------------------------------------------------------------------ function X_Display_Planes (Display : X_Display; Screen : X_Screen_Number) return U_Char is begin return Display.Screens (Screen).Root_Depth; end X_Display_Planes; ------------------------------------------------------------------------------ function X_Display_Width (Display : X_Display; Screen : X_Screen_Number) return U_Short is begin return Display.Screens (Screen).Width; end X_Display_Width; ------------------------------------------------------------------------------ function X_Display_Width_Mm (Display : X_Display; Screen : X_Screen_Number) return U_Short is begin return Display.Screens (Screen).Mm_Width; end X_Display_Width_Mm; ------------------------------------------------------------------------------ function X_List_Depths (Display : X_Display; Screen : X_Screen_Number) return U_Char_List is ------------------------------------------------------------------------------ -- Display - Specifies the display to use. -- Screen - Specifies the number of the screen connected to the display. -- -- Returns an array of the supported depths for this screen. ------------------------------------------------------------------------------ Scr : X_Screen; Result : U_Char_List; begin if Screen not in Display.Screens'Range then return None_U_Char_List; end if; Scr := Display.Screens (Screen); Result := new U_Char_Array (S_Natural (Scr.Depths'First) .. S_Natural (Scr.Depths'Last)); for I in Scr.Depths'Range loop Result (S_Natural (I)) := Scr.Depths (I).Depth; end loop; return Result; end X_List_Depths; ------------------------------------------------------------------------------ function X_Root_Window (Display : X_Display; Screen : X_Screen_Number) return X_Window is begin return Display.Screens (Screen).Root; end X_Root_Window; ------------------------------------------------------------------------------ function X_Screen_Of_Display (Display : X_Display; Screen : X_Screen_Number) return X_Screen is begin return Display.Screens (Screen); end X_Screen_Of_Display; ------------------------------------------------------------------------------ function X_White_Pixel (Display : X_Display; Screen : X_Screen_Number) return X_Pixel is begin return Display.Screens (Screen).White_Pixel; end X_White_Pixel; ------------------------------------------------------------------------------ --\f ------------------------------------------------------------------------------ -- Screen oriented functions (toolkit) ------------------------------------------------------------------------------ function X_Black_Pixel_Of_Screen (Screen : X_Screen) return X_Pixel is begin return Screen.Black_Pixel; end X_Black_Pixel_Of_Screen; ------------------------------------------------------------------------------ function X_Cells_Of_Screen (Screen : X_Screen) return U_Short is begin return X_Default_Visual_Of_Screen (Screen).Map_Entries; end X_Cells_Of_Screen; ------------------------------------------------------------------------------ function X_Default_Colormap_Of_Screen (Screen : X_Screen) return X_Colormap is begin return Screen.Default_Colormap; end X_Default_Colormap_Of_Screen; ------------------------------------------------------------------------------ function X_Default_Depth_Of_Screen (Screen : X_Screen) return U_Char is begin return Screen.Root_Depth; end X_Default_Depth_Of_Screen; ------------------------------------------------------------------------------ function X_Default_Gc_Of_Screen (Screen : X_Screen) return X_Gc is begin return Screen.Default_Gc; end X_Default_Gc_Of_Screen; ------------------------------------------------------------------------------ function X_Default_Visual_Of_Screen (Screen : X_Screen) return X_Visual is begin return Screen.Root_Visual; end X_Default_Visual_Of_Screen; ------------------------------------------------------------------------------ function X_Display_Of_Screen (Screen : X_Screen) return X_Display is begin return Screen.Display; end X_Display_Of_Screen; ------------------------------------------------------------------------------ function X_Does_Backing_Store (Screen : X_Screen) return X_Backing_Store_Hint is begin return Screen.Backing_Store; end X_Does_Backing_Store; ------------------------------------------------------------------------------ function X_Does_Save_Unders (Screen : X_Screen) return Boolean is begin return Screen.Save_Unders; end X_Does_Save_Unders; ------------------------------------------------------------------------------ function X_Event_Mask_Of_Screen (Screen : X_Screen) return X_Event_Mask is begin return Screen.Root_Input_Mask; end X_Event_Mask_Of_Screen; ------------------------------------------------------------------------------ function X_Height_Of_Screen (Screen : X_Screen) return U_Short is begin return Screen.Height; end X_Height_Of_Screen; ------------------------------------------------------------------------------ function X_Height_Mm_Of_Screen (Screen : X_Screen) return U_Short is begin return Screen.Mm_Height; end X_Height_Mm_Of_Screen; ------------------------------------------------------------------------------ function X_Max_Cmaps_Of_Screen (Screen : X_Screen) return U_Short is begin return Screen.Max_Maps; end X_Max_Cmaps_Of_Screen; ------------------------------------------------------------------------------ function X_Min_Cmaps_Of_Screen (Screen : X_Screen) return U_Short is begin return Screen.Min_Maps; end X_Min_Cmaps_Of_Screen; ------------------------------------------------------------------------------ function X_Planes_Of_Screen (Screen : X_Screen) return U_Char is begin return Screen.Root_Depth; end X_Planes_Of_Screen; ------------------------------------------------------------------------------ function X_Root_Window_Of_Screen (Screen : X_Screen) return X_Window is begin return Screen.Root; end X_Root_Window_Of_Screen; ------------------------------------------------------------------------------ function X_Screen_Number_Of_Screen (Screen : X_Screen) return X_Screen_Number is begin for I in Screen.Display.Screens'Range loop if Screen = Screen.Display.Screens (I) then return I; end if; end loop; end X_Screen_Number_Of_Screen; ------------------------------------------------------------------------------ function X_White_Pixel_Of_Screen (Screen : X_Screen) return X_Pixel is begin return Screen.White_Pixel; end X_White_Pixel_Of_Screen; ------------------------------------------------------------------------------ function X_Width_Of_Screen (Screen : X_Screen) return U_Short is begin return Screen.Width; end X_Width_Of_Screen; ------------------------------------------------------------------------------ function X_Width_Mm_Of_Screen (Screen : X_Screen) return U_Short is begin return Screen.Mm_Width; end X_Width_Mm_Of_Screen; ------------------------------------------------------------------------------ function X_Visual_Id_From_Visual (Visual : X_Visual) return X_Visual_Id is begin return Visual.Visual_Id; end X_Visual_Id_From_Visual; ------------------------------------------------------------------------------ --\f begin X_Lib_Default_X_Alloc_Id := Proc_Var_X_Alloc_Id.From_Pv (Default_X_Alloc_Id); if X_Conn_Client_Prefix'Size /= 8 * 4 * 3 then raise X_Library_Confusion; end if; if X_Conn_Setup'Size /= 8 * 4 * 8 then raise X_Library_Confusion; end if; if X_Conn_Setup_Prefix'Size /= 8 * 4 * 2 then raise X_Library_Confusion; end if; if X_Depths'Size /= 8 * 4 * 2 then raise X_Library_Confusion; end if; if X_Pixmap_Format'Size /= 8 * 4 * 2 then raise X_Library_Confusion; end if; if X_Visual_Type'Size /= 8 * 4 * 6 then raise X_Library_Confusion; end if; if X_Window_Root'Size /= 8 * 4 * 10 then raise X_Library_Confusion; end if; end Xlbp_Display;