def print_line(inter): file_num = u.pop_with_zero(inter) line = u.collect_string_from_stack(inter) try: inter.files[file_num]['file'].write(f'{line}\n') inter.stack.append(file_num) except Exception: inter.delta = u.multiply_delta(inter, -1)
def put_to_pos(inter): y = u.pop_with_zero(inter) x = u.pop_with_zero(inter) string = u.collect_string_from_stack(inter) while len(inter.program) <= y: inter.program.append([' '] * u.get_max_len(inter.program)) for letter in string: inter.program[y][x] = letter x += 1 inter.program[y][x] = '0'
def input_file(inter): filename = u.collect_string_from_stack(inter) y = u.pop_with_zero(inter) x = u.pop_with_zero(inter) try: with open(filename, "r") as f: last_x, last_y = u.write_file_to_program(inter, f, x, y) inter.stack.append(last_x) inter.stack.append(last_y) except OSError: execute_command(inter, "r")
def output_file(inter): filename = u.collect_string_from_stack(inter) f_y = u.pop_with_zero(inter) f_x = u.pop_with_zero(inter) s_y = u.pop_with_zero(inter) s_x = u.pop_with_zero(inter) lines_len = s_x - f_x try: with open(filename, "w") as f: for y in range(f_y, s_y + 1): f.write(u.get_line_from_space(inter, f_x, y, lines_len)) except OSError: execute_command(inter, "r")
def open_file(inter): filename = u.collect_string_from_stack(inter) m = u.pop_with_zero(inter) y = u.pop_with_zero(inter) x = u.pop_with_zero(inter) try: mode = open_file_mode[m] except IndexError: inter.delta = u.multiply_delta(inter, -1) return try: opened_file = open(filename, mode, encoding='utf-8') inter.files.append({'file': opened_file, 'buffer_start': [x, y], 'buffer_end': x}) inter.stack.append(len(inter.files) - 1) except OSError: inter.delta = u.multiply_delta(inter, -1)
def delete_file(inter): filename = u.collect_string_from_stack(inter) try: os.remove(filename) except OSError: inter.delta = u.multiply_delta(inter, -1)
def execute(inter): inter.stack.append(os.system(u.collect_string_from_stack(inter)))
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 display(inter): a = u.collect_string_from_stack(inter) inter.io.write(a)
def compare(inter): a = u.collect_string_from_stack(inter) b = u.collect_string_from_stack(inter) inter.stack.append(int(a == b))
def num_to_str(inter): string = u.collect_string_from_stack(inter) inter.stack.append(int(string))