• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* See COPYING.txt for the full license governing this code. */
2 /**
3  * \file rwhelper.c
4  *
5  * Header file with some helper functions for working with SDL_RWops.
6  */
7 
8 #include <SDL_rwops.h>
9 
10 #ifndef _SDL_visualtest_rwhelper_h
11 #define _SDL_visualtest_rwhelper_h
12 
13 /** Length of the buffer in SDLVisualTest_RWHelperBuffer */
14 #define RWOPS_BUFFER_LEN 256
15 
16 /* Set up for C function definitions, even when using C++ */
17 #ifdef __cplusplus
18 extern "C" {
19 #endif
20 
21 /**
22  * Struct that is used as a buffer by the RW helper functions. Should be initialized by calling
23  * SDLVisualTest_RWHelperResetBuffer() before being used.
24  */
25 typedef struct SDLVisualTest_RWHelperBuffer
26 {
27     /*! Character buffer that data is read into */
28     char buffer[RWOPS_BUFFER_LEN];
29     /*! buffer[buffer_pos] is the next character to be read from the buffer */
30     int buffer_pos;
31     /*! Number of character read into the buffer */
32     int buffer_width;
33 } SDLVisualTest_RWHelperBuffer;
34 
35 /**
36  * Resets the buffer pointed to by \c buffer used by some of the helper functions.
37  * This function should be called when you're using one of the helper functions
38  * with a new SDL_RWops object.
39  */
40 void SDLVisualTest_RWHelperResetBuffer(SDLVisualTest_RWHelperBuffer* buffer);
41 
42 /**
43  * Reads a single character using the SDL_RWops object pointed to by \c rw.
44  * This function reads data in blocks and stores them in the buffer pointed to by
45  * \c buffer, so other SDL_RWops functions should not be used in conjunction
46  * with this function.
47  *
48  * \return The character that was read.
49  */
50 char SDLVisualTest_RWHelperReadChar(SDL_RWops* rw,
51                                     SDLVisualTest_RWHelperBuffer* buffer);
52 
53 /**
54  * Reads characters using the SDL_RWops object pointed to by \c rw into the
55  * character array pointed to by \c str (of size \c size) until either the
56  * array is full or a new line is encountered. If \c comment_char is encountered,
57  * all characters from that position till the end of the line are ignored. The new line
58  * is not included as part of the buffer. Lines with only whitespace and comments
59  * are ignored. This function reads data in blocks and stores them in the buffer
60  * pointed to by \c buffer, so other SDL_RWops functions should not be used in
61  * conjunction with this function.
62  *
63  * \return pointer to the string on success, NULL on failure or EOF.
64  */
65 char* SDLVisualTest_RWHelperReadLine(SDL_RWops* rw, char* str, int size,
66                                      SDLVisualTest_RWHelperBuffer* buffer,
67                                      char comment_char);
68 
69 /**
70  * Counts the number of lines that are not all whitespace and comments using the
71  * SDL_RWops object pointed to by \c rw. \c comment_char indicates the character
72  * used for comments. Uses the buffer pointed to by \c buffer to read data in blocks.
73  *
74  * \return Number of lines on success, -1 on failure.
75  */
76 int SDLVisualTest_RWHelperCountNonEmptyLines(SDL_RWops* rw,
77                                              SDLVisualTest_RWHelperBuffer* buffer,
78                                              char comment_char);
79 
80 /* Ends C function definitions when using C++ */
81 #ifdef __cplusplus
82 }
83 #endif
84 
85 #endif /* _SDL_visualtest_rwhelper_h */