# yesno --- get yes no answers from the terminal about a list # ehs 1982 integer getlin, getarg, equal character input_line (MAXLINE), response (MAXLINE) logical flag, det, default_response, is_default integer i, j string usage "Usage: yesno [-yes | -no]" is_default = TRUE if (getarg (1, input_line, MAXLINE) == EOF) is_default = FALSE elif (equal (input_line, "-yes"s) == YES) default_response = TRUE elif (equal (input_line, "-no"s) == YES) default_response = FALSE else call error (usage) if (getarg (2, input_line, MAXLINE) ~= EOF) call error (usage) repeat { j = getlin (input_line, STDIN, MAXLINE) if (j == EOF) break input_line(j) = EOS # remove trailing linefeed repeat { call print (TTY, '"*s" ? 's, input_line) i = getlin (response, TTY, MAXLINE) if (i == EOF) break 2 response (i) = EOS call mapstr (response, LOWER) select (i - 1) when (0) { det = default_response flag = is_default } when (1) { if (response (1) == "y"c) { det = TRUE flag = TRUE } elif (response (1) == "n"c) { det = FALSE flag = TRUE } else flag = FALSE } when (2) { if ((response (1) == "y"c && response (2) == "e"c) || (response (1) == "o"c && response (2) == "k"c)) { det = TRUE flag = TRUE } elif (response (1) == "n"c && response (2) == "o"c) { det = FALSE flag = TRUE } else flag = FALSE } when (3) { if (response (1) == "y"c && response (2) == "e"c && response (3) == "s"c) { det = TRUE flag = TRUE } else flag = FALSE } else flag = FALSE if (~flag) call print (TTY, "answer YES or NO.*n"s) } until (flag) if (det) call print (STDOUT, "*s*n"s, input_line) } stop end