+
+void AxWin3_RichText_ScrollRange(tHWND Window, int FirstRow, int RangeCount, int DownCount)
+{
+ if( FirstRow < 0 )
+ return ;
+ if( RangeCount < -2 || RangeCount == 0 )
+ return ;
+ if( RangeCount > 0 && DownCount > RangeCount )
+ return ;
+
+ struct sRichTextIPC_ScrollRange msg;
+ msg.First = FirstRow;
+ msg.Range = RangeCount;
+ msg.Count = DownCount;
+ AxWin3_SendIPC(Window, IPC_RICHTEXT_SCROLLRANGE, sizeof(msg), &msg);
+}
+
+void AxWin3_RichText_SendLine(tHWND Window, int Line, const char *Text)
+{
+ // TODO: Local sanity check on `Line`?
+ struct sRichTextIPC_WriteLine *msg;
+ size_t len = sizeof(*msg) + strlen(Text) + 1;
+ char buffer[len];
+ msg = (void*)buffer;
+ msg->Line = Line;
+ strcpy(msg->LineData, Text);
+ AxWin3_SendIPC(Window, IPC_RICHTEXT_WRITELINE, len, msg);
+}
+