On Monday, August 05, 2002 10:54 am, Aric wrote: > On Monday, August 05, 2002 09:25 am, Carl wrote: > > Using an account register, I was entering a transaction. I entered the > > date <tab>, <tab> (skipping check #), Payee <tab>, Payment Amount <tab>, > > transfer account <tab>, memo. At this point, pressing <ctrl><Enter> > > should save the transaction. However, when I pressed <ctrl><Enter>, the > > Transfer Account got cleared, then I was asked if the program should save > > the transaction anyway. The Transfer Account does NOT get cleared if the > > <ctrl><Enter> is pressed while the cursor is in that field. > > Ah you have reported the bug that has sucked away far too many days of > my time to no avail. > For some reason I have yet to determine. If you select the memo field > then the Category field gets cleared.
Well, after a day of wading through a whole lot of --debugmsg +all logs, I've figured out what's going on with this... EDIT_WM_GetText (in controls/edit.c) is "blindly" setting the last byte of the string buffer being past to it to NULL: textA[count - 1] = 0; /* ensure 0 termination */ Apparently, in this particular case, the buffer size (the 'count' veriable) is not correct, and the location of textA[count - 1] just happens to correspond to the first byte of the Category field, which (obviously) CHANGES IT TO A NULL STRING! Voila! Now, since I have just found this, I have not had a chance to determine of the erroneous value of "count" is a bug in Wine, or in Quicken! Doing so may take an awfully loooooong time, particularly since I don't have the source for Quicken. (Since this does not seem to be a pervasive bug, I'm suspecting Quicken...) So, here's what I see as my choices... 1) Forget the origin of the bug, and change EDIT_WM_GetText to only set the last byte to a NULL only if there is not a NULL byte prior to [count - 1]. I'm guessing the most efficient way (I'm no C guru) would be to change the line to something like: if (strlen(textA) >= count) textA[count - 1] = 0; If this is reasonable, the question that I would have is "What functions should I use in place of the strlen() above [for A and W strings] (or is strlen() good enough for both)?" 2) Take some time to try to track down if the bug is Wine related. I'm willing to spend a day (maybe two) on this, but my gut tells me it's futile. Obviously, if I find a related Wine bug, I'd fix it, which indirectly would fix this issue. But if I don't find a related bug, I guess I would have to revert to (1) anyway... Suggestions?? Comments?? Carl