Browse Source

Command-line improvements

master
Samuel Sloniker 1 year ago
parent
commit
316a6b0d0c
Signed by: kj7rrv
GPG Key ID: 1BB4029E66285A62
  1. 41
      bin/grep.py
  2. 6
      bin/init.py
  3. 7
      bin/sh.py
  4. 2
      lib/console.py

41
bin/grep.py

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

6
bin/init.py

@ -1,4 +1,5 @@
import shlex
import console
def get_app_class(template):
class App(template):
@ -13,6 +14,11 @@ def get_app_class(template):
self.next_function = 'loop'
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
return App

7
bin/sh.py

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

2
lib/console.py

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

Loading…
Cancel
Save