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: 36402 (0x8e32) Types: TextFile Names: »B«
└─⟦85b835f43⟧ Bits:30000549 8mm tape, Rational 1000, Xlib rev 6.00 └─ ⟦0c20f784e⟧ »DATA« └─⟦1abbe589f⟧ └─⟦059497ac5⟧ └─⟦this⟧
with Xlbt_Arithmetic; use Xlbt_Arithmetic; with Xlbt_Basic; use Xlbt_Basic; with Xlbt_Color; use Xlbt_Color; with Xlbt_Exceptions; use Xlbt_Exceptions; with Xlbt_Misc; use Xlbt_Misc; with Xlbt_Reply; use Xlbt_Reply; with Xlbt_Request; use Xlbt_Request; with Xlbt_String; use Xlbt_String; with Xlbt_Window; use Xlbt_Window; with Xlbt_Visual; use Xlbt_Visual; 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; package body Xlbp_Color is ------------------------------------------------------------------------------ -- X Library Colors -- -- Xlbp_Color - Used to work with colors by name. ------------------------------------------------------------------------------ -- 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. ------------------------------------------------------------------------------ --\f procedure X_Alloc_Color (Display : X_Display; Colormap : X_Colormap; Color : in out X_Color; Status : out X_Status) is Rep : X_Reply_Contents; Succ : X_Status; begin ----Lock the display. Lock_Display (Display); begin ----Send the request. Put_X_Alloc_Color_Request (Display, (Kind => Alloc_Color, Length => X_Alloc_Color_Request'Size / 32, Pad => 0, Pad2 => 0, Colormap => Colormap, Red => Color.Red, Green => Color.Green, Blue => Color.Blue)); ----Get the reply. Get_Reply (Display => Display, Code => Alloc_Color, Reply => Rep, Extra => 0, Discard => True, Status => Succ); Status := Succ; if Succ /= Failed then Color.Pixel := Rep.Alloc_Color.Pixel; Color.Red := Rep.Alloc_Color.Red; Color.Green := Rep.Alloc_Color.Green; Color.Blue := Rep.Alloc_Color.Blue; end if; ----Catch unexpected exceptions. exception when others => Unlock_Display (Display); raise; end; ----Unlock; sync; return. Unlock_Display (Display); Sync_Handle (Display); end X_Alloc_Color; --\f procedure X_Alloc_Color_Cells (Display : X_Display; Colormap : X_Colormap; Contiguous : Boolean; Planes : out X_Plane_Mask_Array; Pixels : out X_Pixel_Array; Status : out X_Status) is Succ : X_Status; Rep : X_Reply_Contents; begin ----Lock the display. Lock_Display (Display); begin ----Send the request. Put_X_Alloc_Color_Cells_Request (Display, (Kind => Alloc_Color_Cells, Length => X_Alloc_Color_Cells_Request'Size / 32, Contiguous => From_Boolean (Contiguous), Colormap => Colormap, Colors => Pixels'Length, Planes => Planes'Length)); ----Get the reply. Get_Reply (Display => Display, Code => Alloc_Color_Cells, Reply => Rep, Extra => X_Pixel'Size / 8 * Pixels'Length + X_Plane_Mask'Size / 8 / 8 * Planes'Length, Discard => False, Status => Succ); Status := Succ; ----Return our results. if Succ /= Failed then Get_X_Pixel_Array (Display, Pixels); Get_X_Plane_Mask_Array (Display, Planes); else Pixels := (others => None_X_Pixel); Planes := (others => No_Planes); end if; ----Catch unexpected exceptions. exception when others => Unlock_Display (Display); raise; end; ----Unlock; sync; return. Unlock_Display (Display); Sync_Handle (Display); end X_Alloc_Color_Cells; --\f procedure X_Alloc_Color_Planes (Display : X_Display; Colormap : X_Colormap; Contiguous : Boolean; Pixels : out X_Pixel_Array; N_Reds : U_Short; N_Greens : U_Short; N_Blues : U_Short; R_Mask : out X_Red_Color_Mask; G_Mask : out X_Green_Color_Mask; B_Mask : out X_Blue_Color_Mask; Status : out X_Status) is Succ : X_Status; Rep : X_Reply_Contents; begin ----Lock the display. Lock_Display (Display); begin ----Send the request. Put_X_Alloc_Color_Planes_Request (Display, (Kind => Alloc_Color_Planes, Length => X_Alloc_Color_Planes_Request'Size / 32, Contiguous => From_Boolean (Contiguous), Colormap => Colormap, Colors => Pixels'Length, Red => N_Reds, Green => N_Greens, Blue => N_Blues)); ----Get the reply and the results. Get_Reply (Display => Display, Code => Alloc_Color_Planes, Reply => Rep, Extra => X_Pixel'Size / 8 * Pixels'Length, Discard => False, Status => Succ); Status := Succ; if Succ /= Failed then R_Mask := Rep.Alloc_Color_Planes.Red_Mask; G_Mask := Rep.Alloc_Color_Planes.Green_Mask; B_Mask := Rep.Alloc_Color_Planes.Blue_Mask; Get_X_Pixel_Array (Display, Pixels); else R_Mask := None_X_Color_Mask; G_Mask := None_X_Color_Mask; B_Mask := None_X_Color_Mask; end if; ----Catch unexpected exceptions. exception when others => Unlock_Display (Display); raise; end; ----Unlock; sync; return. Unlock_Display (Display); Sync_Handle (Display); end X_Alloc_Color_Planes; --\f procedure X_Alloc_Named_Color (Display : X_Display; Colormap : X_Colormap; Colorname : X_String; Visual_Color : out X_Color; Exact_Color : out X_Color; Status : out X_Status) is N_Bytes : U_Short; Rep : X_Reply_Contents; Succ : X_Status; begin ----Lock the display. Lock_Display (Display); begin ----Send the request. N_Bytes := Colorname'Length; Put_X_Alloc_Named_Color_Request (Display, (Kind => Alloc_Named_Color, Length => X_Alloc_Named_Color_Request'Size / 32 + (N_Bytes + 3) / 4, Pad => 0, Pad1 => 0, Pad2 => 0, N_Bytes => N_Bytes, Colormap => Colormap), S_Natural (N_Bytes)); ----Send the extra data. Put_X_String (Display, Colorname); ----Get the response. Get_Reply (Display => Display, Code => Alloc_Named_Color, Reply => Rep, Extra => 0, Discard => True, Status => Succ); if Succ = Failed then Visual_Color := None_X_Color; Exact_Color := None_X_Color; Status := Failed; Unlock_Display (Display); Sync_Handle (Display); return; end if; Exact_Color.Red := Rep.Alloc_Named_Color.Exact_Red; Exact_Color.Green := Rep.Alloc_Named_Color.Exact_Green; Exact_Color.Blue := Rep.Alloc_Named_Color.Exact_Blue; Visual_Color.Red := Rep.Alloc_Named_Color.Screen_Red; Visual_Color.Green := Rep.Alloc_Named_Color.Screen_Green; Visual_Color.Blue := Rep.Alloc_Named_Color.Screen_Blue; Visual_Color.Pixel := Rep.Alloc_Named_Color.Pixel; Exact_Color.Pixel := Rep.Alloc_Named_Color.Pixel; ----Catch unexpected exceptions. exception when others => Unlock_Display (Display); raise; end; ----Unlock; sync; return. Unlock_Display (Display); Sync_Handle (Display); Status := Successful; end X_Alloc_Named_Color; --\f procedure X_Free_Colors (Display : X_Display; Colormap : X_Colormap; Pixels : X_Pixel_Array; Planes : X_Plane_Mask) is N_Pixels : S_Natural := Pixels'Length; begin ----Lock the display. Lock_Display (Display); begin ----Send the request. Put_X_Free_Colors_Request (Display, (Kind => Free_Colors, Length => X_Free_Colors_Request'Size / 32 + U_Short (N_Pixels), Pad => 0, Colormap => Colormap, Plane_Mask => Planes), N_Pixels * 4); ----Send the pixels. Put_X_Pixel_Array (Display, Pixels); ----Catch unexpected exceptions. exception when others => Unlock_Display (Display); raise; end; ----Unlock; sync; return. Unlock_Display (Display); Sync_Handle (Display); end X_Free_Colors; --\f procedure X_Lookup_Color (Display : X_Display; Colormap : X_Colormap; Colorname : X_String; Visual_Color : out X_Color; Exact_Color : out X_Color; Status : out X_Status) is N : S_Natural; Reply : X_Reply_Contents; Succ : X_Status; begin ----Lock the display. N := Colorname'Length; Lock_Display (Display); begin ----Send the request. Put_X_Lookup_Color_Request (Display, (Kind => Lookup_Color, Length => X_Lookup_Color_Request'Size / 32 + U_Short (N + 3) / 4, Pad => 0, Pad1 => 0, Pad2 => 0, Colormap => Colormap, N_Bytes => U_Short (N)), N); ----Send the extra data. Put_X_String (Display, Colorname); ----Read the response. Get_Reply (Display => Display, Code => Lookup_Color, Reply => Reply, Extra => 0, Discard => True, Status => Succ); if Succ = Failed then Visual_Color := None_X_Color; Exact_Color := None_X_Color; Status := Failed; Unlock_Display (Display); Sync_Handle (Display); return; end if; Visual_Color.Red := Reply.Lookup_Color.Exact_Red; Visual_Color.Green := Reply.Lookup_Color.Exact_Green; Visual_Color.Blue := Reply.Lookup_Color.Exact_Blue; Exact_Color.Red := Reply.Lookup_Color.Screen_Red; Exact_Color.Green := Reply.Lookup_Color.Screen_Green; Exact_Color.Blue := Reply.Lookup_Color.Screen_Blue; ----Catch unexpected exceptions. exception when others => Unlock_Display (Display); raise; end; ----Unlock; sync; return. Status := Successful; Unlock_Display (Display); Sync_Handle (Display); end X_Lookup_Color; --\f procedure X_Parse_Color (Display : X_Display; Colormap : X_Colormap; Colorname : X_String; Color : out X_Color; Status : out X_Status) is J, N : S_Natural; R, G, B : U_Short; C : X_Character; begin if Colorname'Length = 0 then Color := None_X_Color; Status := Failed; end if; N := Colorname'Length; if Colorname (Colorname'First) /= '#' then declare Reply : X_Reply_Contents; Succ : X_Status; begin ----Lock the display. Lock_Display (Display); begin ----Send the request. Put_X_Lookup_Color_Request (Display, (Kind => Lookup_Color, Length => X_Lookup_Color_Request'Size / 32 + U_Short (N + 3) / 4, Pad => 0, Pad1 => 0, Pad2 => 0, Colormap => Colormap, N_Bytes => U_Short (N)), S_Natural (N)); ----Send the string. Put_X_String (Display, Colorname); ----Read the reply. Get_Reply (Display => Display, Code => Lookup_Color, Reply => Reply, Extra => 0, Discard => True, Status => Succ); if Succ = Failed then Color := None_X_Color; Status := Failed; Unlock_Display (Display); Sync_Handle (Display); return; end if; Color.Red := Reply.Lookup_Color.Exact_Red; Color.Green := Reply.Lookup_Color.Exact_Green; Color.Blue := Reply.Lookup_Color.Exact_Blue; Color.Flags := X_Color_Flags' (Do_Red | Do_Green | Do_Blue => True, others => False); ----Catch unexpected exceptions. exception when others => Unlock_Display (Display); raise; end; ----Unlock; sync; return. Unlock_Display (Display); Sync_Handle (Display); Status := Successful; return; end; end if; ----Parse the string. N := N - 1; if N /= 3 and then N /= 6 and then N /= 9 and then N /= 12 then Status := Failed; return; end if; N := N / 3; R := 0; G := 0; B := 0; loop R := G; G := B; B := 0; J := Colorname'First + 1; for I in reverse 1 .. N loop C := Colorname (J); J := J + 1; B := B * 2 ** 4; if (C >= '0' and then C <= '9') then B := B + X_Character'Pos (C) - X_Character'Pos ('0'); elsif (C >= 'A' and then C <= 'F') then B := B + X_Character'Pos (C) - (X_Character'Pos ('A') - 10); elsif (C >= 'a' and then C <= 'f') then B := B + X_Character'Pos (C) - (X_Character'Pos ('a') - 10); else Status := Failed; return; end if; end loop; if Colorname (J) = Nul then exit; end if; end loop; N := N * 2 ** 2; N := 16 - N; Color.Red := R * 2 ** Natural (N); Color.Green := G * 2 ** Natural (N); Color.Blue := B * 2 ** Natural (N); Color.Flags := X_Color_Flags'(Do_Red | Do_Green | Do_Blue => True, others => False); Status := Successful; return; end X_Parse_Color; --\f procedure X_Query_Color (Display : X_Display; Colormap : X_Colormap; Color : in out X_Color) is New_Color : X_Rgb; Rep : X_Reply_Contents; Succ : X_Status; begin ----Lock the display. Lock_Display (Display); begin ----Send the request. Put_X_Query_Colors_Request (Display, (Kind => Query_Colors, Length => X_Query_Colors_Request'Size / 32 + U_Short (X_Pixel'Size / 32), Pad => 0, Colormap => Colormap), X_Pixel'Size / 8); Put_X_Pixel (Display, Color.Pixel); ----Get the reply. Get_Reply (Display => Display, Code => Query_Colors, Reply => Rep, Extra => 0, Discard => False, Status => Succ); if Succ /= Failed then Get_X_Rgb (Display, New_Color); Color.Red := New_Color.Red; Color.Blue := New_Color.Blue; Color.Green := New_Color.Green; Color.Flags := X_Color_Flags' (Do_Red | Do_Green | Do_Blue => True, others => False); end if; ----Catch unexpected exceptions. exception when others => Unlock_Display (Display); raise; end; ----Unlock; sync; return. Unlock_Display (Display); Sync_Handle (Display); end X_Query_Color; --\f procedure X_Query_Colors (Display : X_Display; Colormap : X_Colormap; Colors : in out X_Color_Array) is Rep : X_Reply_Contents; N_Colors : S_Natural := Colors'Length; Succ : X_Status; begin ----Lock the display. Lock_Display (Display); begin ----Send the request. Put_X_Query_Colors_Request (Display, (Kind => Query_Colors, Length => X_Query_Colors_Request'Size / 32 + U_Short (N_Colors * X_Pixel'Size / 32), Pad => 0, Colormap => Colormap), N_Colors * X_Pixel'Size / 8); ----Put out the extra data. for I in Colors'Range loop Put_X_Pixel (Display, Colors (I).Pixel); end loop; ----Get the reply. Get_Reply (Display => Display, Code => Query_Colors, Reply => Rep, Extra => N_Colors * X_Rgb'Size / 8, Discard => False, Status => Succ); if Succ /= Failed then declare Color : X_Rgb_Array (1 .. N_Colors); begin Get_X_Rgb_Array (Display, Color); for I in Color'Range loop Colors (Colors'First - 1 + I).Red := Color (I).Red; Colors (Colors'First - 1 + I).Green := Color (I).Green; Colors (Colors'First - 1 + I).Blue := Color (I).Blue; Colors (Colors'First - 1 + I).Flags := X_Color_Flags'(Do_Red | Do_Green | Do_Blue => True, others => False); end loop; end; end if; ----Catch unexpected exceptions. exception when others => Unlock_Display (Display); raise; end; ----Unlock; sync; return. Unlock_Display (Display); Sync_Handle (Display); end X_Query_Colors; --\f procedure X_Set_Window_Colormap (Display : X_Display; Window : X_Window; Colormap : X_Colormap) is ------------------------------------------------------------------------------ -- X_Set_Window_Colormap ------------------------------------------------------------------------------ begin ----Lock the display. Lock_Display (Display); begin ----Put out the request Put_X_Change_Window_Attributes_Request (Display, (Kind => Change_Window_Attributes, Length => X_Change_Window_Attributes_Request'Size / 32 + 1, Pad => 0, Window => Window, Value_Mask => (Cw_Colormap => True, others => False)), 4); Put_X_Id (Display, Colormap.Id); ----Catch unexpected exceptions. exception when others => Unlock_Display (Display); raise; end; ----Unlock; sync; and return. Unlock_Display (Display); Sync_Handle (Display); end X_Set_Window_Colormap; --\f procedure X_Store_Color (Display : X_Display; Colormap : X_Colormap; Color : X_Color) is Citem : X_Color_Item; begin ----Lock the display. Lock_Display (Display); begin ----Send the request. Put_X_Store_Colors_Request (Display, (Kind => Store_Colors, Length => X_Store_Colors_Request'Size / 32 + X_Color_Item'Size / 32, Pad => 0, Colormap => Colormap), 4 * S_Natural (X_Color_Item'Size / 32)); ----Send the extra data. Citem.Pixel := Color.Pixel; Citem.Red := Color.Red; Citem.Green := Color.Green; Citem.Blue := Color.Blue; Citem.Flags := Color.Flags; -- do_red, do_green, do_blue Put_X_Color_Item (Display, Citem); ----Catch unexpected exceptions. exception when others => Unlock_Display (Display); raise; end; ----Unlock; sync; return. Unlock_Display (Display); Sync_Handle (Display); end X_Store_Color; --\f procedure X_Store_Colors (Display : X_Display; Colormap : X_Colormap; Colors : X_Color_Array) is N_Colors : S_Natural := Colors'Length; Citem : X_Color_Item; begin ----Lock the display. Lock_Display (Display); begin ----Send the request. Put_X_Store_Colors_Request (Display, (Kind => Store_Colors, Length => X_Store_Colors_Request'Size / 32 + U_Short (N_Colors) * X_Color_Item'Size / 32, Pad => 0, Colormap => Colormap), N_Colors * S_Natural (X_Color_Item'Size / 32) * 4); ----Send the extra data. for I in Colors'Range loop Citem.Pixel := Colors (I).Pixel; Citem.Red := Colors (I).Red; Citem.Green := Colors (I).Green; Citem.Blue := Colors (I).Blue; Citem.Flags := Colors (I).Flags; Put_X_Color_Item (Display, Citem); end loop; ----Catch unexpected exceptions. exception when others => Unlock_Display (Display); raise; end; ----Unlock; sync; return. Unlock_Display (Display); Sync_Handle (Display); end X_Store_Colors; --\f procedure X_Store_Named_Color (Display : X_Display; Colormap : X_Colormap; Name : X_String; Pixel : X_Pixel; Flags : X_Color_Flags) is N_Bytes : U_Short := Name'Length; begin ----Lock the display. Lock_Display (Display); begin ----Send the request. Put_X_Store_Named_Color_Request (Display, (Kind => Store_Named_Color, Length => X_Store_Named_Color_Request'Size / 32 + (N_Bytes + 3) / 4, Pad1 => 0, Pad2 => 0, Colormap => Colormap, Flags => Flags, Pixel => Pixel, N_Bytes => N_Bytes), S_Natural (N_Bytes)); ----Send the name. Put_X_String (Display, Name); ----Catch unexpected exceptions. exception when others => Unlock_Display (Display); raise; end; ----Unlock; sync; return. Unlock_Display (Display); Sync_Handle (Display); end X_Store_Named_Color; --\f function X_Copy_Colormap_And_Free (Display : X_Display; Source_Colormap : X_Colormap) return X_Colormap is Mid : X_Colormap; begin ----Lock the display. Lock_Display (Display); begin ----Allocate a new ID and send the request. Mid := (Id => Internal_X_Alloc_Id (Display)); Put_X_Copy_Colormap_And_Free_Request (Display, (Kind => Copy_Colormap_And_Free, Length => X_Copy_Colormap_And_Free_Request'Size / 32, Pad => 0, Mid => Mid, Src_Colormap => Source_Colormap)); ----Catch unexpected exceptions. exception when others => Unlock_Display (Display); raise; end; ----Unlock; sync; return new colormap. Unlock_Display (Display); Sync_Handle (Display); return Mid; end X_Copy_Colormap_And_Free; --\f function X_Create_Colormap (Display : X_Display; Window : X_Window; Visual : X_Visual; Allocate : X_Colormap_Alloc) return X_Colormap is Mid : X_Colormap; Vid : X_Visual_Id := Copy_From_Parent_Visual_Id; begin ----Lock the display. Lock_Display (Display); begin ----Allocate a new ID and send the request. Mid := (Id => Internal_X_Alloc_Id (Display)); if Visual /= None_X_Visual then Vid := Visual.Visual_Id; end if; Put_X_Create_Colormap_Request (Display, (Kind => Create_Colormap, Length => X_Create_Colormap_Request'Size / 32, Window => Window, Mid => Mid, Alloc => Allocate, Visual => Vid)); ----Catch unexpected exceptions. exception when others => Unlock_Display (Display); raise; end; ----Unlock; sync; return new colormap. Unlock_Display (Display); Sync_Handle (Display); return Mid; end X_Create_Colormap; --\f procedure X_Free_Colormap (Display : X_Display; Colormap : in out X_Colormap) is begin ----Lock the display. Lock_Display (Display); begin ----Send the request. Put_X_Free_Colormap_Request (Display, (Kind => Free_Colormap, Length => X_Free_Colormap_Request'Size / 32, Pad => 0, Id => Colormap)); Colormap := None_X_Colormap; ----Catch unexpected exceptions. exception when others => Unlock_Display (Display); raise; end; ----Unlock; sync; return new colormap. Unlock_Display (Display); Sync_Handle (Display); end X_Free_Colormap; --\f procedure X_Install_Colormap (Display : X_Display; Colormap : X_Colormap) is ------------------------------------------------------------------------------ -- X_Install_Colormap ------------------------------------------------------------------------------ begin ----Lock the display. Lock_Display (Display); begin ----Send the request. Put_X_Install_Colormap_Request (Display, (Kind => Install_Colormap, Length => X_Install_Colormap_Request'Size / 32, Pad => 0, Id => Colormap)); ----Catch unexpected exceptions. exception when others => Unlock_Display (Display); raise; end; ----Unlock the display; sync up; and return. Unlock_Display (Display); Sync_Handle (Display); end X_Install_Colormap; --\f function X_List_Installed_Colormaps (Display : X_Display; Win : X_Window) return X_Colormap_List is ------------------------------------------------------------------------------ -- X_List_Installed_Colormaps ------------------------------------------------------------------------------ Rep : X_Reply_Contents; Succ : X_Status; begin ----Lock the display. Lock_Display (Display); begin ----Send the request. Put_X_List_Installed_Colormaps_Request (Display, (Kind => List_Installed_Colormaps, Length => X_List_Installed_Colormaps_Request'Size / 32, Pad => 0, Id => Win)); ----Read the reply header. Get_Reply (Display => Display, Code => List_Installed_Colormaps, Reply => Rep, Extra => 0, Discard => False, Status => Succ); ----If the request failed then equate that with no-colormaps; return null. if Succ = Failed then Unlock_Display (Display); Sync_Handle (Display); return None_X_Colormap_List; end if; ----Read in the Colormap array. Read in the correct number of bytes and then -- do the unchecked conversion. Yes, the dynamically created subtype is -- crucial. declare Colormap : X_Colormap_List; Length : S_Natural := S_Natural (Rep.List_Installed_Colormaps.N_Colormaps); begin begin Colormap := new X_Colormap_Array (1 .. Length); exception when others => Eat_Raw_Data (Display, Length * (X_Colormap'Size / 8)); raise; end; Get_X_Colormap_Array (Display, Colormap.all); Unlock_Display (Display); Sync_Handle (Display); return Colormap; exception when others => Free_X_Colormap_List (Colormap); raise; end; ----Catch unexpected exceptions. exception when others => Unlock_Display (Display); raise; end; end X_List_Installed_Colormaps; --\f procedure X_Uninstall_Colormap (Display : X_Display; Colormap : X_Colormap) is ------------------------------------------------------------------------------ -- X_Uninstall_Colormap ------------------------------------------------------------------------------ begin ----Lock the display. Lock_Display (Display); begin ----Send the request. Put_X_Uninstall_Colormap_Request (Display, (Kind => Uninstall_Colormap, Length => X_Uninstall_Colormap_Request'Size / 32, Pad => 0, Id => Colormap)); ----Catch unexpected exceptions. exception when others => Unlock_Display (Display); raise; end; ----Unlock the display; sync up; and return. Unlock_Display (Display); Sync_Handle (Display); end X_Uninstall_Colormap; --\f begin if X_Rgb'Size rem 32 /= 0 then raise X_Library_Confusion; end if; end Xlbp_Color;