diff --git a/src/main/resources/assets/opencomputers/loot/openos/lib/tty.lua b/src/main/resources/assets/opencomputers/loot/openos/lib/tty.lua index 91b6c6d66..4a76dc8be 100644 --- a/src/main/resources/assets/opencomputers/loot/openos/lib/tty.lua +++ b/src/main/resources/assets/opencomputers/loot/openos/lib/tty.lua @@ -103,7 +103,7 @@ function tty.stream:write(value) local x, y = tty.getCursor() - local _, ei, delim = unicode.sub(window.output_buffer, 1, window.width):find("([\27\t\r\n\a])") + local _, ei, delim = unicode.sub(window.output_buffer, 1, window.width):find("([\27\t\r\n\a\b\15])") local segment = ansi_print .. (ei and window.output_buffer:sub(1, ei - 1) or window.output_buffer) if segment ~= "" then @@ -132,9 +132,13 @@ function tty.stream:write(value) if delim == "\t" then x = ((x-1) - ((x-1) % 8)) + 9 - elseif delim == "\r" or (delim == "\n" and not window.cr_last) then + elseif delim == "\r" then + x = 1 + elseif delim == "\n" then x = 1 y = y + 1 + elseif delim == "\b" then + x = x - 1 elseif delim == "\a" and not beeped then computer.beep() beeped = true @@ -143,7 +147,6 @@ function tty.stream:write(value) end tty.setCursor(x, y) - window.cr_last = delim == "\r" end return cursor.sy end diff --git a/src/main/scala/li/cil/oc/common/tileentity/DiskDrive.scala b/src/main/scala/li/cil/oc/common/tileentity/DiskDrive.scala index 36dd6d6f8..be3b36d38 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/DiskDrive.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/DiskDrive.scala @@ -55,12 +55,12 @@ class DiskDrive extends traits.Environment with traits.ComponentInventory with t withComponent("disk_drive"). create() - @Callback(doc = """function():boolean -- Checks whether some medium is currently in the drive.""") + @Callback(doc = "function():boolean -- Checks whether some medium is currently in the drive.") def isEmpty(context: Context, args: Arguments): Array[AnyRef] = { result(filesystemNode.isEmpty) } - @Callback(doc = """function([velocity:number]):boolean -- Eject the currently present medium from the drive.""") + @Callback(doc = "function([velocity:number]):boolean -- Eject the currently present medium from the drive.") def eject(context: Context, args: Arguments): Array[AnyRef] = { val velocity = args.optDouble(0, 0) max 0 min 1 val ejected = decrStackSize(0, 1) @@ -77,6 +77,14 @@ class DiskDrive extends traits.Environment with traits.ComponentInventory with t else result(false) } + @Callback(doc = "function(): string -- Return the internal floppy disk address") + def media(context: Context, args: Arguments): Array[AnyRef] = { + if (filesystemNode.isEmpty) + result(Unit, "drive is empty") + else + result(filesystemNode.head.address) + } + // ----------------------------------------------------------------------- // // Analyzable