annotate nnchat.c @ 389:19cb995994c9

Change screen update strategy a bit.
author Matti Hamalainen <ccr@tnsp.org>
date Sun, 20 May 2012 23:35:00 +0300
parents f45673fe6b23
children a2b7ac328e62
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
41
Matti Hamalainen <ccr@tnsp.org>
parents: 40
diff changeset
1 /*
Matti Hamalainen <ccr@tnsp.org>
parents: 40
diff changeset
2 * NNChat - Custom chat client for NewbieNudes.com chatrooms
39
Matti Hamalainen <ccr@tnsp.org>
parents: 36
diff changeset
3 * Written by Matti 'ccr' Hämäläinen
237
52a2f06fd41c Update copyright years.
Matti Hamalainen <ccr@tnsp.org>
parents: 236
diff changeset
4 * (C) Copyright 2008-2011 Tecnic Software productions (TNSP)
39
Matti Hamalainen <ccr@tnsp.org>
parents: 36
diff changeset
5 */
62
ff5d74f0d428 Moved some functions to "libnnchat".
Matti Hamalainen <ccr@tnsp.org>
parents: 61
diff changeset
6 #include "libnnchat.h"
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
7 #include <stdlib.h>
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
8 #include "th_args.h"
133
ffe8bbd429fa Config file.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
9 #include "th_config.h"
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
10 #include <string.h>
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
11 #include <errno.h>
64
6a3a917303e4 Some random cleanups, bring back WinSock support.
Matti Hamalainen <ccr@tnsp.org>
parents: 63
diff changeset
12 #ifdef __WIN32
68
3ab7751fdad1 MingW compatibility, with one ugly kludge.
Matti Hamalainen <ccr@tnsp.org>
parents: 67
diff changeset
13 /* Undefine because both windows.h and curses.h #define it */
3ab7751fdad1 MingW compatibility, with one ugly kludge.
Matti Hamalainen <ccr@tnsp.org>
parents: 67
diff changeset
14 #undef MOUSE_MOVED
154
e8f67e344aaf Get correct directory for saving configuration under Windows.
Matti Hamalainen <ccr@tnsp.org>
parents: 153
diff changeset
15 #include <shlwapi.h>
128
713879a7ca10 Wait for forked processes, to prevent a zombie apocalypse.
Matti Hamalainen <ccr@tnsp.org>
parents: 125
diff changeset
16 #else
713879a7ca10 Wait for forked processes, to prevent a zombie apocalypse.
Matti Hamalainen <ccr@tnsp.org>
parents: 125
diff changeset
17 #include <sys/wait.h>
68
3ab7751fdad1 MingW compatibility, with one ugly kludge.
Matti Hamalainen <ccr@tnsp.org>
parents: 67
diff changeset
18 #endif
217
7ba4e371e9a6 Add Makefile for OpenBSD, and specific #ifdef'd includes for the platform.
Matti Hamalainen <ccr@tnsp.org>
parents: 216
diff changeset
19 #ifdef HAVE_NCURSES_H
7ba4e371e9a6 Add Makefile for OpenBSD, and specific #ifdef'd includes for the platform.
Matti Hamalainen <ccr@tnsp.org>
parents: 216
diff changeset
20 #include <ncurses.h>
7ba4e371e9a6 Add Makefile for OpenBSD, and specific #ifdef'd includes for the platform.
Matti Hamalainen <ccr@tnsp.org>
parents: 216
diff changeset
21 #else
64
6a3a917303e4 Some random cleanups, bring back WinSock support.
Matti Hamalainen <ccr@tnsp.org>
parents: 63
diff changeset
22 #include <curses.h>
217
7ba4e371e9a6 Add Makefile for OpenBSD, and specific #ifdef'd includes for the platform.
Matti Hamalainen <ccr@tnsp.org>
parents: 216
diff changeset
23 #endif
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
24
139
c39399725f7b Define some platform-specific constants.
Matti Hamalainen <ccr@tnsp.org>
parents: 137
diff changeset
25 #ifdef __WIN32
160
d3c78f2ef77b Rename configuration file for Windows.
Matti Hamalainen <ccr@tnsp.org>
parents: 156
diff changeset
26 #define SET_CONFIG_FILE "nnchat.txt"
139
c39399725f7b Define some platform-specific constants.
Matti Hamalainen <ccr@tnsp.org>
parents: 137
diff changeset
27 #define SET_DIR_SEPARATOR "\\"
210
4554f9abc686 Change timeout() value for PDCurses/Windows to 0 to improve responsivity.
Matti Hamalainen <ccr@tnsp.org>
parents: 209
diff changeset
28 #define SET_DELAY (0)
139
c39399725f7b Define some platform-specific constants.
Matti Hamalainen <ccr@tnsp.org>
parents: 137
diff changeset
29 #else
c39399725f7b Define some platform-specific constants.
Matti Hamalainen <ccr@tnsp.org>
parents: 137
diff changeset
30 #define SET_CONFIG_FILE ".nnchat"
c39399725f7b Define some platform-specific constants.
Matti Hamalainen <ccr@tnsp.org>
parents: 137
diff changeset
31 #define SET_DIR_SEPARATOR "/"
228
744c277b57cf Change timeout delay to lower value.
Matti Hamalainen <ccr@tnsp.org>
parents: 226
diff changeset
32 #define SET_DELAY (5)
139
c39399725f7b Define some platform-specific constants.
Matti Hamalainen <ccr@tnsp.org>
parents: 137
diff changeset
33 #endif
49
0bcc38910a77 Simple ringbuffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 46
diff changeset
34
141
cce05daf6f01 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 140
diff changeset
35 #define SET_MAX_HISTORY (16) /* Command history length */
96
7c9538e71c89 Add connection keepalive by sending /listallusers every 15 minutes,
Matti Hamalainen <ccr@tnsp.org>
parents: 92
diff changeset
36 #define SET_KEEPALIVE (15*60) /* Ping/keepalive period in seconds */
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
37 #define SET_MAX_WINDOWS (32)
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
38
49
0bcc38910a77 Simple ringbuffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 46
diff changeset
39
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
40 /* Options
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
41 */
352
b54c8545dcb0 Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents: 347
diff changeset
42 int optPort = 8005,
b54c8545dcb0 Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents: 347
diff changeset
43 optProxyPort = 1080,
b54c8545dcb0 Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents: 347
diff changeset
44 optProxyType = NN_PROXY_NONE;
207
e0c085426b91 Change default user color to black (#000000).
Matti Hamalainen <ccr@tnsp.org>
parents: 206
diff changeset
45 int optUserColor = 0x000000;
96
7c9538e71c89 Add connection keepalive by sending /listallusers every 15 minutes,
Matti Hamalainen <ccr@tnsp.org>
parents: 92
diff changeset
46 char *optServer = "chat.newbienudes.com",
352
b54c8545dcb0 Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents: 347
diff changeset
47 *optProxyServer = NULL,
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
48 *optUserName = NULL,
198
21a37995c3fb Make configuration username/password overridable on command line.
Matti Hamalainen <ccr@tnsp.org>
parents: 197
diff changeset
49 *optUserNameCmd = NULL,
21a37995c3fb Make configuration username/password overridable on command line.
Matti Hamalainen <ccr@tnsp.org>
parents: 197
diff changeset
50 *optUserNameEnc = NULL,
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
51 *optPassword = NULL,
198
21a37995c3fb Make configuration username/password overridable on command line.
Matti Hamalainen <ccr@tnsp.org>
parents: 197
diff changeset
52 *optPasswordCmd = NULL,
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
53 *optLogFilename = NULL,
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
54 *optSite = "NN";
116
741e45592522 Add simple "prediction" into tab-completion based on previously gotten last
Matti Hamalainen <ccr@tnsp.org>
parents: 115
diff changeset
55 char optNickSep = ':';
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
56 BOOL optDaemon = FALSE;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
57 FILE *optLogFile = NULL;
258
8a0f7446318e General cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 254
diff changeset
58 BOOL setIgnoreMode = FALSE;
162
e59cec397811 Add a debug mode option (commandline) and enable certain features when we are in debug mode.
Matti Hamalainen <ccr@tnsp.org>
parents: 161
diff changeset
59 BOOL optDebug = FALSE;
242
cb86d7543be2 Add functionality for generating logfile names based on port etc. and
Matti Hamalainen <ccr@tnsp.org>
parents: 240
diff changeset
60 BOOL optLogEnable = FALSE;
140
2d2ef5bbcc11 Use th-libs linked list code for managing ignore list.
Matti Hamalainen <ccr@tnsp.org>
parents: 139
diff changeset
61
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
62 nn_window_t *chatWindows[SET_MAX_WINDOWS],
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
63 *currWin = NULL;
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
64 WINDOW *mainWin = NULL,
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
65 *statusWin = NULL,
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
66 *editWin = NULL;
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
67
265
b9c650db8a6a Rename variable nnIgnoreList to setIgnoreList.
Matti Hamalainen <ccr@tnsp.org>
parents: 264
diff changeset
68 qlist_t *setIgnoreList = NULL,
264
4c1c18a388d9 Add configuration setting and functionality for random "keepalive" messages to avoid idle timeout kicks from chat.
Matti Hamalainen <ccr@tnsp.org>
parents: 258
diff changeset
69 *setIdleMessages = NULL;
140
2d2ef5bbcc11 Use th-libs linked list code for managing ignore list.
Matti Hamalainen <ccr@tnsp.org>
parents: 139
diff changeset
70 nn_userhash_t *nnUsers = NULL;
137
fad8c31e41e6 Move browser code around a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 134
diff changeset
71 char *setConfigFile = NULL,
fad8c31e41e6 Move browser code around a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 134
diff changeset
72 *setBrowser = NULL;
133
ffe8bbd429fa Config file.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
73 cfgitem_t *cfg = NULL;
89
c2d916b340bf Change some typedef names; Add struct for user list handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 86
diff changeset
74
273
4d106ad65f26 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 268
diff changeset
75
4d106ad65f26 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 268
diff changeset
76 /* Logging mode flags
4d106ad65f26 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 268
diff changeset
77 */
4d106ad65f26 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 268
diff changeset
78 enum {
4d106ad65f26 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 268
diff changeset
79 LOG_FILE = 1,
4d106ad65f26 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 268
diff changeset
80 LOG_WINDOW = 2,
4d106ad65f26 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 268
diff changeset
81 LOG_STAMP = 4
4d106ad65f26 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 268
diff changeset
82 };
4d106ad65f26 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 268
diff changeset
83
4d106ad65f26 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 268
diff changeset
84
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
85 /* Arguments
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
86 */
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
87 optarg_t optList[] = {
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
88 { 0, '?', "help", "Show this help", OPT_NONE },
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
89 { 1, 'v', "verbose", "Be more verbose", OPT_NONE },
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
90 { 2, 'p', "port", "Connect to port", OPT_ARGREQ },
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
91 { 3, 's', "server", "Server to connect to", OPT_ARGREQ },
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
92 { 4, 'C', "color", "Initial color in RGB hex 000000", OPT_ARGREQ },
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
93 { 5, 'l', "logfile", "Log filename", OPT_ARGREQ },
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
94 { 6, 'D', "daemon", "A pseudo-daemon mode for logging", OPT_NONE },
352
b54c8545dcb0 Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents: 347
diff changeset
95 { 7, 'f', "force-site", "Force site (default: NN)", OPT_ARGREQ },
162
e59cec397811 Add a debug mode option (commandline) and enable certain features when we are in debug mode.
Matti Hamalainen <ccr@tnsp.org>
parents: 161
diff changeset
96 { 8, 'd', "debug", "Enable various debug features", OPT_NONE },
352
b54c8545dcb0 Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents: 347
diff changeset
97
b54c8545dcb0 Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents: 347
diff changeset
98 {10, '4', "socks4", "SOCKS4 proxy server", OPT_ARGREQ },
b54c8545dcb0 Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents: 347
diff changeset
99 {11, 'A', "socks4a", "SOCKS4A proxy server", OPT_ARGREQ },
b54c8545dcb0 Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents: 347
diff changeset
100 {12, 'P', "proxy-port", "Proxy port (default: 1080)", OPT_ARGREQ },
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
101 };
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
102
43
40ba8cdcf03a Cleanups, added a silly morse code conversion mode.
Matti Hamalainen <ccr@tnsp.org>
parents: 41
diff changeset
103 const int optListN = (sizeof(optList) / sizeof(optList[0]));
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
104
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
105
258
8a0f7446318e General cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 254
diff changeset
106 void argShowHelp(void)
68
3ab7751fdad1 MingW compatibility, with one ugly kludge.
Matti Hamalainen <ccr@tnsp.org>
parents: 67
diff changeset
107 {
381
7c28f38cb6dd Update to use new th-libs from the subrepo.
Matti Hamalainen <ccr@tnsp.org>
parents: 376
diff changeset
108 th_print_banner(stdout, th_prog_name,
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
109 "[options] <username> <password>");
381
7c28f38cb6dd Update to use new th-libs from the subrepo.
Matti Hamalainen <ccr@tnsp.org>
parents: 376
diff changeset
110
7c28f38cb6dd Update to use new th-libs from the subrepo.
Matti Hamalainen <ccr@tnsp.org>
parents: 376
diff changeset
111 th_args_help(stdout, optList, optListN);
68
3ab7751fdad1 MingW compatibility, with one ugly kludge.
Matti Hamalainen <ccr@tnsp.org>
parents: 67
diff changeset
112 }
3ab7751fdad1 MingW compatibility, with one ugly kludge.
Matti Hamalainen <ccr@tnsp.org>
parents: 67
diff changeset
113
3ab7751fdad1 MingW compatibility, with one ugly kludge.
Matti Hamalainen <ccr@tnsp.org>
parents: 67
diff changeset
114
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
115 BOOL argHandleOpt(const int optN, char *optArg, char *currArg)
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
116 {
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
117 switch (optN) {
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
118 case 0:
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
119 argShowHelp();
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
120 exit(0);
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
121 break;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
122
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
123 case 1:
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
124 th_verbosityLevel++;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
125 break;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
126
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
127 case 2:
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
128 optPort = atoi(optArg);
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
129 break;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
130
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
131 case 3:
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
132 optServer = optArg;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
133 break;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
134
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
135 case 4:
132
10daf4660cae Use th_get_hex_triplet().
Matti Hamalainen <ccr@tnsp.org>
parents: 130
diff changeset
136 if ((optUserColor = th_get_hex_triplet(optArg)) < 0) {
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
137 THERR("Invalid color argument '%s', should be a RGB hex triplet '000000'.\n",
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
138 optArg);
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
139 return FALSE;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
140 }
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
141 THMSG(1, "Using color #%06x\n", optUserColor);
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
142 break;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
143
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
144 case 5:
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
145 optLogFilename = optArg;
242
cb86d7543be2 Add functionality for generating logfile names based on port etc. and
Matti Hamalainen <ccr@tnsp.org>
parents: 240
diff changeset
146 optLogEnable = TRUE;
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
147 break;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
148
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
149 case 7:
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
150 optSite = optArg;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
151 break;
33
e49ea6febfeb Cleanups. Added option to specify/fake "site" where logging in from.
Matti Hamalainen <ccr@tnsp.org>
parents: 32
diff changeset
152
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
153 case 6:
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
154 optDaemon = TRUE;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
155 THMSG(1, "Running in pseudo-daemon mode.\n");
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
156 break;
21
29098addfa65 Added a "daemon" mode.
Matti Hamalainen <ccr@tnsp.org>
parents: 19
diff changeset
157
162
e59cec397811 Add a debug mode option (commandline) and enable certain features when we are in debug mode.
Matti Hamalainen <ccr@tnsp.org>
parents: 161
diff changeset
158 case 8:
e59cec397811 Add a debug mode option (commandline) and enable certain features when we are in debug mode.
Matti Hamalainen <ccr@tnsp.org>
parents: 161
diff changeset
159 optDebug = TRUE;
e59cec397811 Add a debug mode option (commandline) and enable certain features when we are in debug mode.
Matti Hamalainen <ccr@tnsp.org>
parents: 161
diff changeset
160 THMSG(1, "Debug mode enabled.\n");
e59cec397811 Add a debug mode option (commandline) and enable certain features when we are in debug mode.
Matti Hamalainen <ccr@tnsp.org>
parents: 161
diff changeset
161 break;
e59cec397811 Add a debug mode option (commandline) and enable certain features when we are in debug mode.
Matti Hamalainen <ccr@tnsp.org>
parents: 161
diff changeset
162
352
b54c8545dcb0 Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents: 347
diff changeset
163
b54c8545dcb0 Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents: 347
diff changeset
164 case 10:
b54c8545dcb0 Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents: 347
diff changeset
165 optProxyServer = optArg;
b54c8545dcb0 Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents: 347
diff changeset
166 optProxyType = NN_PROXY_SOCKS4;
b54c8545dcb0 Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents: 347
diff changeset
167 break;
b54c8545dcb0 Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents: 347
diff changeset
168
b54c8545dcb0 Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents: 347
diff changeset
169 case 11:
b54c8545dcb0 Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents: 347
diff changeset
170 optProxyServer = optArg;
b54c8545dcb0 Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents: 347
diff changeset
171 optProxyType = NN_PROXY_SOCKS4A;
b54c8545dcb0 Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents: 347
diff changeset
172 break;
b54c8545dcb0 Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents: 347
diff changeset
173
b54c8545dcb0 Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents: 347
diff changeset
174 case 12:
b54c8545dcb0 Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents: 347
diff changeset
175 optPort = atoi(optArg);
b54c8545dcb0 Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents: 347
diff changeset
176 break;
b54c8545dcb0 Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents: 347
diff changeset
177
b54c8545dcb0 Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents: 347
diff changeset
178
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
179 default:
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
180 THERR("Unknown option '%s'.\n", currArg);
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
181 return FALSE;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
182 }
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
183
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
184 return TRUE;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
185 }
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
186
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
187
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
188 BOOL argHandleFile(char *currArg)
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
189 {
198
21a37995c3fb Make configuration username/password overridable on command line.
Matti Hamalainen <ccr@tnsp.org>
parents: 197
diff changeset
190 if (!optUserNameCmd)
21a37995c3fb Make configuration username/password overridable on command line.
Matti Hamalainen <ccr@tnsp.org>
parents: 197
diff changeset
191 optUserNameCmd = currArg;
21a37995c3fb Make configuration username/password overridable on command line.
Matti Hamalainen <ccr@tnsp.org>
parents: 197
diff changeset
192 else if (!optPasswordCmd)
21a37995c3fb Make configuration username/password overridable on command line.
Matti Hamalainen <ccr@tnsp.org>
parents: 197
diff changeset
193 optPasswordCmd = currArg;
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
194 else {
198
21a37995c3fb Make configuration username/password overridable on command line.
Matti Hamalainen <ccr@tnsp.org>
parents: 197
diff changeset
195 THERR("Username '%s' already specified on commandline!\n", optUserNameCmd);
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
196 return FALSE;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
197 }
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
198
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
199 return TRUE;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
200 }
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
201
156
0a9fe14882dc Introduce utility function getTimeStamp() and use it to lessen code duplication.
Matti Hamalainen <ccr@tnsp.org>
parents: 155
diff changeset
202 BOOL getTimeStamp(char *str, size_t len, const char *fmt)
0a9fe14882dc Introduce utility function getTimeStamp() and use it to lessen code duplication.
Matti Hamalainen <ccr@tnsp.org>
parents: 155
diff changeset
203 {
0a9fe14882dc Introduce utility function getTimeStamp() and use it to lessen code duplication.
Matti Hamalainen <ccr@tnsp.org>
parents: 155
diff changeset
204 time_t stamp = time(NULL);
0a9fe14882dc Introduce utility function getTimeStamp() and use it to lessen code duplication.
Matti Hamalainen <ccr@tnsp.org>
parents: 155
diff changeset
205 struct tm *stamp_tm;
0a9fe14882dc Introduce utility function getTimeStamp() and use it to lessen code duplication.
Matti Hamalainen <ccr@tnsp.org>
parents: 155
diff changeset
206 if ((stamp_tm = localtime(&stamp)) != NULL) {
0a9fe14882dc Introduce utility function getTimeStamp() and use it to lessen code duplication.
Matti Hamalainen <ccr@tnsp.org>
parents: 155
diff changeset
207 strftime(str, len, fmt, stamp_tm);
0a9fe14882dc Introduce utility function getTimeStamp() and use it to lessen code duplication.
Matti Hamalainen <ccr@tnsp.org>
parents: 155
diff changeset
208 return TRUE;
0a9fe14882dc Introduce utility function getTimeStamp() and use it to lessen code duplication.
Matti Hamalainen <ccr@tnsp.org>
parents: 155
diff changeset
209 } else {
0a9fe14882dc Introduce utility function getTimeStamp() and use it to lessen code duplication.
Matti Hamalainen <ccr@tnsp.org>
parents: 155
diff changeset
210 str[0] = 0;
0a9fe14882dc Introduce utility function getTimeStamp() and use it to lessen code duplication.
Matti Hamalainen <ccr@tnsp.org>
parents: 155
diff changeset
211 return FALSE;
0a9fe14882dc Introduce utility function getTimeStamp() and use it to lessen code duplication.
Matti Hamalainen <ccr@tnsp.org>
parents: 155
diff changeset
212 }
0a9fe14882dc Introduce utility function getTimeStamp() and use it to lessen code duplication.
Matti Hamalainen <ccr@tnsp.org>
parents: 155
diff changeset
213 }
49
0bcc38910a77 Simple ringbuffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 46
diff changeset
214
226
f25d47398326 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 225
diff changeset
215
325
c086345d176b Move some functions to libnnchat and rename nn_find_window to findWindow()
Matti Hamalainen <ccr@tnsp.org>
parents: 324
diff changeset
216 nn_window_t *findWindow(const char *id)
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
217 {
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
218 int i;
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
219
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
220 for (i = 0; i < SET_MAX_WINDOWS; i++)
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
221 if (chatWindows[i] != NULL &&
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
222 chatWindows[i]->id != NULL &&
372
b9f0bdad6285 Use th_strcasecmp() and th_strncasecmp().
Matti Hamalainen <ccr@tnsp.org>
parents: 369
diff changeset
223 th_strcasecmp(id, chatWindows[i]->id) == 0)
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
224 return chatWindows[i];
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
225
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
226 return NULL;
191
4007b9ac7cde Handle usernames with whitespace by converting whitespaces to chr 255 in
Matti Hamalainen <ccr@tnsp.org>
parents: 190
diff changeset
227 }
4007b9ac7cde Handle usernames with whitespace by converting whitespaces to chr 255 in
Matti Hamalainen <ccr@tnsp.org>
parents: 190
diff changeset
228
258
8a0f7446318e General cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 254
diff changeset
229
291
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
230 BOOL openWindow(const char *name, BOOL curwin)
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
231 {
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
232 int i;
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
233 nn_window_t *res;
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
234 if (name == NULL)
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
235 return FALSE;
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
236
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
237 if ((res = nn_window_new(name)) == NULL)
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
238 return FALSE;
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
239
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
240 for (i = 1; i < SET_MAX_WINDOWS; i++)
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
241 if (chatWindows[i] == NULL) {
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
242 res->num = i;
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
243 chatWindows[i] = res;
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
244 if (curwin)
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
245 currWin = res;
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
246 return TRUE;
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
247 }
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
248
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
249 return FALSE;
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
250 }
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
251
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
252
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
253 void closeWindow(nn_window_t *win)
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
254 {
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
255 int i;
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
256 if (win == NULL) return;
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
257
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
258 for (i = 1; i < SET_MAX_WINDOWS; i++)
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
259 if (chatWindows[i] == win) {
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
260 chatWindows[i] = NULL;
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
261 nn_window_free(win);
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
262 return;
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
263 }
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
264 }
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
265
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
266
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
267 void updateStatus(void)
28
512775f6b081 A refactored ncurses-based UI.
Matti Hamalainen <ccr@tnsp.org>
parents: 27
diff changeset
268 {
156
0a9fe14882dc Introduce utility function getTimeStamp() and use it to lessen code duplication.
Matti Hamalainen <ccr@tnsp.org>
parents: 155
diff changeset
269 char tmpStr[128];
291
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
270 int i;
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
271
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
272 if (statusWin == NULL) return;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
273
156
0a9fe14882dc Introduce utility function getTimeStamp() and use it to lessen code duplication.
Matti Hamalainen <ccr@tnsp.org>
parents: 155
diff changeset
274 getTimeStamp(tmpStr, sizeof(tmpStr), "%H:%M:%S");
110
8af4072dc31a Fix Win32/MinGW/PDcurses issues.
Matti Hamalainen <ccr@tnsp.org>
parents: 109
diff changeset
275
119
4bc63a535acb Fix some PDCurses incompatibilities and remove some Win32/PDCurses specific hacks.
Matti Hamalainen <ccr@tnsp.org>
parents: 118
diff changeset
276 wbkgdset(statusWin, COLOR_PAIR(10));
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
277 werase(statusWin);
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
278
119
4bc63a535acb Fix some PDCurses incompatibilities and remove some Win32/PDCurses specific hacks.
Matti Hamalainen <ccr@tnsp.org>
parents: 118
diff changeset
279 wattrset(statusWin, A_BOLD | COLOR_PAIR(11));
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
280 mvwaddstr(statusWin, 0, 1, tmpStr);
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
281
119
4bc63a535acb Fix some PDCurses incompatibilities and remove some Win32/PDCurses specific hacks.
Matti Hamalainen <ccr@tnsp.org>
parents: 118
diff changeset
282 wattrset(statusWin, A_BOLD | COLOR_PAIR(13));
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
283 waddstr(statusWin, " | ");
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
284 wattrset(statusWin, A_BOLD | COLOR_PAIR(16));
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
285 waddstr(statusWin, optUserName);
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
286 wattrset(statusWin, A_BOLD | COLOR_PAIR(13));
29
a27ef0e359b9 Make statusline more informative.
Matti Hamalainen <ccr@tnsp.org>
parents: 28
diff changeset
287
291
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
288 wattrset(statusWin, A_BOLD | COLOR_PAIR(13));
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
289 waddstr(statusWin, " | ");
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
290 wattrset(statusWin, A_BOLD | COLOR_PAIR(11));
291
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
291 snprintf(tmpStr, sizeof(tmpStr), "#%06x", optUserColor);
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
292 waddstr(statusWin, tmpStr);
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
293
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
294 wattrset(statusWin, A_BOLD | COLOR_PAIR(13));
291
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
295 waddstr(statusWin, " | WIN: ");
322
b9c15c57dc8f Clean up message functions, add new printMsgQ() helper function for messages that should not
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
296 snprintf(tmpStr, sizeof(tmpStr), "%d: %s / %d",
b9c15c57dc8f Clean up message functions, add new printMsgQ() helper function for messages that should not
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
297 currWin->num + 1,
b9c15c57dc8f Clean up message functions, add new printMsgQ() helper function for messages that should not
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
298 currWin->id != NULL ? currWin->id : "MAIN",
b9c15c57dc8f Clean up message functions, add new printMsgQ() helper function for messages that should not
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
299 currWin->pos);
291
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
300 waddstr(statusWin, tmpStr);
29
a27ef0e359b9 Make statusline more informative.
Matti Hamalainen <ccr@tnsp.org>
parents: 28
diff changeset
301
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
302 wattrset(statusWin, A_BOLD | COLOR_PAIR(13));
291
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
303 waddstr(statusWin, " | ");
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
304 wattrset(statusWin, A_BOLD | COLOR_PAIR(11));
291
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
305
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
306 for (i = 0; i < SET_MAX_WINDOWS; i++)
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
307 if (chatWindows[i] != NULL && chatWindows[i]->dirty) {
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
308 snprintf(tmpStr, sizeof(tmpStr), "%d ", i + 1);
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
309 waddstr(statusWin, tmpStr);
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
310 }
29
a27ef0e359b9 Make statusline more informative.
Matti Hamalainen <ccr@tnsp.org>
parents: 28
diff changeset
311
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
312 wrefresh(statusWin);
28
512775f6b081 A refactored ncurses-based UI.
Matti Hamalainen <ccr@tnsp.org>
parents: 27
diff changeset
313 }
512775f6b081 A refactored ncurses-based UI.
Matti Hamalainen <ccr@tnsp.org>
parents: 27
diff changeset
314
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
315
291
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
316 void printEditBuf(nn_editbuf_t *buf)
28
512775f6b081 A refactored ncurses-based UI.
Matti Hamalainen <ccr@tnsp.org>
parents: 27
diff changeset
317 {
191
4007b9ac7cde Handle usernames with whitespace by converting whitespaces to chr 255 in
Matti Hamalainen <ccr@tnsp.org>
parents: 190
diff changeset
318 char *tmp;
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
319 if (editWin == NULL || buf == NULL) return;
32
67ec4073e38c Check for NULL pointers (fixes "daemon" mode)
Matti Hamalainen <ccr@tnsp.org>
parents: 31
diff changeset
320
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
321 buf->data[buf->len] = 0;
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
322 tmp = nn_username_decode(th_strdup(buf->data));
191
4007b9ac7cde Handle usernames with whitespace by converting whitespaces to chr 255 in
Matti Hamalainen <ccr@tnsp.org>
parents: 190
diff changeset
323
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
324 werase(editWin);
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
325
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
326 wattrset(editWin, A_NORMAL);
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
327
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
328 if (buf->pos < buf->len) {
191
4007b9ac7cde Handle usernames with whitespace by converting whitespaces to chr 255 in
Matti Hamalainen <ccr@tnsp.org>
parents: 190
diff changeset
329 waddnstr(editWin, tmp, buf->pos);
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
330 wattrset(editWin, A_REVERSE);
191
4007b9ac7cde Handle usernames with whitespace by converting whitespaces to chr 255 in
Matti Hamalainen <ccr@tnsp.org>
parents: 190
diff changeset
331 waddch(editWin, tmp[buf->pos]);
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
332 wattrset(editWin, A_NORMAL);
191
4007b9ac7cde Handle usernames with whitespace by converting whitespaces to chr 255 in
Matti Hamalainen <ccr@tnsp.org>
parents: 190
diff changeset
333 waddnstr(editWin, tmp + buf->pos + 1, buf->len - buf->pos - 1);
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
334 } else {
191
4007b9ac7cde Handle usernames with whitespace by converting whitespaces to chr 255 in
Matti Hamalainen <ccr@tnsp.org>
parents: 190
diff changeset
335 waddnstr(editWin, tmp, buf->len);
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
336 wattrset(editWin, A_REVERSE);
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
337 waddch(editWin, ' ');
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
338 wattrset(editWin, A_NORMAL);
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
339 }
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
340 wrefresh(editWin);
191
4007b9ac7cde Handle usernames with whitespace by converting whitespaces to chr 255 in
Matti Hamalainen <ccr@tnsp.org>
parents: 190
diff changeset
341 th_free(tmp);
28
512775f6b081 A refactored ncurses-based UI.
Matti Hamalainen <ccr@tnsp.org>
parents: 27
diff changeset
342 }
512775f6b081 A refactored ncurses-based UI.
Matti Hamalainen <ccr@tnsp.org>
parents: 27
diff changeset
343
226
f25d47398326 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 225
diff changeset
344
28
512775f6b081 A refactored ncurses-based UI.
Matti Hamalainen <ccr@tnsp.org>
parents: 27
diff changeset
345 int printWin(WINDOW *win, const char *fmt)
512775f6b081 A refactored ncurses-based UI.
Matti Hamalainen <ccr@tnsp.org>
parents: 27
diff changeset
346 {
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
347 const char *s = fmt;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
348 int col = 0;
141
cce05daf6f01 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 140
diff changeset
349
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
350 while (*s) {
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
351 if (*s == '½') {
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
352 s++;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
353 if (*s == '½') {
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
354 waddch(win, ((unsigned char) *s) | col);
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
355 s++;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
356 } else {
328
a8bda904846c More work towards a working backbuffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
357 memcpy(&col, s, sizeof(int));
a8bda904846c More work towards a working backbuffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
358 s += sizeof(int);
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
359 }
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
360 } else {
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
361 waddch(win, ((unsigned char) *s) | col);
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
362 s++;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
363 }
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
364 }
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
365 return 0;
28
512775f6b081 A refactored ncurses-based UI.
Matti Hamalainen <ccr@tnsp.org>
parents: 27
diff changeset
366 }
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
367
62
ff5d74f0d428 Moved some functions to "libnnchat".
Matti Hamalainen <ccr@tnsp.org>
parents: 61
diff changeset
368
328
a8bda904846c More work towards a working backbuffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
369 #define QPUTCH(ch) th_vputch(&(win->buf), &(win->bufsize), &(win->len), ch)
a8bda904846c More work towards a working backbuffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
370
a8bda904846c More work towards a working backbuffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
371 int nn_window_print(nn_window_t *win, const char *fmt)
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
372 {
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
373 const char *s = fmt;
328
a8bda904846c More work towards a working backbuffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
374 int col = 0;
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
375 while (*s) {
328
a8bda904846c More work towards a working backbuffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
376 if (*s == '½') {
a8bda904846c More work towards a working backbuffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
377 s++;
a8bda904846c More work towards a working backbuffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
378 if (*s == '½') {
a8bda904846c More work towards a working backbuffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
379 QPUTCH(*s);
a8bda904846c More work towards a working backbuffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
380 QPUTCH(*s);
a8bda904846c More work towards a working backbuffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
381 win->chlen++;
a8bda904846c More work towards a working backbuffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
382 } else {
a8bda904846c More work towards a working backbuffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
383 int val = 0;
a8bda904846c More work towards a working backbuffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
384 while (*s >= '0' && *s <= '9') {
a8bda904846c More work towards a working backbuffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
385 val *= 10;
a8bda904846c More work towards a working backbuffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
386 val += (*s - '0');
a8bda904846c More work towards a working backbuffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
387 s++;
a8bda904846c More work towards a working backbuffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
388 }
a8bda904846c More work towards a working backbuffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
389 if (*s != '½') return -1;
a8bda904846c More work towards a working backbuffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
390
a8bda904846c More work towards a working backbuffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
391 if (val < 9)
a8bda904846c More work towards a working backbuffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
392 col = A_DIM | COLOR_PAIR(val);
a8bda904846c More work towards a working backbuffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
393 else if (val < 30)
a8bda904846c More work towards a working backbuffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
394 col = A_BOLD | COLOR_PAIR(val - 9);
a8bda904846c More work towards a working backbuffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
395
a8bda904846c More work towards a working backbuffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
396 QPUTCH('½');
a8bda904846c More work towards a working backbuffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
397
a8bda904846c More work towards a working backbuffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
398 if (!th_growbuf(&(win->buf), &(win->bufsize), &(win->len), sizeof(int)))
a8bda904846c More work towards a working backbuffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
399 return -2;
a8bda904846c More work towards a working backbuffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
400
a8bda904846c More work towards a working backbuffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
401 memcpy(win->buf + win->len, &col, sizeof(int));
a8bda904846c More work towards a working backbuffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
402 win->len += sizeof(int);
a8bda904846c More work towards a working backbuffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
403 }
a8bda904846c More work towards a working backbuffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
404 } else
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
405 if (*s == '\n') {
328
a8bda904846c More work towards a working backbuffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
406 QPUTCH('\n');
a8bda904846c More work towards a working backbuffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
407 QPUTCH(0);
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
408 th_ringbuf_add(win->data, win->buf);
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
409 win->buf = NULL;
328
a8bda904846c More work towards a working backbuffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
410 win->chlen = 0;
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
411 win->dirty = TRUE;
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
412 }
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
413 else
328
a8bda904846c More work towards a working backbuffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
414 if (*s != '\r') {
a8bda904846c More work towards a working backbuffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
415 QPUTCH((unsigned char) *s == 255 ? ' ' : *s);
a8bda904846c More work towards a working backbuffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
416 win->chlen++;
a8bda904846c More work towards a working backbuffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
417 }
a8bda904846c More work towards a working backbuffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
418
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
419 s++;
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
420 }
328
a8bda904846c More work towards a working backbuffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
421
a8bda904846c More work towards a working backbuffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
422 return 0;
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
423 }
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
424
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
425
335
1f4def71b836 Back to simplistic backbuffer implementation due to laziness.
Matti Hamalainen <ccr@tnsp.org>
parents: 334
diff changeset
426 BOOL updateMainWin(BOOL force)
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
427 {
376
1617d0a0c58e Use getmaxy() instead of getmaxyx().
Matti Hamalainen <ccr@tnsp.org>
parents: 372
diff changeset
428 int h, offs;
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
429 qringbuf_t *buf;
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
430
335
1f4def71b836 Back to simplistic backbuffer implementation due to laziness.
Matti Hamalainen <ccr@tnsp.org>
parents: 334
diff changeset
431 /* Check pointers */
1f4def71b836 Back to simplistic backbuffer implementation due to laziness.
Matti Hamalainen <ccr@tnsp.org>
parents: 334
diff changeset
432 if (mainWin == NULL || currWin == NULL)
1f4def71b836 Back to simplistic backbuffer implementation due to laziness.
Matti Hamalainen <ccr@tnsp.org>
parents: 334
diff changeset
433 return FALSE;
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
434
335
1f4def71b836 Back to simplistic backbuffer implementation due to laziness.
Matti Hamalainen <ccr@tnsp.org>
parents: 334
diff changeset
435 /* Check if update is forced or if the window is dirty */
1f4def71b836 Back to simplistic backbuffer implementation due to laziness.
Matti Hamalainen <ccr@tnsp.org>
parents: 334
diff changeset
436 if (!force && !currWin->dirty)
1f4def71b836 Back to simplistic backbuffer implementation due to laziness.
Matti Hamalainen <ccr@tnsp.org>
parents: 334
diff changeset
437 return FALSE;
1f4def71b836 Back to simplistic backbuffer implementation due to laziness.
Matti Hamalainen <ccr@tnsp.org>
parents: 334
diff changeset
438
1f4def71b836 Back to simplistic backbuffer implementation due to laziness.
Matti Hamalainen <ccr@tnsp.org>
parents: 334
diff changeset
439 /* Compute how many lines from backbuffer fit on the screen */
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
440 buf = currWin->data;
376
1617d0a0c58e Use getmaxy() instead of getmaxyx().
Matti Hamalainen <ccr@tnsp.org>
parents: 372
diff changeset
441 h = getmaxy(mainWin);
335
1f4def71b836 Back to simplistic backbuffer implementation due to laziness.
Matti Hamalainen <ccr@tnsp.org>
parents: 334
diff changeset
442
1f4def71b836 Back to simplistic backbuffer implementation due to laziness.
Matti Hamalainen <ccr@tnsp.org>
parents: 334
diff changeset
443 /* Clear and redraw window */
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
444 werase(mainWin);
335
1f4def71b836 Back to simplistic backbuffer implementation due to laziness.
Matti Hamalainen <ccr@tnsp.org>
parents: 334
diff changeset
445 scrollok(mainWin, 1);
1f4def71b836 Back to simplistic backbuffer implementation due to laziness.
Matti Hamalainen <ccr@tnsp.org>
parents: 334
diff changeset
446 for (offs = buf->size - h - currWin->pos; offs >= 0 && offs < buf->size - currWin->pos && offs < buf->size; offs++) {
1f4def71b836 Back to simplistic backbuffer implementation due to laziness.
Matti Hamalainen <ccr@tnsp.org>
parents: 334
diff changeset
447 if (buf->data[offs] != NULL)
1f4def71b836 Back to simplistic backbuffer implementation due to laziness.
Matti Hamalainen <ccr@tnsp.org>
parents: 334
diff changeset
448 printWin(mainWin, buf->data[offs]);
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
449 }
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
450
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
451 currWin->dirty = FALSE;
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
452 wrefresh(mainWin);
335
1f4def71b836 Back to simplistic backbuffer implementation due to laziness.
Matti Hamalainen <ccr@tnsp.org>
parents: 334
diff changeset
453 return TRUE;
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
454 }
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
455
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
456
28
512775f6b081 A refactored ncurses-based UI.
Matti Hamalainen <ccr@tnsp.org>
parents: 27
diff changeset
457 int printFile(FILE *outFile, const char *fmt)
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
458 {
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
459 const char *s = fmt;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
460
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
461 while (*s) {
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
462 if (*s == '½') {
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
463 s++;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
464 if (*s == '½') {
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
465 fputc((unsigned char) *s, outFile);
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
466 s++;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
467 } else {
74
98004129202a Portability fixes.
Matti Hamalainen <ccr@tnsp.org>
parents: 73
diff changeset
468 while (*s && isdigit((int) *s)) s++;
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
469 if (*s != '½') return -1;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
470 s++;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
471 }
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
472 } else {
191
4007b9ac7cde Handle usernames with whitespace by converting whitespaces to chr 255 in
Matti Hamalainen <ccr@tnsp.org>
parents: 190
diff changeset
473 if ((unsigned char) *s == 255)
4007b9ac7cde Handle usernames with whitespace by converting whitespaces to chr 255 in
Matti Hamalainen <ccr@tnsp.org>
parents: 190
diff changeset
474 fputc(' ', outFile);
4007b9ac7cde Handle usernames with whitespace by converting whitespaces to chr 255 in
Matti Hamalainen <ccr@tnsp.org>
parents: 190
diff changeset
475 else
4007b9ac7cde Handle usernames with whitespace by converting whitespaces to chr 255 in
Matti Hamalainen <ccr@tnsp.org>
parents: 190
diff changeset
476 fputc((unsigned char) *s, outFile);
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
477 s++;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
478 }
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
479 }
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
480
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
481 return 0;
28
512775f6b081 A refactored ncurses-based UI.
Matti Hamalainen <ccr@tnsp.org>
parents: 27
diff changeset
482 }
512775f6b081 A refactored ncurses-based UI.
Matti Hamalainen <ccr@tnsp.org>
parents: 27
diff changeset
483
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
484 void printMsgV(nn_window_t *win, int flags, const char *fmt, va_list ap)
28
512775f6b081 A refactored ncurses-based UI.
Matti Hamalainen <ccr@tnsp.org>
parents: 27
diff changeset
485 {
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
486 char tmpStr[128], *buf;
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
487
156
0a9fe14882dc Introduce utility function getTimeStamp() and use it to lessen code duplication.
Matti Hamalainen <ccr@tnsp.org>
parents: 155
diff changeset
488 getTimeStamp(tmpStr, sizeof(tmpStr), "½17½[½11½%H:%M:%S½17½]½0½ ");
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
489
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
490 buf = th_strdup_vprintf(fmt, ap);
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
491
268
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
492 if (optLogFile && (flags & LOG_FILE)) {
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
493 if (flags & LOG_STAMP) printFile(optLogFile, tmpStr);
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
494 printFile(optLogFile, buf);
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
495 fflush(optLogFile);
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
496 }
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
497
268
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
498 if (!optDaemon && (flags & LOG_WINDOW)) {
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
499 nn_window_t *tmp = win != NULL ? win : chatWindows[0];
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
500 if (flags & LOG_STAMP) nn_window_print(tmp, tmpStr);
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
501 nn_window_print(tmp, buf);
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
502 }
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
503
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
504 th_free(buf);
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
505 }
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
506
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
507 void printMsg(nn_window_t *win, const char *fmt, ...)
100
ed4067c10a8a Remove useless buffer usage from error reporting function.
Matti Hamalainen <ccr@tnsp.org>
parents: 98
diff changeset
508 {
ed4067c10a8a Remove useless buffer usage from error reporting function.
Matti Hamalainen <ccr@tnsp.org>
parents: 98
diff changeset
509 va_list ap;
ed4067c10a8a Remove useless buffer usage from error reporting function.
Matti Hamalainen <ccr@tnsp.org>
parents: 98
diff changeset
510
ed4067c10a8a Remove useless buffer usage from error reporting function.
Matti Hamalainen <ccr@tnsp.org>
parents: 98
diff changeset
511 va_start(ap, fmt);
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
512 printMsgV(win, LOG_STAMP | LOG_WINDOW | LOG_FILE, fmt, ap);
103
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
513 va_end(ap);
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
514 }
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
515
322
b9c15c57dc8f Clean up message functions, add new printMsgQ() helper function for messages that should not
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
516 void printMsgF(nn_window_t *win, int flags, const char *fmt, ...)
103
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
517 {
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
518 va_list ap;
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
519
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
520 va_start(ap, fmt);
322
b9c15c57dc8f Clean up message functions, add new printMsgQ() helper function for messages that should not
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
521 printMsgV(win, flags | LOG_STAMP, fmt, ap);
103
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
522 va_end(ap);
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
523 }
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
524
322
b9c15c57dc8f Clean up message functions, add new printMsgQ() helper function for messages that should not
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
525 void printMsgQ(nn_window_t *win, const char *fmt, ...)
103
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
526 {
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
527 va_list ap;
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
528
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
529 va_start(ap, fmt);
322
b9c15c57dc8f Clean up message functions, add new printMsgQ() helper function for messages that should not
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
530 printMsgV(win, LOG_STAMP | LOG_WINDOW, fmt, ap);
100
ed4067c10a8a Remove useless buffer usage from error reporting function.
Matti Hamalainen <ccr@tnsp.org>
parents: 98
diff changeset
531 va_end(ap);
ed4067c10a8a Remove useless buffer usage from error reporting function.
Matti Hamalainen <ccr@tnsp.org>
parents: 98
diff changeset
532 }
ed4067c10a8a Remove useless buffer usage from error reporting function.
Matti Hamalainen <ccr@tnsp.org>
parents: 98
diff changeset
533
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
534
223
03af28fb1c38 Show error messages printed out to stderr only after the program has quit.
Matti Hamalainen <ccr@tnsp.org>
parents: 222
diff changeset
535 char *errorMessages = NULL;
03af28fb1c38 Show error messages printed out to stderr only after the program has quit.
Matti Hamalainen <ccr@tnsp.org>
parents: 222
diff changeset
536
236
71fa0364c058 Report network errors to the user.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
537 void errorMsgV(const char *fmt, va_list ap)
96
7c9538e71c89 Add connection keepalive by sending /listallusers every 15 minutes,
Matti Hamalainen <ccr@tnsp.org>
parents: 92
diff changeset
538 {
385
bbd5edbf1143 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 381
diff changeset
539 char *tmp = th_strdup_vprintf(fmt, ap);
96
7c9538e71c89 Add connection keepalive by sending /listallusers every 15 minutes,
Matti Hamalainen <ccr@tnsp.org>
parents: 92
diff changeset
540
359
8f3c102db611 Fix SOCKS handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 354
diff changeset
541 printMsg(NULL, "%s", tmp);
223
03af28fb1c38 Show error messages printed out to stderr only after the program has quit.
Matti Hamalainen <ccr@tnsp.org>
parents: 222
diff changeset
542
03af28fb1c38 Show error messages printed out to stderr only after the program has quit.
Matti Hamalainen <ccr@tnsp.org>
parents: 222
diff changeset
543 if (errorMessages != NULL) {
03af28fb1c38 Show error messages printed out to stderr only after the program has quit.
Matti Hamalainen <ccr@tnsp.org>
parents: 222
diff changeset
544 char *tmp2 = th_strdup_printf("%s%s", errorMessages, tmp);
03af28fb1c38 Show error messages printed out to stderr only after the program has quit.
Matti Hamalainen <ccr@tnsp.org>
parents: 222
diff changeset
545 th_free(errorMessages);
03af28fb1c38 Show error messages printed out to stderr only after the program has quit.
Matti Hamalainen <ccr@tnsp.org>
parents: 222
diff changeset
546 th_free(tmp);
03af28fb1c38 Show error messages printed out to stderr only after the program has quit.
Matti Hamalainen <ccr@tnsp.org>
parents: 222
diff changeset
547 errorMessages = tmp2;
03af28fb1c38 Show error messages printed out to stderr only after the program has quit.
Matti Hamalainen <ccr@tnsp.org>
parents: 222
diff changeset
548 } else
03af28fb1c38 Show error messages printed out to stderr only after the program has quit.
Matti Hamalainen <ccr@tnsp.org>
parents: 222
diff changeset
549 errorMessages = tmp;
96
7c9538e71c89 Add connection keepalive by sending /listallusers every 15 minutes,
Matti Hamalainen <ccr@tnsp.org>
parents: 92
diff changeset
550 }
7c9538e71c89 Add connection keepalive by sending /listallusers every 15 minutes,
Matti Hamalainen <ccr@tnsp.org>
parents: 92
diff changeset
551
236
71fa0364c058 Report network errors to the user.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
552 void errorMsg(const char *fmt, ...)
71fa0364c058 Report network errors to the user.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
553 {
71fa0364c058 Report network errors to the user.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
554 va_list ap;
71fa0364c058 Report network errors to the user.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
555
71fa0364c058 Report network errors to the user.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
556 va_start(ap, fmt);
71fa0364c058 Report network errors to the user.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
557 errorMsgV(fmt, ap);
71fa0364c058 Report network errors to the user.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
558 va_end(ap);
71fa0364c058 Report network errors to the user.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
559 }
71fa0364c058 Report network errors to the user.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
560
71fa0364c058 Report network errors to the user.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
561 void errorFunc(struct _nn_conn_t *conn, const char *fmt, va_list ap)
71fa0364c058 Report network errors to the user.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
562 {
262
6d48fc4fd421 Shut up some trivial warnings.
Matti Hamalainen <ccr@tnsp.org>
parents: 258
diff changeset
563 (void) conn;
236
71fa0364c058 Report network errors to the user.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
564 errorMsgV(fmt, ap);
71fa0364c058 Report network errors to the user.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
565 }
71fa0364c058 Report network errors to the user.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
566
71fa0364c058 Report network errors to the user.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
567 void messageFunc(struct _nn_conn_t *conn, const char *fmt, va_list ap)
71fa0364c058 Report network errors to the user.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
568 {
262
6d48fc4fd421 Shut up some trivial warnings.
Matti Hamalainen <ccr@tnsp.org>
parents: 258
diff changeset
569 (void) conn;
354
c01e42fc9adb More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents: 353
diff changeset
570 printMsgV(NULL, LOG_STAMP | LOG_WINDOW | LOG_FILE, fmt, ap);
236
71fa0364c058 Report network errors to the user.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
571 }
71fa0364c058 Report network errors to the user.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
572
225
801ac37321f6 Sanitize ignore handling; Also action messages and PRVs were not being properly ignored, fixed.
Matti Hamalainen <ccr@tnsp.org>
parents: 223
diff changeset
573
801ac37321f6 Sanitize ignore handling; Also action messages and PRVs were not being properly ignored, fixed.
Matti Hamalainen <ccr@tnsp.org>
parents: 223
diff changeset
574 BOOL checkIgnoreList(const char *name)
801ac37321f6 Sanitize ignore handling; Also action messages and PRVs were not being properly ignored, fixed.
Matti Hamalainen <ccr@tnsp.org>
parents: 223
diff changeset
575 {
265
b9c650db8a6a Rename variable nnIgnoreList to setIgnoreList.
Matti Hamalainen <ccr@tnsp.org>
parents: 264
diff changeset
576 qlist_t *node = setIgnoreList;
225
801ac37321f6 Sanitize ignore handling; Also action messages and PRVs were not being properly ignored, fixed.
Matti Hamalainen <ccr@tnsp.org>
parents: 223
diff changeset
577 while (node != NULL) {
372
b9f0bdad6285 Use th_strcasecmp() and th_strncasecmp().
Matti Hamalainen <ccr@tnsp.org>
parents: 369
diff changeset
578 if (th_strcasecmp(name, (char *) node->data) == 0)
225
801ac37321f6 Sanitize ignore handling; Also action messages and PRVs were not being properly ignored, fixed.
Matti Hamalainen <ccr@tnsp.org>
parents: 223
diff changeset
579 return TRUE;
801ac37321f6 Sanitize ignore handling; Also action messages and PRVs were not being properly ignored, fixed.
Matti Hamalainen <ccr@tnsp.org>
parents: 223
diff changeset
580 node = node->next;
801ac37321f6 Sanitize ignore handling; Also action messages and PRVs were not being properly ignored, fixed.
Matti Hamalainen <ccr@tnsp.org>
parents: 223
diff changeset
581 }
801ac37321f6 Sanitize ignore handling; Also action messages and PRVs were not being properly ignored, fixed.
Matti Hamalainen <ccr@tnsp.org>
parents: 223
diff changeset
582 return FALSE;
801ac37321f6 Sanitize ignore handling; Also action messages and PRVs were not being properly ignored, fixed.
Matti Hamalainen <ccr@tnsp.org>
parents: 223
diff changeset
583 }
801ac37321f6 Sanitize ignore handling; Also action messages and PRVs were not being properly ignored, fixed.
Matti Hamalainen <ccr@tnsp.org>
parents: 223
diff changeset
584
801ac37321f6 Sanitize ignore handling; Also action messages and PRVs were not being properly ignored, fixed.
Matti Hamalainen <ccr@tnsp.org>
parents: 223
diff changeset
585
168
2e4850ece456 Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 165
diff changeset
586 int handleUser(nn_conn_t *conn, const char *str)
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
587 {
108
f323b137ca08 Tab-completion now works with cycling, but bugs with names that have whitespaces.
Matti Hamalainen <ccr@tnsp.org>
parents: 107
diff changeset
588 const char *msg = "</USER><MESSAGE>", *p = str;
229
08d4355d6fc9 Repair automatic PRV target setting.
Matti Hamalainen <ccr@tnsp.org>
parents: 228
diff changeset
589 BOOL isMine, isIgnored = FALSE;
291
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
590 char *s, *t, *userName;
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
591
168
2e4850ece456 Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 165
diff changeset
592 (void) conn;
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
593
229
08d4355d6fc9 Repair automatic PRV target setting.
Matti Hamalainen <ccr@tnsp.org>
parents: 228
diff changeset
594 /* Find start of the message */
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
595 s = strstr(str, msg);
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
596 if (!s) return 1;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
597 *s = 0;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
598 s += strlen(msg);
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
599
229
08d4355d6fc9 Repair automatic PRV target setting.
Matti Hamalainen <ccr@tnsp.org>
parents: 228
diff changeset
600 /* Find end of the message */
08d4355d6fc9 Repair automatic PRV target setting.
Matti Hamalainen <ccr@tnsp.org>
parents: 228
diff changeset
601 t = strstr(s, "</MESSAGE>");
08d4355d6fc9 Repair automatic PRV target setting.
Matti Hamalainen <ccr@tnsp.org>
parents: 228
diff changeset
602 if (!t) return 3;
08d4355d6fc9 Repair automatic PRV target setting.
Matti Hamalainen <ccr@tnsp.org>
parents: 228
diff changeset
603 *t = 0;
08d4355d6fc9 Repair automatic PRV target setting.
Matti Hamalainen <ccr@tnsp.org>
parents: 228
diff changeset
604
08d4355d6fc9 Repair automatic PRV target setting.
Matti Hamalainen <ccr@tnsp.org>
parents: 228
diff changeset
605 /* Decode message string */
97
218efd2f0641 Rename functions for clarity.
Matti Hamalainen <ccr@tnsp.org>
parents: 96
diff changeset
606 s = nn_decode_str1(s);
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
607 if (!s) return -1;
229
08d4355d6fc9 Repair automatic PRV target setting.
Matti Hamalainen <ccr@tnsp.org>
parents: 228
diff changeset
608
08d4355d6fc9 Repair automatic PRV target setting.
Matti Hamalainen <ccr@tnsp.org>
parents: 228
diff changeset
609 /* Decode username */
225
801ac37321f6 Sanitize ignore handling; Also action messages and PRVs were not being properly ignored, fixed.
Matti Hamalainen <ccr@tnsp.org>
parents: 223
diff changeset
610 userName = nn_decode_str1(p);
801ac37321f6 Sanitize ignore handling; Also action messages and PRVs were not being properly ignored, fixed.
Matti Hamalainen <ccr@tnsp.org>
parents: 223
diff changeset
611 if (!userName) {
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
612 th_free(s);
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
613 return -2;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
614 }
229
08d4355d6fc9 Repair automatic PRV target setting.
Matti Hamalainen <ccr@tnsp.org>
parents: 228
diff changeset
615
08d4355d6fc9 Repair automatic PRV target setting.
Matti Hamalainen <ccr@tnsp.org>
parents: 228
diff changeset
616 /* Check if the username is on our ignore list and
08d4355d6fc9 Repair automatic PRV target setting.
Matti Hamalainen <ccr@tnsp.org>
parents: 228
diff changeset
617 * that it is not our OWN username!
08d4355d6fc9 Repair automatic PRV target setting.
Matti Hamalainen <ccr@tnsp.org>
parents: 228
diff changeset
618 */
225
801ac37321f6 Sanitize ignore handling; Also action messages and PRVs were not being properly ignored, fixed.
Matti Hamalainen <ccr@tnsp.org>
parents: 223
diff changeset
619 isMine = strcmp(userName, optUserName) == 0;
258
8a0f7446318e General cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 254
diff changeset
620 isIgnored = setIgnoreMode && !isMine && checkIgnoreList(userName);
108
f323b137ca08 Tab-completion now works with cycling, but bugs with names that have whitespaces.
Matti Hamalainen <ccr@tnsp.org>
parents: 107
diff changeset
621
229
08d4355d6fc9 Repair automatic PRV target setting.
Matti Hamalainen <ccr@tnsp.org>
parents: 228
diff changeset
622 /* Is it a special control message? */
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
623 if (*s == '/') {
108
f323b137ca08 Tab-completion now works with cycling, but bugs with names that have whitespaces.
Matti Hamalainen <ccr@tnsp.org>
parents: 107
diff changeset
624 /* Ignore room join/leave messages */
162
e59cec397811 Add a debug mode option (commandline) and enable certain features when we are in debug mode.
Matti Hamalainen <ccr@tnsp.org>
parents: 161
diff changeset
625 if (!optDebug && (strstr(s, "left the room") || strstr(s, "joined the room from")))
229
08d4355d6fc9 Repair automatic PRV target setting.
Matti Hamalainen <ccr@tnsp.org>
parents: 228
diff changeset
626 goto done;
108
f323b137ca08 Tab-completion now works with cycling, but bugs with names that have whitespaces.
Matti Hamalainen <ccr@tnsp.org>
parents: 107
diff changeset
627
97
218efd2f0641 Rename functions for clarity.
Matti Hamalainen <ccr@tnsp.org>
parents: 96
diff changeset
628 t = nn_strip_tags(s + 1);
291
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
629 if (!strncmp(t, "BPRV ", 5)) {
293
ff39ebf05b40 Fix unwindowed PRVs.
Matti Hamalainen <ccr@tnsp.org>
parents: 291
diff changeset
630 char *name, *tmp, *msg, *h;
ff39ebf05b40 Fix unwindowed PRVs.
Matti Hamalainen <ccr@tnsp.org>
parents: 291
diff changeset
631 nn_window_t *win;
ff39ebf05b40 Fix unwindowed PRVs.
Matti Hamalainen <ccr@tnsp.org>
parents: 291
diff changeset
632 h = nn_decode_str2(t + 1);
291
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
633
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
634 if (!strncmp(t, "BPRV from ", 10)) {
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
635 name = nn_decode_str2(t + 10);
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
636 isMine = FALSE;
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
637 } else {
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
638 name = nn_decode_str2(t + 8);
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
639 isMine = TRUE;
188
6b399b7ce40b Automatically grab PRV target from incoming PRV if target not already set.
Matti Hamalainen <ccr@tnsp.org>
parents: 187
diff changeset
640 }
291
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
641
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
642 for (tmp = name; *tmp && *tmp != ':'; tmp++);
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
643 if (tmp[0] != 0 && tmp[1] == ' ')
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
644 msg = tmp + 2;
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
645 else
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
646 msg = "";
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
647 *tmp = 0;
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
648
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
649 isIgnored = setIgnoreMode && checkIgnoreList(name);
325
c086345d176b Move some functions to libnnchat and rename nn_find_window to findWindow()
Matti Hamalainen <ccr@tnsp.org>
parents: 324
diff changeset
650 win = findWindow(name);
293
ff39ebf05b40 Fix unwindowed PRVs.
Matti Hamalainen <ccr@tnsp.org>
parents: 291
diff changeset
651
322
b9c15c57dc8f Clean up message functions, add new printMsgQ() helper function for messages that should not
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
652 if (win != NULL) {
388
f45673fe6b23 Log private messages always in the PRV format.
Matti Hamalainen <ccr@tnsp.org>
parents: 385
diff changeset
653 printMsgF(win, isIgnored ? 0 : LOG_WINDOW,
322
b9c15c57dc8f Clean up message functions, add new printMsgQ() helper function for messages that should not
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
654 "½5½<½%d½%s½5½>½0½ %s\n",
b9c15c57dc8f Clean up message functions, add new printMsgQ() helper function for messages that should not
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
655 isMine ? 14 : 15, isMine ? optUserName : name, msg);
388
f45673fe6b23 Log private messages always in the PRV format.
Matti Hamalainen <ccr@tnsp.org>
parents: 385
diff changeset
656
f45673fe6b23 Log private messages always in the PRV format.
Matti Hamalainen <ccr@tnsp.org>
parents: 385
diff changeset
657 printMsgF(NULL, LOG_FILE, "½11½%s½0½\n", h);
322
b9c15c57dc8f Clean up message functions, add new printMsgQ() helper function for messages that should not
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
658 } else {
b9c15c57dc8f Clean up message functions, add new printMsgQ() helper function for messages that should not
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
659 printMsgF(NULL, isIgnored ? LOG_FILE : (LOG_WINDOW | LOG_FILE),
b9c15c57dc8f Clean up message functions, add new printMsgQ() helper function for messages that should not
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
660 "½11½%s½0½\n", h);
b9c15c57dc8f Clean up message functions, add new printMsgQ() helper function for messages that should not
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
661 }
314
77f2093f9310 Fix a memleak.
Matti Hamalainen <ccr@tnsp.org>
parents: 313
diff changeset
662 th_free(name);
293
ff39ebf05b40 Fix unwindowed PRVs.
Matti Hamalainen <ccr@tnsp.org>
parents: 291
diff changeset
663 th_free(h);
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
664 } else {
229
08d4355d6fc9 Repair automatic PRV target setting.
Matti Hamalainen <ccr@tnsp.org>
parents: 228
diff changeset
665 /* It's an action (/me) */
291
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
666 char *h = nn_decode_str2(t);
322
b9c15c57dc8f Clean up message functions, add new printMsgQ() helper function for messages that should not
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
667 printMsgF(NULL, isIgnored ? LOG_FILE : (LOG_WINDOW | LOG_FILE),
b9c15c57dc8f Clean up message functions, add new printMsgQ() helper function for messages that should not
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
668 "½9½* %s½0½\n", h);
291
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
669 th_free(h);
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
670 }
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
671 th_free(t);
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
672 } else {
229
08d4355d6fc9 Repair automatic PRV target setting.
Matti Hamalainen <ccr@tnsp.org>
parents: 228
diff changeset
673 /* It's a normal message */
291
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
674 char *h;
97
218efd2f0641 Rename functions for clarity.
Matti Hamalainen <ccr@tnsp.org>
parents: 96
diff changeset
675 t = nn_strip_tags(s);
218efd2f0641 Rename functions for clarity.
Matti Hamalainen <ccr@tnsp.org>
parents: 96
diff changeset
676 h = nn_decode_str2(t);
322
b9c15c57dc8f Clean up message functions, add new printMsgQ() helper function for messages that should not
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
677 printMsgF(NULL, isIgnored ? LOG_FILE : (LOG_WINDOW | LOG_FILE),
b9c15c57dc8f Clean up message functions, add new printMsgQ() helper function for messages that should not
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
678 "½5½<½%d½%s½5½>½0½ %s\n", isMine ? 14 : 15, userName, h);
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
679 th_free(h);
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
680 th_free(t);
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
681 }
108
f323b137ca08 Tab-completion now works with cycling, but bugs with names that have whitespaces.
Matti Hamalainen <ccr@tnsp.org>
parents: 107
diff changeset
682
229
08d4355d6fc9 Repair automatic PRV target setting.
Matti Hamalainen <ccr@tnsp.org>
parents: 228
diff changeset
683 done:
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
684 th_free(s);
225
801ac37321f6 Sanitize ignore handling; Also action messages and PRVs were not being properly ignored, fixed.
Matti Hamalainen <ccr@tnsp.org>
parents: 223
diff changeset
685 th_free(userName);
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
686 return 0;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
687 }
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
688
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
689
168
2e4850ece456 Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 165
diff changeset
690 int handleLogin(nn_conn_t *conn, const char *str)
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
691 {
156
0a9fe14882dc Introduce utility function getTimeStamp() and use it to lessen code duplication.
Matti Hamalainen <ccr@tnsp.org>
parents: 155
diff changeset
692 char tmpStr[256];
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
693
156
0a9fe14882dc Introduce utility function getTimeStamp() and use it to lessen code duplication.
Matti Hamalainen <ccr@tnsp.org>
parents: 155
diff changeset
694 getTimeStamp(tmpStr, sizeof(tmpStr), "%c");
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
695
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
696 if (!strncmp(str, "FAILURE", 7)) {
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
697 printMsg(NULL, "½1½Login failure½0½ - ½3½%s½0½\n", tmpStr);
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
698 return -2;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
699 } else if (!strncmp(str, "SUCCESS", 7)) {
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
700 printMsg(NULL, "½2½Login success½0½ - ½3½%s½0½\n", tmpStr);
198
21a37995c3fb Make configuration username/password overridable on command line.
Matti Hamalainen <ccr@tnsp.org>
parents: 197
diff changeset
701 nn_conn_send_msg(conn, optUserNameEnc, "%%2FRequestUserList");
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
702 return 0;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
703 } else
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
704 return 1;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
705 }
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
706
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
707
168
2e4850ece456 Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 165
diff changeset
708 int handleAddUser(nn_conn_t *conn, const char *str)
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
709 {
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
710 char *p, *s = strstr(str, "</ADD_USER>");
297
d34910f1b1e1 Print messages about user leaving or joining the chat in the specific buffer, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 293
diff changeset
711 nn_window_t *win;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
712
168
2e4850ece456 Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 165
diff changeset
713 (void) conn;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
714
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
715 if (!s) return 1;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
716 *s = 0;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
717
97
218efd2f0641 Rename functions for clarity.
Matti Hamalainen <ccr@tnsp.org>
parents: 96
diff changeset
718 p = nn_dbldecode_str(str);
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
719 if (!p) return -1;
103
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
720
325
c086345d176b Move some functions to libnnchat and rename nn_find_window to findWindow()
Matti Hamalainen <ccr@tnsp.org>
parents: 324
diff changeset
721 win = findWindow(p);
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
722 nn_userhash_insert(nnUsers, nn_username_encode(p));
103
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
723
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
724 printMsg(NULL, "! ½3½%s½0½ ½2½ADDED.½0½\n", p);
297
d34910f1b1e1 Print messages about user leaving or joining the chat in the specific buffer, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 293
diff changeset
725 if (win != NULL)
d34910f1b1e1 Print messages about user leaving or joining the chat in the specific buffer, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 293
diff changeset
726 printMsg(win, "! ½3½%s½0½ ½2½joined the chat.½0½\n", p);
d34910f1b1e1 Print messages about user leaving or joining the chat in the specific buffer, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 293
diff changeset
727
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
728 th_free(p);
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
729 return 0;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
730 }
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
731
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
732
168
2e4850ece456 Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 165
diff changeset
733 int handleDeleteUser(nn_conn_t *conn, const char *str)
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
734 {
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
735 char *p, *s = strstr(str, "</DELETE_USER>");
297
d34910f1b1e1 Print messages about user leaving or joining the chat in the specific buffer, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 293
diff changeset
736 nn_window_t *win;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
737
168
2e4850ece456 Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 165
diff changeset
738 (void) conn;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
739
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
740 if (!s) return 1;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
741 *s = 0;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
742
97
218efd2f0641 Rename functions for clarity.
Matti Hamalainen <ccr@tnsp.org>
parents: 96
diff changeset
743 p = nn_dbldecode_str(str);
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
744 if (!p) return -1;
103
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
745
325
c086345d176b Move some functions to libnnchat and rename nn_find_window to findWindow()
Matti Hamalainen <ccr@tnsp.org>
parents: 324
diff changeset
746 win = findWindow(p);
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
747 nn_userhash_delete(nnUsers, nn_username_encode(p));
107
8037a3a7e491 Implement username tab-completion. It's still buggy, tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 104
diff changeset
748
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
749 printMsg(NULL, "! ½3½%s½0½ ½1½DELETED.½0½\n", p);
297
d34910f1b1e1 Print messages about user leaving or joining the chat in the specific buffer, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 293
diff changeset
750 if (win != NULL)
d34910f1b1e1 Print messages about user leaving or joining the chat in the specific buffer, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 293
diff changeset
751 printMsg(win, "! ½3½%s½0½ ½1½left the chat.½0½\n", p);
d34910f1b1e1 Print messages about user leaving or joining the chat in the specific buffer, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 293
diff changeset
752
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
753 th_free(p);
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
754 return 0;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
755 }
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
756
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
757
168
2e4850ece456 Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 165
diff changeset
758 int handleFoo(nn_conn_t *conn, const char *str)
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
759 {
168
2e4850ece456 Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 165
diff changeset
760 (void) conn; (void) str;
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
761
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
762 return 0;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
763 }
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
764
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
765
168
2e4850ece456 Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 165
diff changeset
766 int handleBoot(nn_conn_t *conn, const char *str)
96
7c9538e71c89 Add connection keepalive by sending /listallusers every 15 minutes,
Matti Hamalainen <ccr@tnsp.org>
parents: 92
diff changeset
767 {
168
2e4850ece456 Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 165
diff changeset
768 (void) conn; (void) str;
96
7c9538e71c89 Add connection keepalive by sending /listallusers every 15 minutes,
Matti Hamalainen <ccr@tnsp.org>
parents: 92
diff changeset
769 errorMsg("Booted by server.\n");
7c9538e71c89 Add connection keepalive by sending /listallusers every 15 minutes,
Matti Hamalainen <ccr@tnsp.org>
parents: 92
diff changeset
770 return -1;
7c9538e71c89 Add connection keepalive by sending /listallusers every 15 minutes,
Matti Hamalainen <ccr@tnsp.org>
parents: 92
diff changeset
771 }
7c9538e71c89 Add connection keepalive by sending /listallusers every 15 minutes,
Matti Hamalainen <ccr@tnsp.org>
parents: 92
diff changeset
772
7c9538e71c89 Add connection keepalive by sending /listallusers every 15 minutes,
Matti Hamalainen <ccr@tnsp.org>
parents: 92
diff changeset
773
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
774 typedef struct {
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
775 char *cmd;
129
4235ff4ced04 "Optimize" protocol handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 128
diff changeset
776 ssize_t len;
168
2e4850ece456 Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 165
diff changeset
777 int (*handler)(nn_conn_t *, const char *);
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
778 } protocmd_t;
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
779
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
780
129
4235ff4ced04 "Optimize" protocol handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 128
diff changeset
781 static protocmd_t protoCmds[] = {
4235ff4ced04 "Optimize" protocol handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 128
diff changeset
782 { "<USER>", -1, handleUser },
4235ff4ced04 "Optimize" protocol handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 128
diff changeset
783 { "<LOGIN_", -1, handleLogin },
4235ff4ced04 "Optimize" protocol handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 128
diff changeset
784 { "<DELETE_USER>", -1, handleDeleteUser },
4235ff4ced04 "Optimize" protocol handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 128
diff changeset
785 { "<ADD_USER>", -1, handleAddUser },
4235ff4ced04 "Optimize" protocol handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 128
diff changeset
786 { "<NUMCLIENTS>", -1, handleFoo },
4235ff4ced04 "Optimize" protocol handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 128
diff changeset
787 { "<BOOT />", -1, handleBoot },
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
788 };
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
789
108
f323b137ca08 Tab-completion now works with cycling, but bugs with names that have whitespaces.
Matti Hamalainen <ccr@tnsp.org>
parents: 107
diff changeset
790 static const int nprotoCmds = sizeof(protoCmds) / sizeof(protoCmds[0]);
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
791
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
792
168
2e4850ece456 Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 165
diff changeset
793 int handleProtocol(nn_conn_t *conn, const char *buf, const ssize_t bufLen)
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
794 {
130
352ec3c300e4 A different initialization.
Matti Hamalainen <ccr@tnsp.org>
parents: 129
diff changeset
795 static BOOL protoCmdsInit = FALSE;
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
796 int i;
130
352ec3c300e4 A different initialization.
Matti Hamalainen <ccr@tnsp.org>
parents: 129
diff changeset
797
352ec3c300e4 A different initialization.
Matti Hamalainen <ccr@tnsp.org>
parents: 129
diff changeset
798 if (!protoCmdsInit) {
352ec3c300e4 A different initialization.
Matti Hamalainen <ccr@tnsp.org>
parents: 129
diff changeset
799 for (i = 0; i < nprotoCmds; i++)
352ec3c300e4 A different initialization.
Matti Hamalainen <ccr@tnsp.org>
parents: 129
diff changeset
800 protoCmds[i].len = strlen(protoCmds[i].cmd);
352ec3c300e4 A different initialization.
Matti Hamalainen <ccr@tnsp.org>
parents: 129
diff changeset
801 protoCmdsInit = TRUE;
352ec3c300e4 A different initialization.
Matti Hamalainen <ccr@tnsp.org>
parents: 129
diff changeset
802 }
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
803
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
804 for (i = 0; i < nprotoCmds; i++) {
129
4235ff4ced04 "Optimize" protocol handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 128
diff changeset
805 ssize_t cmdLen = protoCmds[i].len;
4235ff4ced04 "Optimize" protocol handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 128
diff changeset
806 if (cmdLen < bufLen && !strncmp(buf, protoCmds[i].cmd, cmdLen))
168
2e4850ece456 Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 165
diff changeset
807 return protoCmds[i].handler(conn, buf + cmdLen);
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
808 }
162
e59cec397811 Add a debug mode option (commandline) and enable certain features when we are in debug mode.
Matti Hamalainen <ccr@tnsp.org>
parents: 161
diff changeset
809
e59cec397811 Add a debug mode option (commandline) and enable certain features when we are in debug mode.
Matti Hamalainen <ccr@tnsp.org>
parents: 161
diff changeset
810 if (optDebug) {
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
811 printMsg(NULL, "Unknown protocmd: \"%s\"\n", buf);
162
e59cec397811 Add a debug mode option (commandline) and enable certain features when we are in debug mode.
Matti Hamalainen <ccr@tnsp.org>
parents: 161
diff changeset
812 return 0;
e59cec397811 Add a debug mode option (commandline) and enable certain features when we are in debug mode.
Matti Hamalainen <ccr@tnsp.org>
parents: 161
diff changeset
813 } else
e59cec397811 Add a debug mode option (commandline) and enable certain features when we are in debug mode.
Matti Hamalainen <ccr@tnsp.org>
parents: 161
diff changeset
814 return 1;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
815 }
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
816
125
d03ebefb92a6 Improve internal command handling, use fork() and execlp() instead of system() for opening profiles into external browser's tabs.
Matti Hamalainen <ccr@tnsp.org>
parents: 123
diff changeset
817 char * trimLeft(char *buf)
d03ebefb92a6 Improve internal command handling, use fork() and execlp() instead of system() for opening profiles into external browser's tabs.
Matti Hamalainen <ccr@tnsp.org>
parents: 123
diff changeset
818 {
202
4b93442bd411 Silence a warning under Solaris and few other systems by using th_isspace() wrapper instead of isspace().
Matti Hamalainen <ccr@tnsp.org>
parents: 198
diff changeset
819 while (*buf != 0 && th_isspace(*buf)) buf++;
125
d03ebefb92a6 Improve internal command handling, use fork() and execlp() instead of system() for opening profiles into external browser's tabs.
Matti Hamalainen <ccr@tnsp.org>
parents: 123
diff changeset
820 return buf;
d03ebefb92a6 Improve internal command handling, use fork() and execlp() instead of system() for opening profiles into external browser's tabs.
Matti Hamalainen <ccr@tnsp.org>
parents: 123
diff changeset
821 }
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
822
140
2d2ef5bbcc11 Use th-libs linked list code for managing ignore list.
Matti Hamalainen <ccr@tnsp.org>
parents: 139
diff changeset
823 int compareUsername(const void *s1, const void *s2)
2d2ef5bbcc11 Use th-libs linked list code for managing ignore list.
Matti Hamalainen <ccr@tnsp.org>
parents: 139
diff changeset
824 {
372
b9f0bdad6285 Use th_strcasecmp() and th_strncasecmp().
Matti Hamalainen <ccr@tnsp.org>
parents: 369
diff changeset
825 return th_strcasecmp((char *) s1, (char *) s2);
140
2d2ef5bbcc11 Use th-libs linked list code for managing ignore list.
Matti Hamalainen <ccr@tnsp.org>
parents: 139
diff changeset
826 }
2d2ef5bbcc11 Use th-libs linked list code for managing ignore list.
Matti Hamalainen <ccr@tnsp.org>
parents: 139
diff changeset
827
168
2e4850ece456 Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 165
diff changeset
828 int handleUserInput(nn_conn_t *conn, char *buf, size_t bufLen)
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
829 {
78
745f670068dc Add functions to simplify code.
Matti Hamalainen <ccr@tnsp.org>
parents: 77
diff changeset
830 char *tmpStr, tmpBuf[4096];
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
831 BOOL result;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
832
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
833 /* Trim right */
112
c4865ac2386c Fix right-side trimming of command line.
Matti Hamalainen <ccr@tnsp.org>
parents: 111
diff changeset
834 bufLen--;
c4865ac2386c Fix right-side trimming of command line.
Matti Hamalainen <ccr@tnsp.org>
parents: 111
diff changeset
835 buf[bufLen--] = 0;
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
836 while (bufLen > 0 && (buf[bufLen] == '\n' || buf[bufLen] == '\r' || th_isspace(buf[bufLen])))
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
837 buf[bufLen--] = 0;
258
8a0f7446318e General cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 254
diff changeset
838
8a0f7446318e General cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 254
diff changeset
839 /* Decode completed usernames */
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
840 nn_username_decode(buf);
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
841
109
1323a7f88c21 Fix /w -command and add some comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
842 /* Check for special user commands */
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
843 if (*buf == 0) {
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
844 return 1;
258
8a0f7446318e General cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 254
diff changeset
845 }
372
b9f0bdad6285 Use th_strcasecmp() and th_strncasecmp().
Matti Hamalainen <ccr@tnsp.org>
parents: 369
diff changeset
846 else if (!th_strncasecmp(buf, "/color ", 7)) {
109
1323a7f88c21 Fix /w -command and add some comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
847 /* Change color */
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
848 int tmpInt;
132
10daf4660cae Use th_get_hex_triplet().
Matti Hamalainen <ccr@tnsp.org>
parents: 130
diff changeset
849 if ((tmpInt = th_get_hex_triplet(trimLeft(buf + 7))) < 0) {
322
b9c15c57dc8f Clean up message functions, add new printMsgQ() helper function for messages that should not
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
850 printMsgQ(currWin, "Invalid color value '%s'\n", buf+7);
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
851 return 1;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
852 }
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
853 optUserColor = tmpInt;
322
b9c15c57dc8f Clean up message functions, add new printMsgQ() helper function for messages that should not
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
854 printMsgQ(currWin, "Setting color to #%06x\n", optUserColor);
198
21a37995c3fb Make configuration username/password overridable on command line.
Matti Hamalainen <ccr@tnsp.org>
parents: 197
diff changeset
855 nn_conn_send_msg(conn, optUserNameEnc, "%%2FSetFontColor%%20%%2Dcolor%%20%06X", optUserColor);
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
856 return 0;
258
8a0f7446318e General cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 254
diff changeset
857 }
372
b9f0bdad6285 Use th_strcasecmp() and th_strncasecmp().
Matti Hamalainen <ccr@tnsp.org>
parents: 369
diff changeset
858 else if (!th_strncasecmp(buf, "/ignore", 7)) {
140
2d2ef5bbcc11 Use th-libs linked list code for managing ignore list.
Matti Hamalainen <ccr@tnsp.org>
parents: 139
diff changeset
859 char *name = trimLeft(buf + 7);
2d2ef5bbcc11 Use th-libs linked list code for managing ignore list.
Matti Hamalainen <ccr@tnsp.org>
parents: 139
diff changeset
860 if (strlen(name) > 0) {
2d2ef5bbcc11 Use th-libs linked list code for managing ignore list.
Matti Hamalainen <ccr@tnsp.org>
parents: 139
diff changeset
861 /* Add or remove someone to/from ignore */
265
b9c650db8a6a Rename variable nnIgnoreList to setIgnoreList.
Matti Hamalainen <ccr@tnsp.org>
parents: 264
diff changeset
862 qlist_t *user = th_llist_find_func(setIgnoreList, name, compareUsername);
140
2d2ef5bbcc11 Use th-libs linked list code for managing ignore list.
Matti Hamalainen <ccr@tnsp.org>
parents: 139
diff changeset
863 if (user != NULL) {
322
b9c15c57dc8f Clean up message functions, add new printMsgQ() helper function for messages that should not
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
864 printMsgQ(currWin, "Removed user '%s' from ignore.\n", name);
265
b9c650db8a6a Rename variable nnIgnoreList to setIgnoreList.
Matti Hamalainen <ccr@tnsp.org>
parents: 264
diff changeset
865 th_llist_delete_node(&setIgnoreList, user);
140
2d2ef5bbcc11 Use th-libs linked list code for managing ignore list.
Matti Hamalainen <ccr@tnsp.org>
parents: 139
diff changeset
866 } else {
322
b9c15c57dc8f Clean up message functions, add new printMsgQ() helper function for messages that should not
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
867 printMsgQ(currWin, "Now ignoring '%s'.\n", name);
265
b9c650db8a6a Rename variable nnIgnoreList to setIgnoreList.
Matti Hamalainen <ccr@tnsp.org>
parents: 264
diff changeset
868 th_llist_append(&setIgnoreList, th_strdup(name));
140
2d2ef5bbcc11 Use th-libs linked list code for managing ignore list.
Matti Hamalainen <ccr@tnsp.org>
parents: 139
diff changeset
869 }
2d2ef5bbcc11 Use th-libs linked list code for managing ignore list.
Matti Hamalainen <ccr@tnsp.org>
parents: 139
diff changeset
870 } else {
2d2ef5bbcc11 Use th-libs linked list code for managing ignore list.
Matti Hamalainen <ccr@tnsp.org>
parents: 139
diff changeset
871 /* Just list whomever is in ignore now */
265
b9c650db8a6a Rename variable nnIgnoreList to setIgnoreList.
Matti Hamalainen <ccr@tnsp.org>
parents: 264
diff changeset
872 qlist_t *user = setIgnoreList;
b9c650db8a6a Rename variable nnIgnoreList to setIgnoreList.
Matti Hamalainen <ccr@tnsp.org>
parents: 264
diff changeset
873 ssize_t nuser = th_llist_length(setIgnoreList);
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
874 char *result = th_strdup_printf("Users ignored (%d): ", nuser);
140
2d2ef5bbcc11 Use th-libs linked list code for managing ignore list.
Matti Hamalainen <ccr@tnsp.org>
parents: 139
diff changeset
875 while (user != NULL) {
2d2ef5bbcc11 Use th-libs linked list code for managing ignore list.
Matti Hamalainen <ccr@tnsp.org>
parents: 139
diff changeset
876 if (user->data != NULL) {
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
877 th_pstr_printf(&result, "%s'%s'", result, (char *) user->data);
140
2d2ef5bbcc11 Use th-libs linked list code for managing ignore list.
Matti Hamalainen <ccr@tnsp.org>
parents: 139
diff changeset
878 if (--nuser > 0)
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
879 th_pstr_printf(&result, "%s, ", result);
140
2d2ef5bbcc11 Use th-libs linked list code for managing ignore list.
Matti Hamalainen <ccr@tnsp.org>
parents: 139
diff changeset
880 }
2d2ef5bbcc11 Use th-libs linked list code for managing ignore list.
Matti Hamalainen <ccr@tnsp.org>
parents: 139
diff changeset
881 user = user->next;
2d2ef5bbcc11 Use th-libs linked list code for managing ignore list.
Matti Hamalainen <ccr@tnsp.org>
parents: 139
diff changeset
882 }
322
b9c15c57dc8f Clean up message functions, add new printMsgQ() helper function for messages that should not
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
883 printMsgQ(currWin, "%s\n", result);
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
884 th_free(result);
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
885 }
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
886 return 0;
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
887 }
372
b9f0bdad6285 Use th_strcasecmp() and th_strncasecmp().
Matti Hamalainen <ccr@tnsp.org>
parents: 369
diff changeset
888 else if (!th_strncasecmp(buf, "/query", 6)) {
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
889 char *name = trimLeft(buf + 6);
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
890 if (strlen(name) > 0) {
303
859578ec3275 Fix encoding of usernames in /query and /close.
Matti Hamalainen <ccr@tnsp.org>
parents: 301
diff changeset
891 nn_user_t *user = nn_user_find(nnUsers, nn_username_encode(name));
291
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
892 if (user != NULL) {
303
859578ec3275 Fix encoding of usernames in /query and /close.
Matti Hamalainen <ccr@tnsp.org>
parents: 301
diff changeset
893 name = nn_username_decode(th_strdup(user->name));
322
b9c15c57dc8f Clean up message functions, add new printMsgQ() helper function for messages that should not
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
894 printMsgQ(currWin, "Opening PRV query for '%s'.\n", name);
303
859578ec3275 Fix encoding of usernames in /query and /close.
Matti Hamalainen <ccr@tnsp.org>
parents: 301
diff changeset
895 if (openWindow(name, TRUE))
322
b9c15c57dc8f Clean up message functions, add new printMsgQ() helper function for messages that should not
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
896 printMsgQ(currWin, "In PRV query with '%s'.\n", name);
303
859578ec3275 Fix encoding of usernames in /query and /close.
Matti Hamalainen <ccr@tnsp.org>
parents: 301
diff changeset
897 th_free(name);
291
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
898 }
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
899 } else {
322
b9c15c57dc8f Clean up message functions, add new printMsgQ() helper function for messages that should not
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
900 printMsgQ(currWin, "Usage: /query username\n");
b9c15c57dc8f Clean up message functions, add new printMsgQ() helper function for messages that should not
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
901 printMsgQ(currWin, "To close a PRV query, use /close [username]\n");
b9c15c57dc8f Clean up message functions, add new printMsgQ() helper function for messages that should not
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
902 printMsgQ(currWin, "/close without username will close the current PRV window.\n");
b9c15c57dc8f Clean up message functions, add new printMsgQ() helper function for messages that should not
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
903 }
b9c15c57dc8f Clean up message functions, add new printMsgQ() helper function for messages that should not
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
904 return 0;
b9c15c57dc8f Clean up message functions, add new printMsgQ() helper function for messages that should not
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
905 }
372
b9f0bdad6285 Use th_strcasecmp() and th_strncasecmp().
Matti Hamalainen <ccr@tnsp.org>
parents: 369
diff changeset
906 else if (!th_strncasecmp(buf, "/win", 4)) {
322
b9c15c57dc8f Clean up message functions, add new printMsgQ() helper function for messages that should not
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
907 /* Change color */
b9c15c57dc8f Clean up message functions, add new printMsgQ() helper function for messages that should not
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
908 char *tmp = trimLeft(buf + 4);
b9c15c57dc8f Clean up message functions, add new printMsgQ() helper function for messages that should not
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
909 if (strlen(tmp) > 0) {
b9c15c57dc8f Clean up message functions, add new printMsgQ() helper function for messages that should not
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
910 int val = atoi(tmp);
b9c15c57dc8f Clean up message functions, add new printMsgQ() helper function for messages that should not
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
911 if (val >= 1 && val < SET_MAX_WINDOWS) {
b9c15c57dc8f Clean up message functions, add new printMsgQ() helper function for messages that should not
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
912 if (chatWindows[val - 1] != NULL)
b9c15c57dc8f Clean up message functions, add new printMsgQ() helper function for messages that should not
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
913 currWin = chatWindows[val - 1];
b9c15c57dc8f Clean up message functions, add new printMsgQ() helper function for messages that should not
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
914 } else {
b9c15c57dc8f Clean up message functions, add new printMsgQ() helper function for messages that should not
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
915 printMsgQ(currWin, "Invalid window number '%s'\n", tmp);
b9c15c57dc8f Clean up message functions, add new printMsgQ() helper function for messages that should not
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
916 return 1;
b9c15c57dc8f Clean up message functions, add new printMsgQ() helper function for messages that should not
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
917 }
b9c15c57dc8f Clean up message functions, add new printMsgQ() helper function for messages that should not
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
918 } else {
b9c15c57dc8f Clean up message functions, add new printMsgQ() helper function for messages that should not
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
919 printMsgQ(currWin, "Window : #%d\n", currWin->num);
b9c15c57dc8f Clean up message functions, add new printMsgQ() helper function for messages that should not
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
920 printMsgQ(currWin, "ID : %s\n", currWin->id);
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
921 }
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
922 return 0;
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
923 }
372
b9f0bdad6285 Use th_strcasecmp() and th_strncasecmp().
Matti Hamalainen <ccr@tnsp.org>
parents: 369
diff changeset
924 else if (!th_strncasecmp(buf, "/close", 6)) {
291
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
925 char *name = trimLeft(buf + 6);
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
926 if (strlen(name) > 0) {
325
c086345d176b Move some functions to libnnchat and rename nn_find_window to findWindow()
Matti Hamalainen <ccr@tnsp.org>
parents: 324
diff changeset
927 nn_window_t *win = findWindow(name);
301
388c22d6ab44 Closing PRV buffers should not depend on the user being in the internal userlist. Fixed.
Matti Hamalainen <ccr@tnsp.org>
parents: 298
diff changeset
928 if (win != NULL) {
291
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
929 closeWindow(win);
322
b9c15c57dc8f Clean up message functions, add new printMsgQ() helper function for messages that should not
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
930 printMsgQ(currWin, "Closed PRV query to '%s'.\n", name);
291
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
931 } else {
322
b9c15c57dc8f Clean up message functions, add new printMsgQ() helper function for messages that should not
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
932 printMsgQ(currWin, "No PRV query by name '%s'.\n", name);
291
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
933 }
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
934 } else {
291
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
935 if (currWin != chatWindows[0]) {
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
936 closeWindow(currWin);
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
937 currWin = chatWindows[0];
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
938 }
140
2d2ef5bbcc11 Use th-libs linked list code for managing ignore list.
Matti Hamalainen <ccr@tnsp.org>
parents: 139
diff changeset
939 }
2d2ef5bbcc11 Use th-libs linked list code for managing ignore list.
Matti Hamalainen <ccr@tnsp.org>
parents: 139
diff changeset
940 return 0;
258
8a0f7446318e General cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 254
diff changeset
941 }
372
b9f0bdad6285 Use th_strcasecmp() and th_strncasecmp().
Matti Hamalainen <ccr@tnsp.org>
parents: 369
diff changeset
942 else if (!th_strncasecmp(buf, "/save", 5)) {
133
ffe8bbd429fa Config file.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
943 /* Save configuration */
143
5babbff7ca26 Rename some variables, cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
944 FILE *cfgfile = fopen(setConfigFile, "w");
5babbff7ca26 Rename some variables, cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
945 if (cfgfile == NULL) {
322
b9c15c57dc8f Clean up message functions, add new printMsgQ() helper function for messages that should not
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
946 printMsgQ(currWin, "Could not create configuration to file '%s': %s\n",
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
947 setConfigFile, strerror(errno));
133
ffe8bbd429fa Config file.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
948 return 0;
ffe8bbd429fa Config file.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
949 }
322
b9c15c57dc8f Clean up message functions, add new printMsgQ() helper function for messages that should not
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
950 printMsgQ(currWin, "Configuration saved in file '%s', res=%d\n",
133
ffe8bbd429fa Config file.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
951 setConfigFile,
143
5babbff7ca26 Rename some variables, cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
952 th_cfg_write(cfgfile, setConfigFile, cfg));
133
ffe8bbd429fa Config file.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
953
143
5babbff7ca26 Rename some variables, cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
954 fclose(cfgfile);
133
ffe8bbd429fa Config file.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
955 return 0;
258
8a0f7446318e General cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 254
diff changeset
956 }
372
b9f0bdad6285 Use th_strcasecmp() and th_strncasecmp().
Matti Hamalainen <ccr@tnsp.org>
parents: 369
diff changeset
957 else if (!th_strncasecmp(buf, "/w ", 3)) {
109
1323a7f88c21 Fix /w -command and add some comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
958 /* Open given username's profile via firefox in a new tab */
137
fad8c31e41e6 Move browser code around a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 134
diff changeset
959 char *name = trimLeft(buf + 3);
114
256cca8cc086 Support $BROWSER environment variable setting.
Matti Hamalainen <ccr@tnsp.org>
parents: 113
diff changeset
960
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
961 printMsg(currWin, "Opening profile for: '%s'\n", name);
125
d03ebefb92a6 Improve internal command handling, use fork() and execlp() instead of system() for opening profiles into external browser's tabs.
Matti Hamalainen <ccr@tnsp.org>
parents: 123
diff changeset
962
108
f323b137ca08 Tab-completion now works with cycling, but bugs with names that have whitespaces.
Matti Hamalainen <ccr@tnsp.org>
parents: 107
diff changeset
963 tmpStr = nn_encode_str1(name);
197
e0ec2280a778 Implement browser launching on Windows via ShellExecute().
Matti Hamalainen <ccr@tnsp.org>
parents: 196
diff changeset
964 #ifdef __WIN32
e0ec2280a778 Implement browser launching on Windows via ShellExecute().
Matti Hamalainen <ccr@tnsp.org>
parents: 196
diff changeset
965 {
218
0e60593006c9 Change ShellExecute return value's variable type to HINSTANCE as it should be.
Matti Hamalainen <ccr@tnsp.org>
parents: 217
diff changeset
966 HINSTANCE status;
197
e0ec2280a778 Implement browser launching on Windows via ShellExecute().
Matti Hamalainen <ccr@tnsp.org>
parents: 196
diff changeset
967 snprintf(tmpBuf, sizeof(tmpBuf), "http://www.newbienudes.com/profile/%s/", tmpStr);
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
968 th_free(tmpStr);
197
e0ec2280a778 Implement browser launching on Windows via ShellExecute().
Matti Hamalainen <ccr@tnsp.org>
parents: 196
diff changeset
969 status = ShellExecute(NULL, "open", tmpBuf, NULL, NULL, SW_SHOWNA);
347
34e3705b382c Cast integer to HINSTANCE. This may not be a good thing .. dunno.
Matti Hamalainen <ccr@tnsp.org>
parents: 346
diff changeset
970 if (status <= (HINSTANCE) 32)
322
b9c15c57dc8f Clean up message functions, add new printMsgQ() helper function for messages that should not
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
971 printMsgQ(currWin, "Could not launch default web browser: %d\n", status);
197
e0ec2280a778 Implement browser launching on Windows via ShellExecute().
Matti Hamalainen <ccr@tnsp.org>
parents: 196
diff changeset
972 }
128
713879a7ca10 Wait for forked processes, to prevent a zombie apocalypse.
Matti Hamalainen <ccr@tnsp.org>
parents: 125
diff changeset
973 #else
713879a7ca10 Wait for forked processes, to prevent a zombie apocalypse.
Matti Hamalainen <ccr@tnsp.org>
parents: 125
diff changeset
974 {
713879a7ca10 Wait for forked processes, to prevent a zombie apocalypse.
Matti Hamalainen <ccr@tnsp.org>
parents: 125
diff changeset
975 int status;
233
6b1c67274f6c Use a pipe to redirect executed browser's stderr and stdout when opening profiles.
Matti Hamalainen <ccr@tnsp.org>
parents: 232
diff changeset
976 int fds[2];
128
713879a7ca10 Wait for forked processes, to prevent a zombie apocalypse.
Matti Hamalainen <ccr@tnsp.org>
parents: 125
diff changeset
977 pid_t pid;
197
e0ec2280a778 Implement browser launching on Windows via ShellExecute().
Matti Hamalainen <ccr@tnsp.org>
parents: 196
diff changeset
978 snprintf(tmpBuf, sizeof(tmpBuf), "openurl(http://www.newbienudes.com/profile/%s/,new-tab)", tmpStr);
e0ec2280a778 Implement browser launching on Windows via ShellExecute().
Matti Hamalainen <ccr@tnsp.org>
parents: 196
diff changeset
979 th_free(tmpStr);
e0ec2280a778 Implement browser launching on Windows via ShellExecute().
Matti Hamalainen <ccr@tnsp.org>
parents: 196
diff changeset
980
233
6b1c67274f6c Use a pipe to redirect executed browser's stderr and stdout when opening profiles.
Matti Hamalainen <ccr@tnsp.org>
parents: 232
diff changeset
981 if (pipe(fds) == -1) {
6b1c67274f6c Use a pipe to redirect executed browser's stderr and stdout when opening profiles.
Matti Hamalainen <ccr@tnsp.org>
parents: 232
diff changeset
982 int ret = errno;
322
b9c15c57dc8f Clean up message functions, add new printMsgQ() helper function for messages that should not
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
983 printMsgQ(currWin, "Could not open process communication pipe! (%d, %s)\n", ret, strerror(ret));
233
6b1c67274f6c Use a pipe to redirect executed browser's stderr and stdout when opening profiles.
Matti Hamalainen <ccr@tnsp.org>
parents: 232
diff changeset
984 return 0;
6b1c67274f6c Use a pipe to redirect executed browser's stderr and stdout when opening profiles.
Matti Hamalainen <ccr@tnsp.org>
parents: 232
diff changeset
985 }
6b1c67274f6c Use a pipe to redirect executed browser's stderr and stdout when opening profiles.
Matti Hamalainen <ccr@tnsp.org>
parents: 232
diff changeset
986
125
d03ebefb92a6 Improve internal command handling, use fork() and execlp() instead of system() for opening profiles into external browser's tabs.
Matti Hamalainen <ccr@tnsp.org>
parents: 123
diff changeset
987 if ((pid = fork()) < 0) {
322
b9c15c57dc8f Clean up message functions, add new printMsgQ() helper function for messages that should not
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
988 printMsgQ(currWin, "Could not create sub-process!\n");
125
d03ebefb92a6 Improve internal command handling, use fork() and execlp() instead of system() for opening profiles into external browser's tabs.
Matti Hamalainen <ccr@tnsp.org>
parents: 123
diff changeset
989 } else if (pid == 0) {
233
6b1c67274f6c Use a pipe to redirect executed browser's stderr and stdout when opening profiles.
Matti Hamalainen <ccr@tnsp.org>
parents: 232
diff changeset
990 dup2(fds[1], STDOUT_FILENO);
6b1c67274f6c Use a pipe to redirect executed browser's stderr and stdout when opening profiles.
Matti Hamalainen <ccr@tnsp.org>
parents: 232
diff changeset
991 dup2(fds[0], STDERR_FILENO);
216
3ccfe8902fd5 Use (void *) typecast for execlp() sentinel to avoid a warning under OpenBSD.
Matti Hamalainen <ccr@tnsp.org>
parents: 211
diff changeset
992 execlp(setBrowser, setBrowser, "-remote", tmpBuf, (void *)NULL);
128
713879a7ca10 Wait for forked processes, to prevent a zombie apocalypse.
Matti Hamalainen <ccr@tnsp.org>
parents: 125
diff changeset
993 _exit(errno);
125
d03ebefb92a6 Improve internal command handling, use fork() and execlp() instead of system() for opening profiles into external browser's tabs.
Matti Hamalainen <ccr@tnsp.org>
parents: 123
diff changeset
994 }
128
713879a7ca10 Wait for forked processes, to prevent a zombie apocalypse.
Matti Hamalainen <ccr@tnsp.org>
parents: 125
diff changeset
995
713879a7ca10 Wait for forked processes, to prevent a zombie apocalypse.
Matti Hamalainen <ccr@tnsp.org>
parents: 125
diff changeset
996 wait(&status);
713879a7ca10 Wait for forked processes, to prevent a zombie apocalypse.
Matti Hamalainen <ccr@tnsp.org>
parents: 125
diff changeset
997 }
713879a7ca10 Wait for forked processes, to prevent a zombie apocalypse.
Matti Hamalainen <ccr@tnsp.org>
parents: 125
diff changeset
998 #endif
109
1323a7f88c21 Fix /w -command and add some comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
999 return 0;
258
8a0f7446318e General cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 254
diff changeset
1000 }
372
b9f0bdad6285 Use th_strcasecmp() and th_strncasecmp().
Matti Hamalainen <ccr@tnsp.org>
parents: 369
diff changeset
1001 else if (!th_strncasecmp(buf, "/who", 4)) {
109
1323a7f88c21 Fix /w -command and add some comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
1002 /* Alias /who to /listallusers */
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1003 snprintf(tmpBuf, sizeof(tmpBuf), "/listallusers");
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1004 buf = tmpBuf;
258
8a0f7446318e General cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 254
diff changeset
1005 }
339
058e3633bd73 Fix a think-o in the logic of processing user commands / messages in case of different window buffers.
Matti Hamalainen <ccr@tnsp.org>
parents: 335
diff changeset
1006
058e3633bd73 Fix a think-o in the logic of processing user commands / messages in case of different window buffers.
Matti Hamalainen <ccr@tnsp.org>
parents: 335
diff changeset
1007 if (currWin != chatWindows[0]) {
291
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
1008 if (currWin->id != NULL) {
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
1009 snprintf(tmpBuf, sizeof(tmpBuf), "/prv -to %s -msg %s", currWin->id, buf);
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1010 buf = tmpBuf;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1011 } else {
322
b9c15c57dc8f Clean up message functions, add new printMsgQ() helper function for messages that should not
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
1012 printMsgQ(NULL, "No target set, exiting prv mode.\n");
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1013 return 1;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1014 }
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1015 }
291
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
1016
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1017 /* Send double-encoded */
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
1018 tmpStr = nn_dblencode_str(nn_username_decode(buf));
103
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
1019 if (tmpStr == 0) return -2;
198
21a37995c3fb Make configuration username/password overridable on command line.
Matti Hamalainen <ccr@tnsp.org>
parents: 197
diff changeset
1020 result = nn_conn_send_msg(conn, optUserNameEnc, "%s", tmpStr);
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1021 th_free(tmpStr);
103
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
1022
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
1023 return result ? 0 : -1;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1024 }
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1025
155
0720ca51673e Plug some minor "memory leaks" related to curses.
Matti Hamalainen <ccr@tnsp.org>
parents: 154
diff changeset
1026 void closeWindows(void)
0720ca51673e Plug some minor "memory leaks" related to curses.
Matti Hamalainen <ccr@tnsp.org>
parents: 154
diff changeset
1027 {
0720ca51673e Plug some minor "memory leaks" related to curses.
Matti Hamalainen <ccr@tnsp.org>
parents: 154
diff changeset
1028 if (mainWin) delwin(mainWin);
0720ca51673e Plug some minor "memory leaks" related to curses.
Matti Hamalainen <ccr@tnsp.org>
parents: 154
diff changeset
1029 if (statusWin) delwin(statusWin);
0720ca51673e Plug some minor "memory leaks" related to curses.
Matti Hamalainen <ccr@tnsp.org>
parents: 154
diff changeset
1030 if (editWin) delwin(editWin);
0720ca51673e Plug some minor "memory leaks" related to curses.
Matti Hamalainen <ccr@tnsp.org>
parents: 154
diff changeset
1031 }
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1032
46
65b1ac6a1e2e Support for resizing the terminal on fly. Not perfect, but works.
Matti Hamalainen <ccr@tnsp.org>
parents: 45
diff changeset
1033 BOOL initializeWindows(void)
65b1ac6a1e2e Support for resizing the terminal on fly. Not perfect, but works.
Matti Hamalainen <ccr@tnsp.org>
parents: 45
diff changeset
1034 {
118
9e7f52878725 Use getmaxyx() instead of LINES and COLS globals as recommended by curses programming guidelines.
Matti Hamalainen <ccr@tnsp.org>
parents: 117
diff changeset
1035 int w, h;
9e7f52878725 Use getmaxyx() instead of LINES and COLS globals as recommended by curses programming guidelines.
Matti Hamalainen <ccr@tnsp.org>
parents: 117
diff changeset
1036
9e7f52878725 Use getmaxyx() instead of LINES and COLS globals as recommended by curses programming guidelines.
Matti Hamalainen <ccr@tnsp.org>
parents: 117
diff changeset
1037 getmaxyx(stdscr, h, w);
9e7f52878725 Use getmaxyx() instead of LINES and COLS globals as recommended by curses programming guidelines.
Matti Hamalainen <ccr@tnsp.org>
parents: 117
diff changeset
1038
155
0720ca51673e Plug some minor "memory leaks" related to curses.
Matti Hamalainen <ccr@tnsp.org>
parents: 154
diff changeset
1039 closeWindows();
118
9e7f52878725 Use getmaxyx() instead of LINES and COLS globals as recommended by curses programming guidelines.
Matti Hamalainen <ccr@tnsp.org>
parents: 117
diff changeset
1040
209
e1bfd5227a24 Use curses subwin(stdscr, ...) instead of newwin().
Matti Hamalainen <ccr@tnsp.org>
parents: 208
diff changeset
1041 mainWin = subwin(stdscr, h - 4, w, 0, 0);
e1bfd5227a24 Use curses subwin(stdscr, ...) instead of newwin().
Matti Hamalainen <ccr@tnsp.org>
parents: 208
diff changeset
1042 statusWin = subwin(stdscr, 1, w, h - 4, 0);
e1bfd5227a24 Use curses subwin(stdscr, ...) instead of newwin().
Matti Hamalainen <ccr@tnsp.org>
parents: 208
diff changeset
1043 editWin = subwin(stdscr, 3, w, h - 3, 0);
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1044
318
4acfcca39105 Don't THERR() in initializeWindows(), just return FALSE.
Matti Hamalainen <ccr@tnsp.org>
parents: 316
diff changeset
1045 if (mainWin == NULL || statusWin == NULL || editWin == NULL)
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1046 return FALSE;
318
4acfcca39105 Don't THERR() in initializeWindows(), just return FALSE.
Matti Hamalainen <ccr@tnsp.org>
parents: 316
diff changeset
1047
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1048 return TRUE;
46
65b1ac6a1e2e Support for resizing the terminal on fly. Not perfect, but works.
Matti Hamalainen <ccr@tnsp.org>
parents: 45
diff changeset
1049 }
65b1ac6a1e2e Support for resizing the terminal on fly. Not perfect, but works.
Matti Hamalainen <ccr@tnsp.org>
parents: 45
diff changeset
1050
179
8c493b5671bd Add separate updateWindows() function.
Matti Hamalainen <ccr@tnsp.org>
parents: 175
diff changeset
1051 void updateWindows(void)
8c493b5671bd Add separate updateWindows() function.
Matti Hamalainen <ccr@tnsp.org>
parents: 175
diff changeset
1052 {
8c493b5671bd Add separate updateWindows() function.
Matti Hamalainen <ccr@tnsp.org>
parents: 175
diff changeset
1053 if (mainWin) redrawwin(mainWin);
8c493b5671bd Add separate updateWindows() function.
Matti Hamalainen <ccr@tnsp.org>
parents: 175
diff changeset
1054 if (statusWin) redrawwin(statusWin);
8c493b5671bd Add separate updateWindows() function.
Matti Hamalainen <ccr@tnsp.org>
parents: 175
diff changeset
1055 if (editWin) redrawwin(editWin);
8c493b5671bd Add separate updateWindows() function.
Matti Hamalainen <ccr@tnsp.org>
parents: 175
diff changeset
1056 }
113
2a53156e7e12 Yay, tab-completion cycling now works (except for usernames with whitespaces, of course ...)
Matti Hamalainen <ccr@tnsp.org>
parents: 112
diff changeset
1057
2a53156e7e12 Yay, tab-completion cycling now works (except for usernames with whitespaces, of course ...)
Matti Hamalainen <ccr@tnsp.org>
parents: 112
diff changeset
1058 BOOL performTabCompletion(nn_editbuf_t *buf)
103
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
1059 {
189
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1060 static char *previous = NULL, *pattern = NULL;
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1061 BOOL again = FALSE, hasSeparator = FALSE, newPattern = FALSE, hasSpace = FALSE;
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1062 char *str = buf->data;
113
2a53156e7e12 Yay, tab-completion cycling now works (except for usernames with whitespaces, of course ...)
Matti Hamalainen <ccr@tnsp.org>
parents: 112
diff changeset
1063 int mode = 0;
189
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1064 ssize_t endPos, startPos = buf->pos;
107
8037a3a7e491 Implement username tab-completion. It's still buggy, tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 104
diff changeset
1065
189
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1066 /* previous word */
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1067 if (startPos >= 2 && str[startPos - 1] == ' ' && str[startPos - 2] != ' ') {
113
2a53156e7e12 Yay, tab-completion cycling now works (except for usernames with whitespaces, of course ...)
Matti Hamalainen <ccr@tnsp.org>
parents: 112
diff changeset
1068 startPos -= 2;
2a53156e7e12 Yay, tab-completion cycling now works (except for usernames with whitespaces, of course ...)
Matti Hamalainen <ccr@tnsp.org>
parents: 112
diff changeset
1069 endPos = startPos;
2a53156e7e12 Yay, tab-completion cycling now works (except for usernames with whitespaces, of course ...)
Matti Hamalainen <ccr@tnsp.org>
parents: 112
diff changeset
1070 while (startPos > 0 && str[startPos - 1] != ' ') startPos--;
2a53156e7e12 Yay, tab-completion cycling now works (except for usernames with whitespaces, of course ...)
Matti Hamalainen <ccr@tnsp.org>
parents: 112
diff changeset
1071 mode = 1;
107
8037a3a7e491 Implement username tab-completion. It's still buggy, tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 104
diff changeset
1072 } else
189
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1073 /* middle of a word, new pattern */
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1074 if (startPos < buf->len && str[startPos] != ' ') {
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1075 endPos = startPos;
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1076 while (startPos > 0 && str[startPos - 1] != ' ') startPos--;
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1077 while (endPos < buf->len - 1 && str[endPos + 1] != ' ') endPos++;
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1078 newPattern = TRUE;
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1079 mode = 2;
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1080 } else
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1081 /* previous word, new pattern */
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1082 if (startPos >= 1 && str[startPos - 1] != ' ') {
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1083 startPos -= 1;
113
2a53156e7e12 Yay, tab-completion cycling now works (except for usernames with whitespaces, of course ...)
Matti Hamalainen <ccr@tnsp.org>
parents: 112
diff changeset
1084 endPos = startPos;
2a53156e7e12 Yay, tab-completion cycling now works (except for usernames with whitespaces, of course ...)
Matti Hamalainen <ccr@tnsp.org>
parents: 112
diff changeset
1085 while (startPos > 0 && str[startPos - 1] != ' ') startPos--;
189
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1086 newPattern = TRUE;
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1087 mode = 3;
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1088 } else {
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1089 if (optDebug)
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
1090 printMsg(currWin, "no mode\n");
189
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1091 return FALSE;
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1092 }
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1093
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1094 if (str[endPos] == optNickSep) {
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1095 endPos--;
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1096 if (startPos > 0) {
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1097 if (optDebug)
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
1098 printMsg(currWin, "str[endPos] == optNickSep && startPos > 0 (%d)\n", startPos);
113
2a53156e7e12 Yay, tab-completion cycling now works (except for usernames with whitespaces, of course ...)
Matti Hamalainen <ccr@tnsp.org>
parents: 112
diff changeset
1099 return FALSE;
189
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1100 }
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1101 hasSeparator = TRUE;
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1102 }
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1103
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1104 if (buf->pos > 0 && str[buf->pos - 1] == ' ')
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1105 hasSpace = TRUE;
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1106 if (buf->pos <= buf->len && str[buf->pos] == ' ')
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1107 hasSpace = TRUE;
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1108
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1109 if (newPattern) {
116
741e45592522 Add simple "prediction" into tab-completion based on previously gotten last
Matti Hamalainen <ccr@tnsp.org>
parents: 115
diff changeset
1110 /* Get pattern, check if it matches previous pattern and set 'again' flag */
189
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1111 char *npattern = nn_editbuf_get_string(buf, startPos, endPos);
372
b9f0bdad6285 Use th_strcasecmp() and th_strncasecmp().
Matti Hamalainen <ccr@tnsp.org>
parents: 369
diff changeset
1112 if (pattern && npattern && th_strcasecmp(npattern, pattern) == 0)
116
741e45592522 Add simple "prediction" into tab-completion based on previously gotten last
Matti Hamalainen <ccr@tnsp.org>
parents: 115
diff changeset
1113 again = TRUE;
189
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1114
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1115 th_free(pattern);
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1116 pattern = npattern;
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1117
116
741e45592522 Add simple "prediction" into tab-completion based on previously gotten last
Matti Hamalainen <ccr@tnsp.org>
parents: 115
diff changeset
1118 if (!again) {
741e45592522 Add simple "prediction" into tab-completion based on previously gotten last
Matti Hamalainen <ccr@tnsp.org>
parents: 115
diff changeset
1119 th_free(previous);
741e45592522 Add simple "prediction" into tab-completion based on previously gotten last
Matti Hamalainen <ccr@tnsp.org>
parents: 115
diff changeset
1120 previous = NULL;
741e45592522 Add simple "prediction" into tab-completion based on previously gotten last
Matti Hamalainen <ccr@tnsp.org>
parents: 115
diff changeset
1121 }
189
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1122 }
116
741e45592522 Add simple "prediction" into tab-completion based on previously gotten last
Matti Hamalainen <ccr@tnsp.org>
parents: 115
diff changeset
1123
189
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1124 if (optDebug) {
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
1125 printMsg(currWin, "sPos=%d, ePos=%d <-> bPos=%d, bufLen=%d : pat='%s' (again=%s, hassep=%s, hasspc=%s, newpat=%s, mode=%d)\n",
189
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1126 startPos, endPos, buf->pos, buf->len, pattern,
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1127 again ? "yes" : "no",
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1128 hasSeparator ? "yes" : "no",
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1129 hasSpace ? "yes" : "no",
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1130 newPattern ? "yes" : "no", mode);
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1131 }
107
8037a3a7e491 Implement username tab-completion. It's still buggy, tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 104
diff changeset
1132
113
2a53156e7e12 Yay, tab-completion cycling now works (except for usernames with whitespaces, of course ...)
Matti Hamalainen <ccr@tnsp.org>
parents: 112
diff changeset
1133 if (pattern) {
116
741e45592522 Add simple "prediction" into tab-completion based on previously gotten last
Matti Hamalainen <ccr@tnsp.org>
parents: 115
diff changeset
1134 nn_user_t *user = nn_user_match(nnUsers, pattern, previous, again);
107
8037a3a7e491 Implement username tab-completion. It's still buggy, tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 104
diff changeset
1135
108
f323b137ca08 Tab-completion now works with cycling, but bugs with names that have whitespaces.
Matti Hamalainen <ccr@tnsp.org>
parents: 107
diff changeset
1136 if (user) {
107
8037a3a7e491 Implement username tab-completion. It's still buggy, tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 104
diff changeset
1137 int i;
108
f323b137ca08 Tab-completion now works with cycling, but bugs with names that have whitespaces.
Matti Hamalainen <ccr@tnsp.org>
parents: 107
diff changeset
1138 char *c = user->name;
162
e59cec397811 Add a debug mode option (commandline) and enable certain features when we are in debug mode.
Matti Hamalainen <ccr@tnsp.org>
parents: 161
diff changeset
1139 if (optDebug)
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
1140 printMsg(currWin, "match='%s' / prev='%s'\n", user->name, previous);
107
8037a3a7e491 Implement username tab-completion. It's still buggy, tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 104
diff changeset
1141
113
2a53156e7e12 Yay, tab-completion cycling now works (except for usernames with whitespaces, of course ...)
Matti Hamalainen <ccr@tnsp.org>
parents: 112
diff changeset
1142 for (i = startPos; i <= endPos; i++)
2a53156e7e12 Yay, tab-completion cycling now works (except for usernames with whitespaces, of course ...)
Matti Hamalainen <ccr@tnsp.org>
parents: 112
diff changeset
1143 nn_editbuf_delete(buf, startPos);
107
8037a3a7e491 Implement username tab-completion. It's still buggy, tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 104
diff changeset
1144
113
2a53156e7e12 Yay, tab-completion cycling now works (except for usernames with whitespaces, of course ...)
Matti Hamalainen <ccr@tnsp.org>
parents: 112
diff changeset
1145 for (i = startPos; *c; i++, c++)
107
8037a3a7e491 Implement username tab-completion. It's still buggy, tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 104
diff changeset
1146 nn_editbuf_insert(buf, i, *c);
8037a3a7e491 Implement username tab-completion. It's still buggy, tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 104
diff changeset
1147
189
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1148 if (!hasSeparator && startPos == 0) {
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1149 nn_editbuf_insert(buf, i++, optNickSep);
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1150 startPos++;
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1151 }
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1152 if (hasSeparator)
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1153 startPos++;
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1154 if (!hasSpace)
113
2a53156e7e12 Yay, tab-completion cycling now works (except for usernames with whitespaces, of course ...)
Matti Hamalainen <ccr@tnsp.org>
parents: 112
diff changeset
1155 nn_editbuf_insert(buf, i++, ' ');
189
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1156
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1157 nn_editbuf_setpos(buf, startPos + 1 + strlen(user->name));
107
8037a3a7e491 Implement username tab-completion. It's still buggy, tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 104
diff changeset
1158
108
f323b137ca08 Tab-completion now works with cycling, but bugs with names that have whitespaces.
Matti Hamalainen <ccr@tnsp.org>
parents: 107
diff changeset
1159 th_free(previous);
f323b137ca08 Tab-completion now works with cycling, but bugs with names that have whitespaces.
Matti Hamalainen <ccr@tnsp.org>
parents: 107
diff changeset
1160 previous = th_strdup(user->name);
113
2a53156e7e12 Yay, tab-completion cycling now works (except for usernames with whitespaces, of course ...)
Matti Hamalainen <ccr@tnsp.org>
parents: 112
diff changeset
1161
2a53156e7e12 Yay, tab-completion cycling now works (except for usernames with whitespaces, of course ...)
Matti Hamalainen <ccr@tnsp.org>
parents: 112
diff changeset
1162 return TRUE;
107
8037a3a7e491 Implement username tab-completion. It's still buggy, tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 104
diff changeset
1163 }
8037a3a7e491 Implement username tab-completion. It's still buggy, tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 104
diff changeset
1164 }
113
2a53156e7e12 Yay, tab-completion cycling now works (except for usernames with whitespaces, of course ...)
Matti Hamalainen <ccr@tnsp.org>
parents: 112
diff changeset
1165
2a53156e7e12 Yay, tab-completion cycling now works (except for usernames with whitespaces, of course ...)
Matti Hamalainen <ccr@tnsp.org>
parents: 112
diff changeset
1166 return FALSE;
103
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
1167 }
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
1168
252
dcf78e2c458c Improve log filename format parsing; Add special casing for handling of function keys for certain terminal types.
Matti Hamalainen <ccr@tnsp.org>
parents: 247
diff changeset
1169 #define VPUTCH(CH) th_vputch(&bufData, &bufSize, &bufLen, CH)
242
cb86d7543be2 Add functionality for generating logfile names based on port etc. and
Matti Hamalainen <ccr@tnsp.org>
parents: 240
diff changeset
1170 #define VPUTS(STR) th_vputs(&bufData, &bufSize, &bufLen, STR)
cb86d7543be2 Add functionality for generating logfile names based on port etc. and
Matti Hamalainen <ccr@tnsp.org>
parents: 240
diff changeset
1171
239
b7e7ed741a18 Add unfinished code for logfile name parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
1172 char *logParseFilename(const char *fmt, int id)
b7e7ed741a18 Add unfinished code for logfile name parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
1173 {
252
dcf78e2c458c Improve log filename format parsing; Add special casing for handling of function keys for certain terminal types.
Matti Hamalainen <ccr@tnsp.org>
parents: 247
diff changeset
1174 size_t bufSize = strlen(fmt) + TH_BUFGROW, bufLen = 0;
dcf78e2c458c Improve log filename format parsing; Add special casing for handling of function keys for certain terminal types.
Matti Hamalainen <ccr@tnsp.org>
parents: 247
diff changeset
1175 char *bufData = th_malloc(bufSize);
dcf78e2c458c Improve log filename format parsing; Add special casing for handling of function keys for certain terminal types.
Matti Hamalainen <ccr@tnsp.org>
parents: 247
diff changeset
1176 char tmpBuf[32];
239
b7e7ed741a18 Add unfinished code for logfile name parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
1177 const char *s = fmt;
b7e7ed741a18 Add unfinished code for logfile name parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
1178
b7e7ed741a18 Add unfinished code for logfile name parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
1179 while (*s) {
b7e7ed741a18 Add unfinished code for logfile name parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
1180 if (*s == '%') {
b7e7ed741a18 Add unfinished code for logfile name parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
1181 s++;
b7e7ed741a18 Add unfinished code for logfile name parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
1182 switch (*s) {
b7e7ed741a18 Add unfinished code for logfile name parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
1183 case 'i':
b7e7ed741a18 Add unfinished code for logfile name parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
1184 snprintf(tmpBuf, sizeof(tmpBuf), "%05d", id);
b7e7ed741a18 Add unfinished code for logfile name parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
1185 VPUTS(tmpBuf);
b7e7ed741a18 Add unfinished code for logfile name parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
1186 break;
252
dcf78e2c458c Improve log filename format parsing; Add special casing for handling of function keys for certain terminal types.
Matti Hamalainen <ccr@tnsp.org>
parents: 247
diff changeset
1187
dcf78e2c458c Improve log filename format parsing; Add special casing for handling of function keys for certain terminal types.
Matti Hamalainen <ccr@tnsp.org>
parents: 247
diff changeset
1188 case 'd':
dcf78e2c458c Improve log filename format parsing; Add special casing for handling of function keys for certain terminal types.
Matti Hamalainen <ccr@tnsp.org>
parents: 247
diff changeset
1189 snprintf(tmpBuf, sizeof(tmpBuf), "%d", id);
dcf78e2c458c Improve log filename format parsing; Add special casing for handling of function keys for certain terminal types.
Matti Hamalainen <ccr@tnsp.org>
parents: 247
diff changeset
1190 VPUTS(tmpBuf);
dcf78e2c458c Improve log filename format parsing; Add special casing for handling of function keys for certain terminal types.
Matti Hamalainen <ccr@tnsp.org>
parents: 247
diff changeset
1191 break;
dcf78e2c458c Improve log filename format parsing; Add special casing for handling of function keys for certain terminal types.
Matti Hamalainen <ccr@tnsp.org>
parents: 247
diff changeset
1192
239
b7e7ed741a18 Add unfinished code for logfile name parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
1193 case '%':
242
cb86d7543be2 Add functionality for generating logfile names based on port etc. and
Matti Hamalainen <ccr@tnsp.org>
parents: 240
diff changeset
1194 VPUTCH('%');
239
b7e7ed741a18 Add unfinished code for logfile name parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
1195 break;
b7e7ed741a18 Add unfinished code for logfile name parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
1196 }
242
cb86d7543be2 Add functionality for generating logfile names based on port etc. and
Matti Hamalainen <ccr@tnsp.org>
parents: 240
diff changeset
1197 s++;
cb86d7543be2 Add functionality for generating logfile names based on port etc. and
Matti Hamalainen <ccr@tnsp.org>
parents: 240
diff changeset
1198 } else {
cb86d7543be2 Add functionality for generating logfile names based on port etc. and
Matti Hamalainen <ccr@tnsp.org>
parents: 240
diff changeset
1199 VPUTCH(*s);
cb86d7543be2 Add functionality for generating logfile names based on port etc. and
Matti Hamalainen <ccr@tnsp.org>
parents: 240
diff changeset
1200 s++;
239
b7e7ed741a18 Add unfinished code for logfile name parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
1201 }
b7e7ed741a18 Add unfinished code for logfile name parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
1202 }
242
cb86d7543be2 Add functionality for generating logfile names based on port etc. and
Matti Hamalainen <ccr@tnsp.org>
parents: 240
diff changeset
1203
cb86d7543be2 Add functionality for generating logfile names based on port etc. and
Matti Hamalainen <ccr@tnsp.org>
parents: 240
diff changeset
1204 VPUTCH(0);
cb86d7543be2 Add functionality for generating logfile names based on port etc. and
Matti Hamalainen <ccr@tnsp.org>
parents: 240
diff changeset
1205 return bufData;
239
b7e7ed741a18 Add unfinished code for logfile name parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
1206 }
b7e7ed741a18 Add unfinished code for logfile name parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
1207
b7e7ed741a18 Add unfinished code for logfile name parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
1208
b7e7ed741a18 Add unfinished code for logfile name parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
1209 BOOL logFileOpen(void)
b7e7ed741a18 Add unfinished code for logfile name parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
1210 {
b7e7ed741a18 Add unfinished code for logfile name parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
1211 char *filename;
b7e7ed741a18 Add unfinished code for logfile name parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
1212
242
cb86d7543be2 Add functionality for generating logfile names based on port etc. and
Matti Hamalainen <ccr@tnsp.org>
parents: 240
diff changeset
1213 if (optLogFilename == NULL || !optLogEnable)
239
b7e7ed741a18 Add unfinished code for logfile name parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
1214 return FALSE;
b7e7ed741a18 Add unfinished code for logfile name parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
1215
242
cb86d7543be2 Add functionality for generating logfile names based on port etc. and
Matti Hamalainen <ccr@tnsp.org>
parents: 240
diff changeset
1216 filename = logParseFilename(optLogFilename, optPort);
239
b7e7ed741a18 Add unfinished code for logfile name parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
1217
b7e7ed741a18 Add unfinished code for logfile name parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
1218 if ((optLogFile = fopen(filename, "a")) == NULL) {
242
cb86d7543be2 Add functionality for generating logfile names based on port etc. and
Matti Hamalainen <ccr@tnsp.org>
parents: 240
diff changeset
1219 errorMsg("Could not open logfile '%s' for appending!\n", filename);
239
b7e7ed741a18 Add unfinished code for logfile name parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
1220 th_free(filename);
b7e7ed741a18 Add unfinished code for logfile name parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
1221 return FALSE;
b7e7ed741a18 Add unfinished code for logfile name parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
1222 }
242
cb86d7543be2 Add functionality for generating logfile names based on port etc. and
Matti Hamalainen <ccr@tnsp.org>
parents: 240
diff changeset
1223
cb86d7543be2 Add functionality for generating logfile names based on port etc. and
Matti Hamalainen <ccr@tnsp.org>
parents: 240
diff changeset
1224 th_free(filename);
cb86d7543be2 Add functionality for generating logfile names based on port etc. and
Matti Hamalainen <ccr@tnsp.org>
parents: 240
diff changeset
1225
239
b7e7ed741a18 Add unfinished code for logfile name parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
1226 return TRUE;
b7e7ed741a18 Add unfinished code for logfile name parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
1227 }
b7e7ed741a18 Add unfinished code for logfile name parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
1228
242
cb86d7543be2 Add functionality for generating logfile names based on port etc. and
Matti Hamalainen <ccr@tnsp.org>
parents: 240
diff changeset
1229 void logFileClose(void)
239
b7e7ed741a18 Add unfinished code for logfile name parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
1230 {
242
cb86d7543be2 Add functionality for generating logfile names based on port etc. and
Matti Hamalainen <ccr@tnsp.org>
parents: 240
diff changeset
1231 if (optLogFile) {
cb86d7543be2 Add functionality for generating logfile names based on port etc. and
Matti Hamalainen <ccr@tnsp.org>
parents: 240
diff changeset
1232 fclose(optLogFile);
cb86d7543be2 Add functionality for generating logfile names based on port etc. and
Matti Hamalainen <ccr@tnsp.org>
parents: 240
diff changeset
1233 optLogFile = NULL;
cb86d7543be2 Add functionality for generating logfile names based on port etc. and
Matti Hamalainen <ccr@tnsp.org>
parents: 240
diff changeset
1234 }
239
b7e7ed741a18 Add unfinished code for logfile name parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
1235 }
b7e7ed741a18 Add unfinished code for logfile name parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
1236
268
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1237 char *promptRequester(WINDOW *win, const char *info, BOOL allowEmpty)
196
edd5ce3e5399 Add simplistic username/password requester if none given on commandline or config file.
Matti Hamalainen <ccr@tnsp.org>
parents: 195
diff changeset
1238 {
211
c40329e95445 Trim both left and right side of username+password prompt input. Also allow empty passwords, to be able to use guest accounts.
Matti Hamalainen <ccr@tnsp.org>
parents: 210
diff changeset
1239 char tmpBuf[512], *ptr;
c40329e95445 Trim both left and right side of username+password prompt input. Also allow empty passwords, to be able to use guest accounts.
Matti Hamalainen <ccr@tnsp.org>
parents: 210
diff changeset
1240 ssize_t pos;
275
66b90d71548b Improve interactive prompts, etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 273
diff changeset
1241 int curVis = curs_set(1);
196
edd5ce3e5399 Add simplistic username/password requester if none given on commandline or config file.
Matti Hamalainen <ccr@tnsp.org>
parents: 195
diff changeset
1242
275
66b90d71548b Improve interactive prompts, etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 273
diff changeset
1243 echo();
268
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1244 waddstr(win, info);
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1245 wgetnstr(win, tmpBuf, sizeof(tmpBuf) - 1);
275
66b90d71548b Improve interactive prompts, etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 273
diff changeset
1246 noecho();
66b90d71548b Improve interactive prompts, etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 273
diff changeset
1247 if (curVis != ERR)
66b90d71548b Improve interactive prompts, etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 273
diff changeset
1248 curs_set(curVis);
197
e0ec2280a778 Implement browser launching on Windows via ShellExecute().
Matti Hamalainen <ccr@tnsp.org>
parents: 196
diff changeset
1249
211
c40329e95445 Trim both left and right side of username+password prompt input. Also allow empty passwords, to be able to use guest accounts.
Matti Hamalainen <ccr@tnsp.org>
parents: 210
diff changeset
1250 for (pos = strlen(tmpBuf) - 1; pos > 0 && (tmpBuf[pos] == '\n' || tmpBuf[pos] == '\r' || th_isspace(tmpBuf[pos])); pos--)
c40329e95445 Trim both left and right side of username+password prompt input. Also allow empty passwords, to be able to use guest accounts.
Matti Hamalainen <ccr@tnsp.org>
parents: 210
diff changeset
1251 tmpBuf[pos] = 0;
196
edd5ce3e5399 Add simplistic username/password requester if none given on commandline or config file.
Matti Hamalainen <ccr@tnsp.org>
parents: 195
diff changeset
1252
211
c40329e95445 Trim both left and right side of username+password prompt input. Also allow empty passwords, to be able to use guest accounts.
Matti Hamalainen <ccr@tnsp.org>
parents: 210
diff changeset
1253 ptr = trimLeft(tmpBuf);
c40329e95445 Trim both left and right side of username+password prompt input. Also allow empty passwords, to be able to use guest accounts.
Matti Hamalainen <ccr@tnsp.org>
parents: 210
diff changeset
1254
c40329e95445 Trim both left and right side of username+password prompt input. Also allow empty passwords, to be able to use guest accounts.
Matti Hamalainen <ccr@tnsp.org>
parents: 210
diff changeset
1255 if (allowEmpty || strlen(ptr) > 0)
c40329e95445 Trim both left and right side of username+password prompt input. Also allow empty passwords, to be able to use guest accounts.
Matti Hamalainen <ccr@tnsp.org>
parents: 210
diff changeset
1256 return th_strdup(ptr);
196
edd5ce3e5399 Add simplistic username/password requester if none given on commandline or config file.
Matti Hamalainen <ccr@tnsp.org>
parents: 195
diff changeset
1257 else
edd5ce3e5399 Add simplistic username/password requester if none given on commandline or config file.
Matti Hamalainen <ccr@tnsp.org>
parents: 195
diff changeset
1258 return NULL;
edd5ce3e5399 Add simplistic username/password requester if none given on commandline or config file.
Matti Hamalainen <ccr@tnsp.org>
parents: 195
diff changeset
1259 }
168
2e4850ece456 Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 165
diff changeset
1260
322
b9c15c57dc8f Clean up message functions, add new printMsgQ() helper function for messages that should not
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
1261 void printHelp(void)
b9c15c57dc8f Clean up message functions, add new printMsgQ() helper function for messages that should not
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
1262 {
340
cbbe2e797f55 Cosmetics in help message.
Matti Hamalainen <ccr@tnsp.org>
parents: 339
diff changeset
1263 printMsgQ(currWin, "\n"
322
b9c15c57dc8f Clean up message functions, add new printMsgQ() helper function for messages that should not
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
1264 "NNChat Help\n"
b9c15c57dc8f Clean up message functions, add new printMsgQ() helper function for messages that should not
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
1265 "===========\n"
b9c15c57dc8f Clean up message functions, add new printMsgQ() helper function for messages that should not
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
1266 "\n"
340
cbbe2e797f55 Cosmetics in help message.
Matti Hamalainen <ccr@tnsp.org>
parents: 339
diff changeset
1267 "F1 This help.\n"
cbbe2e797f55 Cosmetics in help message.
Matti Hamalainen <ccr@tnsp.org>
parents: 339
diff changeset
1268 "F2 \n"
322
b9c15c57dc8f Clean up message functions, add new printMsgQ() helper function for messages that should not
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
1269 );
b9c15c57dc8f Clean up message functions, add new printMsgQ() helper function for messages that should not
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
1270 }
b9c15c57dc8f Clean up message functions, add new printMsgQ() helper function for messages that should not
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
1271
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1272 int main(int argc, char *argv[])
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1273 {
168
2e4850ece456 Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 165
diff changeset
1274 nn_conn_t *conn = NULL;
2e4850ece456 Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 165
diff changeset
1275 int curVis = ERR, updateCount = 0;
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1276 BOOL argsOK, isError = FALSE,
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1277 exitProg = FALSE,
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1278 colorSet = FALSE,
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1279 cursesInit = FALSE,
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1280 networkInit = FALSE,
275
66b90d71548b Improve interactive prompts, etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 273
diff changeset
1281 insertMode = TRUE,
66b90d71548b Improve interactive prompts, etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 273
diff changeset
1282 firstUpdate = TRUE;
96
7c9538e71c89 Add connection keepalive by sending /listallusers every 15 minutes,
Matti Hamalainen <ccr@tnsp.org>
parents: 92
diff changeset
1283 time_t prevTime;
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1284 char *tmpStr;
168
2e4850ece456 Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 165
diff changeset
1285 nn_editbuf_t *editBuf = nn_editbuf_new(NN_TMPBUF_SIZE);
89
c2d916b340bf Change some typedef names; Add struct for user list handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 86
diff changeset
1286 nn_editbuf_t *histBuf[SET_MAX_HISTORY+2];
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1287 int histPos = 0, histMax = 0;
275
66b90d71548b Improve interactive prompts, etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 273
diff changeset
1288
154
e8f67e344aaf Get correct directory for saving configuration under Windows.
Matti Hamalainen <ccr@tnsp.org>
parents: 153
diff changeset
1289 cfgitem_t *tmpcfg;
e8f67e344aaf Get correct directory for saving configuration under Windows.
Matti Hamalainen <ccr@tnsp.org>
parents: 153
diff changeset
1290 char *homeDir = NULL;
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
1291
313
7c96f52e9a3b memset() history buffer variable unconditionally to avoid derefencing uninitialized memory.
Matti Hamalainen <ccr@tnsp.org>
parents: 309
diff changeset
1292 memset(histBuf, 0, sizeof(histBuf));
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1293
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1294 /* Initialize */
195
829457be9eea Build system changes to support (in a big kludgy manner) icon and version information resource generation for Win32 binaries.
Matti Hamalainen <ccr@tnsp.org>
parents: 191
diff changeset
1295 th_init("NNChat", "Newbie Nudes chat client", NN_VERSION,
237
52a2f06fd41c Update copyright years.
Matti Hamalainen <ccr@tnsp.org>
parents: 236
diff changeset
1296 "Written and designed by Anonymous Finnish Guy (C) 2008-2011",
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1297 "This software is freeware, use and distribute as you wish.");
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1298 th_verbosityLevel = 0;
133
ffe8bbd429fa Config file.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
1299
275
66b90d71548b Improve interactive prompts, etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 273
diff changeset
1300 /* Read configuration file */
148
9da39d090ef1 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 147
diff changeset
1301 tmpcfg = NULL;
133
ffe8bbd429fa Config file.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
1302 th_cfg_add_comment(&tmpcfg, "General settings");
ffe8bbd429fa Config file.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
1303 th_cfg_add_string(&tmpcfg, "username", &optUserName, NULL);
ffe8bbd429fa Config file.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
1304 th_cfg_add_string(&tmpcfg, "password", &optPassword, NULL);
150
db5e7a1f1eb3 Add comment in config file about format of user color setting.
Matti Hamalainen <ccr@tnsp.org>
parents: 149
diff changeset
1305 th_cfg_add_comment(&tmpcfg, "Default color as a hex-triplet");
133
ffe8bbd429fa Config file.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
1306 th_cfg_add_hexvalue(&tmpcfg, "color", &optUserColor, optUserColor);
149
a4d6707161a7 Add config file option for default setting of ignore mode.
Matti Hamalainen <ccr@tnsp.org>
parents: 148
diff changeset
1307
a4d6707161a7 Add config file option for default setting of ignore mode.
Matti Hamalainen <ccr@tnsp.org>
parents: 148
diff changeset
1308 th_cfg_add_comment(&tmpcfg, "Default setting of ignore mode");
151
303db1141147 Oops, should be th_cfg_add_bool() instead of th_cfg_add_boolean()
Matti Hamalainen <ccr@tnsp.org>
parents: 150
diff changeset
1309 th_cfg_add_bool(&tmpcfg, "ignore", &setIgnoreMode, setIgnoreMode);
149
a4d6707161a7 Add config file option for default setting of ignore mode.
Matti Hamalainen <ccr@tnsp.org>
parents: 148
diff changeset
1310 th_cfg_add_comment(&tmpcfg, "People to be ignored when ignore mode is enabled");
265
b9c650db8a6a Rename variable nnIgnoreList to setIgnoreList.
Matti Hamalainen <ccr@tnsp.org>
parents: 264
diff changeset
1311 th_cfg_add_string_list(&tmpcfg, "ignore_list", &setIgnoreList);
264
4c1c18a388d9 Add configuration setting and functionality for random "keepalive" messages to avoid idle timeout kicks from chat.
Matti Hamalainen <ccr@tnsp.org>
parents: 258
diff changeset
1312
4c1c18a388d9 Add configuration setting and functionality for random "keepalive" messages to avoid idle timeout kicks from chat.
Matti Hamalainen <ccr@tnsp.org>
parents: 258
diff changeset
1313 th_cfg_add_comment(&tmpcfg, "Random messages for idle timeout protection. If none are set, plain '.' is used.");
4c1c18a388d9 Add configuration setting and functionality for random "keepalive" messages to avoid idle timeout kicks from chat.
Matti Hamalainen <ccr@tnsp.org>
parents: 258
diff changeset
1314 th_cfg_add_string_list(&tmpcfg, "idle_messages", &setIdleMessages);
4c1c18a388d9 Add configuration setting and functionality for random "keepalive" messages to avoid idle timeout kicks from chat.
Matti Hamalainen <ccr@tnsp.org>
parents: 258
diff changeset
1315
133
ffe8bbd429fa Config file.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
1316 th_cfg_add_section(&cfg, "general", tmpcfg);
ffe8bbd429fa Config file.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
1317
264
4c1c18a388d9 Add configuration setting and functionality for random "keepalive" messages to avoid idle timeout kicks from chat.
Matti Hamalainen <ccr@tnsp.org>
parents: 258
diff changeset
1318
133
ffe8bbd429fa Config file.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
1319 tmpcfg = NULL;
ffe8bbd429fa Config file.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
1320 th_cfg_add_comment(&tmpcfg, "Chat server hostname or IP address");
ffe8bbd429fa Config file.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
1321 th_cfg_add_string(&tmpcfg, "host", &optServer, optServer);
321
384d508d1df3 Update configuration file comment about room ports.
Matti Hamalainen <ccr@tnsp.org>
parents: 320
diff changeset
1322 th_cfg_add_comment(&tmpcfg, "Default port to connect to (8005 = main room, 8003 = passion pit)");
133
ffe8bbd429fa Config file.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
1323 th_cfg_add_int(&tmpcfg, "port", &optPort, optPort);
ffe8bbd429fa Config file.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
1324 th_cfg_add_section(&cfg, "server", tmpcfg);
ffe8bbd429fa Config file.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
1325
239
b7e7ed741a18 Add unfinished code for logfile name parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
1326 tmpcfg = NULL;
369
461a6befb7c3 Oops, the proxy type was accidentally called "port" in the configuration file, as was the actual port setting. Fixed.
Matti Hamalainen <ccr@tnsp.org>
parents: 360
diff changeset
1327 th_cfg_add_comment(&tmpcfg, "Proxy server type (0 = none, 1 = SOCKS 4, 2 = SOCKS 4a)");
461a6befb7c3 Oops, the proxy type was accidentally called "port" in the configuration file, as was the actual port setting. Fixed.
Matti Hamalainen <ccr@tnsp.org>
parents: 360
diff changeset
1328 th_cfg_add_int(&tmpcfg, "type", &optProxyType, optProxyType);
353
83ae825bb8c1 Add configuration section for proxy settings.
Matti Hamalainen <ccr@tnsp.org>
parents: 352
diff changeset
1329 th_cfg_add_comment(&tmpcfg, "Proxy server host name");
83ae825bb8c1 Add configuration section for proxy settings.
Matti Hamalainen <ccr@tnsp.org>
parents: 352
diff changeset
1330 th_cfg_add_string(&tmpcfg, "host", &optProxyServer, optProxyServer);
83ae825bb8c1 Add configuration section for proxy settings.
Matti Hamalainen <ccr@tnsp.org>
parents: 352
diff changeset
1331 th_cfg_add_comment(&tmpcfg, "Proxy port, 1080 is the standard SOCKS port");
83ae825bb8c1 Add configuration section for proxy settings.
Matti Hamalainen <ccr@tnsp.org>
parents: 352
diff changeset
1332 th_cfg_add_int(&tmpcfg, "port", &optProxyPort, optProxyPort);
83ae825bb8c1 Add configuration section for proxy settings.
Matti Hamalainen <ccr@tnsp.org>
parents: 352
diff changeset
1333 th_cfg_add_section(&cfg, "proxy", tmpcfg);
83ae825bb8c1 Add configuration section for proxy settings.
Matti Hamalainen <ccr@tnsp.org>
parents: 352
diff changeset
1334
83ae825bb8c1 Add configuration section for proxy settings.
Matti Hamalainen <ccr@tnsp.org>
parents: 352
diff changeset
1335 tmpcfg = NULL;
239
b7e7ed741a18 Add unfinished code for logfile name parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
1336 th_cfg_add_comment(&tmpcfg, "Enable logging");
247
fce4e2e31d69 Add the config section ...
Matti Hamalainen <ccr@tnsp.org>
parents: 242
diff changeset
1337 th_cfg_add_bool(&tmpcfg, "enable", &optLogEnable, optLogEnable);
242
cb86d7543be2 Add functionality for generating logfile names based on port etc. and
Matti Hamalainen <ccr@tnsp.org>
parents: 240
diff changeset
1338 th_cfg_add_comment(&tmpcfg, "Log filename format");
247
fce4e2e31d69 Add the config section ...
Matti Hamalainen <ccr@tnsp.org>
parents: 242
diff changeset
1339 th_cfg_add_string(&tmpcfg, "filename", &optLogFilename, optLogFilename);
fce4e2e31d69 Add the config section ...
Matti Hamalainen <ccr@tnsp.org>
parents: 242
diff changeset
1340 th_cfg_add_section(&cfg, "logging", tmpcfg);
239
b7e7ed741a18 Add unfinished code for logfile name parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
1341
154
e8f67e344aaf Get correct directory for saving configuration under Windows.
Matti Hamalainen <ccr@tnsp.org>
parents: 153
diff changeset
1342 #ifdef __WIN32
e8f67e344aaf Get correct directory for saving configuration under Windows.
Matti Hamalainen <ccr@tnsp.org>
parents: 153
diff changeset
1343 {
e8f67e344aaf Get correct directory for saving configuration under Windows.
Matti Hamalainen <ccr@tnsp.org>
parents: 153
diff changeset
1344 char tmpPath[MAX_PATH];
e8f67e344aaf Get correct directory for saving configuration under Windows.
Matti Hamalainen <ccr@tnsp.org>
parents: 153
diff changeset
1345 if (SHGetFolderPath(NULL, CSIDL_APPDATA | CSIDL_FLAG_CREATE, NULL, 0, tmpPath) == S_OK)
e8f67e344aaf Get correct directory for saving configuration under Windows.
Matti Hamalainen <ccr@tnsp.org>
parents: 153
diff changeset
1346 homeDir = th_strdup(tmpPath);
197
e0ec2280a778 Implement browser launching on Windows via ShellExecute().
Matti Hamalainen <ccr@tnsp.org>
parents: 196
diff changeset
1347
e0ec2280a778 Implement browser launching on Windows via ShellExecute().
Matti Hamalainen <ccr@tnsp.org>
parents: 196
diff changeset
1348 CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE);
154
e8f67e344aaf Get correct directory for saving configuration under Windows.
Matti Hamalainen <ccr@tnsp.org>
parents: 153
diff changeset
1349 }
e8f67e344aaf Get correct directory for saving configuration under Windows.
Matti Hamalainen <ccr@tnsp.org>
parents: 153
diff changeset
1350 #else
172
ffba05eb578c Make a copy of getenv("HOME") result instead of using it directly.
Matti Hamalainen <ccr@tnsp.org>
parents: 171
diff changeset
1351 homeDir = th_strdup(getenv("HOME"));
154
e8f67e344aaf Get correct directory for saving configuration under Windows.
Matti Hamalainen <ccr@tnsp.org>
parents: 153
diff changeset
1352 #endif
e8f67e344aaf Get correct directory for saving configuration under Windows.
Matti Hamalainen <ccr@tnsp.org>
parents: 153
diff changeset
1353
e8f67e344aaf Get correct directory for saving configuration under Windows.
Matti Hamalainen <ccr@tnsp.org>
parents: 153
diff changeset
1354 if (homeDir != NULL) {
e8f67e344aaf Get correct directory for saving configuration under Windows.
Matti Hamalainen <ccr@tnsp.org>
parents: 153
diff changeset
1355 FILE *cfgfile;
e8f67e344aaf Get correct directory for saving configuration under Windows.
Matti Hamalainen <ccr@tnsp.org>
parents: 153
diff changeset
1356 setConfigFile = th_strdup_printf("%s" SET_DIR_SEPARATOR "%s", homeDir, SET_CONFIG_FILE);
e8f67e344aaf Get correct directory for saving configuration under Windows.
Matti Hamalainen <ccr@tnsp.org>
parents: 153
diff changeset
1357
e8f67e344aaf Get correct directory for saving configuration under Windows.
Matti Hamalainen <ccr@tnsp.org>
parents: 153
diff changeset
1358 THMSG(0, "Reading configuration from '%s'.\n", setConfigFile);
e8f67e344aaf Get correct directory for saving configuration under Windows.
Matti Hamalainen <ccr@tnsp.org>
parents: 153
diff changeset
1359
315
864e6e52ed69 Fix a filehandle leak when reading in configuration file.
Matti Hamalainen <ccr@tnsp.org>
parents: 314
diff changeset
1360 if ((cfgfile = fopen(setConfigFile, "r")) != NULL) {
154
e8f67e344aaf Get correct directory for saving configuration under Windows.
Matti Hamalainen <ccr@tnsp.org>
parents: 153
diff changeset
1361 th_cfg_read(cfgfile, setConfigFile, cfg);
315
864e6e52ed69 Fix a filehandle leak when reading in configuration file.
Matti Hamalainen <ccr@tnsp.org>
parents: 314
diff changeset
1362 fclose(cfgfile);
864e6e52ed69 Fix a filehandle leak when reading in configuration file.
Matti Hamalainen <ccr@tnsp.org>
parents: 314
diff changeset
1363 }
133
ffe8bbd429fa Config file.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
1364 }
196
edd5ce3e5399 Add simplistic username/password requester if none given on commandline or config file.
Matti Hamalainen <ccr@tnsp.org>
parents: 195
diff changeset
1365
137
fad8c31e41e6 Move browser code around a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 134
diff changeset
1366 setBrowser = getenv("BROWSER");
fad8c31e41e6 Move browser code around a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 134
diff changeset
1367 if (setBrowser == NULL)
fad8c31e41e6 Move browser code around a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 134
diff changeset
1368 setBrowser = "firefox";
fad8c31e41e6 Move browser code around a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 134
diff changeset
1369
153
f1684884fd56 Comment cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 151
diff changeset
1370 /* Parse command line arguments */
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1371 argsOK = th_args_process(argc, argv, optList, optListN,
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1372 argHandleOpt, argHandleFile, FALSE);
26
b84fc46c6035 Improved color hex triplet parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 25
diff changeset
1373
198
21a37995c3fb Make configuration username/password overridable on command line.
Matti Hamalainen <ccr@tnsp.org>
parents: 197
diff changeset
1374 if (optUserNameCmd != NULL) {
21a37995c3fb Make configuration username/password overridable on command line.
Matti Hamalainen <ccr@tnsp.org>
parents: 197
diff changeset
1375 optUserName = optUserNameCmd;
21a37995c3fb Make configuration username/password overridable on command line.
Matti Hamalainen <ccr@tnsp.org>
parents: 197
diff changeset
1376 optPassword = optPasswordCmd;
21a37995c3fb Make configuration username/password overridable on command line.
Matti Hamalainen <ccr@tnsp.org>
parents: 197
diff changeset
1377 }
21a37995c3fb Make configuration username/password overridable on command line.
Matti Hamalainen <ccr@tnsp.org>
parents: 197
diff changeset
1378
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1379 if (!argsOK)
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1380 return -2;
64
6a3a917303e4 Some random cleanups, bring back WinSock support.
Matti Hamalainen <ccr@tnsp.org>
parents: 63
diff changeset
1381
103
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
1382 /* Allocate userhash */
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
1383 if ((nnUsers = nn_userhash_new()) == NULL) {
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
1384 THERR("Could not allocate userhash. Fatal error.\n");
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
1385 return -105;
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
1386 }
64
6a3a917303e4 Some random cleanups, bring back WinSock support.
Matti Hamalainen <ccr@tnsp.org>
parents: 63
diff changeset
1387
264
4c1c18a388d9 Add configuration setting and functionality for random "keepalive" messages to avoid idle timeout kicks from chat.
Matti Hamalainen <ccr@tnsp.org>
parents: 258
diff changeset
1388 /* If no idle messages are set, add default */
4c1c18a388d9 Add configuration setting and functionality for random "keepalive" messages to avoid idle timeout kicks from chat.
Matti Hamalainen <ccr@tnsp.org>
parents: 258
diff changeset
1389 if (setIdleMessages == NULL) {
4c1c18a388d9 Add configuration setting and functionality for random "keepalive" messages to avoid idle timeout kicks from chat.
Matti Hamalainen <ccr@tnsp.org>
parents: 258
diff changeset
1390 th_llist_append(&setIdleMessages, th_strdup("."));
4c1c18a388d9 Add configuration setting and functionality for random "keepalive" messages to avoid idle timeout kicks from chat.
Matti Hamalainen <ccr@tnsp.org>
parents: 258
diff changeset
1391 }
4c1c18a388d9 Add configuration setting and functionality for random "keepalive" messages to avoid idle timeout kicks from chat.
Matti Hamalainen <ccr@tnsp.org>
parents: 258
diff changeset
1392
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1393 /* Open logfile */
242
cb86d7543be2 Add functionality for generating logfile names based on port etc. and
Matti Hamalainen <ccr@tnsp.org>
parents: 240
diff changeset
1394 logFileOpen();
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1395
264
4c1c18a388d9 Add configuration setting and functionality for random "keepalive" messages to avoid idle timeout kicks from chat.
Matti Hamalainen <ccr@tnsp.org>
parents: 258
diff changeset
1396 /* Initialize network */
97
218efd2f0641 Rename functions for clarity.
Matti Hamalainen <ccr@tnsp.org>
parents: 96
diff changeset
1397 if (!nn_network_init()) {
91
acfc4b4bc180 Create network initialization functions in libnnchat and move Win32/WinSock code there.
Matti Hamalainen <ccr@tnsp.org>
parents: 90
diff changeset
1398 THERR("Could not initialize network subsystem.\n");
acfc4b4bc180 Create network initialization functions in libnnchat and move Win32/WinSock code there.
Matti Hamalainen <ccr@tnsp.org>
parents: 90
diff changeset
1399 goto err_exit;
acfc4b4bc180 Create network initialization functions in libnnchat and move Win32/WinSock code there.
Matti Hamalainen <ccr@tnsp.org>
parents: 90
diff changeset
1400 } else
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1401 networkInit = TRUE;
68
3ab7751fdad1 MingW compatibility, with one ugly kludge.
Matti Hamalainen <ccr@tnsp.org>
parents: 67
diff changeset
1402
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1403 /* Initialize NCurses */
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1404 if (!optDaemon) {
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1405 if (LINES < 0 || LINES > 1000) LINES = 24;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1406 if (COLS < 0 || COLS > 1000) COLS = 80;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1407 initscr();
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1408 raw();
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1409 keypad(stdscr, TRUE);
275
66b90d71548b Improve interactive prompts, etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 273
diff changeset
1410 noecho();
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1411 meta(stdscr, TRUE);
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1412 timeout(SET_DELAY);
275
66b90d71548b Improve interactive prompts, etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 273
diff changeset
1413 curVis = curs_set(0);
110
8af4072dc31a Fix Win32/MinGW/PDcurses issues.
Matti Hamalainen <ccr@tnsp.org>
parents: 109
diff changeset
1414
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1415 if (has_colors()) {
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1416 start_color();
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1417
185
73bdf1ede348 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 184
diff changeset
1418 init_pair( 1, COLOR_RED, COLOR_BLACK);
73bdf1ede348 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 184
diff changeset
1419 init_pair( 2, COLOR_GREEN, COLOR_BLACK);
73bdf1ede348 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 184
diff changeset
1420 init_pair( 3, COLOR_YELLOW, COLOR_BLACK);
73bdf1ede348 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 184
diff changeset
1421 init_pair( 4, COLOR_BLUE, COLOR_BLACK);
73bdf1ede348 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 184
diff changeset
1422 init_pair( 5, COLOR_MAGENTA, COLOR_BLACK);
73bdf1ede348 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 184
diff changeset
1423 init_pair( 6, COLOR_CYAN, COLOR_BLACK);
73bdf1ede348 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 184
diff changeset
1424 init_pair( 7, COLOR_WHITE, COLOR_BLACK);
73bdf1ede348 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 184
diff changeset
1425 init_pair( 8, COLOR_BLACK, COLOR_BLACK);
28
512775f6b081 A refactored ncurses-based UI.
Matti Hamalainen <ccr@tnsp.org>
parents: 27
diff changeset
1426
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1427 init_pair(10, COLOR_BLACK, COLOR_RED);
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1428 init_pair(11, COLOR_WHITE, COLOR_RED);
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1429 init_pair(12, COLOR_GREEN, COLOR_RED);
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1430 init_pair(13, COLOR_YELLOW, COLOR_RED);
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1431 init_pair(14, COLOR_BLUE, COLOR_RED);
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1432 init_pair(15, COLOR_MAGENTA, COLOR_RED);
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1433 init_pair(16, COLOR_CYAN, COLOR_RED);
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1434 }
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1435
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1436 cursesInit = TRUE;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1437
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1438 if (!initializeWindows())
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1439 goto err_exit;
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
1440
346
102fb74fc794 Set window title when running under PDCurses.
Matti Hamalainen <ccr@tnsp.org>
parents: 342
diff changeset
1441 #ifdef PDCURSES
102fb74fc794 Set window title when running under PDCurses.
Matti Hamalainen <ccr@tnsp.org>
parents: 342
diff changeset
1442 PDC_set_title("NNChat v" NN_VERSION);
102fb74fc794 Set window title when running under PDCurses.
Matti Hamalainen <ccr@tnsp.org>
parents: 342
diff changeset
1443 #endif
102fb74fc794 Set window title when running under PDCurses.
Matti Hamalainen <ccr@tnsp.org>
parents: 342
diff changeset
1444
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
1445 memset(chatWindows, 0, sizeof(chatWindows));
291
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
1446 chatWindows[0] = nn_window_new(NULL);
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
1447 currWin = chatWindows[0];
291
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
1448 updateStatus();
268
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1449 }
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1450
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1451 /* Check if we have username and password */
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1452 if (cursesInit && (optUserName == NULL || optPassword == NULL)) {
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1453 printWin(editWin, "You can avoid this prompt by issuing '/save' after logging in.\n");
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1454 optUserName = promptRequester(editWin, "NN username: ", FALSE);
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1455 optPassword = promptRequester(editWin, "NN password: ", TRUE);
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1456 }
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1457
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1458 if (optUserName == NULL || optPassword == NULL) {
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1459 errorMsg("Username and/or password not specified.\n");
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1460 goto err_exit;
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1461 }
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1462
354
c01e42fc9adb More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents: 353
diff changeset
1463 /* Create a connection */
c01e42fc9adb More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents: 353
diff changeset
1464 conn = nn_conn_new(errorFunc, messageFunc);
c01e42fc9adb More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents: 353
diff changeset
1465 if (conn == NULL) {
c01e42fc9adb More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents: 353
diff changeset
1466 errorMsg("Could not create connection structure.\n");
c01e42fc9adb More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents: 353
diff changeset
1467 goto err_exit;
c01e42fc9adb More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents: 353
diff changeset
1468 }
c01e42fc9adb More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents: 353
diff changeset
1469
352
b54c8545dcb0 Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents: 347
diff changeset
1470 /* Are we using a proxy? */
b54c8545dcb0 Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents: 347
diff changeset
1471 if (optProxyType != NN_PROXY_NONE && optProxyServer != NULL) {
354
c01e42fc9adb More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents: 353
diff changeset
1472 if (nn_conn_set_proxy(conn, optProxyType, optProxyPort, optProxyServer) != 0) {
c01e42fc9adb More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents: 353
diff changeset
1473 errorMsg("Error setting proxy information.\n");
352
b54c8545dcb0 Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents: 347
diff changeset
1474 goto err_exit;
b54c8545dcb0 Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents: 347
diff changeset
1475 }
b54c8545dcb0 Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents: 347
diff changeset
1476 }
b54c8545dcb0 Overhaul network code a bit, add initial implementation of SOCKS4/4A proxy support -- which may not work yet, it is untested.
Matti Hamalainen <ccr@tnsp.org>
parents: 347
diff changeset
1477
268
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1478 /* Okay ... */
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
1479 printMsg(currWin, "Trying to resolve host '%s' ...\n", optServer);
354
c01e42fc9adb More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents: 353
diff changeset
1480 conn->host = th_strdup(optServer);
c01e42fc9adb More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents: 353
diff changeset
1481 conn->hst = nn_resolve_host(conn, optServer);
c01e42fc9adb More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents: 353
diff changeset
1482 if (conn->hst == NULL) {
268
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1483 errorMsg("Could not resolve hostname: %s.\n", strerror(h_errno));
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1484 goto err_exit;
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1485 }
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1486
329
c0988ab45afd #ifdef out the policy probe.
Matti Hamalainen <ccr@tnsp.org>
parents: 328
diff changeset
1487 #ifdef FINAL_BUILD
268
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1488 /* To emulate the official client, we first make a request for
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1489 * policy file, even though we don't use it for anything...
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1490 */
354
c01e42fc9adb More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents: 353
diff changeset
1491 if (nn_conn_open(conn, 843, NULL) != 0) {
268
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1492 errorMsg("Policy file request connection setup failed!\n");
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1493 goto err_exit;
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1494 }
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1495
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1496 tmpStr = "<policy-file-request/>";
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1497 if (nn_conn_send_buf(conn, tmpStr, strlen(tmpStr) + 1) == FALSE) {
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1498 errorMsg("Failed to send policy file request.\n");
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1499 goto err_exit;
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1500 } else {
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1501 int cres = nn_conn_pull(conn);
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1502 if (cres == 0) {
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
1503 printMsg(currWin, "Probe got: %s\n", conn->buf);
268
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1504 } else {
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
1505 printMsg(currWin, "Could not get policy probe.\n");
268
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1506 }
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1507 }
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1508 nn_conn_close(conn);
329
c0988ab45afd #ifdef out the policy probe.
Matti Hamalainen <ccr@tnsp.org>
parents: 328
diff changeset
1509 #endif
268
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1510
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1511 /* Okay, now do the proper connection ... */
354
c01e42fc9adb More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents: 353
diff changeset
1512 if (nn_conn_open(conn, optPort, NULL) != 0) {
268
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1513 errorMsg("Main connection setup failed!\n");
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1514 goto err_exit;
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1515 }
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1516
275
66b90d71548b Improve interactive prompts, etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 273
diff changeset
1517 /* Send login command */
268
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1518 optUserNameEnc = nn_dblencode_str(optUserName);
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1519 tmpStr = nn_dblencode_str(optSite);
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1520 nn_conn_send_msg(conn, optUserNameEnc, "%%2Flogin%%20%%2Dsite%%20%s%%20%%2Dpassword%%20%s", tmpStr, optPassword);
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1521 th_free(tmpStr);
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1522
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1523 /* Initialize random numbers */
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1524 prevTime = time(NULL);
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1525 srandom((int) prevTime);
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1526
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1527 if (cursesInit) {
275
66b90d71548b Improve interactive prompts, etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 273
diff changeset
1528 /* Initialize rest of interactive UI code */
97
218efd2f0641 Rename functions for clarity.
Matti Hamalainen <ccr@tnsp.org>
parents: 96
diff changeset
1529 nn_editbuf_clear(editBuf);
275
66b90d71548b Improve interactive prompts, etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 273
diff changeset
1530
66b90d71548b Improve interactive prompts, etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 273
diff changeset
1531 /* First update of screen */
291
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
1532 printEditBuf(editBuf);
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
1533 updateStatus();
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
1534
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
1535 printMsg(NULL, "%s v%s - %s\n", th_prog_name, th_prog_version, th_prog_fullname);
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
1536 printMsg(NULL, "%s\n", th_prog_author);
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
1537 printMsg(NULL, "%s\n", th_prog_license);
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1538 }
100
ed4067c10a8a Remove useless buffer usage from error reporting function.
Matti Hamalainen <ccr@tnsp.org>
parents: 98
diff changeset
1539
264
4c1c18a388d9 Add configuration setting and functionality for random "keepalive" messages to avoid idle timeout kicks from chat.
Matti Hamalainen <ccr@tnsp.org>
parents: 258
diff changeset
1540 /* Enter mainloop */
360
b465a17ffa47 Finally fix handling of long packets.
Matti Hamalainen <ccr@tnsp.org>
parents: 359
diff changeset
1541 nn_conn_reset(conn);
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1542 while (!isError && !exitProg) {
168
2e4850ece456 Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 165
diff changeset
1543 int cres = nn_conn_pull(conn);
360
b465a17ffa47 Finally fix handling of long packets.
Matti Hamalainen <ccr@tnsp.org>
parents: 359
diff changeset
1544 if (cres == 0 && *(conn->ptr - 1) == 0) {
b465a17ffa47 Finally fix handling of long packets.
Matti Hamalainen <ccr@tnsp.org>
parents: 359
diff changeset
1545 char *ptr = conn->buf;
168
2e4850ece456 Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 165
diff changeset
1546 do {
360
b465a17ffa47 Finally fix handling of long packets.
Matti Hamalainen <ccr@tnsp.org>
parents: 359
diff changeset
1547 size_t bufLen = strlen(ptr) + 1;
b465a17ffa47 Finally fix handling of long packets.
Matti Hamalainen <ccr@tnsp.org>
parents: 359
diff changeset
1548 int result = handleProtocol(conn, ptr, bufLen);
168
2e4850ece456 Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 165
diff changeset
1549
385
bbd5edbf1143 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 381
diff changeset
1550 if (result > 0)
bbd5edbf1143 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 381
diff changeset
1551 {
168
2e4850ece456 Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 165
diff changeset
1552 /* Couldn't handle the message for some reason */
360
b465a17ffa47 Finally fix handling of long packets.
Matti Hamalainen <ccr@tnsp.org>
parents: 359
diff changeset
1553 printMsg(currWin, "Could not handle: %s\n", ptr);
385
bbd5edbf1143 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 381
diff changeset
1554 }
bbd5edbf1143 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 381
diff changeset
1555 else if (result < 0)
bbd5edbf1143 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 381
diff changeset
1556 {
168
2e4850ece456 Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 165
diff changeset
1557 /* Fatal error, quit */
360
b465a17ffa47 Finally fix handling of long packets.
Matti Hamalainen <ccr@tnsp.org>
parents: 359
diff changeset
1558 errorMsg("Fatal error with message: %s\n", ptr);
168
2e4850ece456 Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 165
diff changeset
1559 isError = TRUE;
2e4850ece456 Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 165
diff changeset
1560 }
2e4850ece456 Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 165
diff changeset
1561
360
b465a17ffa47 Finally fix handling of long packets.
Matti Hamalainen <ccr@tnsp.org>
parents: 359
diff changeset
1562 conn->total -= bufLen;
b465a17ffa47 Finally fix handling of long packets.
Matti Hamalainen <ccr@tnsp.org>
parents: 359
diff changeset
1563 ptr += bufLen;
b465a17ffa47 Finally fix handling of long packets.
Matti Hamalainen <ccr@tnsp.org>
parents: 359
diff changeset
1564 } while (conn->total > 0 && !isError);
b465a17ffa47 Finally fix handling of long packets.
Matti Hamalainen <ccr@tnsp.org>
parents: 359
diff changeset
1565 nn_conn_reset(conn);
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1566 }
168
2e4850ece456 Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 165
diff changeset
1567 if (!nn_conn_check(conn))
2e4850ece456 Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 165
diff changeset
1568 isError = TRUE;
2e4850ece456 Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 165
diff changeset
1569
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1570 /* Handle user input */
275
66b90d71548b Improve interactive prompts, etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 273
diff changeset
1571 if (cursesInit) {
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1572 int c, cnt = 0;
319
b9127815c9aa Oops, updateMain was set to TRUE by default, causing excessive window refreshing. Fixed.
Matti Hamalainen <ccr@tnsp.org>
parents: 318
diff changeset
1573 BOOL update = FALSE, updateMain = FALSE;
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1574
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1575 /* Handle several buffered keypresses at once */
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1576 do {
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1577 c = wgetch(stdscr);
77
e8c9d7d13866 Handle certain key sequences better.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
1578 if (c == 0x1b) {
e8c9d7d13866 Handle certain key sequences better.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
1579 c = wgetch(stdscr);
e8c9d7d13866 Handle certain key sequences better.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
1580 if (c == 'O') {
e8c9d7d13866 Handle certain key sequences better.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
1581 c = wgetch(stdscr);
e8c9d7d13866 Handle certain key sequences better.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
1582 switch (c) {
e8c9d7d13866 Handle certain key sequences better.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
1583 case 'd': c = 0x204; break;
e8c9d7d13866 Handle certain key sequences better.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
1584 case 'c': c = 0x206; break;
e8c9d7d13866 Handle certain key sequences better.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
1585 default:
297
d34910f1b1e1 Print messages about user leaving or joining the chat in the specific buffer, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 293
diff changeset
1586 if (optDebug)
d34910f1b1e1 Print messages about user leaving or joining the chat in the specific buffer, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 293
diff changeset
1587 printMsg(currWin, "Unhandled ESC-O key sequence 0x%02x\n", c);
77
e8c9d7d13866 Handle certain key sequences better.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
1588 break;
e8c9d7d13866 Handle certain key sequences better.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
1589 }
206
af32c038cf1e Add some hardcoded translations for certain terminal keycodes that NCurses 4.x on Solaris didn't handle .. urgh.
Matti Hamalainen <ccr@tnsp.org>
parents: 203
diff changeset
1590 } else
af32c038cf1e Add some hardcoded translations for certain terminal keycodes that NCurses 4.x on Solaris didn't handle .. urgh.
Matti Hamalainen <ccr@tnsp.org>
parents: 203
diff changeset
1591 if (c == '[') {
af32c038cf1e Add some hardcoded translations for certain terminal keycodes that NCurses 4.x on Solaris didn't handle .. urgh.
Matti Hamalainen <ccr@tnsp.org>
parents: 203
diff changeset
1592 c = wgetch(stdscr);
af32c038cf1e Add some hardcoded translations for certain terminal keycodes that NCurses 4.x on Solaris didn't handle .. urgh.
Matti Hamalainen <ccr@tnsp.org>
parents: 203
diff changeset
1593 switch (c) {
252
dcf78e2c458c Improve log filename format parsing; Add special casing for handling of function keys for certain terminal types.
Matti Hamalainen <ccr@tnsp.org>
parents: 247
diff changeset
1594 case 0x31:
dcf78e2c458c Improve log filename format parsing; Add special casing for handling of function keys for certain terminal types.
Matti Hamalainen <ccr@tnsp.org>
parents: 247
diff changeset
1595 c = wgetch(stdscr);
dcf78e2c458c Improve log filename format parsing; Add special casing for handling of function keys for certain terminal types.
Matti Hamalainen <ccr@tnsp.org>
parents: 247
diff changeset
1596 if (c >= 0x31 && c <= 0x39)
dcf78e2c458c Improve log filename format parsing; Add special casing for handling of function keys for certain terminal types.
Matti Hamalainen <ccr@tnsp.org>
parents: 247
diff changeset
1597 c = KEY_F(c - 0x30);
dcf78e2c458c Improve log filename format parsing; Add special casing for handling of function keys for certain terminal types.
Matti Hamalainen <ccr@tnsp.org>
parents: 247
diff changeset
1598 else
dcf78e2c458c Improve log filename format parsing; Add special casing for handling of function keys for certain terminal types.
Matti Hamalainen <ccr@tnsp.org>
parents: 247
diff changeset
1599 c = ERR;
dcf78e2c458c Improve log filename format parsing; Add special casing for handling of function keys for certain terminal types.
Matti Hamalainen <ccr@tnsp.org>
parents: 247
diff changeset
1600 break;
dcf78e2c458c Improve log filename format parsing; Add special casing for handling of function keys for certain terminal types.
Matti Hamalainen <ccr@tnsp.org>
parents: 247
diff changeset
1601
206
af32c038cf1e Add some hardcoded translations for certain terminal keycodes that NCurses 4.x on Solaris didn't handle .. urgh.
Matti Hamalainen <ccr@tnsp.org>
parents: 203
diff changeset
1602 case 0x32: c = KEY_IC; break;
af32c038cf1e Add some hardcoded translations for certain terminal keycodes that NCurses 4.x on Solaris didn't handle .. urgh.
Matti Hamalainen <ccr@tnsp.org>
parents: 203
diff changeset
1603 case 0x33: c = KEY_DC; break;
af32c038cf1e Add some hardcoded translations for certain terminal keycodes that NCurses 4.x on Solaris didn't handle .. urgh.
Matti Hamalainen <ccr@tnsp.org>
parents: 203
diff changeset
1604
af32c038cf1e Add some hardcoded translations for certain terminal keycodes that NCurses 4.x on Solaris didn't handle .. urgh.
Matti Hamalainen <ccr@tnsp.org>
parents: 203
diff changeset
1605 case 0x35: c = KEY_PPAGE; break;
af32c038cf1e Add some hardcoded translations for certain terminal keycodes that NCurses 4.x on Solaris didn't handle .. urgh.
Matti Hamalainen <ccr@tnsp.org>
parents: 203
diff changeset
1606 case 0x36: c = KEY_NPAGE; break;
af32c038cf1e Add some hardcoded translations for certain terminal keycodes that NCurses 4.x on Solaris didn't handle .. urgh.
Matti Hamalainen <ccr@tnsp.org>
parents: 203
diff changeset
1607
af32c038cf1e Add some hardcoded translations for certain terminal keycodes that NCurses 4.x on Solaris didn't handle .. urgh.
Matti Hamalainen <ccr@tnsp.org>
parents: 203
diff changeset
1608 case 0x37: c = KEY_HOME; break;
af32c038cf1e Add some hardcoded translations for certain terminal keycodes that NCurses 4.x on Solaris didn't handle .. urgh.
Matti Hamalainen <ccr@tnsp.org>
parents: 203
diff changeset
1609 case 0x38: c = KEY_END; break;
af32c038cf1e Add some hardcoded translations for certain terminal keycodes that NCurses 4.x on Solaris didn't handle .. urgh.
Matti Hamalainen <ccr@tnsp.org>
parents: 203
diff changeset
1610
af32c038cf1e Add some hardcoded translations for certain terminal keycodes that NCurses 4.x on Solaris didn't handle .. urgh.
Matti Hamalainen <ccr@tnsp.org>
parents: 203
diff changeset
1611 default:
297
d34910f1b1e1 Print messages about user leaving or joining the chat in the specific buffer, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 293
diff changeset
1612 if (optDebug)
d34910f1b1e1 Print messages about user leaving or joining the chat in the specific buffer, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 293
diff changeset
1613 printMsg(currWin, "Unhandled ESC-[*~ key sequence 0x%02x\n", c);
206
af32c038cf1e Add some hardcoded translations for certain terminal keycodes that NCurses 4.x on Solaris didn't handle .. urgh.
Matti Hamalainen <ccr@tnsp.org>
parents: 203
diff changeset
1614 c = ERR;
af32c038cf1e Add some hardcoded translations for certain terminal keycodes that NCurses 4.x on Solaris didn't handle .. urgh.
Matti Hamalainen <ccr@tnsp.org>
parents: 203
diff changeset
1615 break;
af32c038cf1e Add some hardcoded translations for certain terminal keycodes that NCurses 4.x on Solaris didn't handle .. urgh.
Matti Hamalainen <ccr@tnsp.org>
parents: 203
diff changeset
1616 }
af32c038cf1e Add some hardcoded translations for certain terminal keycodes that NCurses 4.x on Solaris didn't handle .. urgh.
Matti Hamalainen <ccr@tnsp.org>
parents: 203
diff changeset
1617 /* Get the trailing ~ */
af32c038cf1e Add some hardcoded translations for certain terminal keycodes that NCurses 4.x on Solaris didn't handle .. urgh.
Matti Hamalainen <ccr@tnsp.org>
parents: 203
diff changeset
1618 if (c != ERR)
af32c038cf1e Add some hardcoded translations for certain terminal keycodes that NCurses 4.x on Solaris didn't handle .. urgh.
Matti Hamalainen <ccr@tnsp.org>
parents: 203
diff changeset
1619 wgetch(stdscr);
291
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
1620 }
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
1621 if (c >= 0x31 && c <= 0x39) {
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
1622 /* Chat window switching via Meta/Esc-[1..9] */
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
1623 int win = c - 0x31;
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
1624 if (win < SET_MAX_WINDOWS && chatWindows[win] != NULL) {
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
1625 currWin = chatWindows[win];
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
1626 update = updateMain = TRUE;
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
1627 }
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
1628 c = ERR;
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
1629 }
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
1630 else {
297
d34910f1b1e1 Print messages about user leaving or joining the chat in the specific buffer, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 293
diff changeset
1631 if (optDebug)
d34910f1b1e1 Print messages about user leaving or joining the chat in the specific buffer, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 293
diff changeset
1632 printMsg(currWin, "Unhandled ESC key sequence 0x%02x\n", c);
77
e8c9d7d13866 Handle certain key sequences better.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
1633 }
341
ece94ae2a051 Handling of certain Curses keycodes only works as intended under
Matti Hamalainen <ccr@tnsp.org>
parents: 340
diff changeset
1634 }
ece94ae2a051 Handling of certain Curses keycodes only works as intended under
Matti Hamalainen <ccr@tnsp.org>
parents: 340
diff changeset
1635 #if defined(__WIN32) && defined(PDCURSES)
ece94ae2a051 Handling of certain Curses keycodes only works as intended under
Matti Hamalainen <ccr@tnsp.org>
parents: 340
diff changeset
1636 else
332
f55f8309aa66 Support alt-[1..9] under Windows/PDCurses/SDL port for buffer switching.
Matti Hamalainen <ccr@tnsp.org>
parents: 331
diff changeset
1637 if (c >= 0x198 && c <= 0x1a0) {
f55f8309aa66 Support alt-[1..9] under Windows/PDCurses/SDL port for buffer switching.
Matti Hamalainen <ccr@tnsp.org>
parents: 331
diff changeset
1638 /* Chat window switching via Meta/Esc-[1..9] */
f55f8309aa66 Support alt-[1..9] under Windows/PDCurses/SDL port for buffer switching.
Matti Hamalainen <ccr@tnsp.org>
parents: 331
diff changeset
1639 int win = c - 0x198;
f55f8309aa66 Support alt-[1..9] under Windows/PDCurses/SDL port for buffer switching.
Matti Hamalainen <ccr@tnsp.org>
parents: 331
diff changeset
1640 if (win < SET_MAX_WINDOWS && chatWindows[win] != NULL) {
f55f8309aa66 Support alt-[1..9] under Windows/PDCurses/SDL port for buffer switching.
Matti Hamalainen <ccr@tnsp.org>
parents: 331
diff changeset
1641 currWin = chatWindows[win];
f55f8309aa66 Support alt-[1..9] under Windows/PDCurses/SDL port for buffer switching.
Matti Hamalainen <ccr@tnsp.org>
parents: 331
diff changeset
1642 update = updateMain = TRUE;
f55f8309aa66 Support alt-[1..9] under Windows/PDCurses/SDL port for buffer switching.
Matti Hamalainen <ccr@tnsp.org>
parents: 331
diff changeset
1643 }
f55f8309aa66 Support alt-[1..9] under Windows/PDCurses/SDL port for buffer switching.
Matti Hamalainen <ccr@tnsp.org>
parents: 331
diff changeset
1644 c = ERR;
77
e8c9d7d13866 Handle certain key sequences better.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
1645 }
341
ece94ae2a051 Handling of certain Curses keycodes only works as intended under
Matti Hamalainen <ccr@tnsp.org>
parents: 340
diff changeset
1646 #endif
119
4bc63a535acb Fix some PDCurses incompatibilities and remove some Win32/PDCurses specific hacks.
Matti Hamalainen <ccr@tnsp.org>
parents: 118
diff changeset
1647
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1648 switch (c) {
74
98004129202a Portability fixes.
Matti Hamalainen <ccr@tnsp.org>
parents: 73
diff changeset
1649 #ifdef KEY_RESIZE
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1650 case KEY_RESIZE:
119
4bc63a535acb Fix some PDCurses incompatibilities and remove some Win32/PDCurses specific hacks.
Matti Hamalainen <ccr@tnsp.org>
parents: 118
diff changeset
1651 resize_term(0, 0);
342
adc615a6b4e5 Call erase() when terminal is resized, this works around certain problems with old NCurses versions.
Matti Hamalainen <ccr@tnsp.org>
parents: 341
diff changeset
1652 erase();
119
4bc63a535acb Fix some PDCurses incompatibilities and remove some Win32/PDCurses specific hacks.
Matti Hamalainen <ccr@tnsp.org>
parents: 118
diff changeset
1653 timeout(SET_DELAY);
320
42ddc8bda6a9 Sanitize RESIZE event.
Matti Hamalainen <ccr@tnsp.org>
parents: 319
diff changeset
1654
385
bbd5edbf1143 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 381
diff changeset
1655 if (!initializeWindows())
bbd5edbf1143 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 381
diff changeset
1656 {
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
1657 errorMsg("Error resizing curses chatWindows\n");
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1658 isError = TRUE;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1659 }
320
42ddc8bda6a9 Sanitize RESIZE event.
Matti Hamalainen <ccr@tnsp.org>
parents: 319
diff changeset
1660 update = updateMain = TRUE;
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1661 break;
74
98004129202a Portability fixes.
Matti Hamalainen <ccr@tnsp.org>
parents: 73
diff changeset
1662 #endif
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1663
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1664 case KEY_ENTER:
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1665 case '\n':
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1666 case '\r':
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1667 /* Call the user input handler */
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1668 if (editBuf->len > 0) {
168
2e4850ece456 Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 165
diff changeset
1669 int result;
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1670
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1671 if (histMax > 0) {
97
218efd2f0641 Rename functions for clarity.
Matti Hamalainen <ccr@tnsp.org>
parents: 96
diff changeset
1672 nn_editbuf_free(histBuf[SET_MAX_HISTORY+1]);
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1673 histBuf[SET_MAX_HISTORY+1] = NULL;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1674 memmove(&histBuf[2], &histBuf[1], histMax * sizeof(histBuf[0]));
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1675 }
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1676
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1677 histPos = 0;
97
218efd2f0641 Rename functions for clarity.
Matti Hamalainen <ccr@tnsp.org>
parents: 96
diff changeset
1678 histBuf[1] = nn_editbuf_copy(editBuf);
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1679 if (histMax < SET_MAX_HISTORY) histMax++;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1680
97
218efd2f0641 Rename functions for clarity.
Matti Hamalainen <ccr@tnsp.org>
parents: 96
diff changeset
1681 nn_editbuf_insert(editBuf, editBuf->len, 0);
168
2e4850ece456 Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 165
diff changeset
1682 result = handleUserInput(conn, editBuf->data, editBuf->len);
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1683
97
218efd2f0641 Rename functions for clarity.
Matti Hamalainen <ccr@tnsp.org>
parents: 96
diff changeset
1684 nn_editbuf_clear(editBuf);
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1685
385
bbd5edbf1143 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 381
diff changeset
1686 if (result < 0)
bbd5edbf1143 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 381
diff changeset
1687 {
96
7c9538e71c89 Add connection keepalive by sending /listallusers every 15 minutes,
Matti Hamalainen <ccr@tnsp.org>
parents: 92
diff changeset
1688 errorMsg("Fatal error handling user input: %s\n", editBuf->data);
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1689 isError = TRUE;
264
4c1c18a388d9 Add configuration setting and functionality for random "keepalive" messages to avoid idle timeout kicks from chat.
Matti Hamalainen <ccr@tnsp.org>
parents: 258
diff changeset
1690 } else {
4c1c18a388d9 Add configuration setting and functionality for random "keepalive" messages to avoid idle timeout kicks from chat.
Matti Hamalainen <ccr@tnsp.org>
parents: 258
diff changeset
1691 /* Update time value of last sent message for unidle timeouts */
4c1c18a388d9 Add configuration setting and functionality for random "keepalive" messages to avoid idle timeout kicks from chat.
Matti Hamalainen <ccr@tnsp.org>
parents: 258
diff changeset
1692 prevTime = time(NULL);
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1693 }
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1694
322
b9c15c57dc8f Clean up message functions, add new printMsgQ() helper function for messages that should not
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
1695 updateMain = update = TRUE;
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1696 }
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1697 break;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1698
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1699 case KEY_UP: /* Backwards in input history */
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1700 if (histPos == 0) {
97
218efd2f0641 Rename functions for clarity.
Matti Hamalainen <ccr@tnsp.org>
parents: 96
diff changeset
1701 nn_editbuf_free(histBuf[0]);
218efd2f0641 Rename functions for clarity.
Matti Hamalainen <ccr@tnsp.org>
parents: 96
diff changeset
1702 histBuf[0] = nn_editbuf_copy(editBuf);
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1703 }
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1704 if (histPos < histMax) {
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1705 histPos++;
97
218efd2f0641 Rename functions for clarity.
Matti Hamalainen <ccr@tnsp.org>
parents: 96
diff changeset
1706 nn_editbuf_free(editBuf);
218efd2f0641 Rename functions for clarity.
Matti Hamalainen <ccr@tnsp.org>
parents: 96
diff changeset
1707 editBuf = nn_editbuf_copy(histBuf[histPos]);
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1708 update = TRUE;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1709 }
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1710 break;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1711
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1712 case KEY_DOWN: /* Forwards in input history */
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1713 if (histPos > 0) {
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1714 histPos--;
97
218efd2f0641 Rename functions for clarity.
Matti Hamalainen <ccr@tnsp.org>
parents: 96
diff changeset
1715 nn_editbuf_free(editBuf);
218efd2f0641 Rename functions for clarity.
Matti Hamalainen <ccr@tnsp.org>
parents: 96
diff changeset
1716 editBuf = nn_editbuf_copy(histBuf[histPos]);
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1717 update = TRUE;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1718 }
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1719 break;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1720
103
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
1721 case 0x204: /* ctrl+left arrow = Skip words left */
232
3140ea43d4a3 Handle certain terminals differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 230
diff changeset
1722 case 0x20b:
74
98004129202a Portability fixes.
Matti Hamalainen <ccr@tnsp.org>
parents: 73
diff changeset
1723 while (editBuf->pos > 0 && isspace((int) editBuf->data[editBuf->pos - 1]))
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1724 editBuf->pos--;
74
98004129202a Portability fixes.
Matti Hamalainen <ccr@tnsp.org>
parents: 73
diff changeset
1725 while (editBuf->pos > 0 && !isspace((int) editBuf->data[editBuf->pos - 1]))
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1726 editBuf->pos--;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1727 update = TRUE;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1728 break;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1729
103
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
1730 case 0x206: /* ctrl+right arrow = Skip words right */
232
3140ea43d4a3 Handle certain terminals differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 230
diff changeset
1731 case 0x210:
74
98004129202a Portability fixes.
Matti Hamalainen <ccr@tnsp.org>
parents: 73
diff changeset
1732 while (editBuf->pos < editBuf->len && isspace((int) editBuf->data[editBuf->pos]))
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1733 editBuf->pos++;
74
98004129202a Portability fixes.
Matti Hamalainen <ccr@tnsp.org>
parents: 73
diff changeset
1734 while (editBuf->pos < editBuf->len && !isspace((int) editBuf->data[editBuf->pos]))
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1735 editBuf->pos++;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1736 update = TRUE;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1737 break;
103
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
1738
280
922d463ebe9b Indentation alignment.
Matti Hamalainen <ccr@tnsp.org>
parents: 279
diff changeset
1739 case KEY_HOME: nn_editbuf_setpos(editBuf, 0); update = TRUE; break;
922d463ebe9b Indentation alignment.
Matti Hamalainen <ccr@tnsp.org>
parents: 279
diff changeset
1740 case KEY_END: nn_editbuf_setpos(editBuf, editBuf->len); update = TRUE; break;
922d463ebe9b Indentation alignment.
Matti Hamalainen <ccr@tnsp.org>
parents: 279
diff changeset
1741 case KEY_LEFT: nn_editbuf_setpos(editBuf, editBuf->pos - 1); update = TRUE; break;
97
218efd2f0641 Rename functions for clarity.
Matti Hamalainen <ccr@tnsp.org>
parents: 96
diff changeset
1742 case KEY_RIGHT: nn_editbuf_setpos(editBuf, editBuf->pos + 1); update = TRUE; break;
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1743
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1744 case KEY_BACKSPACE:
73
c56e766acce1 Support keycode 0x08 as backspace for Win32 compatibility.
Matti Hamalainen <ccr@tnsp.org>
parents: 70
diff changeset
1745 case 0x08:
206
af32c038cf1e Add some hardcoded translations for certain terminal keycodes that NCurses 4.x on Solaris didn't handle .. urgh.
Matti Hamalainen <ccr@tnsp.org>
parents: 203
diff changeset
1746 case 0x7f:
97
218efd2f0641 Rename functions for clarity.
Matti Hamalainen <ccr@tnsp.org>
parents: 96
diff changeset
1747 nn_editbuf_delete(editBuf, editBuf->pos - 1);
218efd2f0641 Rename functions for clarity.
Matti Hamalainen <ccr@tnsp.org>
parents: 96
diff changeset
1748 nn_editbuf_setpos(editBuf, editBuf->pos - 1);
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1749 update = TRUE;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1750 break;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1751
122
e564dd9df07c Change some key defines.
Matti Hamalainen <ccr@tnsp.org>
parents: 121
diff changeset
1752 case KEY_DC: /* Delete character */
97
218efd2f0641 Rename functions for clarity.
Matti Hamalainen <ccr@tnsp.org>
parents: 96
diff changeset
1753 nn_editbuf_delete(editBuf, editBuf->pos);
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1754 update = TRUE;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1755 break;
103
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
1756
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
1757
175
86904a43c339 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 174
diff changeset
1758 case KEY_IC: /* Ins = Toggle insert / overwrite mode */
103
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
1759 insertMode = !insertMode;
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
1760 update = TRUE;
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
1761 break;
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1762
322
b9c15c57dc8f Clean up message functions, add new printMsgQ() helper function for messages that should not
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
1763 case KEY_F(1): /* F1 = Print help */
b9c15c57dc8f Clean up message functions, add new printMsgQ() helper function for messages that should not
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
1764 printHelp();
b9c15c57dc8f Clean up message functions, add new printMsgQ() helper function for messages that should not
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
1765 updateMain = TRUE;
b9c15c57dc8f Clean up message functions, add new printMsgQ() helper function for messages that should not
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
1766 break;
b9c15c57dc8f Clean up message functions, add new printMsgQ() helper function for messages that should not
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
1767
208
6c5d136b6e6a Use curses KEY_F(n) macros for defining function keys instead of hardcoded values.
Matti Hamalainen <ccr@tnsp.org>
parents: 207
diff changeset
1768 case KEY_F(2): /* F2 = Clear editbuffer */
103
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
1769 nn_editbuf_clear(editBuf);
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
1770 update = TRUE;
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
1771 break;
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
1772
208
6c5d136b6e6a Use curses KEY_F(n) macros for defining function keys instead of hardcoded values.
Matti Hamalainen <ccr@tnsp.org>
parents: 207
diff changeset
1773 case KEY_F(5): /* F5 = Ignore mode */
149
a4d6707161a7 Add config file option for default setting of ignore mode.
Matti Hamalainen <ccr@tnsp.org>
parents: 148
diff changeset
1774 setIgnoreMode = !setIgnoreMode;
333
64946336548a Don't log toggling of ignore mode messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
1775 printMsgQ(currWin, "Ignore mode = %s\n", setIgnoreMode ? "ON" : "OFF");
103
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
1776 break;
334
3c7676b2b367 #if'd out code for F8 = toggle debug mode key.
Matti Hamalainen <ccr@tnsp.org>
parents: 333
diff changeset
1777
3c7676b2b367 #if'd out code for F8 = toggle debug mode key.
Matti Hamalainen <ccr@tnsp.org>
parents: 333
diff changeset
1778 #if 0
3c7676b2b367 #if'd out code for F8 = toggle debug mode key.
Matti Hamalainen <ccr@tnsp.org>
parents: 333
diff changeset
1779 case KEY_F(8): /* F8 = Debug */
3c7676b2b367 #if'd out code for F8 = toggle debug mode key.
Matti Hamalainen <ccr@tnsp.org>
parents: 333
diff changeset
1780 optDebug = !optDebug;
3c7676b2b367 #if'd out code for F8 = toggle debug mode key.
Matti Hamalainen <ccr@tnsp.org>
parents: 333
diff changeset
1781 update = TRUE;
3c7676b2b367 #if'd out code for F8 = toggle debug mode key.
Matti Hamalainen <ccr@tnsp.org>
parents: 333
diff changeset
1782 break;
3c7676b2b367 #if'd out code for F8 = toggle debug mode key.
Matti Hamalainen <ccr@tnsp.org>
parents: 333
diff changeset
1783 #endif
103
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
1784
203
e7538539de7f Make ^C equivalent of quit (F9).
Matti Hamalainen <ccr@tnsp.org>
parents: 202
diff changeset
1785 case 0x03: /* ^C = quit */
208
6c5d136b6e6a Use curses KEY_F(n) macros for defining function keys instead of hardcoded values.
Matti Hamalainen <ccr@tnsp.org>
parents: 207
diff changeset
1786 case KEY_F(9): /* F9 = Quit */
385
bbd5edbf1143 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 381
diff changeset
1787 printMsg(currWin, "Quitting per user request (%d/0x%x).\n", c, c);
175
86904a43c339 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 174
diff changeset
1788 exitProg = TRUE;
86904a43c339 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 174
diff changeset
1789 break;
86904a43c339 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 174
diff changeset
1790
103
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
1791 case 0x09: /* Tab = complete username */
107
8037a3a7e491 Implement username tab-completion. It's still buggy, tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 104
diff changeset
1792 performTabCompletion(editBuf);
8037a3a7e491 Implement username tab-completion. It's still buggy, tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 104
diff changeset
1793 update = TRUE;
103
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
1794 break;
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
1795
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
1796 case 0x0c: /* Ctrl + L */
179
8c493b5671bd Add separate updateWindows() function.
Matti Hamalainen <ccr@tnsp.org>
parents: 175
diff changeset
1797 updateWindows();
320
42ddc8bda6a9 Sanitize RESIZE event.
Matti Hamalainen <ccr@tnsp.org>
parents: 319
diff changeset
1798 update = updateMain = TRUE;
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1799 break;
122
e564dd9df07c Change some key defines.
Matti Hamalainen <ccr@tnsp.org>
parents: 121
diff changeset
1800
e564dd9df07c Change some key defines.
Matti Hamalainen <ccr@tnsp.org>
parents: 121
diff changeset
1801 case KEY_NPAGE:
e564dd9df07c Change some key defines.
Matti Hamalainen <ccr@tnsp.org>
parents: 121
diff changeset
1802 case KEY_PPAGE:
326
2f7849e505f3 Fix backbuffer functionality.
Matti Hamalainen <ccr@tnsp.org>
parents: 325
diff changeset
1803 /* Page Up / Page Down */
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
1804 if (currWin != NULL)
230
b64500bb7fbe Some yet-unused backbuffer related code.
Matti Hamalainen <ccr@tnsp.org>
parents: 229
diff changeset
1805 {
326
2f7849e505f3 Fix backbuffer functionality.
Matti Hamalainen <ccr@tnsp.org>
parents: 325
diff changeset
1806 int oldPos = currWin->pos;
230
b64500bb7fbe Some yet-unused backbuffer related code.
Matti Hamalainen <ccr@tnsp.org>
parents: 229
diff changeset
1807
331
26097c5b9b71 Change how backbuffer offset is handled.
Matti Hamalainen <ccr@tnsp.org>
parents: 330
diff changeset
1808 currWin->pos += (c == KEY_NPAGE) ? -10 : +10;
26097c5b9b71 Change how backbuffer offset is handled.
Matti Hamalainen <ccr@tnsp.org>
parents: 330
diff changeset
1809
26097c5b9b71 Change how backbuffer offset is handled.
Matti Hamalainen <ccr@tnsp.org>
parents: 330
diff changeset
1810 if (currWin->pos < 0)
26097c5b9b71 Change how backbuffer offset is handled.
Matti Hamalainen <ccr@tnsp.org>
parents: 330
diff changeset
1811 currWin->pos = 0;
26097c5b9b71 Change how backbuffer offset is handled.
Matti Hamalainen <ccr@tnsp.org>
parents: 330
diff changeset
1812 else if (currWin->pos >= currWin->data->n - 10)
26097c5b9b71 Change how backbuffer offset is handled.
Matti Hamalainen <ccr@tnsp.org>
parents: 330
diff changeset
1813 currWin->pos = currWin->data->n - 10;
230
b64500bb7fbe Some yet-unused backbuffer related code.
Matti Hamalainen <ccr@tnsp.org>
parents: 229
diff changeset
1814
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
1815 if (oldPos != currWin->pos)
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
1816 updateMain = TRUE;
230
b64500bb7fbe Some yet-unused backbuffer related code.
Matti Hamalainen <ccr@tnsp.org>
parents: 229
diff changeset
1817 }
122
e564dd9df07c Change some key defines.
Matti Hamalainen <ccr@tnsp.org>
parents: 121
diff changeset
1818 break;
e564dd9df07c Change some key defines.
Matti Hamalainen <ccr@tnsp.org>
parents: 121
diff changeset
1819
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1820 case ERR:
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1821 /* Ignore */
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1822 break;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1823
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1824 default:
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1825 if (isprint(c) || c == 0xe4 || c == 0xf6 || c == 0xc4 || c == 0xd6) {
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1826 if (insertMode)
97
218efd2f0641 Rename functions for clarity.
Matti Hamalainen <ccr@tnsp.org>
parents: 96
diff changeset
1827 nn_editbuf_insert(editBuf, editBuf->pos, c);
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1828 else
97
218efd2f0641 Rename functions for clarity.
Matti Hamalainen <ccr@tnsp.org>
parents: 96
diff changeset
1829 nn_editbuf_write(editBuf, editBuf->pos, c);
218efd2f0641 Rename functions for clarity.
Matti Hamalainen <ccr@tnsp.org>
parents: 96
diff changeset
1830 nn_editbuf_setpos(editBuf, editBuf->pos + 1);
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1831 update = TRUE;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1832 } else {
298
0119bcc15f15 Another unhandled key warning disabled when debug mode not enabled.
Matti Hamalainen <ccr@tnsp.org>
parents: 297
diff changeset
1833 if (optDebug)
0119bcc15f15 Another unhandled key warning disabled when debug mode not enabled.
Matti Hamalainen <ccr@tnsp.org>
parents: 297
diff changeset
1834 printMsg(currWin, "Unhandled key: 0x%02x\n", c);
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1835 }
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1836 break;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1837 }
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1838 } while (c != ERR && !exitProg && ++cnt < 10);
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1839
389
19cb995994c9 Change screen update strategy a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 388
diff changeset
1840 updateMainWin(updateMain);
19cb995994c9 Change screen update strategy a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 388
diff changeset
1841
221
f6160051b72e Rename a variable.
Matti Hamalainen <ccr@tnsp.org>
parents: 218
diff changeset
1842 if (update || firstUpdate) {
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1843 /* Update edit line */
389
19cb995994c9 Change screen update strategy a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 388
diff changeset
1844 updateStatus();
291
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
1845 printEditBuf(editBuf);
221
f6160051b72e Rename a variable.
Matti Hamalainen <ccr@tnsp.org>
parents: 218
diff changeset
1846 firstUpdate = FALSE; /* a nasty hack ... */
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1847 }
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
1848
275
66b90d71548b Improve interactive prompts, etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 273
diff changeset
1849 } /* cursesInit */
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1850
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1851 if (++updateCount > 10) {
96
7c9538e71c89 Add connection keepalive by sending /listallusers every 15 minutes,
Matti Hamalainen <ccr@tnsp.org>
parents: 92
diff changeset
1852 time_t tmpTime = time(NULL);
7c9538e71c89 Add connection keepalive by sending /listallusers every 15 minutes,
Matti Hamalainen <ccr@tnsp.org>
parents: 92
diff changeset
1853 if (tmpTime - prevTime > SET_KEEPALIVE) {
264
4c1c18a388d9 Add configuration setting and functionality for random "keepalive" messages to avoid idle timeout kicks from chat.
Matti Hamalainen <ccr@tnsp.org>
parents: 258
diff changeset
1854 int n = random() % th_llist_length(setIdleMessages);
4c1c18a388d9 Add configuration setting and functionality for random "keepalive" messages to avoid idle timeout kicks from chat.
Matti Hamalainen <ccr@tnsp.org>
parents: 258
diff changeset
1855 qlist_t *node = th_llist_get_nth(setIdleMessages, n);
4c1c18a388d9 Add configuration setting and functionality for random "keepalive" messages to avoid idle timeout kicks from chat.
Matti Hamalainen <ccr@tnsp.org>
parents: 258
diff changeset
1856 nn_conn_send_msg(conn, optUserNameEnc, node->data);
96
7c9538e71c89 Add connection keepalive by sending /listallusers every 15 minutes,
Matti Hamalainen <ccr@tnsp.org>
parents: 92
diff changeset
1857 prevTime = tmpTime;
7c9538e71c89 Add connection keepalive by sending /listallusers every 15 minutes,
Matti Hamalainen <ccr@tnsp.org>
parents: 92
diff changeset
1858 }
7c9538e71c89 Add connection keepalive by sending /listallusers every 15 minutes,
Matti Hamalainen <ccr@tnsp.org>
parents: 92
diff changeset
1859
7c9538e71c89 Add connection keepalive by sending /listallusers every 15 minutes,
Matti Hamalainen <ccr@tnsp.org>
parents: 92
diff changeset
1860 if (!colorSet) {
7c9538e71c89 Add connection keepalive by sending /listallusers every 15 minutes,
Matti Hamalainen <ccr@tnsp.org>
parents: 92
diff changeset
1861 colorSet = TRUE;
198
21a37995c3fb Make configuration username/password overridable on command line.
Matti Hamalainen <ccr@tnsp.org>
parents: 197
diff changeset
1862 nn_conn_send_msg(conn, optUserNameEnc, "%%2FSetFontColor%%20%%2Dcolor%%20%06X", optUserColor);
96
7c9538e71c89 Add connection keepalive by sending /listallusers every 15 minutes,
Matti Hamalainen <ccr@tnsp.org>
parents: 92
diff changeset
1863 }
7c9538e71c89 Add connection keepalive by sending /listallusers every 15 minutes,
Matti Hamalainen <ccr@tnsp.org>
parents: 92
diff changeset
1864
291
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
1865 updateStatus();
389
19cb995994c9 Change screen update strategy a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 388
diff changeset
1866 printEditBuf(editBuf);
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1867 updateCount = 0;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1868 }
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1869
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1870 }
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1871
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1872 /* Shutdown */
13
86fe5f0d1a85 Cleanups; Added probing connection (requesting some policy crap) to emulate the official client.
Matti Hamalainen <ccr@tnsp.org>
parents: 12
diff changeset
1873 err_exit:
316
1065115665bd Plug some more minor memory leaks.
Matti Hamalainen <ccr@tnsp.org>
parents: 315
diff changeset
1874 th_cfg_free(cfg);
308
e2da8c812f56 Free homeDir variable.
Matti Hamalainen <ccr@tnsp.org>
parents: 303
diff changeset
1875 th_free(homeDir);
316
1065115665bd Plug some more minor memory leaks.
Matti Hamalainen <ccr@tnsp.org>
parents: 315
diff changeset
1876 th_llist_free_func(setIdleMessages, th_free);
103
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
1877 nn_userhash_free(nnUsers);
97
218efd2f0641 Rename functions for clarity.
Matti Hamalainen <ccr@tnsp.org>
parents: 96
diff changeset
1878 nn_editbuf_free(editBuf);
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
1879
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
1880 {
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
1881 int i;
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
1882 for (i = 0; i <= SET_MAX_HISTORY; i++)
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
1883 nn_editbuf_free(histBuf[i]);
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
1884
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
1885 for (i = 0; i < SET_MAX_WINDOWS; i++)
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
1886 nn_window_free(chatWindows[i]);
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
1887 }
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
1888
291
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
1889 #ifdef __WIN32
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
1890 if (errorMessages) {
275
66b90d71548b Improve interactive prompts, etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 273
diff changeset
1891 char *tmp;
66b90d71548b Improve interactive prompts, etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 273
diff changeset
1892 wclear(editWin);
66b90d71548b Improve interactive prompts, etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 273
diff changeset
1893 tmp = promptRequester(editWin, "Press enter to quit.\n", FALSE);
268
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1894 th_free(tmp);
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1895 }
291
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
1896 #endif
268
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1897
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1898 if (cursesInit) {
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1899 if (curVis != ERR)
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1900 curs_set(curVis);
155
0720ca51673e Plug some minor "memory leaks" related to curses.
Matti Hamalainen <ccr@tnsp.org>
parents: 154
diff changeset
1901 closeWindows();
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1902 endwin();
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1903 THMSG(1, "NCurses deinitialized.\n");
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1904 }
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1905
268
d04ea4395e9e Move username and password prompting into the Curses interface, also move Curses initialization to earlier phase.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1906 #ifndef __WIN32
223
03af28fb1c38 Show error messages printed out to stderr only after the program has quit.
Matti Hamalainen <ccr@tnsp.org>
parents: 222
diff changeset
1907 if (errorMessages)
03af28fb1c38 Show error messages printed out to stderr only after the program has quit.
Matti Hamalainen <ccr@tnsp.org>
parents: 222
diff changeset
1908 THERR("%s", errorMessages);
222
a1fefbce0b7a Add a simple 'press enter to continue' for Windows port, when an error occurs so the user can see it before the application closes.
Matti Hamalainen <ccr@tnsp.org>
parents: 221
diff changeset
1909 #endif
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1910
198
21a37995c3fb Make configuration username/password overridable on command line.
Matti Hamalainen <ccr@tnsp.org>
parents: 197
diff changeset
1911 th_free(optUserNameEnc);
10
53e127854dca WinSock support fixes.
Matti Hamalainen <ccr@tnsp.org>
parents: 9
diff changeset
1912
168
2e4850ece456 Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 165
diff changeset
1913 nn_conn_close(conn);
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1914
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1915 if (networkInit)
97
218efd2f0641 Rename functions for clarity.
Matti Hamalainen <ccr@tnsp.org>
parents: 96
diff changeset
1916 nn_network_close();
68
3ab7751fdad1 MingW compatibility, with one ugly kludge.
Matti Hamalainen <ccr@tnsp.org>
parents: 67
diff changeset
1917
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1918 THMSG(1, "Connection terminated.\n");
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1919
242
cb86d7543be2 Add functionality for generating logfile names based on port etc. and
Matti Hamalainen <ccr@tnsp.org>
parents: 240
diff changeset
1920 logFileClose();
133
ffe8bbd429fa Config file.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
1921
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1922 return 0;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1923 }