Ejemplo n.º 1
0
    def on_pubmsg(self, c, e):
        self.print_log(e)
        try:
            user = e.source().nick
            msg = e.arguments()[0]
            if user not in self.user_list :
                msg = e.arguments()[0]
                pattern = re.search(c.get_nickname()+"\s*:\s*(.*)", msg)
                if not pattern: return
                cmd = pattern.group(1).strip()
                print cmd
                if cmd == 'BASIC':
                    self.user_list.append(user)
                    self.notice('enter BASIC mode')
                return
        except Exception as e:
            print >> sys.stderr, "Unexpected error:", e.message
            return

        self.msg_buffer = ''
        try:
            if msg.strip().upper() == 'SYSTEM':
                self.user_list.remove(user)
                self.notice('bye > ' + user)
                return

            sys.stdout = self # 標準出力をフックしてIRCにnoticeで発言
            prog = basparse.parse(msg.strip()+'\n')
            if not prog: return

            keys = list(prog)
            if keys[0] > 0:
                self.interpreter.add_statements(prog)
            else:
                stat = prog[keys[0]]
                if stat[0] == 'RUN':
                    try:
                        self.interpreter.run()
                    except RuntimeError:
                        pass
                elif stat[0] == 'LIST':
                    self.interpreter.list(stat[1])
                elif stat[0] == 'BLANK':
                    self.interpreter.del_line(stat[1])
                elif stat[0] == 'NEW':
                    self.interpreter.new()
                elif stat[0] == 'RENUM':
                    self.interpreter.renum(stat[1])
                elif stat[0] == 'SAVE':
                    self.interpreter.save(stat[1])
                elif stat[0] == 'LOAD':
                    self.interpreter.load(stat[1], stat[2])
            if self.msg_buffer:
                self.notice(self.msg_buffer.replace('\n', '\r\nNOTICE ' + self.channel + ' :').encode("utf-8"))
                print >> sys.stderr, self.msg_buffer
        except Exception as e:
            print >> sys.stderr, "Unexpected error:", e.message
        finally:
            sys.stdout = sys.__stdout__
            self.msg_buffer = ''
Ejemplo n.º 2
0
    def plying(self, port=0, method=0):   # 0: line by line 1: Lex-Yacc method    

        print "thread plying starts.."
        self.clear_status()  
        self.timer_event()     
        if method == 0:
            for cmd in self.cmds:
                if self.ThreadOfBatch == None or not self.ThreadOfBatch.is_alive():
                    self.ThreadOfBatch = Thread(target=self.batching, args=(port, cmd, "AUTO"))
                    self.ThreadOfBatch.start()
                    time.sleep(0.1)
                    self.ThreadOfBatch.join(1)  # 1) join() only waits for a thread to finish. it won't make executing any thread.
                                                # 2) join(timieout) will stop blocking after timeout, but will not terminate the thread if it is still running.
                    if self.ThreadOfBatch.is_alive():
                        self.batch_is_timeout = 1
                    print 'batching ended'
                else:
                    print "batching is in use"
                if self.get_check_status() != 0:
                    #self.check_status = 2
                    break
                #time.sleep(0.01)
        else:
            import basparse
            import basinterp
            prog = basparse.parse(open(self.cmds).read())
            if not prog: 
                self.set_console_text("*.BAS script basparse import error.")
                self.set_check_status(1)
            else:
                try:
                    basinterp.BasicInterpreter(prog, self).run()
                except RuntimeError:
                    self.set_console_text("*.BAS script basinterp error.")
                    self.set_check_status(1)

        CERT_VALUE = datetime.datetime.now()
        CERT_VALUE = CERT_VALUE.strftime("%Y-%m-%d %H:%M:%S")  
        if self.get_check_status() == 0:
            filename = "PASS"
        else:
            filename = "FAIL"              
        filename = str(self.serial_number) + filename + str(CERT_VALUE)
        filename = re.sub(r'[^a-zA-Z0-9]', '', filename)
        start, end = self.TextBufferOfLog.get_bounds()
        console_log = self.TextBufferOfLog.get_text(start, end)
        
        if self.save_to_log('./certification/', filename, console_log) == 1:
            self.set_console_text("LOG failed.")    
            self.set_check_status_led(1)
        else:
            self.set_check_status_led()

        self.batching_result = {}
        #gtk.threads_enter()                    
        gobject.idle_add(self.EntryOfSerialNumber.set_text, '')
        gobject.idle_add(self.EntryOfSerialNumber.grab_focus)
        #gtk.threads_leave()
        print "thread plying stopped"
Ejemplo n.º 3
0
    def load(self, filename, option):
        relative_path = self._normalize_file_path(filename)
        if not relative_path:
            print('ILLEGAL FILE NAME: \"%s\"' % filename)
            return

        if not os.path.exists(relative_path):
            print('NO SUCH FILE: \"%s\"' % filename)
            return

        data = open(relative_path).read()
        self.prog = basparse.parse(data)

        print("FILE LOADED: \"%s\"" % filename)

        if option and (option.upper() == 'R'):
            print("  AND RUN...")
            self.run()
Ejemplo n.º 4
0
import sys
sys.path.insert(0, "../..")

if sys.version_info[0] >= 3:
    raw_input = input

import basiclex
import basparse
import basinterp

# If a filename has been specified, we try to run it.
# If a runtime error occurs, we bail out and enter
# interactive mode below
if len(sys.argv) == 2:
    data = open(sys.argv[1]).read()
    prog = basparse.parse(data)
    if not prog:
        raise SystemExit
    b = basinterp.BasicInterpreter(prog)
    try:
        b.run()
        raise SystemExit
    except RuntimeError:
        pass

else:
    b = basinterp.BasicInterpreter({})

# Interactive mode.  This incrementally adds/deletes statements
# from the program stored in the BasicInterpreter object.  In
# addition, special commands 'NEW','LIST',and 'RUN' are added.
Ejemplo n.º 5
0
    raw_input = input

import logging
logging.basicConfig(level=logging.INFO, filename="parselog.txt", filemode="w")
log = logging.getLogger()

import basiclex
import basparse
import basinterp

# If a filename has been specified, we try to run it.
# If a runtime error occurs, we bail out and enter
# interactive mode below
if len(sys.argv) == 2:
    data = open(sys.argv[1]).read()
    prog = basparse.parse(data, debug=log)
    if not prog:
        raise SystemExit
    b = basinterp.BasicInterpreter(prog)
    try:
        b.run()
        raise SystemExit
    except RuntimeError:
        pass

else:
    b = basinterp.BasicInterpreter({})

# Interactive mode.  This incrementally adds/deletes statements
# from the program stored in the BasicInterpreter object.  In
# addition, special commands 'NEW','LIST',and 'RUN' are added.
Ejemplo n.º 6
0
# An implementation of Dartmouth BASIC (1964)
#

import sys
import basiclex
import basparse
import basinterp

data = open('program').read()
prog = basparse.parse(data)
if not prog:
    raise SystemExit
b = basinterp.BasicInterpreter(prog)
try:
    b.run()
    print(b.vars)
    #print(b.lists)
    #print(b.tables)

except RuntimeError:
    pass
Ejemplo n.º 7
0
    level=logging.INFO,
    filename="parselog.txt",
    filemode="w"
)
log = logging.getLogger()

import basiclex
import basparse
import basinterp

# If a filename has been specified, we try to run it.
# If a runtime error occurs, we bail out and enter
# interactive mode below
if len(sys.argv) == 2:
    data = open(sys.argv[1]).read()
    prog = basparse.parse(data, debug=log)
    if not prog:
        raise SystemExit
    b = basinterp.BasicInterpreter(prog)
    try:
        b.run()
        raise SystemExit
    except RuntimeError:
        pass

else:
    b = basinterp.BasicInterpreter({})

# Interactive mode.  This incrementally adds/deletes statements
# from the program stored in the BasicInterpreter object.  In
# addition, special commands 'NEW','LIST',and 'RUN' are added.
Ejemplo n.º 8
0
    def on_pubmsg(self, c, e):
        self.print_log(e)
        try:
            user = e.source().nick
            msg = e.arguments()[0]
            if user not in self.user_list:
                msg = e.arguments()[0]
                pattern = re.search(c.get_nickname() + "\s*:\s*(.*)", msg)
                if not pattern: return
                cmd = pattern.group(1).strip()
                print cmd
                if cmd == 'BASIC':
                    self.user_list.append(user)
                    self.notice('enter BASIC mode')
                return
        except Exception as e:
            print >> sys.stderr, "Unexpected error:", e.message
            return

        self.msg_buffer = ''
        try:
            if msg.strip().upper() == 'SYSTEM':
                self.user_list.remove(user)
                self.notice('bye > ' + user)
                return

            sys.stdout = self  # 標準出力をフックしてIRCにnoticeで発言
            prog = basparse.parse(msg.strip() + '\n')
            if not prog: return

            keys = list(prog)
            if keys[0] > 0:
                self.interpreter.add_statements(prog)
            else:
                stat = prog[keys[0]]
                if stat[0] == 'RUN':
                    try:
                        self.interpreter.run()
                    except RuntimeError:
                        pass
                elif stat[0] == 'LIST':
                    self.interpreter.list(stat[1])
                elif stat[0] == 'BLANK':
                    self.interpreter.del_line(stat[1])
                elif stat[0] == 'NEW':
                    self.interpreter.new()
                elif stat[0] == 'RENUM':
                    self.interpreter.renum(stat[1])
                elif stat[0] == 'SAVE':
                    self.interpreter.save(stat[1])
                elif stat[0] == 'LOAD':
                    self.interpreter.load(stat[1], stat[2])
            if self.msg_buffer:
                self.notice(
                    self.msg_buffer.replace(
                        '\n',
                        '\r\nNOTICE ' + self.channel + ' :').encode("utf-8"))
                print >> sys.stderr, self.msg_buffer
        except Exception as e:
            print >> sys.stderr, "Unexpected error:", e.message
        finally:
            sys.stdout = sys.__stdout__
            self.msg_buffer = ''