////////////////// // Initialize map: set up all the next/prev pointers. This converts the // linear array to a more convenient linked list. Called from END_WINDOW_MAP. // WINRECT* WINRECT::InitMap(WINRECT* pWinMap, WINRECT* parent) { assert(pWinMap); WINRECT* pwrc = pWinMap; // current table entry WINRECT* prev = NULL; // previous entry starts out none while (!pwrc->IsEndGroup()) { pwrc->prev=prev; pwrc->next=NULL; if (prev) prev->next = pwrc; prev = pwrc; if (pwrc->IsGroup()) { pwrc = InitMap(pwrc+1,pwrc); // recurse! Returns end-of-grp assert(pwrc->IsEndGroup()); } pwrc++; } // safety checks assert(pwrc->IsEndGroup()); assert(prev); assert(prev->next==NULL); return parent ? pwrc : NULL; }