00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include <string>
00022 #include <stdlib.h>
00023 #include <stdarg.h>
00024 #include <common/Defines.h>
00025 #include <SDL/SDL.h>
00026 #include <SDL/SDL_thread.h>
00027
00028 void S3D::trim(std::string &value)
00029 {
00030 int start = value.find_first_not_of(" \t\n");
00031 int end = value.find_last_not_of(" \t\n");
00032 if (start == std::string::npos) value = "";
00033 else if (end == std::string::npos) value = "";
00034 else value = std::string(value, start, end-start+1);
00035 }
00036
00037 char *S3D::stristr(const char *x, const char *y)
00038 {
00039 std::string newX(x);
00040 std::string newY(y);
00041 _strlwr((char *) newX.c_str());
00042 _strlwr((char *) newY.c_str());
00043
00044 char *result = (char *) strstr(newX.c_str(), newY.c_str());
00045 if (!result) return 0;
00046
00047 return (char *)(x + (result - newX.c_str()));
00048 }
00049
00050 #ifndef va_copy
00051 # define va_copy(d, s) (d) = (s)
00052 #endif
00053
00054 std::string S3D::formatStringList(const char *format, va_list ap)
00055 {
00056 int size = 256;
00057 char *p = new char[256];
00058 va_list ap_copy;
00059
00060 while (1)
00061 {
00062
00063 va_copy(ap_copy, ap);
00064 int n = vsnprintf (p, size, format, ap_copy);
00065 va_end(ap_copy);
00066
00067
00068 if (n > -1 && n < size) break;
00069
00070
00071 if (size > 10 * 1024) break;
00072
00073
00074 if (n > -1)
00075 size = n+1;
00076 else
00077 size *= 2;
00078
00079
00080 delete [] p;
00081 p = new char[size];
00082 }
00083
00084 std::string result(p);
00085 delete [] p;
00086
00087 return result;
00088 }
00089
00090 std::string S3D::formatStringBuffer(const char *format, ...)
00091 {
00092 va_list ap;
00093 va_start(ap, format);
00094 std::string result = S3D::formatStringList(format, ap);
00095 va_end(ap);
00096
00097 return result;
00098 }
00099
00100