# Note: # Crystal already has "readline" library. # I implemented a subset of it again for practice. @[Link("readline")] lib LibReadline fun readline(prompt : UInt8*) : UInt8* fun add_history(line : UInt8*) end def my_readline(prompt = "") line = LibReadline.readline(prompt) if line LibReadline.add_history(line) String.new(line) else nil end ensure LibC.free(line as Void*) if line end