From a360e487bdc0f208e4348599d20667ecdc985782 Mon Sep 17 00:00:00 2001 From: mcmartin Date: Thu, 31 Oct 2002 05:25:14 +0000 Subject: [PATCH] Xylo's construct_response fix git-svn-id: svn://svn.code.sf.net/p/sc2/code/trunk@188 8092fc87-c524-0410-9efc-e669fe64eaf9 --- sc2/src/sc2code/commglue.c | 69 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 67 insertions(+), 2 deletions(-) diff --git a/sc2/src/sc2code/commglue.c b/sc2/src/sc2code/commglue.c index 764304a4c..cf6e14e80 100644 --- a/sc2/src/sc2code/commglue.c +++ b/sc2/src/sc2code/commglue.c @@ -111,26 +111,91 @@ construct_response (UNICODE *buf, RESPONSE_REF R, ...) { UNICODE *name; va_list vlist; - + + // fprintf(stderr, "DEBUG: We've entered into construct_response!\n"); + va_start (vlist, R); + + // fprintf(stderr, "DEBUG: R = %d\n", R); + do { COUNT len; STRING S; + // fprintf(stderr, "DEBUG: len = %d\n",len); + S = SetAbsStringTableIndex (CommData.ConversationPhrases, R - 1); + + // fprintf(stderr, "DEBUG: Returned from call to SetAbsStringTableIndex\n"); + // fprintf(stderr, "DEBUG: GetStringAddress(S) = %s\n",(UNICODE *)GetStringAddress(S)); + // fprintf(stderr, "DEBUG: buf = '%s' (%d) \n", buf, *buf); + // fprintf(stderr, "DEBUG: strlen(buf) = %d\n", strlen(buf)); + wstrcpy (buf, (UNICODE *)GetStringAddress (S)); + + // fprintf(stderr, "DEBUG: buf = '%s' (%d) \n", buf, *buf); + // fprintf(stderr, "DEBUG: strlen(buf) = %d\n", strlen(buf)); + len = wstrlen (buf); + + // fprintf(stderr, "DEBUG: len = %d\n",len); + buf += len; + + // fprintf(stderr, "DEBUG: buf = '%s' (%d) \n", buf, *buf); + // fprintf(stderr, "DEBUG: strlen(buf) = %d\n", strlen(buf)); + name = va_arg (vlist, UNICODE *); + + // fprintf(stderr, "DEBUG: returned from va_arg call\n"); + // fprintf(stderr, "DEBUG: name = %s\n",name); + if (name) { + /* + fprintf(stderr, "DEBUG: ------------------------------------\n"); + fprintf(stderr, "DEBUG: We are in the special va_args loop!\n"); + fprintf(stderr, "DEBUG: Current critical variables read:\n"); + fprintf(stderr, "DEBUG: ------------------------------------\n"); + fprintf(stderr, "DEBUG: name = %s\n", name); + fprintf(stderr, "DEBUG: buf = '%s' (%d)\n", buf, *buf); + fprintf(stderr, "DEBUG: len = %d\n", len); + fprintf(stderr, "DEBUG: strlen(name) = %d\n", strlen(name)); + fprintf(stderr, "DEBUG: strlen(buf) = %d\n", strlen(buf)); + fprintf(stderr, "DEBUG: ---- continuing ----\n"); + */ + len = wstrlen (name); + + // fprintf(stderr, "DEBUG: len = %d\n", len); + wstrncpy (buf, name, len); - buf += len; + + // fprintf(stderr, "DEBUG: buf = '%s' (%d)\n", buf, *buf); + // fprintf(stderr, "DEBUG: strlen(buf) = %d\n", strlen(buf)); + buf += len; + + // fprintf(stderr, "DEBUG: buf = '%s' (%d)\n", buf, *buf); + + // fprintf(stderr, "DEBUG: Calling va_arg\n"); + + /* + The old code follows.. I've broken this all down while troubleshooting. + if ((R = va_arg (vlist, RESPONSE_REF)) == (RESPONSE_REF)-1) name = 0; + */ + + R = va_arg(vlist, int); + + // fprintf(stderr, "DEBUG: Return from call to va_arg\n"); + // fprintf(stderr, "DEBUG: R = %d\n", R); + + if (R == ((RESPONSE_REF)-1)) name = 0; + + // fprintf(stderr, "DEBUG: name = %s\n", name); } } while (name); va_end (vlist);