void ParseAndPaint() { //search.clear(); list.KeyHome(); list.count=0; Parse(); list.visible = list.h / list.item_h; if (list.count < list.visible) { DrawBuf.bufh = list.visible; } else { DrawBuf.bufh = list.count; } DrawBuf.Init(list.x, list.y, list.w, DrawBuf.bufh+1*list.item_h); DrawPage(); } void Parse() { dword off; int line_end; dword line_length=0; dword line_start = io.buffer_data; dword buflen = strlen(io.buffer_data) + io.buffer_data; lines.drop(); lines.add(io.buffer_data); selection.cancel(); for (off = io.buffer_data; off < buflen; off++) { line_length += list.font_w; if (line_length + 30 >= list.w) || (ESBYTE[off] == 10) { //searching a 'white' for a normal word-break for(line_end = off; line_end != line_start; line_end--) { if (__isWhite(ESBYTE[line_end])) { off=line_end+1; break; } } line_length = off - line_start * list.font_w; list.count++; lines.add(off); line_start = off; line_length = 0; } } lines.add(buflen); list.count++; } void PaintVisible() { int i; dword y; dword line_bg; bool swapped = false; list.column_max = lines.get(list.cur_y+1) - lines.get(list.cur_y); list.CheckDoesValuesOkey(); if (selection.end_offset < selection.start_offset) { swapped = selection.swap_start_end(); } for ( i=list.first; i < list.first+list.visible+1; i++) { y = i * list.item_h; line_bg = theme.bg; if (selection.start_y < i) && (selection.end_y > i) line_bg = selection.color; DrawBuf.DrawBar(0, y, list.w, list.item_h, line_bg); selection.draw(i); if (i