Esempio n. 1
0
 def handle_error(self, e):
     """ Handle a BASIC error through error message. """
     # not handled by ON ERROR, stop execution
     console.write_error_message(e.message, program.get_line_number(e.pos))
     state.basic_state.error_handle_mode = False
     state.basic_state.parse_mode = False
     state.basic_state.input_mode = False
     # special case: syntax error
     if e.err == error.STX:
         # for some reason, err is reset to zero by GW-BASIC in this case.
         state.basic_state.errn = 0
         if e.pos != -1:
             # line edit gadget appears
             state.basic_state.edit_prompt = (program.get_line_number(e.pos), e.pos+1)
Esempio n. 2
0
def handle_error(e):
    """ Handle a BASIC error through error message. """
    # not handled by ON ERROR, stop execution
    console.write_error_message(e.message, program.get_line_number(e.pos))
    state.basic_state.error_handle_mode = False
    state.basic_state.execute_mode = False
    state.basic_state.input_mode = False
    # special case: syntax error
    if e.err == error.STX:
        # for some reason, err is reset to zero by GW-BASIC in this case.
        state.basic_state.errn = 0
        if e.pos != -1:
            # line edit gadget appears
            state.basic_state.edit_prompt = (program.get_line_number(e.pos), e.pos+1)
Esempio n. 3
0
def handle_error(s):
    """ Handle a BASIC error through trapping or error message. """
    error.set_err(s)
    # not handled by ON ERROR, stop execution
    console.write_error_message(error.get_message(s.err), program.get_line_number(s.pos))
    state.basic_state.error_handle_mode = False
    state.basic_state.execute_mode = False
    state.basic_state.input_mode = False
    # special case: syntax error
    if s.err == 2:
        # for some reason, err is reset to zero by GW-BASIC in this case.
        state.basic_state.errn = 0
        if s.pos != -1:
            # line edit gadget appears
            state.basic_state.edit_prompt = (program.get_line_number(s.pos),
                                             state.basic_state.bytecode.tell())
Esempio n. 4
0
def handle_error(s):
    """ Handle a BASIC error through trapping or error message. """
    error.set_err(s)
    # not handled by ON ERROR, stop execution
    console.write_error_message(error.get_message(s.err), program.get_line_number(s.pos))
    state.basic_state.error_handle_mode = False
    state.basic_state.execute_mode = False
    state.basic_state.input_mode = False
    # special case: syntax error
    if s.err == 2:
        # for some reason, err is reset to zero by GW-BASIC in this case.
        state.basic_state.errn = 0
        if s.pos != -1:
            # line edit gadget appears
            state.basic_state.edit_prompt = (program.get_line_number(s.pos),
                                             state.basic_state.bytecode.tell())
Esempio n. 5
0
def value_erl(ins):
    """ ERL: get line number of last error. """
    if state.basic_state.errp == 0:
        erl = 0
    elif state.basic_state.errp == -1:
        erl = 65535
    else:
        erl = program.get_line_number(state.basic_state.errp)
    return fp.pack(fp.Single.from_int(erl))
Esempio n. 6
0
def bluescreen(e):
    """ Display a modal exception message. """
    state.console_state.screen.screen(0, 0, 0, 0, new_width=80)
    console.clear()
    console.init_mode()
    exc_type, exc_value, exc_traceback = sys.exc_info()
    # log the standard python error
    logging.error(''.join(traceback.format_exception(exc_type, exc_value, exc_traceback)))
    # format the error more readably on the screen
    state.console_state.screen.set_border(4)
    state.console_state.screen.set_attr(0x70)
    console.write_line('EXCEPTION')
    state.console_state.screen.set_attr(15)
    if state.basic_state.run_mode:
        state.basic_state.bytecode.seek(-1, 1)
        program.edit(program.get_line_number(state.basic_state.bytecode.tell()),
                                         state.basic_state.bytecode.tell())
        console.write_line('\n')
    else:
        state.basic_state.direct_line.seek(0)
        console.write_line(str(tokenise.detokenise_compound_statement(state.basic_state.direct_line)[0])+'\n')
    stack = traceback.extract_tb(exc_traceback)
    for s in stack[-4:]:
        stack_line = '{0}:{1}, {2}'.format(
            os.path.split(s[0])[-1], s[1], s[2])
        stack_line_2 = '    {0}'.format(s[3])
        state.console_state.screen.set_attr(15)
        console.write_line(stack_line)
        state.console_state.screen.set_attr(7)
        console.write_line(stack_line_2)
    exc_message = traceback.format_exception_only(exc_type, exc_value)[0]
    state.console_state.screen.set_attr(15)
    console.write('{0}:'.format(exc_type.__name__))
    state.console_state.screen.set_attr(7)
    console.write_line(' {0}'.format(str(exc_value)))
    state.console_state.screen.set_attr(0x70)
    console.write_line(
        '\nThis is a bug in PC-BASIC.')
    state.console_state.screen.set_attr(7)
    console.write(
        'Sorry about that. Please send the above messages to the bugs forum\nby e-mail to ')
    state.console_state.screen.set_attr(15)
    console.write(
        '*****@*****.**')
    state.console_state.screen.set_attr(7)
    console.write(
        ' or by filing a bug\nreport at ')
    state.console_state.screen.set_attr(15)
    console.write(
        'https://github.com/robhagemans/pcbasic/issues')
    state.console_state.screen.set_attr(7)
    console.write_line(
        '. Please include')
    console.write_line('as much information as you can about what you were doing and how this happened.')
    console.write_line('Thank you!')
    state.console_state.screen.set_attr(7)
    flow.set_pointer(False)
Esempio n. 7
0
def bluescreen(e):
    """ Display a modal exception message. """
    state.console_state.screen.screen(0, 0, 0, 0, new_width=80)
    console.clear()
    console.init_mode()
    exc_type, exc_value, exc_traceback = sys.exc_info()
    # log the standard python error
    logging.error(''.join(traceback.format_exception(exc_type, exc_value, exc_traceback)))
    # format the error more readably on the screen
    state.console_state.screen.set_border(4)
    state.console_state.screen.set_attr(0x70)
    console.write_line('EXCEPTION')
    state.console_state.screen.set_attr(15)
    if state.basic_state.run_mode:
        state.basic_state.bytecode.seek(-1, 1)
        program.edit(program.get_line_number(state.basic_state.bytecode.tell()),
                                         state.basic_state.bytecode.tell())
        console.write_line('\n')
    else:
        state.basic_state.direct_line.seek(0)
        console.write_line(str(tokenise.detokenise_compound_statement(state.basic_state.direct_line)[0])+'\n')
    stack = traceback.extract_tb(exc_traceback)
    for s in stack[-4:]:
        stack_line = '{0}:{1}, {2}'.format(
            os.path.split(s[0])[-1], s[1], s[2])
        stack_line_2 = '    {0}'.format(s[3])
        state.console_state.screen.set_attr(15)
        console.write_line(stack_line)
        state.console_state.screen.set_attr(7)
        console.write_line(stack_line_2)
    exc_message = traceback.format_exception_only(exc_type, exc_value)[0]
    state.console_state.screen.set_attr(15)
    console.write('{0}:'.format(exc_type.__name__))
    state.console_state.screen.set_attr(7)
    console.write_line(' {0}'.format(str(exc_value)))
    state.console_state.screen.set_attr(0x70)
    console.write_line(
        '\nThis is a bug in PC-BASIC.')
    state.console_state.screen.set_attr(7)
    console.write(
        'Sorry about that. Please send the above messages to the bugs forum\nby e-mail to ')
    state.console_state.screen.set_attr(15)
    console.write(
        '*****@*****.**')
    state.console_state.screen.set_attr(7)
    console.write(
        ' or by filing a bug\nreport at ')
    state.console_state.screen.set_attr(15)
    console.write(
        'https://github.com/robhagemans/pcbasic/issues')
    state.console_state.screen.set_attr(7)
    console.write_line(
        '. Please include')
    console.write_line('as much information as you can about what you were doing and how this happened.')
    console.write_line('Thank you!')
    state.console_state.screen.set_attr(7)
    flow.set_pointer(False)
Esempio n. 8
0
 def handle_break(self, e):
     """ Handle a Break event. """
     # print ^C at current position
     if not state.basic_state.input_mode and not e.stop:
         console.write('^C')
     # if we're in a program, save pointer
     pos = -1
     if state.basic_state.run_mode:
         pos = state.basic_state.bytecode.tell()
         state.basic_state.stop = pos
     console.write_error_message(e.message, program.get_line_number(pos))
     state.basic_state.parse_mode = False
     state.basic_state.input_mode = False
Esempio n. 9
0
def handle_break(e):
    """ Handle a Break event. """
    # print ^C at current position
    if not state.basic_state.input_mode and not e.stop:
        console.write('^C')
    # if we're in a program, save pointer
    if state.basic_state.run_mode:
        console.write_error_message("Break", program.get_line_number(e.pos))
        state.basic_state.stop = state.basic_state.bytecode.tell()
    else:
        console.write_error_message("Break", -1)
    state.basic_state.execute_mode = False
    state.basic_state.input_mode = False
Esempio n. 10
0
def handle_break(e):
    """ Handle a Break event. """
    # print ^C at current position
    if not state.basic_state.input_mode and not e.stop:
        console.write('^C')
    # if we're in a program, save pointer
    if state.basic_state.run_mode:
        console.write_error_message("Break", program.get_line_number(e.pos))
        state.basic_state.stop = state.basic_state.bytecode.tell()
    else:
        console.write_error_message("Break", -1)
    state.basic_state.execute_mode = False
    state.basic_state.input_mode = False
Esempio n. 11
0
def value_erl(ins):
    """ ERL: get line number of last error. """
    return fp.pack(fp.Single.from_int(program.get_line_number(state.basic_state.errp)))
Esempio n. 12
0
def value_erl(ins):
    """ ERL: get line number of last error. """
    return fp.pack(
        fp.Single.from_int(program.get_line_number(state.basic_state.errp)))