]> code.citadel.org Git - citadel.git/blobdiff - citadel/commands.c
* New UI for mailing list setup
[citadel.git] / citadel / commands.c
index 874680deb1138f63735ec2262691c419ee19a7e7..75399ca1b59fc960442cabe831f620a26c5467f6 100644 (file)
 #include <ctype.h>
 #include <string.h>
 #include <sys/types.h>
-#include <sys/time.h>
+
+#if TIME_WITH_SYS_TIME
+# include <sys/time.h>
+# include <time.h>
+#else
+# if HAVE_SYS_TIME_H
+#  include <sys/time.h>
+# else
+#  include <time.h>
+# endif
+#endif
 
 #ifdef HAVE_TERMIOS_H
 #include <termios.h>
@@ -41,6 +51,7 @@
 #include "routines2.h"
 #include "tools.h"
 #include "rooms.h"
+#include "client_chat.h"
 #ifndef HAVE_SNPRINTF
 #include "snprintf.h"
 #endif
@@ -56,21 +67,22 @@ struct citcmd {
 
 
 int rc_exp_beep;
-char rc_exp_cmd[256];
+char rc_exp_cmd[1024];
 int rc_allow_attachments;
 int rc_display_message_numbers;
 int rc_force_mail_prompts;
 int rc_remember_passwords;
 int rc_ansi_color;
 int num_urls = 0;
-char urls[MAXURLS][256];
-char rc_url_cmd[256];
+char urls[MAXURLS][SIZ];
+char rc_url_cmd[SIZ];
 
 char *gl_string;
 int next_lazy_cmd = 5;
 
 int lines_printed = 0;         /* line count for paginator */
 extern int screenwidth, screenheight;
+extern int termn8;
 
 struct citcmd *cmdlist = NULL;
 
@@ -182,11 +194,11 @@ void pprintf(const char *format, ...) {
  */
 void print_express(void)
 {
-       char buf[256];
+       char buf[1024];
        FILE *outpipe;
        time_t timestamp;
        struct tm *stamp;
-       int flags;
+       int flags = 0;
        char sender[64];
        char node[64];
 
@@ -196,8 +208,10 @@ void print_express(void)
        if (rc_exp_beep) {
                putc(7, stdout);
        }
-       color(BRIGHT_RED);
-       printf("\r---");
+       if (strlen(rc_exp_cmd) == 0) {
+               color(BRIGHT_RED);
+               printf("\r---");
+       }
        
        while (express_msgs != 0) {
                serv_puts("GEXP");
@@ -210,8 +224,15 @@ void print_express(void)
                flags = extract_int(&buf[4], 2);
                extract(sender, &buf[4], 3);
                extract(node, &buf[4], 4);
+               strcpy(last_paged, sender);
        
                stamp = localtime(&timestamp);
+
+               /* If the page is a Logoff Request, honor it. */
+               if (flags & 2) {
+                       termn8 = 1;
+                       return;
+               }
        
                if (strlen(rc_exp_cmd) > 0) {
                        outpipe = popen(rc_exp_cmd, "w");
@@ -226,15 +247,29 @@ void print_express(void)
                                        fprintf(outpipe, "Chat request ");
                                else
                                        fprintf(outpipe, "Message ");
-                               /* 24hr format.  Can be changed, I guess. */
-                               fprintf(outpipe, "at %d:%02d from %s @%s:\n",
-                                       stamp->tm_hour, stamp->tm_min,
-                                       sender, node);
+                               /* Timestamp.  Can this be improved? */
+                               if (stamp->tm_hour == 0 || stamp->tm_hour == 12)
+                                       fprintf(outpipe, "at 12:%02d%cm",
+                                               stamp->tm_min, 
+                                               stamp->tm_hour ? 'p' : 'a');
+                               else if (stamp->tm_hour > 12)           /* pm */
+                                       fprintf(outpipe, "at %d:%02dpm",
+                                               stamp->tm_hour - 12,
+                                               stamp->tm_min);
+                               else                                    /* am */
+                                       fprintf(outpipe, "at %d:%02dam",
+                                               stamp->tm_hour, stamp->tm_min);
+                               fprintf(outpipe, " from %s", sender);
+                               if (strncmp(serv_info.serv_nodename, node, 32))
+                                       fprintf(outpipe, " @%s", node);
+                               fprintf(outpipe, ":\n");
                                while (serv_gets(buf), strcmp(buf, "000")) {
                                        fprintf(outpipe, "%s\n", buf);
                                }
                                pclose(outpipe);
-                               return;
+                               if (express_msgs == 0)
+                                       return;
+                               continue;
                        }
                }
                /* fall back to built-in express message display */
@@ -275,6 +310,8 @@ void print_express(void)
        }
        printf("\n---\n");
        color(BRIGHT_WHITE);
+
+
 }
 
 
@@ -289,7 +326,7 @@ void set_keepalives(int s)
 
 static time_t idlet = 0;
 static void really_do_keepalive(void) {
-       char buf[256];
+       char buf[1024];
 
        time(&idlet);
        if (keepalives_enabled == KA_YES) {
@@ -632,7 +669,7 @@ int lkey(void)
 void load_command_set(void)
 {
        FILE *ccfile;
-       char buf[256];
+       char buf[1024];
        struct citcmd *cptr;
        struct citcmd *lastcmd = NULL;
        int a, d;
@@ -676,7 +713,7 @@ void load_command_set(void)
                perror("commands: cannot open citadel.rc");
                logoff(errno);
        }
-       while (fgets(buf, 256, ccfile) != NULL) {
+       while (fgets(buf, sizeof buf, ccfile) != NULL) {
                while ((strlen(buf) > 0) ? (isspace(buf[strlen(buf) - 1])) : 0)
                        buf[strlen(buf) - 1] = 0;
 
@@ -804,7 +841,7 @@ char *cmd_expand(char *strbuf, int mode)
 {
        int a;
        static char exp[64];
-       char buf[256];
+       char buf[1024];
 
        strcpy(exp, strbuf);
 
@@ -1000,22 +1037,22 @@ int getcmd(char *argbuf)
                }
 
                if (ch == '?') {
-                       printf("\rOne of ...                         \n");
+                       pprintf("\rOne of ...                         \n");
                        for (cptr = cmdlist; cptr != NULL; cptr = cptr->next) {
                                if (cmdmatch(cmdbuf, cptr, cmdpos)) {
                                        for (a = 0; a < 5; ++a) {
-                                               printf("%s ", cmd_expand(cptr->c_keys[a], 1));
+                                               pprintf("%s ", cmd_expand(cptr->c_keys[a], 1));
                                        }
-                                       printf("\n");
+                                       pprintf("\n");
                                }
                        }
 
-                       printf("\n%s%c ", room_name, room_prompt(room_flags));
+                       pprintf("\n%s%c ", room_name, room_prompt(room_flags));
                        got = 0;
                        for (cptr = cmdlist; cptr != NULL; cptr = cptr->next) {
                                if ((got == 0) && (cmdmatch(cmdbuf, cptr, cmdpos))) {
                                        for (a = 0; a < cmdpos; ++a) {
-                                               printf("%s ",
+                                               pprintf("%s ",
                                                       cmd_expand(cptr->c_keys[a], 0));
                                        }
                                        got = 1;
@@ -1170,7 +1207,7 @@ FMTA:     while ((eof_flag == 0) && (strlen(buffer) < 126)) {
 
        if ( (!strncasecmp(buffer, "http://", 7))
           || (!strncasecmp(buffer, "ftp://", 6)) ) {
-               safestrncpy(urls[num_urls], buffer, 255);
+               safestrncpy(urls[num_urls], buffer, (SIZ-1));
                for (a=0; a<strlen(urls[num_urls]); ++a) {
                        b = urls[num_urls][a];
                        if ( (b==' ') || (b==')') || (b=='>') || (b==10)
@@ -1384,7 +1421,7 @@ char keymenu(char *menuprompt, char *menustring) {
        int i, c, a;
        int choices;
        int do_prompt = 0;
-       char buf[256];
+       char buf[1024];
        int ch;
        int display_prompt = 1;