import string import os import mmap import time inputFile = file ( "inputs.txt" , "r+" ) size = os.path.getsize ( "inputs.txt" ) outputFile = file ( "outputs.txt" , "r+" ) outSize = os.path.getsize ( "outputs.txt" ) inputs = mmap.mmap ( inputFile.fileno() , size ) outputs = mmap.mmap ( outputFile.fileno() , outSize ) class rules: def __init__ ( self , filename ): self.inputList = list() self.outputList = list() self.inputFunction = list() self.outputFunction = list() self.comments = list() self.scheduledEvents = list() self.scheduled = list() self.waitForClear = list() self.handled = dict() for i in range ( 100 ): self.handled [ i ] = False rulefile = open ( filename , "r" ) for line in rulefile: if line [ :1 ] != "#" and len ( string.strip ( line ) ) > 0: lineparts = string.split ( line , ":" ) self.inputList.append ( g.split ( lineparts [ 0 ] , "," ) ) self.outputList.append ( string.split ( lineparts [ 1 ] , "," ) ) self.inputFunction.append ( lineparts [ 2 ] ) self.outputFunction.append ( lineparts [ 3 ] ) self.comments.append ( lineparts [ 4 ] ) for index , rule in enumerate ( self.inputList ): print "%3.3d %-32.32s %-32.32s %-15.15s -15.15s %s" % ( index , self.inputList [ index ] , self.outputList [ index ] , self.inputFunction [ index ] , self.outputFunction [ index ] , string.strip ( self.comments [ index ] ) ) def status ( self , inputs , outputs ): self.inputs = inputs self.outputs = outputs def processRules ( self ): skipEvaluateOutputs = False for index , rule in enumerate ( self.inputList ): # Evaluate inputs inputCount = 0 if self.inputList [ index ] [ 0 ] != "": for input in self.inputList [ index ]: if self.inputs [ int ( input ) ] == '1': inputCount += 1 # Evaluate input function if self.inputFunction [ index ] == "OR": if inputCount > 0: inputValue = True else: inputValue = False elif self.inputFunction [ index ] == "AND": if inputCount == len ( self.inputList ) + 1: inputValue = True else: inputValue = False def evaluateOutputs ( self , inputValue , index , functionoverride = None ): if functionoverride == "CLEAR": for output in self.outputList [ index ]: self.outputs [ int ( output ) ] = '0' return if self.outputFunction [ index ] == "DIRECT": if inputValue == True: outputChar = "1" else: outputChar = "0" for output in self.outputList [ index ]: self.outputs [ int ( output ) ] = outputChar elif self.outputFunction [ index ] == "INVERSE": if inputValue == True: outputChar = "0" else: outputChar = "1" for output in self.outputList [ index ]: self.outputs [ int ( output ) ] = outputChar elif self.outputFunction [ index ] == "TOGGLE": if inputValue == True and self.handled [ index ] == False: for output in self.outputList [ index ]: if self.outputs [ int ( output ) ] == '1': self.outputs [ int ( output ) ] = '0' else: self.outputs [ int ( output ) ] = '1'