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)
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)
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))
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))
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)
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))
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())
def length(inter): string = u.collect_string_from_stack(inter) u.write_string_to_stack(inter, string) inter.stack.append(len(string))
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])
def right(inter): count = u.pop_with_zero(inter) string = u.collect_string_from_stack(inter) u.write_string_to_stack(inter, string[-count:])
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)
def left(inter): count = u.pop_with_zero(inter) string = u.collect_string_from_stack(inter) u.write_string_to_stack(inter, string[:count])
def num_to_str(inter): num = u.pop_with_zero(inter) u.write_string_to_stack(inter, str(num))