+int VT_int_2DCmd_SendData(void *Handle, size_t Offset, size_t Length, const void *Data)
+{
+ tVTerm *term = Handle;
+ struct ptycmd_senddata cmd;
+ size_t ret = 0;
+
+ if( Offset == 0 )
+ {
+ if( Length < sizeof(cmd) )
+ return 0;
+ memcpy(&cmd, Data, sizeof(cmd));
+
+ ret = sizeof(cmd);
+ Offset += ret;
+ Length -= ret;
+ Data = (const char*)Data + ret;
+
+ term->Cmd2D.CmdInfo.Push.Offset = cmd.ofs*4;
+ }
+
+ ASSERTC(Offset, >=, sizeof(cmd));
+
+ if( Length > 0 )
+ {
+ size_t bytes = MIN(term->Width*term->Height*4 - term->Cmd2D.CmdInfo.Push.Offset, Length);
+ LOG("bytes = %i (0x%x), Length = %i", bytes, bytes, Length);
+
+ VT_int_PutFBData(term, term->Cmd2D.CmdInfo.Push.Offset, bytes, Data );
+ term->Cmd2D.CmdInfo.Push.Offset += bytes;
+ ret += bytes;
+
+ LOG("bytes(%i) ==? 0 || ret(%i) + Offset(%i) ==? %i",
+ bytes, ret, Offset, term->Cmd2D.CurrentSize);
+ if( bytes == 0 || ret + Offset >= term->Cmd2D.CurrentSize )
+ return ret;
+ }
+
+ return -ret;
+}
+