00001
00012 #include <stdio.h>
00013 #include <stdarg.h>
00014 #include <windows.h>
00015
00016 #include <stdexcept>
00017 using std::runtime_error;
00018 using std::logic_error;
00019 using std::invalid_argument;
00020
00021
00023 exception Error(const char *format, ...)
00024 {
00025 va_list args;
00026 char buffer[512];
00027 va_start(args,format);
00028 _vsnprintf(buffer,sizeof(buffer)-1,format,args);
00029 va_end(args);
00030 return exception(buffer);
00031 }
00032
00034 exception DiskError(FILE *fp, const char *format, ...)
00035 {
00036 va_list args;
00037 char buffer[512];
00038 va_start(args,format);
00039 _vsnprintf(buffer,sizeof(buffer)-1,format,args);
00040 va_end(args);
00041
00042 std::string str;
00043 str = buffer;
00044 if (!fp) str += ": file i/o error (null file pointer)";
00045 else if (feof(fp)) str += ": reached end of file.";
00046 else if (ferror(fp)) str += ": error reading file.";
00047 else str += ": unknown error";
00048
00049 return exception(str.c_str());
00050 }
00051
00053 logic_error LogicError (const char *format, ...)
00054 {
00055 va_list args;
00056 char buffer[512];
00057 va_start(args,format);
00058 _vsnprintf(buffer,sizeof(buffer)-1,format,args);
00059 va_end(args);
00060 return logic_error(buffer);
00061 }
00062
00064 runtime_error RuntimeError (const char *format, ...)
00065 {
00066 va_list args;
00067 char buffer[512];
00068 va_start(args,format);
00069 _vsnprintf(buffer,sizeof(buffer)-1,format,args);
00070 va_end(args);
00071 return runtime_error(buffer);
00072 }
00073
00075 invalid_argument ArgError (const char *format, ...)
00076 {
00077 va_list args;
00078 char buffer[512];
00079 va_start(args,format);
00080 _vsnprintf(buffer,sizeof(buffer)-1,format,args);
00081 va_end(args);
00082 return invalid_argument(buffer);
00083 }
00084
00086 exception DiskError (const char *format, ...)
00087 {
00088 va_list args;
00089 char buffer[512];
00090 va_start(args,format);
00091 _vsnprintf(buffer,sizeof(buffer)-1,format,args);
00092 va_end(args);
00093 return exception(buffer);
00094 }
00095
00096
00098 void Message(const char *format, ...)
00099 {
00100 va_list args;
00101 char buffer[512];
00102 va_start(args,format);
00103 _vsnprintf(buffer,sizeof(buffer)-1,format,args);
00104 va_end(args);
00105 MessageBox(0, buffer, "", MB_OK);
00106 }
00107
00109 void printDebugString(const char *format, ...)
00110 {
00111 va_list args;
00112 char buffer[512];
00113 va_start(args,format);
00114 _vsnprintf(buffer,sizeof(buffer)-1,format,args);
00115 va_end(args);
00116 ::OutputDebugString(buffer);
00117 }
00118
00119
00120 char *fmtString(const char *format, ...)
00121 {
00122 va_list args;
00123 __declspec( thread ) static char buffer[512];
00124 va_start(args,format);
00125 _vsnprintf(buffer,sizeof(buffer)-1,format,args);
00126 va_end(args);
00127 return buffer;
00128 }
00129
00130
00131
00132
00133
00134
00135
00136