/* Classic Ladder Project */ /* Copyright (C) 2001-2006 Marc Le Douarain */ /* http://www.multimania.com/mavati/classicladder */ /* http://www.sourceforge.net/projects/classicladder */ /* October 2006 */ /* ------- */ /* Symbols */ /* ------- */ /* Utilities functions to convert between variables names (starting with % character) */ /* and symbols names */ /* A symbol name can be set for a complete variable (ex %B45) or for a partial variable */ /* (ex: "zzz"=%T5 -> partial variable name before "." character : after this symbols will */ /* be available zzz.D zzz.V zzz.P etc...) */ /* ------- */ /* This library is free software; you can redistribute it and/or */ /* modify it under the terms of the GNU Lesser General Public */ /* License as published by the Free Software Foundation; either */ /* version 2.1 of the License, or (at your option) any later version. */ /* This library is distributed in the hope that it will be useful, */ /* but WITHOUT ANY WARRANTY; without even the implied warranty of */ /* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU */ /* Lesser General Public License for more details. */ /* You should have received a copy of the GNU Lesser General Public */ /* License along with this library; if not, write to the Free Software */ /* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef MODULE #include #include #endif #include "classicladder.h" #include "global.h" #include "symbols.h" void InitSymbols( void ) { int ScanSymb; for ( ScanSymb=0; ScanSymbVarName )==0 || strcmp(tcVarNamePartial, pCurrentSymbol->VarName )==0 ) { bFound = TRUE; pFoundSymbol = pCurrentSymbol; } ScanSymbol++; } while( !bFound && ScanSymbolSymbol[ 0 ]!='\0' ) { // verify strings for complete & partial if ( strcmp( tcMnemoSaisi, pCurrentSymbol->Symbol )==0 || strcmp(tcPartialSymbolString, pCurrentSymbol->Symbol )==0 ) { bFound = TRUE; pFoundSymbol = pCurrentSymbol; } } ScanSymbol++; } while( !bFound && ScanSymbolVarName )!=0 ) { char * pAttrStart = VarNameParam; // copy partial symbol strcpy( tcBufferResult, pSymbol->Symbol ); // search the '.' separator do { pAttrStart++; } while( *pAttrStart!=VAR_ATTRIBUTE_SEP && *pAttrStart!='\0' ); // add the attribute to the symbol if ( *pAttrStart==VAR_ATTRIBUTE_SEP ) strcpy( &tcBufferResult[ strlen( pSymbol->Symbol ) ], pAttrStart ); } else { // simple copy (a symbol = a var name directly) strcpy( tcBufferResult, pSymbol->Symbol ); } return tcBufferResult; } else { return NULL; } } // return a var name for the symbol parameter (partial or complete symbol) char * ConvSymbolToVarName( char * SymbolParam ) { StrSymbol * pSymbol = ConvSymbolParamInSymbolPtr( SymbolParam ); if ( pSymbol ) { // if partial symbol, add the attribute following the Symbol parameter if ( strcmp( SymbolParam, pSymbol->Symbol )!=0 ) { char * pAttrStart = SymbolParam; // copy partial symbol strcpy( tcBufferResult, pSymbol->VarName ); // search the '.' separator do { pAttrStart++; } while( *pAttrStart!=VAR_ATTRIBUTE_SEP && *pAttrStart!='\0' ); // add the attribute to the var name if ( *pAttrStart==VAR_ATTRIBUTE_SEP ) strcpy( &tcBufferResult[ strlen( pSymbol->VarName ) ], pAttrStart ); } else { // simple copy (a symbol = a var name directly) strcpy( tcBufferResult, pSymbol->VarName ); } return tcBufferResult; } else { return NULL; } }