You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
40 lines
1.3 KiB
40 lines
1.3 KiB
import fibonaccios.exceptions |
|
import shlex |
|
import console |
|
|
|
def get_app_class(template): |
|
class App(template): |
|
def F_main(self): |
|
self.jump('prompt') |
|
|
|
def F_prompt(self): |
|
console.print(self.console, 'FibonacciOS sh # ', end="") |
|
self.store['buf'] = [] |
|
self.jump('input') |
|
|
|
def F_input(self): |
|
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: |
|
try: |
|
if line[0] == 'bg': |
|
self.launch(*line[1:]) |
|
elif line[0] == 'cd': |
|
self.chdir(line[1]) |
|
elif line[0] == 'exit': |
|
self.exit() |
|
else: |
|
pid = self.launch(*line) |
|
self.wait(pid) |
|
self.transfer_console(pid) |
|
except fibonaccios.exceptions.AppNotFound as e: |
|
console.print(self.console, 'error: app not found') |
|
self.jump('prompt') |
|
|
|
return App
|
|
|