DataMuseum.dk

Presents historical artifacts from the history of:

Rational R1000/400 Tapes

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 Tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download
Index: ┃ B T

⟦92b9fd385⟧ TextFile

    Length: 26390 (0x6716)
    Types: TextFile
    Names: »B«

Derivation

└─⟦85b835f43⟧ Bits:30000549 8mm tape, Rational 1000, Xlib rev 6.00
    └─ ⟦0c20f784e⟧ »DATA« 
        └─⟦1abbe589f⟧ 
            └─⟦059497ac5⟧ 
                └─⟦this⟧ 

TextFile

--/ if R1000 then
with Unchecked_Conversions;
--/ elsif Cdf_Hpux then
--// with Unchecked_Conversion;
--/ elsif TeleGen2 and then Unix then
--// with System;
--/ end if;
with Xlbt_Arithmetic;  
use Xlbt_Arithmetic;


package body Xlbmp_Generic_Converters is
------------------------------------------------------------------------------
-- X Library Machine Types
--
-- Xlbmp_Generic_Converters - Machine/Compiler dependent conversions to/from
--  system data types.
------------------------------------------------------------------------------
-- Copyright 1989 - 1991 by Rational, Santa Clara, California.
--
--                  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 name of Rational not be used in
-- advertising or publicity pertaining to distribution of the software
-- without specific, written prior permission.
--
-- Rational disclaims all warranties with regard to this software, including
-- all implied warranties of merchantability and fitness, in no event shall
-- 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.
------------------------------------------------------------------------------

--/ if TeleGen2 and then Unix then
--//     procedure Xlbmt_Mem_Copy (To    : System.Address;
--//                               From  : System.Address;
--//                               Bytes : S_Long);
--//     pragma Interface (Assembler, Xlbmt_Mem_Copy);
--//     pragma Linkname (Xlbmt_Mem_Copy, "_Xlbmt_Mem_Copy");
--/ end if;

--\f

------------------------------------------------------------------------------
-- Convert a Discrete type.
------------------------------------------------------------------------------

--/ if R1000 then

    procedure Convert_Discrete_To_Raw (Raw  : out X_Raw_Data_Array;  
                                       Orig :     Original) is  
        function To_Raw is  
           new Unchecked_Conversions.Convert_To_Byte_String (Original);  
    begin

        Raw := To_Raw (Orig);

    end Convert_Discrete_To_Raw;

--/ elsif TeleGen2 and then Unix then
--//
--//     procedure Convert_Discrete_To_Raw (Raw  : out X_Raw_Data_Array;
--//                                        Orig :     Original) is
--//     begin
--//
--/ if DEBUG then
--//         if Original'Size / X_Raw_Data'Size /= Raw'Length then
--//             raise Constraint_Error;
--//         end if;
--/ end if;
--//         if Raw'Length > 0 then
--//             if Original'Size < 32 then
--//                 declare
--//                     ----TeleGen2 places "small" things into "large" places on
--//                     --  the stack and 'Address gives you the address of the
--//                     --  place and not the address of the data!
--//                     type A_Record is
--//                         record
--//                             A : Original;
--//                         end record;
--//                     A : A_Record;
--//                 begin
--//                     A.A := Orig;
--//                     Xlbmt_Mem_Copy (Raw (Raw'First)'Address,
--//                                     A.A'Address, Raw'Length);
--//                 end;
--//             else
--//                 Xlbmt_Mem_Copy (Raw (Raw'First)'Address, Orig'Address,
--//                                 Raw'Length);
--//             end if;
--//         end if;
--//
--//     end Convert_Discrete_To_Raw;
--//
--/ else
--//
--// ----Note: This is "generic" code for any Ada compiler;
--// --  it may not work for you.  Do not modify this code.  Copy it into
--// --  a new ELSE arm aimed at your particular taget.  It *does* work for
--// --  some targets.
--//
--//     procedure Convert_Discrete_To_Raw (Raw  : out X_Raw_Data_Array;
--//                                        Orig :     Original) is
--//         subtype Rdt is X_Raw_Data_Array (Raw'Range);
--//         function To_Raw is new Unchecked_Conversion (Original, Rdt);
--//     begin
--//
--/ if DEBUG then
--//         if Original'Size / X_Raw_Data'Size /= Raw'Length then
--//             raise Constraint_Error;
--//         end if;
--/ end if;
--//         Raw := To_Raw (Orig);
--//
--//     end Convert_Discrete_To_Raw;
--//
--/ end if;

--\f

------------------------------------------------------------------------------
-- Convert a Private type.
------------------------------------------------------------------------------

--/ if R1000 then

    procedure Convert_Private_To_Raw (Raw  : out X_Raw_Data_Array;  
                                      Orig :     Original) is  
        function To_Raw is  
           new Unchecked_Conversions.Convert_To_Byte_String (Original);  
    begin  
        Raw := To_Raw (Orig);  
    end Convert_Private_To_Raw;

--/ elsif TeleGen2 and then Unix then
--//
--//     procedure Convert_Private_To_Raw (Raw  : out X_Raw_Data_Array;
--//                                       Orig :     Original) is
--//     begin
--//
--/ if DEBUG then
--//         if Original'Size / X_Raw_Data'Size /= Raw'Length then
--//             raise Constraint_Error;
--//         end if;
--/ end if;
--//         if Raw'Length > 0 then
--//             Xlbmt_Mem_Copy (Raw (Raw'First)'Address, Orig'Address,
--//                             Raw'Length);
--//         end if;
--//
--//     end Convert_Private_To_Raw;
--//
--/ else
--//
--// ----Note: This is "generic" code for any Ada compiler;
--// --  it may not work for you.  Do not modify this code.  Copy it into
--// --  a new ELSE arm aimed at your particular taget.  It *does* work for
--// --  some targets.
--//
--//     procedure Convert_Private_To_Raw (Raw  : out X_Raw_Data_Array;
--//                                       Orig :     Original) is
--//         subtype Rdt is X_Raw_Data_Array (Raw'Range);
--//         function To_Raw is new Unchecked_Conversion (Original, Rdt);
--//     begin
--//
--/ if DEBUG then
--//         if Original'Size / X_Raw_Data'Size /= Raw'Length then
--//             raise Constraint_Error;
--//         end if;
--/ end if;
--//         Raw := To_Raw (Orig);
--//
--//     end Convert_Private_To_Raw;
--//
--/ end if;

--\f

------------------------------------------------------------------------------
-- Convert an Array type.
------------------------------------------------------------------------------

--/ if R1000 then

    procedure Convert_Array_To_Raw (Raw  : out X_Raw_Data_Array;  
                                    Orig :     Original_Array) is  
        subtype Oat is Original_Array (Orig'Range);  
        Oad : Oat := Orig;  
        function To_Raw is  
           new Unchecked_Conversions.Convert_To_Byte_String (Oat);  
    begin

--/ if DEBUG then
        if Orig'Length * Original'Size / X_Raw_Data'Size /= Raw'Length then  
            raise Constraint_Error;  
        end if;
--/ end if;
        if Orig'Length > 0 then  
            Raw := To_Raw (Oad);  
        end if;

    end Convert_Array_To_Raw;

--/ elsif TeleGen2 and then Unix then
--//
--//     procedure Convert_Array_To_Raw (Raw  : out X_Raw_Data_Array;
--//                                     Orig :     Original_Array) is
--//     begin
--//
--/ if DEBUG then
--//         if Orig'Length * Original'Size / X_Raw_Data'Size /= Raw'Length then
--//             raise Constraint_Error;
--//         end if;
--/ end if;
--//         if Orig'Length > 0 then
--//             Xlbmt_Mem_Copy (Raw (Raw'First)'Address,
--//                             Orig (Orig'First)'Address, Raw'Length);
--//         end if;
--//
--//     end Convert_Array_To_Raw;
--//
--/ else
--//
--// ----Note: This is "generic" code for any Ada compiler;
--// --  it may not work for you.  Do not modify this code.  Copy it into
--// --  a new ELSE arm aimed at your particular taget.  It *does* work for
--// --  some targets.
--//
--//     procedure Convert_Array_To_Raw (Raw  : out X_Raw_Data_Array;
--//                                     Orig :     Original_Array) is
--//         subtype Rdt is X_Raw_Data_Array (Raw'Range);
--//         subtype Oat is Original_Array (Orig'Range);
--//         Oad : Oat := Orig;
--//         function To_Raw is new Unchecked_Conversion (Oat, Rdt);
--//     begin
--//
--/ if DEBUG then
--//         if Orig'Length * Original'Size / X_Raw_Data'Size /= Raw'Length then
--//             raise Constraint_Error;
--//         end if;
--/ end if;
--//         Raw := To_Raw (Oad);
--//
--//     end Convert_Array_To_Raw;
--//
--/ end if;

--\f

------------------------------------------------------------------------------
-- Convert a 2-dimensional Array type.
------------------------------------------------------------------------------

--/ if Row_Major_Order then
--/     if R1000 then

    procedure Convert_2d_Array_To_Raw (Raw  : out X_Raw_Data_Array;  
                                       Orig :     Original_Array) is
----Row_Major_Order, R1000
        subtype Oat is Original_Array (Orig'Range (1), Orig'Range (2));  
        Oad : Oat := Orig;  
        function To_Raw is  
           new Unchecked_Conversions.Convert_To_Byte_String (Oat);  
    begin

--/ if DEBUG then
        if Orig'Length (1) * Orig'Length (2) *  
           Original'Size / X_Raw_Data'Size /= Raw'Length then  
            raise Constraint_Error;  
        end if;
--/ end if;
        if Raw'Length /= 0 then  
            Raw := To_Raw (Oad);  
        end if;

    end Convert_2d_Array_To_Raw;

--/     elsif TeleGen2 and then Unix then
--//
--//     procedure Convert_2d_Array_To_Raw (Raw  : out X_Raw_Data_Array;
--//                                        Orig :     Original_Array) is
--// ----Row_Major_Order, not R1000
--//     begin
--//
--/ if DEBUG then
--//         if Orig'Length (1) * Orig'Length (2) *
--//            Original'Size / X_Raw_Data'Size /= Raw'Length then
--//             raise Constraint_Error;
--//         end if;
--/ end if;
--//         if Raw'Length /= 0 then
--//             Xlbmt_Mem_Copy
--//                (Raw (Raw'First)'Address,
--//                 Orig (Orig'First (1), Orig'First (2))'Address, Raw'Length);
--//         end if;
--//
--//     end Convert_2d_Array_To_Raw;
--//
--/     else
--//
--// ----Note: This is "generic" code for any Ada compiler;
--// --  it may not work for you.  Do not modify this code.  Copy it into
--// --  a new ELSE arm aimed at your particular taget.  It *does* work for
--// --  some targets.
--//
--//     procedure Convert_2d_Array_To_Raw (Raw  : out X_Raw_Data_Array;
--//                                        Orig :     Original_Array) is
--// ----Row_Major_Order, not R1000
--//         subtype Rdt is X_Raw_Data_Array (Raw'Range);
--//         subtype Oat is Original_Array (Orig'Range (1), Orig'Range (2));
--//         Oad : Oat := Orig;
--//         function To_Raw is new Unchecked_Conversion (Oat, Rdt);
--//     begin
--//
--/ if DEBUG then
--//         if Orig'Length (1) * Orig'Length (2) *
--//            Original'Size / X_Raw_Data'Size /= Raw'Length then
--//             raise Constraint_Error;
--//         end if;
--/ end if;
--//         Raw := To_Raw (Oad);
--//
--//     end Convert_2d_Array_To_Raw;
--//
--/     end if;
--/ else
--//
--// ----Note: This is "generic" code for any Ada compiler;
--// --  it may not work for you.  Do not modify this code.  Copy it into
--// --  a new ELSE arm aimed at your particular taget.  It *does* work for
--// --  some targets.
--//
--//     procedure Convert_2d_Array_To_Raw (Raw  : out X_Raw_Data_Array;
--//                                        Orig :     Original_Array) is
--// ----Not Row_Major_Order
--//         subtype Rdt     is X_Raw_Data_Array (Raw'Range);
--//         type    Oatype2 is array (Index2 range <>, Index1 range <>) of Original;
--//         subtype Oat2    is Oatype2 (Orig'Range (2), Orig'Range (1));
--//         Oad : Oat2;
--//         function To_Raw is new Unchecked_Conversion (Oat2, Rdt);
--//     begin
--//
--/ if DEBUG then
--//         if Orig'Length (1) * Orig'Length (2) *
--//            Original'Size / X_Raw_Data'Size /= Raw'Length then
--//             raise Constraint_Error;
--//         end if;
--/ end if;
--//         for I in Orig'Range (1) loop
--//             for J in Orig'Range (2) loop
--//                 Oad (J, I) := Orig (I, J);
--//             end loop;
--//         end loop;
--//         Raw := To_Raw (Oad);
--//
--//     end Convert_2d_Array_To_Raw;
--//
--/ end if;

--\f

------------------------------------------------------------------------------
-- Convert to a Discrete type.
------------------------------------------------------------------------------

--/ if R1000 then

    procedure Convert_Raw_To_Discrete  
                 (Orig : out Original; Raw : X_Raw_Data_Array) is  
        function From_Raw is  
           new Unchecked_Conversions.Convert_From_Byte_String (Original);  
    begin

--/ if DEBUG then
        if Original'Size / X_Raw_Data'Size /= Raw'Length then  
            raise Constraint_Error;  
        end if;
--/ end if;
        Orig := From_Raw (Raw);

    end Convert_Raw_To_Discrete;

--/ elsif TeleGen2 and then Unix then
--//
--//     procedure Convert_Raw_To_Discrete (Orig : out Original;
--//                                        Raw  :     X_Raw_Data_Array) is
--//     begin
--//
--/ if DEBUG then
--//         if Original'Size / X_Raw_Data'Size /= Raw'Length then
--//             raise Constraint_Error;
--//         end if;
--/ end if;
--//         if Original'Size < 32 then
--//             declare
--//                 ----TeleGen2 places "small" things into "large" places on
--//                 --  the stack and 'Address gives you the address of the
--//                 --  place and not the address of the data!
--//                 type A_Record is
--//                     record
--//                         A : Original;
--//                     end record;
--//                 A : A_Record;
--//             begin
--//                 Xlbmt_Mem_Copy
--//                    (A.A'Address, Raw (Raw'First)'Address, Raw'Length);
--//                 Orig := A.A;
--//             end;
--//         else
--//             Xlbmt_Mem_Copy (Orig'Address, Raw (Raw'First)'Address, Raw'Length);
--//         end if;
--//
--//     end Convert_Raw_To_Discrete;
--//
--/ else
--//
--// ----Note: This is "generic" code for any Ada compiler;
--// --  it may not work for you.  Do not modify this code.  Copy it into
--// --  a new ELSE arm aimed at your particular taget.  It *does* work for
--// --  some targets.
--//
--//     procedure Convert_Raw_To_Discrete (Orig : out Original;
--//                                        Raw  :     X_Raw_Data_Array) is
--//         subtype Rdt is X_Raw_Data_Array (Raw'Range);
--//         function From_Raw is new Unchecked_Conversion (Rdt, Original);
--//     begin
--//
--/ if DEBUG then
--//         if Original'Size / X_Raw_Data'Size /= Raw'Length then
--//             raise Constraint_Error;
--//         end if;
--/ end if;
--//         Orig := From_Raw (Raw);
--//
--//     end Convert_Raw_To_Discrete;
--//
--/ end if;

--\f

------------------------------------------------------------------------------
-- Convert to a Private type.
------------------------------------------------------------------------------

--/ if R1000 then

    procedure Convert_Raw_To_Private (Orig : out Original;  
                                      Raw  :     X_Raw_Data_Array) is  
        function From_Raw is  
           new Unchecked_Conversions.Convert_From_Byte_String (Original);  
    begin

--/ if DEBUG then
        if Original'Size / X_Raw_Data'Size /= Raw'Length then  
            raise Constraint_Error;  
        end if;
--/ end if;
        Orig := From_Raw (Raw);

    end Convert_Raw_To_Private;

--/ elsif TeleGen2 and then Unix then
--//
--//     procedure Convert_Raw_To_Private (Orig : out Original;
--//                                       Raw  :     X_Raw_Data_Array) is
--//     begin
--//
--/ if DEBUG then
--//         if Original'Size / X_Raw_Data'Size /= Raw'Length then
--//             raise Constraint_Error;
--//         end if;
--/ end if;
--//         if Raw'Length > 0 then
--//             Xlbmt_Mem_Copy (Orig'Address, Raw (Raw'First)'Address, Raw'Length);
--//         end if;
--//
--//     end Convert_Raw_To_Private;
--//
--/ else
--//
--// ----Note: This is "generic" code for any Ada compiler;
--// --  it may not work for you.  Do not modify this code.  Copy it into
--// --  a new ELSE arm aimed at your particular taget.  It *does* work for
--// --  some targets.
--//
--//     procedure Convert_Raw_To_Private (Orig : out Original;
--//                                       Raw  :     X_Raw_Data_Array) is
--//         subtype Rdt is X_Raw_Data_Array (Raw'Range);
--//         function From_Raw is new Unchecked_Conversion (Rdt, Original);
--//     begin
--//
--/ if DEBUG then
--//         if Original'Size / X_Raw_Data'Size /= Raw'Length then
--//             raise Constraint_Error;
--//         end if;
--/ end if;
--//         Orig := From_Raw (Raw);
--//
--//     end Convert_Raw_To_Private;
--//
--/ end if;

--\f

------------------------------------------------------------------------------
-- Convert to an Array type.
------------------------------------------------------------------------------

--/ if R1000 then

    procedure Convert_Raw_To_Array (Orig : out Original_Array;  
                                    Raw  :     X_Raw_Data_Array) is  
    begin

----The lengths must correspond.

--/ if DEBUG then
        if Raw'Length /= Orig'Length * Original'Size / X_Raw_Data'Size then  
            raise Constraint_Error;  
        end if;
--/ end if;

----If the length is non-zero then create a subtype with the correct indices
--  so that the R1000 architecture will store the index values in the subtype
--  descriptor and not in the data area.  Then instantiate a new From_Raw
--  using that subtype.  Then convert and return the result.

        if Raw'Length > 0 then  
            declare  
                subtype Oat is Original_Array (Orig'Range);  
                function From_Raw is new Unchecked_Conversions.  
                                         Convert_From_Byte_String (Oat);  
            begin  
                Orig := From_Raw (Raw);  
            end;  
        end if;

    end Convert_Raw_To_Array;

--/ elsif TeleGen2 and then Unix then
--//
--//     procedure Convert_Raw_To_Array
--//                  (Orig : out Original_Array; Raw : X_Raw_Data_Array) is
--//     begin
--//
--/ if DEBUG then
--//         if Raw'Length /= Orig'Length * Original'Size / X_Raw_Data'Size then
--//             raise Constraint_Error;
--//         end if;
--/ end if;
--//         if Raw'Length > 0 then
--//             Xlbmt_Mem_Copy (Orig (Orig'First)'Address,
--//                             Raw (Raw'First)'Address, Raw'Length);
--//         end if;
--//
--//     end Convert_Raw_To_Array;
--//
--/ else
--//
--// ----Note: This is "generic" code for any Ada compiler;
--// --  it may not work for you.  Do not modify this code.  Copy it into
--// --  a new ELSE arm aimed at your particular taget.  It *does* work for
--// --  some targets.
--//
--//     procedure Convert_Raw_To_Array (Orig : out Original_Array;
--//                                     Raw  :     X_Raw_Data_Array) is
--//     begin
--//
--// ----The lengths must correspond
--//
--/ if DEBUG then
--//         if Raw'Length /= Orig'Length * Original'Size / X_Raw_Data'Size then
--//             raise Constraint_Error;
--//         end if;
--/ end if;
--//
--// ----If the length is non-zero then create a subtype with the correct indices
--// --  so that the R1000 architecture will store the index values in the subtype
--// --  descriptor and not in the data area.  Then instantiate a new From_Raw
--// --  using that subtype.  Then convert and return the result.
--//
--//         if Raw'Length > 0 then
--//             declare
--//                 type Rdt is new X_Raw_Data_Array (Raw'Range);
--//                 type Oat is new Original_Array (Orig'Range);
--//                 function From_Raw is new Unchecked_Conversion (Rdt, Oat);
--//             begin
--//                 Orig := Original_Array (From_Raw (Rdt (Raw)));
--//             end;
--//         end if;
--//
--//     end Convert_Raw_To_Array;
--//
--/ end if;

--\f

------------------------------------------------------------------------------
-- Convert to a 2-dimensional Array type.
------------------------------------------------------------------------------

--/ if Row_Major_Order then
--/     if R1000 then

    procedure Convert_Raw_To_2d_Array (Orig : out Original_Array;  
                                       Raw  :     X_Raw_Data_Array) is  
    begin

----The array lengths must correspond.

--/ if DEBUG then
        if Raw'Length /= Orig'Length (1) * Orig'Length (2) *  
                            Original'Size / X_Raw_Data'Size then  
            raise Constraint_Error;  
        end if;
--/ end if;

----If the length is non-zero then create a subtype with the correct indices
--  so that the R1000 architecture will store the index values in the subtype
--  descriptor and not in the data area.  Then instantiate a new From_Raw
--  using that subtype.  Then convert and return the result.

        if Raw'Length > 0 then  
            declare  
                subtype Oat is Original_Array (Orig'Range (1), Orig'Range (2));  
                function From_Raw is new Unchecked_Conversions.  
                                         Convert_From_Byte_String (Oat);  
            begin  
                Orig := From_Raw (Raw);  
            end;  
        end if;

    end Convert_Raw_To_2d_Array;

--/     elsif TeleGen2 and then Unix then
--//
--//     procedure Convert_Raw_To_2d_Array
--//                  (Orig : out Original_Array; Raw : X_Raw_Data_Array) is
--//     begin
--//
--/ if DEBUG then
--//         if Raw'Length /= Orig'Length (1) * Orig'Length (2) *
--//                              Original'Size / X_Raw_Data'Size then
--//             raise Constraint_Error;
--//         end if;
--/ end if;
--//         if Raw'Length > 0 then
--//             Xlbmt_Mem_Copy (Orig (Orig'First (1), Orig'First (2))'Address,
--//                             Raw (Raw'First)'Address, Raw'Length);
--//         end if;
--//
--//     end Convert_Raw_To_2d_Array;
--//
--/     else
--//
--// ----Row_Major_Order, Not R1000
--// ----Note: This is "generic" code for any Ada compiler;
--// --  it may not work for you.  Do not modify this code.  Copy it into
--// --  a new ELSE arm aimed at your particular taget.  It *does* work for
--// --  some targets.
--//
--//     procedure Convert_Raw_To_2d_Array (Orig : out Original_Array;
--//                                        Raw  :     X_Raw_Data_Array) is
--//     begin
--//
--// ----Check size constraints.
--//
--/ if DEBUG then
--//         if Raw'Length /= Orig'Length (1) * Orig'Length (2) *
--//                            Original'Size / X_Raw_Data'Size then
--//             raise Constraint_Error;
--//         end if;
--/ end if;
--//
--// ----If there is no data then just return.
--//
--//         if Raw'Length = 0 then
--//             return;
--//
--// ----If the length is non-zero then create a subtype with the correct indices
--// --  so that the R1000 architecture will store the index values in the subtype
--// --  descriptor and not in the data area.  Then instantiate a new From_Raw
--// --  using that subtype.  Then convert and return the result.
--//
--//         else
--//             declare
--//                 subtype Oat is Original_Array (Orig'Range (1), Orig'Range (2));
--//                 subtype Rdt is X_Raw_Data_Array (Raw'Range);
--//                 function From_Raw is new Unchecked_Conversion (Rdt, Oat);
--//             begin
--//                 Orig := From_Raw (Raw);
--//             end;
--//         end if;
--//
--//     end Convert_Raw_To_2d_Array;
--//
--/     end if;
--/ else
--//
--// ----Note: This is "generic" code for any Ada compiler;
--// --  it may not work for you.  Do not modify this code.  Copy it into
--// --  a new ELSE arm aimed at your particular taget.  It *does* work for
--// --  some targets.
--//
--//     procedure Convert_Raw_To_2d_Array (Orig : out Original_Array;
--//                                        Raw  :     X_Raw_Data_Array) is
--//     begin
--//
--// ----Check size constraints.
--//
--/ if DEBUG then
--//         if Raw'Length /= Orig'Length (1) * Orig'Length (2) *
--//                            Original'Size / X_Raw_Data'Size then
--//             raise Constraint_Error;
--//         end if;
--/ end if;
--//
--// ----If there is no data then just return.
--//
--//         if Raw'Length = 0 then
--//             return;
--//
--// ----If the length is non-zero then create a subtype with the correct indices
--// --  so that the R1000 architecture will store the index values in the subtype
--// --  descriptor and not in the data area.  Then instantiate a new From_Raw
--// --  using that subtype.  Then convert and return the result.
--//
--//         else
--//             declare
--//                 subtype Rdt     is X_Raw_Data_Array (1 .. Len);
--//                 type    Oatype2 is
--//                       array (Index2 range <>, Index1 range <>) of Original;
--//                 subtype Oat2    is Oatype2 (Orig'Range (2), Orig'Range (1));
--//                 D2 : Oat2;
--//                 function From_Raw is new Unchecked_Conversion (Rdt, Oat2);
--//             begin
--//                 D2 := From_Raw (Orig);
--//                 for I in D2'Range (1) loop
--//                     for J in D2'Range (2) loop
--//                         Orig (J, I) := D2 (I, J);
--//                     end loop;
--//                 end loop;
--//             end;
--//         end if;
--//
--//     end Convert_Raw_To_2d_Array;
--//
--/ end if;

--\f

end Xlbmp_Generic_Converters;