How to use Tinyxml for G85 wafermap to C?

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • thyeun
    New Member
    • Jun 2010
    • 3

    #1

    How to use Tinyxml for G85 wafermap to C?

    Anyone have an idea how to use tinyxml for G85 wafermap to C?
    Code:
    <?xml version='1.0' encoding='utf-8'?>
    - <Maps>
    - <Map xmlns="http://www.semi.org" SubstrateId="123456705F2" SubstrateType="Wafer"
    FormatRevision="SEMI G85-0703">
    - <Device Rows="35" LotId="1234567.111" BinType="ASCII" Columns="40" MapType="Array"
    NullBin="0" ProductId="MT*" WaferSize="200" CreateDate="20050117093925000" DeviceSizeX="4800.60"
    DeviceSizeY="5484.12" MicronLotId="1234567.111" Orientation="0" SupplierName="Micron Technology,
    Inc." OriginLocation="2">
    <ReferenceDevice ReferenceDeviceX="27" ReferenceDeviceY="34"/>
    <Bin BinCode="G" BinCount="830" BinQuality="Pass"/>
    <Bin BinCode="X" BinCount="255" BinQuality="Fail"/>
    - <Data>
    -<Row><![CDATA[00000000000000XXXXGXXGGGXX00000000000000]]></Row>
    -<Row><![CDATA[000000000000XXXGGXXGXGGXGGGX000000000000]]></Row>
    -<Row><![CDATA[0000000000XGXGGGGGGGGXXXGGGGGX0000000000]]></Row>
    -<Row><![CDATA[00000000GGGGGXGGGGGXGXGGGGGXGGXX00000000]]></Row>
    -<Row><![CDATA[000000XGXGGGGGGGGGGGGGGGGGGGGGGGG0000000]]></Row>
    -<Row><![CDATA[00000XXXGXXXGGGGGGGGXXGGGXGGGGGGGGX00000]]></Row>
    -<Row><![CDATA[0000XXGGGGGGGGGGGGGGGGGGGGGGGGGGGGX00000]]></Row>
    -<Row><![CDATA[0000GGGGGXGGGGGGGGGGGGGGXGGGXGGGGGGX0000]]></Row>
    -<Row><![CDATA[000GGGGGGGGGGGGGGGGGGGGGGXGGGGGXGGXGX000]]></Row>
    -<Row><![CDATA[00XXGGGGXGGXGGGGGGGXGGGGGXXGGGGGGXXGGX00]]></Row>
    -<Row><![CDATA[00GGGGGGXGXGGGGGGGGGGGGGGGGXXGGXGGGGGG00]]></Row>
    -<Row><![CDATA[0XGGGGXGGXGGXGGGGGGGGGGGGGGGGGGGGGGGGGX0]]></Row>
    -<Row><![CDATA[0GGGXXGGGXXXGGGGGGGGGGGGGGXGGXGGGXXGGGX0]]></Row>
    -<Row><![CDATA[0XGGGGGGGGGXGGGGGGGGGXGGGGXXGGGGGGGGGGG0]]></Row>
    -<Row><![CDATA[XGGGGGGGGGGXGGGXGGXGGGGGXGXXGGGGGGGGXGGX]]></Row>
    -<Row><![CDATA[XGGGGGGGXGXXGGGGGGGGGGGGGGXGGXGGGXGGXGGX]]></Row>
    -<Row><![CDATA[XGGGGGGXXGGXGGGGGGGXXGGGXGGXGXXGGXGXXGGX]]></Row>
    -<Row><![CDATA[XGXGGGGGXGXXXXGGGGGXXGGGXXXXXXXGXGGGGGGX]]></Row>
    -<Row><![CDATA[XGGGXGGGGGXGGGGGGGGGXGGGXXGGGXXGGGGGGGGX]]></Row>
    -<Row><![CDATA[XGXGXGGGGGGXGGGXGGGGGGXGGGGGXXGGGGGGGGGX]]></Row>
    -<Row><![CDATA[XGGGGGGGXXGGGGGGXGGXGGGXGGGGXGGGGGGGGXGX]]></Row>
    -<Row><![CDATA[0GXGGGGGGGGGGGGGXGGGGGGGGGGGGGGXGGGGGGG0]]></Row>
    -<Row><![CDATA[0GXGGGGGGGGGGGGGGGGGGXGGGGGGXXGXGXGGGGX0]]></Row>
    -<Row><![CDATA[0XXGGGGGGGGGGGXGGGGGGGGGGGGGGGXXGGGXGG00]]></Row>
    -<Row><![CDATA[00GGGGGGGGGGGGGGGGGGGGXGGGXGGGXGGGGGGX00]]></Row>
    -<Row><![CDATA[000GGGGGGGGGGGGGGGXGGGGGGXGGGGXGXGGGG000]]></Row>
    -<Row><![CDATA[000XGGGGXGGGGGGGGGGGGXGGGGGGGGGXGGGGX000]]></Row>
    -<Row><![CDATA[00000XGGGGGGGGGGGGGGXXGGGGGGXXXGGGXX0000]]></Row>
    -<Row><![CDATA[00000XGGGGGGXXGGGGGGGGGGGXGXGGGXXGX00000]]></Row>
    -<Row><![CDATA[000000GGGXGGGGGGGGGGXXGGGGGXXGGXXX000000]]></Row>
    -<Row><![CDATA[0000000XXGGGGGGGGGGGXGGXGGXXXGXGX0000000]]></Row>
    -<Row><![CDATA[000000000GGGGXXGXGGGGGGGGGXGGXX000000000]]></Row>
    -<Row><![CDATA[00000000000XXXGGGGGGGGXXGGXGXX0000000000]]></Row>
    -<Row><![CDATA[0000000000000XXGGGXXXXGXXXX0000000000000]]></Row>
    -<Row><![CDATA[0000000000000000XXXXXXX00000000000000000]]></Row>
    </Data>
    </Device>
    </Map>
    </Maps>
  • thyeun
    New Member
    • Jun 2010
    • 3

    #2
    Code:
    bool G85MapParser::ReadHeaderData()
    {
    		CString csFormatRevision;
    		CString csRow;
    		CString csBintype;
    
    		TiXmlElement *pRoot, *pDevice, *pMap, *pData, *pRow;
    		TiXmlText *pRowData;
    		TiXmlAttribute *pFormatRevision, *pwaferId, *psubstrateId, *pLotId, *pOrientation, *pFrameId, *pRows, *pColumns, *pOriginLocation, *pNullBin, *pBinType, *pBinQuality, *pBinCode, *pReference, *pBin; 
    		
    		pRoot = m_pXMLFile->RootElement(); //maps
    		if ( pRoot!=NULL && (m_pNode=pRoot->FirstChild("Maps"))!=NULL )
    		{
    			pMap = pRoot->FirstChildElement("Map");
    			while (pMap)
    			{
    				pFormatRevision = pMap->FirstAttribute();
    				if (pFormatRevision)
    				{	
    					csFormatRevision = pFormatRevision->Value();
    					if (csFormatRevision == "SEMI G85-1101")
    					{
    						pwaferId = pMap->FirstAttribute();
    						pwaferId->Value();
    					}
    					else 
    					{	if (csFormatRevision == "SEMI G85-0703")
    						{
    							psubstrateId = pMap->FirstAttribute();
    							psubstrateId->Value();
    							pwaferId = pMap->FirstAttribute();
    							if (pwaferId)
    							{
    								pwaferId->Value();
    								//pwaferId->GetNewObject(pwaferId);
    							}
    						}
    					}
    					//pFormatRevision->GetNewObject(pFormatRevision);
    				}
    			
    				pDevice = pMap->FirstChildElement("Device");
    				while (pDevice)
    				{
    					pLotId = pDevice->FirstAttribute();
    					if (pLotId)
    					{
    						pLotId->Value();
    						//pLotId->GetNewObject(pLotId);
    					}
    					
    					pOrientation = pDevice->FirstAttribute();
    					if (pOrientation)
    					{
    						pOrientation->Value();
    						//pOrientation->GetNewObject(pOrientation);
    					}
    					
    					pFrameId = pDevice->FirstAttribute();
    					if (pFrameId)
    					{
    						pFrameId->Value();
    						//pFrameId->GetNewObject(pFrameId);
    					}
    					
    					pRows = pDevice->FirstAttribute();
    					if (pRows)
    					{
    						pRows->Value();
    						//pRows->GetNewObject(pRows);
    					}
    					
    					pReference = pDevice->FirstAttribute();
    					if (pReference)
    						{
    							pReference->Value();
    						}
    					
    					pBin = pDevice->FirstAttribute();
    					if (pBin)
    					{
    						pBin->Value();
    					}
    
    					pColumns = pDevice->FirstAttribute();
    					if (pColumns)
    					{
    						pColumns->Value();
    						//pColumns->GetNewObject(pColumns);
    					}
    					
    					pOriginLocation = pDevice->FirstAttribute();
    					if (pOriginLocation)
    					{
    						pOriginLocation->Value();
    						//pOriginLocation->GetNewObject(pOriginLocation);
    					}
    					
    
    					pNullBin = pDevice->FirstAttribute();
    					if (pNullBin)
    					{
    						pNullBin->Value();
    						//pNullBin->GetNewObject(pNullBin);
    					}
    					
    					pBinType = pDevice->FirstAttribute();
    					if (pBinType)
    					{
    						csBintype = pBinType->Value();
    						if (csBintype = "HEXADECIMAL")
    						{
    							m_BCType = BC_HEX;
    							m_pXMLFile->LoadDocument(m_MapFile.buffer());
    						}
    						else 
    						{
    							if (csBintype = "DECIMAL")
    							{
    								m_BCType = BC_DEC;
    								m_pXMLFile->LoadDocument(m_MapFile.buffer());
    							}
    							else
    							{
    								SetError("wrong file name");
    							}
    
    							SetError("wrong file name");
    						}
    
    						//pBinType->GetNewObject(pBinType);
    					}
    					
    					pBinQuality = pDevice->FirstAttribute();
    					if (pBinQuality)
    					{
    						pBinQuality->Value();
    						pBinCode = pDevice->FirstAttribute();
    						//pBinQuality = pDevice->GetNewObject(pBinQuality);
    						break;
                    	}
    					
    					pData = pDevice->FirstChildElement("Data");
    					pRow = NULL;
    					pRowData = NULL;
    					while(pRow = pData->FirstChildElement("Row"))
    					{
    						pRowData = pRow->FirstChild()->ToText();
    						if ( pRowData )
    						{
    							pRowData->SetCDATA(false);
    							csRow = pRowData->Value();
    						}
    					}
    		}
    	}
    }
    
    	else
    	{
    		SetError("Parsing error: 6", APARS_ERR_PARSERR, "1 6");
    		return false;
    	}
    
    	return true;
    }
    can i write it like that

    Comment

    • jkmyoung
      Recognized Expert Top Contributor
      • Mar 2006
      • 2057

      #3
      What is this "G85 wafermap" you speak of? Spec?

      Comment

      • thyeun
        New Member
        • Jun 2010
        • 3

        #4
        Originally posted by jkmyoung
        What is this "G85 wafermap" you speak of? Spec?
        G85 = a standard of SEMI (semiconductor industry)

        so G85 wafermap = a map that use for a wafer to pick-up a die and this file is based on an extension *.xml

        so, what i need is, i need to make this *.xml file into a parser that write in C/C++

        Comment

        Working...