Ejemplo n.º 1
0
def sys_info(inter):
    now = dt.datetime.now()
    current_date = (((now.year - 1900) * 256 * 256) + (now.month * 256) +
                    now.day)
    current_time = ((now.hour * 256 * 256) + (now.minute * 256) +
                    now.second)
    size_stack_stack = [len(stack) for stack in inter.stack_stack]
    sys_data = [len(inter.stack_stack), current_time, current_date,
                len(inter.program[-1]), len(inter.program),
                inter.storage_offset, inter.storage_offset,
                inter.delta[0], inter.delta[1], inter.ip[0],
                inter.ip[1], 0, 0, 2, ord(os.sep), 3, 1, 0,
                int((len(f'{sys.maxsize:b}') + 1) / 8), int('01110', 2)]
    environ = [f'{key}={value}' for (key, value) in os.environ.items()]

    num = u.pop_with_zero(inter)
    count = (len(size_stack_stack) + len(sys_data) + len(environ) +
             len(sys.argv[1:]))
    for var in environ:
        u.write_string_to_stack(inter, var)

    for arg in sys.argv[:1]:
        u.write_string_to_stack(inter, arg)

    for size in size_stack_stack:
        inter.stack.append(size)

    for data in sys_data:
        inter.stack.append(data)

    if num > 0:
        chosen_cell = inter.stack[-num]
        for i in range(count):
            u.pop_with_zero(inter)
        inter.stack.append(chosen_cell)
Ejemplo n.º 2
0
def read_line(inter):
    file_num = u.pop_with_zero(inter)

    try:
        line = inter.files[file_num]['file'].readline()
        inter.stack.append(file_num)
        u.write_string_to_stack(inter, line)
    except Exception:
        inter.delta = u.multiply_delta(inter, -1)
Ejemplo n.º 3
0
def get_from_pos(inter):
    y = u.pop_with_zero(inter)
    x = u.pop_with_zero(inter)
    res = []
    cur_char = ''
    while cur_char != '0':
        res.append(cur_char)
        cur_char = inter.program[y][x]
        x += 1
    u.write_string_to_stack(inter, ''.join(res))
Ejemplo n.º 4
0
def input_str(inter):
    if not inter.input_mode:
        inter.input_mode = True
        return
    inter.input_mode = False
    res = []
    cur_char = inter.io.get()
    while cur_char and cur_char != '\n':
        res.append(cur_char)
        cur_char = inter.io.get()
    u.write_string_to_stack(inter, ''.join(res))
Ejemplo n.º 5
0
 def test_load_unload_fp(self):
     u.write_string_to_stack(self.inter, 'STRN')
     self.inter.stack.append(4)
     cmds.execute_command(self.inter, '(')
     self.assertEqual('STRN', self.inter.imported_fps[0]['semantics'])
     self.assertIn('A', cmds.commands.commands)
     self.assertIn('C', cmds.commands.commands)
     self.assertIn('D', cmds.commands.commands)
     self.assertIn('P', cmds.commands.commands)
     cmds.execute_command(self.inter, ')')
     self.assertEqual(len(self.inter.imported_fps), 0)
     self.assertNotIn('A', cmds.commands.commands)
     self.assertNotIn('C', cmds.commands.commands)
     self.assertNotIn('D', cmds.commands.commands)
     self.assertNotIn('P', cmds.commands.commands)
Ejemplo n.º 6
0
 def test_execute_failure(self):
     u.write_string_to_stack(self.inter, 'eco')
     cmds.execute_command(self.inter, "=")
     self.assertNotEqual(0, u.pop_with_zero(self.inter))
Ejemplo n.º 7
0
 def test_execute(self):
     u.write_string_to_stack(self.inter, 'echo "hi"')
     cmds.execute_command(self.inter, "=")
     self.assertEqual(0, self.inter.stack.pop())
Ejemplo n.º 8
0
def length(inter):
    string = u.collect_string_from_stack(inter)
    u.write_string_to_stack(inter, string)
    inter.stack.append(len(string))
Ejemplo n.º 9
0
def substr(inter):
    count = u.pop_with_zero(inter)
    start = u.pop_with_zero(inter)
    string = u.collect_string_from_stack(inter)

    u.write_string_to_stack(inter, string[start:start + count])
Ejemplo n.º 10
0
def right(inter):
    count = u.pop_with_zero(inter)
    string = u.collect_string_from_stack(inter)

    u.write_string_to_stack(inter, string[-count:])
Ejemplo n.º 11
0
def append(inter):
    a = u.collect_string_from_stack(inter)
    b = u.collect_string_from_stack(inter)
    u.write_string_to_stack(inter, b + a)
Ejemplo n.º 12
0
def left(inter):
    count = u.pop_with_zero(inter)
    string = u.collect_string_from_stack(inter)

    u.write_string_to_stack(inter, string[:count])
Ejemplo n.º 13
0
def num_to_str(inter):
    num = u.pop_with_zero(inter)
    u.write_string_to_stack(inter, str(num))