GenericListKeyPress (PGENERIC_LIST GenericList, CHAR AsciChar)
{
PGENERIC_LIST_ENTRY ListEntry;
- PLIST_ENTRY Entry;
-
- Entry = &GenericList->CurrentEntry->Entry;
- ListEntry = CONTAINING_RECORD (Entry, GENERIC_LIST_ENTRY, Entry);
+ PGENERIC_LIST_ENTRY OldListEntry;
+ BOOLEAN Flag = FALSE;
-Reset:
+ ListEntry = GenericList->CurrentEntry;
+ OldListEntry = GenericList->CurrentEntry;
- if (tolower(ListEntry->Text[0]) != AsciChar)
- Entry = GenericList->ListHead.Flink;
+ GenericList->Redraw = FALSE;
- while (Entry != &GenericList->ListHead)
+ if ((strlen(ListEntry->Text) > 0) && (tolower(ListEntry->Text[0]) == AsciChar) &&
+ (GenericList->CurrentEntry->Entry.Flink != &GenericList->ListHead))
{
- ListEntry = CONTAINING_RECORD (Entry, GENERIC_LIST_ENTRY, Entry);
+ ScrollDownGenericList(GenericList);
+ ListEntry = GenericList->CurrentEntry;
if ((strlen(ListEntry->Text) > 0) && (tolower(ListEntry->Text[0]) == AsciChar))
- {
- if (CONTAINING_RECORD (Entry, GENERIC_LIST_ENTRY, Entry) == GenericList->CurrentEntry)
- {
- Entry = Entry->Flink;
- if (Entry == &GenericList->ListHead)
- goto Reset;
+ goto End;
+ }
- ListEntry = CONTAINING_RECORD (Entry, GENERIC_LIST_ENTRY, Entry);
- if ((strlen(ListEntry->Text) < 1) || (tolower(ListEntry->Text[0]) != AsciChar))
- goto Reset;
- }
+ while (GenericList->CurrentEntry->Entry.Blink != &GenericList->ListHead)
+ ScrollUpGenericList(GenericList);
- GenericList->CurrentEntry = CONTAINING_RECORD (Entry, GENERIC_LIST_ENTRY, Entry);
+ ListEntry = GenericList->CurrentEntry;
+
+ for (;;)
+ {
+ if ((strlen(ListEntry->Text) > 0) && (tolower(ListEntry->Text[0]) == AsciChar))
+ {
+ Flag = TRUE;
break;
}
- Entry = Entry->Flink;
+ if (GenericList->CurrentEntry->Entry.Flink == &GenericList->ListHead)
+ break;
+
+ ScrollDownGenericList(GenericList);
+ ListEntry = GenericList->CurrentEntry;
+ }
+
+ if (!Flag)
+ {
+ while (GenericList->CurrentEntry->Entry.Blink != &GenericList->ListHead)
+ {
+ if (GenericList->CurrentEntry != OldListEntry)
+ ScrollUpGenericList(GenericList);
+ else
+ break;
+ }
}
+End:
+ DrawListEntries(GenericList);
+ DrawScrollBarGenericList(GenericList);
- if (Entry)
- DrawListEntries(GenericList);
+ GenericList->Redraw = TRUE;
}