//
// Esdia.swift
// General purpose... YMMV
//
// Created by coti on 25/3/16.
// Copyright © 2016 coti. All rights reserved.
//
// 19. 4. 2017 (readDouble(prompt:) hinzugefügt
// To Do - add readXXX for Int and Float without limits
//
import Foundation
enum OutputType {
case error
case standard
}
public class Esdia {
public class func readInt(prompt:String?) -> Int? {
var resultado:Int?
repeat {
if let p = prompt {
print(p, terminator: "")
}
if let temp = readLine() {
resultado = Int(temp)
break
}
} while true
return resultado
}
public class func readFloat(prompt:String?) -> Float? {
var resultado:Float?
repeat {
if let p = prompt {
print(p, terminator: "")
}
if let temp = readLine() {
resultado = Float(temp)
break
}
} while true
return resultado
}
public class func readInt(prompt:String?, minValue:Int?, maxValue:Int?) -> Int? {
var resultado:Int? = nil
repeat {
if let p = prompt,
let min = minValue,
let max = maxValue {
print(p + " between \(min) and \(max) : ", terminator: "")
} else {
print("\nPrompt or valid interval undefined\n")
break
}
if let temp = readLine() {
resultado = Int(temp)
if let r = resultado {
if r >= minValue! && r <= maxValue! {
break
} else {
print("\nPlease enter a value between \(minValue!) and \(maxValue!)\n")
}
}
}
} while true
return resultado
}
public class func readDouble(prompt:String?, minValue:Double?, maxValue:Double?) -> Double? {
var resultado:Double? = nil
repeat {
if let p = prompt,
let min = minValue,
let max = maxValue {
print(p + " between \(min) and \(max) : ", terminator: "")
} else {
print("\nPrompt or valid interval undefined\n")
break
}
if let temp = readLine() {
resultado = Double(temp)
if let r = resultado {
if r >= minValue! && r <= maxValue! {
break
} else {
print("\nPlease enter a value between \(minValue!) and \(maxValue!)\n")
}
}
}
} while true
return resultado
}
public class func readDouble(withPrompt p:String = "") -> Double? {
repeat {
print(p, terminator: "")
if let temp = readLine(),
let result = Double(temp) {
return result
}
} while true
}
public class func readStringWithPrompt(_ prompt:String) -> String? {
print("\(prompt)", terminator:" ")
let x = readLine(strippingNewline: true)!
return x
}
public class func writeMessage(_ message: String) {
print("\u{001B}[;m\(message)")
}
public class func writeMessageToError(_ message: String) {
fputs("\u{001B}[0;31m\(message)\u{001B}[;m\n", stderr)
}
}