/* 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" #include "hal/hal_priv.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 && ScanSymbol InfosGene->SizesInfos.nbr_s32in) { snprintf(pin_name, 100, "classicladder.0.s32out-%02d", idx - InfosGene->SizesInfos.nbr_s32in); arrowside = 0; } else { snprintf(pin_name, 100, "classicladder.0.s32in-%02d", idx); arrowside = 1; } break; } if(*pin_name) { hal_pin_t *pin = halpr_find_pin_by_name(pin_name); if(pin && pin->signal) { hal_sig_t *sig = SHMPTR(pin->signal); if(sig->name) { static char sig_name[100]; // char *arrow = "\xe2\x86\x90"; char *arrow = "\xe2\x87\x92"; if(arrowside == 0) { snprintf(sig_name, 100, "%s%s", sig->name, arrow); } else { snprintf(sig_name, 100, "%s%s", arrow, sig->name); } return sig_name; } } } } if ( pSymbol ) { // if partial symbol, add the attribute taken from the var name if ( strcmp( VarNameParam, pSymbol->VarName )!=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; } }