def procAllChains(self, parent): # Copy name name = parent.tokens[parent.currToken] if (name in ProcVidChains.nameSet): parent.consoleObj.updateConsole( "!!! Error !!! Name found twice, read %s, at line num %d." % (parent.tokens[parent.currToken], parent.lineNumList[parent.currToken])) return (1410) ProcVidChains.nameSet.add(name) ProcChains.addName(parent.procChains, name, ProcChains.VIDEO_CHAIN_NAME) ProcVidChains.outHndl.write(" ## Video Chain {0}\n".format(name)) ProcVidChains.outHndl.write( " # - Groups have video name then WAIT command\n") ProcVidChains.outHndl.write( " # - Chain ends with REPEAT if desired\n") ProcVidChains.outHndl.write(" {0} = [\n".format(name)) # Verify opening symbol parent.currToken += 1 if not parent.helpFuncs.isOpenSym(parent.tokens[parent.currToken]): parent.consoleObj.updateConsole( "!!! Error !!! Expected opening symbol, read %s, at line num %d." % (parent.tokens[parent.currToken], parent.lineNumList[parent.currToken])) return (1411) closeSymb = parent.helpFuncs.findMatch(parent) parent.currToken += 1 typeProc = ProcVidChains.PROC_VIDEO while parent.currToken < closeSymb: if parent.tokens[parent.currToken] in ProcVidChains.tokenLookup: tokenType = ProcVidChains.tokenLookup[parent.tokens[ parent.currToken]] else: tokenType = ProcVidChains.UNKNOWN if tokenType == ProcVidChains.WAIT_COMMAND: if typeProc != ProcVidChains.PROC_COMMAND: parent.consoleObj.updateConsole( "!!! Error !!! WAIT command in video chain in incorrect location at line num %d." % (parent.lineNumList[parent.currToken])) return (1412) # Next token should be wait timeout (ms) if not parent.helpFuncs.isInt( parent.tokens[parent.currToken + 1]): parent.consoleObj.updateConsole( "!!! Error !!! WAIT parameter should be integer, read %s, at line num %d." % (parent.tokens[parent.currToken + 1], parent.lineNumList[parent.currToken + 1])) return (1413) ProcVidChains.outHndl.write(" WAIT, " + parent.tokens[parent.currToken + 1] + "],\n") parent.currToken += 2 # Next token must be a comma if (ProcVidChains.tokenLookup[parent.tokens[parent.currToken]] != ProcVidChains.COMMA): parent.consoleObj.updateConsole( "!!! Error !!! Comma missing after wait command, found %s, at line num %d." % (parent.tokens[parent.currToken], parent.lineNumList[parent.currToken])) return (1414) parent.currToken += 1 typeProc = ProcVidChains.PROC_VIDEO elif tokenType == ProcVidChains.REPEAT_COMMAND: if (typeProc == ProcVidChains.PROC_VIDEO): ProcVidChains.outHndl.write(" [0, ") elif (typeProc == ProcVidChains.PROC_COMMAND): pass else: parent.consoleObj.updateConsole( "!!! Error !!! REPEAT command in video chain in incorrect location at line num %d." % (parent.lineNumList[parent.currToken])) return (1415) ProcVidChains.outHndl.write("REPEAT, 0] ]\n\n") typeProc = ProcVidChains.PROC_DONE_CHAIN parent.currToken += 1 elif tokenType == ProcVidChains.COMMA: if (typeProc == ProcVidChains.PROC_VIDEO) or ( typeProc == ProcVidChains.PROC_COMMAND): # No processing necessary, next sound will start the line parent.currToken += 1 else: parent.consoleObj.updateConsole( "!!! Error !!! Unexpected comma at line num %d." % (parent.lineNumList[parent.currToken])) return (1416) else: #This must be a video name if (ProcChains.checkNameExists( parent.procChains, parent.tokens[parent.currToken])): if (ProcChains.getNameType(parent.procChains, parent.tokens[parent.currToken]) != ProcChains.VIDEO_NAME): parent.consoleObj.updateConsole( "!!! Error !!! Symbol %s should only be a video name, at line num %d." % (parent.tokens[parent.currToken], parent.lineNumList[parent.currToken])) return (1417) else: if typeProc == ProcVidChains.PROC_VIDEO: ProcVidChains.outHndl.write( " [Videos.{0}, ".format( parent.tokens[parent.currToken])) typeProc = ProcVidChains.PROC_COMMAND parent.currToken += 1 elif typeProc == ProcVidChains.PROC_COMMAND: # Two or more sounds back to back, put a wait of 0 between them ProcVidChains.outHndl.write( "WAIT, 0],\n [Videos.{0}, ".format( parent.tokens[parent.currToken])) parent.currToken += 1 else: parent.consoleObj.updateConsole( "!!! Error !!! Can't understand symbol, read %s, at line num %d." % (parent.tokens[parent.currToken], parent.lineNumList[parent.currToken])) return (1418) if (typeProc != ProcVidChains.PROC_DONE_CHAIN): parent.consoleObj.updateConsole( "!!! Error !!! Video chain did not end properly, at line num %d." % (parent.lineNumList[parent.currToken])) return (1419) parent.currToken += 1 return (0)
def procAllChains(self, parent): # Create the lists to support multiple LED cards ledCard = [[] for _ in range(ProcLedCards.numLedCards)] # Copy name name = parent.tokens[parent.currToken] if (name in ProcLedChains.nameSet): parent.consoleObj.updateConsole( "!!! Error !!! Name found twice, read %s, at line num %d." % (parent.tokens[parent.currToken], parent.lineNumList[parent.currToken])) return (1210) ProcLedChains.nameSet.add(name) ProcChains.addName(parent.procChains, name, ProcChains.LED_CHAIN_NAME) ProcLedChains.outHndl.write(" ## LED Chain {0}\n".format(name)) ProcLedChains.outHndl.write(" # - First entry is LED mask\n") ProcLedChains.outHndl.write( " # - Next groups have a bitfield of LEDs to change and command\n" ) ProcLedChains.outHndl.write(" {0} = [".format(name)) # Verify opening symbol parent.currToken += 1 if not parent.helpFuncs.isOpenSym(parent.tokens[parent.currToken]): parent.consoleObj.updateConsole( "!!! Error !!! Expected opening symbol, read %s, at line num %d." % (parent.tokens[parent.currToken], parent.lineNumList[parent.currToken])) return (1211) closeSymb = parent.helpFuncs.findMatch(parent) parent.currToken += 1 typeProc = ProcLedChains.PROC_MASK firstBit = True while parent.currToken < closeSymb: if parent.tokens[parent.currToken] in ProcLedChains.tokenLookup: tokenType = ProcLedChains.tokenLookup[parent.tokens[ parent.currToken]] else: tokenType = ProcLedChains.UNKNOWN if (tokenType == ProcLedChains.OPEN_PAREN) or ( tokenType == ProcLedChains.CLOSE_PAREN): # Opening and closing parenthesis are dropped since they aren't necessary # Move to next symbol parent.currToken += 1 elif tokenType == ProcLedChains.WAIT_COMMAND: if typeProc != ProcLedChains.PROC_COMMAND: parent.consoleObj.updateConsole( "!!! Error !!! WAIT command in LED chain in incorrect location at line num %d." % (parent.lineNumList[parent.currToken])) return (1212) # Next token should be wait timeout (ms) if not parent.helpFuncs.isInt( parent.tokens[parent.currToken + 1]): parent.consoleObj.updateConsole( "!!! Error !!! WAIT parameter should be integer, read %s, at line num %d." % (parent.tokens[parent.currToken + 1], parent.lineNumList[parent.currToken + 1])) return (1213) ProcLedChains.outHndl.write(" WAIT, " + parent.tokens[parent.currToken + 1] + "],\n [ ") # If any close parenthesis exist eat them parent.currToken += 2 while (ProcLedChains.tokenLookup[parent.tokens[ parent.currToken]] == ProcLedChains.CLOSE_PAREN): parent.currToken += 1 # Next token must be a comma if (ProcLedChains.tokenLookup[parent.tokens[parent.currToken]] != ProcLedChains.COMMA): parent.consoleObj.updateConsole( "!!! Error !!! Comma missing after wait command, found %s, at line num %d." % (parent.tokens[parent.currToken], parent.lineNumList[parent.currToken])) return (1214) parent.currToken += 1 typeProc = ProcLedChains.PROC_LED_BIT firstBit = True elif tokenType == ProcLedChains.END_CHAIN_COMMAND: if typeProc != ProcLedChains.PROC_COMMAND: parent.consoleObj.updateConsole( "!!! Error !!! END_CHAIN command in LED chain in incorrect location at line num %d." % (parent.lineNumList[parent.currToken])) return (1215) ProcLedChains.outHndl.write("END_CHAIN, 0] ] ]\n\n") parent.currToken += 1 typeProc = ProcLedChains.PROC_DONE_CHAIN elif tokenType == ProcLedChains.REPEAT_COMMAND: if typeProc != ProcLedChains.PROC_COMMAND: parent.consoleObj.updateConsole( "!!! Error !!! REPEAT command in LED chain in incorrect location at line num %d." % (parent.lineNumList[parent.currToken])) return (1216) ProcLedChains.outHndl.write("REPEAT, 0] ] ]\n\n") parent.currToken += 1 typeProc = ProcLedChains.PROC_DONE_CHAIN elif tokenType == ProcLedChains.COMMA: if typeProc == ProcLedChains.PROC_MASK: ProcLedChains.outHndl.write("\n [ ") for card in xrange(ProcLedCards.numLedCards): if (card != 0): ProcLedChains.outHndl.write(", ") if len(ledCard[card]) == 0: ProcLedChains.outHndl.write("0") else: for bit in xrange(len(ledCard[card])): if (bit != 0): ProcLedChains.outHndl.write(" | ") ProcLedChains.outHndl.write(ledCard[card][bit]) ProcLedChains.outHndl.write(" ],\n [ [ ") parent.currToken += 1 typeProc = ProcLedChains.PROC_LED_BIT firstBit = True ledCard = [[] for _ in range(ProcLedCards.numLedCards)] elif typeProc == ProcLedChains.PROC_LED_BIT: ProcLedChains.outHndl.write("[ ") for card in xrange(ProcLedCards.numLedCards): if (card != 0): ProcLedChains.outHndl.write(", ") if len(ledCard[card]) == 0: ProcLedChains.outHndl.write("0") else: for bit in xrange(len(ledCard[card])): if (bit != 0): ProcLedChains.outHndl.write(" | ") ProcLedChains.outHndl.write(ledCard[card][bit]) ProcLedChains.outHndl.write(" ], ") parent.currToken += 1 typeProc = ProcLedChains.PROC_COMMAND ledCard = [[] for _ in range(ProcLedCards.numLedCards)] else: parent.consoleObj.updateConsole( "!!! Error !!! Unexpected comma at line num %d." % (parent.lineNumList[parent.currToken])) return (1217) elif tokenType == ProcLedChains.LOGIC_OR: if ((typeProc != ProcLedChains.PROC_LED_BIT) and (typeProc != ProcLedChains.PROC_MASK)) or firstBit: parent.consoleObj.updateConsole( "!!! Error !!! Unexpected | at line num %d." % (parent.lineNumList[parent.currToken])) return (1218) parent.currToken += 1 elif tokenType == ProcLedChains.ZERO: if not firstBit: parent.consoleObj.updateConsole( "!!! Error !!! 0 not first bit in mask at line num %d." % (parent.lineNumList[parent.currToken])) return (1219) if (typeProc == ProcLedChains.PROC_MASK): ProcLedChains.outHndl.write(",\n [ [ ") parent.currToken += 1 typeProc = ProcLedChains.PROC_LED_BIT firstBit = True elif (typeProc == ProcLedChains.PROC_LED_BIT): parent.currToken += 1 typeProc = ProcLedChains.PROC_LED_BIT firstBit = True else: parent.consoleObj.updateConsole( "!!! Error !!! Unexpected 0 at line num %d." % (parent.lineNumList[parent.currToken])) return (1220) else: #This must be a bit name symbol if (ProcChains.checkNameExists( parent.procChains, parent.tokens[parent.currToken])): if (ProcChains.getNameType(parent.procChains, parent.tokens[parent.currToken]) != ProcChains.LED_BIT): parent.consoleObj.updateConsole( "!!! Error !!! Symbol %s should only be an LED bit, at line num %d." % (parent.tokens[parent.currToken], parent.lineNumList[parent.currToken])) return (1221) else: # HRS: This could be improved to verify any set bits are in the mask card = parent.procChains.findBit( parent.tokens[parent.currToken].upper()) >> 16 ledCard[card].append("LedBitNames.{0}".format( parent.tokens[parent.currToken].upper())) firstBit = False parent.currToken += 1 else: parent.consoleObj.updateConsole( "!!! Error !!! Can't understand symbol, read %s, at line num %d." % (parent.tokens[parent.currToken], parent.lineNumList[parent.currToken])) return (1222) if (typeProc != ProcLedChains.PROC_DONE_CHAIN): parent.consoleObj.updateConsole( "!!! Error !!! LED chain did not end properly, at line num %d." % (parent.lineNumList[parent.currToken])) return (1223) parent.currToken += 1 return (0)
def procAllModes(self, parent): # Copy name name = parent.tokens[parent.currToken] if (name in ProcModes.nameSet): parent.consoleObj.updateConsole( "!!! Error !!! Mode name found twice, read %s, at line num %d." % (parent.tokens[parent.currToken], parent.lineNumList[parent.currToken])) return (1510) ProcModes.nameSet.add(name) ProcModes.name.append(name) ProcChains.addName(parent.procChains, name, ProcChains.MODE_NAME) ProcModes.outHndl.write(" [State.{0}, ".format(name.upper())) parent.currToken += 1 # Next symbol should be the description in quotes. # HRS: This should probably support spaces inside the quotes but that will break the current # tokenizer function. desc = parent.tokens[parent.currToken] if (not desc.startswith('"')) or (not desc.endswith('"')): parent.consoleObj.updateConsole( "!!! Error !!! Descriptions strings should start and end with quotes, read %s, at line num %d." % (desc, parent.lineNumList[parent.currToken])) return (1511) ProcModes.desc.append(desc) parent.currToken += 1 # Verify opening symbol if not parent.helpFuncs.isOpenSym(parent.tokens[parent.currToken]): parent.consoleObj.updateConsole( "!!! Error !!! Expected opening symbol, read %s, at line num %d." % (parent.tokens[parent.currToken], parent.lineNumList[parent.currToken])) return (1512) closeSymb = parent.helpFuncs.findMatch(parent) parent.currToken += 1 typeProc = ProcModes.PROC_INIT_CHAIN subState = ProcModes.FIND_OPEN_PAREN while parent.currToken < closeSymb: if parent.tokens[parent.currToken] in ProcModes.tokenLookup: tokenType = ProcModes.tokenLookup[parent.tokens[ parent.currToken]] else: tokenType = ProcModes.UNKNOWN if (tokenType == ProcModes.OPEN_PAREN): # Opening is the beginning of a chain group if (subState != ProcModes.FIND_OPEN_PAREN): parent.consoleObj.updateConsole( "!!! Error !!! Expected opening paren, read %s, at line num %d." % (parent.tokens[parent.currToken], parent.lineNumList[parent.currToken])) return (1513) # Find the matching close parenthesis if (typeProc == ProcModes.PROC_INIT_CHAIN) or ( typeProc == ProcModes.PROC_PROCESS_CHAIN): ProcModes.outHndl.write("[") closeChainList = parent.helpFuncs.findMatch(parent) parent.currToken += 1 subState = ProcModes.FIND_CHAIN hasEntries = False elif (tokenType == ProcModes.CLOSE_PAREN): if not hasEntries: # If this is an audio, LED, scoring, or video chain, need to add starting bracket # to create an empty list if (typeProc == ProcModes.PROC_AUDIO_CHAIN) or (typeProc == ProcModes.PROC_LED_CHAIN) or \ (typeProc == ProcModes.PROC_SCORING) or (typeProc == ProcModes.PROC_VIDEO_CHAIN): ProcModes.outHndl.write("[") # If there are no entries, a close parenthesis is valid ProcModes.outHndl.write("]") else: if (subState != ProcModes.FIND_COMMA) and ( subState != ProcModes.FIND_END): parent.consoleObj.updateConsole( "!!! Error !!! Found close parenthesis at incorrect location at line num %d." % (parent.lineNumList[parent.currToken])) return (1514) else: if (typeProc == ProcModes.PROC_INIT_CHAIN) or ( typeProc == ProcModes.PROC_PROCESS_CHAIN): ProcModes.outHndl.write("]") subState = ProcModes.FIND_OPEN_PAREN if (typeProc == ProcModes.PROC_SCORING): ProcModes.outHndl.write(" ],\n") typeProc = ProcModes.PROC_END_MODE else: ProcModes.outHndl.write(", ") typeProc += 1 parent.currToken += 1 elif (tokenType == ProcModes.COMMA): if subState != ProcModes.FIND_COMMA: parent.consoleObj.updateConsole( "!!! Error !!! Comma in incorrect location at line num %d." % (parent.lineNumList[parent.currToken])) return (1515) ProcModes.outHndl.write(", ") parent.currToken += 1 subState = ProcModes.FIND_CHAIN else: #This must be a name symbol if (ProcChains.checkNameExists( parent.procChains, parent.tokens[parent.currToken])): nameType = ProcChains.getNameType( parent.procChains, parent.tokens[parent.currToken]) if (typeProc == ProcModes.PROC_INIT_CHAIN): if (nameType != ProcChains.CHAIN_NAME): parent.consoleObj.updateConsole( "!!! Error !!! Expected a chain name in init chain, read %s, at line num %d." % (parent.tokens[parent.currToken], parent.lineNumList[parent.currToken])) return (1516) ProcModes.outHndl.write( "RulesFunc." + parent.tokens[parent.currToken]) subState = ProcModes.FIND_COMMA hasEntries = True parent.currToken += 1 elif (typeProc == ProcModes.PROC_PROCESS_CHAIN): if (nameType != ProcChains.CHAIN_NAME): parent.consoleObj.updateConsole( "!!! Error !!! Expected a chain name in process chain, read %s, at line num %d." % (parent.tokens[parent.currToken], parent.lineNumList[parent.currToken])) return (1517) ProcModes.outHndl.write( "RulesFunc." + parent.tokens[parent.currToken]) subState = ProcModes.FIND_COMMA hasEntries = True parent.currToken += 1 elif (typeProc == ProcModes.PROC_VIDEO_CHAIN): if (nameType == ProcChains.VIDEO_NAME): ProcModes.outHndl.write( "Videos." + parent.tokens[parent.currToken].upper()) elif (nameType == ProcChains.VIDEO_CHAIN_NAME): # HRS: Warning, in the original code, chains were not contained within another list, # but were simply part of the procChains table. This will need to be fixed by removing # the extra list (which would make multiple chains not work), or combining the chains # into one. ProcModes.outHndl.write( "VideoChains." + parent.tokens[parent.currToken]) elif (nameType == ProcChains.IMAGE_NAME): ProcModes.outHndl.write( "Images." + parent.tokens[parent.currToken].upper()) elif (nameType == ProcChains.IMAGE_CHAIN_NAME): # HRS: Warning, in the original code, chains were not contained within another list, # but were simply part of the procChains table. This will need to be fixed by removing # the extra list (which would make multiple chains not work), or combining the chains # into one. ProcModes.outHndl.write( "ImageChains." + parent.tokens[parent.currToken]) else: parent.consoleObj.updateConsole( "!!! Error !!! Expected a video/image or video/image chain, read %s, at line num %d." % (parent.tokens[parent.currToken], parent.lineNumList[parent.currToken])) return (1518) subState = ProcModes.FIND_COMMA hasEntries = True parent.currToken += 1 elif (typeProc == ProcModes.PROC_AUDIO_CHAIN): if (nameType == ProcChains.SOUND_NAME): ProcModes.outHndl.write( "Sounds." + parent.tokens[parent.currToken].upper()) elif (nameType == ProcChains.SOUND_CHAIN_NAME): ProcModes.outHndl.write( "SoundChains." + parent.tokens[parent.currToken]) else: parent.consoleObj.updateConsole( "!!! Error !!! Expected a sound or sound chain name, read %s, at line num %d." % (parent.tokens[parent.currToken], parent.lineNumList[parent.currToken])) return (1519) subState = ProcModes.FIND_COMMA hasEntries = True parent.currToken += 1 elif (typeProc == ProcModes.PROC_LED_CHAIN): if (nameType == ProcChains.LED_CHAIN_NAME): ProcModes.outHndl.write( "LedChains." + parent.tokens[parent.currToken]) else: parent.consoleObj.updateConsole( "!!! Error !!! Expected an LED chain name, read %s, at line num %d." % (parent.tokens[parent.currToken], parent.lineNumList[parent.currToken])) return (1520) subState = ProcModes.FIND_COMMA hasEntries = True parent.currToken += 1 elif (typeProc == ProcModes.PROC_SCORING): print "Not implemented" parent.currToken += 1 else: parent.consoleObj.updateConsole( "!!! Error !!! Parsing error, invalid typeProc = %d, at line num %d." % (typeProc, parent.lineNumList[parent.currToken])) return (1521) else: # Assume this is the name of a chain ProcChains.possChainDict[parent.tokens[ parent.currToken]] = parent.lineNumList[ parent.currToken] ProcModes.outHndl.write("RulesFunc." + parent.tokens[parent.currToken]) subState = ProcModes.FIND_COMMA hasEntries = True parent.currToken += 1 if (typeProc != ProcModes.PROC_END_MODE): parent.consoleObj.updateConsole( "!!! Error !!! Mode did not end properly, at line num %d." % (parent.lineNumList[parent.currToken])) return (1523) parent.currToken += 1 return (0)
def procSection(self, parent): parent.consoleObj.updateConsole("Processing %s section" % parent.tokens[parent.currToken]) if (parent.tokens[parent.currToken] == "FIRST_MODE"): #Check if section found before if (ProcSimple.foundInit): parent.consoleObj.updateConsole("!!! Error !!! Found multiple FIRST_MODE commands, at line num %d." % (parent.lineNumList[parent.currToken])) return (900) ProcSimple.foundInit = True #Verify parent.tokens[parent.currToken + 1] is a valid mode if (ProcChains.checkNameExists(parent.procChains, parent.tokens[parent.currToken + 1])): nameType = ProcChains.getNameType(parent.procChains, parent.tokens[parent.currToken + 1]) if (nameType != ProcChains.MODE_NAME): parent.consoleObj.updateConsole("!!! Error !!! FIRST_MODE symbole should be a mode, read %s, at line num %d." % (parent.tokens[parent.currToken + 1], parent.lineNumList[parent.currToken + 1])) return (901) else: ProcSimple.initMode = parent.tokens[parent.currToken + 1] else: parent.consoleObj.updateConsole("!!! Error !!! Can't understand symbol, read %s, at line num %d." % (parent.tokens[parent.currToken + 1], parent.lineNumList[parent.currToken + 1])) return (902) parent.consoleObj.updateConsole("Done processing FIRST_MODE") parent.currToken += 2 elif (parent.tokens[parent.currToken] == "TICK_TIME"): if not parent.helpFuncs.isInt(parent.tokens[parent.currToken + 1]): parent.consoleObj.updateConsole("!!! Error !!! Indexed variable numEntries, read %s, at line num %d." % (parent.tokens[parent.currToken + 1], parent.lineNumList[parent.currToken + 1])) return (910) ProcSimple.tickTime = parent.helpFuncs.out parent.currToken += 2 elif (parent.tokens[parent.currToken] == "CARD_ORDER"): parent.currToken += 1 if not parent.helpFuncs.isOpenSym(parent.tokens[parent.currToken]): parent.consoleObj.updateConsole("!!! Error !!! Expected opening symbol, read %s, at line num %d." % (parent.tokens[parent.currToken], parent.lineNumList[parent.currToken])) return (920) closeSymb = parent.helpFuncs.findMatch(parent) parent.currToken += 1 while parent.currToken < closeSymb: # Ignore all commas if (parent.tokens[parent.currToken] == ","): pass elif (parent.tokens[parent.currToken] == "INPUT_CARD"): ProcSimple.cardInv.append((ord)(rs232Intf.CARD_ID_INP_CARD) + ProcSimple.currInp) ProcSimple.currInp += 1 elif (parent.tokens[parent.currToken] == "SOLENOID_CARD"): ProcSimple.cardInv.append((ord)(rs232Intf.CARD_ID_SOL_CARD) + ProcSimple.currSol) ProcSimple.currSol += 1 else: parent.consoleObj.updateConsole("!!! Error !!! Expected INPUT_CARD or SOLENOID_CARD, read %s, at line num %d." % (parent.tokens[parent.currToken], parent.lineNumList[parent.currToken])) return (921) parent.currToken += 1 parent.currToken += 1 else: print parent.tokens[parent.currToken] parent.consoleObj.updateConsole("!!! SW Error !!! Expected FIRST_MODE or TICK_TIME, read %s, at line num %d." % (parent.tokens[parent.currToken], parent.lineNumList[parent.currToken])) return (920) return (0)
def procAllModes(self, parent): # Copy name name = parent.tokens[parent.currToken] if (name in ProcModes.nameSet): parent.consoleObj.updateConsole("!!! Error !!! Mode name found twice, read %s, at line num %d." % (parent.tokens[parent.currToken], parent.lineNumList[parent.currToken])) return (1510) ProcModes.nameSet.add(name) ProcModes.name.append(name) ProcChains.addName(parent.procChains, name, ProcChains.MODE_NAME) ProcModes.outHndl.write(" [State.{0}, ".format(name.upper())) parent.currToken += 1 # Next symbol should be the description in quotes. # HRS: This should probably support spaces inside the quotes but that will break the current # tokenizer function. desc = parent.tokens[parent.currToken] if (not desc.startswith('"')) or (not desc.endswith('"')): parent.consoleObj.updateConsole("!!! Error !!! Descriptions strings should start and end with quotes, read %s, at line num %d." % (desc, parent.lineNumList[parent.currToken])) return (1511) ProcModes.desc.append(desc) parent.currToken += 1 # Verify opening symbol if not parent.helpFuncs.isOpenSym(parent.tokens[parent.currToken]): parent.consoleObj.updateConsole("!!! Error !!! Expected opening symbol, read %s, at line num %d." % (parent.tokens[parent.currToken], parent.lineNumList[parent.currToken])) return (1512) closeSymb = parent.helpFuncs.findMatch(parent) parent.currToken += 1 typeProc = ProcModes.PROC_INIT_CHAIN subState = ProcModes.FIND_OPEN_PAREN while parent.currToken < closeSymb: if parent.tokens[parent.currToken] in ProcModes.tokenLookup: tokenType = ProcModes.tokenLookup[parent.tokens[parent.currToken]] else: tokenType = ProcModes.UNKNOWN if (tokenType == ProcModes.OPEN_PAREN): # Opening is the beginning of a chain group if (subState != ProcModes.FIND_OPEN_PAREN): parent.consoleObj.updateConsole("!!! Error !!! Expected opening paren, read %s, at line num %d." % (parent.tokens[parent.currToken], parent.lineNumList[parent.currToken])) return (1513) # Find the matching close parenthesis if (typeProc == ProcModes.PROC_INIT_CHAIN) or (typeProc == ProcModes.PROC_PROCESS_CHAIN): ProcModes.outHndl.write("[") closeChainList = parent.helpFuncs.findMatch(parent) parent.currToken += 1 subState = ProcModes.FIND_CHAIN hasEntries = False elif (tokenType == ProcModes.CLOSE_PAREN): if not hasEntries: # If this is an audio, LED, scoring, or video chain, need to add starting bracket # to create an empty list if (typeProc == ProcModes.PROC_AUDIO_CHAIN) or (typeProc == ProcModes.PROC_LED_CHAIN) or \ (typeProc == ProcModes.PROC_SCORING) or (typeProc == ProcModes.PROC_VIDEO_CHAIN): ProcModes.outHndl.write("[") # If there are no entries, a close parenthesis is valid ProcModes.outHndl.write("]") else: if (subState != ProcModes.FIND_COMMA) and (subState != ProcModes.FIND_END): parent.consoleObj.updateConsole("!!! Error !!! Found close parenthesis at incorrect location at line num %d." % (parent.lineNumList[parent.currToken])) return (1514) else: if (typeProc == ProcModes.PROC_INIT_CHAIN) or (typeProc == ProcModes.PROC_PROCESS_CHAIN): ProcModes.outHndl.write("]") subState = ProcModes.FIND_OPEN_PAREN if (typeProc == ProcModes.PROC_SCORING): ProcModes.outHndl.write(" ],\n") typeProc = ProcModes.PROC_END_MODE else: ProcModes.outHndl.write(", ") typeProc += 1 parent.currToken += 1 elif (tokenType == ProcModes.COMMA): if subState != ProcModes.FIND_COMMA: parent.consoleObj.updateConsole("!!! Error !!! Comma in incorrect location at line num %d." % (parent.lineNumList[parent.currToken])) return (1515) ProcModes.outHndl.write(", ") parent.currToken += 1 subState = ProcModes.FIND_CHAIN else: #This must be a name symbol if (ProcChains.checkNameExists(parent.procChains, parent.tokens[parent.currToken])): nameType = ProcChains.getNameType(parent.procChains, parent.tokens[parent.currToken]) if (typeProc == ProcModes.PROC_INIT_CHAIN): if (nameType != ProcChains.CHAIN_NAME): parent.consoleObj.updateConsole("!!! Error !!! Expected a chain name in init chain, read %s, at line num %d." % (parent.tokens[parent.currToken], parent.lineNumList[parent.currToken])) return (1516) ProcModes.outHndl.write("RulesFunc." + parent.tokens[parent.currToken]) subState = ProcModes.FIND_COMMA hasEntries = True parent.currToken += 1 elif (typeProc == ProcModes.PROC_PROCESS_CHAIN): if (nameType != ProcChains.CHAIN_NAME): parent.consoleObj.updateConsole("!!! Error !!! Expected a chain name in process chain, read %s, at line num %d." % (parent.tokens[parent.currToken], parent.lineNumList[parent.currToken])) return (1517) ProcModes.outHndl.write("RulesFunc." + parent.tokens[parent.currToken]) subState = ProcModes.FIND_COMMA hasEntries = True parent.currToken += 1 elif (typeProc == ProcModes.PROC_VIDEO_CHAIN): if (nameType == ProcChains.VIDEO_NAME): ProcModes.outHndl.write("Videos." + parent.tokens[parent.currToken].upper()) elif (nameType == ProcChains.VIDEO_CHAIN_NAME): # HRS: Warning, in the original code, chains were not contained within another list, # but were simply part of the procChains table. This will need to be fixed by removing # the extra list (which would make multiple chains not work), or combining the chains # into one. ProcModes.outHndl.write("VideoChains." + parent.tokens[parent.currToken]) elif (nameType == ProcChains.IMAGE_NAME): ProcModes.outHndl.write("Images." + parent.tokens[parent.currToken].upper()) elif (nameType == ProcChains.IMAGE_CHAIN_NAME): # HRS: Warning, in the original code, chains were not contained within another list, # but were simply part of the procChains table. This will need to be fixed by removing # the extra list (which would make multiple chains not work), or combining the chains # into one. ProcModes.outHndl.write("ImageChains." + parent.tokens[parent.currToken]) else: parent.consoleObj.updateConsole("!!! Error !!! Expected a video/image or video/image chain, read %s, at line num %d." % (parent.tokens[parent.currToken], parent.lineNumList[parent.currToken])) return (1518) subState = ProcModes.FIND_COMMA hasEntries = True parent.currToken += 1 elif (typeProc == ProcModes.PROC_AUDIO_CHAIN): if (nameType == ProcChains.SOUND_NAME): ProcModes.outHndl.write("Sounds." + parent.tokens[parent.currToken].upper()) elif (nameType == ProcChains.SOUND_CHAIN_NAME): ProcModes.outHndl.write("SoundChains." + parent.tokens[parent.currToken]) else: parent.consoleObj.updateConsole("!!! Error !!! Expected a sound or sound chain name, read %s, at line num %d." % (parent.tokens[parent.currToken], parent.lineNumList[parent.currToken])) return (1519) subState = ProcModes.FIND_COMMA hasEntries = True parent.currToken += 1 elif (typeProc == ProcModes.PROC_LED_CHAIN): if (nameType == ProcChains.LED_CHAIN_NAME): ProcModes.outHndl.write("LedChains." + parent.tokens[parent.currToken]) else: parent.consoleObj.updateConsole("!!! Error !!! Expected an LED chain name, read %s, at line num %d." % (parent.tokens[parent.currToken], parent.lineNumList[parent.currToken])) return (1520) subState = ProcModes.FIND_COMMA hasEntries = True parent.currToken += 1 elif (typeProc == ProcModes.PROC_SCORING): print "Not implemented" parent.currToken += 1 else: parent.consoleObj.updateConsole("!!! Error !!! Parsing error, invalid typeProc = %d, at line num %d." % (typeProc, parent.lineNumList[parent.currToken])) return (1521) else: # Assume this is the name of a chain ProcChains.possChainDict[parent.tokens[parent.currToken]] = parent.lineNumList[parent.currToken] ProcModes.outHndl.write("RulesFunc." + parent.tokens[parent.currToken]) subState = ProcModes.FIND_COMMA hasEntries = True parent.currToken += 1 if (typeProc != ProcModes.PROC_END_MODE): parent.consoleObj.updateConsole("!!! Error !!! Mode did not end properly, at line num %d." % (parent.lineNumList[parent.currToken])) return (1523) parent.currToken += 1 return (0)
def procAllChains(self, parent): # Copy name name = parent.tokens[parent.currToken] if (name in ProcVidChains.nameSet): parent.consoleObj.updateConsole("!!! Error !!! Name found twice, read %s, at line num %d." % (parent.tokens[parent.currToken], parent.lineNumList[parent.currToken])) return (1410) ProcVidChains.nameSet.add(name) ProcChains.addName(parent.procChains, name, ProcChains.VIDEO_CHAIN_NAME) ProcVidChains.outHndl.write(" ## Video Chain {0}\n".format(name)) ProcVidChains.outHndl.write(" # - Groups have video name then WAIT command\n") ProcVidChains.outHndl.write(" # - Chain ends with REPEAT if desired\n") ProcVidChains.outHndl.write(" {0} = [\n".format(name)) # Verify opening symbol parent.currToken += 1 if not parent.helpFuncs.isOpenSym(parent.tokens[parent.currToken]): parent.consoleObj.updateConsole("!!! Error !!! Expected opening symbol, read %s, at line num %d." % (parent.tokens[parent.currToken], parent.lineNumList[parent.currToken])) return (1411) closeSymb = parent.helpFuncs.findMatch(parent) parent.currToken += 1 typeProc = ProcVidChains.PROC_VIDEO while parent.currToken < closeSymb: if parent.tokens[parent.currToken] in ProcVidChains.tokenLookup: tokenType = ProcVidChains.tokenLookup[parent.tokens[parent.currToken]] else: tokenType = ProcVidChains.UNKNOWN if tokenType == ProcVidChains.WAIT_COMMAND: if typeProc != ProcVidChains.PROC_COMMAND: parent.consoleObj.updateConsole("!!! Error !!! WAIT command in video chain in incorrect location at line num %d." % (parent.lineNumList[parent.currToken])) return (1412) # Next token should be wait timeout (ms) if not parent.helpFuncs.isInt(parent.tokens[parent.currToken + 1]): parent.consoleObj.updateConsole("!!! Error !!! WAIT parameter should be integer, read %s, at line num %d." % (parent.tokens[parent.currToken + 1], parent.lineNumList[parent.currToken + 1])) return (1413) ProcVidChains.outHndl.write(" WAIT, " + parent.tokens[parent.currToken + 1] + "],\n") parent.currToken += 2 # Next token must be a comma if (ProcVidChains.tokenLookup[parent.tokens[parent.currToken]] != ProcVidChains.COMMA): parent.consoleObj.updateConsole("!!! Error !!! Comma missing after wait command, found %s, at line num %d." % (parent.tokens[parent.currToken], parent.lineNumList[parent.currToken])) return (1414) parent.currToken += 1 typeProc = ProcVidChains.PROC_VIDEO elif tokenType == ProcVidChains.REPEAT_COMMAND: if (typeProc == ProcVidChains.PROC_VIDEO): ProcVidChains.outHndl.write(" [0, ") elif (typeProc == ProcVidChains.PROC_COMMAND): pass else: parent.consoleObj.updateConsole("!!! Error !!! REPEAT command in video chain in incorrect location at line num %d." % (parent.lineNumList[parent.currToken])) return (1415) ProcVidChains.outHndl.write("REPEAT, 0] ]\n\n") typeProc = ProcVidChains.PROC_DONE_CHAIN parent.currToken += 1 elif tokenType == ProcVidChains.COMMA: if (typeProc == ProcVidChains.PROC_VIDEO) or (typeProc == ProcVidChains.PROC_COMMAND): # No processing necessary, next sound will start the line parent.currToken += 1 else: parent.consoleObj.updateConsole("!!! Error !!! Unexpected comma at line num %d." % (parent.lineNumList[parent.currToken])) return (1416) else: #This must be a video name if (ProcChains.checkNameExists(parent.procChains, parent.tokens[parent.currToken])): if (ProcChains.getNameType(parent.procChains, parent.tokens[parent.currToken]) != ProcChains.VIDEO_NAME): parent.consoleObj.updateConsole("!!! Error !!! Symbol %s should only be a video name, at line num %d." % (parent.tokens[parent.currToken], parent.lineNumList[parent.currToken])) return (1417) else: if typeProc == ProcVidChains.PROC_VIDEO: ProcVidChains.outHndl.write(" [Videos.{0}, ".format(parent.tokens[parent.currToken])) typeProc = ProcVidChains.PROC_COMMAND parent.currToken += 1 elif typeProc == ProcVidChains.PROC_COMMAND: # Two or more sounds back to back, put a wait of 0 between them ProcVidChains.outHndl.write("WAIT, 0],\n [Videos.{0}, ".format(parent.tokens[parent.currToken])) parent.currToken += 1 else: parent.consoleObj.updateConsole("!!! Error !!! Can't understand symbol, read %s, at line num %d." % (parent.tokens[parent.currToken], parent.lineNumList[parent.currToken])) return (1418) if (typeProc != ProcVidChains.PROC_DONE_CHAIN): parent.consoleObj.updateConsole("!!! Error !!! Video chain did not end properly, at line num %d." % (parent.lineNumList[parent.currToken])) return (1419) parent.currToken += 1 return (0)