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

⟦200f58142⟧ Ada Source

    Length: 14336 (0x3800)
    Types: Ada Source
    Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Pld_Main, seg_005390

Derivation

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

E3 Source Code



with Text_Io;

with Xlbt_Arithmetic;  
use Xlbt_Arithmetic;  
with Xlbt_Atom_Defs;  
use Xlbt_Atom_Defs;  
with Xlbt_Basic;  
use Xlbt_Basic;  
with Xlbt_Event;  
use Xlbt_Event;  
with Xlbt_Gc;  
use Xlbt_Gc;  
with Xlbt_Geometry;  
use Xlbt_Geometry;  
with Xlbt_Graphics;  
use Xlbt_Graphics;  
with Xlbt_Key;  
use Xlbt_Key;  
with Xlbt_Pointer;  
use Xlbt_Pointer;  
with Xlbt_String;  
use Xlbt_String;  
with Xlbt_Visual;  
use Xlbt_Visual;  
with Xlbt_Window;  
use Xlbt_Window;

with Xlbp_Display;  
use Xlbp_Display;  
with Xlbp_Event;  
use Xlbp_Event;  
with Xlbp_Gc;  
use Xlbp_Gc;  
with Xlbp_Geometry;  
use Xlbp_Geometry;  
with Xlbp_Graphics;  
use Xlbp_Graphics;  
with Xlbp_Sync;  
use Xlbp_Sync;  
with Xlbp_Window;  
use Xlbp_Window;  
with Xlbp_Window_Information;  
use Xlbp_Window_Information;  
with Xlbp_Window_Property;  
use Xlbp_Window_Property;

package body Pld_Main is
------------------------------------------------------------------------------
-- Originally: plaid.c - X demo program
------------------------------------------------------------------------------
-- static char *rcsid = "$Header: plaid.c,v 1.5 88/02/14 20:27:13 rws Exp $";
------------------------------------------------------------------------------
-- Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts,
-- and the Massachusetts Institute of Technology, Cambridge, Massachusetts.
--
--                         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 appear in all copies and that
-- both that copyright notice and this permission notice appear in
-- supporting documentation, and that the names of Digital or MIT not be
-- used in advertising or publicity pertaining to distribution of the
-- software without specific, written prior permission.
--
-- DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
-- ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
-- DIGITAL 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
    My_Win : X_Window;

    Dpy : X_Display;

    Num_Rects : constant := 10;  
    Rects     : X_Rectangle_Array (0 .. Num_Rects - 1);  
    Gc        : X_G_Context;

--\x0c
    procedure Main (Display           : X_String := "";  
                    Geometry          : X_String := "";  
                    Use_Backing_Store : Boolean  := False;  
                    Verbose           : Boolean  := False) is

        I       : S_Natural;  
        J       : S_Natural;  
        Amount  : S_Natural;  
        Winx    : S_Short;  
        Winy    : S_Short;  
        Winw    : U_Short;  
        Winh    : U_Short;  
        Xdir    : S_Short;  
        Ydir    : S_Short;  
        Xoff    : S_Short;  
        Yoff    : S_Short;  
        Centerx : S_Short;  
        Centery : S_Short;  
        Xgcv    : X_Gc_Values;  
        Gc      : X_Gc;  
        Xswa    : X_Set_Window_Attributes;  
        Pe      : X_Event;  
        Root    : X_Window;  
        X       : S_Short;  
        Y       : S_Short;  
        W       : U_Short;  
        H       : U_Short;  
        Error   : X_Error_String;  
        Env     : constant X_String :=  
           X_Display_Name (Display);

    begin

        X_Open_Display (Env, Dpy, Error);  
        if "=" (Dpy, None_X_Display) then  
            Text_Io.Put_Line ("Cannot open display: " &  
                              To_String (Err (Error)));  
            raise Program_Error;  
        end if;

        Winx := 0;  
        Winy := 0;  
        Winw := 501;  
        Winh := 303;

        if Geometry /= "" then  
            declare  
                Flags : X_Parse_Geometry_Flags;  
            begin  
                X_Parse_Geometry (Geometry, Winx, Winy, Winw, Winh, Flags);  
                if Flags (X_Negative) then  
                    Winx :=  
                       S_Short (X_Display_Width (Dpy, X_Default_Screen (Dpy))) -  
                          Winx - S_Short (Winw);  
                end if;  
                if Flags (Y_Negative) then  
                    Winy :=  
                       S_Short  
                          (X_Display_Height (Dpy, X_Default_Screen (Dpy))) -  
                       Winy - S_Short (Winh);  
                end if;  
            end;  
        end if;

        if Use_Backing_Store then  
            Xswa.Backing_Store := Not_Useful;  
        else  
            Xswa.Backing_Store := Always;  
        end if;  
        Xswa.Event_Mask       :=  
           X_Event_Mask'  
              (Button_Press_Mask | Exposure_Mask | Structure_Notify_Mask =>  
                  True,  
               others => False);  
        Xswa.Background_Pixel := X_Black_Pixel (Dpy, X_Default_Screen (Dpy));  
        Xswa.Border_Pixel     := X_White_Pixel (Dpy, X_Default_Screen (Dpy));  
        My_Win                :=  
           X_Create_Window (Dpy,  
                            X_Root_Window (Dpy, X_Default_Screen (Dpy)),  
                            Winx,  
                            Winy,  
                            Winw,  
                            Winh,  
                            1,  
                            X_Default_Depth (Dpy, X_Default_Screen (Dpy)),  
                            Input_Output,  
                            Copy_From_Parent_Visual,  
                            (Cw_Event_Mask | Cw_Backing_Store |  
                             Cw_Border_Pixel | Cw_Back_Pixel => True,  
                             others                          => False),  
                            Xswa);

        X_Set_Text_Property (Dpy, My_Win, "Plaid", Xa_Wm_Name);  
        X_Map_Window (Dpy, My_Win);

        Xgcv.Funct := Gx_Invert;  
        Xgcv.Plane_Mask := X_Plane_Mask  
                              ("xor" (X_Black_Pixel  
                                         (Dpy, X_Default_Screen (Dpy)),  
                                      X_White_Pixel (Dpy,  
                                                     X_Default_Screen (Dpy))));  
        Xgcv.Fill_Style := Fill_Solid;  
        Gc := X_Create_Gc (Dpy,  
                           My_Win.Drawable,  
                           (Gc_Function | Gc_Plane_Mask | Gc_Fill_Style => True,  
                            others => False),  
                           Xgcv);  
        J := 0;  
        loop

            X_Next_Event (Dpy, Pe);-- this should get first exposure event
            if Pe.Kind = Expose then  
                while Pe.Expose.Count /= 0 loop  
                    X_Next_Event (Dpy, Pe);  
                end loop;

            elsif Pe.Kind = Configure_Notify then  
                Winx := Pe.Configure.X;  
                Winy := Pe.Configure.Y;  
                Winw := Pe.Configure.Width;  
                Winh := Pe.Configure.Height;

            elsif Pe.Kind = Map_Notify or else  
                  Pe.Kind = Reparent_Notify then  
                null;  
            elsif Pe.Kind = Button_Press then  
                if Pe.Button.Button = Button_2 then  
                    exit;  
                end if;  
            else  
                Text_Io.Put_Line ("Unexpected event type: " &  
                                  X_Event_Code'Image (Pe.Kind));  
            end if;

            if Verbose then  
                Text_Io.Put_Line ("PLAID: Dealing with exposures");  
            end if;  
            X_Clear_Area (Dpy, My_Win, 0, 0, Winw, Winh, False);  
            if Verbose then  
                Text_Io.Put_Line ("PLAID: drawing rects");  
            end if;

            Centerx := S_Short (Winw / 2);  
            Centery := S_Short (Winh / 2);  
            Xdir    := -1;  
            Ydir    := -2;  
            Xoff    := 2;  
            Yoff    := 2;

            I := 0;  
            while X_Pending (Dpy) = 0 loop

                Rects (I).X      := Centerx - Xoff;  
                Rects (I).Y      := Centery - Yoff;  
                Rects (I).Width  := 2 * U_Short (Xoff);  
                Rects (I).Height := 2 * U_Short (Yoff);  
                Xoff             := Xoff + Xdir;  
                Yoff             := Yoff + Ydir;  
                if Xoff <= 0 or else Xoff >= Centerx then  
                    Xoff := Xoff - 2 * Xdir;  
                    Xdir := -Xdir;  
                end if;  
                if Yoff <= 0 or else Yoff >= Centery then  
                    Yoff := Yoff - 2 * Ydir;  
                    Ydir := -Ydir;  
                end if;  
                if I = Num_Rects - 1 then  
                    X_Fill_Rectangles (Dpy, My_Win.Drawable, Gc, Rects);  
                    X_Flush (Dpy);  
                    I := 0;  
                else  
                    I := I + 1;  
                end if;

            end loop;

        end loop;

    end Main;

end Pld_Main;  

E3 Meta Data

    nblk1=d
    nid=0
    hdr6=1a
        [0x00] rec0=31 rec1=00 rec2=01 rec3=026
        [0x01] rec0=10 rec1=00 rec2=02 rec3=026
        [0x02] rec0=18 rec1=00 rec2=03 rec3=050
        [0x03] rec0=00 rec1=00 rec2=0d rec3=016
        [0x04] rec0=21 rec1=00 rec2=04 rec3=00a
        [0x05] rec0=01 rec1=00 rec2=0c rec3=03e
        [0x06] rec0=1e rec1=00 rec2=05 rec3=01e
        [0x07] rec0=15 rec1=00 rec2=06 rec3=006
        [0x08] rec0=00 rec1=00 rec2=0b rec3=032
        [0x09] rec0=16 rec1=00 rec2=07 rec3=062
        [0x0a] rec0=19 rec1=00 rec2=08 rec3=08a
        [0x0b] rec0=1a rec1=00 rec2=09 rec3=032
        [0x0c] rec0=14 rec1=00 rec2=0a rec3=000
    tail 0x21700893481978940bbc3 0x42a00088462063203