system "Diagonal System"

//See documentation for an example of how the system works

method "main"
begin
    while Starting a new session
    begin
        call "Initialize";
        call "Reset the diagonals";
        Exit;
    end
    
    if flag "a bet is placed" is true
    begin
        if record "series count" data > 37
        begin
            call "Reset the diagonals";
            clear record "12 unique numbers" layout;
            set flag "12 numbers crossed out" to false;
            set flag "a bet is placed" to false;
            put 0 on record "series count" data;
        end
    end
    
    call "Track numbers";
    call "Mark all diagonals";

    if record "12 unique numbers" layout count = 12 then
    begin
        set flag "12 numbers crossed out" to true;
    end
    
    call "Place bets on all diagonals";
end

method "Track numbers"
begin
    copy last number to record "number" layout;

    //check for duplicate numbers that have appeared
    if record "number" layout is not found in record "12 unique numbers" layout
    begin
        //check to see if there are already 12 numbers in the list
        if record "12 unique numbers" layout index > 12
        begin
            //move the entire list of numbers up by 1
            move list up by 1 on record "12 unique numbers" layout;
            set max to record "12 unique numbers" layout index;
            add 1 to record "12 unique numbers" layout index;
        end

        //store the last spin that has appeared to the track spin list
        copy record "number" layout to record "12 unique numbers" layout;
        add 1 to record "12 unique numbers" layout index;
    end
end

method "Mark all diagonals"
begin
    if flag "12 numbers crossed out" is true
    begin
        return;
    end

    Duplicate Record "diagonal 1" to Record "temp record";
    call "Mark each diagonal";
    Duplicate Record "temp record" to Record "diagonal 1";

    Duplicate Record "diagonal 2" to Record "temp record";
    call "Mark each diagonal";
    Duplicate Record "temp record" to Record "diagonal 2";

    Duplicate Record "diagonal 3" to Record "temp record";
    call "Mark each diagonal";
    Duplicate Record "temp record" to Record "diagonal 3";

    Duplicate Record "diagonal 4" to Record "temp record";
    call "Mark each diagonal";
    Duplicate Record "temp record" to Record "diagonal 4";

    Duplicate Record "diagonal 5" to Record "temp record";
    call "Mark each diagonal";
    Duplicate Record "temp record" to Record "diagonal 5";

    Duplicate Record "diagonal 6" to Record "temp record";
    call "Mark each diagonal";
    Duplicate Record "temp record" to Record "diagonal 6";

    Duplicate Record "diagonal 7" to Record "temp record";
    call "Mark each diagonal";
    Duplicate Record "temp record" to Record "diagonal 7";

    Duplicate Record "diagonal 8" to Record "temp record";
    call "Mark each diagonal";
    Duplicate Record "temp record" to Record "diagonal 8";

    Duplicate Record "diagonal 9" to Record "temp record";
    call "Mark each diagonal";
    Duplicate Record "temp record" to Record "diagonal 9";

    Duplicate Record "diagonal 10" to Record "temp record";
    call "Mark each diagonal";
    Duplicate Record "temp record" to Record "diagonal 10";

    Duplicate Record "diagonal 11" to Record "temp record";
    call "Mark each diagonal";
    Duplicate Record "temp record" to Record "diagonal 11";

    Duplicate Record "diagonal 12" to Record "temp record";
    call "Mark each diagonal";
    Duplicate Record "temp record" to Record "diagonal 12";

    Duplicate Record "diagonal 13" to Record "temp record";
    call "Mark each diagonal";
    Duplicate Record "temp record" to Record "diagonal 13";

    Duplicate Record "diagonal 14" to Record "temp record";
    call "Mark each diagonal";
    Duplicate Record "temp record" to Record "diagonal 14";

    Duplicate Record "diagonal 15" to Record "temp record";
    call "Mark each diagonal";
    Duplicate Record "temp record" to Record "diagonal 15";

    Duplicate Record "diagonal 16" to Record "temp record";
    call "Mark each diagonal";
    Duplicate Record "temp record" to Record "diagonal 16";

    Duplicate Record "diagonal 17" to Record "temp record";
    call "Mark each diagonal";
    Duplicate Record "temp record" to Record "diagonal 17";

    Duplicate Record "diagonal 18" to Record "temp record";
    call "Mark each diagonal";
    Duplicate Record "temp record" to Record "diagonal 18";

    Duplicate Record "diagonal 19" to Record "temp record";
    call "Mark each diagonal";
    Duplicate Record "temp record" to Record "diagonal 19";

    Duplicate Record "diagonal 20" to Record "temp record";
    call "Mark each diagonal";
    Duplicate Record "temp record" to Record "diagonal 20";
end

method "Mark each diagonal"
begin
    if  Record "number" Layout is found in record "temp record" Layout
    begin
        put 1 on record "temp record" Layout index;

        loop until record "temp record" Layout index > record "temp record" layout count
        begin
            if record "number" layout = record "temp record" layout
            begin
                put 100% record "temp record" layout index to
                                                         record "temp record" data index;
                put 1 on record "temp record" data;
                return;
            end

            add 1 to record "temp record" Layout index;
        end
    end
end

method "Place bets on all diagonals"
begin
    if flag "12 numbers crossed out" is false
    begin
        return;
    end

    add 1 to record "series count" data;
    set flag "a bet is placed" to false;
    Duplicate Record "diagonal 1" to Record "temp record";
    call "Place bets on each diagonal";
    Duplicate Record "temp record" to Record "diagonal 1";

    Duplicate Record "diagonal 2" to Record "temp record";
    call "Place bets on each diagonal";
    Duplicate Record "temp record" to Record "diagonal 2";

    Duplicate Record "diagonal 3" to Record "temp record";
    call "Place bets on each diagonal";
    Duplicate Record "temp record" to Record "diagonal 3";

    Duplicate Record "diagonal 4" to Record "temp record";
    call "Place bets on each diagonal";
    Duplicate Record "temp record" to Record "diagonal 4";

    Duplicate Record "diagonal 5" to Record "temp record";
    call "Place bets on each diagonal";
    Duplicate Record "temp record" to Record "diagonal 5";

    Duplicate Record "diagonal 6" to Record "temp record";
    call "Place bets on each diagonal";
    Duplicate Record "temp record" to Record "diagonal 6";

    Duplicate Record "diagonal 7" to Record "temp record";
    call "Place bets on each diagonal";
    Duplicate Record "temp record" to Record "diagonal 7";

    Duplicate Record "diagonal 8" to Record "temp record";
    call "Place bets on each diagonal";
    Duplicate Record "temp record" to Record "diagonal 8";

    Duplicate Record "diagonal 9" to Record "temp record";
    call "Place bets on each diagonal";
    Duplicate Record "temp record" to Record "diagonal 9";

    Duplicate Record "diagonal 10" to Record "temp record";
    call "Place bets on each diagonal";
    Duplicate Record "temp record" to Record "diagonal 10";

    Duplicate Record "diagonal 11" to Record "temp record";
    call "Place bets on each diagonal";
    Duplicate Record "temp record" to Record "diagonal 11";

    Duplicate Record "diagonal 12" to Record "temp record";
    call "Place bets on each diagonal";
    Duplicate Record "temp record" to Record "diagonal 12";

    Duplicate Record "diagonal 13" to Record "temp record";
    call "Place bets on each diagonal";
    Duplicate Record "temp record" to Record "diagonal 13";

    Duplicate Record "diagonal 14" to Record "temp record";
    call "Place bets on each diagonal";
    Duplicate Record "temp record" to Record "diagonal 14";

    Duplicate Record "diagonal 15" to Record "temp record";
    call "Place bets on each diagonal";
    Duplicate Record "temp record" to Record "diagonal 15";

    Duplicate Record "diagonal 16" to Record "temp record";
    call "Place bets on each diagonal";
    Duplicate Record "temp record" to Record "diagonal 16";

    Duplicate Record "diagonal 17" to Record "temp record";
    call "Place bets on each diagonal";
    Duplicate Record "temp record" to Record "diagonal 17";

    Duplicate Record "diagonal 18" to Record "temp record";
    call "Place bets on each diagonal";
    Duplicate Record "temp record" to Record "diagonal 18";

    Duplicate Record "diagonal 19" to Record "temp record";
    call "Place bets on each diagonal";
    Duplicate Record "temp record" to Record "diagonal 19";

    Duplicate Record "diagonal 20" to Record "temp record";
    call "Place bets on each diagonal";
    Duplicate Record "temp record" to Record "diagonal 20";

    if flag "a bet is placed" is false
    begin
        call "Reset the diagonals";
        clear record "12 unique numbers" layout;
        set flag "12 numbers crossed out" to false;
        set flag "a bet is placed" to false;
        put 0 on record "series count" data;
    end
end

method "Place bets on each diagonal"
begin
    put 0 on record "total diagonal count" data;
    put 1 on record "temp record" Data index;

    loop until record "temp record" Data index >record "temp record" Data count
    begin
        if record "temp record" Data = 1
        begin
            add 1 to record "total diagonal count" data;
        end

        add 1 to record "temp record" Data index;
    end

    //must have two numbers that are next to each other in the form
    //of a diagonal before we can place a bet
    if record "total diagonal count" data = 2 then
    begin
        //we have two numbers that have appeared.
        //Now check to see if these numbers are next to each other
        put 1 on record "temp record" data index;
        put 100% of record "temp record" data to record "first number" data;
        add 1 to record "temp record" data index;
        put 100% of record "temp record" data to record "second number" data;
        
        if record "first number" data = record "second number" data
        begin
            //Both numbers are next to each other.  Place a bet
            //on the opposite number that has NOT appeared.
            put 3 on record "temp record" layout index;
            put 1 on record "temp record" layout;
            set flag "a bet is placed" to true;
        end
        else
        begin
            //check the other end of the diagonal to a match.
            put 2 on record "temp record" data index;
            put 100% of record "temp record" data to record "first number" data;
            add 1 to record "temp record" data index;
            put 100% of record "temp record" data to record "second number" data;

            if record "first number" data = record "second number" data
            begin
                //Both numbers are next to each other.  Place a bet
                //on the opposite number that has NOT appeared.
                put 1 on record "temp record" layout index;
                put 1 on record "temp record" layout;
                set flag "a bet is placed" to true;
            end
        end
    end
end

method "Reset the diagonals"
begin
    set list [0,0,0] to record "diagonal 1" data;
    set list [0,0,0] to record "diagonal 2" data;
    set list [0,0,0] to record "diagonal 3" data;
    set list [0,0,0] to record "diagonal 4" data;
    set list [0,0,0] to record "diagonal 5" data;
    set list [0,0,0] to record "diagonal 6" data;
    set list [0,0,0] to record "diagonal 7" data;
    set list [0,0,0] to record "diagonal 8" data;
    set list [0,0,0] to record "diagonal 9" data;
    set list [0,0,0] to record "diagonal 10" data;
    set list [0,0,0] to record "diagonal 11" data;
    set list [0,0,0] to record "diagonal 12" data;
    set list [0,0,0] to record "diagonal 13" data;
    set list [0,0,0] to record "diagonal 14" data;
    set list [0,0,0] to record "diagonal 15" data;
    set list [0,0,0] to record "diagonal 16" data;
    set list [0,0,0] to record "diagonal 17" data;
    set list [0,0,0] to record "diagonal 18" data;
    set list [0,0,0] to record "diagonal 19" data;
    set list [0,0,0] to record "diagonal 20" data;
end

method "Initialize"
begin
    set flag "12 numbers crossed out" to false;
    clear record "number" layout;
    clear record "12 unique numbers" layout;
    clear record "series count" data;
    
    copy list  [number 1,Number 5,Number 9] to record "diagonal 1" layout;
    copy list  [Number 3,Number 5,Number 7] to record "diagonal 2" layout;
    copy list  [Number 4,Number 8,Number 12] to record "diagonal 3" layout;
    copy list  [Number 6,Number 8,Number 10] to record "diagonal 4" layout;
    copy list  [Number 7,Number 11,Number 15] to Record "diagonal 5" Layout;
    copy list  [Number 9,Number 11,Number 13] to Record "diagonal 6" Layout;
    copy list  [Number 10,number 14,number 18] to record "diagonal 7" layout;
    copy list  [Number 12,number 14,Number 16] to record "diagonal 8" layout;
    copy list  [number 13,number 17,number 21] to record "diagonal 9" layout;
    copy list  [Number 15,number 17,Number 19] to record "diagonal 10" layout;
    copy list  [number 16,number 20,number 24] to record "diagonal 11" layout;
    copy list  [Number 18,number 20,Number 22] to record "diagonal 12" layout;
    copy list  [number 19,number 23,number 27] to record "diagonal 13" layout;
    copy list  [Number 21,number 23,Number 25] to record "diagonal 14" layout;
    copy list  [number 22,number 26,number 30] to record "diagonal 15" layout;
    copy list  [Number 24,number 26,Number 28] to record "diagonal 16" layout;
    copy list  [number 25,number 29,number 33] to record "diagonal 17" layout;
    copy list  [Number 27,number 29,Number 31] to record "diagonal 18" layout;
    copy list  [number 28,number 32,number 36] to record "diagonal 19" layout;
    copy list  [Number 30,number 32,Number 34] to record "diagonal 20" layout;
end

