with ada.text_io; use ada.text_io;

with ada.integer_text_io; use ada.integer_text_io;

procedure table3b is

    -- Precondition: sPow, fPow in 1 .. 99
    procedure putHeader(sPow, fPow: Integer) is
    begin
        -- First column
        put("          I");

        -- Columns for powers
        for i in sPow .. fPow loop

            if i in 1 .. 9 then
                put("       I**");
            else
                put("      I**");
            end if;

            put(i, 1);


        end loop;
        new_line;

        -- Add one to fPow to account for column for I
        for i in sPow .. fPow + 1 loop
            put("-----------");
        end loop;
        new_line;

    end putHeader;


    procedure putRows(sInt, fInt, sPow, fPow: Integer) is
        tempInt: Integer;

    begin
        for i in sInt .. fInt loop


            put(i);

            for j in sPow .. fPow loop

                tempInt := i ** j;
                put(tempInt);

            end loop;

            new_line;
        end loop;

    end putRows;

    startI, finishI: Integer;
    startPower, finishPower: Integer;

begin
    -- These lines prompt and do input
    -- Rest of program is unchanged

    put("Enter starting integer: ");
    get(startI);     -- Input value stored in startI!
    put_line("Starting power is " & integer'image(startI));

    put("Enter ending integer: ");
    get(finishI);    -- Input value stored in finishI!

    put("Enter starting power: ");
    get(startPower);    -- Input value stored in startPower!

    put("Enter ending power: ");
    get(finishPower);    -- Input value stored in fiishPower!

    new_line;


    putHeader(startPower, finishPower);

    putRows(startI, finishI, startPower, finishPower);

end table3b;