Command-line improvements

This commit is contained in:
Samuel Sloniker 2022-12-01 19:16:39 -08:00
parent 133cf044c4
commit 316a6b0d0c
Signed by: kj7rrv
GPG Key ID: 1BB4029E66285A62
4 changed files with 43 additions and 13 deletions

View File

@ -6,20 +6,37 @@ def get_app_class(template):
class App(template): class App(template):
def F_main(self): def F_main(self):
pattern = self.argv[1].encode("utf-8") pattern = self.argv[1].encode("utf-8")
file = self.argv[2] files = self.argv[2:]
if files:
prefix = len(files) > 1
for file in files:
try: try:
with open(file, "rb") as f: with open(file, "rb") as f:
for line in f.readlines(): for line in f.readlines():
if re.search(pattern, line): if re.search(pattern, line):
self.console.write(line) self.console.write((f"{file}:".encode("utf-8") if prefix else b"") + line)
except OSError as e: except OSError as e:
try: try:
os.listdir(file) os.listdir(file)
console.print(self.console, f"grep: {file}: Is a directory") console.print(self.console, f"grep: {file}: Is a directory")
except OSError: except OSError:
console.print(self.console, f"grep: {file}: No such file or directory") console.print(self.console, f"grep: {file}: No such file or directory")
self.exit() self.exit()
else:
self.store["pattern"] = pattern
self.store["buffer"] = []
self.jump("loop")
def F_loop(self):
try:
line = console.read(self.console, self.store["buffer"])
except EOFError:
self.exit()
return
if line and re.search(self.store["pattern"], line):
self.console.write(line + b"\n")
return App return App

View File

@ -1,4 +1,5 @@
import shlex import shlex
import console
def get_app_class(template): def get_app_class(template):
class App(template): class App(template):
@ -13,6 +14,11 @@ def get_app_class(template):
self.next_function = 'loop' self.next_function = 'loop'
def F_loop(self): def F_loop(self):
if len(self.os.apps) == 1:
console.print(self.console, "All processes have quit.")
self.jump("end")
def F_end(self):
pass pass
return App return App

View File

@ -13,7 +13,12 @@ def get_app_class(template):
self.jump('input') self.jump('input')
def F_input(self): def F_input(self):
try:
raw_line = console.read(self.console, self.store['buf']) raw_line = console.read(self.console, self.store['buf'])
except EOFError:
self.exit()
return
if raw_line is not None: if raw_line is not None:
line = shlex.split(raw_line.decode('ascii')) line = shlex.split(raw_line.decode('ascii'))
if line: if line:

View File

@ -10,6 +10,8 @@ def read(console, buffer):
data = b''.join(buffer) data = b''.join(buffer)
buffer.clear() buffer.clear()
return data return data
elif char == b'\x04' and not buffer:
raise EOFError()
elif len(char) == 1: elif len(char) == 1:
console.write(char) console.write(char)
buffer.append(char) buffer.append(char)