Из исходников моего интерпретатора на языке MIDletPascal
s - строка
x,y - текущее положение курсора на экране
w,h - ширина высота области вывода
x0,y0 - стартовая позиция на экране
while (x+getStringWidth(s)>=x0+w) do
begin
n:=length(s);
if n>1 then
begin
repeat n:=n-1; until (getStringWidth(copy(s,0,n))<x0+w) or (n<=0);
drawText(copy(s,0,n),x,y);
s:=copy(s,n,length(s));
end;
n:=getStringHeight('ABCDEF');
y:=y+n;
if (y+n>=y0+h) then y:=y0;
x:=x0;
end;
drawText(s,x,y);
x:=x+getStringWidth(s);