patch 8.1.1118: a couple of conditions are hard to understand

Problem:    A couple of conditions are hard to understand.
Solution:   Split the conditions into pieces. (Ozaki Kiichi, closes #3879)
diff --git a/src/getchar.c b/src/getchar.c
index e8926d4..4011db1 100644
--- a/src/getchar.c
+++ b/src/getchar.c
@@ -2030,6 +2030,8 @@
 	     */
 	    for (;;)
 	    {
+		long	    wait_time;
+
 		/*
 		 * ui_breakcheck() is slow, don't use it too often when
 		 * inside a mapping.  But call it each time for typed
@@ -2828,18 +2830,25 @@
 		    // that has a <Nop> RHS.
 		    timedout = FALSE;
 
+		if (advance)
+		{
+		    if (typebuf.tb_len == 0
+			    || !(p_timeout
+				 || (p_ttimeout && keylen == KEYLEN_PART_KEY)))
+			// blocking wait
+			wait_time = -1L;
+		    else if (keylen == KEYLEN_PART_KEY && p_ttm >= 0)
+			wait_time = p_ttm;
+		    else
+			wait_time = p_tm;
+		}
+		else
+		    wait_time = 0;
+
 		wait_tb_len = typebuf.tb_len;
 		c = inchar(typebuf.tb_buf + typebuf.tb_off + typebuf.tb_len,
 			typebuf.tb_buflen - typebuf.tb_off - typebuf.tb_len - 1,
-			!advance
-			    ? 0
-			    : ((typebuf.tb_len == 0
-				    || !(p_timeout || (p_ttimeout
-					       && keylen == KEYLEN_PART_KEY)))
-				    ? -1L
-				    : ((keylen == KEYLEN_PART_KEY && p_ttm >= 0)
-					    ? p_ttm
-					    : p_tm)));
+			wait_time);
 
 #ifdef FEAT_CMDL_INFO
 		if (i != 0)