/* * Copyright 2010 Inalogic® Inc. * * This program 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 or 3.0 * of the License. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranties of * MERCHANTABILITY, SATISFACTORY QUALITY or FITNESS FOR A PARTICULAR * PURPOSE. See the applicable version of the GNU Lesser General Public * License for more details. * * You should have received a copy of both the GNU Lesser General Public * License along with this program. If not, see * * Authored by: Jay Taoko * */ #ifndef NPARSING_H #define NPARSING_H namespace nux { //! Parse a stream of characters and look for a string of TCHAR at the start of the stream. /*! If the string is found, Stream points to the next character after the string. Space and tab characters at the beginning of the stream are ignored. @param Stream Character stream to search. @param Match Token to match. @return TRUE if the character string is found at the start of the stream (excluding space and tab characters). */ bool ParseCommand (const TCHAR **Stream, const TCHAR *Match); //! Parse a stream of characters and look for a t_32 value after the token string. /*! Parse a unsigned int after the named token. @param stream Character stream to search. @param token Token to match. @return True if the character string is found at the start of the stream (excluding space and tab characters). */ bool Parse_u32 (const TCHAR *stream, const TCHAR *Match, DWORD &value); //! Parses a string of N character from a character stream after a named token. /*! Parses a string from a character stream. @param Stream Character stream to search. @param Match Token to match. @param Value Buffer containing the parsed value. @param Size The size of the Value buffer, in characters. @param MaxLen Max number of character to return. @return TRUE if the token is found inside the stream. */ bool Parse_tchar (const TCHAR *stream, const TCHAR *Match, TCHAR *value, int size, int MaxLen); //! Parse a BYTE after the named token. /*! Parse a BYTE after the named token. @param Stream Character stream to search. @param Match Token to match. @param Value Buffer containing the parsed value. @return TRUE if the token is found inside the stream. */ bool Parse_u8 (const TCHAR *Stream, const TCHAR *Match, BYTE &Value); //! Parse a signed BYTE after the named token. /*! Parse a signed BYTE after the named token. @param Stream Character stream to search. @param Match Token to match. @param Value parsed signed BYTE @return TRUE if the token is found inside the stream. */ bool Parse_s8 (const TCHAR *Stream, const TCHAR *Match, SBYTE &Value); //! Parse a WORD after the named token. /*! Parse a WORD after the named token. @param Stream Character stream to search. @param Match Token to match. @param Value parsed WORD @return TRUE if the token is found inside the stream. */ bool Parse_u16 (const TCHAR *Stream, const TCHAR *Match, WORD &Value); //! Parse a signed WORD after the named token. /*! Parse a signed WORD after the named token. @param Stream Character stream to search. @param Match Token to match. @param Value parsed signed WORD @return TRUE if the token is found inside the stream. */ bool Parse_s16 (const TCHAR *Stream, const TCHAR *Match, SWORD &Value); //! Parse a floating point value after the named token. /*! Parse a floating point value after the named token. @param Stream Character stream to search. @param Match Token to match. @param Value parsed floating point value @return TRUE if the token is found inside the stream. */ bool Parse_float (const TCHAR *Stream, const TCHAR *Match, float &Value); //! Parse a double WORD after the named token. /*! Parse a double WORD after the named token. @param Stream Character stream to search. @param Match Token to match. @param Value parsed double WORD @return TRUE if the token is found inside the stream. */ bool Parse_int (const TCHAR *Stream, const TCHAR *Match, int &Value); //! Parse a NString after the named token. /*! Parse a NString after the named token. @param Stream Character stream to search. @param Match Token to match. @param Value parsed NString @return TRUE if the token is found inside the stream. */ bool Parse_string (const TCHAR *Stream, const TCHAR *Match, NString &Value); //! Parse a QUADWORD after the named token. /*! Parse a QUADWORD after the named token. @param Stream Character stream to search. @param Match Token to match. @param Value parsed QUADWORD @return TRUE if the token is found inside the stream. */ bool Parse_u64 (const TCHAR *Stream, const TCHAR *Match, QWORD &Value); //! Parse a SIGNED QUADWORD after the named token. /*! Parse a SIGNED QUADWORD after the named token. @param Stream Character stream to search. @param Match Token to match. @param Value parsed SIGNED QUADWORD @return TRUE if the token is found inside the stream. */ bool Parse_s64 (const TCHAR *Stream, const TCHAR *Match, SQWORD &Value); //! Parse a BOOLEAN after the named token. /*! Parse a BOOLEAN after the named token. @param Stream Character stream to search. @param Match Token to match. @param Value parsed BOOLEAN value @return TRUE if the token is found inside the stream. */ bool Parse_bool (const TCHAR *Stream, const TCHAR *Match, bool &OnOff); //! Extract a line of Stream (everything up to, but not including, CR/LF). /*! @param Stream Character stream to search. @param LineBuffer The first line in Stream. @param BufferSize Size of LineBuffer. @param GoToNextLine If true, advanced the pointer after the first CR/LF character at the end of the string. If FALSE advanced the pointer past all the CR/LF character at the end of the string. @return True i a line was copied to LineString; */ bool ParseLine (const TCHAR **Stream, TCHAR *LineBuffer, int BufferSize); //! Extract a line of Stream (everything up to, but not including, CR/LF). /*! @param Stream Character stream to search. @param LineString The first line in Stream. @param GoToNextLine If true, advanced the pointer after the first CR/LF character at the end of the string. If FALSE advanced the pointer past all the CR/LF character at the end of the string. @return True i a line was copied to LineString; */ bool ParseLine (const TCHAR **Stream, NString &LineString); //! Parse the next space-delimited string from the input stream. If the next token starts with a quote, gets entire quoted string. /*! @param Str stream of characters to search. @param TokenBuffer The parsed token string. @param BufferSize Size of the TokenBuffer. @return True if a token was found. */ bool ParseToken (const TCHAR *Str, TCHAR *TokenBuffer, int BufferSize); //! Parse the next space-delimited string from the input stream. If the next token starts with a quote, gets entire quoted string. /*! @param Str stream of characters to search. @param TokenBuffer The parsed token string. @return True if a token was found. */ bool ParseToken (const TCHAR *Str, NString &TokenString); //! Parse the next space-delimited string from the input stream. If the next token starts with a quote, gets entire quoted string. /*! @param Str stream of characters to parse. @return The next token in a NString. */ NString ParseToken (const TCHAR *Str); //! Go to the next token in the stream. /*! Skip tabs, and space at the beginning of each line. Skip everything on a line that follows the given comment char token If there is a valid token in the input, Stream will point to it. @param Stream stream of characters @param CommentChar Character representing the beginning of a comment on a line. ie ';' '#". */ void ParseToNextLine (const TCHAR **Stream, TCHAR CommentChar); //! Checks if a Token command-line parameter exists in the stream. /*! Checks if a Token command-line parameter exists in the stream @param Stream stream of characters to search @param token to match @return True if found. */ bool ParseParam (const TCHAR *Stream, const TCHAR *Param); } #endif // NPARSING_H