http://lurkmore.ru/Facepalm
## Код:
```
LOOP
      IF (tmp = NIL) OR (w.lastLineY > w.client.wy) THEN
         IF last # NIL THEN last.next := NIL END;
         WHILE tmp # NIL DO tmp.Dispose; tmp := tmp.next END;
         IF ~before OR (li = NIL) THEN EXIT END;
         tmp := w.firstLine; w.firstLine := li; li.next := tmp; w.highlight := li;
         li.ItemExtent (li.height); DEC (d, li.height);
         w.Validate (li); InitScan; prev := NIL; chg := TRUE;
      ELSE
         oldSz := tmp.height; tmp.ItemExtent (tmp.height); INC (w.lastLineY, tmp.height);
         IF oldSz # tmp.height THEN
            tmp.Update
         END;
         IF tmp = li THEN before := FALSE; bot := w.lastLineY; w.highlight := li END;
         last := tmp; tmp := tmp.next;
      END; (* if last line *)
   END; (* loop *)
```
