00001 #include "soarkernel.h"
00002 #include "soarapi_datatypes.h"
00003
00004 #ifdef USE_STDARGS
00005 void setSoarResultResult(soarResult * res, const char *format, ...)
00006 {
00007 va_list args;
00008
00009 va_start(args, format);
00010
00011 #else
00012 void setSoarResultResult(va_alist)
00013 va_dcl
00014 {
00015 va_list args;
00016 char *format;
00017 soarResult *res;
00018
00019 va_start(args);
00020 res = va_arg(args, soarResult *);
00021 format = va_arg(args, char *);
00022 #endif
00023
00024 vsnprintf(res->result, SOARRESULT_RESULT_LENGTH, format, args);
00025 res->result[SOARRESULT_RESULT_LENGTH - 1] = 0;
00026 }
00027
00028 #ifdef USE_STDARGS
00029 void appendSoarResultResult(soarResult * res, const char *format, ...)
00030 {
00031 va_list args;
00032 int i;
00033
00034 va_start(args, format);
00035 #else
00036 void appendSoarResultResult(va_alist)
00037 va_dcl
00038 {
00039 va_list args;
00040 char *format;
00041 soarResult *res;
00042 int i;
00043
00044 va_start(args);
00045 res = va_arg(args, soarResult *);
00046 format = va_arg(args, char *);
00047 #endif
00048
00049 i = 0;
00050 while (res->result[i])
00051 i++;
00052
00053 vsnprintf(&res->result[i], SOARRESULT_RESULT_LENGTH - i, format, args);
00054 res->result[SOARRESULT_RESULT_LENGTH - 1] = 0;
00055
00056 }
00057
00058 #ifdef USE_STDARGS
00059 void appendSymbolsToSoarResultResult(soarResult * res, const char *format, ...)
00060 {
00061 va_list args;
00062 char *r, *end;
00063
00064 va_start(args, format);
00065 #else
00066 void appendSymbolsToSoarResultResult(va_alist)
00067 va_dcl
00068 {
00069 va_list args;
00070 char *format;
00071 soarResult *res;
00072 char *r, *end;
00073
00074 va_start(args);
00075 res = va_arg(args, soarResult *);
00076 format = va_arg(args, char *);
00077 #endif
00078
00079 r = res->result;
00080
00081 end = r + res->resultLength;
00082 while (*r)
00083 r++;
00084
00085 while (r < end) {
00086
00087 while ((*format != '%') && (*format))
00088 *(r++) = *(format++);
00089 if (*format == 0)
00090 break;
00091
00092 if (*(format + 1) == 'y') {
00093
00094 symbol_to_string(va_arg(args, Symbol *), TRUE, r, SOARRESULT_RESULT_LENGTH - (r - res->result));
00095 while (*r)
00096 r++;
00097 } else {
00098 *(r++) = '%';
00099 }
00100 format += 2;
00101 }
00102 va_end(args);
00103
00104 *r = 0;
00105
00106 }