20 #ifndef STRING_HELPER_H
21 #define STRING_HELPER_H
28 #if defined(WIN32) || defined(_WIN32) || defined(WIN64) || defined(_WIN64)
29 #ifndef _CRT_SECURE_NO_DEPRECATE
30 #define _CRT_SECURE_NO_DEPRECATE
33 #define STRCASECMP _stricmp
36 #define STRNCASECMP _strnicmp
39 #define STRCPY(sFilePath, nLength, sPath) strcpy_s(sFilePath, nLength, sPath)
43 #define FOPEN(fHandle, filename, mode) fopen_s(&fHandle, filename, mode)
46 #define FOPEN_FAIL(result) (result != 0)
49 #define SSCANF sscanf_s
52 #define SPRINTF sprintf_s
54 #else // Linux Includes
59 #define STRCASECMP strcasecmp
62 #define STRNCASECMP strncasecmp
65 #define STRCPY(sFilePath, nLength, sPath) strcpy(sFilePath, sPath)
69 #define FOPEN(fHandle, filename, mode) (fHandle = fopen(filename, mode))
72 #define FOPEN_FAIL(result) (result == NULL)
78 #define SPRINTF sprintf
91 while (
string[string_start] == delimiter)
96 if (string_start >= (
int)strlen(
string) - 1)
106 int string_length = (int)strlen(filename);
108 while (filename[string_length--] !=
'.')
110 if (string_length == 0)
114 if (string_length > 0)
117 if (string_length == 0)
120 *extension = &filename[string_length];
122 return string_length;
131 for (
int i = 1; i < argc; i++)
134 const char *string_argv = &argv[i][string_start];
136 const char *equal_pos = strchr(string_argv,
'=');
137 int argv_length = (int)(equal_pos == 0 ? strlen(string_argv) : equal_pos - string_argv);
139 int length = (int)strlen(string_ref);
141 if (length == argv_length && !
STRNCASECMP(string_argv, string_ref, length))
160 for (
int i = 1; i < argc; i++)
163 const char *string_argv = &argv[i][string_start];
164 int length = (int)strlen(string_ref);
168 if (length + 1 <= (
int)strlen(string_argv))
170 int auto_inc = (string_argv[
length] ==
'=') ? 1 : 0;
171 *value = (T)atoi(&string_argv[length + auto_inc]);
190 for (
int i = 1; i < argc; i++)
193 const char *string_argv = &argv[i][string_start];
194 int length = (int)strlen(string_ref);
198 if (length + 1 <= (
int)strlen(string_argv))
200 int auto_inc = (string_argv[
length] ==
'=') ? 1 : 0;
201 value = atoi(&string_argv[length + auto_inc]);
231 for (
int i = 1; i < argc; i++)
234 const char *string_argv = &argv[i][string_start];
235 int length = (int)strlen(string_ref);
239 if (length + 1 <= (
int)strlen(string_argv))
241 int auto_inc = (string_argv[
length] ==
'=') ? 1 : 0;
242 value = (float)atof(&string_argv[length + auto_inc]);
266 const char *string_ref,
char **string_retval)
272 for (
int i = 1; i < argc; i++)
275 char *string_argv = (
char *)&argv[i][string_start];
276 int length = (int)strlen(string_ref);
280 *string_retval = &string_argv[length + 1];
289 *string_retval =
NULL;
309 const char *searchPath[] = {
315 "./src/<executable_name>/data/",
324 "./7_CUDALibraries/",
332 "../0_Simple/<executable_name>/data/",
333 "../1_Utilities/<executable_name>/data/",
334 "../2_Graphics/<executable_name>/data/",
335 "../3_Imaging/<executable_name>/data/",
336 "../4_Financial/<executable_name>/data/",
337 "../5_Simulations/<executable_name>/data/",
338 "../6_Advanced/<executable_name>/data/",
339 "../7_CUDALibraries/<executable_name>/data/",
340 "../samples/<executable_name>/data/",
343 "../../common/data/",
347 "../../sandbox/<executable_name>/data/",
348 "../../0_Simple/<executable_name>/data/",
349 "../../1_Utilities/<executable_name>/data/",
350 "../../2_Graphics/<executable_name>/data/",
351 "../../3_Imaging/<executable_name>/data/",
352 "../../4_Financial/<executable_name>/data/",
353 "../../5_Simulations/<executable_name>/data/",
354 "../../6_Advanced/<executable_name>/data/",
355 "../../7_CUDALibraries/<executable_name>/data/",
356 "../../samples/<executable_name>/data/",
358 "../../../src/<executable_name>/",
359 "../../../src/<executable_name>/data/",
360 "../../../src/<executable_name>/src/",
361 "../../../src/<executable_name>/inc/",
362 "../../../sandbox/<executable_name>/",
363 "../../../sandbox/<executable_name>/data/",
364 "../../../sandbox/<executable_name>/src/",
365 "../../../sandbox/<executable_name>/inc/",
366 "../../../0_Simple/<executable_name>/data/",
367 "../../../1_Utilities/<executable_name>/data/",
368 "../../../2_Graphics/<executable_name>/data/",
369 "../../../3_Imaging/<executable_name>/data/",
370 "../../../4_Financial/<executable_name>/data/",
371 "../../../5_Simulations/<executable_name>/data/",
372 "../../../6_Advanced/<executable_name>/data/",
373 "../../../7_CUDALibraries/<executable_name>/data/",
374 "../../../samples/<executable_name>/data/",
376 "../../../common/data/",
379 "../../../../src/<executable_name>/",
380 "../../../../src/<executable_name>/data/",
381 "../../../../src/<executable_name>/src/",
382 "../../../../src/<executable_name>/inc/",
383 "../../../../sandbox/<executable_name>/",
384 "../../../../sandbox/<executable_name>/data/",
385 "../../../../sandbox/<executable_name>/src/",
386 "../../../../sandbox/<executable_name>/inc/",
387 "../../../../0_Simple/<executable_name>/data/",
388 "../../../../1_Utilities/<executable_name>/data/",
389 "../../../../2_Graphics/<executable_name>/data/",
390 "../../../../3_Imaging/<executable_name>/data/",
391 "../../../../4_Financial/<executable_name>/data/",
392 "../../../../5_Simulations/<executable_name>/data/",
393 "../../../../6_Advanced/<executable_name>/data/",
394 "../../../../7_CUDALibraries/<executable_name>/data/",
395 "../../../../samples/<executable_name>/data/",
396 "../../../../common/",
397 "../../../../common/data/",
400 "../../../../../src/<executable_name>/",
401 "../../../../../src/<executable_name>/data/",
402 "../../../../../src/<executable_name>/src/",
403 "../../../../../src/<executable_name>/inc/",
404 "../../../../../sandbox/<executable_name>/",
405 "../../../../../sandbox/<executable_name>/data/",
406 "../../../../../sandbox/<executable_name>/src/",
407 "../../../../../sandbox/<executable_name>/inc/",
408 "../../../../../0_Simple/<executable_name>/data/",
409 "../../../../../1_Utilities/<executable_name>/data/",
410 "../../../../../2_Graphics/<executable_name>/data/",
411 "../../../../../3_Imaging/<executable_name>/data/",
412 "../../../../../4_Financial/<executable_name>/data/",
413 "../../../../../5_Simulations/<executable_name>/data/",
414 "../../../../../6_Advanced/<executable_name>/data/",
415 "../../../../../7_CUDALibraries/<executable_name>/data/",
416 "../../../../../samples/<executable_name>/data/",
417 "../../../../../common/",
418 "../../../../../common/data/",
424 if (executable_path != 0)
428 #if defined(WIN32) || defined(_WIN32) || defined(WIN64) || defined(_WIN64)
430 size_t delimiter_pos = executable_name.find_last_of(
'\\');
431 executable_name.erase(0, delimiter_pos + 1);
433 if (executable_name.rfind(
".exe") != std::string::npos)
436 executable_name.resize(executable_name.size() - 4);
441 size_t delimiter_pos = executable_name.find_last_of(
'/');
442 executable_name.erase(0, delimiter_pos + 1);
447 for (
unsigned int i = 0; i <
sizeof(searchPath) /
sizeof(
char *); ++i)
450 size_t executable_name_pos = path.find(
"<executable_name>");
454 if (executable_name_pos != std::string::npos)
456 if (executable_path != 0)
458 path.replace(executable_name_pos, strlen(
"<executable_name>"), executable_name);
468 printf(
"sdkFindFilePath <%s> in %s\n", filename, path.c_str());
472 path.append(filename);
474 FOPEN(fp, path.c_str(),
"rb");
481 char *file_path = (
char *)malloc(path.length() + 1);
482 STRCPY(file_path, path.length() + 1, path.c_str());
GLsizei const GLchar ** path
Definition: khronos-glext.h:7952
bool checkCmdLineFlag(const int argc, const char **argv, const char *string_ref)
Definition: helper_string.h:125
GLsizei const GLchar *const * string
Definition: khronos-glext.h:6750
GLenum GLuint GLenum GLsizei length
Definition: khronos-glext.h:6279
bool getCmdLineArgumentValue(const int argc, const char **argv, const char *string_ref, T *value)
Definition: helper_string.h:154
GLsizei const GLfloat * value
Definition: khronos-glext.h:6760
#define STRCPY(sFilePath, nLength, sPath)
Definition: helper_string.h:65
float getCmdLineArgumentFloat(const int argc, const char **argv, const char *string_ref)
Definition: helper_string.h:224
int stringRemoveDelimiter(char delimiter, const char *string)
Definition: helper_string.h:87
char * sdkFindFilePath(const char *filename, const char *executable_path)
Definition: helper_string.h:303
bool getCmdLineArgumentString(const int argc, const char **argv, const char *string_ref, char **string_retval)
Definition: helper_string.h:265
#define FOPEN(fHandle, filename, mode)
Definition: helper_string.h:69
int getCmdLineArgumentInt(const int argc, const char **argv, const char *string_ref)
Definition: helper_string.h:183
int getFileExtension(char *filename, char **extension)
Definition: helper_string.h:104
#define NULL
Definition: covise_list.h:22
#define STRNCASECMP
Definition: helper_string.h:62