fix dlen
[citadel.git] / textclient / citadel.c
index 3832838ca5a48a25061abd2c4381ed8dd647185b..ba1be6cb3ce5ce958e1fdc893543fbba34ef943a 100644 (file)
@@ -1,16 +1,8 @@
-/*
- * Main source module for the client program.
- *
- * Copyright (c) 1987-2018 by the citadel.org team
- *
- * This program is open source software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public 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.
- */
+// Main source module for the client program.
+//
+// Copyright (c) 1987-2022 by the citadel.org team
+//
+// This program is open source software.  Use, duplication, or disclosure is subject to the GNU General Public License version 3.
 
 #include "textclient.h"
 
@@ -40,8 +32,6 @@ int uglistsize = 0;
 char is_mail = 0;              /* nonzero when we're in a mail room */
 char axlevel = AxDeleted;      /* access level */
 char is_room_aide = 0;         /* boolean flag, 1 if room admin */
-int timescalled;
-int posted;
 unsigned userflags;
 long usernum = 0L;             /* user number */
 time_t lastcall = 0L;          /* Date/time of previous login */
@@ -68,52 +58,39 @@ CtdlIPC *ipc_for_signal_handlers;   /* KLUDGE cover your eyes */
 int enable_syslog = 0;
 
 
-/*
- * here is our 'clean up gracefully and exit' routine
- */
-void ctdl_logoff(char *file, int line, CtdlIPC * ipc, int code)
-{
+// Here is our 'clean up gracefully and exit' routine
+void ctdl_logoff(char *file, int line, CtdlIPC * ipc, int code) {
        int lp;
 
        if (editor_pid > 0) {   /* kill the editor if it's running */
                kill(editor_pid, SIGHUP);
        }
 
-       /* Free the ungoto list */
+       // Free the ungoto list
        for (lp = 0; lp < uglistsize; lp++) {
                free(uglist[lp]);
        }
 
-/* Shut down the server connection ... but not if the logoff code is 3,
- * because that means we're exiting because we already lost the server.
- */
+       // Shut down the server connection ... but not if the logoff code is 3,
+       // because that means we're exiting because we already lost the server.
        if (code != 3) {
                CtdlIPCQuit(ipc);
        }
 
-/*
- * now clean up various things
- */
+       // now clean up various things
        unlink(temp);
        unlink(temp2);
        nukedir(tempdir);
 
-       /* Violently kill off any child processes if Citadel is
-        * the login shell. 
-        */
+       // Violently kill off any child processes if Citadel is the login shell. 
        if (getppid() == 1) {
                kill(0 - getpgrp(), SIGTERM);
                sleep(1);
                kill(0 - getpgrp(), SIGKILL);
        }
-       color(ORIGINAL_PAIR);   /* Restore the old color settings */
-       stty_ctdl(SB_RESTORE);  /* return the old terminal settings */
-       /* 
-        * uncomment the following if you need to know why Citadel exited
-        printf("*** Exit code %d at %s:%d\n", code, file, line);
-        sleep(2);
-        */
-       exit(code);             /* exit with the proper exit code */
+       color(ORIGINAL_PAIR);   // Restore the old color settings
+       stty_ctdl(SB_RESTORE);  // return the old terminal settings
+       exit(code);             // exit with the proper exit code
 }
 
 
@@ -121,8 +98,7 @@ void ctdl_logoff(char *file, int line, CtdlIPC * ipc, int code)
 /*
  * signal catching function for hangups...
  */
-void dropcarr(int signum)
-{
+void dropcarr(int signum) {
        logoff(NULL, 3);        /* No IPC when server's already gone! */
 }
 
@@ -132,8 +108,7 @@ void dropcarr(int signum)
  * catch SIGCONT to reset terminal modes when were are put back into the
  * foreground.
  */
-void catch_sigcont(int signum)
-{
+void catch_sigcont(int signum) {
        stty_ctdl(SB_LAST);
        signal(SIGCONT, catch_sigcont);
 }
@@ -142,8 +117,7 @@ void catch_sigcont(int signum)
 /* general purpose routines */
 
 /* display a file */
-void formout(CtdlIPC * ipc, char *name)
-{
+void formout(CtdlIPC * ipc, char *name) {
        int r;                  /* IPC return code */
        char buf[SIZ];
        char *text = NULL;
@@ -160,13 +134,12 @@ void formout(CtdlIPC * ipc, char *name)
 }
 
 
-void userlist(CtdlIPC * ipc, char *patn)
-{
+void userlist(CtdlIPC * ipc, char *patn) {
        char buf[SIZ];
-       char fl[SIZ];
+       char fl[64];            // a buffer this small will prevent it overrunning the column
        struct tm tmbuf;
        time_t lc;
-       int r;                  /* IPC response code */
+       int r;                  // IPC response code
        char *listing = NULL;
 
        r = CtdlIPCUserListing(ipc, patn, &listing, buf);
@@ -175,8 +148,8 @@ void userlist(CtdlIPC * ipc, char *patn)
                return;
        }
 
-       scr_printf("       User Name           Num  L Last Visit Logins Messages\n");
-       scr_printf("------------------------- ----- - ---------- ------ --------\n");
+       scr_printf("User Name                                                        Last Login\n");
+       scr_printf("---------------------------------------------------------------- ----------\n");
        if (listing != NULL)
                while (!IsEmptyStr(listing)) {
                        extract_token(buf, listing, 0, '\n', sizeof buf);
@@ -185,12 +158,10 @@ void userlist(CtdlIPC * ipc, char *patn)
                        if (sigcaught == 0) {
                                extract_token(fl, buf, 0, '|', sizeof fl);
                                if (pattern(fl, patn) >= 0) {
-                                       scr_printf("%-25s ", fl);
-                                       scr_printf("%5ld %d ", extract_long(buf, 2), extract_int(buf, 1));
+                                       scr_printf("%-64s ", fl);
                                        lc = extract_long(buf, 3);
                                        localtime_r(&lc, &tmbuf);
-                                       scr_printf("%02d/%02d/%04d ", (tmbuf.tm_mon + 1), tmbuf.tm_mday, (tmbuf.tm_year + 1900));
-                                       scr_printf("%6ld %8ld\n", extract_long(buf, 4), extract_long(buf, 5));
+                                       scr_printf("%02d/%02d/%04d\n", (tmbuf.tm_mon + 1), tmbuf.tm_mday, (tmbuf.tm_year + 1900));
                                }
 
                        }
@@ -200,28 +171,20 @@ void userlist(CtdlIPC * ipc, char *patn)
 }
 
 
-/*
- * grab assorted info about the user...
- */
-void load_user_info(char *params)
-{
+// grab assorted info about the user...
+void load_user_info(char *params) {
        extract_token(fullname, params, 0, '|', sizeof fullname);
        axlevel = extract_int(params, 1);
-       timescalled = extract_int(params, 2);
-       posted = extract_int(params, 3);
        userflags = extract_int(params, 4);
        usernum = extract_long(params, 5);
        lastcall = extract_long(params, 6);
 }
 
 
-/*
- * Remove a room from the march list.  'floornum' is ignored unless
- * 'roomname' is set to _FLOOR_, in which case all rooms on the requested
- * floor will be removed from the march list.
- */
-void remove_march(char *roomname, int floornum)
-{
+// Remove a room from the march list.  'floornum' is ignored unless
+// 'roomname' is set to _FLOOR_, in which case all rooms on the requested
+// floor will be removed from the march list.
+void remove_march(char *roomname, int floornum) {
        struct march *mptr, *mptr2;
 
        if (marchptr == NULL)
@@ -244,19 +207,17 @@ void remove_march(char *roomname, int floornum)
                        mptr2->next = mptr->next;
                        free(mptr);
                        mptr = mptr2;
-               } else {
+               }
+               else {
                        mptr2 = mptr;
                }
        }
 }
 
 
-/*
- * Locate the room on the march list which we most want to go to.  Each room
- * is measured given a "weight" of preference based on various factors.
- */
-char *pop_march(int desired_floor, struct march *_march)
-{
+// Locate the room on the march list which we most want to go to.  Each room
+// is measured given a "weight" of preference based on various factors.
+char *pop_march(int desired_floor, struct march *_march) {
        static char TheRoom[ROOMNAMELEN];
        int TheWeight = 0;
        int weight;
@@ -285,14 +246,10 @@ char *pop_march(int desired_floor, struct march *_march)
 }
 
 
-/*
- * jump directly to a room
- */
-void dotgoto(CtdlIPC * ipc, char *towhere, int display_name, int fromungoto)
-{
+// jump directly to a room
+void dotgoto(CtdlIPC * ipc, char *towhere, int display_name, int fromungoto) {
        char aaa[SIZ], bbb[SIZ];
        static long ls = 0L;
-       int newmailcount = 0;
        int partial_match, best_match;
        char from_floor;
        int ugpos = uglistsize;
@@ -311,7 +268,8 @@ void dotgoto(CtdlIPC * ipc, char *towhere, int display_name, int fromungoto)
                                uglistlsn[lp] = uglistlsn[lp + 1];
                        }
                        ugpos--;
-               } else {
+               }
+               else {
                        uglistsize++;
                }
 
@@ -378,23 +336,23 @@ void dotgoto(CtdlIPC * ipc, char *towhere, int display_name, int fromungoto)
                scr_printf("%s\n", aaa);
                return;
        }
-       safestrncpy(room_name, room->RRname, ROOMNAMELEN);
+       strncpy(room_name, room->RRname, ROOMNAMELEN);
        room_flags = room->RRflags;
        room_flags2 = room->RRflags2;
        from_floor = curr_floor;
        curr_floor = room->RRfloor;
 
-       /* Determine, based on the room's default view, whether an <E>nter message
-        * command will be valid here.
-        */
+       // Determine, based on the room's default view, whether an <E>nter message command will be valid here.
        switch (room->RRdefaultview) {
        case VIEW_BBS:
        case VIEW_MAILBOX:
+               entmsg_ok = ENTMSG_OK_YES;
+               break;
        case VIEW_BLOG:
-               entmsg_ok = 1;
+               entmsg_ok = ENTMSG_OK_BLOG;
                break;
        default:
-               entmsg_ok = 0;
+               entmsg_ok = ENTMSG_OK_NO;
                break;
        }
 
@@ -434,50 +392,48 @@ void dotgoto(CtdlIPC * ipc, char *towhere, int display_name, int fromungoto)
        if (room->RRinfoupdated > 0)
                readinfo(ipc);
 
-       /* check for newly arrived mail if we can */
-       newmailcount = room->RRnewmail;
-       if (newmailcount > 0) {
-               color(BRIGHT_RED);
-               if (newmailcount == 1) {
-                       scr_printf("*** A new mail message has arrived.\n");
-               } else {
-                       scr_printf("*** %d new mail messages have arrived.\n", newmailcount);
-               }
-               color(DIM_WHITE);
-               if (!IsEmptyStr(rc_gotmail_cmd)) {
-                       rv = system(rc_gotmail_cmd);
-                       if (rv)
-                               scr_printf("*** failed to check for mail calling %s Reason %d.\n", rc_gotmail_cmd, rv);
-               }
-       }
+       /* check for newly arrived mail if we can   FIXME use BIFF command for this
+          if (newmailcount > 0) {
+          color(BRIGHT_RED);
+          if (newmailcount == 1) {
+          scr_printf("*** A new mail message has arrived.\n");
+          }
+          else {
+          scr_printf("*** %d new mail messages have arrived.\n", newmailcount);
+          }
+          color(DIM_WHITE);
+          if (!IsEmptyStr(rc_gotmail_cmd)) {
+          rv = system(rc_gotmail_cmd);
+          if (rv)
+          scr_printf("*** failed to check for mail calling %s Reason %d.\n", rc_gotmail_cmd, rv);
+          }
+          }
+        */
+
        free(room);
 
        if (screenwidth > 5)
-               snprintf(&status_line[1], screenwidth - 1, "%s  |  %s  |  %s  |  %s  |  %d new mail  |",
-                        (secure ? "Encrypted" : "Unencrypted"),
-                        ipc->ServInfo.humannode, ipc->ServInfo.site_location, room_name, newmailcount);
+               snprintf(&status_line[1], screenwidth - 1, "%s  |  %s  |  %s  |  %s  |  %d new mail  |", (secure ? "Encrypted" : "Unencrypted"), ipc->ServInfo.humannode, ipc->ServInfo.site_location, room_name, 0);   // FIXME use BIFF
 }
 
+
 /* Goto next room having unread messages.
  * We want to skip over rooms that the user has already been to, and take the
  * user back to the lobby when done.  The room we end up in is placed in
  * newroom - which is set to 0 (the lobby) initially.
  */
-void gotonext(CtdlIPC * ipc)
-{
+void gotonext(CtdlIPC * ipc) {
        char buf[SIZ];
        struct march *mptr, *mptr2;
        char next_room[ROOMNAMELEN];
 
-       /* Check to see if the march-mode list is already allocated.
-        * If it is, pop the first room off the list and go there.
-        */
+       // Check to see if the march-mode list is already allocated.
+       // If it is, pop the first room off the list and go there.
        if (marchptr == NULL) {
                CtdlIPCKnownRooms(ipc, SubscribedRoomsWithNewMessages, AllFloors, &marchptr, buf);
 
-/* add _BASEROOM_ to the end of the march list, so the user will end up
- * in the system base room (usually the Lobby>) at the end of the loop
- */
+               // Add _BASEROOM_ to the end of the march list, so the user will end up
+               // in the system base room (usually the Lobby>) at the end of the loop.
                mptr = (struct march *) malloc(sizeof(struct march));
                mptr->next = NULL;
                mptr->march_order = 0;
@@ -485,37 +441,35 @@ void gotonext(CtdlIPC * ipc)
                strcpy(mptr->march_name, "_BASEROOM_");
                if (marchptr == NULL) {
                        marchptr = mptr;
-               } else {
+               }
+               else {
                        mptr2 = marchptr;
                        while (mptr2->next != NULL)
                                mptr2 = mptr2->next;
                        mptr2->next = mptr;
                }
-/*
- * ...and remove the room we're currently in, so a <G>oto doesn't make us
- * walk around in circles
- */
+
+               // ...and remove the room we're currently in, so a <G>oto doesn't make us walk around in circles
                remove_march(room_name, 0);
        }
        if (marchptr != NULL) {
                strcpy(next_room, pop_march(curr_floor, marchptr));
-       } else {
+       }
+       else {
                strcpy(next_room, "_BASEROOM_");
        }
        remove_march(next_room, 0);
        dotgoto(ipc, next_room, 1, 0);
 }
 
-/*
- * forget all rooms on a given floor
- */
-void forget_all_rooms_on(CtdlIPC * ipc, int ffloor)
-{
+
+// forget all rooms on a given floor
+void forget_all_rooms_on(CtdlIPC * ipc, int ffloor) {
        char buf[SIZ];
        struct march *flist = NULL;
        struct march *fptr = NULL;
        struct ctdlipcroom *room = NULL;
-       int r;                  /* IPC response code */
+       int r;                  // IPC response code
 
        scr_printf("Forgetting all rooms on %s...\n", &floorlist[ffloor][0]);
        remove_march("_FLOOR_", ffloor);
@@ -542,11 +496,8 @@ void forget_all_rooms_on(CtdlIPC * ipc, int ffloor)
 }
 
 
-/*
- * routine called by gotofloor() to move to a new room on a new floor
- */
-void gf_toroom(CtdlIPC * ipc, char *towhere, int mode)
-{
+// routine called by gotofloor() to move to a new room on a new floor
+void gf_toroom(CtdlIPC * ipc, char *towhere, int mode) {
        int floor_being_left;
 
        floor_being_left = curr_floor;
@@ -554,10 +505,12 @@ void gf_toroom(CtdlIPC * ipc, char *towhere, int mode)
        if (mode == GF_GOTO) {  /* <;G>oto mode */
                updatels(ipc);
                dotgoto(ipc, towhere, 1, 0);
-       } else if (mode == GF_SKIP) {   /* <;S>kip mode */
+       }
+       else if (mode == GF_SKIP) {     /* <;S>kip mode */
                dotgoto(ipc, towhere, 1, 0);
                remove_march("_FLOOR_", floor_being_left);
-       } else if (mode == GF_ZAP) {    /* <;Z>ap mode */
+       }
+       else if (mode == GF_ZAP) {      /* <;Z>ap mode */
                dotgoto(ipc, towhere, 1, 0);
                remove_march("_FLOOR_", floor_being_left);
                forget_all_rooms_on(ipc, floor_being_left);
@@ -565,11 +518,8 @@ void gf_toroom(CtdlIPC * ipc, char *towhere, int mode)
 }
 
 
-/*
- * go to a new floor
- */
-void gotofloor(CtdlIPC * ipc, char *towhere, int mode)
-{
+// go to a new floor
+void gotofloor(CtdlIPC * ipc, char *towhere, int mode) {
        int a, tofloor;
        int r;                  /* IPC response code */
        struct march *mptr;
@@ -646,16 +596,17 @@ void gotofloor(CtdlIPC * ipc, char *towhere, int mode)
        }
        if (!IsEmptyStr(targ)) {
                gf_toroom(ipc, targ, mode);
-       } else {
+       }
+       else {
                scr_printf("There are no rooms on '%s'.\n", &floorlist[tofloor][0]);
        }
 }
 
+
 /*
  * Indexing mechanism for a room list, called by gotoroomstep()
  */
-void room_tree_list_query(struct ctdlroomlisting *rp, char *findrmname, int findrmslot, char *rmname, int *rmslot, int *rmtotal)
-{
+void room_tree_list_query(struct ctdlroomlisting *rp, char *findrmname, int findrmslot, char *rmname, int *rmslot, int *rmtotal) {
        char roomname[ROOMNAMELEN];
        static int cur_rmslot = 0;
 
@@ -699,8 +650,7 @@ void room_tree_list_query(struct ctdlroomlisting *rp, char *findrmname, int find
 /*
  * step through rooms on current floor
  */
-void gotoroomstep(CtdlIPC * ipc, int direction, int mode)
-{
+void gotoroomstep(CtdlIPC * ipc, int direction, int mode) {
        struct march *listing = NULL;
        struct march *mptr;
        int r;                  /* IPC response code */
@@ -739,20 +689,24 @@ void gotoroomstep(CtdlIPC * ipc, int direction, int mode)
                        rs = rl;
                        if (rl == NULL) {
                                rl = rp;
-                       } else {
+                       }
+                       else {
                                while (rp != NULL) {
                                        if (rordercmp(rp, rs) < 0) {
                                                if (rs->lnext == NULL) {
                                                        rs->lnext = rp;
                                                        rp = NULL;
-                                               } else {
+                                               }
+                                               else {
                                                        rs = rs->lnext;
                                                }
-                                       } else {
+                                       }
+                                       else {
                                                if (rs->rnext == NULL) {
                                                        rs->rnext = rp;
                                                        rp = NULL;
-                                               } else {
+                                               }
+                                               else {
                                                        rs = rs->rnext;
                                                }
                                        }
@@ -769,14 +723,17 @@ void gotoroomstep(CtdlIPC * ipc, int direction, int mode)
                /* If we're at the first room, wrap to the last room */
                if (rmslot == 0) {
                        rmslot = rmtotal - 1;
-               } else {
+               }
+               else {
                        rmslot--;
                }
-       } else {                /* Next room */
+       }
+       else {                  /* Next room */
                /* If we're at the last room, wrap to the first room */
                if (rmslot == rmtotal - 1) {
                        rmslot = 0;
-               } else {
+               }
+               else {
                        rmslot++;
                }
        }
@@ -806,8 +763,7 @@ void gotoroomstep(CtdlIPC * ipc, int direction, int mode)
 /*
  * step through floors on system
  */
-void gotofloorstep(CtdlIPC * ipc, int direction, int mode)
-{
+void gotofloorstep(CtdlIPC * ipc, int direction, int mode) {
        int tofloor;
 
        if (floorlist[0][0] == 0)
@@ -823,7 +779,8 @@ void gotofloorstep(CtdlIPC * ipc, int direction, int mode)
 
                while (!floorlist[tofloor][0])
                        tofloor--;
-       } else {                /* Next floor */
+       }
+       else {                  /* Next floor */
                if (curr_floor < 127)
                        tofloor = curr_floor + 1;
                else
@@ -846,18 +803,18 @@ void gotofloorstep(CtdlIPC * ipc, int direction, int mode)
        }
 }
 
+
 /* 
  * Display user 'preferences'.
  */
 extern int rc_prompt_control;
-void read_config(CtdlIPC * ipc)
-{
+void read_config(CtdlIPC * ipc) {
        char buf[SIZ];
        char *resp = NULL;
        int r;                  /* IPC response code */
        char _fullname[USERNAME_SIZE];
        long _usernum;
-       int _axlevel, _timescalled, _posted;
+       int _axlevel;
        time_t _lastcall;
        struct ctdluser *user = NULL;
 
@@ -871,8 +828,6 @@ void read_config(CtdlIPC * ipc)
        _usernum = extract_long(buf, 2);
        _axlevel = extract_int(buf, 3);
        _lastcall = extract_long(buf, 4);
-       _timescalled = extract_int(buf, 5);
-       _posted = extract_int(buf, 6);
        free(resp);
        resp = NULL;
 
@@ -885,10 +840,8 @@ void read_config(CtdlIPC * ipc)
        }
 
        /* show misc user info */
-       scr_printf("%s\nAccess level: %d (%s)\n"
-                  "User #%ld / %d Calls / %d Posts", _fullname, _axlevel, axdefs[(int) _axlevel], _usernum, _timescalled, _posted);
        if (_lastcall > 0L) {
-               scr_printf(" / Curr login: %s", asctime(localtime(&_lastcall)));
+               scr_printf("Last login: %s", asctime(localtime(&_lastcall)));
        }
        scr_printf("\n");
 
@@ -946,11 +899,11 @@ void read_config(CtdlIPC * ipc)
        free(user);
 }
 
+
 /*
  * Display system statistics.
  */
-void system_info(CtdlIPC * ipc)
-{
+void system_info(CtdlIPC * ipc) {
        char buf[SIZ];
        char *resp = NULL;
        size_t bytes;
@@ -986,11 +939,11 @@ void system_info(CtdlIPC * ipc)
        scr_printf("Your system administrator is %s.\n", ipc->ServInfo.sysadm);
 }
 
+
 /*
  * forget all rooms on current floor
  */
-void forget_this_floor(CtdlIPC * ipc)
-{
+void forget_this_floor(CtdlIPC * ipc) {
        if (curr_floor == 0) {
                scr_printf("Can't forget this floor.\n");
                return;
@@ -1010,8 +963,7 @@ void forget_this_floor(CtdlIPC * ipc)
 /*
  * set floor mode depending on client, server, and user settings
  */
-void set_floor_mode(CtdlIPC * ipc)
-{
+void set_floor_mode(CtdlIPC * ipc) {
        if (ipc->ServInfo.ok_floors == 0) {
                floor_mode = 0; /* Don't use floors if the server */
        }
@@ -1032,8 +984,7 @@ void set_floor_mode(CtdlIPC * ipc)
 /*
  * Set or change the user's password
  */
-int set_password(CtdlIPC * ipc)
-{
+int set_password(CtdlIPC * ipc) {
        char pass1[20];
        char pass2[20];
        char buf[SIZ];
@@ -1041,7 +992,8 @@ int set_password(CtdlIPC * ipc)
        if (!IsEmptyStr(rc_password)) {
                strcpy(pass1, rc_password);
                strcpy(pass2, rc_password);
-       } else {
+       }
+       else {
                IFNEXPERT formout(ipc, "changepw");
                newprompt("Enter a new password: ", pass1, -19);
                newprompt("Enter it again to confirm: ", pass2, -19);
@@ -1053,19 +1005,18 @@ int set_password(CtdlIPC * ipc)
                scr_printf("%s\n", buf);
                offer_to_remember_password(ipc, hostbuf, portbuf, fullname, pass1);
                return (0);
-       } else {
+       }
+       else {
                scr_printf("*** They don't match... try again.\n");
                return (1);
        }
 }
 
 
-
 /*
  * get info about the server we've connected to
  */
-void get_serv_info(CtdlIPC * ipc, char *supplied_hostname)
-{
+void get_serv_info(CtdlIPC * ipc, char *supplied_hostname) {
        char buf[SIZ];
 
        CtdlIPCServerInfo(ipc, buf);
@@ -1077,11 +1028,10 @@ void get_serv_info(CtdlIPC * ipc, char *supplied_hostname)
                                /* Look up the , in the bible if you're confused */
                                (locate_host(ipc, buf), buf), buf);
 
-       /* Indicate to the server that we prefer to decode Base64 and
-        * quoted-printable on the client side.
-        */
+       // Indicate to the server that we prefer to decode Base64 and
+       // quoted-printable on the client side.
        if ((CtdlIPCSpecifyPreferredFormats(ipc, buf, "dont_decode") / 100) != 2) {
-               scr_printf("ERROR: Extremely old server; MSG4 framework not supported.\n");
+               scr_printf("Error %s:%d", __FILE__, __LINE__);
                logoff(ipc, 0);
        }
 
@@ -1094,18 +1044,16 @@ void get_serv_info(CtdlIPC * ipc, char *supplied_hostname)
         * the plain text when we have it available.
         */
        if ((CtdlIPCSpecifyPreferredFormats(ipc, buf, "text/plain|text/html|text/x-markdown") / 100) != 2) {
-               scr_printf("ERROR: Extremely old server; MSG4 framework not supported.\n");
+               scr_printf("Error %s:%d", __FILE__, __LINE__);
                logoff(ipc, 0);
        }
 }
 
 
-
 /*
  * Session username compare function for SortOnlineUsers()
  */
-int rwho_username_cmp(const void *rec1, const void *rec2)
-{
+int rwho_username_cmp(const void *rec1, const void *rec2) {
        char *u1, *u2;
 
        u1 = strchr(rec1, '|');
@@ -1118,8 +1066,7 @@ int rwho_username_cmp(const void *rec1, const void *rec2)
 /*
  * Idle time compare function for SortOnlineUsers()
  */
-int idlecmp(const void *rec1, const void *rec2)
-{
+int idlecmp(const void *rec1, const void *rec2) {
        time_t i1, i2;
 
        i1 = extract_long(rec1, 5);
@@ -1141,8 +1088,7 @@ int idlecmp(const void *rec1, const void *rec2)
  * If 'condense' is nonzero, multiple sessions for the same user will be
  * combined into one for brevity.
  */
-char *SortOnlineUsers(char *listing, int condense)
-{
+char *SortOnlineUsers(char *listing, int condense) {
        int rows;
        char *sortbuf;
        char *retbuf;
@@ -1204,12 +1150,10 @@ char *SortOnlineUsers(char *listing, int condense)
 }
 
 
-
 /*
  * Display list of users currently logged on to the server
  */
-void who_is_online(CtdlIPC * ipc, int longlist)
-{
+void who_is_online(CtdlIPC * ipc, int longlist) {
        char buf[SIZ], username[SIZ], roomname[SIZ], fromhost[SIZ];
        char flags[SIZ];
        char actual_user[SIZ], actual_room[SIZ], actual_host[SIZ];
@@ -1290,11 +1234,13 @@ void who_is_online(CtdlIPC * ipc, int longlist)
                                }
                                scr_printf("\n");
 
-                       } else {
+                       }
+                       else {
                                if (isidle == 0) {
                                        if (extract_int(buf, 0) == last_session) {
                                                scr_printf("        ");
-                                       } else {
+                                       }
+                                       else {
                                                color(BRIGHT_MAGENTA);
                                                scr_printf("%-3s", flags);
                                        }
@@ -1312,16 +1258,20 @@ void who_is_online(CtdlIPC * ipc, int longlist)
                                                        if (idlehours > 23999) {
                                                                scr_printf("fish");
                                                                /* over 10 days */
-                                                       } else if (idlehours > 239) {
+                                                       }
+                                                       else if (idlehours > 239) {
                                                                scr_printf("%3ldd", idlehours / 24);
                                                                /* over 10 hours */
-                                                       } else if (idlehours > 9) {
+                                                       }
+                                                       else if (idlehours > 9) {
                                                                scr_printf("%1ldd%02ld", idlehours / 24, idlehours % 24);
                                                                /* less than 10 hours */
-                                                       } else {
+                                                       }
+                                                       else {
                                                                scr_printf("%1ld:%02ld", idlehours, idlemins);
                                                        }
-                                               } else {
+                                               }
+                                               else {
                                                        scr_printf("    ");
                                                }
                                                scr_printf(" ");
@@ -1338,17 +1288,15 @@ void who_is_online(CtdlIPC * ipc, int longlist)
        free(listing);
 }
 
-void enternew(CtdlIPC * ipc, char *desc, char *buf, int maxlen)
-{
+
+void enternew(CtdlIPC * ipc, char *desc, char *buf, int maxlen) {
        char bbb[128];
        snprintf(bbb, sizeof bbb, "Enter in your new %s: ", desc);
        newprompt(bbb, buf, maxlen);
 }
 
 
-
-int shift(int argc, char **argv, int start, int count)
-{
+int shift(int argc, char **argv, int start, int count) {
        int i;
 
        for (i = start; i < (argc - count); ++i) {
@@ -1358,23 +1306,21 @@ int shift(int argc, char **argv, int start, int count)
        return argc;
 }
 
-static void statusHook(char *s)
-{
+
+static void statusHook(char *s) {
        scr_printf(s);
 }
 
+
 /*
  * main
  */
-int main(int argc, char **argv)
-{
+int main(int argc, char **argv) {
        int a, b, mcmd;
        char aaa[100], bbb[100];        /* general purpose variables */
        char argbuf[64];        /* command line buf */
-       char nonce[NONCE_SIZE];
        char *telnet_client_host = NULL;
        char *sptr, *sptr2;     /* USed to extract the nonce */
-       char hexstring[MD5_HEXSTRING_SIZE];
        char password[SIZ];
        struct ctdlipcmisc chek;
        struct ctdluser *myself = NULL;
@@ -1416,10 +1362,7 @@ int main(int argc, char **argv)
        arg_encrypt = RC_DEFAULT;
 #endif
 
-       /* 
-        * Handle command line options as if we were called like /bin/login
-        * (i.e. from in.telnetd)
-        */
+       // Handle command line options as if we were called like /bin/login (i.e. from in.telnetd)
        for (a = 0; a < argc; ++a) {
                if ((argc > a + 1) && (!strcmp(argv[a], "-h"))) {
                        telnet_client_host = argv[a + 1];
@@ -1452,11 +1395,6 @@ int main(int argc, char **argv)
         */
        check_screen_dims();
 
-
-#ifdef __CYGWIN__
-       newprompt("Connect to (return for local server): ", hostbuf, 64);
-#endif
-
        scr_printf("Attaching to server...\n");
        ipc = CtdlIPC_new(argc, argv, hostbuf, portbuf);
        if (!ipc) {
@@ -1478,23 +1416,7 @@ int main(int argc, char **argv)
                logoff(ipc, atoi(aaa));
        }
 
-       /* If there is a [nonce] at the end, put the nonce in <nonce>, else nonce
-        * is zeroized.
-        */
-
-       if ((sptr = strchr(aaa, '<')) == NULL) {
-               nonce[0] = '\0';
-       } else {
-               if ((sptr2 = strchr(sptr, '>')) == NULL) {
-                       nonce[0] = '\0';
-               } else {
-                       sptr2++;
-                       *sptr2 = '\0';
-                       strncpy(nonce, sptr, (size_t) NONCE_SIZE);
-               }
-       }
-
-#ifdef HAVE_OPENSSL
+#ifdef HAVE_OPENSSLLLLLL
        /* Evaluate encryption preferences */
        if (arg_encrypt != RC_NO && rc_encrypt != RC_NO) {
                if (!ipc->isLocal || arg_encrypt == RC_YES || rc_encrypt == RC_YES) {
@@ -1519,19 +1441,13 @@ int main(int argc, char **argv)
                if (!IsEmptyStr(fullname)) {
                        r = CtdlIPCTryLogin(ipc, fullname, aaa);
                        if (r / 100 == 3) {
-                               if (*nonce) {
-                                       r = CtdlIPCTryApopPassword(ipc,
-                                                                  make_apop_string(password, nonce, hexstring, sizeof hexstring),
-                                                                  aaa);
-                               } else {
-                                       r = CtdlIPCTryPassword(ipc, password, aaa);
-                               }
+                               r = CtdlIPCTryPassword(ipc, password, aaa);
                        }
-
                        if (r / 100 == 2) {
                                load_user_info(aaa);
                                goto PWOK;
-                       } else {
+                       }
+                       else {
                                set_stored_password(hostbuf, portbuf, "", "");
                        }
                }
@@ -1542,7 +1458,8 @@ int main(int argc, char **argv)
        do {
                if (!IsEmptyStr(rc_username)) {
                        strcpy(fullname, rc_username);
-               } else {
+               }
+               else {
                        newprompt("Enter your name: ", fullname, 29);
                }
                strproc(fullname);
@@ -1571,22 +1488,15 @@ int main(int argc, char **argv)
        /* password authentication */
        if (!IsEmptyStr(rc_password)) {
                strcpy(password, rc_password);
-       } else {
+       }
+       else {
                newprompt("\rPlease enter your password: ", password, -(SIZ - 1));
        }
 
-       if (*nonce) {
-               r = CtdlIPCTryApopPassword(ipc, make_apop_string(password, nonce, hexstring, sizeof hexstring), aaa);
-               if (r / 100 != 2) {
-                       strproc(password);
-                       r = CtdlIPCTryApopPassword(ipc, make_apop_string(password, nonce, hexstring, sizeof hexstring), aaa);
-               }
-       } else {
+       r = CtdlIPCTryPassword(ipc, password, aaa);
+       if (r / 100 != 2) {
+               strproc(password);
                r = CtdlIPCTryPassword(ipc, password, aaa);
-               if (r / 100 != 2) {
-                       strproc(password);
-                       r = CtdlIPCTryPassword(ipc, password, aaa);
-               }
        }
 
        if (r / 100 == 2) {
@@ -1633,10 +1543,8 @@ int main(int argc, char **argv)
        }
 
        color(BRIGHT_WHITE);
-       scr_printf("\n%s\nAccess level: %d (%s)\n"
-                  "User #%ld / Login #%d", fullname, axlevel, axdefs[(int) axlevel], usernum, timescalled);
        if (lastcall > 0L) {
-               scr_printf(" / Last login: %s", asctime(localtime(&lastcall)));
+               scr_printf("Last login: %s", asctime(localtime(&lastcall)));
        }
        scr_printf("\n");
 
@@ -1893,7 +1801,8 @@ int main(int argc, char **argv)
                                                if (atoi(aaa)) {
                                                        scr_printf
                                                            ("The Citadel server will terminate when all users are logged off.\n");
-                                               } else {
+                                               }
+                                               else {
                                                        scr_printf("The Citadel server will not terminate.\n");
                                                }
                                        }