DataMuseum.dk

Presents historical artifacts from the history of:

Rational R1000/400

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Rational R1000/400

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦3c11d44dd⟧ Ada Source

    Length: 39936 (0x9c00)
    Types: Ada Source
    Notes: 03_class, FILE, R1k_Segment, e3_tag, package Xlbt_Display3, seg_004fa8

Derivation

└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
    └─ ⟦5a81ac88f⟧ »Space Info Vol 1« 
        └─⟦this⟧ 

E3 Source Code



with Unchecked_Deallocation;

with Xlbt_Arithmetic;  
use Xlbt_Arithmetic;  
with Xlbt_Basic3;  
use Xlbt_Basic3;  
with Xlbt_Event3;  
use Xlbt_Event3;  
with Xlbt_Extension3;  
use Xlbt_Extension3;  
with Xlbt_Extension4;  
use Xlbt_Extension4;  
with Xlbt_Gc3;  
use Xlbt_Gc3;  
with Xlbt_Graphics3;  
use Xlbt_Graphics3;  
with Xlbt_Image;  
use Xlbt_Image;  
with Xlbt_Key3;  
use Xlbt_Key3;  
with Xlbt_Proc_Var;  
use Xlbt_Proc_Var;  
with Xlbt_Request3;  
use Xlbt_Request3;  
with Xlbt_String;  
use Xlbt_String;  
with Xlbt_Window4;  
use Xlbt_Window4;  
with Xlbt_Univ_Ptr;  
use Xlbt_Univ_Ptr;  
with Xlbt_Visual;  
use Xlbt_Visual;

with Xlbmt_Network_Types;  
use Xlbmt_Network_Types;  
with Xlbmt_Parameters;  
use Xlbmt_Parameters;

package Xlbt_Display3 is
------------------------------------------------------------------------------
-- X Library Display - Full Interface
--
-- Xlbt_Display3 - Types that need not be imported directly into most programs.
------------------------------------------------------------------------------
-- 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.
------------------------------------------------------------------------------

--\x0c
    ------------------------------------------------------------------------------
-- X_Display
------------------------------------------------------------------------------

    type X_Display_Rec;  
    type X_Display is access X_Display_Rec;

    type X_Display_Array is array (S_Natural range <>) of X_Display;  
    type X_Display_List  is access X_Display_Array;

------------------------------------------------------------------------------
-- X_Depth; contains information for each possible display depth.
------------------------------------------------------------------------------

    type X_Depth_Rec is  
        record  
            Depth   : U_Char := 0; -- this depth (Z) of the depth
            Visuals :              -- the visuals possible with this depth
               X_Visual_List := null;  
        end record;

    type X_Depth       is access X_Depth_Rec;  
    type X_Depth_Array is array (U_Char range <>) of X_Depth_Rec;  
    type X_Depth_List  is access X_Depth_Array;

--/ if Pack then
--//     pragma Pack (X_Depth_Array);
--/ end if;
--/ if Enable_Deallocation then
    pragma Enable_Deallocation (X_Depth);  
    pragma Enable_Deallocation (X_Depth_List);
--/ end if;

    None_X_Depth      : constant X_Depth      := null;  
    None_X_Depth_List : constant X_Depth_List := null;

    procedure Free_X_Depth      is new Unchecked_Deallocation (X_Depth_Rec,  
                                                               X_Depth);  
    procedure Free_X_Depth_List is new Unchecked_Deallocation (X_Depth_Array,  
                                                               X_Depth_List);

------------------------------------------------------------------------------
-- X_Display_Atoms - Cached atom values; used for ICCCM interactions.
------------------------------------------------------------------------------

    type X_Display_Atoms is  
        record  
            Text                : X_Atom := None_X_Atom;  
            Wm_Change_State     : X_Atom := None_X_Atom;  
            Wm_Colormap_Windows : X_Atom := None_X_Atom;  
            Wm_Protocols        : X_Atom := None_X_Atom;  
            Wm_Save_Yourself    : X_Atom := None_X_Atom;  
            Wm_State            : X_Atom := None_X_Atom;  
        end record;

------------------------------------------------------------------------------
-- X_Display_Flags - Internal flags indicating important state changes
------------------------------------------------------------------------------

    type X_Display_Flags_Index is  
       (Xlib_Display_Io_Error,      -- An I/O error occurred on the network
        Xlib_Display_Closing);      -- The display connection is closing down

    type X_Display_Flags is array (X_Display_Flags_Index) of Boolean;

    None_X_Display_Flags : constant X_Display_Flags := (others => False);

------------------------------------------------------------------------------
-- X_Error_String - Error Reporting Strings
------------------------------------------------------------------------------

    type X_Error_String is  
        record  
            Ary : X_String (1 .. 128) := (others => Xlbt_String.Nul);  
        end record;
    ----We return an indication of errors via strings of this type.

    procedure Err (Destination : out X_Error_String;  
                   Source      :     X_String);
    ----We use this routine to assign error strings.

    function Err (Source : X_Error_String) return X_String;
    ----We use this function to read out error strings.

------------------------------------------------------------------------------
-- Events queues - Events are queued within a display until they are requested
--
-- A queued Event always has an Event.Kind to uniquely identify what kind of
-- event it is.  The Display entry is always a pointer to the display the event
-- was read from.  The Window entry is nearly always a window of one type or
-- another, carefully selected to be useful to toolkit dispatchers.
------------------------------------------------------------------------------

    type X_Event (Kind : X_Event_Code := Error_Event) is  
        record  
            Display    : X_Display;         -- Event came from this display
            Serial     : S_Long := 0;       -- # of last request done by server
            Send_Event : Boolean := False;  -- True if sent by Client not Server
            Window     : X_Window := None_X_Window; -- Window the event was
                                                    --  queued from/for/about.
            case Kind is  
                when Key_Press | Key_Release =>  
                    Key : X_Key_Event;

                when Button_Press | Button_Release =>  
                    Button : X_Button_Event;

                when Motion_Notify =>  
                    Motion : X_Motion_Notify_Event;

                when Enter_Notify | Leave_Notify =>  
                    Enter_Leave : X_Enter_Leave_Event;

                when Focus_In | Focus_Out =>  
                    Focus : X_Focus_Event;

                when Keymap_Notify =>  
                    Keymap : X_Keymap_Notify_Event;

                when Expose =>  
                    Expose : X_Expose_Event;

                when Graphics_Expose =>  
                    Graphics_Expose : X_Graphics_Expose_Event;

                when No_Expose =>  
                    No_Expose : X_No_Expose_Event;

                when Visibility_Notify =>  
                    Visibility : X_Visibility_Notify_Event;

                when Create_Notify =>  
                    Create : X_Create_Notify_Event;

                when Destroy_Notify =>  
                    Destroy : X_Destroy_Notify_Event;

                when Unmap_Notify =>  
                    Unmap : X_Unmap_Notify_Event;

                when Map_Notify =>  
                    Map : X_Map_Notify_Event;

                when Map_Request =>  
                    Map_Request : X_Map_Request_Event;

                when Reparent_Notify =>  
                    Reparent : X_Reparent_Notify_Event;

                when Configure_Notify =>  
                    Configure : X_Configure_Notify_Event;

                when Configure_Request =>  
                    Configure_Request : X_Configure_Request_Event;

                when Gravity_Notify =>  
                    Gravity : X_Gravity_Notify_Event;

                when Resize_Request =>  
                    Resize_Request : X_Resize_Request_Event;

                when Circulate_Notify =>  
                    Circulate : X_Circulate_Notify_Event;

                when Circulate_Request =>  
                    Circulate_Request : X_Circulate_Request_Event;

                when Property_Notify =>  
                    Property : X_Property_Notify_Event;

                when Selection_Clear =>  
                    Selection_Clear : X_Selection_Clear_Event;

                when Selection_Notify =>  
                    Selection : X_Selection_Notify_Event;

                when Selection_Request =>  
                    Selection_Request : X_Selection_Request_Event;

                when Colormap_Notify =>  
                    Colormap : X_Colormap_Notify_Event;

                when Client_Message =>  
                    Client : X_Client_Message_Event;

                when Mapping_Notify =>  
                    Mapping : X_Mapping_Notify_Event;

                when others =>
                    ----Anything must be the responsibility of some extension.
                    Extension : X_Extension_Event;  
            end case;  
        end record;
--
    None_X_Event : constant X_Event := (Error_Event, null, 0,  
                                        False, None_X_Window,  
                                        (Universal_Pointer_Event,  
                                         (Error_Event, 0, 0,  
                                          None_X_Universal_Pointer,  
                                          None_X_Procedure_Variable)));

------------------------------------------------------------------------------
-- X_Display Event Dispatch Vectors
------------------------------------------------------------------------------

    type X_Event_Wire_Array is  
       array (X_Event_Code) of X_Procedure_Variable;
    ----Array of X_Event_Wire_Type;

    type X_Wire_Event_Array is  
       array (X_Event_Code) of X_Procedure_Variable;
    ----Array of X_Wire_Event_Type;

------------------------------------------------------------------------------
-- X_Reply_S_Natural - Size of a reply based upon the request that got it.
------------------------------------------------------------------------------

    type X_Reply_S_Natural is  
       array (X_Request_Code range Invalid_Request .. No_Operation) of  
          X_Raw_Data_Index;

------------------------------------------------------------------------------
-- X_Last_Request - X_Display Last_Request
--
-- Some requests don't go fully into the output buffer until a dissimilar
-- request comes along; one that cannot be merged with the pending request.
-- This is the buffer record for that merging.  The requests wait in this
-- structure until a dissimilar request comes along; at that point the
-- request is placed into the buffer then then the new request is processed.
------------------------------------------------------------------------------

    type X_Last_Request is
        record

            Kind             : X_Request_Code := Invalid_Request;  
            Request_Position : X_Raw_Data_Index;
            Spaces_Left      : S_Natural;

            Fill_Poly_Req           : X_Fill_Poly_Request;
            Poly_Fill_Arc_Req       : X_Poly_Fill_Arc_Request;
            Poly_Line_Req           : X_Poly_Line_Request;
            Poly_Point_Req          : X_Poly_Point_Request;
            Poly_Rectangle_Req      : X_Poly_Rectangle_Request;
            Poly_Fill_Rectangle_Req : X_Poly_Fill_Rectangle_Request;
            Poly_Segment_Req        : X_Poly_Segment_Request;

            ----Extensions create their own Poly_* type of requests.
            Ext_Data  : X_Universal_Pointer;    -- Extension's request
            Ext_Flush : X_Procedure_Variable;   -- Extension's flush
        end record;

------------------------------------------------------------------------------
-- X_Reconfigure_Wm_Window
------------------------------------------------------------------------------

    type X_Reconfigure_Wm_Window is  
        record  
            Sequence_Number : S_Long               := 0;  
            Old_Handler     : X_Procedure_Variable := None_X_Procedure_Variable;  
            Succeeded       : Boolean              := False;  
        end record;

------------------------------------------------------------------------------
-- X_Queued_Event data type for use in input queueing.
------------------------------------------------------------------------------

    type X_Queued_Event_Rec;  
    type X_Queued_Event is access X_Queued_Event_Rec;

    type X_Queued_Event_Rec is  
        record  
            Next  : X_Queued_Event;  
            Event : X_Event;  
        end record;

--/ if Enable_Deallocation then
    pragma Enable_Deallocation (X_Queued_Event);
--/ end if;

    None_X_Queued_Event : constant X_Queued_Event := null;

    procedure Free_X_Queued_Event is  
       new Unchecked_Deallocation (X_Queued_Event_Rec,  
                                   X_Queued_Event);

------------------------------------------------------------------------------
-- X_Screen - Information about the screen.
------------------------------------------------------------------------------

    type X_Screen_Rec is  
        record  
            Display : X_Display := null;
            ----Back pointer to display structure
            Ext_Data : X_Ext_Data := null;
            ----Hook for extension to hang data
            Root : X_Window := None_X_Window;
            ----Root window ID.
            Width : U_Short := 0;
            ----Width and height of screen
            Height : U_Short := 0;
            ----Width and height of screen
            Mm_Width : U_Short := 0;
            ----Width and height in millimeters
            Mm_Height : U_Short := 0;
            ----Width and height in millimeters
            Depths : X_Depth_List := null;
            ----List of supported depths for the screen
            Root_Depth : U_Char := 0;
            ----Bits per pixel
            Root_Visual : X_Visual := null;
            ----Root visual
            Default_Gc : X_Gc := null;
            ----GC for the root root visual
            Default_Colormap : X_Colormap := None_X_Colormap;
            ----Default color map
            White_Pixel : X_Pixel := None_X_Pixel;
            ----White pixel value
            Black_Pixel : X_Pixel := None_X_Pixel;
            ----Black pixel value
            Max_Maps : U_Short := 0;
            ----Max color map
            Min_Maps : U_Short := 0;
            ----Min color maps
            Backing_Store : X_Backing_Store_Hint := None_X_Backing_Store_Hint;
            ----Never, When_Mapped, Always
            Save_Unders : Boolean := False;
            ----Do we have them available?
            Root_Input_Mask : X_Event_Mask := None_X_Event_Mask;
            ----Initial root input mask
        end record;

    type X_Screen       is access X_Screen_Rec;  
    type X_Screen_Array is array (X_Screen_Number range <>) of X_Screen;  
    type X_Screen_List  is access X_Screen_Array;

--/ if Pack then
--//     pragma Pack (X_Screen_Array);
--/ end if;
--/ if Enable_Deallocation then
    pragma Enable_Deallocation (X_Screen);  
    pragma Enable_Deallocation (X_Screen_List);
--/ end if;

    None_X_Screen      : constant X_Screen      := null;  
    None_X_Screen_List : constant X_Screen_List := null;

    procedure Free_X_Screen      is new Unchecked_Deallocation (X_Screen_Rec,  
                                                                X_Screen);  
    procedure Free_X_Screen_List is new Unchecked_Deallocation (X_Screen_Array,  
                                                                X_Screen_List);

------------------------------------------------------------------------------
-- X_Screen_Format - describes Z_Format data the screen will understand.
------------------------------------------------------------------------------

    type X_Screen_Format_Rec is  
        record  
            Ext_Data       : X_Ext_Data;    -- hook for extension to hang data
            Depth          : U_Char;        -- depth of this image format
            Bits_Per_Pixel : U_Char;        -- bits/pixel at this depth
            Scan_Line_Pad  : U_Char;        -- scan lines are padded to this
                                            --  multiple
        end record;

    type X_Screen_Format       is access X_Screen_Format_Rec;  
    type X_Screen_Format_Array is array (U_Char range <>) of X_Screen_Format;  
    type X_Screen_Format_List  is access X_Screen_Format_Array;

--/ if Pack then
--//     pragma Pack (X_Screen_Format_Array);
--/ end if;
--/ if Enable_Deallocation then
    pragma Enable_Deallocation (X_Screen_Format);  
    pragma Enable_Deallocation (X_Screen_Format_List);
--/ end if;

    None_X_Screen_Format      : constant X_Screen_Format      := null;  
    None_X_Screen_Format_List : constant X_Screen_Format_List := null;

    procedure Free_X_Screen_Format      is  
       new Unchecked_Deallocation (X_Screen_Format_Rec,  
                                   X_Screen_Format);  
    procedure Free_X_Screen_Format_List is  
       new Unchecked_Deallocation (X_Screen_Format_Array,  
                                   X_Screen_Format_List);

--\x0c
    ------------------------------------------------------------------------------
-- X_Display
------------------------------------------------------------------------------

    type X_Display_Rec is  
        record

            -----------------------------------------------------------------
            -- Misc. Info about display - obtained from server at startup
            -----------------------------------------------------------------

            Atoms : X_Display_Atoms;
            ----ICCCM information, version 1.
            Bitmap_Unit : U_Char := 0;
            ----Padding and data requirements
            Bitmap_Pad : U_Char := 0;
            ----Padding requirements on bitmaps
            Bitmap_Bit_Order : X_Byte_Bit_Order := None_X_Byte_Bit_Order;
            ----least significant first or most significant first
            Byte_Order : X_Byte_Bit_Order := None_X_Byte_Bit_Order;
            ----Screen byte order, Lsb/Msb_First
            Cursor_Font : X_Font := None_X_Font;
            ----The Cursor font for this display.
            Default_Screen : X_Screen_Number := 0;
            ----Default screen for operations
            Motion_Buffer : S_Long := 0;
            ----Size of motion buffer
            Pixmap_Format : X_Screen_Format_List := None_X_Screen_Format_List;
            ----Pixmap format list
            Proto_Major_Version : U_Short := 0;
            ----Major version of server's X protocol
            Proto_Minor_Version : U_Short := 0;
            ----Minor version of servers X protocol
            Reconfigure_Wm_Window : X_Reconfigure_Wm_Window;
            ----ICCCM information, version 1.
            Release : S_Long := 0;
            ----Release of the server
            Resource_Base : X_Id := None_X_Id;
            ---Resource ID base
            Resource_Mask : X_Id := None_X_Id;
            ----Resource ID mask bits
            Resource_Id : X_Id := None_X_Id;
            ----Allocator current ID
            Resource_Incr : S_Long := 0;
            ----Used to increment Resource_Id
            Resource_Alloc : X_Procedure_Variable := None_X_Procedure_Variable;
            -- Resource_Alloc : X_Alloc_Id.Pv ----Allocator function
            Screens : X_Screen_List := null;
            ----Pointer to list of screens
            Total_Visuals : S_Natural := 0;
            ----# Visuals in depths in screens
            Vendor : X_String_Pointer := null;
            ----Vendor of the server hardware
            Vnumber : S_Long := 0;
            ----Xlib's X protocol version number

            -----------------------------------------------------------------
            -- Error and other controls.
            -----------------------------------------------------------------

            Report_Error : X_Procedure_Variable := None_X_Procedure_Variable;
            ----X_Report_Error.Pv
            ----Report_Error is the lowest level error reporter, and is
            --  called by all default higher level reporters.  This should
            --  not be assumed to be a fatal condition.  X_Lib.Report_Error
            --  is used if this is None.

            Error : X_Procedure_Variable := None_X_Procedure_Variable;
            ----X_Error_Function.Pv
            ----Error will be called whenever an error event is received.
            --  This is not assumed to be a fatal condition, i.e., it is
            --  acceptable for this procedure to return.  However, Error
            --  should NOT perform any operations (directly or indirectly)
            --  on the DISPLAY.  X_Lib.Error is used if this is None.

            Io_Error : X_Procedure_Variable := None_X_Procedure_Variable;
            ----X_Io_Error_Function.Pv
            ----IO_Error will be called if any sort of network error occurs.
            --  This is assumed to be a fatal condition, i.e., IO_Error should
            --  not return.  It should abort the program or raise an exception.
            --  X_Lib.Io_Error is used if this is None.

            -----------------------------------------------------------------
            -- Key translations
            -----------------------------------------------------------------

            Current : X_Window := None_X_Window;
            ----For use internally for Keymap
            Key_Bindings : X_Key_Trans := None_X_Key_Trans;
            ----For X_Lookup_String
            Key_Syms : X_Key_Sym_List_2d := null;
            ----This server's key symbols
            --  C's Keys_Per_Mod field is now simply Key_Syms'Length(2)
            Lock_Meaning : X_Key_Sym := No_Symbol;
            ----For X_Lookup_String
            Mode_Switch : X_Key_Button_Mask := None_X_Key_Button_Mask;
            ----Keyboard group modifiers

            -----Max/Min_Keycode are also Key_Syms'First(1)/'Last(1)
            Max_Keycode  : X_Key_Code        := 0;  -- maximum physical key code
            Min_Keycode  : X_Key_Code        := 0;  -- minimum physical key code
            Modifier_Map : X_Modifier_Keymap := null;
            ----This server's modifier keymap

            -----------------------------------------------------------------
            -- Databases
            -----------------------------------------------------------------

--/ if OLD_CONTEXT_MANAGER then
--//            Contexts : X_Universal_Pointer := None_X_Universal_Pointer;
--//            --  Always a X_Context_Hash_List.  This breaks type recursion.
--//            --  Context/Window pairs; initialized to nulls
--/ end if;
            Database : X_Universal_Pointer := None_X_Universal_Pointer;
            --  Always a X_Rm_Database.  This breaks type recursion.
            --  Resource database for this display/server
            X_Defaults : X_String_Pointer := None_X_String_Pointer;

            -----------------------------------------------------------------
            -- Extensions
            -----------------------------------------------------------------

            Ext_Data : X_Ext_Data := null;
            ----Hook for extension to hang data
            Ext_Number : X_Extension_Number := 0;
            ----Extension number on this display
            Ext_Procs : X_Extension := null;
            ----Extension procedures/data

            ------------------------------------------------------------------
            ----Events and Requests
            ------------------------------------------------------------------

            Head : X_Queued_Event := None_X_Queued_Event;
            ----Input Event queue.
            Tail : X_Queued_Event := None_X_Queued_Event;
            ----Input Event queue.
            Q_Len : S_Long := 0;
            ----Length of input Event queue
            Q_Free : X_Queued_Event := None_X_Queued_Event;
            ----Free events, ready for reuse.
            Q_Free_Len : S_Long := 0;
            ----Number of free events; always < X_Max_Q_Free.

            Request : S_Long := 0;
            ----Sequence number of last request.
            Last_Request_Read : S_Long := 0;
            ----Sequence number from the last event/error/reply received.
            Last_Request : X_Last_Request;
            ----Data of the last request made or an Invalid_Request
            Poly_Arc_Limit       : S_Natural;
            Poly_Point_Limit     : S_Natural;
            Poly_Rectangle_Limit : S_Natural;
            Poly_Segment_Limit   : S_Natural;
            ----Our self imposed limits on multiple-graphic requests.
            Max_Request_Size : U_Short := 0;
            ----Max # of 32 bit words in request

            Last_Error : X_Error_String;
            ----Latest error reported from XLib to application using this
            --  display
            Input : X_Buffer (X_Input_Buffer_Size);
            ----Input buffer;
            Output : X_Buffer (X_Output_Buffer_Size);
            ----Output buffer

            -----------------------------------------------------------------
            -- Display/Connection controls and data
            -----------------------------------------------------------------

            Display_Name : X_String_Pointer := null;
            --  connect
            ----"Host:display" string used on this
            Lock : X_Mutex;
            ----Is someone in a critical section?
            Network : X_Network_Connection;
            ----Network connection to server
            Flags : X_Display_Flags := None_X_Display_Flags;
            ----Internal connection flags.
            Synchandler : X_Procedure_Variable := None_X_Procedure_Variable;
            ----X_Synchandler_Type.Pv
            ----Synchronization handler

            ----The following vectors can be of fixed size because the protocol
            --  predefines how many codes are available.  While this could be
            --  done using the extension list, there may be MANY events
            --  processed, so a search through the extension list to find the
            --  right procedure for each event might be expensive if many
            --  extension events are being used.

            Event_Vec : X_Wire_Event_Array;
            ----Vector for wire to Event
            Wire_Vec : X_Event_Wire_Array;
            ----Vector for Event to wire
            Reply_Size : X_Reply_S_Natural;
            ----Size of a reply for a given request code.

            ------------------------------------------------------------------
            -- Other inter-object linkages
            ------------------------------------------------------------------

            Display_Num : X_Display_Number := None_X_Display_Number;
            ----The Unique to the Xlib number of this display.
            Next : X_Display := null;
            ----Next open Display on Xlib's list
        end record;

--/ if Enable_Deallocation then
    pragma Enable_Deallocation (X_Display);  
    pragma Enable_Deallocation (X_Display_List);
--/ end if;

    None_X_Display      : constant X_Display      := null;  
    None_X_Display_List : constant X_Display_List := null;
--
    procedure Free_X_Display_List is  
       new Unchecked_Deallocation (X_Display_Array,  
                                   X_Display_List);

--\x0c
end Xlbt_Display3;  

E3 Meta Data

    nblk1=26
    nid=0
    hdr6=4c
        [0x00] rec0=2c rec1=00 rec2=01 rec3=048
        [0x01] rec0=11 rec1=00 rec2=02 rec3=052
        [0x02] rec0=16 rec1=00 rec2=03 rec3=014
        [0x03] rec0=19 rec1=00 rec2=22 rec3=024
        [0x04] rec0=00 rec1=00 rec2=04 rec3=006
        [0x05] rec0=14 rec1=00 rec2=21 rec3=046
        [0x06] rec0=01 rec1=00 rec2=05 rec3=086
        [0x07] rec0=18 rec1=00 rec2=06 rec3=066
        [0x08] rec0=10 rec1=00 rec2=07 rec3=032
        [0x09] rec0=01 rec1=00 rec2=26 rec3=016
        [0x0a] rec0=1e rec1=00 rec2=08 rec3=016
        [0x0b] rec0=1d rec1=00 rec2=09 rec3=000
        [0x0c] rec0=1d rec1=00 rec2=0a rec3=00e
        [0x0d] rec0=15 rec1=00 rec2=0b rec3=064
        [0x0e] rec0=13 rec1=00 rec2=0c rec3=094
        [0x0f] rec0=17 rec1=00 rec2=0d rec3=020
        [0x10] rec0=01 rec1=00 rec2=25 rec3=068
        [0x11] rec0=1d rec1=00 rec2=0e rec3=022
        [0x12] rec0=00 rec1=00 rec2=1f rec3=04c
        [0x13] rec0=18 rec1=00 rec2=0f rec3=04c
        [0x14] rec0=17 rec1=00 rec2=10 rec3=01c
        [0x15] rec0=17 rec1=00 rec2=11 rec3=084
        [0x16] rec0=18 rec1=00 rec2=20 rec3=01e
        [0x17] rec0=01 rec1=00 rec2=12 rec3=002
        [0x18] rec0=17 rec1=00 rec2=13 rec3=04c
        [0x19] rec0=01 rec1=00 rec2=1e rec3=008
        [0x1a] rec0=13 rec1=00 rec2=14 rec3=008
        [0x1b] rec0=15 rec1=00 rec2=15 rec3=014
        [0x1c] rec0=12 rec1=00 rec2=16 rec3=04e
        [0x1d] rec0=13 rec1=00 rec2=17 rec3=048
        [0x1e] rec0=13 rec1=00 rec2=18 rec3=09c
        [0x1f] rec0=01 rec1=00 rec2=24 rec3=01c
        [0x20] rec0=14 rec1=00 rec2=19 rec3=090
        [0x21] rec0=16 rec1=00 rec2=1a rec3=056
        [0x22] rec0=01 rec1=00 rec2=23 rec3=00e
        [0x23] rec0=17 rec1=00 rec2=1b rec3=006
        [0x24] rec0=14 rec1=00 rec2=1c rec3=020
        [0x25] rec0=18 rec1=00 rec2=1d rec3=001
    tail 0x215009684819783e86b20 0x42a00088462063203