Index: queen/talk.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/queen/talk.cpp,v
retrieving revision 1.92
diff -u -r1.92 talk.cpp
--- queen/talk.cpp	21 Feb 2004 20:50:56 -0000	1.92
+++ queen/talk.cpp	6 Mar 2004 02:33:53 -0000
@@ -1233,31 +1233,79 @@
 	uint16 optionLines = 0;
 	uint16 maxTextLen = MAX_TEXT_WIDTH;
 	const char *p = str;
-	while (p) {
-		p = strchr(str, ' ');
-		if (p) {
-			uint16 len = p - str;
-			uint16 wordWidth = _vm->display()->textWidth(str, len);
-			width += wordWidth;
-			if (width> maxTextLen) {
-				++optionLines;
-				strncpy(optionText[optionLines], str, len + 1);
-				width = wordWidth;
-				maxTextLen = MAX_TEXT_WIDTH - OPTION_TEXT_MARGIN;
+	char tmpString[MAX_STRING_SIZE] = "";
+
+	// Split up hebrew lines in reverse
+	if (_vm->resource()->getLanguage() == HEBREW) {
+		uint16 len = 0;
+
+		p = strchr(str, '\0');
+
+		while (p != str - 1) {
+			while (*p != ' ' && p != str - 1) {
+				--p;
+				++len;
+			}
+			if (p != str - 1) {
+				uint16 wordWidth = _vm->display()->textWidth(p, len);
+				width += wordWidth;
+				if (width > maxTextLen) {
+					++optionLines;
+					strncpy(optionText[optionLines], p, len);
+					optionText[optionLines][len] = '\0';
+					width = wordWidth;
+					maxTextLen = MAX_TEXT_WIDTH - OPTION_TEXT_MARGIN;
+				} else {
+					strcpy(tmpString, optionText[optionLines]);
+					strncpy(optionText[optionLines], p, len);
+					optionText[optionLines][len] = '\0';
+					strcat(optionText[optionLines], tmpString);
+				}
+				--p;
+				len = 1;
+				width += spaceCharWidth;
 			} else {
-				strncat(optionText[optionLines], str, len + 1);
+				if (len > 1) {
+					if (width + _vm->display()->textWidth(p + 1, len) > maxTextLen) {
+						++optionLines;
+					}
+					
+					strcpy(tmpString, optionText[optionLines]);
+					strncpy(optionText[optionLines], p + 1, len);
+					optionText[optionLines][len] = '\0';
+					strcat(optionText[optionLines], tmpString);				
+				}
+				++optionLines;
 			}
-			width += spaceCharWidth;
-			str = p + 1;
-		} else {
-			if (str[0]) {
-				if (width + _vm->display()->textWidth(str) > maxTextLen) {
+		}
+	} else {
+		while (p) {
+			p = strchr(str, ' ');
+			if (p) {
+				uint16 len = p - str;
+				uint16 wordWidth = _vm->display()->textWidth(str, len);
+				width += wordWidth;
+				if (width> maxTextLen) {
 					++optionLines;
+					strncpy(optionText[optionLines], str, len + 1);
+					width = wordWidth;
+					maxTextLen = MAX_TEXT_WIDTH - OPTION_TEXT_MARGIN;
+				} else {
+					strncat(optionText[optionLines], str, len + 1);
 				}
-				strcat(optionText[optionLines], str);
+				width += spaceCharWidth;
+				str = p + 1;
+			} else {
+				if (str[0]) {
+					if (width + _vm->display()->textWidth(str) > maxTextLen) {
+						++optionLines;
+					}
+					strcat(optionText[optionLines], str);
+				}
+				++optionLines;
 			}
-			++optionLines;
 		}
+
 	}
 	return optionLines;
 }
Index: queen/journal.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/queen/journal.cpp,v
retrieving revision 1.32
diff -u -r1.32 journal.cpp
--- queen/journal.cpp	2 Mar 2004 21:17:45 -0000	1.32
+++ queen/journal.cpp	6 Mar 2004 02:33:53 -0000
@@ -368,14 +368,20 @@
 	char s[80];
 	strcpy(s, text);
 	char *p = strchr(s, ' ');
+	
 	if (p == NULL) {
 		int x = (128 - _vm->display()->textWidth(s)) / 2;
 		_vm->display()->setText(x, y, s, false);
 		_panelTextY[_panelTextCount++] = y;
 	} else {
 		*p++ = '\0';
-		drawPanelText(y - 5, s);
-		drawPanelText(y + 5, p);
+		if (_vm->resource()->getLanguage() == HEBREW) {
+			drawPanelText(y - 5, p);
+			drawPanelText(y + 5, s);
+		} else {
+			drawPanelText(y - 5, s);
+			drawPanelText(y + 5, p);
+		}
 	}
 }
 
