Main Page | Alphabetical List | Data Structures | File List | Data Fields | Globals

soarapi_datatypes.c

Go to the documentation of this file.
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;      /* vsnprintf doesn't set last char to null if output is truncated */
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;      /* vsnprintf doesn't set last char to null if output is truncated */
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             /* Bug: Hope we have enough room! */
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 }

Generated on Thu Dec 11 13:00:22 2003 for Soar Kernel by doxygen 1.3.5