diff mcabber/src/screen.c @ 238:8e30b2bb380e

[/trunk] Changeset 251 by mikael * Add /msay command (multi-line messages)
author mikael
date Sat, 11 Jun 2005 19:12:25 +0000
parents 72fd1273f2b7
children cb7f944741e4
line wrap: on
line diff
--- a/mcabber/src/screen.c	Fri Jun 10 19:26:34 2005 +0000
+++ b/mcabber/src/screen.c	Sat Jun 11 19:12:25 2005 +0000
@@ -43,6 +43,8 @@
 static window_entry_t *currentWindow;
 
 static int chatmode;
+static int multimode;
+static char *multiline;
 int update_roster;
 int utf8_mode = 0;
 
@@ -1086,6 +1088,75 @@
   chatmode = enable;
 }
 
+//  scr_get_multimode()
+// Public fonction to get multimode status...
+inline int scr_get_multimode()
+{
+  return multimode;
+}
+
+//  scr_set_multimode()
+// Public fonction to (un)set multimode...
+inline void scr_set_multimode(int enable)
+{
+  if (multiline) {
+    g_free(multiline);
+    multiline = NULL;
+  }
+  if (enable)
+    multimode = TRUE;
+  else
+    multimode = FALSE;
+}
+
+//  scr_get_multiline()
+// Public fonction to get multimode status...
+inline const char *scr_get_multiline()
+{
+  if (multimode && multiline)
+    return multiline;
+  else
+    return "";
+}
+
+//  scr_append_multiline(line)
+// Public function to append a line to the current multi-line message.
+// Skip empty leading lines.
+void scr_append_multiline(const char *line)
+{
+  static int num;
+
+  if (!multimode) {
+    scr_LogPrint("Error: Not in multi-line message mode!");
+    return;
+  }
+  if (multiline) {
+    int len = strlen(multiline)+strlen(line)+2;
+    if (len >= HBB_BLOCKSIZE) {
+      // We don't handle single messages with size > HBB_BLOCKSIZE
+      // (see hbuf)
+      scr_LogPrint("Your multi-line message is too big, this line has "
+                   "not been added.");
+      scr_LogPrint("Please send this part now...");
+      return;
+    }
+    multiline = g_renew(char, multiline, len);
+    strcat(multiline, "\n");
+    strcat(multiline, line);
+    num++;
+  } else {
+    // First message line (we skip leading empty lines)
+    num = 0;
+    if (line[0]) {
+      multiline = g_new(char, strlen(line)+1);
+      strcpy(multiline, line);
+      num++;
+    } else
+      return;
+  }
+  scr_LogPrint("Multi-line mode: line #%d added  [%.25s...", num, line);
+}
+
 //  scr_cmdhisto_addline()
 // Add a line to the inputLine history
 inline void scr_cmdhisto_addline(char *line)
@@ -1371,7 +1442,7 @@
             check_offset(-1);
           }
           break;
-      case KEY_DC:
+      case KEY_DC:// Del
           if (*ptr_inputline)
             strcpy(ptr_inputline, ptr_inputline+1);
           break;