Riportata la modifica per ricerca con chiavi che abbiano espressioni o

campi numerici all'interno. Particolarmente indicata per stampe vendite
(Listini-Contratti-Offerte).


git-svn-id: svn://10.65.10.50/trunk@4112 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
alex 1997-02-03 15:12:38 +00:00
parent c6c5e1be28
commit 1ea856efbb

View File

@ -368,7 +368,8 @@ HIDDEN int __build_key(RecDes *recd, int numkey, RecType recin, char *key, bool
/* build_x_cb flag di costruzione per codebase */
{
CHECKD(numkey > 0, "Can't build key ", numkey);
const char null_char = (char)0xFF;
key[0] = '\0';
if (numkey-- <= recd->NKeys)
{
@ -408,9 +409,9 @@ HIDDEN int __build_key(RecDes *recd, int numkey, RecType recin, char *key, bool
if (recin[off] == '\0')
{
memset(key + l, ' ', len);
if (build_x_cb && ((f == _intfld) || (f == _longfld) || (f == _wordfld) ||
(f == _intzerofld) || (f == _longzerofld)))
key[l + len - 1] = '0';
if ((f == _intfld) || (f == _longfld) || (f == _wordfld) ||
(f == _intzerofld) || (f == _longzerofld))
key[l + len - 1] = build_x_cb ? '0' : null_char;
}
else
if ((f == _intfld) || (f == _longfld) || (f == _wordfld) || (f == _intzerofld) || (f == _longzerofld))
@ -418,7 +419,7 @@ HIDDEN int __build_key(RecDes *recd, int numkey, RecType recin, char *key, bool
int w = l, j = l + len;
while (w < j && key[w] == ' ') w++;
while (w < j && key[w] == '0') key[w++] = ' ';
if (build_x_cb && (w == j)) key[w-1] = '0';
if (w == j) key[w-1] = build_x_cb ? '0' : 0xFF;
}
if (upp)
for (int i = l+len-1; i >= l; i--)
@ -428,9 +429,20 @@ HIDDEN int __build_key(RecDes *recd, int numkey, RecType recin, char *key, bool
}
// rtrim
while (l > 0 && key[l-1] == ' ') l--;
key[l] = '\0';
if (build_x_cb)
{
for (l--; l>=0 && key[l] == ' '; l--);
key[l + 1] = '\0';
}
else
{
for (l--; l>=0 && (key[l] == ' ' || key[l] == null_char); l--);
key[l + 1] = '\0';
for (;l >= 0; l--)
if (key[l] == null_char)
key[l] = '0';
}
return(NOERR);
}
return(_ispatherr);