Category talk:Wren-ioutil: Difference between revisions

More versatile 'quit' option for Input class.
(→‎Source code: Added Input.password method, removed type aliases which are no longer needed.)
(More versatile 'quit' option for Input class.)
Line 280:
/* Input supplements Stdin with some additional methods for reading user input. */
class Input {
// Gets or sets the string to be used to quit input - null by default.
static quit { __quit }
static quit=(q) { __quit = (q is String) ? q : q.toString }
 
// Prompts the user to enter some text and returns it.
static text(prompt) {
Line 295 ⟶ 299:
Output.fwrite(prompt)
var text = Stdin.readLine()
if (text == __quit) return text
if (text.count < minLen) {
System.print("Must have a minimum length of %(minLen) characters, try again.")
Line 312 ⟶ 317:
Output.fwrite(prompt)
var text = Stdin.readLine()
if (text == __quit) return text
if (text.count < minLen || text.count > maxLen) {
if (maxLen > minLen) {
Line 326 ⟶ 332:
while (true) {
Output.fwrite(prompt)
var numbertext = Num.fromString(Stdin.readLine().trim())
if (text == __quit) return text
var number = Num.fromString(text.trim())
if (!number) {
System.print("Must be a number, try again.")
Line 338 ⟶ 346:
while (true) {
Output.fwrite(prompt)
var numbertext = Num.fromString(Stdin.readLine().trim())
if (text == __quit) return text
var number = Num.fromString(text.trim())
if (!number || number < min) {
System.print("Must be a number no less than %(min), try again.")
Line 353 ⟶ 363:
while (true) {
Output.fwrite(prompt)
var numbertext = Num.fromString(Stdin.readLine().trim())
if (text == __quit) return text
var number = Num.fromString(text.trim())
if (!number || number < min || number > max) {
System.print("Must be a number between %(min) and %(max), try again.")
Line 364 ⟶ 376:
while (true) {
Output.fwrite(prompt)
var integertext = Num.fromString(Stdin.readLine().trim())
if (text == __quit) return text
var integer = Num.fromString(text.trim())
if (!integer || !integer.isInteger) {
System.print("Must be an integer, try again.")
Line 376 ⟶ 390:
while (true) {
Output.fwrite(prompt)
var integertext = Num.fromString(Stdin.readLine().trim())
if (text == __quit) return text
var integer = Num.fromString(text.trim())
if (!integer || !integer.isInteger || integer < min) {
System.print("Must be an integer no less than %(min), try again.")
Line 391 ⟶ 407:
while (true) {
Output.fwrite(prompt)
var integertext = Num.fromString(Stdin.readLine().trim())
if (text == __quit) return text
var integer = Num.fromString(text.trim())
if (!integer || !integer.isInteger || integer < min || integer > max) {
System.print("Must be an integer between %(min) and %(max), try again.")
Line 408 ⟶ 426:
Output.fwrite(prompt)
var option = Stdin.readLine()
if (option == __quit) return option
if (option.count == 0) {
System.print("Option must have (at least) one character, try again")
Line 427 ⟶ 446:
while (true) {
Output.fwrite(prompt)
var option = Stdin.readLine().trim()
if (option == __quit) return option
option = option.trim()
if (!options.contains(option)) {
System.print("Must be one of %(options), try again.")
Line 442 ⟶ 463:
while (true) {
Output.fwrite(prompt)
var option = Num.fromString(Stdin.readLine().trim())
if (option == __quit) return option
option = Num.fromString(option.trim())
if (!option || !options.contains(option)) {
System.print("Must be one of %(options), try again.")
Line 457 ⟶ 480:
while (true) {
Output.fwrite(prompt)
var option = Num.fromString(Stdin.readLine().trim())
if (option == __quit) return option
option = Num.fromString(option.trim())
if (!option || !option.isInteger || !options.contains(option)) {
System.print("Must be one of %(options), try again.")
Line 497 ⟶ 522:
}
} else if (byte == 10 || byte == 13) {
if (pwd != __quit && pwd.count < minLen) {
System.print("\nMinimum length is %(minLen) characters, try again.")
pwd = ""
9,492

edits