Home | Info | Community | Development | myReactOS | Contact Us
[static]
Definition at line 62 of file lineinput.c.
Referenced by LineInputKeyDown().
{ UNICODE_STRING NewEntry; PHISTORY_BUFFER Hist; INT i; NewEntry.Length = NewEntry.MaximumLength = Console->LineSize * sizeof(WCHAR); NewEntry.Buffer = Console->LineBuffer; if (!(Hist = HistoryCurrentBuffer(Console))) return; /* Don't add blank or duplicate entries */ if (NewEntry.Length == 0 || Hist->MaxEntries == 0 || (Hist->NumEntries > 0 && RtlEqualUnicodeString(&Hist->Entries[Hist->NumEntries - 1], &NewEntry, FALSE))) { return; } if (Console->HistoryNoDup) { /* Check if this line has been entered before */ for (i = Hist->NumEntries - 1; i >= 0; i--) { if (RtlEqualUnicodeString(&Hist->Entries[i], &NewEntry, FALSE)) { /* Just rotate the list to bring this entry to the end */ NewEntry = Hist->Entries[i]; memmove(&Hist->Entries[i], &Hist->Entries[i + 1], (Hist->NumEntries - (i + 1)) * sizeof(UNICODE_STRING)); Hist->Entries[Hist->NumEntries - 1] = NewEntry; Hist->Position = Hist->NumEntries - 1; return; } } } if (Hist->NumEntries == Hist->MaxEntries) { /* List is full, remove oldest entry */ RtlFreeUnicodeString(&Hist->Entries[0]); memmove(&Hist->Entries[0], &Hist->Entries[1], --Hist->NumEntries * sizeof(UNICODE_STRING)); } if (NT_SUCCESS(RtlDuplicateUnicodeString(0, &NewEntry, &Hist->Entries[Hist->NumEntries]))) Hist->NumEntries++; Hist->Position = Hist->NumEntries - 1; }