]> code.citadel.org Git - citadel.git/blobdiff - textclient/messages.c
Still working on sixel
[citadel.git] / textclient / messages.c
index 1f304041a2b0e3641187675acdc503cb42ecbeff..183ed0f93db0b4caa0980c7757f1f08abb9c91e9 100644 (file)
@@ -4,15 +4,9 @@
 // late 1980s when my coding style was absolute garbage.  It
 // works, but we probably should replace most of it.
 //
 // late 1980s when my coding style was absolute garbage.  It
 // works, but we probably should replace most of it.
 //
-// Copyright (c) 1987-2022 by the citadel.org team
+// Copyright (c) 1987-2024 by the citadel.org team
 //
 //
-// This program is open source software.  Use, duplication, and/or
-// disclosure are subject to the GNU General Purpose License version 3.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
+// This program is open source software.  Use, duplication, or disclosure is subject to the GNU General Public License version 3.
 
 #include "textclient.h"
 
 
 #include "textclient.h"
 
@@ -59,13 +53,14 @@ extern char printcmd[];
 extern int rc_allow_attachments;
 extern int rc_display_message_numbers;
 extern int rc_force_mail_prompts;
 extern int rc_allow_attachments;
 extern int rc_display_message_numbers;
 extern int rc_force_mail_prompts;
+extern int rc_sixel;
 extern int editor_pid;
 extern int editor_pid;
-extern CtdlIPC *ipc_for_signal_handlers;       /* KLUDGE cover your eyes */
+extern CtdlIPC *ipc_for_signal_handlers;       // KLUDGE cover your eyes
 int num_urls = 0;
 char urls[MAXURLS][SIZ];
 char imagecmd[SIZ];
 int num_urls = 0;
 char urls[MAXURLS][SIZ];
 char imagecmd[SIZ];
-int has_images = 0;            /* Current msg has images */
-struct parts *last_message_parts = NULL;       /* Parts from last msg */
+int has_images = 0;                            // Current msg has images
+struct parts *last_message_parts = NULL;       // Parts from last msg
 
 
 void ka_sigcatch(int signum) {
 
 
 void ka_sigcatch(int signum) {
@@ -75,9 +70,7 @@ void ka_sigcatch(int signum) {
 }
 
 
 }
 
 
-/*
- * server keep-alive version of wait() (needed for external editor)
- */
+// server keep-alive version of wait() (needed for external editor)
 pid_t ka_wait(int *kstatus) {
        pid_t p;
 
 pid_t ka_wait(int *kstatus) {
        pid_t p;
 
@@ -93,9 +86,7 @@ pid_t ka_wait(int *kstatus) {
 }
 
 
 }
 
 
-/*
- * version of system() that uses ka_wait()
- */
+// version of system() that uses ka_wait()
 int ka_system(char *shc) {
        pid_t childpid;
        pid_t waitpid;
 int ka_system(char *shc) {
        pid_t childpid;
        pid_t waitpid;
@@ -125,11 +116,8 @@ int ka_system(char *shc) {
 }
 
 
 }
 
 
-/*
- * add a newline to the buffer...
- */
-void add_newline(struct cittext *textlist)
-{
+// add a newline to the buffer...
+void add_newline(struct cittext *textlist) {
        struct cittext *ptr;
 
        ptr = textlist;
        struct cittext *ptr;
 
        ptr = textlist;
@@ -147,9 +135,7 @@ void add_newline(struct cittext *textlist)
 }
 
 
 }
 
 
-/*
- * add a word to the buffer...
- */
+// add a word to the buffer...
 void add_word(struct cittext *textlist, char *wordbuf) {
        struct cittext *ptr;
 
 void add_word(struct cittext *textlist, char *wordbuf) {
        struct cittext *ptr;
 
@@ -170,9 +156,7 @@ void add_word(struct cittext *textlist, char *wordbuf) {
 }
 
 
 }
 
 
-/*
- * begin editing of an opened file pointed to by fp
- */
+// begin editing of an opened file pointed to by fp
 void citedit(FILE * fp) {
        int a, prev, finished, b, last_space;
        int appending = 0;
 void citedit(FILE * fp) {
        int a, prev, finished, b, last_space;
        int appending = 0;
@@ -181,7 +165,7 @@ void citedit(FILE * fp) {
        char wordbuf[MAXWORDBUF];
        int rv = 0;
 
        char wordbuf[MAXWORDBUF];
        int rv = 0;
 
-       /* first, load the text into the buffer */
+       // first, load the text into the buffer
        fseek(fp, 0L, 0);
        textlist = (struct cittext *) malloc(sizeof(struct cittext));
        textlist->next = NULL;
        fseek(fp, 0L, 0);
        textlist = (struct cittext *) malloc(sizeof(struct cittext));
        textlist->next = NULL;
@@ -211,7 +195,7 @@ void citedit(FILE * fp) {
                prev = a;
        }
 
                prev = a;
        }
 
-       /* get text */
+       // get text
        finished = 0;
        prev = (appending ? 13 : (-1));
        strcpy(wordbuf, "");
        finished = 0;
        prev = (appending ? 13 : (-1));
        strcpy(wordbuf, "");
@@ -300,7 +284,7 @@ void citedit(FILE * fp) {
                prev = a;
        } while (finished == 0);
 
                prev = a;
        } while (finished == 0);
 
-       /* write the buffer back to disk */
+       // write the buffer back to disk
        fseek(fp, 0L, 0);
        for (ptr = textlist; ptr != NULL; ptr = ptr->next) {
                fprintf(fp, "%s", ptr->text);
        fseek(fp, 0L, 0);
        for (ptr = textlist; ptr != NULL; ptr = ptr->next) {
                fprintf(fp, "%s", ptr->text);
@@ -312,7 +296,7 @@ void citedit(FILE * fp) {
                scr_printf("failed to set message buffer: %s\n", strerror(errno));
 
 
                scr_printf("failed to set message buffer: %s\n", strerror(errno));
 
 
-       /* and deallocate the memory we used */
+       // and deallocate the memory we used
        while (textlist != NULL) {
                ptr = textlist->next;
                free(textlist);
        while (textlist != NULL) {
                ptr = textlist->next;
                free(textlist);
@@ -321,9 +305,7 @@ void citedit(FILE * fp) {
 }
 
 
 }
 
 
-/*
- * Free the struct parts
- */
+// Free the struct parts
 void free_parts(struct parts *p) {
        struct parts *a_part = p;
 
 void free_parts(struct parts *p) {
        struct parts *a_part = p;
 
@@ -337,40 +319,38 @@ void free_parts(struct parts *p) {
 }
 
 
 }
 
 
-/*
- * This is a mini RFC2047 decoder.
- * It only handles strings encoded from UTF-8 as Quoted-printable.
- * We can do this "in place" because the converted string will always be smaller than the source string.
- */
+// This is a mini RFC2047 decoder.
+// It only handles strings encoded from UTF-8 as Quoted-printable.
+// We can do this "in place" because the converted string will always be smaller than the source string.
 void mini_2047_decode(char *s) {
 void mini_2047_decode(char *s) {
-       if (!s) {                                               // no null strings allowed!
+       if (!s) {               // no null strings allowed!
                return;
        }
 
                return;
        }
 
-       char *qstart = strstr(s, "=?UTF-8?Q?");                 // Must start with this string
+       char *qstart = strstr(s, "=?UTF-8?Q?"); // Must start with this string
        if (!qstart) {
                return;
        }
 
        if (!qstart) {
                return;
        }
 
-       char *qend = strstr(qstart+10, "?=");                   // Must end with this string
+       char *qend = strstr(qstart + 10, "?="); // Must end with this string
        if (!qend) {
                return;
        }
 
        if (!qend) {
                return;
        }
 
-       if (qend <= qstart) {                                   // And there must be something in between them.
+       if (qend <= qstart) {   // And there must be something in between them.
                return;
        }
 
        // The string has qualified for conversion.
 
                return;
        }
 
        // The string has qualified for conversion.
 
-       strcpy(qend, "");                                       // Strip the trailer
-       strcpy(qstart, &qstart[10]);                            // Strip the header
+       strcpy(qend, "");       // Strip the trailer
+       strcpy(qstart, &qstart[10]);    // Strip the header
 
 
-       char *r = qstart;                                       // Pointer to where in the string we're reading
-       char *w = s;                                            // Pointer to where in the string we're writing
+       char *r = qstart;       // Pointer to where in the string we're reading
+       char *w = s;            // Pointer to where in the string we're writing
 
 
-       while(*r) {                                             // Loop through the source string
-               if (r[0] == '=') {                              // "=" means read a hex character
+       while (*r) {            // Loop through the source string
+               if (r[0] == '=') {      // "=" means read a hex character
                        char ch[3];
                        ch[0] = r[1];
                        ch[1] = r[2];
                        char ch[3];
                        ch[0] = r[1];
                        ch[1] = r[2];
@@ -381,28 +361,26 @@ void mini_2047_decode(char *s) {
                        r += 3;
                        ++w;
                }
                        r += 3;
                        ++w;
                }
-               else if (r[0] == '_') {                         // "_" is a space
+               else if (r[0] == '_') { // "_" is a space
                        w[0] = ' ';
                        ++r;
                        ++w;
                }
                        w[0] = ' ';
                        ++r;
                        ++w;
                }
-               else {                                          // anything else pass through literally
+               else {          // anything else pass through literally
                        w[0] = r[0];
                        ++r;
                        ++w;
                }
        }
                        w[0] = r[0];
                        ++r;
                        ++w;
                }
        }
-       w[0] = 0;                                               // null terminate
+       w[0] = 0;               // null terminate
 }
 
 
 }
 
 
-/*
- * Read a message from the server
- */
+// Read a message from the server
 int read_message(CtdlIPC *ipc,
 int read_message(CtdlIPC *ipc,
-               long num,       /* message number */
-               int pagin,      /* 0 = normal read, 1 = read with pagination, 2 = header */
-               FILE *dest      /* Destination file, NULL for screen */
+       long num,       // message number
+       int pagin,      // 0 = normal read, 1 = read with pagination, 2 = header
+       FILE *dest      // Destination file, NULL for screen
 ) {
        char buf[SIZ];
        char now[256];
 ) {
        char buf[SIZ];
        char now[256];
@@ -410,7 +388,7 @@ int read_message(CtdlIPC *ipc,
        int fr = 0;
        int nhdr = 0;
        struct ctdlipcmessage *message = NULL;
        int fr = 0;
        int nhdr = 0;
        struct ctdlipcmessage *message = NULL;
-       int r;                  /* IPC response code */
+       int r;                  // IPC response code
        char *converted_text = NULL;
        char *lineptr;
        char *nextline;
        char *converted_text = NULL;
        char *lineptr;
        char *nextline;
@@ -452,7 +430,7 @@ int read_message(CtdlIPC *ipc,
                color(BRIGHT_CYAN);
        }
 
                color(BRIGHT_CYAN);
        }
 
-       /* View headers only */
+       // View headers only
        if (pagin == 2) {
                scr_printf("nhdr=%s\nfrom=%s\ntype=%d\nmsgn=%s\n",
                           message->nhdr ? "yes" : "no", message->author, message->type, message->msgid);
        if (pagin == 2) {
                scr_printf("nhdr=%s\nfrom=%s\ntype=%d\nmsgn=%s\n",
                           message->nhdr ? "yes" : "no", message->author, message->type, message->msgid);
@@ -485,7 +463,8 @@ int read_message(CtdlIPC *ipc,
        if (rc_display_message_numbers) {
                if (dest) {
                        fprintf(dest, "[#%s] ", message->msgid);
        if (rc_display_message_numbers) {
                if (dest) {
                        fprintf(dest, "[#%s] ", message->msgid);
-               } else {
+               }
+               else {
                        color(DIM_WHITE);
                        scr_printf("[");
                        color(BRIGHT_WHITE);
                        color(DIM_WHITE);
                        scr_printf("[");
                        color(BRIGHT_WHITE);
@@ -605,14 +584,13 @@ int read_message(CtdlIPC *ipc,
                color(BRIGHT_WHITE);
        }
 
                color(BRIGHT_WHITE);
        }
 
-       /******* end of header output, start of message text output *******/
+       // ****** end of header output, start of message text output ******
 
 
-       /*
-        * Convert HTML to plain text, formatting for the actual width
-        * of the client screen.
-        */
+       // Convert HTML to plain text, formatting for the actual width of the client screen.
        if (!strcasecmp(message->content_type, "text/html")) {
        if (!strcasecmp(message->content_type, "text/html")) {
-               converted_text = html_to_ascii(message->text, 0, screenwidth);
+               converted_text = html_to_ascii(message->text, 0, screenwidth,
+                       ((enable_color ? H2A_ANSI : 0) | (rc_sixel ? H2A_SIXEL : 0))
+               );
                if (converted_text != NULL) {
                        free(message->text);
                        message->text = converted_text;
                if (converted_text != NULL) {
                        free(message->text);
                        message->text = converted_text;
@@ -620,24 +598,24 @@ int read_message(CtdlIPC *ipc,
                }
        }
 
                }
        }
 
-       /* Text/plain is a different type */
+       // Text/plain is a different type
        if (!strcasecmp(message->content_type, "text/plain")) {
                format_type = 1;
        }
 
        if (!strcasecmp(message->content_type, "text/plain")) {
                format_type = 1;
        }
 
-       /* Render text/x-markdown as plain text */
+       // Render text/x-markdown as plain text
        if (!strcasecmp(message->content_type, "text/x-markdown")) {
                format_type = 1;
        }
 
        if (!strcasecmp(message->content_type, "text/x-markdown")) {
                format_type = 1;
        }
 
-       /* Extract URL's */
+       // Extract URL's
        static char *urlprefixes[] = {
                "http://",
                "https://",
                "ftp://"
        };
        int p = 0;
        static char *urlprefixes[] = {
                "http://",
                "https://",
                "ftp://"
        };
        int p = 0;
-       num_urls = 0;           /* Start with a clean slate */
+       num_urls = 0;           // Start with a clean slate
        for (p = 0; p < (sizeof urlprefixes / sizeof(char *)); ++p) {
                searchptr = message->text;
                while ((searchptr != NULL) && (num_urls < MAXURLS)) {
        for (p = 0; p < (sizeof urlprefixes / sizeof(char *)); ++p) {
                searchptr = message->text;
                while ((searchptr != NULL) && (num_urls < MAXURLS)) {
@@ -657,17 +635,14 @@ int read_message(CtdlIPC *ipc,
                }
        }
 
                }
        }
 
-       /*
-        * Here we go
-        */
+       // Here we go
        if (format_type == 0) {
        if (format_type == 0) {
+               // renderer for legacy Citadel format
                fr = fmout(screenwidth, NULL, message->text, dest, 1);
        }
        else {
                fr = fmout(screenwidth, NULL, message->text, dest, 1);
        }
        else {
-               /* renderer for text/plain */
-
+               // renderer for text/plain
                lineptr = message->text;
                lineptr = message->text;
-
                do {
                        nextline = strchr(lineptr, '\n');
                        if (nextline != NULL) {
                do {
                        nextline = strchr(lineptr, '\n');
                        if (nextline != NULL) {
@@ -684,7 +659,8 @@ int read_message(CtdlIPC *ipc,
                                }
                                if (dest) {
                                        fprintf(dest, "%s\n", lineptr);
                                }
                                if (dest) {
                                        fprintf(dest, "%s\n", lineptr);
-                               } else {
+                               }
+                               else {
                                        scr_printf("%s\n", lineptr);
                                }
                        }
                                        scr_printf("%s\n", lineptr);
                                }
                        }
@@ -699,24 +675,25 @@ int read_message(CtdlIPC *ipc,
        if (!final_line_is_blank) {
                if (dest) {
                        fprintf(dest, "\n");
        if (!final_line_is_blank) {
                if (dest) {
                        fprintf(dest, "\n");
-               } else {
+               }
+               else {
                        scr_printf("\n");
                        fr = sigcaught;
                }
        }
 
                        scr_printf("\n");
                        fr = sigcaught;
                }
        }
 
-       /* Enumerate any attachments */
+       // Enumerate any attachments
        if ((pagin == 1) && (message->attachments)) {
                struct parts *ptr;
 
                for (ptr = message->attachments; ptr; ptr = ptr->next) {
        if ((pagin == 1) && (message->attachments)) {
                struct parts *ptr;
 
                for (ptr = message->attachments; ptr; ptr = ptr->next) {
-                       if ((!strcasecmp(ptr->disposition, "attachment"))
-                           || (!strcasecmp(ptr->disposition, "inline"))
-                           || (!strcasecmp(ptr->disposition, ""))
-                           ) {
-                               if ((strcasecmp(ptr->number, message->mime_chosen))
-                                   && (!IsEmptyStr(ptr->mimetype))
-                                   ) {
+                       if (    (!strcasecmp(ptr->disposition, "attachment"))
+                               || (!strcasecmp(ptr->disposition, "inline"))
+                               || (!strcasecmp(ptr->disposition, ""))
+                       ) {
+                               if (    (strcasecmp(ptr->number, message->mime_chosen))
+                                       && (!IsEmptyStr(ptr->mimetype))
+                               ) {
                                        color(DIM_WHITE);
                                        scr_printf("Part ");
                                        color(BRIGHT_MAGENTA);
                                        color(DIM_WHITE);
                                        scr_printf("Part ");
                                        color(BRIGHT_MAGENTA);
@@ -735,23 +712,22 @@ int read_message(CtdlIPC *ipc,
                }
        }
 
                }
        }
 
-       /* Save the attachments info for later */
+       // Save the attachments info for later
        last_message_parts = message->attachments;
 
        last_message_parts = message->attachments;
 
-       /* Now we're done */
+       // Now we're done
        free(message->text);
        free(message);
 
        free(message->text);
        free(message);
 
-       if (pagin == 1 && !dest)
+       if (pagin == 1 && !dest) {
                color(DIM_WHITE);
                color(DIM_WHITE);
+       }
        stty_ctdl(0);
        return (fr);
 }
 
 
        stty_ctdl(0);
        return (fr);
 }
 
 
-/*
- * replace string function for the built-in editor
- */
+// replace string function for the built-in editor
 void replace_string(char *filename, long int startpos) {
        char buf[512];
        char srch_str[128];
 void replace_string(char *filename, long int startpos) {
        char buf[512];
        char srch_str[128];
@@ -796,7 +772,7 @@ void replace_string(char *filename, long int startpos) {
                        rv = fwrite((char *) buf, 128, 1, fp);
                        if (rv < 0) {
                                scr_printf("failed to replace string: %s\n", strerror(errno));
                        rv = fwrite((char *) buf, 128, 1, fp);
                        if (rv < 0) {
                                scr_printf("failed to replace string: %s\n", strerror(errno));
-                               break;  /*whoopsi! */
+                               break;          // No replacement happened; break out of the loop
                        }
                        strcpy(buf, &buf[128]);
                        wpos = ftell(fp);
                        }
                        strcpy(buf, &buf[128]);
                        wpos = ftell(fp);
@@ -815,14 +791,14 @@ void replace_string(char *filename, long int startpos) {
 
 
 // Function to begin composing a new message
 
 
 // Function to begin composing a new message
-int client_make_message(CtdlIPC * ipc,
-                       char *filename,         // temporary file name
-                       char *recipient,        // NULL if it's not mail
-                       int is_anonymous,
-                       int format_type,
-                       int mode,
-                       char *subject,          // buffer to store subject line
-                       int subject_required
+int client_make_message(CtdlIPC *ipc,
+               char *filename,         // temporary file name
+               char *recipient,        // NULL if it's not mail
+               int is_anonymous,
+               int format_type,
+               int mode,
+               char *subject,          // buffer to store subject line
+               int subject_required
 ) {
        FILE *fp;
        int a, b, e_ex_code;
 ) {
        FILE *fp;
        int a, b, e_ex_code;
@@ -845,7 +821,7 @@ int client_make_message(CtdlIPC * ipc,
        if (room_flags & QR_ANONONLY && !recipient) {
                snprintf(header, sizeof header, " ****");
        }
        if (room_flags & QR_ANONONLY && !recipient) {
                snprintf(header, sizeof header, " ****");
        }
-        else {
+       else {
                snprintf(header, sizeof header, " %s from %s", datestr, (is_anonymous ? "[anonymous]" : fullname));
                if (!IsEmptyStr(recipient)) {
                        size_t tmp = strlen(header);
                snprintf(header, sizeof header, " %s from %s", datestr, (is_anonymous ? "[anonymous]" : fullname));
                if (!IsEmptyStr(recipient)) {
                        size_t tmp = strlen(header);
@@ -921,8 +897,8 @@ ME1:        switch (mode) {
                break;
 
        case 2:
                break;
 
        case 2:
-       default:                /* allow 2+ modes */
-               e_ex_code = 1;  /* start with a failed exit code */
+       default:                // allow 2+ modes
+               e_ex_code = 1;  // start with a failed exit code
                stty_ctdl(SB_RESTORE);
                editor_pid = fork();
                cksum = file_checksum(filename);
                stty_ctdl(SB_RESTORE);
                editor_pid = fork();
                cksum = file_checksum(filename);
@@ -945,7 +921,7 @@ ME1:        switch (mode) {
                break;
        }
 
                break;
        }
 
-MECR:  if (mode >= 2) {
+      MECR:if (mode >= 2) {
                if (file_checksum(filename) == cksum) {
                        scr_printf("*** Aborted message.\n");
                        e_ex_code = 1;
                if (file_checksum(filename) == cksum) {
                        scr_printf("*** Aborted message.\n");
                        e_ex_code = 1;
@@ -957,14 +933,8 @@ MECR:      if (mode >= 2) {
        }
 
        b = keymenu("Entry command (? for options)",
        }
 
        b = keymenu("Entry command (? for options)",
-               "<A>bort|"
-               "<C>ontinue|"
-               "<S>ave message|"
-               "<P>rint formatted|"
-               "add s<U>bject|"
-               "<R>eplace string|"
-               "<H>old message"
-       );
+                   "<A>bort|"
+                   "<C>ontinue|" "<S>ave message|" "<P>rint formatted|" "add s<U>bject|" "<R>eplace string|" "<H>old message");
 
        if (b == 'a')
                goto MEABT;
 
        if (b == 'a')
                goto MEABT;
@@ -1006,20 +976,18 @@ MECR:    if (mode >= 2) {
                goto MECR;
        }
 
                goto MECR;
        }
 
-MEFIN: return (0);
+      MEFIN:return (0);
 
 
-MEABT: scr_printf("Are you sure? ");
+      MEABT:scr_printf("Are you sure? ");
        if (yesno() == 0) {
                goto ME1;
        }
        if (yesno() == 0) {
                goto ME1;
        }
-MEABT2:        unlink(filename);
+      MEABT2:unlink(filename);
        return (2);
 }
 
 
        return (2);
 }
 
 
-/*
- * Make sure there's room in msg_arr[] for at least one more.
- */
+// Make sure there's room in msg_arr[] for at least one more.
 void check_msg_arr_size(void) {
        if ((num_msgs + 1) > msg_arr_size) {
                msg_arr_size += 512;
 void check_msg_arr_size(void) {
        if ((num_msgs + 1) > msg_arr_size) {
                msg_arr_size += 512;
@@ -1028,10 +996,7 @@ void check_msg_arr_size(void) {
 }
 
 
 }
 
 
-/*
- * break_big_lines()  -  break up lines that are >1024 characters
- *                       otherwise the server will truncate
- */
+// break_big_lines()  -  break up lines that are >1024 characters, otherwise the server will truncate them.
 void break_big_lines(char *msg) {
        char *ptr;
        char *break_here;
 void break_big_lines(char *msg) {
        char *ptr;
        char *break_here;
@@ -1052,13 +1017,12 @@ void break_big_lines(char *msg) {
 }
 
 
 }
 
 
-/*
- * entmsg()  -  edit and create a message
- *              returns 0 if message was saved
- */
-int entmsg(CtdlIPC * ipc, int is_reply,        /* nonzero if this was a <R>eply command */
-          int c,               /* mode */
-          int masquerade       /* prompt for a non-default display name? */
+// entmsg()  -  edit and create a message
+//              returns 0 if message was saved
+int entmsg(CtdlIPC *ipc,
+       int is_reply,   // nonzero if this was a <R>eply command
+       int c,          // mode
+       int masquerade  // prompt for a non-default display name?
 ) {
        char buf[SIZ];
        int a, b;
 ) {
        char buf[SIZ];
        int a, b;
@@ -1069,11 +1033,13 @@ int entmsg(CtdlIPC * ipc, int is_reply, /* nonzero if this was a <R>eply command
        char subject[SIZ];
        struct ctdlipcmessage message;
        unsigned long *msgarr = NULL;
        char subject[SIZ];
        struct ctdlipcmessage message;
        unsigned long *msgarr = NULL;
-       int r;                  /* IPC response code */
+       int r;                  // IPC response code
        int subject_required = 0;
 
        int subject_required = 0;
 
+       // First, check to see if we have permission to enter a message in
+       // this room.  The server will return an error code if we can't.
        if (entmsg_ok == ENTMSG_OK_YES) {
        if (entmsg_ok == ENTMSG_OK_YES) {
-               /* no problem, go right ahead */
+               // no problem, go right ahead
        }
        else if (entmsg_ok == ENTMSG_OK_BLOG) {
                if (!is_reply) {
        }
        else if (entmsg_ok == ENTMSG_OK_BLOG) {
                if (!is_reply) {
@@ -1082,7 +1048,7 @@ int entmsg(CtdlIPC * ipc, int is_reply,   /* nonzero if this was a <R>eply command
                        scr_printf("If you want to leave a comment or reply to a comment, use the '<R>eply' command.\n");
                        scr_printf("Do you really want to create a new blog post? ");
                        if (!yesno()) {
                        scr_printf("If you want to leave a comment or reply to a comment, use the '<R>eply' command.\n");
                        scr_printf("Do you really want to create a new blog post? ");
                        if (!yesno()) {
-                               return(1);
+                               return (1);
                        }
                }
        }
                        }
                }
        }
@@ -1100,15 +1066,11 @@ int entmsg(CtdlIPC * ipc, int is_reply, /* nonzero if this was a <R>eply command
 
        strcpy(subject, "");
 
 
        strcpy(subject, "");
 
-       /*
-        * First, check to see if we have permission to enter a message in
-        * this room.  The server will return an error code if we can't.
-        */
        strcpy(message.recipient, "");
        strcpy(message.author, "");
        strcpy(message.subject, "");
        strcpy(message.references, "");
        strcpy(message.recipient, "");
        strcpy(message.author, "");
        strcpy(message.subject, "");
        strcpy(message.references, "");
-       message.text = "";      /* point to "", changes later */
+       message.text = "";      // point to "", changes later
        message.anonymous = 0;
        message.type = mode;
 
        message.anonymous = 0;
        message.type = mode;
 
@@ -1127,9 +1089,8 @@ int entmsg(CtdlIPC * ipc, int is_reply,   /* nonzero if this was a <R>eply command
                        }
                }
 
                        }
                }
 
-               /* Trim down excessively long lists of thread references.  We eliminate the
-                * second one in the list so that the thread root remains intact.
-                */
+               // Trim down excessively long lists of thread references.  We eliminate the
+               // second one in the list so that the thread root remains intact.
                int rrtok = num_tokens(reply_references, '|');
                int rrlen = strlen(reply_references);
                if (((rrtok >= 3) && (rrlen > 900)) || (rrtok > 10)) {
                int rrtok = num_tokens(reply_references, '|');
                int rrlen = strlen(reply_references);
                if (((rrtok >= 3) && (rrlen > 900)) || (rrtok > 10)) {
@@ -1137,7 +1098,8 @@ int entmsg(CtdlIPC * ipc, int is_reply,   /* nonzero if this was a <R>eply command
                }
 
                snprintf(message.references, sizeof message.references, "%s%s%s",
                }
 
                snprintf(message.references, sizeof message.references, "%s%s%s",
-                        reply_references, (IsEmptyStr(reply_references) ? "" : "|"), reply_inreplyto);
+                        reply_references, (IsEmptyStr(reply_references) ? "" : "|"), reply_inreplyto
+               );
        }
 
        r = CtdlIPCPostMessage(ipc, 0, &subject_required, &message, buf);
        }
 
        r = CtdlIPCPostMessage(ipc, 0, &subject_required, &message, buf);
@@ -1147,22 +1109,20 @@ int entmsg(CtdlIPC * ipc, int is_reply, /* nonzero if this was a <R>eply command
                return (1);
        }
 
                return (1);
        }
 
-       /* Error code 570 is special.  It means that we CAN enter a message
-        * in this room, but a recipient needs to be specified.
-        */
+       // Error code 570 is special.  It means that we CAN enter a message in this room, but a recipient needs to be specified.
        need_recp = 0;
        if (r / 10 == 57) {
                need_recp = 1;
        }
 
        need_recp = 0;
        if (r / 10 == 57) {
                need_recp = 1;
        }
 
-       /* If the user is a dumbass, tell them how to type. */
+       // If the user is a dumbass, tell them how to type.
        if ((userflags & US_EXPERT) == 0) {
                scr_printf("Entering message.  Word wrap will give you soft linebreaks.  Pressing the\n");
                scr_printf("'enter' key will give you a hard linebreak and an indent.  Press 'enter' twice\n");
                scr_printf("when finished.\n");
        }
 
        if ((userflags & US_EXPERT) == 0) {
                scr_printf("Entering message.  Word wrap will give you soft linebreaks.  Pressing the\n");
                scr_printf("'enter' key will give you a hard linebreak and an indent.  Press 'enter' twice\n");
                scr_printf("when finished.\n");
        }
 
-       /* Handle the selection of a recipient, if necessary. */
+       // Handle the selection of a recipient, if necessary.
        strcpy(buf, "");
        if (need_recp == 1) {
                if (axlevel >= AxProbU) {
        strcpy(buf, "");
        if (need_recp == 1) {
                if (axlevel >= AxProbU) {
@@ -1188,7 +1148,7 @@ int entmsg(CtdlIPC * ipc, int is_reply,   /* nonzero if this was a <R>eply command
                        message.anonymous = 1;
        }
 
                        message.anonymous = 1;
        }
 
-       /* If it's mail, we've got to check the validity of the recipient... */
+       // If it's mail, we've got to check the validity of the recipient...
        if (!IsEmptyStr(message.recipient)) {
                r = CtdlIPCPostMessage(ipc, 0, &subject_required, &message, buf);
                if (r / 100 != 2) {
        if (!IsEmptyStr(message.recipient)) {
                r = CtdlIPCPostMessage(ipc, 0, &subject_required, &message, buf);
                if (r / 100 != 2) {
@@ -1197,9 +1157,7 @@ int entmsg(CtdlIPC * ipc, int is_reply,   /* nonzero if this was a <R>eply command
                }
        }
 
                }
        }
 
-       /* Learn the number of the newest message in in the room, so we can
-        * tell upon saving whether someone else has posted too.
-        */
+       // Learn the number of the newest message in in the room, so we can tell upon saving whether someone else has posted too.
        num_msgs = 0;
        r = CtdlIPCGetMessages(ipc, LastMessages, 1, NULL, &msgarr, buf);
        if (r / 100 != 1) {
        num_msgs = 0;
        r = CtdlIPCGetMessages(ipc, LastMessages, 1, NULL, &msgarr, buf);
        if (r / 100 != 1) {
@@ -1209,14 +1167,14 @@ int entmsg(CtdlIPC * ipc, int is_reply, /* nonzero if this was a <R>eply command
                for (num_msgs = 0; msgarr[num_msgs]; num_msgs++);
        }
 
                for (num_msgs = 0; msgarr[num_msgs]; num_msgs++);
        }
 
-       /* Now compose the message... */
+       // Now compose the message...
        if (client_make_message(ipc, temp, message.recipient, message.anonymous, 0, c, message.subject, subject_required) != 0) {
                if (msgarr)
                        free(msgarr);
                return (2);
        }
 
        if (client_make_message(ipc, temp, message.recipient, message.anonymous, 0, c, message.subject, subject_required) != 0) {
                if (msgarr)
                        free(msgarr);
                return (2);
        }
 
-       /* Reopen the temp file that was created, so we can send it */
+       // Reopen the temp file that was created, so we can send it
        fp = fopen(temp, "r");
 
        if (!fp || !(message.text = load_message_from_file(fp))) {
        fp = fopen(temp, "r");
 
        if (!fp || !(message.text = load_message_from_file(fp))) {
@@ -1228,19 +1186,17 @@ int entmsg(CtdlIPC * ipc, int is_reply, /* nonzero if this was a <R>eply command
        if (fp)
                fclose(fp);
 
        if (fp)
                fclose(fp);
 
-       /* Break lines that are >1024 characters, otherwise the server
-        * will truncate them.
-        */
+       // Break lines that are >1024 characters, otherwise the server will truncate them.
        break_big_lines(message.text);
 
        break_big_lines(message.text);
 
-       /* Transmit message to the server */
+       // Transmit message to the server
        r = CtdlIPCPostMessage(ipc, 1, NULL, &message, buf);
        if (r / 100 != 4) {
                scr_printf("%s\n", buf);
                return (1);
        }
 
        r = CtdlIPCPostMessage(ipc, 1, NULL, &message, buf);
        if (r / 100 != 4) {
                scr_printf("%s\n", buf);
                return (1);
        }
 
-       /* Yes, unlink it now, so it doesn't stick around if we crash */
+       // Yes, unlink it now, so it doesn't stick around if we crash
        unlink(temp);
 
        if (num_msgs >= 1)
        unlink(temp);
 
        if (num_msgs >= 1)
@@ -1257,10 +1213,10 @@ int entmsg(CtdlIPC * ipc, int is_reply, /* nonzero if this was a <R>eply command
                for (num_msgs = 0; msgarr[num_msgs]; num_msgs++);
        }
 
                for (num_msgs = 0; msgarr[num_msgs]; num_msgs++);
        }
 
-       /* get new highest message number in room to set lrp for goto... */
+       // get new highest message number in room to set lrp for goto...
        maxmsgnum = msgarr[num_msgs - 1];
 
        maxmsgnum = msgarr[num_msgs - 1];
 
-       /* now see if anyone else has posted in here */
+       // now see if anyone else has posted in here
        b = (-1);
        for (a = 0; a < num_msgs; ++a) {
                if (msgarr[a] > highmsg) {
        b = (-1);
        for (a = 0; a < num_msgs; ++a) {
                if (msgarr[a] > highmsg) {
@@ -1272,42 +1228,36 @@ int entmsg(CtdlIPC * ipc, int is_reply, /* nonzero if this was a <R>eply command
        }
        msgarr = NULL;
 
        }
        msgarr = NULL;
 
-       /* In the Mail> room, this algorithm always counts one message
-        * higher than in public rooms, so we decrement it by one.
-        */
+       // In the Mail> room, this algorithm always counts one message higher than in public rooms, so we decrement it by one.
        if (need_recp) {
                --b;
        }
 
        if (b == 1) {
        if (need_recp) {
                --b;
        }
 
        if (b == 1) {
-               scr_printf("*** 1 additional message has been entered " "in this room by another user.\n");
+               scr_printf("*** 1 additional message has been entered in this room by another user.\n");
        }
        else if (b > 1) {
        }
        else if (b > 1) {
-               scr_printf("*** %d additional messages have been entered " "in this room by other users.\n", b);
+               scr_printf("*** %d additional messages have been entered in this room by other users.\n", b);
        }
        free(message.text);
        }
        free(message.text);
-
        return (0);
 }
 
 
        return (0);
 }
 
 
-/*
- * Do editing on a quoted file
- */
+// Do editing on a quoted file
 void process_quote(void) {
        FILE *qfile, *tfile;
        char buf[128];
        int line, qstart, qend;
 
 void process_quote(void) {
        FILE *qfile, *tfile;
        char buf[128];
        int line, qstart, qend;
 
-       // Unlink the second temp file as soon as it's opened, so it'll get
-       // deleted even if the program dies
+       // Unlink the second temp file as soon as it's opened, so it'll get deleted even if the program dies
        qfile = fopen(temp2, "r");
        unlink(temp2);
 
        qfile = fopen(temp2, "r");
        unlink(temp2);
 
-       /* Display the quotable text with line numbers added */
+       // Display the quotable text with line numbers added
        line = 0;
        if (fgets(buf, 128, qfile) == NULL) {
        line = 0;
        if (fgets(buf, 128, qfile) == NULL) {
-               /* we're skipping a line here */
+               // we're skipping a line here
        }
        while (fgets(buf, 128, qfile) != NULL) {
                scr_printf("%3d %s", ++line, buf);
        }
        while (fgets(buf, 128, qfile) != NULL) {
                scr_printf("%3d %s", ++line, buf);
@@ -1319,7 +1269,7 @@ void process_quote(void) {
        rewind(qfile);
        line = 0;
        if (fgets(buf, 128, qfile) == NULL) {
        rewind(qfile);
        line = 0;
        if (fgets(buf, 128, qfile) == NULL) {
-               /* we're skipping a line here */
+               // we're skipping a line here
        }
        tfile = fopen(temp, "w");
        while (fgets(buf, 128, qfile) != NULL) {
        }
        tfile = fopen(temp, "w");
        while (fgets(buf, 128, qfile) != NULL) {
@@ -1334,9 +1284,7 @@ void process_quote(void) {
 }
 
 
 }
 
 
-/*
- * List the URLs which were embedded in the previous message
- */
+// List the URLs which were embedded in the previous message
 void list_urls(CtdlIPC * ipc) {
        int i;
        char cmd[SIZ];
 void list_urls(CtdlIPC * ipc) {
        int i;
        char cmd[SIZ];
@@ -1361,9 +1309,7 @@ void list_urls(CtdlIPC * ipc) {
 }
 
 
 }
 
 
-/*
- * Run image viewer in background
- */
+// Run image viewer in background
 int do_image_view(const char *filename) {
        char cmd[SIZ];
        pid_t childpid;
 int do_image_view(const char *filename) {
        char cmd[SIZ];
        pid_t childpid;
@@ -1422,19 +1368,18 @@ int do_image_view(const char *filename) {
 }
 
 
 }
 
 
-/*
- * View an image attached to a message
- */
+// View an image attached to a message
 void image_view(CtdlIPC * ipc, unsigned long msg) {
        struct parts *ptr = last_message_parts;
        char part[SIZ];
        int found = 0;
 
 void image_view(CtdlIPC * ipc, unsigned long msg) {
        struct parts *ptr = last_message_parts;
        char part[SIZ];
        int found = 0;
 
-       /* Run through available parts */
+       // Run through available parts
        for (ptr = last_message_parts; ptr; ptr = ptr->next) {
        for (ptr = last_message_parts; ptr; ptr = ptr->next) {
-               if ((!strcasecmp(ptr->disposition, "attachment")
-                    || !strcasecmp(ptr->disposition, "inline"))
-                   && !strncmp(ptr->mimetype, "image/", 6)) {
+               if (    (!strcasecmp(ptr->disposition, "attachment")
+                       || !strcasecmp(ptr->disposition, "inline"))
+                       && !strncmp(ptr->mimetype, "image/", 6)
+               ) {
                        found++;
                        if (found == 1) {
                                strcpy(part, ptr->number);
                        found++;
                        if (found == 1) {
                                strcpy(part, ptr->number);
@@ -1443,8 +1388,9 @@ void image_view(CtdlIPC * ipc, unsigned long msg) {
        }
 
        while (found > 0) {
        }
 
        while (found > 0) {
-               if (found > 1)
+               if (found > 1) {
                        strprompt("View which part (0 when done)", part, SIZ - 1);
                        strprompt("View which part (0 when done)", part, SIZ - 1);
+               }
                found = -found;
                for (ptr = last_message_parts; ptr; ptr = ptr->next) {
                        if ((!strcasecmp(ptr->disposition, "attachment")
                found = -found;
                for (ptr = last_message_parts; ptr; ptr = ptr->next) {
                        if ((!strcasecmp(ptr->disposition, "attachment")
@@ -1453,15 +1399,16 @@ void image_view(CtdlIPC * ipc, unsigned long msg) {
                            && !strcasecmp(ptr->number, part)) {
                                char tmp[PATH_MAX];
                                char buf[SIZ];
                            && !strcasecmp(ptr->number, part)) {
                                char tmp[PATH_MAX];
                                char buf[SIZ];
-                               void *file = NULL;      /* The downloaded file */
+                               void *file = NULL;      // The downloaded file
                                int r;
 
                                int r;
 
-                               /* view image */
+                               // view image
                                found = -found;
                                r = CtdlIPCAttachmentDownload(ipc, msg, ptr->number, &file, progress, buf);
                                if (r / 100 != 2) {
                                        scr_printf("%s\n", buf);
                                found = -found;
                                r = CtdlIPCAttachmentDownload(ipc, msg, ptr->number, &file, progress, buf);
                                if (r / 100 != 2) {
                                        scr_printf("%s\n", buf);
-                               } else {
+                               }
+                               else {
                                        size_t len;
 
                                        len = (size_t) extract_long(buf, 0);
                                        size_t len;
 
                                        len = (size_t) extract_long(buf, 0);
@@ -1482,13 +1429,11 @@ void image_view(CtdlIPC * ipc, unsigned long msg) {
 }
 
 
 }
 
 
-/*
- * Read the messages in the current room
- */
+// Read the messages in the current room
 void readmsgs(CtdlIPC *ipc,
 void readmsgs(CtdlIPC *ipc,
-       enum MessageList c,             // see listing in citadel_ipc.h
+       enum MessageList c,     // see listing in citadel_ipc.h
        enum MessageDirection rdir,     // 1=Forward (-1)=Reverse
        enum MessageDirection rdir,     // 1=Forward (-1)=Reverse
-       int q                           // Number of msgs to read (if c==3)
+       int q           // Number of msgs to read (if c==3)
 ) {
        int a, e, f, g, start;
        int savedpos;
 ) {
        int a, e, f, g, start;
        int savedpos;
@@ -1502,11 +1447,11 @@ void readmsgs(CtdlIPC *ipc,
        char targ[ROOMNAMELEN];
        char filename[PATH_MAX];
        char save_to[PATH_MAX];
        char targ[ROOMNAMELEN];
        char filename[PATH_MAX];
        char save_to[PATH_MAX];
-       void *attachment = NULL;        /* Downloaded attachment */
-       FILE *dest = NULL;      /* Alternate destination other than screen */
-       int r;                  /* IPC response code */
-       static int att_seq = 0; /* Attachment download sequence number */
-       int rv = 0;             /* silence the stupid warn_unused_result warnings */
+       void *attachment = NULL;        // Downloaded attachment
+       FILE *dest = NULL;              // Alternate destination other than screen
+       int r;                          // IPC response code
+       static int att_seq = 0;         // Attachment download sequence number
+       int rv = 0;                     // silence the stupid warn_unused_result warnings
 
        CtdlMakeTempFileName(prtfile, sizeof prtfile);
 
 
        CtdlMakeTempFileName(prtfile, sizeof prtfile);
 
@@ -1535,7 +1480,7 @@ void readmsgs(CtdlIPC *ipc,
                return;
        }
 
                return;
        }
 
-       /* this loop cycles through each message... */
+       // this loop cycles through each message...
        start = ((rdir == 1) ? 0 : (num_msgs - 1));
        for (a = start; ((a < num_msgs) && (a >= 0)); a = a + rdir) {
                while (msg_arr[a] == 0L) {
        start = ((rdir == 1) ? 0 : (num_msgs - 1));
        for (a = start; ((a < num_msgs) && (a >= 0)); a = a + rdir) {
                while (msg_arr[a] == 0L) {
@@ -1548,26 +1493,26 @@ void readmsgs(CtdlIPC *ipc,
                         && (quotflag == 0)
                         && (userflags & US_PAGINATOR)) ? 1 : 0;
 
                         && (quotflag == 0)
                         && (userflags & US_PAGINATOR)) ? 1 : 0;
 
-               /* If we're doing a quote, set the screenwidth to 72 */
+               // If we're doing a quote, set the screenwidth to 72
                if (quotflag) {
                        hold_sw = screenwidth;
                        screenwidth = 72;
                }
 
                if (quotflag) {
                        hold_sw = screenwidth;
                        screenwidth = 72;
                }
 
-               /* If printing or archiving, set the screenwidth to 80 */
+               // If printing or archiving, set the screenwidth to 80
                if (arcflag) {
                        hold_sw = screenwidth;
                        screenwidth = 80;
                }
 
                if (arcflag) {
                        hold_sw = screenwidth;
                        screenwidth = 80;
                }
 
-               /* clear parts list */
+               // clear parts list
                free_parts(last_message_parts);
                last_message_parts = NULL;
 
                free_parts(last_message_parts);
                last_message_parts = NULL;
 
-               /* now read the message... */
+               // now read the message...
                e = read_message(ipc, msg_arr[a], pagin, dest);
 
                e = read_message(ipc, msg_arr[a], pagin, dest);
 
-               /* ...and set the screenwidth back if we have to */
+               // ...and set the screenwidth back if we have to
                if ((quotflag) || (arcflag)) {
                        screenwidth = hold_sw;
                }
                if ((quotflag) || (arcflag)) {
                        screenwidth = hold_sw;
                }
@@ -1590,7 +1535,7 @@ RMSGREAD:
                        f = fork();
                        if (f == 0) {
                                if (freopen(prtfile, "r", stdin) == NULL) {
                        f = fork();
                        if (f == 0) {
                                if (freopen(prtfile, "r", stdin) == NULL) {
-                                       /* we probably should handle the error condition here */
+                                       // we probably should handle the error condition here
                                }
                                stty_ctdl(SB_RESTORE);
                                ka_system(printcmd);
                                }
                                stty_ctdl(SB_RESTORE);
                                ka_system(printcmd);
@@ -1629,38 +1574,47 @@ RMSGREAD:
                        do {
                                e = (inkey() & 127);
                                e = tolower(e);
                        do {
                                e = (inkey() & 127);
                                e = tolower(e);
-/* return key same as <N> */ if (e == 10)
+
+                                if (e == 10) {                                 // return key same as <N>
                                        e = 'n';
                                        e = 'n';
-/* space key same as <N> */ if (e == 32)
+                               }
+
+                                if (e == 32) {                                 // space key same as <N>
                                        e = 'n';
                                        e = 'n';
-/* del/move for aides only */
-                               if ((!is_room_aide)
-                                   && ((room_flags & QR_MAILBOX) == 0)
-                                   && ((room_flags2 & QR2_COLLABDEL) == 0)
-                                   ) {
-                                       if ((e == 'd') || (e == 'm'))
+                               }
+
+                               if (    (!is_room_aide)                         // delete/move are available only to admins
+                                       && ((room_flags & QR_MAILBOX) == 0)
+                                       && ((room_flags2 & QR2_COLLABDEL) == 0)
+                               ) {
+                                       if ((e == 'd') || (e == 'm')) {
                                                e = 0;
                                                e = 0;
+                                       }
                                }
                                }
-/* print only if available */
-                               if ((e == 'p') && (IsEmptyStr(printcmd)))
+
+                               if ((e == 'p') && (IsEmptyStr(printcmd))) {             // print, if available
                                        e = 0;
                                        e = 0;
-/* can't file if not allowed */
-                               if ((e == 'f')
-                                   && (rc_allow_attachments == 0))
+                               }
+
+                               if ((e == 'f') && (rc_allow_attachments == 0)) {        // file attachments, if available
                                        e = 0;
                                        e = 0;
-/* link only if browser avail*/
-                               if ((e == 'u')
-                                   && (IsEmptyStr(rc_url_cmd)))
+                               }
+
+                               if ((e == 'u') && (IsEmptyStr(rc_url_cmd))) {           // display urls, if a browser is available
                                        e = 0;
                                        e = 0;
-                               if ((e == 'i')
-                                   && (IsEmptyStr(imagecmd) || !has_images))
+                               }
+
+                               if ((e == 'i') && (IsEmptyStr(imagecmd) || !has_images)) {      // display images, if available
                                        e = 0;
                                        e = 0;
+                               }
+
                        } while ((e != 'a') && (e != 'n') && (e != 's')
                                 && (e != 'd') && (e != 'm') && (e != 'p')
                                 && (e != 'q') && (e != 'b') && (e != 'h')
                                 && (e != 'r') && (e != 'f') && (e != '?')
                                 && (e != 'u') && (e != 'c') && (e != 'y')
                        } while ((e != 'a') && (e != 'n') && (e != 's')
                                 && (e != 'd') && (e != 'm') && (e != 'p')
                                 && (e != 'q') && (e != 'b') && (e != 'h')
                                 && (e != 'r') && (e != 'f') && (e != '?')
                                 && (e != 'u') && (e != 'c') && (e != 'y')
-                                && (e != 'i') && (e != 'o'));
+                                && (e != 'i') && (e != 'o')
+                       );
                        switch (e) {
                        case 's':
                                scr_printf("Stop");
                        switch (e) {
                        case 's':
                                scr_printf("Stop");
@@ -1718,7 +1672,7 @@ RMSGREAD:
                        else
                                scr_printf("\n");
                }
                        else
                                scr_printf("\n");
                }
-             DONE_QUOTING:switch (e) {
+DONE_QUOTING:  switch (e) {
                case '?':
                        scr_printf("Options available here:\n"
                                   " ?  Help (prints this message)\n"
                case '?':
                        scr_printf("Options available here:\n"
                                   " ?  Help (prints this message)\n"
@@ -1780,8 +1734,9 @@ RMSGREAD:
                        else {
                                goto RMSGREAD;
                        }
                        else {
                                goto RMSGREAD;
                        }
-                       if (r / 100 != 2)       /* r will be init'ed, FIXME */
-                               goto RMSGREAD;  /* the logic here sucks */
+                       if (r / 100 != 2) {     // r will be initialized.  The logic here sucks.
+                               goto RMSGREAD;
+                       }
                        break;
                case 'o':
                case 'f':
                        break;
                case 'o':
                case 'f':
@@ -1792,23 +1747,21 @@ RMSGREAD:
                        }
                        else {
                                extract_token(filename, cmd, 2, '|', sizeof filename);
                        }
                        else {
                                extract_token(filename, cmd, 2, '|', sizeof filename);
-                               /*
-                                * Part 1 won't have a filename; use the
-                                * subject of the message instead. IO
-                                */
+                               // Part 1 won't have a filename; use the subject of the message instead. --IO
                                if (IsEmptyStr(filename)) {
                                        strcpy(filename, reply_subject);
                                }
                                if (IsEmptyStr(filename)) {
                                        strcpy(filename, reply_subject);
                                }
-                               if (e == 'o') { /* open attachment */
+                               if (e == 'o') {         // open attachment
                                        mkdir(tempdir, 0700);
                                        snprintf(save_to, sizeof save_to, "%s/%04x.%s", tempdir, ++att_seq, filename);
                                        save_buffer(attachment, extract_unsigned_long(cmd, 0), save_to);
                                        snprintf(cmd, sizeof cmd, rc_open_cmd, save_to);
                                        rv = system(cmd);
                                        mkdir(tempdir, 0700);
                                        snprintf(save_to, sizeof save_to, "%s/%04x.%s", tempdir, ++att_seq, filename);
                                        save_buffer(attachment, extract_unsigned_long(cmd, 0), save_to);
                                        snprintf(cmd, sizeof cmd, rc_open_cmd, save_to);
                                        rv = system(cmd);
-                                       if (rv != 0)
+                                       if (rv != 0) {
                                                scr_printf("failed to save %s Reason %d\n", cmd, rv);
                                                scr_printf("failed to save %s Reason %d\n", cmd, rv);
+                                       }
                                }
                                }
-                               else {  /* save attachment to disk */
+                               else {  // save attachment to disk
                                        destination_directory(save_to, filename);
                                        save_buffer(attachment, extract_unsigned_long(cmd, 0), save_to);
                                }
                                        destination_directory(save_to, filename);
                                        save_buffer(attachment, extract_unsigned_long(cmd, 0), save_to);
                                }
@@ -1875,9 +1828,7 @@ RMSGREAD:
 }                              /* end read routine */
 
 
 }                              /* end read routine */
 
 
-/*
- * View and edit a system message
- */
+// View and edit a system message
 void edit_system_message(CtdlIPC * ipc, char *which_message) {
        char desc[SIZ];
        char read_cmd[SIZ];
 void edit_system_message(CtdlIPC * ipc, char *which_message) {
        char desc[SIZ];
        char read_cmd[SIZ];
@@ -1890,10 +1841,8 @@ void edit_system_message(CtdlIPC * ipc, char *which_message) {
 }
 
 
 }
 
 
-/*
- * Loads the contents of a file into memory.  Caller must free the allocated memory.
- */
-char *load_message_from_file(FILE * src) {
+// Loads the contents of a file into memory.  Caller must free the allocated memory.
+char *load_message_from_file(FILE *src) {
        size_t i;
        size_t got = 0;
        char *dest = NULL;
        size_t i;
        size_t got = 0;
        char *dest = NULL;
@@ -1903,8 +1852,9 @@ char *load_message_from_file(FILE * src) {
        rewind(src);
 
        dest = (char *) calloc(1, i + 1);
        rewind(src);
 
        dest = (char *) calloc(1, i + 1);
-       if (!dest)
+       if (!dest) {
                return NULL;
                return NULL;
+       }
 
        while (got < i) {
                size_t g;
 
        while (got < i) {
                size_t g;
@@ -1912,10 +1862,10 @@ char *load_message_from_file(FILE * src) {
                g = fread(dest + got, 1, i - got, src);
                got += g;
                if (g < i - got) {
                g = fread(dest + got, 1, i - got, src);
                got += g;
                if (g < i - got) {
-                       /* Interrupted system call, keep going */
-                       if (errno == EINTR)
-                               continue;
-                       /* At this point we have either EOF or error */
+                       if (errno == EINTR) {
+                               continue;               // Interrupted system call, keep going
+                       }
+                       // At this point we have either EOF or error
                        i = got;
                        break;
                }
                        i = got;
                        break;
                }