void NetEditorBase::SlotLoadedData() { QDomDocument doc; doc.setContent(m_reply->readAll()); QDomElement root = doc.documentElement(); QDomElement content = root.firstChildElement("InternetContent"); QDomElement grabber = content.firstChildElement("grabber"); while (!grabber.isNull()) { QString title, author, image, description, type, commandline; double version; bool search = false; bool tree = false; title = grabber.firstChildElement("name").text(); commandline = grabber.firstChildElement("command").text(); author = grabber.firstChildElement("author").text(); image = grabber.firstChildElement("thumbnail").text(); type = grabber.firstChildElement("type").text(); description = grabber.firstChildElement("description").text(); version = grabber.firstChildElement("version").text().toDouble(); QString searchstring = grabber.firstChildElement("search").text(); if (!searchstring.isEmpty() && (searchstring.toLower() == "true" || searchstring.toLower() == "yes" || searchstring == "1")) search = true; QString treestring = grabber.firstChildElement("tree").text(); if (!treestring.isEmpty() && (treestring.toLower() == "true" || treestring.toLower() == "yes" || treestring == "1")) tree = true; if (type.toLower() == "video" && Matches(search, tree)) { LOG(VB_GENERAL, LOG_INFO, QString("Found Source %1...").arg(title)); m_grabberList.append(new GrabberScript(title, image, VIDEO_FILE, author, search, tree, description, commandline, version)); } grabber = grabber.nextSiblingElement("grabber"); } ParsedData(); }
bool SRecordParser::ParseLine( unsigned lineNum, const char *line ) { SRecordData sRecData; SRecordHeader sRecHdr; unsigned char data[ 50 ]; memset( &sRecData, 0, sizeof( sRecData )); memset( data, 0, sizeof( data )); if ( line[ 0 ] != 'S' ) { Error( lineNum, "doesn't start with an 'S'" ); return false; } if ( !isdigit( line[ 1 ] )) { Error( lineNum, "expecting digit (0-9), found: '%c'", line[ 1 ]); return false; } const char *s = &line[ 2 ]; unsigned char lineLen; if ( !GetByte( &s, &lineLen, lineNum, "count" )) { return false; } unsigned char checksumCalc = lineLen; for ( int i = 0; i < ( lineLen - 1 ); i++ ) { if ( !GetByte( &s, &data[ i ], lineNum, "data" )) { return false; } checksumCalc += data[ i ]; } checksumCalc = ~checksumCalc; unsigned char checksumFound; if ( !GetByte( &s, &checksumFound, lineNum, "checksum" )) { return false; } if ( checksumFound != checksumCalc ) { Error( lineNum, "found checksum 0x%02x, expecting 0x%02x", checksumFound, checksumCalc ); return false; } switch ( line[ 1 ] ) { case '0': { memset( &sRecHdr, 0, sizeof( sRecHdr )); sRecHdr.m_lineNum = lineNum; memcpy( sRecHdr.m_module, &data[ 2 ], sizeof( sRecHdr.m_module ) - 1 ); memcpy( sRecHdr.m_ver, &data[ 22 ], sizeof( sRecHdr.m_ver ) - 1 ); memcpy( sRecHdr.m_rev, &data[ 24 ], sizeof( sRecHdr.m_rev ) - 1 ); memcpy( sRecHdr.m_comment, &data[ 26 ], sizeof( sRecHdr.m_comment ) - 1 ); Flush(); Header( &sRecHdr ); break; } case '1': case '2': case '3': { memset( &sRecData, 0, sizeof( sRecData )); sRecData.m_lineNum = lineNum; sRecData.m_addrLen = line[ 1 ] - '1' + 2; sRecData.m_recType = line[ 1 ] - '0'; sRecData.m_checksumCalc = checksumCalc; sRecData.m_checksumFound = checksumFound; unsigned char *x = data; for ( int addrIdx = 0; addrIdx < sRecData.m_addrLen; addrIdx++ ) { sRecData.m_addr <<= 8; sRecData.m_addr += *x++; } sRecData.m_dataLen = lineLen - sRecData.m_addrLen - 1; memcpy( sRecData.m_data, x, sRecData.m_dataLen ); ParsedData( &sRecData ); break; } case '5': { Flush(); break; } case '7': case '8': case '9': { memset( &sRecData, 0, sizeof( sRecData )); sRecData.m_lineNum = lineNum; sRecData.m_addrLen = '9' - line[ 1 ] + 2; sRecData.m_recType = line[ 1 ] - '0'; sRecData.m_checksumCalc = checksumCalc; sRecData.m_checksumFound = checksumFound; unsigned char *x = data; for ( int addrIdx = 0; addrIdx < sRecData.m_addrLen; addrIdx++ ) { sRecData.m_addr <<= 8; sRecData.m_addr += *x++; } Flush(); StartAddress( &sRecData ); break; } default: { Error( lineNum, "Unrecognized S-Record: S%c", line[ 1 ] ); return false; } } return true; }
int ParseSRecordLine( Parser_t *parser, const char *line ) { int i; FILE_ParsedData_t *parsedData = &parser->parsedData; uint8_t *data; ClearData( parsedData ); if ( line[ 0 ] != 'S' ) { Error( parser, "doesn't start with an 'S'" ); return FALSE; } if ( !isdigit( line[ 1 ] )) { Error( parser, "expecting digit (0-9), found: '%c'", line[ 1 ]); return FALSE; } const char *s = &line[ 2 ]; unsigned char lineLen; if ( !GetByte( parser, &s, &lineLen, "count" )) { return FALSE; } data = AllocData( parsedData, lineLen ); unsigned char checksumCalc = lineLen; for ( i = 0; i < ( lineLen - 1 ); i++ ) { if ( !GetByte( parser, &s, &data[ i ], "data" )) { return FALSE; } checksumCalc += data[ i ]; } checksumCalc = ~checksumCalc; unsigned char checksumFound; if ( !GetByte( parser, &s, &checksumFound, "checksum" )) { return FALSE; } if ( checksumFound != checksumCalc ) { Error( parser, "found checksum 0x%02x, expecting 0x%02x", checksumFound, checksumCalc ); return FALSE; } switch ( line[ 1 ] ) { case '0': { // Header Record - We ignore this for now Flush( parser ); break; } case '1': // 2 byte address case '2': // 3 byte address case '3': // 4 byte address { int addrIdx; int addrLen = line[ 1 ] - '1' + 2; unsigned char *x = data; for ( addrIdx = 0; addrIdx < addrLen; addrIdx++ ) { parsedData->addr <<= 8; parsedData->addr += *x++; } parsedData->dataLen = lineLen - addrLen - 1; memmove( data, x, parsedData->dataLen ); ParsedData( parser ); break; } case '5': // Count of S1, S2, and S3 records { Flush( parser ); break; } case '7': // 2 byte address case '8': // 3 byte address case '9': // 4 byte address { // Start Address - currently ignored Flush( parser ); break; } default: { Error( parser, "Unrecognized S-Record: S%c", line[ 1 ] ); return FALSE; } } return TRUE; } // ParseSRecordLine
int ParseIHexLine( Parser_t *parser, const char *line ) { int i; FILE_ParsedData_t *parsedData = &parser->parsedData; uint8_t *data; ClearData( parsedData ); if ( line[ 0 ] != ':' ) { // In Intel Hex format, lines which don't start with ':' are // supposed to be ignored. return TRUE; } const char *s = &line[ 1 ]; unsigned char dataLen; if ( !GetByte( parser, &s, &dataLen, "count" )) { return FALSE; } data = AllocData( parsedData, dataLen ); unsigned short addr; if ( !GetWord( parser, &s, &addr, "addr" )) { return FALSE; } unsigned char recType; if ( !GetByte( parser, &s, &recType, "recType" )) { return FALSE; } unsigned char checksumCalc = dataLen + (( addr & 0xFF00 ) >> 8 ) + ( addr & 0x00FF ) + recType; for ( i = 0; i < dataLen; i++ ) { if ( !GetByte( parser, &s, &data[ i ], "data" )) { return FALSE; } checksumCalc += data[ i ]; } unsigned char checksumFound; if ( !GetByte( parser, &s, &checksumFound, "checksum" )) { return FALSE; } if ((unsigned char)( checksumCalc + checksumFound ) != 0 ) { Error( parser, "found checksum 0x%02x, expecting 0x%02x", checksumFound, 0 - checksumCalc ); return FALSE; } switch ( recType ) { case 0: // Data { parsedData->addr = parser->addrBase + addr; parsedData->dataLen = dataLen; ParsedData( parser ); break; } case 1: // EOF { Flush( parser ); break; } case 2: // Segment { parser->addrBase = ((unsigned)data[ 0 ] << 12 ) | ((unsigned)data[ 1 ] << 4 ); break; } case 3: // Entry Point { break; } default: { Error( parser, "Unrecognized record type: %d", recType ); return FALSE; } } return TRUE; } // ParseIHexLine