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

⟦885b2cf7a⟧ Ada Source

    Length: 6144 (0x1800)
    Types: Ada Source
    Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Tty, seg_04b98d

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 Ioctl;
use Ioctl;
with V_I_Bits;
use V_I_Bits;
with File_Support;
with Unix;
with Termio;
use Termio;
with Machine_Types;
package body Tty is

    procedure Sys_Err (Msg : String) is
    begin
        File_Support.Write_To_Stderr (Msg);
        Unix.Sys_Exit (2);
    end Sys_Err;

    procedure Catch_Hup is
    begin
        null; -- file_support.write_to_stderr("caught hangup");
    end Catch_Hup;


    procedure Show_Tty_State (Fd : Os_Files.File_Descriptor) is
        State : Total_State;
    begin
        File_Support.Write_To_Stderr ("show fd: " &
                                      Integer'Image (Integer (Fd)));

        Get_Tty_State (Fd, State);
    end Show_Tty_State;

    procedure Get_Tty_State (Fd : Os_Files.File_Descriptor;
                             State : out Total_State) is
    begin
        if Ioctl.Ioctl (Fd, Tcgeta, State.U_Tty_Termio'Address) = -1 then
            Sys_Err ("in TCGETA save");
        end if;
    end Get_Tty_State;


    -----------------------------------------------------
    --\x09set_tty_state
    --\x09\x09used for master & slave
    --\x09\x09note: this flushes the buffer. use with caution
    --\x09\x09for UNIX 4.3, can't set process group
    ----------------------------------------------------
    procedure Set_Tty_State
                 (Fd : Os_Files.File_Descriptor; State : Total_State) is
        Ldisc : Integer;
    begin
        if not Os_Files.Is_Interactive (Fd) then
            return;
        end if;
        if Ioctl.Ioctl (Fd, Tcseta, State.U_Tty_Termio'Address) = -1 then
            Sys_Err ("in TCSETA save");
        end if;
    end Set_Tty_State;

    procedure Condition_Port (Fd : Os_Files.File_Descriptor) is
        State : Total_State;
        use Termio;
        use Machine_Types;
        Input_Modes_Wanted_Off : constant :=
           Ignbrk + Brkint + Ignpar + Parmrk + Inpck + Istrip +
              Inlcr + Igncr + Icrnl + Ixon + Ixoff + Iuclc + Imaxbel;
        Input_Modes_Wanted_On : constant := Ixany;
        Output_Modes_Wanted_Off : constant :=
           Opost + Olcuc + Onlcr + Ocrnl + Onocr + Ofill + Ofdel +
              Crdly + Bsdly + Ffdly + Nldly + Vtdly + Tabdly;
        Output_Modes_Wanted_On : constant := Onlret;
        Control_Modes_Wanted_Off : constant :=
           Csize + Cstopb + Parenb + Parodd + Clocal + Cibaud + Parext;
        Control_Modes_Wanted_On : constant := Cs8 + Cread + Hupcl;
        Line_Modes_Wanted_Off : constant :=
           Isig + Icanon + Xcase + Termio.Echo + Echoe + Echok +
              Echonl + Termio.Noflsh + Termio.Tostop + Echoctl +
              Echoprt + Echoke + Termio.Flusho + Iexten + Pending;
        Line_Modes_Wanted_On : constant := 0;
    begin
        Get_Tty_State (Fd, State);

        -- input modes
        State.U_Tty_Termio.C_Iflag :=
           Word (Bit_And (Integer (State.U_Tty_Termio.C_Iflag),
                          Bit_Neg (Input_Modes_Wanted_Off)));
        State.U_Tty_Termio.C_Iflag :=
           Word (Bit_Or (Integer (State.U_Tty_Termio.C_Iflag),
                         Input_Modes_Wanted_On));

        -- output modes
        State.U_Tty_Termio.C_Oflag :=
           Word (Bit_And (Integer (State.U_Tty_Termio.C_Oflag),
                          Bit_Neg (Output_Modes_Wanted_Off)));
        State.U_Tty_Termio.C_Oflag :=
           Word (Bit_Or (Integer (State.U_Tty_Termio.C_Oflag),
                         Output_Modes_Wanted_On));

        -- control modes (NOTE: baud rate is left as is)
        State.U_Tty_Termio.C_Cflag :=
           Word (Bit_And (Integer (State.U_Tty_Termio.C_Cflag),
                          Bit_Neg (Control_Modes_Wanted_Off)));
        State.U_Tty_Termio.C_Cflag :=
           Word (Bit_Or (Integer (State.U_Tty_Termio.C_Cflag),
                         Control_Modes_Wanted_On));

        -- line modes
        State.U_Tty_Termio.C_Lflag :=
           Word (Bit_And (Integer (State.U_Tty_Termio.C_Lflag),
                          Bit_Neg (Line_Modes_Wanted_Off)));
        State.U_Tty_Termio.C_Lflag :=
           Word (Bit_Or (Integer (State.U_Tty_Termio.C_Lflag),
                         Line_Modes_Wanted_On));

        State.U_Tty_Termio.C_Cc (Vmin) := 1;
        State.U_Tty_Termio.C_Cc (Vtime) := 1;
        State.U_Tty_Termio.C_Line := 16#000#;

        Set_Tty_State (Fd, State);
    end Condition_Port;
end Tty;

E3 Meta Data

    nblk1=5
    nid=0
    hdr6=a
        [0x00] rec0=27 rec1=00 rec2=01 rec3=00a
        [0x01] rec0=1c rec1=00 rec2=02 rec3=03e
        [0x02] rec0=14 rec1=00 rec2=03 rec3=01e
        [0x03] rec0=16 rec1=00 rec2=04 rec3=042
        [0x04] rec0=0e rec1=00 rec2=05 rec3=000
    tail 0x21548ca3e86843774656e 0x42a00088462060003