ソースを参照

* keep reading in getxy until the entire xterm response has been read
(mantis #8842)

git-svn-id: trunk@12593 -

Jonas Maebe 16 年 前
コミット
ee05e0e740
1 ファイル変更25 行追加21 行削除
  1. 25 21
      rtl/unix/crt.pp

+ 25 - 21
rtl/unix/crt.pp

@@ -1547,27 +1547,31 @@ begin
   fpWrite(0,s[1],length(s));
   fpFD_ZERO(fds);
   fpFD_SET(1,fds);
-  if (fpSelect(2,@fds,nil,nil,1000)>0) then
-   begin
-     readed:=fpRead(1,buf,sizeof(buf));
-     i:=0;
-     while (i+5<readed) and (buf[i]<>#27) and (buf[i+1]<>'[') do
-      inc(i);
-     if i+5<readed then
-      begin
-        s:=space(16);
-        move(buf[i+2],s[1],16);
-        i:=Pos(';',s);
-        if i>0 then
-         begin
-           Val(Copy(s,1,i-1),y);
-           j:=Pos('R',s);
-           if j=0 then
-            j:=length(s);
-           Val(Copy(s,i+1,j-(i+1)),x);
-         end;
-      end;
-   end;
+  readed:=0;
+  repeat
+    if (fpSelect(2,@fds,nil,nil,1000)>0) then
+     begin
+       readed:=readed+fpRead(1,buf[readed],sizeof(buf)-readed);
+       i:=0;
+       while (i+5<readed) and (buf[i]<>#27) and (buf[i+1]<>'[') do
+        inc(i);
+       if i+5<readed then
+        begin
+          s:=space(16);
+          move(buf[i+2],s[1],16);
+          j:=Pos('R',s);
+          if j>0 then
+           begin
+             i:=Pos(';',s);
+             Val(Copy(s,1,i-1),y);
+             Val(Copy(s,i+1,j-(i+1)),x);
+             break;
+           end;
+        end;
+     end
+    else
+      break;
+  until false;
 end;