diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/Appconfig.py | 35 | ||||
-rw-r--r-- | src/createKicadLibrary.py | 229 | ||||
-rw-r--r-- | src/model_generation.py | 4 | ||||
-rwxr-xr-x | src/ngspice_ghdl.py | 130 |
4 files changed, 338 insertions, 60 deletions
diff --git a/src/Appconfig.py b/src/Appconfig.py index 51bd7c1..6909c53 100644 --- a/src/Appconfig.py +++ b/src/Appconfig.py @@ -1,2 +1,35 @@ +import os.path +from ConfigParser import SafeConfigParser + + +class Appconfig: + home = os.path.expanduser("~") + #Reading all varibale from eSim config.ini + parser_esim = SafeConfigParser() + parser_esim.read(os.path.join(home, os.path.join('.esim','config.ini'))) + try: + src_home = parser_esim.get('eSim','eSim_HOME') + xml_loc = os.path.join(src_home,'src/modelParamXML') + lib_loc = os.path.expanduser('~') + except: + pass + esimFlag = 0 + + #Reading all variable from nghdl config.ini + parser_nghdl = SafeConfigParser() + parser_nghdl.read(os.path.join(home,os.path.join('.nghdl','config.ini'))) + + kicad_lib_template = { + "start_def":"DEF comp_name U 0 40 Y Y 1 F N", + "U_field":"F0 \"U\" 2850 1800 60 H V C CNN", + "comp_name_field":"F1 \"comp_name\" 2850 2000 60 H V C CNN", + "blank_field":["F2 blank_quotes 2850 1950 60 H V C CNN","F3 blank_quotes 2850 1950 60 H V C CNN"], + "start_draw":"DRAW", + "draw_pos":"S 2550 2100 3150 1800 0 1 0 N", + "input_port":"X in 1 2350 2000 200 R 50 50 1 1 I", + "output_port":"X out 2 3350 2000 200 L 50 50 1 1 O", + "end_draw":"ENDDRAW", + "end_def":"ENDDEF" + } + -nghdl_src_loc = ".esim-nghdl" diff --git a/src/createKicadLibrary.py b/src/createKicadLibrary.py new file mode 100644 index 0000000..bf520d1 --- /dev/null +++ b/src/createKicadLibrary.py @@ -0,0 +1,229 @@ +from Appconfig import Appconfig +import re +import os +import xml.etree.cElementTree as ET +from PyQt4 import QtGui, QtCore + + +class AutoSchematic(QtGui.QWidget): + + def __init__(self, modelname): + QtGui.QWidget.__init__(self) + self.modelname = modelname.split('.')[0] + self.template = Appconfig.kicad_lib_template + self.xml_loc = Appconfig.xml_loc + self.lib_loc = Appconfig.lib_loc + self.kicad_nghdl_lib = 'eSim_kicad.lib' + self.parser = Appconfig.parser_nghdl + + def createKicadLibrary(self): + xmlFound = None + for root, dirs, files in os.walk(self.xml_loc): + if (str(self.modelname) + '.xml') in files: + xmlFound = root + if (xmlFound == None): + self.getPortInformation() + self.createXML() + self.createLib() + elif (xmlFound == self.xml_loc + 'Nghdl'): + print 'Library already exists...' + ret = QtGui.QMessageBox.critical(self, "Critical",'''<b>The Libraries of this model already exist.Do you want to overwrite it?</b><br/> + <b>If yes press ok else cancel it and change the name of your vhdl file</b>''', QtGui.QMessageBox.Ok, QtGui.QMessageBox.Cancel) + if ret == QtGui.QMessageBox.Ok: + print "Overwriting existing libraries" + self.getPortInformation() + self.createXML() + self.removeOldLibrary() #Removes the exisitng library + self.createLib() + else: + print "Exiting Nghdl" + quit() + else: + print 'Pre existing library...' + ret = QtGui.QMessageBox.critical(self, "Error",'''<b>A standard library already exists in this name.</b><br/> + <b>Please change the name of your vhdl file and upload it again</b>''', QtGui.QMessageBox.Ok) + + quit() + + def getPortInformation(self): + portInformation = PortInfo(self) + portInformation.getPortInfo() + self.portInfo = portInformation.bit_list + self.input_length = portInformation.input_len + + def createXML(self): + cwd = os.getcwd() + xmlDestination = os.path.join(self.xml_loc, 'Nghdl') + self.splitText = "" + for bit in self.portInfo[:-1]: + self.splitText += bit + "-V:" + self.splitText += self.portInfo[-1] + "-V" + + print "changing directory to ", (xmlDestination) + os.chdir(xmlDestination) + + root = ET.Element("model") + ET.SubElement(root, "name").text = self.modelname + ET.SubElement(root, "type").text = "Nghdl" + ET.SubElement(root, "node_number").text = str(len(self.portInfo)) + ET.SubElement(root, "title").text = "Add parameters for " + str(self.modelname) + ET.SubElement(root, "split").text = self.splitText + param = ET.SubElement(root, "param") + ET.SubElement(param, "rise_delay", default = "1.0e-9").text = "Enter Rise Delay (default=1.0e-9)" + ET.SubElement(param ,"fall_delay", default ="1.0e-9").text = "Enter Fall Delay (default=1.0e-9)" + ET.SubElement(param ,"input_load", default ="1.0e-12").text = "Enter Input Load (default=1.0e-12)" + ET.SubElement(param ,"instance_id", default ="1").text = "Enter Instance ID (Between 0-99)" + ET.SubElement(param ,"stop_time", default ="90e-9").text = "Enter the stop time to end the simulation (default=90e-9)" + tree = ET.ElementTree(root) + tree.write(str(self.modelname) + '.xml') + print "Leaving the directory ", (xmlDestination) + os.chdir(cwd) + + #Calculates the maximum between input and output ports + def findBlockSize(self): + ind = self.input_length + return max(self.char_sum(self.portInfo[:ind]), self.char_sum(self.portInfo[ind:])) + + def char_sum(self, ls): + return sum([int(x) for x in ls]) + + def removeOldLibrary(self): + cwd = os.getcwd() + os.chdir(self.lib_loc) + print "Changing directory to ", self.lib_loc + f = open(self.kicad_nghdl_lib) + lines = f.readlines() + f.close() + + output = [] + line_reading_flag = False + + for line in lines: + if line.startswith("DEF"): + if line.split()[1] == self.modelname: + line_reading_flag = True + if not line_reading_flag: + output.append(line) + if line.startswith("ENDDEF"): + line_reading_flag = False + + f = open(self.kicad_nghdl_lib, 'w') + for line in output: + f.write(line) + + os.chdir(cwd) + print "Leaving directory, ", self.lib_loc + + def createLib(self): + self.dist_port = 100 #distance between two ports + self.inc_size = 100 #Increment size of a block + cwd = os.getcwd() + os.chdir(self.lib_loc) + print "Changing directory to ", self.lib_loc + + lib_file = open(self.kicad_nghdl_lib,"a") + line1 = self.template["start_def"] + line1 = line1.split() + line1 = [w.replace('comp_name', self.modelname) for w in line1] + self.template["start_def"] = ' '.join(line1) + if os.stat(self.kicad_nghdl_lib).st_size == 0: + lib_file.write("EESchema-LIBRARY Version 2.3"+ "\n\n") + #lib_file.write("#encoding utf-8"+ "\n"+ "#"+ "\n" + "#test_compo" + "\n"+ "#"+ "\n") + lib_file.write(self.template["start_def"]+ "\n"+self.template["U_field"]+"\n") + + line3 = self.template["comp_name_field"] + line3 = line3.split() + line3 = [w.replace('comp_name', self.modelname) for w in line3] + self.template["comp_name_field"] = ' '.join(line3) + + lib_file.write(self.template["comp_name_field"]+ "\n") + + line4 = self.template["blank_field"] + line4_1 = line4[0] + line4_2 = line4[1] + line4_1 = line4_1.split() + line4_1 = [w.replace('blank_quotes','""') for w in line4_1] + line4_2 = line4_2.split() + line4_2 = [w.replace('blank_quotes','""') for w in line4_2] + line4[0] = ' '.join(line4_1) + line4[1] = ' '.join(line4_2) + self.template["blank_qoutes"] = line4 + + lib_file.write(line4[0]+"\n" + line4[1]+"\n"+ self.template["start_draw"]+ "\n") + + draw_pos = self.template["draw_pos"] + draw_pos = draw_pos.split() + draw_pos[4] = str(int(draw_pos[4])- self.findBlockSize() * self.inc_size) + self.template["draw_pos"] = ' '.join(draw_pos) + + lib_file.write(self.template["draw_pos"]+"\n") + + input_port = self.template["input_port"] + input_port = input_port.split() + output_port = self.template["output_port"] + output_port = output_port.split() + inputs = self.portInfo[0: self.input_length] + outputs = self.portInfo[self.input_length:] + inputs = self.char_sum(inputs) + outputs= self.char_sum(outputs) + total = inputs+outputs + + port_list = [] + + for i in xrange(total): + if (i < inputs): + input_port[1] = "in"+str(i+1) + input_port[2] = str(i+1) + input_port[4] = str(int(input_port[4])-self.dist_port) + input_list = ' '.join(input_port) + port_list.append(input_list) + + else: + output_port[1] = "out"+str(i- inputs+1) + output_port[2] = str(i+1) + output_port[4] = str(int(output_port[4])-self.dist_port) + output_list = ' '.join(output_port) + port_list.append(output_list) + + for ports in port_list: + lib_file.write(ports+"\n") + lib_file.write(self.template["end_draw"]+"\n"+ self.template["end_def"] + "\n\n\n") + + os.chdir(cwd) + print 'Leaving directory, ', self.lib_loc + QtGui.QMessageBox.information(self, "Library added", '''Library details for this model is added to the <b>eSim-kicad.lib</b> in the home directory''', QtGui.QMessageBox.Ok) + + +class PortInfo: + def __init__(self, model): + self.modelname = model.modelname + self.model_loc = model.parser.get('NGSPICE', 'DIGITAL_MODEL') + self.bit_list = [] + self.input_len = 0 + + def getPortInfo(self): + info_loc = os.path.join(self.model_loc, self.modelname+'/DUTghdl/') + input_list = [] + output_list = [] + read_file=open(info_loc + 'connection_info.txt','r') + data=read_file.readlines() + read_file.close() + + for line in data: + if re.match(r'^\s*$', line): + pass + else: + in_items=re.findall("IN",line,re.MULTILINE|re.IGNORECASE) + out_items=re.findall("OUT",line,re.MULTILINE|re.IGNORECASE) + if in_items: + input_list.append(line.split()) + if out_items: + output_list.append(line.split()) + + for in_list in input_list: + self.bit_list.append(in_list[2]) + self.input_len = len(self.bit_list) + for out_list in output_list: + self.bit_list.append(out_list[2]) + + diff --git a/src/model_generation.py b/src/model_generation.py index c520708..4f2d7dd 100644 --- a/src/model_generation.py +++ b/src/model_generation.py @@ -464,7 +464,7 @@ for item in cm_event_get_ptr: cfunc.write(systime_info) cfunc.write("\n") cfunc.write("\t\tchar command[1024];") -cfunc.write('\t\tsnprintf(command,1024,"'+home+'/ngspice-26/src/xspice/icm/ghdl/'+fname.split('.')[0]+'/DUTghdl/start_server.sh %d &",sock_port);\n') +cfunc.write('\t\tsnprintf(command,1024,"'+home+'/ngspice-nghdl/src/xspice/icm/ghdl/'+fname.split('.')[0]+'/DUTghdl/start_server.sh %d &",sock_port);\n') cfunc.write('\t\tsystem(command);') cfunc.write("\t}") cfunc.write("\n") @@ -767,7 +767,7 @@ start_server.write("###This server run ghdl testebench for infinite time till ng start_server.write("#gcc -c ghdlserver.c\n") start_server.write("#ghdl -a Utility_Package.vhdl &&\n") start_server.write("#ghdl -a Vhpi_Package.vhdl &&\n") -start_server.write("cd "+home+"/ngspice-26/src/xspice/icm/ghdl/"+fname.split('.')[0]+"/DUTghdl/\n") +start_server.write("cd "+home+"/ngspice-nghdl/src/xspice/icm/ghdl/"+fname.split('.')[0]+"/DUTghdl/\n") start_server.write("chmod 775 sock_pkg_create.sh &&\n") start_server.write("./sock_pkg_create.sh $1 &&\n") start_server.write("ghdl -a sock_pkg.vhdl &&\n") diff --git a/src/ngspice_ghdl.py b/src/ngspice_ghdl.py index 3f4990b..0a9e88c 100755 --- a/src/ngspice_ghdl.py +++ b/src/ngspice_ghdl.py @@ -12,7 +12,8 @@ import subprocess from PyQt4 import QtGui from PyQt4 import QtCore from ConfigParser import SafeConfigParser -from Appconfig import nghdl_src_loc +from Appconfig import Appconfig +from createKicadLibrary import AutoSchematic class Mainwindow(QtGui.QWidget): def __init__(self): @@ -20,11 +21,16 @@ class Mainwindow(QtGui.QWidget): QtGui.QMainWindow.__init__(self) print "Initializing.........." self.home = os.path.expanduser("~") - licensefile = os.path.join(os.path.join(self.home,nghdl_src_loc), "LICENSE") - fileopen = open(licensefile, 'r') - print fileopen.read() + #Reading all varibale from config.ini self.parser = SafeConfigParser() - self.parser.read(os.path.join(self.home,nghdl_src_loc+'/config.ini')) + self.parser.read(os.path.join(self.home, os.path.join('.nghdl','config.ini'))) + self.ngspice_home = self.parser.get('NGSPICE','NGSPICE_HOME') + self.release_dir = self.parser.get('NGSPICE','RELEASE') + self.src_home = self.parser.get('SRC','SRC_HOME') + self.licensefile = self.parser.get('SRC','LICENSE') + #Printing LICENCE file on terminal + fileopen = open(self.licensefile, 'r') + print fileopen.read() self.file_list = [] #to keep the supporting files self.initUI() @@ -42,9 +48,13 @@ class Mainwindow(QtGui.QWidget): self.ledit = QtGui.QLineEdit(self) self.sedit = QtGui.QTextEdit(self) self.process = QtCore.QProcess(self) - self.terminal = QtGui.QWidget(self) - - self.process.start('xterm',['-into', str(self.terminal.winId())]) + self.termedit = QtGui.QTextEdit(self) + self.termedit.setReadOnly(1) + pal = QtGui.QPalette() + bgc = QtGui.QColor(0, 0, 0) + pal.setColor(QtGui.QPalette.Base, bgc) + self.termedit.setPalette(pal) + self.termedit.setStyleSheet("QTextEdit {color:white}") #Creating gridlayout grid = QtGui.QGridLayout() @@ -54,7 +64,7 @@ class Mainwindow(QtGui.QWidget): grid.addWidget(self.sedit, 2, 0, 4, 1) grid.addWidget(self.addbtn, 2, 1) grid.addWidget(self.removebtn, 3, 1) - grid.addWidget(self.terminal, 6, 0,10,1) + grid.addWidget(self.termedit, 6, 0, 10, 1) grid.addWidget(self.uploadbtn, 17, 0) grid.addWidget(self.exitbtn,17, 1) @@ -77,16 +87,16 @@ class Mainwindow(QtGui.QWidget): def browseFile(self): print "Browse button clicked" self.filename = QtGui.QFileDialog.getOpenFileName(self, 'Open File', '.') - print "Path file :", self.filename self.ledit.setText(self.filename) + print "Vhdl file uploaded to process :", self.filename def addFiles(self): - print "Add Files button clicked" + print "Starts adding supporting files" title = self.addbtn.text() for file in QtGui.QFileDialog.getOpenFileNames(self, title): - print "Supporting file :", file self.sedit.append(str(file)) self.file_list.append(file) + print "Supporting Files are :",self.file_list def removeFiles(self): @@ -103,24 +113,23 @@ class Mainwindow(QtGui.QWidget): self.file_list.remove(file) if nonvhdl_count > 0: - QtGui.QMessageBox.about(self,'Message','''<b>Important Message.</b><br/><br/>This accepts only <b>.vhdl</b> file ''') + QtGui.QMessageBox.about(self,'Message','''<b>Important Message.</b><br/><br/>Supporting files should be <b>.vhdl</b> file ''') def createModelDirectory(self): print "Create Model Directory Called" self.digital_home=self.parser.get('NGSPICE','DIGITAL_MODEL') - print "Digital Home",self.digital_home os.chdir(self.digital_home) print "Current Working Directory Changed to",os.getcwd() self.modelname = os.path.basename(str(self.filename)).split('.')[0] - print "Model name is :",self.modelname + print "Model to be created :",self.modelname # Looking if model directory is present or not if os.path.isdir(self.modelname): print "Model Already present" ret = QtGui.QMessageBox.critical(self, "Critical",'''<b>The Model already exist.Do you want to overwrite it?</b><br/> <b>If yes press ok else cancel it and change the name of you vhdl file</b>''', QtGui.QMessageBox.Ok, QtGui.QMessageBox.Cancel) if ret == QtGui.QMessageBox.Ok: - print "Overwriting existing model" + print "Overwriting existing model "+self.modelname cmd="rm -rf "+self.modelname #process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True) subprocess.call(cmd, shell=True) @@ -132,25 +141,25 @@ class Mainwindow(QtGui.QWidget): else: - print "Creating new model directory" + print "Creating model "+self.modelname+" directory" os.mkdir(self.modelname) def addingModelInModpath(self): - print "Adding Model in Modpath file",self.modelname,self.digital_home + print "Adding Model "+self.modelname+" in Modpath file "+self.digital_home #Adding name of model in the modpath file #Check if the string is already in the file with open(self.digital_home+"/modpath.lst",'a+') as f: flag = 0 for line in f: if line.strip() == self.modelname: - print "Found model" + print "Found model "+self.modelname+" in the modpath.lst" flag = 1 break else: pass if flag == 0: - print "Adding model name into modpath.lst" + print "Adding model name "+self.modelname+" into modpath.lst" f.write(self.modelname+"\n") else: print "Model name is already into modpath.lst" @@ -159,29 +168,31 @@ class Mainwindow(QtGui.QWidget): def createModelFiles(self): print "Create Model Files Called" os.chdir(self.cur_dir) - print "Current Working directory changed to ",self.cur_dir - cmd = "python ~/"+nghdl_src_loc+"/model_generation.py "+str(self.ledit.text()) + print "Current Working directory changed to "+self.cur_dir + cmd = "python "+self.src_home+"/src/model_generation.py "+str(self.ledit.text()) stdouterr = os.popen4(cmd)[1].read() print stdouterr #Moving file to model directory - path=self.digital_home+"/"+self.modelname + path=os.path.join(self.digital_home,self.modelname) shutil.move("cfunc.mod",path) shutil.move("ifspec.ifs",path) #Creating directory inside model directoy + print "Creating DUT directory at "+os.path.join(path,"DUTghdl") os.mkdir(path+"/DUTghdl/") + print "Copying required file to DUTghdl directory" shutil.move("connection_info.txt",path+"/DUTghdl/") shutil.move("start_server.sh",path+"/DUTghdl/") shutil.move("sock_pkg_create.sh",path+"/DUTghdl/") shutil.move(self.modelname+"_tb.vhdl",path+"/DUTghdl/") shutil.copy(str(self.filename),path+"/DUTghdl/") - shutil.copy(os.path.join(self.home,nghdl_src_loc)+"/ghdlserver/compile.sh",path+"/DUTghdl/") - shutil.copy(os.path.join(self.home,nghdl_src_loc)+"/ghdlserver/uthash.h",path+"/DUTghdl/") - shutil.copy(os.path.join(self.home,nghdl_src_loc)+"/ghdlserver/ghdlserver.c",path+"/DUTghdl/") - shutil.copy(os.path.join(self.home,nghdl_src_loc)+"/ghdlserver/ghdlserver.h",path+"/DUTghdl/") - shutil.copy(os.path.join(self.home,nghdl_src_loc)+"/ghdlserver/Utility_Package.vhdl",path+"/DUTghdl/") - shutil.copy(os.path.join(self.home,nghdl_src_loc)+"/ghdlserver/Vhpi_Package.vhdl",path+"/DUTghdl/") + shutil.copy(os.path.join(self.home, self.src_home)+"/src/ghdlserver/compile.sh",path+"/DUTghdl/") + shutil.copy(os.path.join(self.home, self.src_home)+"/src/ghdlserver/uthash.h",path+"/DUTghdl/") + shutil.copy(os.path.join(self.home, self.src_home)+"/src/ghdlserver/ghdlserver.c",path+"/DUTghdl/") + shutil.copy(os.path.join(self.home, self.src_home)+"/src/ghdlserver/ghdlserver.h",path+"/DUTghdl/") + shutil.copy(os.path.join(self.home, self.src_home)+"/src/ghdlserver/Utility_Package.vhdl",path+"/DUTghdl/") + shutil.copy(os.path.join(self.home, self.src_home)+"/src/ghdlserver/Vhpi_Package.vhdl",path+"/DUTghdl/") for file in self.file_list: shutil.copy(str(file), path+"/DUTghdl/") @@ -196,30 +207,26 @@ class Mainwindow(QtGui.QWidget): #os.remove("Utility_Package.vhdl") #os.remove("Vhpi_Package.vhdl") - - - + + #slot to redirect stdout to window console + @QtCore.pyqtSlot() + def readStdOutput(self): + self.termedit.append(QtCore.QString(self.process.readAllStandardOutput())) - def runMake(self): print "run Make Called" self.release_home=self.parser.get('NGSPICE','RELEASE') os.chdir(self.release_home) try: cmd = " make" - print "Running Make" + print "Running Make command in "+self.release_home path = os.getcwd() - #subprocess.call(cmd,shell=True) - command = "cd "+path +";"+cmd +";"+"make install" - #command = "cd "+path +";"+cmd - self.args = ['-into', str(self.terminal.winId()),'-hold','+s','-e', command] - self.process.start('xterm', self.args) - - print "pid ------ >",self.process.pid() + self.process.start(cmd) + self.process.setProcessChannelMode(QtCore.QProcess.MergedChannels) + QtCore.QObject.connect(self.process, QtCore.SIGNAL("readyReadStandardOutput()"), self, QtCore.SLOT("readStdOutput()")) + print "make command process pid ---------- >",self.process.pid() - #stdouterr = os.popen4(cmd)[1].read() - #self.tedit.append(stdouterr) except: print "There is error in 'make' " quit() @@ -230,19 +237,26 @@ class Mainwindow(QtGui.QWidget): cmd = " make install" print "Running Make Install" path = os.getcwd() - print "cwd------------>", path - #subprocess.call(cmd,shell=True) - command = "cd "+path+ ";"+cmd - self.args = ['-into', str(self.terminal.winId()),'-hold','-e', command] - #self.process.start('xterm', self.args) - #self.process.waitForFinished(-1) - #stdouterr = os.popen4(cmd)[1].read() - #self.tedit.append(stdouterr) + try: + self.process.close() + except: + pass + self.process.finished.connect(self.createSchematicLib) + self.process.start(cmd) + self.process.setProcessChannelMode(QtCore.QProcess.MergedChannels) + QtCore.QObject.connect(self.process, QtCore.SIGNAL("readyReadStandardOutput()"), self, QtCore.SLOT("readStdOutput()")) + os.chdir(self.cur_dir) + except: print "There is error during in 'make install' " quit() - + def createSchematicLib(self): + if Appconfig.esimFlag == 1: + print 'Creating library files.................................' + self.schematicLib = AutoSchematic(self.modelname) + self.schematicLib.createKicadLibrary() + def uploadModle(self): print "Upload button clicked" try: @@ -251,17 +265,16 @@ class Mainwindow(QtGui.QWidget): pass try: self.file_extension = os.path.splitext(str(self.filename))[1] - print "File extension",self.file_extension - print "Parser Content:",self.parser.get('NGSPICE', 'NGSPICE_HOME') + print "Uploaded File extension :"+self.file_extension self.cur_dir = os.getcwd() - print "My Current Working Directory",self.cur_dir + print "Current Working Directory :"+self.cur_dir self.checkSupportFiles() if self.file_extension == ".vhdl": self.createModelDirectory() self.addingModelInModpath() self.createModelFiles() self.runMake() - #self.runMakeInstall() + self.runMakeInstall() else: QtGui.QMessageBox.about(self,'Message','''<b>Important Message.</b><br/><br/>This accepts only <b>.vhdl</b> file ''') except: @@ -327,7 +340,7 @@ class FileRemover(QtGui.QWidget): def removeFiles(self): for path in self.marked_list: - print path, "is removed" + print path +" is removed" self.sedit.append(path + " removed") self.files.remove(path) @@ -343,6 +356,9 @@ class FileRemover(QtGui.QWidget): def main(): app = QtGui.QApplication(sys.argv) + if len(sys.argv) > 1: + if sys.argv[1] == '-e': + Appconfig.esimFlag = 1 w = Mainwindow() sys.exit(app.exec_()) |