static void hb_cp_init( PHB_CODEPAGE cdp ) { HB_UCHAR * flags, * upper, * lower; int i; cdp->buffer = ( HB_UCHAR * ) hb_xgrab( 0x300 ); cdp->flags = flags = ( HB_UCHAR * ) cdp->buffer; cdp->upper = upper = ( HB_UCHAR * ) cdp->buffer + 0x100; cdp->lower = lower = ( HB_UCHAR * ) cdp->buffer + 0x200; for( i = 0; i < 0x100; ++i ) { flags[ i ] = 0; if( HB_ISDIGIT( i ) ) flags[ i ] |= HB_CDP_DIGIT; if( HB_ISALPHA( i ) ) flags[ i ] |= HB_CDP_ALPHA; if( HB_ISUPPER( i ) ) flags[ i ] |= HB_CDP_UPPER; if( HB_ISLOWER( i ) ) flags[ i ] |= HB_CDP_LOWER; upper[ i ] = ( HB_UCHAR ) HB_TOUPPER( i ); lower[ i ] = ( HB_UCHAR ) HB_TOLOWER( i ); } }
static int s_filePortParams( const char * pszName, int * piTimeout, int * piBaud, int * piParity, int * piSize, int * piStop, int * piFlow ) { int iPort = 0, iLen, iValue; *piTimeout = -1; *piBaud = *piParity = *piSize = *piStop = *piFlow = 0; pszName += 3; if( *pszName == '$' ) { const char * pszParams = strchr( pszName, ':' ); if( pszParams != NULL && pszParams - pszName > 1 ) { char * pszPort = hb_strndup( pszName + 1, pszParams - pszName - 1 ); iPort = hb_comFindPort( pszPort, HB_TRUE ); hb_xfree( pszPort ); pszName = pszParams; } } else { while( HB_ISDIGIT( *pszName ) ) iPort = iPort * 10 + ( *pszName++ - '0' ); } while( iPort > 0 && *pszName ) { if( HB_ISDIGIT( *pszName ) ) { iValue = s_fileGetValue( pszName, &iLen ); if( iLen == 1 ) { if( iValue >= 1 && iValue <= 2 && *piStop == 0 ) *piStop = iValue; else if( iValue >= 5 && iValue <= 8 && *piSize == 0 ) *piSize = iValue; else iPort = -1; } else if( iLen == 2 && *piStop == 0 && *piSize == 0 ) { if( pszName[ 0 ] >= '1' && pszName[ 0 ] <= '2' && pszName[ 1 ] >= '5' && pszName[ 1 ] <= '8' ) { *piStop = pszName[ 0 ] - '0'; *piSize = pszName[ 1 ] - '0'; } else if( pszName[ 0 ] >= '5' && pszName[ 0 ] <= '8' && pszName[ 1 ] >= '1' && pszName[ 1 ] <= '2' ) { *piStop = pszName[ 1 ] - '0'; *piSize = pszName[ 0 ] - '0'; } else if( *piBaud ) iPort = -1; else *piBaud = iValue; } else if( *piBaud ) iPort = -1; else *piBaud = iValue; pszName += iLen; } else if( HB_ISALPHA( *pszName ) ) { if( hb_strnicmp( pszName, "RTS", 3 ) == 0 ) { *piFlow |= HB_COM_FLOW_IRTSCTS; pszName += 3; } else if( hb_strnicmp( pszName, "CTS", 3 ) == 0 ) { *piFlow |= HB_COM_FLOW_ORTSCTS; pszName += 3; } else if( hb_strnicmp( pszName, "DTR", 3 ) == 0 ) { *piFlow |= HB_COM_FLOW_IDTRDSR; pszName += 3; } else if( hb_strnicmp( pszName, "DSR", 3 ) == 0 ) { *piFlow |= HB_COM_FLOW_ODTRDSR; pszName += 3; } else if( hb_strnicmp( pszName, "DCD", 3 ) == 0 ) { *piFlow |= HB_COM_FLOW_DCD; pszName += 3; } else if( hb_strnicmp( pszName, "XOFF", 4 ) == 0 ) { *piFlow |= HB_COM_FLOW_XOFF; pszName += 4; } else if( hb_strnicmp( pszName, "XON", 3 ) == 0 ) { *piFlow |= HB_COM_FLOW_XON; pszName += 3; } else if( *piParity == 0 && ! HB_ISALPHA( pszName[ 1 ] ) ) { switch( *pszName ) { case 'N': case 'n': case 'E': case 'e': case 'O': case 'o': case 'S': case 's': case 'M': case 'm': *piParity = HB_TOUPPER( *pszName ); pszName++; break; default: iPort = -1; break; } } else iPort = -1; } else if( *pszName == ':' || *pszName == ',' || *pszName == ' ' ) pszName++; else iPort = -1; } if( *piBaud == 0 ) *piBaud = 9600; if( *piParity == 0 ) *piParity = 'N'; if( *piSize == 0 ) *piSize = 8; if( *piStop == 0 ) *piStop = 1; return iPort; }
static HB_SIZE hb_AtSkipStrings( const char * szSub, HB_SIZE nSubLen, const char * szText, HB_SIZE nLen ) { char cLastChar = ' '; HB_TRACE( HB_TR_DEBUG, ( "hb_AtSkipStrings(%s, %" HB_PFS "u, %s, %" HB_PFS "u)", szSub, nSubLen, szText, nLen ) ); if( nSubLen > 0 && nLen >= nSubLen ) { HB_SIZE nPos = 0; HB_SIZE nSubPos = 0; while( nPos < nLen && nSubPos < nSubLen ) { if( szText[ nPos + 1 ] == '"' && ( szText[ nPos ] == 'e' || szText[ nPos ] == 'E' ) ) { nPos++; while( ++nPos < nLen && ( szText[ nPos ] != '"' || szText[ nPos - 1 ] == '\\' ) ) { /* Skip. */ } nPos++; nSubPos = 0; continue; } if( szText[ nPos ] == '"' && szSub[ 0 ] != '"' ) { while( ++nPos < nLen && szText[ nPos ] != '"' ) { /* Skip. */ } nPos++; nSubPos = 0; continue; } if( szText[ nPos ] == '\'' && szSub[ 0 ] != '\'' ) { while( ++nPos < nLen && szText[ nPos ] != '\'' ) { /* Skip. */ } nPos++; nSubPos = 0; continue; } if( szText[ nPos ] == '[' && szSub[ 0 ] != '[' ) { if( ! ( HB_ISALPHA( ( HB_BYTE ) cLastChar ) || HB_ISDIGIT( ( HB_BYTE ) cLastChar ) || strchr( "])}_.", cLastChar ) ) ) { while( ++nPos < nLen && szText[ nPos ] != ']' ) { /* Skip. */ } nPos++; nSubPos = 0; continue; } } if( szText[ nPos ] == szSub[ nSubPos ] ) { nSubPos++; nPos++; } else if( nSubPos ) { /* Go back to the first character after the first match, or else tests like "22345" $ "012223456789" will fail. */ nPos -= ( nSubPos - 1 ); nSubPos = 0; } else { cLastChar = szText[ nPos ]; nPos++; } } return ( nSubPos < nSubLen ) ? 0 : ( nPos - nSubLen + 1 ); } else return 0; }
static BOOL __HB_ISALPHA( UCHAR c ) { PHB_CODEPAGE __hb_cdp_page = hb_cdppage(); return __hb_cdp_page->nChars ? HB_ISALPHA( c ) || strchr( __hb_cdp_page->CharsUpper, c ) != NULL || strchr( __hb_cdp_page->CharsLower, c ) != NULL : HB_ISALPHA( c ); }