| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197 |
- #ifndef GPIB_PARSER_VALIDATORS_H
- #define GPIB_PARSER_VALIDATORS_H
- #include <ctype.h> // isalpha, isdigit
- #include "gpib_parser_casts.h"
- #include "gpib_parser_validators_numbers.h" // Validators for numbers
- #include "gpib_parser_chars.h" // Service characters definitions
- //--------------------------------------------------------------------------
- #define IsCorrectPointer(ptr) ( NULL != (ptr) )
- #define IsCodePointer(ptr) IsCorrectPointer(ptr) // not to check for flash-memory pointer, mbrrrrrr.
- //--------------------------------------------------------------------------
- typedef enum
- {
- eqmNone=0, //
- eqmSingle=1, // Single-quote mode
- eqmDouble=2 // Double-quote mode
- }
- eQuoteMode_t; // Defines the mode of quoting
- //--------------------------------------------------------------------------
- // IsCharacter:
- // Checks whether @ch is an alphabetic letter.
- static inline BOOL IsCharacter( const char ch )
- {
- return MAKE_BOOL( isalpha(ch) ); /* return MAKE_BOOL(((character) & 0xDF)<='Z' && ((character) & 0xDF)>='A') */
- }
- //--------------------------------------------------------------------------
- // IsOptionalHeader:
- // Checks if the command header relates to the optional command, or not
- static inline BOOL IsOptionalHeader( const char * headerString )
- {
- (void)headerString; // skip the checking for NULL pointer
-
- // Optional header starts with the the GPIB_CHAR_OPTIONALHEADER_SIGN sign
- return MAKE_BOOL( GPIB_CHAR_OPTIONALHEADER_SIGN == headerString[0] );
- }
- //--------------------------------------------------------------------------
- // IsValid_GPIBHeaderBodyChar:
- // Checks the character in order to validate the GPIB header body.
- // @IsValid_GPIBHeaderBodyChar returns TRUE if the character is a valid for GPIB
- // header body.
- // Note: the GPIB_CHAR_MANDATORY_IEEE488_SIGN character is not a body character,
- // so it is not valid character for this function.
- static inline BOOL IsValid_GPIBHeaderBodyChar( const char ch )
- {
- return (
- IsCharacter(ch) // Allow a CHARACTER
- || isdigit(ch) // Allow a NUMBER
- || (GPIB_CHAR_UNDERLINE_SIGN == ch ) // Allow a UNDERLINE sign
- || (GPIB_CHAR_REQUEST_SIGN == ch ) // Allow a REQUEST sign
-
- );
- }
- //--------------------------------------------------------------------------
- // IsEndOfLine:
- // Checks if the @ch is a end-of-line character
- static inline BOOL IsEndOfLine( const char ch )
- {
- return MAKE_BOOL( GPIB_CHAR_ENDLINE_SIGN == ch );
-
- /* #define IsEND(character) (( (character)==0x0A )?TRUE:FALSE) */
- }
-
- //--------------------------------------------------------------------------
-
- // IsEndOfString:
- // Checks if the @ch is a end-of-string character
- static inline BOOL IsEndOfString( const char ch )
- {
- return MAKE_BOOL( '\0' == ch );
-
- /* #define IsEND(character) (( (character)==0x0A )?TRUE:FALSE) */
- }
- //--------------------------------------------------------------------------
- // IsCtrlChar:
- // Checks if the @ch is a "control" character ( ASCII code less 31 )
- static inline BOOL IsCtrlChar( const char ch )
- {
- return MAKE_BOOL( ch <= 0x1F );
- }
- //--------------------------------------------------------------------------
- // IsWhiteChar:
- // Checks if the @ch is a "white" character.
- // The character is "white" for this function if:
- // - it is a GPIB_CHAR_WHITE_SIGN;
- // - it is any control character ( @IsCtrlChar() )
- static inline BOOL IsWhiteChar( const char ch )
- {
- return MAKE_BOOL( GPIB_CHAR_WHITE_SIGN == ch // "White" if a GPIB_CHAR_WHITE_SIGN character
- || IsCtrlChar(ch) // "White" if it is a control character
- );
-
- /* #define IsWHITE(character) (( (character)<=0x20 && (character)!=0x0A && BigZero(character) )?TRUE:FALSE) */
- }
- //--------------------------------------------------------------------------
- // IsWhiteOrEndChar:
- // Checks if the @ch is a "white" or end-of-line character.
- static inline BOOL IsWhiteOrEndChar( const char ch )
- {
- return MAKE_BOOL( IsWhiteChar(ch)
- || IsEndOfLine(ch)
- );
- /* #define IsWHITEorEND(character) (( (character)<=0x20 && BigZero(character) )?TRUE:FALSE) */
- }
- //--------------------------------------------------------------------------
- // IsArgSeparatorChar:
- // Checks if the @ch is an argument separator character.
- static inline BOOL IsArgSeparatorChar( const char ch )
- {
- return MAKE_BOOL( ch == GPIB_CHAR_ARGSEPARATOR_SIGN ); // Allow argument separator character
-
- /* #define IsWHITEorEND(character) (( (character)<=0x20 && BigZero(character) )?TRUE:FALSE) */
- }
- //--------------------------------------------------------------------------
- // IsEndOfNumber:
- // Checks if the @ch is a end-of-number character
- static inline BOOL IsEndOfNumber( const char ch )
- {
- return MAKE_BOOL( IsArgSeparatorChar(ch) // is an argument separator
- || IsWhiteOrEndChar(ch) // is a white character or end-of-line character
- );
-
- /* #define IsWHITEorENDorCOMMA(character) (( ((character)<=0x20 && BigZero(character)) || ((character)==','))?TRUE:FALSE) */
- }
- //--------------------------------------------------------------------------
- // IsSingleQuote:
- // Checks if the @ch is a single quote character
- static inline BOOL IsSingleQuote( const char ch )
- {
- return MAKE_BOOL( GPIB_CHAR_SINGLEQUOTE_SIGN == ch );
-
- /* #define IsSQUOTE(character) ((character=='\'')?TRUE:FALSE) */
- }
-
- // IsDoubleQuote:
- // Checks if the @ch is a double quote character
- static inline BOOL IsDoubleQuote( const char ch )
- {
- return MAKE_BOOL( GPIB_CHAR_DOUBLEQUOTE_SIGN == ch );
-
- /* #define IsDQUOTE(character) ((character=='\"')?TRUE:FALSE) */
- }
- //--------------------------------------------------------------------------
- // IsQuote:
- // Checks if the @ch is a quote character depending on the quote mode
- static inline BOOL IsQuote( const char ch, const eQuoteMode_t qMode )
- {
- return TernaryOperator(
- (qMode == eqmDouble), // If @qMode is a double-quote mode
- IsDoubleQuote(ch), // Check if the @ch is a double quote character
- IsSingleQuote(ch) ); // Otherwise, check if the @ch is a signle quote character
-
- /* #define IsQUOTE(character,mode) (( mode==eqmSingle && (IsSQUOTE(character))) || (mode==eqmDouble && (IsDQUOTE(character)))) */
- }
- //--------------------------------------------------------------------------
- // IsDataTable -
- // Ôîðìàò òàáëèö äàííûõ: #N<Z0Z1.....Z9><BBBBBB....BB>
- // # - ñïåöèôèêàòîð
- // N - êîëè÷åñòâî ñëåäóþùèõ çà N ñèìâîëîâ ZX (Z0...Z9)
- // Z0..Z9 - äåñßòè÷íîå ÷èñëî, îïðåäåëßþùåå êîëè÷åñòâî áàéò ïîñëå ïîñëåäíåãî Z, êîëè÷åñòâî B
- //
- // ¾îèäåå äëèííà ñòðîêè length íå äîëæíà áûòü ìåíüøå, ÷åì çàäàííîå â Z0..Z9 ïëþñ 2 ( ñèìâîëû # è N )
- //
- #define IsDataTable( string, length ) MAKE_BOOL( (*string=='#') && IsDemicalChar( *(string+1)) && ( DecCharToNum( *(string+1) )+2 <= length) )
- #endif
|