From 0e2ea1996e6840bd6ec85b6035a6d323daa329d7 Mon Sep 17 00:00:00 2001 From: The-UltimateGamer <2357931342@qq.com> Date: Sun, 23 Aug 2020 20:32:01 +0800 Subject: [PATCH] faulty input --- kernel.py | 77 +++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 64 insertions(+), 13 deletions(-) diff --git a/kernel.py b/kernel.py index d0c9c8a..9c61be7 100644 --- a/kernel.py +++ b/kernel.py @@ -20,7 +20,7 @@ def ls(working_dir, args): def cat(working_dir, args): if not args: - print("Missing argument. Usage: cat ", end='') + print("Missing argument. Usage: cat ", end='\r') return for target in args: files = open("files.img", 'r+') @@ -32,9 +32,10 @@ def cat(working_dir, args): for i in range(i+2, len(lines)): if lines[i] and lines[i][0] == '!': break contents.append(lines[i]) + print(contents) break else: - print("cat: %s: no such file or directory" % target, end='') + print("cat: %s: no such file" % target, end='\r') print('\r'.join(contents)) files.close() @@ -239,6 +240,7 @@ def __init__(self, x, y, w, h): self.txtBuffer = [] self.content = [] self.lastKey = '' + # ↓ MAGIC ↓ # self.caps = { '`': '~', '1': '!', '2': '@', '3': '#', '4': '$', '5': '%', '6': '^', '7': '&', '8': '*', '9': '(', '0': ')', '-': '_', '=': '+', '[': '{', ']': '}', '\\': '|', ';': ':', '\'': '"', ',': '<', '.': '>', '/': '?', 'a': 'A', 'b': 'B', 'c': 'C', 'd': 'D', 'e': 'E', 'f': 'F', 'g': 'G', 'h': 'H', 'i': 'I', 'j': 'J', 'k': 'K', 'l': 'L', 'm': 'M', 'n': 'N', 'o': 'O', 'p': 'P', 'q': 'Q', 'r': 'R', 's': 'S', 't': 'T', 'u': 'U', 'v': 'V', 'w': 'W', 'x': 'X', 'y': 'Y', 'z': 'Z' } self.shift, self.capsLock = False, False self.raster = pygame.font.Font("res/Perfect_DOS_VGA_437.ttf", 16) @@ -306,21 +308,74 @@ def calc(self): def vis(self, args): if not args: print("Missing argument. Usage: vis ", end='\r') + if '/' in args[0]: + print("No.", end='\r') + return while True: - cmd = input() - print(cmd, end='\r') + cmd = "" + for event in pygame.event.get(): + if event.type == pygame.KEYDOWN: + if event.key == pygame.K_i: + cmd = "i" + print("--INSERT--", end='\r') + framework.launch() + break + else: + print("?", end='\r') + framework.launch() + elif event.type == pygame.QUIT: + pygame.quit() + sys.exit() if cmd == "i": rm(self.pwd, args[0]) files = open("files.img", 'r+') files.write("!FNAME=" + args[0] + "\n") - files.write("!LOC=" + working_dir + "\n") + files.write("!LOC=" + self.pwd + "\n") while True: - line = input() - print(line, end = '\r') + line = [] + for event in pygame.event.get(): + if event.type == pygame.KEYDOWN: + if event.key == pygame.K_BACKSPACE: + try: line.pop() + except: pass + elif event.key == pygame.K_RETURN: + print(line, end='\r') + pygame.display.update() + clock.tick(50) + break + elif event.key == pygame.K_TAB: + for i in range(4): + line.append(' ') + elif event.key == pygame.K_LSHIFT or event.key == pygame.K_RSHIFT: + self.shift = True + elif event.key == pygame.K_CAPSLOCK: + self.capsLock = 1 - self.capsLock + else: + if 32 <= event.key <= 126: + if (event.key == 39 or 44 <= event.key <= 57 or event.key == 59 or event.key == 61 or event.key == 96 or 91 <= event.key <= 93) and self.shift: + line.append(self.caps[chr(event.key)]) + elif 97 <= event.key <= 122 and (self.shift or self.capsLock): + line.append(self.caps[chr(event.key)]) + else: + line.append(chr(event.key)) + print(line, end='\r') + pygame.display.update() + clock.tick(50) + elif event.type == pygame.KEYUP: + if event.key == pygame.K_LSHIFT or event.key == pygame.K_RSHIFT: + self.shift = False + elif event.key == pygame.K_CAPSLOCK: + self.capsLock = 1 - self.capsLock + elif event.type == pygame.QUIT: + pygame.quit() + sys.exit() + print(line, end = '\r') + pygame.display.update() + clock.tick(50) if line == ".": break line += '\n' - files.write(line) + files.write(''.join(line)) files.close() elif cmd == "q": return @@ -331,7 +386,6 @@ def exec_cmd(self, on_scr): try: main = cmd.pop(0) except: main = None output = io.StringIO() - sys.stdin = output with redirect_stdout(output): if main: if main == 'cd': self.cd(cmd[0]) @@ -343,8 +397,7 @@ def exec_cmd(self, on_scr): else: pass self.txtBuffer.append('\r') self.txtBuffer += list(output.getvalue().rstrip('\n')) - sys.stdin = sys.__stdin__ - self.placeholder.append('%s$ ' % self.pwd) + self.placeholder.append('%s# ' % self.pwd) def keyUp(self, key): if key == pygame.K_LSHIFT or key == pygame.K_RSHIFT: self.shift = False @@ -380,10 +433,8 @@ def keyDown(self, key): self.lastKey = self.caps[chr(key)] elif 97 <= event.key <= 122 and (self.shift or self.capsLock): self.txtBuffer.append(self.caps[chr(key)]) - self.lastKey = self.caps[chr(key)] else: self.txtBuffer.append(chr(key)) - self.lastKey = chr(key) class Secret: def __init__(self, rect, dialogID):