Pastey Modified hangman

include std/sort.e
include std/text.e  
include std/map.e  
include std/sequence.e  
include std/os.e  
include std/console.e  
  
function mask_word(sequence word, map letters) --> {string,int}  
    integer underscores=0  
    for i = 1 to length(word) do  
        integer ch = upper(word[i])  
        if not has(letters,ch) then  
            word[i] = '_'  
            underscores += 1  
        end if  
    end for  
    return {word,underscores}  
end function  
  
function should_update(map letters, integer char) --> bool  
    integer normalized = upper(char)  
    integer res = not has(letters,normalized) and  
            65 <= normalized and normalized <= 90 -- within A..Z  
    return res  
end function  
  
procedure update_letters(map letters, integer char)  
    put(letters, upper(char), 0)  
end procedure  
  
procedure you_won()  
    puts(1,"\nYou won!! congratulations!\n") -- ***** added newline   
end procedure  
  
procedure you_lost(sequence word)  
    puts (1,"\nYou lost.. :(\n" )  
    printf(1, "the word was: %s\n", {word}) -- ***** added newline 
end procedure  
  
procedure main()  
  
    integer allowed = 20 , unique_chars = 0  
    integer keypress  
    sequence words = {"puzzle", "apple", "tree", "word", "bird", "hangman"} -- ******** changed line  
    sequence word = words[rand(length(words))] -- ***** select word from list 
    map letters = new()  
    sequence letters_so_far  
    integer underscores = -1 
      
    any_key("Hello! please click any key to start")  
    while 1 do  
    unique_chars = size(letters)  
     -- flow conditions  
        if underscores = 0 then  
            you_won()  
            exit  
        end if  
          
        if unique_chars>=allowed then  
            you_lost(word)  
            exit  
        end if  
          
        sequence masked = mask_word(word,letters)  
            sequence word_output = masked[1]  
            underscores = masked[2]  
        sleep(0.1)        
        clear_screen()  
        puts (1, "The word is:\n")  
        puts (1,join(upper(word_output)," ") & "\n\n")  
          
          
        printf(1,"%d / %d\n\n", {unique_chars, allowed})  
          
        letters_so_far = join(sort(keys(letters))," ")  
        puts(1,"\t" & letters_so_far)  
                  
        -- give time to print, then check key.  
        -- check key presses  
        keypress = get_key()  
        -- if no key, refresh  
        if keypress = -1 then continue end if  
          
        -- ESC to exit the program.  
        if keypress = 27 then exit end if  
          
        if should_update(letters,keypress) then  
            update_letters(letters,keypress)  
        end if  
    end while  
end procedure  
  
  
main()