⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lib2dxddlg.cpp

📁 该软件为EDA行业所用
💻 CPP
📖 第 1 页 / 共 5 页
字号:
//				void CLIB2DXDDlg::TranslateLia()								  //																  //
//////////////////////////////Transform DXP to DXD//////////////////////////////////

void CLIB2DXDDlg::TranslateLia()
{
		if (strcmp(Word,"Accel_ASCII")==0||strcmp(Word,"ACCEL_ASCII")==0)				// *.lia file 
		{
			int BracketCnt=0;

			bufOffset=SeekBracket(bufOffset);
				bufOffset++;				
				BracketCnt++;
			while(BracketCnt>=1)//?		    			//read date
			{											//while-1
				bufOffset=SeekBracket(bufOffset);
				if (*bufOffset==40)			
				{
					bufOffset++;				
					BracketCnt++;
					strGet(Word,SPACE);
					if (strncmp(Word,"timeStamp",9)==0)
					{	
						strGet(year,SPACE);
						strGet(month,SPACE);
						strGet(day,SPACE);					
					}
				}				
				else if (*bufOffset==41)
				{
					BracketCnt--;
					bufOffset++;
				}				     					//read date
			}											//while-1
			//************************ Creat symbol **************
			int heteroNum;
			bufOffset=SeekBracket(bufOffset);
			if (*bufOffset==40)			
			{
				bufOffset++;				
				BracketCnt=1;
			}
			while(BracketCnt>=1)						//while-2 start
			{
				bufOffset=SeekBracket(bufOffset);
				if (*bufOffset==40)				
				{
					bufOffset++;				
					BracketCnt++;
					strGet(Word,SPACE);
					switch (DXPWordAnalyze(Word))				//switch-1 start
					{						
						case 54:// textStyleDefDef
							strGet(Word,34,34);//截止符号为:"0x034
							break;
						case 50:// symbolDef  open a symbol file
							CreatTmpSymbol();
							symbolDef.arcCA.RemoveAll();
							symbolDef.attrCA.RemoveAll();
							symbolDef.homoPinNameCA.RemoveAll();
							symbolDef.pinCA.RemoveAll();
							symbolDef.signalCA.RemoveAll();							
							break;
						case 59:// compDef

							GetCompDef();
							for(heteroNum=0;heteroNum<partDef.numHeteros;heteroNum++)
							{
								if(CreatSymbolFile(heteroNum)&&schDef.placedSymbolName!="")
								{
									//=============== Creat schematic file =====//
									schDef.numSymbols++;
									if(schDef.x>5000)
									{
										schDef.x=0;
										if(schDef.y>4000)
											schDef.y=0;
										else
											schDef.y+=200;
									}
									else
									{
										schDef.x+=200;
									}
									tmpStr=schDef.placedSymbolName;
									fprintf(csvFp,"I %d %s%s 1 %d  %d 0 1 ' \n",
											schDef.numSymbols,partDef.partition,schDef.placedSymbolName,schDef.x,schDef.y);	//write to list file
/*
									fprintf(csvFp,"%s,%s,%s,%s,%s,%s,Acconsys\n",partDef.heteroNameCA.GetAt(heteroNum),
										symbolDef.symbolClass,partDef.deviceName,partDef.attachedPatternName,symbolDef.manufacture,partDef.desc);	//write to list file
									if(heteroNum==partDef.numHeteros-1)
										//WritePartFile();
*/
								}
							}
							//==================== Restore symbolDef compDef partDef =======//
							partDef.heteroNameCA.RemoveAll();
							partDef.supplyCA.RemoveAll();
							partDef.powerCA.RemoveAll();
							compDef.compPinCA.RemoveAll();
							compDef.padNumCA.RemoveAll();
							compDef.attachedSymbolCA.RemoveAll();
							symbolDef.pinCA.RemoveAll();
							symbolDef.homoPinNameCA.RemoveAll();
							symbolDef.pinCA.RemoveAll();
							symbolDef.signalCA.RemoveAll();
							symbolDef.heteroCA.RemoveAll();
							

							break;

						case 81:// compAlias
							CreatAliasSymbol();
							break;

					}							//switch layer1
				}
				else if (*bufOffset==41)
				{
					BracketCnt--;
					bufOffset++;
				}
			}									//while-2 *

		}

}


///////////////////// CreatAliasSymbol ////////////////////////////////
void CLIB2DXDDlg::CreatAliasSymbol(void)
{
	Uint symbolNum=0,fileLength;
	CString	srcSymbolFileName,desSymbolFileName,desSymbolBuf,desFile;
	CString aliaSymbolName;
	CStdioFile srcSymbolFp,desSymbolFp;
	char *tmpP;
	strGet(Word,QUOTATION,QUOTATION);
	tmpStr=Word;
	aliasSymbol.desSymbolName=removeInvalid(tmpStr);
	strGet(Word,QUOTATION,QUOTATION);
	tmpStr=Word;
	aliasSymbol.srcSymbolName=removeInvalid(tmpStr);
	aliasSymbol.srcSymbolFileName=symbolDef.symbolPathName+aliasSymbol.srcSymbolName;
	aliasSymbol.desSymbolFileName=symbolDef.symbolPathName+aliasSymbol.desSymbolName;
	//=============== for component that only have one symbol =======//
	//=============== for component that only have multi symbol =======//
	while(1)
	{
		if(symbolNum==0)											//deal with multi symbols
		{
			srcSymbolFileName=aliasSymbol.srcSymbolFileName+".1";
			desSymbolFileName=aliasSymbol.desSymbolFileName+".1";
			aliaSymbolName=aliasSymbol.desSymbolName;
		}
		else
		{
			tmpStr.Format("_%d.1",symbolNum);
			srcSymbolFileName=aliasSymbol.srcSymbolFileName+tmpStr;
			desSymbolFileName=aliasSymbol.desSymbolFileName+tmpStr;
			aliaSymbolName=aliasSymbol.desSymbolName+tmpStr;
			aliaSymbolName=aliaSymbolName.Left(aliaSymbolName.Find(".1"));
		}
		if(srcSymbolFp.Open(srcSymbolFileName,CFile::modeRead))
		{
			fileLength=srcSymbolFp.GetLength();
			tmpP=desFile.GetBuffer(fileLength);
			//tmpP=tmpStr.GetBuffer(fileLength);
			srcSymbolFp.Read(tmpP,fileLength);
			tmpP[fileLength]=0;
			tmpStr=tmpP;
			desFile.ReleaseBuffer();
//			desSymbolBuf=tmpStr.Left(tmpStr.ReverseFind('E')+1);
//			desSymbolBuf.Replace(aliasSymbol.srcSymbolName,aliasSymbol.desSymbolName);
			desSymbolBuf=tmpStr.Left(tmpStr.Find("L=STD"));		
			desSymbolBuf.Replace(aliasSymbol.srcSymbolName,aliasSymbol.desSymbolName);
			tmpStr=tmpStr.Right(tmpStr.GetLength()-tmpStr.Find("L=STD"));
			desSymbolBuf+=tmpStr.Left(tmpStr.Find('E')+1);
			desSymbolFp.Open(desSymbolFileName,CFile::modeCreate|CFile::modeWrite);
			desSymbolFp.Write(desSymbolBuf,desSymbolBuf.GetLength());
			desSymbolFp.Close();
			srcSymbolFp.Close();
			//fprintf(csvFp,"%s,DEVICE=%s\n",aliaSymbolName,aliasSymbol.desSymbolName );	//write to list file
			schDef.numSymbols++;
			if(schDef.x>5000)
			{
				schDef.x=0;
				if(schDef.y>4000)
					schDef.y=0;
				else
					schDef.y+=200;
			}
			else
			{
				schDef.x+=200;
			}
			fprintf(csvFp,"I %d %s%s 1 %d  %d 0 1 ' \n",
					schDef.numSymbols,partDef.partition,aliaSymbolName,schDef.x,schDef.y);	//write to list file
		}
		else if(symbolNum>1)
			break;
		symbolNum++;
	}
}


/////////////////////Write part information to PartFile////////////////////////////////
void CLIB2DXDDlg::WritePartFile(void)
{
	#define partFileBuf partDef.partFileBuf
	tmpStr.Format(".Number \x22%s\x22 \n",partDef.deviceName);
	partFileBuf+=tmpStr;
	tmpStr.Format("        ..Name \x22%s\x22 \n",partDef.deviceName);
	partFileBuf+=tmpStr;
	tmpStr.Format("               ...Default \n",partDef.deviceName);
	partFileBuf+=tmpStr;
	tmpStr.Format("        ..Label \x22%s\x22 \n",partDef.deviceName);
	partFileBuf+=tmpStr;
	tmpStr.Format("               ...Default \n",partDef.deviceName);
	partFileBuf+=tmpStr;
	tmpStr.Format("        ..Desc \x22%s\x22 \n",partDef.desc);
	partFileBuf+=tmpStr;
	tmpStr.Format("        ..RefPrefix \x22%s\x22 \n",partDef.refDesPrefix);
	partFileBuf+=tmpStr;
	tmpStr.Format("        ..TopCell \x22%s\x22 \n",partDef.attachedPatternName);
	partFileBuf+=tmpStr;
	tmpStr.Format("        ..BottomCell \x22\x22 \n");
	partFileBuf+=tmpStr;
	tmpStr.Format("	     ..Modified	   111111111 ! 03/10/05 11:53 PM\n");
	partFileBuf+=tmpStr;
	if(partDef.refDesPrefix=="U")
		tmpStr.Format("        ..Prop \x22Type\x22,	\x22IC\x22,	\x22Text\x22\n");
	else if(partDef.refDesPrefix=="C")
		tmpStr.Format("        ..Prop \x22Type\x22,	\x22\x43\x61pcitance\x22,	\x22Text\x22\n");
	else if(partDef.refDesPrefix=="R")
		tmpStr.Format("        ..Prop \x22Type\x22,	\x22Resistance\x22,	\x22Text\x22\n");
	else if(partDef.refDesPrefix=="D")
		tmpStr.Format("        ..Prop \x22Type\x22,	\x22\x44iode\x22,	\x22Text\x22\n");
	else if(partDef.refDesPrefix=="J")
		tmpStr.Format("        ..Prop \x22Type\x22,	\x2\x43onnector\x22,	\x22Text\x22\n");
	partFileBuf+=tmpStr;
	//========================= ..SwapGroup ===============//
	int len=partFileBuf.GetLength();
//	if(partDef.numHeteros==1)						//not hetero
//		PartsSwapGroup();
//	else											//HETERO
		HeteroSwapGroup();
	len=partFileBuf.GetLength();
	CreatPartFile();
	CStdioFile partFp;
	partFp.Open(partDef.partFileName,CFile::modeWrite);
	partFp.SeekToEnd();
	partFp.Write(partFileBuf,partFileBuf.GetLength());
	partFp.Close();
	#undef partFileBuf
}


//================= HeteroSwapGroup ===========================//
void CLIB2DXDDlg::HeteroSwapGroup(void)
{
	#define partFileBuf partDef.partFileBuf
	int compPinNum,numCompPins,heteroNum,numHeteros;
	numCompPins=compDef.compPinCA.GetSize();
	numHeteros=partDef.numHeteros;
	for(heteroNum=1;heteroNum<=numHeteros;heteroNum++)
	{
		tmpStr.Format("	..SwapGroup \x22gate_%d\x22\n",heteroNum);
		partFileBuf+=tmpStr;
		//=========== SwapGroup ==============//
		for(compPinNum=0;compPinNum<numCompPins;compPinNum++)
		{
			if(compDef.compPinCA.GetAt(compPinNum).partNum==heteroNum)
			{
				tmpStr.Format("		...SwapID     \x22P%d\x22\n",compPinNum);
				partFileBuf+=tmpStr;
			}
		}
		//============ ..SwapIDProperties ====//
		for(compPinNum=0;compPinNum<numCompPins;compPinNum++)
		{
			if(compDef.compPinCA.GetAt(compPinNum).partNum==heteroNum||
				compDef.compPinCA.GetAt(compPinNum).partNum==-1)	//将symbolPinNum作为判断是否SUPPLY的依据
			{
				tmpStr.Format("		...SwapIDProperties      \x22P%d\x22\n",compPinNum);
				partFileBuf+=tmpStr;
				tmpStr.Format("			.....Prop \x22Pin Type\x22,  \x22%s\x22,   \x22Text\x22\n",
					JustifyPinType(compDef.compPinCA.GetAt(compPinNum).pinType,'p'));
				partFileBuf+=tmpStr;
			}
		}
	}
		//============== Power pin Swap Group ======//
	UINT powerPinNum,numPowerPins;
	numPowerPins=partDef.powerCA.GetSize();
	if(numPowerPins!=0 )
	{
		tmpStr.Format("	..SwapGroup \x22gate_%d\x22\n",heteroNum);
		partFileBuf+=tmpStr;
		for(powerPinNum=0;powerPinNum<numPowerPins;powerPinNum++)
		{
			tmpStr.Format("		...SwapID     \x22P%d\x22\n",powerPinNum);
			partFileBuf+=tmpStr;
		}
		for(powerPinNum=0;powerPinNum<numPowerPins;powerPinNum++)
		{
			tmpStr.Format("		...SwapIDProperties      \x22P%d\x22\n",powerPinNum);
			partFileBuf+=tmpStr;
			partFileBuf+="			.....Prop \x22Pin Type\x22,  \x22Input\x22,   \x22Text\x22\n";
		}

	}

	//============== Supply Swap Group =========//
	UINT supplyNum,numSupply;
	numSupply=partDef.supplyCA.GetSize();
	CString allPinName,pinName;
	if(numSupply!=0)
	{
		for(supplyNum=0;supplyNum<numSupply;supplyNum++)
		{
			pinName=partDef.supplyCA.GetAt(supplyNum).pinName;
			tmpStr=' '+pinName+'*';
			if(allPinName.Find(tmpStr)==-1)
			{
				allPinName+=' '+pinName+'*';
				tmpStr.Format("	..SwapGroup \x22%s\x22\n",pinName);
				partFileBuf+=tmpStr;
				tmpStr.Format("		...SwapID     \x22P1\x22\n");
				partFileBuf+=tmpStr;
				tmpStr.Format("		...SwapIDProperties      \x22P1\x22\n");
				partFileBuf+=tmpStr;
				tmpStr.Format("			.....Prop \x22Supply\x22,  \x22%s\x22,   \x22Text\x22\n",pinName);
				partFileBuf+=tmpStr;
			}
		}

	}
	//============== "No Connect" =========//
	if(partDef.NCPinDesCA.GetSize()!=0)
	{
		partFileBuf+="	..SwapGroup \x22No Connect\x22\n";
		partFileBuf+="		...SwapID     \x22P1\x22\n";
		partFileBuf+="		...SwapIDProperties      \x22P1\x22\n";
		partFileBuf+="			.....Prop \x22Pin Type\x22,  \x22No Connect\x22,   \x22Text\x22\n";
	}
		
	//================ ..Symbol =======================//
	for(heteroNum=1;heteroNum<=numHeteros;heteroNum++)
	{
		tmpStr.Format("	..Symbol         \x22%s%s\x22\n",
			partDef.partition,partDef.heteroNameCA.GetAt(heteroNum-1));
		partFileBuf+=tmpStr;
		if(heteroNum==1)
			partFileBuf+="		...Default\n";
		tmpStr.Format("		...Symbol_SwapGroup      \x22gate_%d\x22\n",heteroNum);
		partFileBuf+=tmpStr;
		for(compPinNum=0;compPinNum<numCompPins;compPinNum++)
		{
			if(compDef.compPinCA.GetAt(compPinNum).partNum==heteroNum)
			{
				tmpStr.Format("		....PinName     \x22%s\x22\n",
					compDef.compPinCA.GetAt(compPinNum).pinName);
				partFileBuf+=tmpStr;
			}
		}
	}
	//========================== Power pin of symbol ==============//
	if(numPowerPins!=0)
	{
		tmpStr.Format("		...Symbol_SwapGroup      \x22gate_%d\x22\n",heteroNum);
		partFileBuf+=tmpStr;
		for(powerPinNum=0;powerPinNum<numPowerPins;powerPinNum++)
		{
			tmpStr.Format("		....PinName     \x22%s\x22\n",
				partDef.powerCA.GetAt(powerPinNum).pinName);
			partFileBuf+=tmpStr;
		}
	}

	//===================== ..Slots ==================//

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -