X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=textclient%2Fcitadel.c;h=1fea75eb38842077722782d3919324e985b600e6;hb=HEAD;hp=16941d6a5f6fa488f64b011b51ed24030781f3b3;hpb=8b537f8d15f353c4a1a97d18bf2aef0a045e6b29;p=citadel.git diff --git a/textclient/citadel.c b/textclient/citadel.c index 16941d6a5..b5682cfb2 100644 --- a/textclient/citadel.c +++ b/textclient/citadel.c @@ -2,13 +2,7 @@ // // Copyright (c) 1987-2022 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" @@ -38,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 */ @@ -60,15 +52,14 @@ int secure; /* Set to nonzero when wire is encrypted */ extern char instant_msgs; /* instant messages waiting! */ extern int rc_ansi_color; /* ansi color value from citadel.rc */ +extern int rc_sixel; /* sixel graphics value from citadel.rc */ extern int next_lazy_cmd; CtdlIPC *ipc_for_signal_handlers; /* KLUDGE cover your eyes */ int enable_syslog = 0; -/* - * here is our 'clean up gracefully and exit' routine - */ +// Here is our 'clean up gracefully and exit' routine void ctdl_logoff(char *file, int line, CtdlIPC * ipc, int code) { int lp; @@ -76,41 +67,31 @@ void ctdl_logoff(char *file, int line, CtdlIPC * ipc, int code) { 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 } @@ -156,7 +137,7 @@ void formout(CtdlIPC * ipc, char *name) { void userlist(CtdlIPC * ipc, char *patn) { char buf[SIZ]; - char fl[26]; // a buffer this small will prevent it overrunning the column + char fl[64]; // a buffer this small will prevent it overrunning the column struct tm tmbuf; time_t lc; int r; // IPC response code @@ -168,8 +149,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); @@ -178,12 +159,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)); } } @@ -193,25 +172,19 @@ void userlist(CtdlIPC * ipc, char *patn) { } -/* - * grab assorted info about the user... - */ +// 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. - */ +// 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; @@ -243,10 +216,8 @@ void remove_march(char *roomname, int floornum) { } -/* - * 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. - */ +// 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; @@ -276,13 +247,10 @@ char *pop_march(int desired_floor, struct march *_march) { } -/* - * jump directly to a room - */ +// 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; @@ -425,29 +393,28 @@ 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 } @@ -461,9 +428,8 @@ void gotonext(CtdlIPC * ipc) { 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); @@ -498,15 +464,13 @@ void gotonext(CtdlIPC * ipc) { } -/* - * forget all rooms on a given floor - */ +// 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); @@ -533,9 +497,7 @@ void forget_all_rooms_on(CtdlIPC * ipc, int ffloor) { } -/* - * routine called by gotofloor() to move to a new room on a new floor - */ +// 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; @@ -557,9 +519,7 @@ void gf_toroom(CtdlIPC * ipc, char *towhere, int mode) { } -/* - * go to a new floor - */ +// go to a new floor void gotofloor(CtdlIPC * ipc, char *towhere, int mode) { int a, tofloor; int r; /* IPC response code */ @@ -855,7 +815,7 @@ void read_config(CtdlIPC * ipc) { int r; /* IPC response code */ char _fullname[USERNAME_SIZE]; long _usernum; - int _axlevel, _timescalled, _posted; + int _axlevel; time_t _lastcall; struct ctdluser *user = NULL; @@ -869,8 +829,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; @@ -883,10 +841,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"); @@ -1073,11 +1029,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); } @@ -1090,7 +1045,7 @@ 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); } } @@ -1589,10 +1544,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");