📄 lib2dxddlg.cpp
字号:
// 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 + -