beautypg.com

Intel Extensible Firmware Interface User Manual

Page 976

background image

Extensible Firmware Interface Specification

H-12

12/01/02

Version 1.10

Routine Description:

Insert string info for current position into the String Info Log

Arguments: (VOID)

Returns: (VOID)

--*/
{
NODE q, r, j, t;
UINT8 c, *t1, *t2;

if (mMatchLen >= 4) {

//
// We have just got a long match, the target tree
// can be located by MatchPos + 1. Travese the tree
// from bottom up to get to a proper starting point.
// The usage of PERC_FLAG ensures proper node deletion
// in DeleteNode() later.
//

mMatchLen--;
r = (INT16)((mMatchPos + 1) | WNDSIZ);
while ((q = mParent[r]) == NIL) {
r = mNext[r];
}
while (mLevel[q] >= mMatchLen) {
r = q; q = mParent[q];
}
t = q;
while (mPosition[t] < 0) {
mPosition[t] = mPos;
t = mParent[t];
}
if (t < WNDSIZ) {
mPosition[t] = (NODE)(mPos | PERC_FLAG);
}
} else {

//
// Locate the target tree
//

q = (INT16)(mText[mPos] + WNDSIZ);
c = mText[mPos + 1];
if ((r = Child(q, c)) == NIL) {
MakeChild(q, c, mPos);
mMatchLen = 1;
return;
}
mMatchLen = 2;
}

//
// Traverse down the tree to find a match.
// Update Position value along the route.
// Node split or creation is involved.
//